diff --git a/.env.example.complete b/.env.example.complete index 547e8181882..0853bd1fecb 100644 --- a/.env.example.complete +++ b/.env.example.complete @@ -72,7 +72,7 @@ MYSQL_ATTR_SSL_CA="/path/to/ca.pem" # Mail configuration # Refer to https://www.bookstackapp.com/docs/admin/email-webhooks/#email-configuration MAIL_DRIVER=smtp -MAIL_FROM=mail@bookstackapp.com +MAIL_FROM=bookstack@example.com MAIL_FROM_NAME=BookStack MAIL_HOST=localhost diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 5c8734fd6c1..d301826c9c6 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,7 +1,14 @@ name: Bug Report -description: Create a report to help us improve or fix things +description: Create a report to help us fix bugs & issues in existing supported functionality labels: [":bug: Bug"] body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out a bug report! + Please note that this form is for reporting bugs in existing supported functionality. + + If you are reporting something that's not an issue in functionality we've previously supported and/or is simply something different to your expectations, then it may be more appropriate to raise via a feature or support request instead. - type: textarea id: description attributes: @@ -13,7 +20,7 @@ body: id: reproduction attributes: label: Steps to Reproduce - description: Detail the steps that would replicate this issue + description: Detail the steps that would replicate this issue. placeholder: | 1. Go to '...' 2. Click on '....' @@ -32,7 +39,7 @@ body: id: context attributes: label: Screenshots or Additional Context - description: Provide any additional context and screenshots here to help us solve this issue + description: Provide any additional context and screenshots here to help us solve this issue. validations: required: false - type: input @@ -48,23 +55,7 @@ body: id: bsversion attributes: label: Exact BookStack Version - description: This can be found in the settings view of BookStack. Please provide an exact version. - placeholder: (eg. v21.08.5) - validations: - required: true - - type: input - id: phpversion - attributes: - label: PHP Version - description: Keep in mind your command-line PHP version may differ to that of your webserver. Provide that relevant to the issue. - placeholder: (eg. 7.4) - validations: - required: false - - type: textarea - id: hosting - attributes: - label: Hosting Environment - description: Describe your hosting environment as much as possible including any proxies used (If applicable). - placeholder: (eg. Ubuntu 20.04 VPS, installed using official installation script) + description: This can be found in the settings view of BookStack. Please provide an exact version(s) you've tested on. + placeholder: (eg. v23.06.7) validations: required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index fb1e0b3b047..0ebb8e72f29 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -33,9 +33,9 @@ body: attributes: label: Have you searched for an existing open/closed issue? description: | - To help us keep these issues under control, please ensure you have first [searched our issue list](https://github.com/BookStackApp/BookStack/issues?q=is%3Aissue) for any existing issues that cover the fundemental benefit/goal of your request. + To help us keep these issues under control, please ensure you have first [searched our issue list](https://github.com/BookStackApp/BookStack/issues?q=is%3Aissue) for any existing issues that cover the fundamental benefit/goal of your request. options: - - label: I have searched for existing issues and none cover my fundemental request + - label: I have searched for existing issues and none cover my fundamental request required: true - type: dropdown id: existing_usage @@ -43,8 +43,8 @@ body: label: How long have you been using BookStack? options: - Not using yet, just scoping - - 0 to 6 months - - 6 months to 1 year + - Under 3 months + - 3 months to 1 year - 1 to 5 years - Over 5 years validations: diff --git a/.github/ISSUE_TEMPLATE/support_request.yml b/.github/ISSUE_TEMPLATE/support_request.yml index cb247654683..4db8d1cedc5 100644 --- a/.github/ISSUE_TEMPLATE/support_request.yml +++ b/.github/ISSUE_TEMPLATE/support_request.yml @@ -33,7 +33,7 @@ body: attributes: label: Exact BookStack Version description: This can be found in the settings view of BookStack. Please provide an exact version. - placeholder: (eg. v21.08.5) + placeholder: (eg. v23.06.7) validations: required: true - type: textarea @@ -44,19 +44,11 @@ body: placeholder: Be sure to remove any confidential details in your logs validations: required: false - - type: input - id: phpversion - attributes: - label: PHP Version - description: Keep in mind your command-line PHP version may differ to that of your webserver. Provide that most relevant to the issue. - placeholder: (eg. 7.4) - validations: - required: false - type: textarea id: hosting attributes: label: Hosting Environment description: Describe your hosting environment as much as possible including any proxies used (If applicable). - placeholder: (eg. Ubuntu 20.04 VPS, installed using official installation script) + placeholder: (eg. PHP8.1 on Ubuntu 22.04 VPS, installed using official installation script) validations: required: true diff --git a/.github/SECURITY.md b/.github/SECURITY.md index c2201a628da..12e5fe04c6d 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -15,18 +15,13 @@ If you'd like to be notified of new potential security concerns you can [sign-up If you've found an issue that likely has no impact to existing users (For example, in a development-only branch) feel free to raise it via a standard GitHub bug report issue. -If the issue could have a security impact to BookStack instances, please use one of the below -methods to report the vulnerability: - -- Directly contact the lead maintainer [@ssddanbrown](https://github.com/ssddanbrown). - - You will need to login to be able to see the email address on the [GitHub profile page](https://github.com/ssddanbrown). - - Alternatively you can send a DM via Twitter to [@ssddanbrown](https://twitter.com/ssddanbrown). -- [Disclose via huntr.dev](https://huntr.dev/bounties/disclose) - - Bounties may be available to you through this platform. - - Be sure to use `https://github.com/BookStackApp/BookStack` as the repository URL. +If the issue could have a security impact to BookStack instances, +please directly contact the lead maintainer [@ssddanbrown](https://github.com/ssddanbrown). +You will need to log in to be able to see the email address on the [GitHub profile page](https://github.com/ssddanbrown). +Alternatively you can send a DM via Mastodon to [@danb@fosstodon.org](https://fosstodon.org/@danb). Please be patient while the vulnerability is being reviewed. Deploying the fix to address the vulnerability can often take a little time due to the amount of preparation required, to ensure the vulnerability has been covered, and to create the content required to adequately notify the user-base. -Thank you for keeping BookStack instances safe! \ No newline at end of file +Thank you for keeping BookStack instances safe! diff --git a/.github/translators.txt b/.github/translators.txt index 3f73d718385..6bb9de2595e 100644 --- a/.github/translators.txt +++ b/.github/translators.txt @@ -57,6 +57,7 @@ Name :: Languages @Jokuna :: Korean @smartshogu :: German; German Informal @samadha56 :: Persian +@mrmuminov :: Uzbek cipi1965 :: Italian Mykola Ronik (Mantikor) :: Ukrainian furkanoyk :: Turkish @@ -176,7 +177,7 @@ Alexander Predl (Harveyhase68) :: German Rem (Rem9000) :: Dutch Michał Stelmach (stelmach-web) :: Polish arniom :: French -REMOVED_USER :: ; French; Dutch; Turkish +REMOVED_USER :: French; Dutch; Turkish; 林祖年 (contagion) :: Chinese Traditional Siamak Guodarzi (siamakgoudarzi88) :: Persian Lis Maestrelo (lismtrl) :: Portuguese, Brazilian @@ -269,7 +270,7 @@ mcgong (GongMingCai) :: Chinese Simplified; Chinese Traditional Nanang Setia Budi (sefidananang) :: Indonesian Андрей Павлов (andrei.pavlov) :: Russian Alex Navarro (alex.n.navarro) :: Portuguese, Brazilian -Ji-Hyeon Gim (PotatoGim) :: Korean +Jihyeon Gim (PotatoGim) :: Korean Mihai Ochian (soulstorm19) :: Romanian HeartCore :: German Informal; German simon.pct :: French @@ -289,7 +290,7 @@ Ismael Mesquita (mesquitoliveira) :: Portuguese, Brazilian LiZerui (CNLiZerui) :: Chinese Traditional Fabrice Boyer (FabriceBoyer) :: French mikael (bitcanon) :: Swedish -Matthias Mai (schnapsidee) :: German; German Informal +Matthias Mai (schnapsidee) :: German Informal; German Ufuk Ayyıldız (ufukayyildiz) :: Turkish Jan Mitrof (jan.kachlik) :: Czech edwardsmirnov :: Russian @@ -347,7 +348,7 @@ robing29 :: German Bruno Eduardo de Jesus Barroso (brunoejb) :: Portuguese, Brazilian Igor V Belousov (biv) :: Russian David Bauer (davbauer) :: German -Guttorm Hveem (guttormhveem) :: Norwegian Bokmal +Guttorm Hveem (guttormhveem) :: Norwegian Nynorsk; Norwegian Bokmal Minh Giang Truong (minhgiang1204) :: Vietnamese Ioannis Ioannides (i.ioannides) :: Greek Vadim (vadrozh) :: Russian @@ -356,4 +357,17 @@ Paulo Henrique (paulohsantos114) :: Portuguese, Brazilian Dženan (Dzenan) :: Swedish Péter Péli (peter.peli) :: Hungarian TWME :: Chinese Traditional -Sascha (Man-in-Black) :: German +Sascha (Man-in-Black) :: German; German Informal +Mohammadreza Madadi (madadi.efl) :: Persian +Konstantin (kkovacheli) :: Ukrainian; Russian +link1183 :: French +Renan (rfpe) :: Portuguese, Brazilian +Lowkey (bbsweb) :: Chinese Simplified +ZZnOB (zznobzz) :: Russian +rupus :: Swedish +developernecsys :: Norwegian Nynorsk +xuan LI (xuanli233) :: Chinese Simplified +LameeQS :: Latvian +Sorin T. (trimbitassorin) :: Romanian +poesty :: Chinese Simplified +balmag :: Hungarian diff --git a/.github/workflows/analyse-php.yml b/.github/workflows/analyse-php.yml index fd56a53ef9a..4ddf519328c 100644 --- a/.github/workflows/analyse-php.yml +++ b/.github/workflows/analyse-php.yml @@ -1,6 +1,12 @@ name: analyse-php -on: [push, pull_request] +on: + push: + paths: + - '**.php' + pull_request: + paths: + - '**.php' jobs: build: diff --git a/.github/workflows/lint-js.yml b/.github/workflows/lint-js.yml index a8bd8abb1b6..0391ce5b5c6 100644 --- a/.github/workflows/lint-js.yml +++ b/.github/workflows/lint-js.yml @@ -1,6 +1,14 @@ name: lint-js -on: [push, pull_request] +on: + push: + paths: + - '**.js' + - '**.json' + pull_request: + paths: + - '**.js' + - '**.json' jobs: build: diff --git a/.github/workflows/lint-php.yml b/.github/workflows/lint-php.yml index 75d18b60d76..b2f8b3d2b4a 100644 --- a/.github/workflows/lint-php.yml +++ b/.github/workflows/lint-php.yml @@ -1,6 +1,12 @@ name: lint-php -on: [push, pull_request] +on: + push: + paths: + - '**.php' + pull_request: + paths: + - '**.php' jobs: build: diff --git a/.github/workflows/test-migrations.yml b/.github/workflows/test-migrations.yml index 08e9ba6ef76..63f52a29506 100644 --- a/.github/workflows/test-migrations.yml +++ b/.github/workflows/test-migrations.yml @@ -1,6 +1,14 @@ name: test-migrations -on: [push, pull_request] +on: + push: + paths: + - '**.php' + - 'composer.*' + pull_request: + paths: + - '**.php' + - 'composer.*' jobs: build: @@ -8,7 +16,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - php: ['8.0', '8.1', '8.2'] + php: ['8.0', '8.1', '8.2', '8.3'] steps: - uses: actions/checkout@v1 diff --git a/.github/workflows/test-php.yml b/.github/workflows/test-php.yml index 96a01f9c984..89ebf0deceb 100644 --- a/.github/workflows/test-php.yml +++ b/.github/workflows/test-php.yml @@ -1,6 +1,14 @@ name: test-php -on: [push, pull_request] +on: + push: + paths: + - '**.php' + - 'composer.*' + pull_request: + paths: + - '**.php' + - 'composer.*' jobs: build: @@ -8,7 +16,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - php: ['8.0', '8.1', '8.2'] + php: ['8.0', '8.1', '8.2', '8.3'] steps: - uses: actions/checkout@v1 diff --git a/app/Access/Controllers/SocialController.php b/app/Access/Controllers/SocialController.php index 3df895dd8ff..ff6d5c2ddd2 100644 --- a/app/Access/Controllers/SocialController.php +++ b/app/Access/Controllers/SocialController.php @@ -16,22 +16,12 @@ class SocialController extends Controller { - protected SocialAuthService $socialAuthService; - protected RegistrationService $registrationService; - protected LoginService $loginService; - - /** - * SocialController constructor. - */ public function __construct( - SocialAuthService $socialAuthService, - RegistrationService $registrationService, - LoginService $loginService + protected SocialAuthService $socialAuthService, + protected RegistrationService $registrationService, + protected LoginService $loginService, ) { $this->middleware('guest')->only(['register']); - $this->socialAuthService = $socialAuthService; - $this->registrationService = $registrationService; - $this->loginService = $loginService; } /** @@ -112,7 +102,7 @@ public function detach(string $socialDriver) $this->socialAuthService->detachSocialAccount($socialDriver); session()->flash('success', trans('settings.users_social_disconnected', ['socialAccount' => Str::title($socialDriver)])); - return redirect(user()->getEditUrl()); + return redirect('/my-account/auth#social-accounts'); } /** diff --git a/app/Access/Controllers/ThrottlesLogins.php b/app/Access/Controllers/ThrottlesLogins.php index 2a066dab502..25c3452f25e 100644 --- a/app/Access/Controllers/ThrottlesLogins.php +++ b/app/Access/Controllers/ThrottlesLogins.php @@ -71,7 +71,7 @@ protected function throttleKey(Request $request): string */ protected function limiter(): RateLimiter { - return app(RateLimiter::class); + return app()->make(RateLimiter::class); } /** diff --git a/app/Access/EmailConfirmationService.php b/app/Access/EmailConfirmationService.php index 79220f99666..de9ea69b882 100644 --- a/app/Access/EmailConfirmationService.php +++ b/app/Access/EmailConfirmationService.php @@ -2,8 +2,8 @@ namespace BookStack\Access; +use BookStack\Access\Notifications\ConfirmEmailNotification; use BookStack\Exceptions\ConfirmationEmailException; -use BookStack\Notifications\ConfirmEmail; use BookStack\Users\Models\User; class EmailConfirmationService extends UserTokenService @@ -26,7 +26,7 @@ public function sendConfirmation(User $user) $this->deleteByUser($user); $token = $this->createTokenForUser($user); - $user->notify(new ConfirmEmail($token)); + $user->notify(new ConfirmEmailNotification($token)); } /** diff --git a/app/Notifications/ConfirmEmail.php b/app/Access/Notifications/ConfirmEmailNotification.php similarity index 82% rename from app/Notifications/ConfirmEmail.php rename to app/Access/Notifications/ConfirmEmailNotification.php index 6b395e137f0..c67e1cf6283 100644 --- a/app/Notifications/ConfirmEmail.php +++ b/app/Access/Notifications/ConfirmEmailNotification.php @@ -1,11 +1,12 @@ setting('app-name')]; + $locale = $notifiable->getLocale(); + + return $this->newMailMessage($locale) + ->subject($locale->trans('auth.user_invite_email_subject', $appName)) + ->greeting($locale->trans('auth.user_invite_email_greeting', $appName)) + ->line($locale->trans('auth.user_invite_email_text')) + ->action($locale->trans('auth.user_invite_email_action'), url('/register/invite/' . $this->token)); + } +} diff --git a/app/Access/Oidc/OidcOAuthProvider.php b/app/Access/Oidc/OidcOAuthProvider.php index 2ed8cd5c972..d2dc829b729 100644 --- a/app/Access/Oidc/OidcOAuthProvider.php +++ b/app/Access/Oidc/OidcOAuthProvider.php @@ -20,15 +20,8 @@ class OidcOAuthProvider extends AbstractProvider { use BearerAuthorizationTrait; - /** - * @var string - */ - protected $authorizationEndpoint; - - /** - * @var string - */ - protected $tokenEndpoint; + protected string $authorizationEndpoint; + protected string $tokenEndpoint; /** * Scopes to use for the OIDC authorization call. @@ -60,7 +53,7 @@ public function getResourceOwnerDetailsUrl(AccessToken $token): string } /** - * Add an additional scope to this provider upon the default. + * Add another scope to this provider upon the default. */ public function addScope(string $scope): void { diff --git a/app/Access/Oidc/OidcProviderSettings.php b/app/Access/Oidc/OidcProviderSettings.php index 9c8b1b26472..fa3f579b18a 100644 --- a/app/Access/Oidc/OidcProviderSettings.php +++ b/app/Access/Oidc/OidcProviderSettings.php @@ -59,7 +59,7 @@ protected function validateInitial() } } - if (strpos($this->issuer, 'https://') !== 0) { + if (!str_starts_with($this->issuer, 'https://')) { throw new InvalidArgumentException('Issuer value must start with https://'); } } diff --git a/app/Access/Oidc/OidcService.php b/app/Access/Oidc/OidcService.php index 6d13fe8f169..8778cbd98c2 100644 --- a/app/Access/Oidc/OidcService.php +++ b/app/Access/Oidc/OidcService.php @@ -9,13 +9,13 @@ use BookStack\Exceptions\StoppedAuthenticationException; use BookStack\Exceptions\UserRegistrationException; use BookStack\Facades\Theme; +use BookStack\Http\HttpRequestService; use BookStack\Theming\ThemeEvents; use BookStack\Users\Models\User; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Cache; use League\OAuth2\Client\OptionProvider\HttpBasicAuthOptionProvider; use League\OAuth2\Client\Provider\Exception\IdentityProviderException; -use Psr\Http\Client\ClientInterface as HttpClient; /** * Class OpenIdConnectService @@ -26,7 +26,7 @@ class OidcService public function __construct( protected RegistrationService $registrationService, protected LoginService $loginService, - protected HttpClient $httpClient, + protected HttpRequestService $http, protected GroupSyncService $groupService ) { } @@ -94,7 +94,7 @@ protected function getProviderSettings(): OidcProviderSettings // Run discovery if ($config['discover'] ?? false) { try { - $settings->discoverFromIssuer($this->httpClient, Cache::store(null), 15); + $settings->discoverFromIssuer($this->http->buildClient(5), Cache::store(null), 15); } catch (OidcIssuerDiscoveryException $exception) { throw new OidcException('OIDC Discovery Error: ' . $exception->getMessage()); } @@ -111,7 +111,7 @@ protected function getProviderSettings(): OidcProviderSettings protected function getProvider(OidcProviderSettings $settings): OidcOAuthProvider { $provider = new OidcOAuthProvider($settings->arrayForProvider(), [ - 'httpClient' => $this->httpClient, + 'httpClient' => $this->http->buildClient(5), 'optionProvider' => new HttpBasicAuthOptionProvider(), ]); @@ -142,10 +142,11 @@ protected function getAdditionalScopes(): array */ protected function getUserDisplayName(OidcIdToken $token, string $defaultValue): string { - $displayNameAttr = $this->config()['display_name_claims']; + $displayNameAttrString = $this->config()['display_name_claims'] ?? ''; + $displayNameAttrs = explode('|', $displayNameAttrString); $displayName = []; - foreach ($displayNameAttr as $dnAttr) { + foreach ($displayNameAttrs as $dnAttr) { $dnComponent = $token->getClaim($dnAttr) ?? ''; if ($dnComponent !== '') { $displayName[] = $dnComponent; diff --git a/app/Access/SocialAuthService.php b/app/Access/SocialAuthService.php index 24a04ef7e0b..f0e0413f092 100644 --- a/app/Access/SocialAuthService.php +++ b/app/Access/SocialAuthService.php @@ -154,21 +154,21 @@ public function handleLoginCallback(string $socialDriver, SocialUser $socialUser $currentUser->socialAccounts()->save($account); session()->flash('success', trans('settings.users_social_connected', ['socialAccount' => $titleCaseDriver])); - return redirect($currentUser->getEditUrl()); + return redirect('/my-account/auth#social_accounts'); } // When a user is logged in and the social account exists and is already linked to the current user. if ($isLoggedIn && $socialAccount !== null && $socialAccount->user->id === $currentUser->id) { session()->flash('error', trans('errors.social_account_existing', ['socialAccount' => $titleCaseDriver])); - return redirect($currentUser->getEditUrl()); + return redirect('/my-account/auth#social_accounts'); } // When a user is logged in, A social account exists but the users do not match. if ($isLoggedIn && $socialAccount !== null && $socialAccount->user->id != $currentUser->id) { session()->flash('error', trans('errors.social_account_already_used_existing', ['socialAccount' => $titleCaseDriver])); - return redirect($currentUser->getEditUrl()); + return redirect('/my-account/auth#social_accounts'); } // Otherwise let the user know this social account is not used by anyone. @@ -214,6 +214,7 @@ protected function checkDriverConfigured(string $driver): bool /** * Gets the names of the active social drivers. + * @returns array */ public function getActiveDrivers(): array { diff --git a/app/Access/UserInviteService.php b/app/Access/UserInviteService.php index 00e361e827f..7d955f3851d 100644 --- a/app/Access/UserInviteService.php +++ b/app/Access/UserInviteService.php @@ -2,7 +2,7 @@ namespace BookStack\Access; -use BookStack\Notifications\UserInvite; +use BookStack\Access\Notifications\UserInviteNotification; use BookStack\Users\Models\User; class UserInviteService extends UserTokenService @@ -18,6 +18,6 @@ public function sendInvitation(User $user) { $this->deleteByUser($user); $token = $this->createTokenForUser($user); - $user->notify(new UserInvite($token)); + $user->notify(new UserInviteNotification($token)); } } diff --git a/app/Activity/Controllers/FavouriteController.php b/app/Activity/Controllers/FavouriteController.php index 1b88ffd643a..d2534ddfe09 100644 --- a/app/Activity/Controllers/FavouriteController.php +++ b/app/Activity/Controllers/FavouriteController.php @@ -6,11 +6,17 @@ use BookStack\App\Model; use BookStack\Entities\Models\Entity; use BookStack\Entities\Queries\TopFavourites; +use BookStack\Entities\Tools\MixedEntityRequestHelper; use BookStack\Http\Controller; use Illuminate\Http\Request; class FavouriteController extends Controller { + public function __construct( + protected MixedEntityRequestHelper $entityHelper, + ) { + } + /** * Show a listing of all favourite items for the current user. */ @@ -36,13 +42,14 @@ public function index(Request $request) */ public function add(Request $request) { - $favouritable = $this->getValidatedModelFromRequest($request); - $favouritable->favourites()->firstOrCreate([ + $modelInfo = $this->validate($request, $this->entityHelper->validationRules()); + $entity = $this->entityHelper->getVisibleEntityFromRequestData($modelInfo); + $entity->favourites()->firstOrCreate([ 'user_id' => user()->id, ]); $this->showSuccessNotification(trans('activities.favourite_add_notification', [ - 'name' => $favouritable->name, + 'name' => $entity->name, ])); return redirect()->back(); @@ -53,48 +60,16 @@ public function add(Request $request) */ public function remove(Request $request) { - $favouritable = $this->getValidatedModelFromRequest($request); - $favouritable->favourites()->where([ + $modelInfo = $this->validate($request, $this->entityHelper->validationRules()); + $entity = $this->entityHelper->getVisibleEntityFromRequestData($modelInfo); + $entity->favourites()->where([ 'user_id' => user()->id, ])->delete(); $this->showSuccessNotification(trans('activities.favourite_remove_notification', [ - 'name' => $favouritable->name, + 'name' => $entity->name, ])); return redirect()->back(); } - - /** - * @throws \Illuminate\Validation\ValidationException - * @throws \Exception - */ - protected function getValidatedModelFromRequest(Request $request): Entity - { - $modelInfo = $this->validate($request, [ - 'type' => ['required', 'string'], - 'id' => ['required', 'integer'], - ]); - - if (!class_exists($modelInfo['type'])) { - throw new \Exception('Model not found'); - } - - /** @var Model $model */ - $model = new $modelInfo['type'](); - if (!$model instanceof Favouritable) { - throw new \Exception('Model not favouritable'); - } - - $modelInstance = $model->newQuery() - ->where('id', '=', $modelInfo['id']) - ->first(['id', 'name', 'owned_by']); - - $inaccessibleEntity = ($modelInstance instanceof Entity && !userCan('view', $modelInstance)); - if (is_null($modelInstance) || $inaccessibleEntity) { - throw new \Exception('Model instance not found'); - } - - return $modelInstance; - } } diff --git a/app/Activity/Controllers/WatchController.php b/app/Activity/Controllers/WatchController.php index 3d7e18116be..c0b1c587249 100644 --- a/app/Activity/Controllers/WatchController.php +++ b/app/Activity/Controllers/WatchController.php @@ -3,25 +3,22 @@ namespace BookStack\Activity\Controllers; use BookStack\Activity\Tools\UserEntityWatchOptions; -use BookStack\App\Model; -use BookStack\Entities\Models\Entity; +use BookStack\Entities\Tools\MixedEntityRequestHelper; use BookStack\Http\Controller; -use Exception; use Illuminate\Http\Request; -use Illuminate\Validation\ValidationException; class WatchController extends Controller { - public function update(Request $request) + public function update(Request $request, MixedEntityRequestHelper $entityHelper) { $this->checkPermission('receive-notifications'); $this->preventGuestAccess(); - $requestData = $this->validate($request, [ + $requestData = $this->validate($request, array_merge([ 'level' => ['required', 'string'], - ]); + ], $entityHelper->validationRules())); - $watchable = $this->getValidatedModelFromRequest($request); + $watchable = $entityHelper->getVisibleEntityFromRequestData($requestData); $watchOptions = new UserEntityWatchOptions(user(), $watchable); $watchOptions->updateLevelByName($requestData['level']); @@ -29,37 +26,4 @@ public function update(Request $request) return redirect()->back(); } - - /** - * @throws ValidationException - * @throws Exception - */ - protected function getValidatedModelFromRequest(Request $request): Entity - { - $modelInfo = $this->validate($request, [ - 'type' => ['required', 'string'], - 'id' => ['required', 'integer'], - ]); - - if (!class_exists($modelInfo['type'])) { - throw new Exception('Model not found'); - } - - /** @var Model $model */ - $model = new $modelInfo['type'](); - if (!$model instanceof Entity) { - throw new Exception('Model not an entity'); - } - - $modelInstance = $model->newQuery() - ->where('id', '=', $modelInfo['id']) - ->first(['id', 'name', 'owned_by']); - - $inaccessibleEntity = ($modelInstance instanceof Entity && !userCan('view', $modelInstance)); - if (is_null($modelInstance) || $inaccessibleEntity) { - throw new Exception('Model instance not found'); - } - - return $modelInstance; - } } diff --git a/app/Activity/DispatchWebhookJob.php b/app/Activity/DispatchWebhookJob.php index 405bca49cbe..e1771b114cf 100644 --- a/app/Activity/DispatchWebhookJob.php +++ b/app/Activity/DispatchWebhookJob.php @@ -6,6 +6,7 @@ use BookStack\Activity\Models\Webhook; use BookStack\Activity\Tools\WebhookFormatter; use BookStack\Facades\Theme; +use BookStack\Http\HttpRequestService; use BookStack\Theming\ThemeEvents; use BookStack\Users\Models\User; use BookStack\Util\SsrUrlValidator; @@ -14,7 +15,6 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; class DispatchWebhookJob implements ShouldQueue @@ -49,25 +49,28 @@ public function __construct(Webhook $webhook, string $event, Loggable|string $de * * @return void */ - public function handle() + public function handle(HttpRequestService $http) { $lastError = null; try { (new SsrUrlValidator())->ensureAllowed($this->webhook->endpoint); - $response = Http::asJson() - ->withOptions(['allow_redirects' => ['strict' => true]]) - ->timeout($this->webhook->timeout) - ->post($this->webhook->endpoint, $this->webhookData); - } catch (\Exception $exception) { - $lastError = $exception->getMessage(); - Log::error("Webhook call to endpoint {$this->webhook->endpoint} failed with error \"{$lastError}\""); - } + $client = $http->buildClient($this->webhook->timeout, [ + 'connect_timeout' => 10, + 'allow_redirects' => ['strict' => true], + ]); - if (isset($response) && $response->failed()) { - $lastError = "Response status from endpoint was {$response->status()}"; - Log::error("Webhook call to endpoint {$this->webhook->endpoint} failed with status {$response->status()}"); + $response = $client->sendRequest($http->jsonRequest('POST', $this->webhook->endpoint, $this->webhookData)); + $statusCode = $response->getStatusCode(); + + if ($statusCode >= 400) { + $lastError = "Response status from endpoint was {$statusCode}"; + Log::error("Webhook call to endpoint {$this->webhook->endpoint} failed with status {$statusCode}"); + } + } catch (\Exception $error) { + $lastError = $error->getMessage(); + Log::error("Webhook call to endpoint {$this->webhook->endpoint} failed with error \"{$lastError}\""); } $this->webhook->last_called_at = now(); diff --git a/app/Activity/Models/Comment.php b/app/Activity/Models/Comment.php index bcbed6c56f0..6efa3df6ff0 100644 --- a/app/Activity/Models/Comment.php +++ b/app/Activity/Models/Comment.php @@ -12,10 +12,12 @@ * @property int $id * @property string $text * @property string $html - * @property int|null $parent_id + * @property int|null $parent_id - Relates to local_id, not id * @property int $local_id * @property string $entity_type * @property int $entity_id + * @property int $created_by + * @property int $updated_by */ class Comment extends Model implements Loggable { @@ -38,7 +40,9 @@ public function entity(): MorphTo */ public function parent(): BelongsTo { - return $this->belongsTo(Comment::class); + return $this->belongsTo(Comment::class, 'parent_id', 'local_id', 'parent') + ->where('entity_type', '=', $this->entity_type) + ->where('entity_id', '=', $this->entity_id); } /** diff --git a/app/Activity/Models/View.php b/app/Activity/Models/View.php index 512e0829596..30ead11935f 100644 --- a/app/Activity/Models/View.php +++ b/app/Activity/Models/View.php @@ -41,7 +41,7 @@ public function jointPermissions(): HasMany public static function incrementFor(Viewable $viewable): int { $user = user(); - if (is_null($user) || $user->isDefault()) { + if ($user->isGuest()) { return 0; } diff --git a/app/Activity/Notifications/Messages/BaseActivityNotification.php b/app/Activity/Notifications/Messages/BaseActivityNotification.php index a2045c8dcd4..322df5d94f6 100644 --- a/app/Activity/Notifications/Messages/BaseActivityNotification.php +++ b/app/Activity/Notifications/Messages/BaseActivityNotification.php @@ -4,7 +4,8 @@ use BookStack\Activity\Models\Loggable; use BookStack\Activity\Notifications\MessageParts\LinkedMailMessageLine; -use BookStack\Notifications\MailNotification; +use BookStack\App\MailNotification; +use BookStack\Translation\LocaleDefinition; use BookStack\Users\Models\User; use Illuminate\Bus\Queueable; @@ -35,12 +36,12 @@ public function toArray($notifiable) /** * Build the common reason footer line used in mail messages. */ - protected function buildReasonFooterLine(string $language): LinkedMailMessageLine + protected function buildReasonFooterLine(LocaleDefinition $locale): LinkedMailMessageLine { return new LinkedMailMessageLine( url('/preferences/notifications'), - trans('notifications.footer_reason', [], $language), - trans('notifications.footer_reason_link', [], $language), + $locale->trans('notifications.footer_reason'), + $locale->trans('notifications.footer_reason_link'), ); } } diff --git a/app/Activity/Notifications/Messages/CommentCreationNotification.php b/app/Activity/Notifications/Messages/CommentCreationNotification.php index 5db61b04b04..094ab30b74e 100644 --- a/app/Activity/Notifications/Messages/CommentCreationNotification.php +++ b/app/Activity/Notifications/Messages/CommentCreationNotification.php @@ -17,17 +17,17 @@ public function toMail(User $notifiable): MailMessage /** @var Page $page */ $page = $comment->entity; - $language = $notifiable->getLanguage(); + $locale = $notifiable->getLocale(); - return $this->newMailMessage($language) - ->subject(trans('notifications.new_comment_subject', ['pageName' => $page->getShortName()], $language)) - ->line(trans('notifications.new_comment_intro', ['appName' => setting('app-name')], $language)) + return $this->newMailMessage($locale) + ->subject($locale->trans('notifications.new_comment_subject', ['pageName' => $page->getShortName()])) + ->line($locale->trans('notifications.new_comment_intro', ['appName' => setting('app-name')])) ->line(new ListMessageLine([ - trans('notifications.detail_page_name', [], $language) => $page->name, - trans('notifications.detail_commenter', [], $language) => $this->user->name, - trans('notifications.detail_comment', [], $language) => strip_tags($comment->html), + $locale->trans('notifications.detail_page_name') => $page->name, + $locale->trans('notifications.detail_commenter') => $this->user->name, + $locale->trans('notifications.detail_comment') => strip_tags($comment->html), ])) - ->action(trans('notifications.action_view_comment', [], $language), $page->getUrl('#comment' . $comment->local_id)) - ->line($this->buildReasonFooterLine($language)); + ->action($locale->trans('notifications.action_view_comment'), $page->getUrl('#comment' . $comment->local_id)) + ->line($this->buildReasonFooterLine($locale)); } } diff --git a/app/Activity/Notifications/Messages/PageCreationNotification.php b/app/Activity/Notifications/Messages/PageCreationNotification.php index 110829469fa..da028aa8c8d 100644 --- a/app/Activity/Notifications/Messages/PageCreationNotification.php +++ b/app/Activity/Notifications/Messages/PageCreationNotification.php @@ -14,16 +14,16 @@ public function toMail(User $notifiable): MailMessage /** @var Page $page */ $page = $this->detail; - $language = $notifiable->getLanguage(); + $locale = $notifiable->getLocale(); - return $this->newMailMessage($language) - ->subject(trans('notifications.new_page_subject', ['pageName' => $page->getShortName()], $language)) - ->line(trans('notifications.new_page_intro', ['appName' => setting('app-name')], $language)) + return $this->newMailMessage($locale) + ->subject($locale->trans('notifications.new_page_subject', ['pageName' => $page->getShortName()])) + ->line($locale->trans('notifications.new_page_intro', ['appName' => setting('app-name')], $locale)) ->line(new ListMessageLine([ - trans('notifications.detail_page_name', [], $language) => $page->name, - trans('notifications.detail_created_by', [], $language) => $this->user->name, + $locale->trans('notifications.detail_page_name') => $page->name, + $locale->trans('notifications.detail_created_by') => $this->user->name, ])) - ->action(trans('notifications.action_view_page', [], $language), $page->getUrl()) - ->line($this->buildReasonFooterLine($language)); + ->action($locale->trans('notifications.action_view_page'), $page->getUrl()) + ->line($this->buildReasonFooterLine($locale)); } } diff --git a/app/Activity/Notifications/Messages/PageUpdateNotification.php b/app/Activity/Notifications/Messages/PageUpdateNotification.php index 8e2d27fa4a0..1c8155d291d 100644 --- a/app/Activity/Notifications/Messages/PageUpdateNotification.php +++ b/app/Activity/Notifications/Messages/PageUpdateNotification.php @@ -14,17 +14,17 @@ public function toMail(User $notifiable): MailMessage /** @var Page $page */ $page = $this->detail; - $language = $notifiable->getLanguage(); + $locale = $notifiable->getLocale(); - return $this->newMailMessage($language) - ->subject(trans('notifications.updated_page_subject', ['pageName' => $page->getShortName()], $language)) - ->line(trans('notifications.updated_page_intro', ['appName' => setting('app-name')], $language)) + return $this->newMailMessage($locale) + ->subject($locale->trans('notifications.updated_page_subject', ['pageName' => $page->getShortName()])) + ->line($locale->trans('notifications.updated_page_intro', ['appName' => setting('app-name')])) ->line(new ListMessageLine([ - trans('notifications.detail_page_name', [], $language) => $page->name, - trans('notifications.detail_updated_by', [], $language) => $this->user->name, + $locale->trans('notifications.detail_page_name') => $page->name, + $locale->trans('notifications.detail_updated_by') => $this->user->name, ])) - ->line(trans('notifications.updated_page_debounce', [], $language)) - ->action(trans('notifications.action_view_page', [], $language), $page->getUrl()) - ->line($this->buildReasonFooterLine($language)); + ->line($locale->trans('notifications.updated_page_debounce')) + ->action($locale->trans('notifications.action_view_page'), $page->getUrl()) + ->line($this->buildReasonFooterLine($locale)); } } diff --git a/app/Activity/Tools/UserEntityWatchOptions.php b/app/Activity/Tools/UserEntityWatchOptions.php index 231204fdf67..559d7903d6f 100644 --- a/app/Activity/Tools/UserEntityWatchOptions.php +++ b/app/Activity/Tools/UserEntityWatchOptions.php @@ -22,7 +22,7 @@ public function __construct( public function canWatch(): bool { - return $this->user->can('receive-notifications') && !$this->user->isDefault(); + return $this->user->can('receive-notifications') && !$this->user->isGuest(); } public function getWatchLevel(): string diff --git a/app/Api/ApiDocsController.php b/app/Api/ApiDocsController.php index 382ec15ebf4..d88dba3bc2f 100644 --- a/app/Api/ApiDocsController.php +++ b/app/Api/ApiDocsController.php @@ -31,6 +31,8 @@ public function json() /** * Redirect to the API docs page. + * Required as a controller method, instead of the Route::redirect helper, + * to ensure the URL is generated correctly. */ public function redirect() { diff --git a/app/Api/ApiToken.php b/app/Api/ApiToken.php index 5c2d591e408..ca89c813ed0 100644 --- a/app/Api/ApiToken.php +++ b/app/Api/ApiToken.php @@ -52,4 +52,12 @@ public function logDescriptor(): string { return "({$this->id}) {$this->name}; User: {$this->user->logDescriptor()}"; } + + /** + * Get the URL for managing this token. + */ + public function getUrl(string $path = ''): string + { + return url("/api-tokens/{$this->user_id}/{$this->id}/" . trim($path, '/')); + } } diff --git a/app/Api/UserApiTokenController.php b/app/Api/UserApiTokenController.php index 8357420ee13..3606e826094 100644 --- a/app/Api/UserApiTokenController.php +++ b/app/Api/UserApiTokenController.php @@ -14,16 +14,19 @@ class UserApiTokenController extends Controller /** * Show the form to create a new API token. */ - public function create(int $userId) + public function create(Request $request, int $userId) { - // Ensure user is has access-api permission and is the current user or has permission to manage the current user. $this->checkPermission('access-api'); $this->checkPermissionOrCurrentUser('users-manage', $userId); + $this->updateContext($request); $user = User::query()->findOrFail($userId); + $this->setPageTitle(trans('settings.user_api_token_create')); + return view('users.api-tokens.create', [ 'user' => $user, + 'back' => $this->getRedirectPath($user), ]); } @@ -60,22 +63,27 @@ public function store(Request $request, int $userId) session()->flash('api-token-secret:' . $token->id, $secret); $this->logActivity(ActivityType::API_TOKEN_CREATE, $token); - return redirect($user->getEditUrl('/api-tokens/' . $token->id)); + return redirect($token->getUrl()); } /** * Show the details for a user API token, with access to edit. */ - public function edit(int $userId, int $tokenId) + public function edit(Request $request, int $userId, int $tokenId) { + $this->updateContext($request); + [$user, $token] = $this->checkPermissionAndFetchUserToken($userId, $tokenId); $secret = session()->pull('api-token-secret:' . $token->id, null); + $this->setPageTitle(trans('settings.user_api_token')); + return view('users.api-tokens.edit', [ 'user' => $user, 'token' => $token, 'model' => $token, 'secret' => $secret, + 'back' => $this->getRedirectPath($user), ]); } @@ -97,7 +105,7 @@ public function update(Request $request, int $userId, int $tokenId) $this->logActivity(ActivityType::API_TOKEN_UPDATE, $token); - return redirect($user->getEditUrl('/api-tokens/' . $token->id)); + return redirect($token->getUrl()); } /** @@ -107,6 +115,8 @@ public function delete(int $userId, int $tokenId) { [$user, $token] = $this->checkPermissionAndFetchUserToken($userId, $tokenId); + $this->setPageTitle(trans('settings.user_api_token_delete')); + return view('users.api-tokens.delete', [ 'user' => $user, 'token' => $token, @@ -123,7 +133,7 @@ public function destroy(int $userId, int $tokenId) $this->logActivity(ActivityType::API_TOKEN_DELETE, $token); - return redirect($user->getEditUrl('#api_tokens')); + return redirect($this->getRedirectPath($user)); } /** @@ -142,4 +152,30 @@ protected function checkPermissionAndFetchUserToken(int $userId, int $tokenId): return [$user, $token]; } + + /** + * Update the context for where the user is coming from to manage API tokens. + * (Track of location for correct return redirects) + */ + protected function updateContext(Request $request): void + { + $context = $request->query('context'); + if ($context) { + session()->put('api-token-context', $context); + } + } + + /** + * Get the redirect path for the current api token editing session. + * Attempts to recall the context of where the user is editing from. + */ + protected function getRedirectPath(User $relatedUser): string + { + $context = session()->get('api-token-context'); + if ($context === 'settings' || user()->id !== $relatedUser->id) { + return $relatedUser->getEditUrl('#api_tokens'); + } + + return url('/my-account/auth#api_tokens'); + } } diff --git a/app/App/HomeController.php b/app/App/HomeController.php index 667af80d39c..8188ad0102f 100644 --- a/app/App/HomeController.php +++ b/app/App/HomeController.php @@ -78,14 +78,14 @@ public function index(Request $request, ActivityQueries $activities) } if ($homepageOption === 'bookshelves') { - $shelves = app(BookshelfRepo::class)->getAllPaginated(18, $commonData['listOptions']->getSort(), $commonData['listOptions']->getOrder()); + $shelves = app()->make(BookshelfRepo::class)->getAllPaginated(18, $commonData['listOptions']->getSort(), $commonData['listOptions']->getOrder()); $data = array_merge($commonData, ['shelves' => $shelves]); return view('home.shelves', $data); } if ($homepageOption === 'books') { - $books = app(BookRepo::class)->getAllPaginated(18, $commonData['listOptions']->getSort(), $commonData['listOptions']->getOrder()); + $books = app()->make(BookRepo::class)->getAllPaginated(18, $commonData['listOptions']->getSort(), $commonData['listOptions']->getOrder()); $data = array_merge($commonData, ['books' => $books]); return view('home.books', $data); @@ -140,4 +140,12 @@ public function favicon(FaviconHandler $favicons) $exists = $favicons->restoreOriginalIfNotExists(); return response()->file($exists ? $favicons->getPath() : $favicons->getOriginalPath()); } + + /** + * Serve a PWA application manifest. + */ + public function pwaManifest(PwaManifestBuilder $manifestBuilder) + { + return response()->json($manifestBuilder->build()); + } } diff --git a/app/Notifications/MailNotification.php b/app/App/MailNotification.php similarity index 80% rename from app/Notifications/MailNotification.php rename to app/App/MailNotification.php index 1f40219f920..50b7f69a745 100644 --- a/app/Notifications/MailNotification.php +++ b/app/App/MailNotification.php @@ -1,7 +1,8 @@ $language ?: null]; + $data = ['locale' => $locale ?? user()->getLocale()]; return (new MailMessage())->view([ 'html' => 'vendor.notifications.email', diff --git a/app/App/Providers/AppServiceProvider.php b/app/App/Providers/AppServiceProvider.php index deb664ba697..0275a54891a 100644 --- a/app/App/Providers/AppServiceProvider.php +++ b/app/App/Providers/AppServiceProvider.php @@ -9,16 +9,15 @@ use BookStack\Entities\Models\Chapter; use BookStack\Entities\Models\Page; use BookStack\Exceptions\BookStackExceptionHandlerPage; +use BookStack\Http\HttpRequestService; use BookStack\Permissions\PermissionApplicator; use BookStack\Settings\SettingService; use BookStack\Util\CspService; -use GuzzleHttp\Client; use Illuminate\Contracts\Foundation\ExceptionRenderer; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\URL; use Illuminate\Support\ServiceProvider; -use Psr\Http\Client\ClientInterface as HttpClientInterface; class AppServiceProvider extends ServiceProvider { @@ -39,6 +38,7 @@ class AppServiceProvider extends ServiceProvider SettingService::class => SettingService::class, SocialAuthService::class => SocialAuthService::class, CspService::class => CspService::class, + HttpRequestService::class => HttpRequestService::class, ]; /** @@ -51,7 +51,7 @@ public function boot() // Set root URL $appUrl = config('app.url'); if ($appUrl) { - $isHttps = (strpos($appUrl, 'https://') === 0); + $isHttps = str_starts_with($appUrl, 'https://'); URL::forceRootUrl($appUrl); URL::forceScheme($isHttps ? 'https' : 'http'); } @@ -75,12 +75,6 @@ public function boot() */ public function register() { - $this->app->bind(HttpClientInterface::class, function ($app) { - return new Client([ - 'timeout' => 3, - ]); - }); - $this->app->singleton(PermissionApplicator::class, function ($app) { return new PermissionApplicator(null); }); diff --git a/app/App/Providers/AuthServiceProvider.php b/app/App/Providers/AuthServiceProvider.php index dc482ce3306..26d1803107d 100644 --- a/app/App/Providers/AuthServiceProvider.php +++ b/app/App/Providers/AuthServiceProvider.php @@ -9,6 +9,7 @@ use BookStack\Access\LoginService; use BookStack\Access\RegistrationService; use BookStack\Api\ApiTokenGuard; +use BookStack\Users\Models\User; use Illuminate\Support\Facades\Auth; use Illuminate\Support\ServiceProvider; use Illuminate\Validation\Rules\Password; @@ -65,5 +66,11 @@ public function register() Auth::provider('external-users', function ($app, array $config) { return new ExternalBaseUserProvider($config['model']); }); + + // Bind and provide the default system user as a singleton to the app instance when needed. + // This effectively "caches" fetching the user at an app-instance level. + $this->app->singleton('users.default', function () { + return User::query()->where('system_name', '=', 'public')->first(); + }); } } diff --git a/app/App/Providers/EventServiceProvider.php b/app/App/Providers/EventServiceProvider.php index bf502d7dab2..4ec9facdfd7 100644 --- a/app/App/Providers/EventServiceProvider.php +++ b/app/App/Providers/EventServiceProvider.php @@ -3,7 +3,12 @@ namespace BookStack\App\Providers; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; +use SocialiteProviders\Azure\AzureExtendSocialite; +use SocialiteProviders\Discord\DiscordExtendSocialite; +use SocialiteProviders\GitLab\GitLabExtendSocialite; use SocialiteProviders\Manager\SocialiteWasCalled; +use SocialiteProviders\Okta\OktaExtendSocialite; +use SocialiteProviders\Twitch\TwitchExtendSocialite; class EventServiceProvider extends ServiceProvider { @@ -14,12 +19,11 @@ class EventServiceProvider extends ServiceProvider */ protected $listen = [ SocialiteWasCalled::class => [ - 'SocialiteProviders\Slack\SlackExtendSocialite@handle', - 'SocialiteProviders\Azure\AzureExtendSocialite@handle', - 'SocialiteProviders\Okta\OktaExtendSocialite@handle', - 'SocialiteProviders\GitLab\GitLabExtendSocialite@handle', - 'SocialiteProviders\Twitch\TwitchExtendSocialite@handle', - 'SocialiteProviders\Discord\DiscordExtendSocialite@handle', + AzureExtendSocialite::class . '@handle', + OktaExtendSocialite::class . '@handle', + GitLabExtendSocialite::class . '@handle', + TwitchExtendSocialite::class . '@handle', + DiscordExtendSocialite::class . '@handle', ], ]; diff --git a/app/App/Providers/ViewTweaksServiceProvider.php b/app/App/Providers/ViewTweaksServiceProvider.php index 16b5c1f9751..10593ac8bf8 100644 --- a/app/App/Providers/ViewTweaksServiceProvider.php +++ b/app/App/Providers/ViewTweaksServiceProvider.php @@ -25,7 +25,7 @@ public function boot() // Custom blade view directives Blade::directive('icon', function ($expression) { - return ""; + return "toHtml(); ?>"; }); } } diff --git a/app/App/PwaManifestBuilder.php b/app/App/PwaManifestBuilder.php new file mode 100644 index 00000000000..ba4331a0f14 --- /dev/null +++ b/app/App/PwaManifestBuilder.php @@ -0,0 +1,64 @@ +getForCurrentUser('dark-mode-enabled'); + $appName = setting('app-name'); + + return [ + "name" => $appName, + "short_name" => $appName, + "start_url" => "./", + "scope" => "/", + "display" => "standalone", + "background_color" => $darkMode ? '#111111' : '#F2F2F2', + "description" => $appName, + "theme_color" => ($darkMode ? setting('app-color-dark') : setting('app-color')), + "launch_handler" => [ + "client_mode" => "focus-existing" + ], + "orientation" => "portrait", + "icons" => [ + [ + "src" => setting('app-icon-32') ?: url('/icon-32.png'), + "sizes" => "32x32", + "type" => "image/png" + ], + [ + "src" => setting('app-icon-64') ?: url('/icon-64.png'), + "sizes" => "64x64", + "type" => "image/png" + ], + [ + "src" => setting('app-icon-128') ?: url('/icon-128.png'), + "sizes" => "128x128", + "type" => "image/png" + ], + [ + "src" => setting('app-icon-180') ?: url('/icon-180.png'), + "sizes" => "180x180", + "type" => "image/png" + ], + [ + "src" => setting('app-icon') ?: url('/icon.png'), + "sizes" => "256x256", + "type" => "image/png" + ], + [ + "src" => url('favicon.ico'), + "sizes" => "48x48", + "type" => "image/vnd.microsoft.icon" + ], + ], + ]; + } +} diff --git a/app/App/helpers.php b/app/App/helpers.php index 00d3e9243d7..af6dbcfc397 100644 --- a/app/App/helpers.php +++ b/app/App/helpers.php @@ -35,23 +35,7 @@ function versioned_asset(string $file = ''): string */ function user(): User { - return auth()->user() ?: User::getDefault(); -} - -/** - * Check if current user is a signed in user. - */ -function signedInUser(): bool -{ - return auth()->user() && !auth()->user()->isDefault(); -} - -/** - * Check if the current user has general access. - */ -function hasAppAccess(): bool -{ - return !auth()->guest() || setting('app-public'); + return auth()->user() ?: User::getGuest(); } /** @@ -61,11 +45,11 @@ function hasAppAccess(): bool function userCan(string $permission, Model $ownable = null): bool { if ($ownable === null) { - return user() && user()->can($permission); + return user()->can($permission); } // Check permission on ownable item - $permissions = app(PermissionApplicator::class); + $permissions = app()->make(PermissionApplicator::class); return $permissions->checkOwnableUserAccess($ownable, $permission); } @@ -76,7 +60,7 @@ function userCan(string $permission, Model $ownable = null): bool */ function userCanOnAny(string $action, string $entityClass = ''): bool { - $permissions = app(PermissionApplicator::class); + $permissions = app()->make(PermissionApplicator::class); return $permissions->checkUserHasEntityPermissionOnAny($action, $entityClass); } @@ -88,7 +72,7 @@ function userCanOnAny(string $action, string $entityClass = ''): bool */ function setting(string $key = null, $default = null) { - $settingService = resolve(SettingService::class); + $settingService = app()->make(SettingService::class); if (is_null($key)) { return $settingService; @@ -113,39 +97,6 @@ function theme_path(string $path = ''): ?string return base_path('themes/' . $theme . ($path ? DIRECTORY_SEPARATOR . $path : $path)); } -/** - * Get fetch an SVG icon as a string. - * Checks for icons defined within a custom theme before defaulting back - * to the 'resources/assets/icons' folder. - * - * Returns an empty string if icon file not found. - */ -function icon(string $name, array $attrs = []): string -{ - $attrs = array_merge([ - 'class' => 'svg-icon', - 'data-icon' => $name, - 'role' => 'presentation', - ], $attrs); - $attrString = ' '; - foreach ($attrs as $attrName => $attr) { - $attrString .= $attrName . '="' . $attr . '" '; - } - - $iconPath = resource_path('icons/' . $name . '.svg'); - $themeIconPath = theme_path('icons/' . $name . '.svg'); - - if ($themeIconPath && file_exists($themeIconPath)) { - $iconPath = $themeIconPath; - } elseif (!file_exists($iconPath)) { - return ''; - } - - $fileContents = file_get_contents($iconPath); - - return str_replace(' env('APP_TIMEZONE', 'UTC'), // Default locale to use + // A default variant is also stored since Laravel can overwrite + // app.locale when dynamically setting the locale in-app. 'locale' => env('APP_LANG', 'en'), - - // Locales available - 'locales' => ['en', 'ar', 'bg', 'bs', 'ca', 'cs', 'cy', 'da', 'de', 'de_informal', 'el', 'es', 'es_AR', 'et', 'eu', 'fa', 'fr', 'he', 'hr', 'hu', 'id', 'it', 'ja', 'ka', 'ko', 'lt', 'lv', 'nl', 'nb', 'pt', 'pt_BR', 'sk', 'sl', 'sv', 'pl', 'ro', 'ru', 'tr', 'uk', 'uz', 'vi', 'zh_CN', 'zh_TW'], + 'default_locale' => env('APP_LANG', 'en'), // Application Fallback Locale 'fallback_locale' => 'en', @@ -94,9 +94,6 @@ // Faker Locale 'faker_locale' => 'en_GB', - // Enable right-to-left text control. - 'rtl' => false, - // Auto-detect the locale for public users // For public users their locale can be guessed by headers sent by their // browser. This is usually set by users in their browser settings. @@ -144,7 +141,6 @@ // Third party service providers Barryvdh\DomPDF\ServiceProvider::class, Barryvdh\Snappy\ServiceProvider::class, - Intervention\Image\ImageServiceProvider::class, SocialiteProviders\Manager\ServiceProvider::class, // BookStack custom service providers @@ -164,9 +160,6 @@ // Laravel Packages 'Socialite' => Laravel\Socialite\Facades\Socialite::class, - // Third Party - 'ImageTool' => Intervention\Image\Facades\Image::class, - // Custom BookStack 'Activity' => BookStack\Facades\Activity::class, 'Theme' => BookStack\Facades\Theme::class, diff --git a/app/Config/mail.php b/app/Config/mail.php index 6400211e894..2906d769afd 100644 --- a/app/Config/mail.php +++ b/app/Config/mail.php @@ -22,7 +22,7 @@ // Global "From" address & name 'from' => [ - 'address' => env('MAIL_FROM', 'mail@bookstackapp.com'), + 'address' => env('MAIL_FROM', 'bookstack@example.com'), 'name' => env('MAIL_FROM_NAME', 'BookStack'), ], diff --git a/app/Config/oidc.php b/app/Config/oidc.php index 1f73fb68866..b28b8a41a82 100644 --- a/app/Config/oidc.php +++ b/app/Config/oidc.php @@ -9,7 +9,7 @@ 'dump_user_details' => env('OIDC_DUMP_USER_DETAILS', false), // Claim, within an OpenId token, to find the user's display name - 'display_name_claims' => explode('|', env('OIDC_DISPLAY_NAME_CLAIMS', 'name')), + 'display_name_claims' => env('OIDC_DISPLAY_NAME_CLAIMS', 'name'), // Claim, within an OpenID token, to use to connect a BookStack user to the OIDC user. 'external_id_claim' => env('OIDC_EXTERNAL_ID_CLAIM', 'sub'), diff --git a/app/Console/Commands/CleanupImagesCommand.php b/app/Console/Commands/CleanupImagesCommand.php index fe924b0f46b..18e60ff1773 100644 --- a/app/Console/Commands/CleanupImagesCommand.php +++ b/app/Console/Commands/CleanupImagesCommand.php @@ -35,7 +35,7 @@ public function handle(ImageService $imageService): int if (!$dryRun) { $this->warn("This operation is destructive and is not guaranteed to be fully accurate.\nEnsure you have a backup of your images.\n"); - $proceed = $this->confirm("Are you sure you want to proceed?"); + $proceed = !$this->input->isInteractive() || $this->confirm("Are you sure you want to proceed?"); if (!$proceed) { return 0; } @@ -46,7 +46,7 @@ public function handle(ImageService $imageService): int if ($dryRun) { $this->comment('Dry run, no images have been deleted'); - $this->comment($deleteCount . ' images found that would have been deleted'); + $this->comment($deleteCount . ' image(s) found that would have been deleted'); $this->showDeletedImages($deleted); $this->comment('Run with -f or --force to perform deletions'); @@ -54,7 +54,8 @@ public function handle(ImageService $imageService): int } $this->showDeletedImages($deleted); - $this->comment($deleteCount . ' images deleted'); + $this->comment("{$deleteCount} image(s) deleted"); + return 0; } @@ -65,7 +66,7 @@ protected function showDeletedImages($paths): void } if (count($paths) > 0) { - $this->line('Images to delete:'); + $this->line('Image(s) to delete:'); } foreach ($paths as $path) { diff --git a/app/Console/Commands/HandlesSingleUser.php b/app/Console/Commands/HandlesSingleUser.php new file mode 100644 index 00000000000..d3014aab188 --- /dev/null +++ b/app/Console/Commands/HandlesSingleUser.php @@ -0,0 +1,40 @@ +option('id'); + $email = $this->option('email'); + if (!$id && !$email) { + throw new Exception("Either a --id= or --email= option must be provided.\nRun this command with `--help` to show more options."); + } + + $field = $id ? 'id' : 'email'; + $value = $id ?: $email; + + $user = User::query() + ->where($field, '=', $value) + ->first(); + + if (!$user) { + throw new Exception("A user where {$field}={$value} could not be found."); + } + + return $user; + } +} diff --git a/app/Console/Commands/RefreshAvatarCommand.php b/app/Console/Commands/RefreshAvatarCommand.php new file mode 100644 index 00000000000..e402285e734 --- /dev/null +++ b/app/Console/Commands/RefreshAvatarCommand.php @@ -0,0 +1,116 @@ +avatarFetchEnabled()) { + $this->error("Avatar fetching is disabled on this instance."); + return self::FAILURE; + } + + if ($this->option('users-without-avatars')) { + return $this->processUsers(User::query()->whereDoesntHave('avatar')->get()->all(), $userAvatar); + } + + if ($this->option('all')) { + return $this->processUsers(User::query()->get()->all(), $userAvatar); + } + + try { + $user = $this->fetchProvidedUser(); + return $this->processUsers([$user], $userAvatar); + } catch (Exception $exception) { + $this->error($exception->getMessage()); + return self::FAILURE; + } + } + + /** + * @param User[] $users + */ + private function processUsers(array $users, UserAvatars $userAvatar): int + { + $dryRun = !$this->option('force'); + $this->info(count($users) . " user(s) found to update avatars for."); + + if (count($users) === 0) { + return self::SUCCESS; + } + + if (!$dryRun) { + $fetchHost = parse_url($userAvatar->getAvatarUrl(), PHP_URL_HOST); + $this->warn("This will destroy any existing avatar images these users have, and attempt to fetch new avatar images from {$fetchHost}."); + $proceed = !$this->input->isInteractive() || $this->confirm('Are you sure you want to proceed?'); + if (!$proceed) { + return self::SUCCESS; + } + } + + $this->info(""); + + $exitCode = self::SUCCESS; + foreach ($users as $user) { + $linePrefix = "[ID: {$user->id}] $user->email -"; + + if ($dryRun) { + $this->warn("{$linePrefix} Not updated"); + continue; + } + + if ($this->fetchAvatar($userAvatar, $user)) { + $this->info("{$linePrefix} Updated"); + } else { + $this->error("{$linePrefix} Not updated"); + $exitCode = self::FAILURE; + } + } + + if ($dryRun) { + $this->comment(""); + $this->comment("Dry run, no avatars were updated."); + $this->comment('Run with -f or --force to perform the update.'); + } + + return $exitCode; + } + + private function fetchAvatar(UserAvatars $userAvatar, User $user): bool + { + $oldId = $user->avatar->id ?? 0; + + $userAvatar->fetchAndAssignToUser($user); + + $user->refresh(); + $newId = $user->avatar->id ?? $oldId; + return $oldId !== $newId; + } +} diff --git a/app/Console/Commands/ResetMfaCommand.php b/app/Console/Commands/ResetMfaCommand.php index b8076d2d61f..2b0801e39da 100644 --- a/app/Console/Commands/ResetMfaCommand.php +++ b/app/Console/Commands/ResetMfaCommand.php @@ -2,11 +2,13 @@ namespace BookStack\Console\Commands; -use BookStack\Users\Models\User; +use Exception; use Illuminate\Console\Command; class ResetMfaCommand extends Command { + use HandlesSingleUser; + /** * The name and signature of the console command. * @@ -29,25 +31,10 @@ class ResetMfaCommand extends Command */ public function handle(): int { - $id = $this->option('id'); - $email = $this->option('email'); - if (!$id && !$email) { - $this->error('Either a --id= or --email= option must be provided.'); - - return 1; - } - - $field = $id ? 'id' : 'email'; - $value = $id ?: $email; - - /** @var User $user */ - $user = User::query() - ->where($field, '=', $value) - ->first(); - - if (!$user) { - $this->error("A user where {$field}={$value} could not be found."); - + try { + $user = $this->fetchProvidedUser(); + } catch (Exception $exception) { + $this->error($exception->getMessage()); return 1; } diff --git a/app/Entities/BreadcrumbsViewComposer.php b/app/Entities/BreadcrumbsViewComposer.php index 797162dfb4f..c9269c7c66a 100644 --- a/app/Entities/BreadcrumbsViewComposer.php +++ b/app/Entities/BreadcrumbsViewComposer.php @@ -8,29 +8,21 @@ class BreadcrumbsViewComposer { - protected $entityContextManager; - - /** - * BreadcrumbsViewComposer constructor. - * - * @param ShelfContext $entityContextManager - */ - public function __construct(ShelfContext $entityContextManager) - { - $this->entityContextManager = $entityContextManager; + public function __construct( + protected ShelfContext $shelfContext + ) { } /** * Modify data when the view is composed. - * - * @param View $view */ - public function compose(View $view) + public function compose(View $view): void { $crumbs = $view->getData()['crumbs']; $firstCrumb = $crumbs[0] ?? null; + if ($firstCrumb instanceof Book) { - $shelf = $this->entityContextManager->getContextualShelfForBook($firstCrumb); + $shelf = $this->shelfContext->getContextualShelfForBook($firstCrumb); if ($shelf) { array_unshift($crumbs, $shelf); $view->with('crumbs', $crumbs); diff --git a/app/Entities/Models/Book.php b/app/Entities/Models/Book.php index fc4556857c7..f54a0bf2d6a 100644 --- a/app/Entities/Models/Book.php +++ b/app/Entities/Models/Book.php @@ -40,26 +40,19 @@ public function getUrl(string $path = ''): string /** * Returns book cover image, if book cover not exists return default cover image. - * - * @param int $width - Width of the image - * @param int $height - Height of the image - * - * @return string */ - public function getBookCover($width = 440, $height = 250) + public function getBookCover(int $width = 440, int $height = 250): string { $default = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='; - if (!$this->image_id) { + if (!$this->image_id || !$this->cover) { return $default; } try { - $cover = $this->cover ? url($this->cover->getThumb($width, $height, false)) : $default; + return $this->cover->getThumb($width, $height, false) ?? $default; } catch (Exception $err) { - $cover = $default; + return $default; } - - return $cover; } /** diff --git a/app/Entities/Models/Bookshelf.php b/app/Entities/Models/Bookshelf.php index ad52d9d37d4..4b44025a4c3 100644 --- a/app/Entities/Models/Bookshelf.php +++ b/app/Entities/Models/Bookshelf.php @@ -3,6 +3,7 @@ namespace BookStack\Entities\Models; use BookStack\Uploads\Image; +use Exception; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; @@ -49,28 +50,21 @@ public function getUrl(string $path = ''): string } /** - * Returns BookShelf cover image, if cover does not exists return default cover image. - * - * @param int $width - Width of the image - * @param int $height - Height of the image - * - * @return string + * Returns shelf cover image, if cover not exists return default cover image. */ - public function getBookCover($width = 440, $height = 250) + public function getBookCover(int $width = 440, int $height = 250): string { // TODO - Make generic, focused on books right now, Perhaps set-up a better image $default = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='; - if (!$this->image_id) { + if (!$this->image_id || !$this->cover) { return $default; } try { - $cover = $this->cover ? url($this->cover->getThumb($width, $height, false)) : $default; - } catch (\Exception $err) { - $cover = $default; + return $this->cover->getThumb($width, $height, false) ?? $default; + } catch (Exception $err) { + return $default; } - - return $cover; } /** diff --git a/app/Entities/Queries/RecentlyViewed.php b/app/Entities/Queries/RecentlyViewed.php index ffa34688826..5895b97a2ae 100644 --- a/app/Entities/Queries/RecentlyViewed.php +++ b/app/Entities/Queries/RecentlyViewed.php @@ -10,7 +10,7 @@ class RecentlyViewed extends EntityQuery public function run(int $count, int $page): Collection { $user = user(); - if ($user === null || $user->isDefault()) { + if ($user === null || $user->isGuest()) { return collect(); } diff --git a/app/Entities/Queries/TopFavourites.php b/app/Entities/Queries/TopFavourites.php index cbccf35b054..a2f8d9ea1d2 100644 --- a/app/Entities/Queries/TopFavourites.php +++ b/app/Entities/Queries/TopFavourites.php @@ -10,7 +10,7 @@ class TopFavourites extends EntityQuery public function run(int $count, int $skip = 0) { $user = user(); - if ($user->isDefault()) { + if ($user->isGuest()) { return collect(); } diff --git a/app/Entities/Repos/PageRepo.php b/app/Entities/Repos/PageRepo.php index 61a1db63e39..dbd4a47d243 100644 --- a/app/Entities/Repos/PageRepo.php +++ b/app/Entities/Repos/PageRepo.php @@ -211,13 +211,13 @@ protected function updateTemplateStatusAndContentFromInput(Page $page, array $in $inputEmpty = empty($input['markdown']) && empty($input['html']); if ($haveInput && $inputEmpty) { - $pageContent->setNewHTML(''); + $pageContent->setNewHTML('', user()); } elseif (!empty($input['markdown']) && is_string($input['markdown'])) { $newEditor = 'markdown'; - $pageContent->setNewMarkdown($input['markdown']); + $pageContent->setNewMarkdown($input['markdown'], user()); } elseif (isset($input['html'])) { $newEditor = 'wysiwyg'; - $pageContent->setNewHTML($input['html']); + $pageContent->setNewHTML($input['html'], user()); } if ($newEditor !== $currentEditor && userCan('editor-change')) { @@ -284,9 +284,9 @@ public function restoreRevision(Page $page, int $revisionId): Page $content = new PageContent($page); if (!empty($revision->markdown)) { - $content->setNewMarkdown($revision->markdown); + $content->setNewMarkdown($revision->markdown, user()); } else { - $content->setNewHTML($revision->html); + $content->setNewHTML($revision->html, user()); } $page->updated_by = user()->id; diff --git a/app/Entities/Tools/ExportFormatter.php b/app/Entities/Tools/ExportFormatter.php index 9e4d63cf7b0..9a8c687b08d 100644 --- a/app/Entities/Tools/ExportFormatter.php +++ b/app/Entities/Tools/ExportFormatter.php @@ -16,18 +16,11 @@ class ExportFormatter { - protected ImageService $imageService; - protected PdfGenerator $pdfGenerator; - protected CspService $cspService; - - /** - * ExportService constructor. - */ - public function __construct(ImageService $imageService, PdfGenerator $pdfGenerator, CspService $cspService) - { - $this->imageService = $imageService; - $this->pdfGenerator = $pdfGenerator; - $this->cspService = $cspService; + public function __construct( + protected ImageService $imageService, + protected PdfGenerator $pdfGenerator, + protected CspService $cspService + ) { } /** @@ -36,13 +29,14 @@ public function __construct(ImageService $imageService, PdfGenerator $pdfGenerat * * @throws Throwable */ - public function pageToContainedHtml(Page $page) + public function pageToContainedHtml(Page $page): string { $page->html = (new PageContent($page))->render(); $pageHtml = view('exports.page', [ 'page' => $page, 'format' => 'html', 'cspContent' => $this->cspService->getCspMetaTagValue(), + 'locale' => user()->getLocale(), ])->render(); return $this->containHtml($pageHtml); @@ -53,7 +47,7 @@ public function pageToContainedHtml(Page $page) * * @throws Throwable */ - public function chapterToContainedHtml(Chapter $chapter) + public function chapterToContainedHtml(Chapter $chapter): string { $pages = $chapter->getVisiblePages(); $pages->each(function ($page) { @@ -64,6 +58,7 @@ public function chapterToContainedHtml(Chapter $chapter) 'pages' => $pages, 'format' => 'html', 'cspContent' => $this->cspService->getCspMetaTagValue(), + 'locale' => user()->getLocale(), ])->render(); return $this->containHtml($html); @@ -74,7 +69,7 @@ public function chapterToContainedHtml(Chapter $chapter) * * @throws Throwable */ - public function bookToContainedHtml(Book $book) + public function bookToContainedHtml(Book $book): string { $bookTree = (new BookContents($book))->getTree(false, true); $html = view('exports.book', [ @@ -82,6 +77,7 @@ public function bookToContainedHtml(Book $book) 'bookChildren' => $bookTree, 'format' => 'html', 'cspContent' => $this->cspService->getCspMetaTagValue(), + 'locale' => user()->getLocale(), ])->render(); return $this->containHtml($html); @@ -92,13 +88,14 @@ public function bookToContainedHtml(Book $book) * * @throws Throwable */ - public function pageToPdf(Page $page) + public function pageToPdf(Page $page): string { $page->html = (new PageContent($page))->render(); $html = view('exports.page', [ 'page' => $page, 'format' => 'pdf', 'engine' => $this->pdfGenerator->getActiveEngine(), + 'locale' => user()->getLocale(), ])->render(); return $this->htmlToPdf($html); @@ -109,7 +106,7 @@ public function pageToPdf(Page $page) * * @throws Throwable */ - public function chapterToPdf(Chapter $chapter) + public function chapterToPdf(Chapter $chapter): string { $pages = $chapter->getVisiblePages(); $pages->each(function ($page) { @@ -121,6 +118,7 @@ public function chapterToPdf(Chapter $chapter) 'pages' => $pages, 'format' => 'pdf', 'engine' => $this->pdfGenerator->getActiveEngine(), + 'locale' => user()->getLocale(), ])->render(); return $this->htmlToPdf($html); @@ -131,7 +129,7 @@ public function chapterToPdf(Chapter $chapter) * * @throws Throwable */ - public function bookToPdf(Book $book) + public function bookToPdf(Book $book): string { $bookTree = (new BookContents($book))->getTree(false, true); $html = view('exports.book', [ @@ -139,6 +137,7 @@ public function bookToPdf(Book $book) 'bookChildren' => $bookTree, 'format' => 'pdf', 'engine' => $this->pdfGenerator->getActiveEngine(), + 'locale' => user()->getLocale(), ])->render(); return $this->htmlToPdf($html); @@ -194,7 +193,7 @@ protected function replaceIframesWithLinks(string $html): string /** @var DOMElement $iframe */ foreach ($iframes as $iframe) { $link = $iframe->getAttribute('src'); - if (strpos($link, '//') === 0) { + if (str_starts_with($link, '//')) { $link = 'https:' . $link; } @@ -223,7 +222,7 @@ protected function containHtml(string $htmlContent): string foreach ($imageTagsOutput[0] as $index => $imgMatch) { $oldImgTagString = $imgMatch; $srcString = $imageTagsOutput[2][$index]; - $imageEncoded = $this->imageService->imageUriToBase64($srcString); + $imageEncoded = $this->imageService->imageUrlToBase64($srcString); if ($imageEncoded === null) { $imageEncoded = $srcString; } @@ -240,7 +239,7 @@ protected function containHtml(string $htmlContent): string foreach ($linksOutput[0] as $index => $linkMatch) { $oldLinkString = $linkMatch; $srcString = $linksOutput[2][$index]; - if (strpos(trim($srcString), 'http') !== 0) { + if (!str_starts_with(trim($srcString), 'http')) { $newSrcString = url($srcString); $newLinkString = str_replace($srcString, $newSrcString, $oldLinkString); $htmlContent = str_replace($oldLinkString, $newLinkString, $htmlContent); @@ -255,17 +254,20 @@ protected function containHtml(string $htmlContent): string * Converts the page contents into simple plain text. * This method filters any bad looking content to provide a nice final output. */ - public function pageToPlainText(Page $page): string + public function pageToPlainText(Page $page, bool $pageRendered = false, bool $fromParent = false): string { - $html = (new PageContent($page))->render(); - $text = strip_tags($html); + $html = $pageRendered ? $page->html : (new PageContent($page))->render(); + // Add proceeding spaces before tags so spaces remain between + // text within elements after stripping tags. + $html = str_replace('<', " <", $html); + $text = trim(strip_tags($html)); // Replace multiple spaces with single spaces - $text = preg_replace('/\ {2,}/', ' ', $text); + $text = preg_replace('/ {2,}/', ' ', $text); // Reduce multiple horrid whitespace characters. $text = preg_replace('/(\x0A|\xA0|\x0A|\r|\n){2,}/su', "\n\n", $text); $text = html_entity_decode($text); // Add title - $text = $page->name . "\n\n" . $text; + $text = $page->name . ($fromParent ? "\n" : "\n\n") . $text; return $text; } @@ -275,13 +277,15 @@ public function pageToPlainText(Page $page): string */ public function chapterToPlainText(Chapter $chapter): string { - $text = $chapter->name . "\n\n"; - $text .= $chapter->description . "\n\n"; + $text = $chapter->name . "\n" . $chapter->description; + $text = trim($text) . "\n\n"; + + $parts = []; foreach ($chapter->getVisiblePages() as $page) { - $text .= $this->pageToPlainText($page); + $parts[] = $this->pageToPlainText($page, false, true); } - return $text; + return $text . implode("\n\n", $parts); } /** @@ -289,17 +293,20 @@ public function chapterToPlainText(Chapter $chapter): string */ public function bookToPlainText(Book $book): string { - $bookTree = (new BookContents($book))->getTree(false, false); - $text = $book->name . "\n\n"; + $bookTree = (new BookContents($book))->getTree(false, true); + $text = $book->name . "\n" . $book->description; + $text = rtrim($text) . "\n\n"; + + $parts = []; foreach ($bookTree as $bookChild) { if ($bookChild->isA('chapter')) { - $text .= $this->chapterToPlainText($bookChild); + $parts[] = $this->chapterToPlainText($bookChild); } else { - $text .= $this->pageToPlainText($bookChild); + $parts[] = $this->pageToPlainText($bookChild, true, true); } } - return $text; + return $text . implode("\n\n", $parts); } /** diff --git a/app/Entities/Tools/MixedEntityRequestHelper.php b/app/Entities/Tools/MixedEntityRequestHelper.php new file mode 100644 index 00000000000..8319f6aa079 --- /dev/null +++ b/app/Entities/Tools/MixedEntityRequestHelper.php @@ -0,0 +1,39 @@ +entities->get($requestData['type']); + + return $entityType->newQuery()->scopes(['visible'])->findOrFail($requestData['id']); + } + + /** + * Get the validation rules for an abstract entity request. + * @return array{type: string[], id: string[]} + */ + public function validationRules(): array + { + return [ + 'type' => ['required', 'string'], + 'id' => ['required', 'integer'], + ]; + } +} diff --git a/app/Entities/Tools/PageContent.php b/app/Entities/Tools/PageContent.php index 949816eff57..1bde7b6ce16 100644 --- a/app/Entities/Tools/PageContent.php +++ b/app/Entities/Tools/PageContent.php @@ -9,7 +9,9 @@ use BookStack\Theming\ThemeEvents; use BookStack\Uploads\ImageRepo; use BookStack\Uploads\ImageService; +use BookStack\Users\Models\User; use BookStack\Util\HtmlContentFilter; +use BookStack\Util\WebSafeMimeSniffer; use DOMDocument; use DOMElement; use DOMNode; @@ -27,9 +29,9 @@ public function __construct( /** * Update the content of the page with new provided HTML. */ - public function setNewHTML(string $html): void + public function setNewHTML(string $html, User $updater): void { - $html = $this->extractBase64ImagesFromHtml($html); + $html = $this->extractBase64ImagesFromHtml($html, $updater); $this->page->html = $this->formatHtml($html); $this->page->text = $this->toPlainText(); $this->page->markdown = ''; @@ -38,9 +40,9 @@ public function setNewHTML(string $html): void /** * Update the content of the page with new provided Markdown content. */ - public function setNewMarkdown(string $markdown): void + public function setNewMarkdown(string $markdown, User $updater): void { - $markdown = $this->extractBase64ImagesFromMarkdown($markdown); + $markdown = $this->extractBase64ImagesFromMarkdown($markdown, $updater); $this->page->markdown = $markdown; $html = (new MarkdownToHtml($markdown))->convert(); $this->page->html = $this->formatHtml($html); @@ -50,7 +52,7 @@ public function setNewMarkdown(string $markdown): void /** * Convert all base64 image data to saved images. */ - protected function extractBase64ImagesFromHtml(string $htmlText): string + protected function extractBase64ImagesFromHtml(string $htmlText, User $updater): string { if (empty($htmlText) || !str_contains($htmlText, 'data:image')) { return $htmlText; @@ -66,7 +68,7 @@ protected function extractBase64ImagesFromHtml(string $htmlText): string $imageNodes = $xPath->query('//img[contains(@src, \'data:image\')]'); foreach ($imageNodes as $imageNode) { $imageSrc = $imageNode->getAttribute('src'); - $newUrl = $this->base64ImageUriToUploadedImageUrl($imageSrc); + $newUrl = $this->base64ImageUriToUploadedImageUrl($imageSrc, $updater); $imageNode->setAttribute('src', $newUrl); } @@ -86,7 +88,7 @@ protected function extractBase64ImagesFromHtml(string $htmlText): string * Attempting to capture the whole data uri using regex can cause PHP * PCRE limits to be hit with larger, multi-MB, files. */ - protected function extractBase64ImagesFromMarkdown(string $markdown): string + protected function extractBase64ImagesFromMarkdown(string $markdown, User $updater): string { $matches = []; $contentLength = strlen($markdown); @@ -104,7 +106,7 @@ protected function extractBase64ImagesFromMarkdown(string $markdown): string $dataUri .= $char; } - $newUrl = $this->base64ImageUriToUploadedImageUrl($dataUri); + $newUrl = $this->base64ImageUriToUploadedImageUrl($dataUri, $updater); $replacements[] = [$dataUri, $newUrl]; } @@ -119,16 +121,28 @@ protected function extractBase64ImagesFromMarkdown(string $markdown): string * Parse the given base64 image URI and return the URL to the created image instance. * Returns an empty string if the parsed URI is invalid or causes an error upon upload. */ - protected function base64ImageUriToUploadedImageUrl(string $uri): string + protected function base64ImageUriToUploadedImageUrl(string $uri, User $updater): string { $imageRepo = app()->make(ImageRepo::class); $imageInfo = $this->parseBase64ImageUri($uri); + // Validate user has permission to create images + if (!$updater->can('image-create-all')) { + return ''; + } + // Validate extension and content if (empty($imageInfo['data']) || !ImageService::isExtensionSupported($imageInfo['extension'])) { return ''; } + // Validate content looks like an image via sniffing mime type + $mimeSniffer = new WebSafeMimeSniffer(); + $mime = $mimeSniffer->sniff($imageInfo['data']); + if (!str_starts_with($mime, 'image/')) { + return ''; + } + // Validate that the content is not over our upload limit $uploadLimitBytes = (config('app.upload_limit') * 1000000); if (strlen($imageInfo['data']) > $uploadLimitBytes) { diff --git a/app/Entities/Tools/TrashCan.php b/app/Entities/Tools/TrashCan.php index 3c497024fb2..08276230c40 100644 --- a/app/Entities/Tools/TrashCan.php +++ b/app/Entities/Tools/TrashCan.php @@ -197,7 +197,7 @@ protected function destroyPage(Page $page): int $page->allRevisions()->delete(); // Delete Attached Files - $attachmentService = app(AttachmentService::class); + $attachmentService = app()->make(AttachmentService::class); foreach ($page->attachments as $attachment) { $attachmentService->deleteFile($attachment); } diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 36bdf845d64..6a44200568c 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -6,9 +6,11 @@ use Illuminate\Auth\AuthenticationException; use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Illuminate\Http\Exceptions\PostTooLargeException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Validation\ValidationException; +use Symfony\Component\ErrorHandler\Error\FatalError; use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; use Throwable; @@ -35,6 +37,15 @@ class Handler extends ExceptionHandler 'password_confirmation', ]; + /** + * A function to run upon out of memory. + * If it returns a response, that will be provided back to the request + * upon an out of memory event. + * + * @var ?callable + */ + protected $onOutOfMemory = null; + /** * Report or log an exception. * @@ -59,6 +70,17 @@ public function report(Throwable $exception) */ public function render($request, Throwable $e) { + if ($e instanceof FatalError && str_contains($e->getMessage(), 'bytes exhausted (tried to allocate') && $this->onOutOfMemory) { + $response = call_user_func($this->onOutOfMemory); + if ($response) { + return $response; + } + } + + if ($e instanceof PostTooLargeException) { + $e = new NotifyException(trans('errors.server_post_limit'), '/', 413); + } + if ($this->isApiRequest($request)) { return $this->renderApiException($e); } @@ -66,12 +88,30 @@ public function render($request, Throwable $e) return parent::render($request, $e); } + /** + * Provide a function to be called when an out of memory event occurs. + * If the callable returns a response, this response will be returned + * to the request upon error. + */ + public function prepareForOutOfMemory(callable $onOutOfMemory) + { + $this->onOutOfMemory = $onOutOfMemory; + } + + /** + * Forget the current out of memory handler, if existing. + */ + public function forgetOutOfMemoryHandler() + { + $this->onOutOfMemory = null; + } + /** * Check if the given request is an API request. */ protected function isApiRequest(Request $request): bool { - return strpos($request->path(), 'api/') === 0; + return str_starts_with($request->path(), 'api/'); } /** diff --git a/app/Exceptions/ThemeException.php b/app/Exceptions/ThemeException.php new file mode 100644 index 00000000000..b721effe249 --- /dev/null +++ b/app/Exceptions/ThemeException.php @@ -0,0 +1,7 @@ +isGuest()) { $this->showPermissionError(); } } diff --git a/app/Http/HttpClientHistory.php b/app/Http/HttpClientHistory.php new file mode 100644 index 00000000000..f224b177997 --- /dev/null +++ b/app/Http/HttpClientHistory.php @@ -0,0 +1,33 @@ +container); + } + + public function requestAt(int $index): ?GuzzleRequest + { + return $this->container[$index]['request'] ?? null; + } + + public function latestRequest(): ?GuzzleRequest + { + return $this->requestAt($this->requestCount() - 1); + } + + public function all(): array + { + return $this->container; + } +} diff --git a/app/Http/HttpRequestService.php b/app/Http/HttpRequestService.php new file mode 100644 index 00000000000..f59c298a62b --- /dev/null +++ b/app/Http/HttpRequestService.php @@ -0,0 +1,70 @@ + $timeout, + 'handler' => $this->handler, + ]; + + return new Client(array_merge($options, $defaultOptions)); + } + + /** + * Create a new JSON http request for use with a client. + */ + public function jsonRequest(string $method, string $uri, array $data): GuzzleRequest + { + $headers = ['Content-Type' => 'application/json']; + return new GuzzleRequest($method, $uri, $headers, json_encode($data)); + } + + /** + * Mock any http clients built from this service, and response with the given responses. + * Returns history which can then be queried. + * @link https://docs.guzzlephp.org/en/stable/testing.html#history-middleware + */ + public function mockClient(array $responses = [], bool $pad = true): HttpClientHistory + { + // By default, we pad out the responses with 10 successful values so that requests will be + // properly recorded for inspection. Otherwise, we can't later check if we're received + // too many requests. + if ($pad) { + $response = new Response(200, [], 'success'); + $responses = array_merge($responses, array_fill(0, 10, $response)); + } + + $container = []; + $history = Middleware::history($container); + $mock = new MockHandler($responses); + $this->handler = HandlerStack::create($mock); + $this->handler->push($history, 'history'); + + return new HttpClientHistory($container); + } + + /** + * Clear mocking that has been set up for clients. + */ + public function clearMocking(): void + { + $this->handler = null; + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 91dbdd9634c..1b96ff3db66 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -15,6 +15,7 @@ class Kernel extends HttpKernel \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \BookStack\Http\Middleware\TrimStrings::class, \BookStack\Http\Middleware\TrustProxies::class, + \BookStack\Http\Middleware\PreventResponseCaching::class, ]; /** @@ -30,7 +31,6 @@ class Kernel extends HttpKernel \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \BookStack\Http\Middleware\VerifyCsrfToken::class, - \BookStack\Http\Middleware\PreventAuthenticatedResponseCaching::class, \BookStack\Http\Middleware\CheckEmailConfirmed::class, \BookStack\Http\Middleware\RunThemeActions::class, \BookStack\Http\Middleware\Localization::class, @@ -40,7 +40,6 @@ class Kernel extends HttpKernel \BookStack\Http\Middleware\EncryptCookies::class, \BookStack\Http\Middleware\StartSessionIfCookieExists::class, \BookStack\Http\Middleware\ApiAuthenticate::class, - \BookStack\Http\Middleware\PreventAuthenticatedResponseCaching::class, \BookStack\Http\Middleware\CheckEmailConfirmed::class, ], ]; diff --git a/app/Http/Middleware/ApiAuthenticate.php b/app/Http/Middleware/ApiAuthenticate.php index b348473cf4d..5f3ad3168a0 100644 --- a/app/Http/Middleware/ApiAuthenticate.php +++ b/app/Http/Middleware/ApiAuthenticate.php @@ -31,7 +31,7 @@ protected function ensureAuthorizedBySessionOrToken(): void { // Return if the user is already found to be signed in via session-based auth. // This is to make it easy to browser the API via browser after just logging into the system. - if (signedInUser() || session()->isStarted()) { + if (!user()->isGuest() || session()->isStarted()) { if (!$this->sessionUserHasApiAccess()) { throw new ApiAuthException(trans('errors.api_user_no_api_permission'), 403); } @@ -53,6 +53,6 @@ protected function sessionUserHasApiAccess(): bool { $hasApiPermission = user()->can('access-api'); - return $hasApiPermission && hasAppAccess(); + return $hasApiPermission && user()->hasAppAccess(); } } diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index a320291122b..6a5c6e3542e 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -12,7 +12,7 @@ class Authenticate */ public function handle(Request $request, Closure $next) { - if (!hasAppAccess()) { + if (!user()->hasAppAccess()) { if ($request->ajax()) { return response('Unauthorized.', 401); } diff --git a/app/Http/Middleware/Localization.php b/app/Http/Middleware/Localization.php index 47723e24227..94d06a6277e 100644 --- a/app/Http/Middleware/Localization.php +++ b/app/Http/Middleware/Localization.php @@ -2,17 +2,14 @@ namespace BookStack\Http\Middleware; -use BookStack\Translation\LanguageManager; -use Carbon\Carbon; +use BookStack\Translation\LocaleManager; use Closure; class Localization { - protected LanguageManager $languageManager; - - public function __construct(LanguageManager $languageManager) - { - $this->languageManager = $languageManager; + public function __construct( + protected LocaleManager $localeManager + ) { } /** @@ -25,22 +22,12 @@ public function __construct(LanguageManager $languageManager) */ public function handle($request, Closure $next) { - // Get and record the default language in the config - $defaultLang = config('app.locale'); - config()->set('app.default_locale', $defaultLang); - - // Get the user's language and record that in the config for use in views - $userLang = $this->languageManager->getUserLanguage($request, $defaultLang); - config()->set('app.lang', str_replace('_', '-', $this->languageManager->getIsoName($userLang))); - - // Set text direction - if ($this->languageManager->isRTL($userLang)) { - config()->set('app.rtl', true); - } + // Share details of the user's locale for use in views + $userLocale = $this->localeManager->getForUser(user()); + view()->share('locale', $userLocale); - app()->setLocale($userLang); - Carbon::setLocale($userLang); - $this->languageManager->setPhpDateTimeLocale($userLang); + // Set locale for system components + app()->setLocale($userLocale->appLocale()); return $next($request); } diff --git a/app/Http/Middleware/PreventAuthenticatedResponseCaching.php b/app/Http/Middleware/PreventResponseCaching.php similarity index 59% rename from app/Http/Middleware/PreventAuthenticatedResponseCaching.php rename to app/Http/Middleware/PreventResponseCaching.php index 60c9138110a..c763b5fc1bb 100644 --- a/app/Http/Middleware/PreventAuthenticatedResponseCaching.php +++ b/app/Http/Middleware/PreventResponseCaching.php @@ -5,7 +5,7 @@ use Closure; use Symfony\Component\HttpFoundation\Response; -class PreventAuthenticatedResponseCaching +class PreventResponseCaching { /** * Handle an incoming request. @@ -20,11 +20,8 @@ public function handle($request, Closure $next) /** @var Response $response */ $response = $next($request); - if (signedInUser()) { - $response->headers->set('Cache-Control', 'max-age=0, no-store, private'); - $response->headers->set('Pragma', 'no-cache'); - $response->headers->set('Expires', 'Sun, 12 Jul 2015 19:01:00 GMT'); - } + $response->headers->set('Cache-Control', 'no-cache, no-store, private'); + $response->headers->set('Expires', 'Sun, 12 Jul 2015 19:01:00 GMT'); return $response; } diff --git a/app/Notifications/UserInvite.php b/app/Notifications/UserInvite.php deleted file mode 100644 index 87ea31c04b2..00000000000 --- a/app/Notifications/UserInvite.php +++ /dev/null @@ -1,26 +0,0 @@ - setting('app-name')]; - $language = $notifiable->getLanguage(); - - return $this->newMailMessage($language) - ->subject(trans('auth.user_invite_email_subject', $appName, $language)) - ->greeting(trans('auth.user_invite_email_greeting', $appName, $language)) - ->line(trans('auth.user_invite_email_text', [], $language)) - ->action(trans('auth.user_invite_email_action', [], $language), url('/register/invite/' . $this->token)); - } -} diff --git a/app/Search/SearchOptions.php b/app/Search/SearchOptions.php index 0bf9c3116b6..d38fc8d5751 100644 --- a/app/Search/SearchOptions.php +++ b/app/Search/SearchOptions.php @@ -44,8 +44,8 @@ public static function fromRequest(Request $request): self $inputs = $request->only(['search', 'types', 'filters', 'exact', 'tags']); $parsedStandardTerms = static::parseStandardTermString($inputs['search'] ?? ''); - $instance->searches = $parsedStandardTerms['terms']; - $instance->exacts = $parsedStandardTerms['exacts']; + $instance->searches = array_filter($parsedStandardTerms['terms']); + $instance->exacts = array_filter($parsedStandardTerms['exacts']); array_push($instance->exacts, ...array_filter($inputs['exact'] ?? [])); @@ -78,7 +78,7 @@ protected static function decode(string $searchString): array ]; $patterns = [ - 'exacts' => '/"(.*?)"/', + 'exacts' => '/"((?:\\\\.|[^"\\\\])*)"/', 'tags' => '/\[(.*?)\]/', 'filters' => '/\{(.*?)\}/', ]; @@ -93,6 +93,11 @@ protected static function decode(string $searchString): array } } + // Unescape exacts and backslash escapes + foreach ($terms['exacts'] as $index => $exact) { + $terms['exacts'][$index] = static::decodeEscapes($exact); + } + // Parse standard terms $parsedStandardTerms = static::parseStandardTermString($searchString); array_push($terms['searches'], ...$parsedStandardTerms['terms']); @@ -106,12 +111,41 @@ protected static function decode(string $searchString): array } $terms['filters'] = $splitFilters; + // Filter down terms where required + $terms['exacts'] = array_filter($terms['exacts']); + $terms['searches'] = array_filter($terms['searches']); + return $terms; } + /** + * Decode backslash escaping within the input string. + */ + protected static function decodeEscapes(string $input): string + { + $decoded = ""; + $escaping = false; + + foreach (str_split($input) as $char) { + if ($escaping) { + $decoded .= $char; + $escaping = false; + } else if ($char === '\\') { + $escaping = true; + } else { + $decoded .= $char; + } + } + + return $decoded; + } + /** * Parse a standard search term string into individual search terms and - * extract any exact terms searches to be made. + * convert any required terms to exact matches. This is done since some + * characters will never be in the standard index, since we use them as + * delimiters, and therefore we convert a term to be exact if it + * contains one of those delimiter characters. * * @return array{terms: array, exacts: array} */ @@ -129,8 +163,8 @@ protected static function parseStandardTermString(string $termString): array continue; } - $parsedList = (strpbrk($searchTerm, $indexDelimiters) === false) ? 'terms' : 'exacts'; - $parsed[$parsedList][] = $searchTerm; + $becomeExact = (strpbrk($searchTerm, $indexDelimiters) !== false); + $parsed[$becomeExact ? 'exacts' : 'terms'][] = $searchTerm; } return $parsed; @@ -141,20 +175,22 @@ protected static function parseStandardTermString(string $termString): array */ public function toString(): string { - $string = implode(' ', $this->searches ?? []); + $parts = $this->searches; foreach ($this->exacts as $term) { - $string .= ' "' . $term . '"'; + $escaped = str_replace('\\', '\\\\', $term); + $escaped = str_replace('"', '\"', $escaped); + $parts[] = '"' . $escaped . '"'; } foreach ($this->tags as $term) { - $string .= " [{$term}]"; + $parts[] = "[{$term}]"; } foreach ($this->filters as $filterName => $filterVal) { - $string .= ' {' . $filterName . ($filterVal ? ':' . $filterVal : '') . '}'; + $parts[] = '{' . $filterName . ($filterVal ? ':' . $filterVal : '') . '}'; } - return $string; + return implode(' ', $parts); } } diff --git a/app/Settings/MaintenanceController.php b/app/Settings/MaintenanceController.php index 9c48a432326..60e5fee283f 100644 --- a/app/Settings/MaintenanceController.php +++ b/app/Settings/MaintenanceController.php @@ -5,7 +5,6 @@ use BookStack\Activity\ActivityType; use BookStack\Entities\Tools\TrashCan; use BookStack\Http\Controller; -use BookStack\Notifications\TestEmail; use BookStack\References\ReferenceStore; use BookStack\Uploads\ImageService; use Illuminate\Http\Request; @@ -69,7 +68,7 @@ public function sendTestEmail() $this->logActivity(ActivityType::MAINTENANCE_ACTION_RUN, 'send-test-email'); try { - user()->notifyNow(new TestEmail()); + user()->notifyNow(new TestEmailNotification()); $this->showSuccessNotification(trans('settings.maint_send_test_email_success', ['address' => user()->email])); } catch (\Exception $exception) { $errorMessage = trans('errors.maintenance_test_email_failure') . "\n" . $exception->getMessage(); diff --git a/app/Settings/SettingController.php b/app/Settings/SettingController.php index bd55222f230..bdbc3c78a39 100644 --- a/app/Settings/SettingController.php +++ b/app/Settings/SettingController.php @@ -34,7 +34,7 @@ public function category(string $category) return view('settings.' . $category, [ 'category' => $category, 'version' => $version, - 'guestUser' => User::getDefault(), + 'guestUser' => User::getGuest(), ]); } diff --git a/app/Settings/SettingService.php b/app/Settings/SettingService.php index 1c5cbdf5af3..31debdaea85 100644 --- a/app/Settings/SettingService.php +++ b/app/Settings/SettingService.php @@ -47,7 +47,7 @@ public function getUser(User $user, string $key, $default = null) $default = config('setting-defaults.user.' . $key, false); } - if ($user->isDefault()) { + if ($user->isGuest()) { return $this->getFromSession($key, $default); } @@ -206,7 +206,7 @@ protected function formatArrayValue(array $value): string */ public function putUser(User $user, string $key, string $value): bool { - if ($user->isDefault()) { + if ($user->isGuest()) { session()->put($key, $value); return true; diff --git a/app/Notifications/TestEmail.php b/app/Settings/TestEmailNotification.php similarity index 78% rename from app/Notifications/TestEmail.php rename to app/Settings/TestEmailNotification.php index af9e5847f1f..3b13543e424 100644 --- a/app/Notifications/TestEmail.php +++ b/app/Settings/TestEmailNotification.php @@ -1,11 +1,12 @@ + */ + protected array $listeners = []; /** * Listen to a given custom theme event, * setting up the action to be ran when the event occurs. */ - public function listen(string $event, callable $action) + public function listen(string $event, callable $action): void { if (!isset($this->listeners[$event])) { $this->listeners[$event] = []; @@ -31,10 +35,8 @@ public function listen(string $event, callable $action) * * If a callback returns a non-null value, this method will * stop and return that value itself. - * - * @return mixed */ - public function dispatch(string $event, ...$args) + public function dispatch(string $event, ...$args): mixed { foreach ($this->listeners[$event] ?? [] as $action) { $result = call_user_func_array($action, $args); @@ -49,7 +51,7 @@ public function dispatch(string $event, ...$args) /** * Register a new custom artisan command to be available. */ - public function registerCommand(Command $command) + public function registerCommand(Command $command): void { Artisan::starting(function (Application $application) use ($command) { $application->addCommands([$command]); @@ -59,18 +61,22 @@ public function registerCommand(Command $command) /** * Read any actions from the set theme path if the 'functions.php' file exists. */ - public function readThemeActions() + public function readThemeActions(): void { $themeActionsFile = theme_path('functions.php'); if ($themeActionsFile && file_exists($themeActionsFile)) { - require $themeActionsFile; + try { + require $themeActionsFile; + } catch (\Error $exception) { + throw new ThemeException("Failed loading theme functions file at \"{$themeActionsFile}\" with error: {$exception->getMessage()}"); + } } } /** * @see SocialAuthService::addSocialDriver */ - public function addSocialDriver(string $driverName, array $config, string $socialiteHandler, callable $configureForRedirect = null) + public function addSocialDriver(string $driverName, array $config, string $socialiteHandler, callable $configureForRedirect = null): void { $socialAuthService = app()->make(SocialAuthService::class); $socialAuthService->addSocialDriver($driverName, $config, $socialiteHandler, $configureForRedirect); diff --git a/app/Translation/LanguageManager.php b/app/Translation/LanguageManager.php deleted file mode 100644 index 5132929b17e..00000000000 --- a/app/Translation/LanguageManager.php +++ /dev/null @@ -1,147 +0,0 @@ - - */ - protected array $localeMap = [ - 'ar' => ['iso' => 'ar', 'windows' => 'Arabic'], - 'bg' => ['iso' => 'bg_BG', 'windows' => 'Bulgarian'], - 'bs' => ['iso' => 'bs_BA', 'windows' => 'Bosnian (Latin)'], - 'ca' => ['iso' => 'ca', 'windows' => 'Catalan'], - 'cs' => ['iso' => 'cs_CZ', 'windows' => 'Czech'], - 'da' => ['iso' => 'da_DK', 'windows' => 'Danish'], - 'de' => ['iso' => 'de_DE', 'windows' => 'German'], - 'de_informal' => ['iso' => 'de_DE', 'windows' => 'German'], - 'en' => ['iso' => 'en_GB', 'windows' => 'English'], - 'el' => ['iso' => 'el_GR', 'windows' => 'Greek'], - 'es' => ['iso' => 'es_ES', 'windows' => 'Spanish'], - 'es_AR' => ['iso' => 'es_AR', 'windows' => 'Spanish'], - 'et' => ['iso' => 'et_EE', 'windows' => 'Estonian'], - 'eu' => ['iso' => 'eu_ES', 'windows' => 'Basque'], - 'fa' => ['iso' => 'fa_IR', 'windows' => 'Persian'], - 'fr' => ['iso' => 'fr_FR', 'windows' => 'French'], - 'he' => ['iso' => 'he_IL', 'windows' => 'Hebrew'], - 'hr' => ['iso' => 'hr_HR', 'windows' => 'Croatian'], - 'hu' => ['iso' => 'hu_HU', 'windows' => 'Hungarian'], - 'id' => ['iso' => 'id_ID', 'windows' => 'Indonesian'], - 'it' => ['iso' => 'it_IT', 'windows' => 'Italian'], - 'ja' => ['iso' => 'ja', 'windows' => 'Japanese'], - 'ko' => ['iso' => 'ko_KR', 'windows' => 'Korean'], - 'lt' => ['iso' => 'lt_LT', 'windows' => 'Lithuanian'], - 'lv' => ['iso' => 'lv_LV', 'windows' => 'Latvian'], - 'nl' => ['iso' => 'nl_NL', 'windows' => 'Dutch'], - 'nb' => ['iso' => 'nb_NO', 'windows' => 'Norwegian (Bokmal)'], - 'pl' => ['iso' => 'pl_PL', 'windows' => 'Polish'], - 'pt' => ['iso' => 'pt_PT', 'windows' => 'Portuguese'], - 'pt_BR' => ['iso' => 'pt_BR', 'windows' => 'Portuguese'], - 'ro' => ['iso' => 'ro_RO', 'windows' => 'Romanian'], - 'ru' => ['iso' => 'ru', 'windows' => 'Russian'], - 'sk' => ['iso' => 'sk_SK', 'windows' => 'Slovak'], - 'sl' => ['iso' => 'sl_SI', 'windows' => 'Slovenian'], - 'sv' => ['iso' => 'sv_SE', 'windows' => 'Swedish'], - 'uk' => ['iso' => 'uk_UA', 'windows' => 'Ukrainian'], - 'vi' => ['iso' => 'vi_VN', 'windows' => 'Vietnamese'], - 'zh_CN' => ['iso' => 'zh_CN', 'windows' => 'Chinese (Simplified)'], - 'zh_TW' => ['iso' => 'zh_TW', 'windows' => 'Chinese (Traditional)'], - 'tr' => ['iso' => 'tr_TR', 'windows' => 'Turkish'], - ]; - - /** - * Get the language specifically for the currently logged-in user if available. - */ - public function getUserLanguage(Request $request, string $default): string - { - try { - $user = user(); - } catch (\Exception $exception) { - return $default; - } - - if ($user->isDefault() && config('app.auto_detect_locale')) { - return $this->autoDetectLocale($request, $default); - } - - return setting()->getUser($user, 'language', $default); - } - - /** - * Get the language for the given user. - */ - public function getLanguageForUser(User $user): string - { - $default = config('app.locale'); - return setting()->getUser($user, 'language', $default); - } - - /** - * Check if the given BookStack language value is a right-to-left language. - */ - public function isRTL(string $language): bool - { - return in_array($language, $this->rtlLanguages); - } - - /** - * Autodetect the visitors locale by matching locales in their headers - * against the locales supported by BookStack. - */ - protected function autoDetectLocale(Request $request, string $default): string - { - $availableLocales = config('app.locales'); - foreach ($request->getLanguages() as $lang) { - if (in_array($lang, $availableLocales)) { - return $lang; - } - } - - return $default; - } - - /** - * Get the ISO version of a BookStack language name. - */ - public function getIsoName(string $language): string - { - return $this->localeMap[$language]['iso'] ?? $language; - } - - /** - * Set the system date locale for localized date formatting. - * Will try both the standard locale name and the UTF8 variant. - */ - public function setPhpDateTimeLocale(string $language): void - { - $isoLang = $this->localeMap[$language]['iso'] ?? ''; - $isoLangPrefix = explode('_', $isoLang)[0]; - - $locales = array_values(array_filter([ - $isoLang ? $isoLang . '.utf8' : false, - $isoLang ?: false, - $isoLang ? str_replace('_', '-', $isoLang) : false, - $isoLang ? $isoLangPrefix . '.UTF-8' : false, - $this->localeMap[$language]['windows'] ?? false, - $language, - ])); - - if (!empty($locales)) { - setlocale(LC_TIME, $locales[0], ...array_slice($locales, 1)); - } - } -} diff --git a/app/Translation/LocaleDefinition.php b/app/Translation/LocaleDefinition.php new file mode 100644 index 00000000000..85d36afa0b9 --- /dev/null +++ b/app/Translation/LocaleDefinition.php @@ -0,0 +1,53 @@ +appName; + } + + /** + * Provide the ISO-aligned locale name. + */ + public function isoLocale(): string + { + return $this->isoName; + } + + /** + * Returns a string suitable for the HTML "lang" attribute. + */ + public function htmlLang(): string + { + return str_replace('_', '-', $this->isoName); + } + + /** + * Returns a string suitable for the HTML "dir" attribute. + */ + public function htmlDirection(): string + { + return $this->isRtl ? 'rtl' : 'ltr'; + } + + /** + * Translate using this locate. + */ + public function trans(string $key, array $replace = []): string + { + return trans($key, $replace, $this->appLocale()); + } +} diff --git a/app/Translation/LocaleManager.php b/app/Translation/LocaleManager.php new file mode 100644 index 00000000000..ce97426b9b4 --- /dev/null +++ b/app/Translation/LocaleManager.php @@ -0,0 +1,122 @@ + + */ + protected array $localeMap = [ + 'ar' => 'ar', + 'bg' => 'bg_BG', + 'bs' => 'bs_BA', + 'ca' => 'ca', + 'cs' => 'cs_CZ', + 'cy' => 'cy_GB', + 'da' => 'da_DK', + 'de' => 'de_DE', + 'de_informal' => 'de_DE', + 'el' => 'el_GR', + 'en' => 'en_GB', + 'es' => 'es_ES', + 'es_AR' => 'es_AR', + 'et' => 'et_EE', + 'eu' => 'eu_ES', + 'fa' => 'fa_IR', + 'fi' => 'fi_FI', + 'fr' => 'fr_FR', + 'he' => 'he_IL', + 'hr' => 'hr_HR', + 'hu' => 'hu_HU', + 'id' => 'id_ID', + 'it' => 'it_IT', + 'ja' => 'ja', + 'ka' => 'ka_GE', + 'ko' => 'ko_KR', + 'lt' => 'lt_LT', + 'lv' => 'lv_LV', + 'nb' => 'nb_NO', + 'nl' => 'nl_NL', + 'nn' => 'nn_NO', + 'pl' => 'pl_PL', + 'pt' => 'pt_PT', + 'pt_BR' => 'pt_BR', + 'ro' => 'ro_RO', + 'ru' => 'ru', + 'sk' => 'sk_SK', + 'sl' => 'sl_SI', + 'sq' => 'sq_AL', + 'sv' => 'sv_SE', + 'tr' => 'tr_TR', + 'uk' => 'uk_UA', + 'uz' => 'uz_UZ', + 'vi' => 'vi_VN', + 'zh_CN' => 'zh_CN', + 'zh_TW' => 'zh_TW', + ]; + + /** + * Get the BookStack locale string for the given user. + */ + protected function getLocaleForUser(User $user): string + { + $default = config('app.default_locale'); + + if ($user->isGuest() && config('app.auto_detect_locale')) { + return $this->autoDetectLocale(request(), $default); + } + + return setting()->getUser($user, 'language', $default); + } + + /** + * Get a locale definition for the current user. + */ + public function getForUser(User $user): LocaleDefinition + { + $localeString = $this->getLocaleForUser($user); + + return new LocaleDefinition( + $localeString, + $this->localeMap[$localeString] ?? $localeString, + in_array($localeString, $this->rtlLocales), + ); + } + + /** + * Autodetect the visitors locale by matching locales in their headers + * against the locales supported by BookStack. + */ + protected function autoDetectLocale(Request $request, string $default): string + { + $availableLocales = $this->getAllAppLocales(); + + foreach ($request->getLanguages() as $lang) { + if (in_array($lang, $availableLocales)) { + return $lang; + } + } + + return $default; + } + + /** + * Get all the available app-specific level locale strings. + */ + public function getAllAppLocales(): array + { + return array_keys($this->localeMap); + } +} diff --git a/app/Uploads/Controllers/DrawioImageController.php b/app/Uploads/Controllers/DrawioImageController.php index 35deada883b..6293da4f718 100644 --- a/app/Uploads/Controllers/DrawioImageController.php +++ b/app/Uploads/Controllers/DrawioImageController.php @@ -5,23 +5,23 @@ use BookStack\Exceptions\ImageUploadException; use BookStack\Http\Controller; use BookStack\Uploads\ImageRepo; +use BookStack\Uploads\ImageResizer; +use BookStack\Util\OutOfMemoryHandler; use Exception; use Illuminate\Http\Request; class DrawioImageController extends Controller { - protected $imageRepo; - - public function __construct(ImageRepo $imageRepo) - { - $this->imageRepo = $imageRepo; + public function __construct( + protected ImageRepo $imageRepo + ) { } /** * Get a list of gallery images, in a list. * Can be paged and filtered by entity. */ - public function list(Request $request) + public function list(Request $request, ImageResizer $resizer) { $page = $request->get('page', 1); $searchTerm = $request->get('search', null); @@ -29,11 +29,20 @@ public function list(Request $request) $parentTypeFilter = $request->get('filter_type', null); $imgData = $this->imageRepo->getEntityFiltered('drawio', $parentTypeFilter, $page, 24, $uploadedToFilter, $searchTerm); - - return view('pages.parts.image-manager-list', [ + $viewData = [ + 'warning' => '', 'images' => $imgData['images'], 'hasMore' => $imgData['has_more'], - ]); + ]; + + new OutOfMemoryHandler(function () use ($viewData) { + $viewData['warning'] = trans('errors.image_gallery_thumbnail_memory_limit'); + return response()->view('pages.parts.image-manager-list', $viewData, 200); + }); + + $resizer->loadGalleryThumbnailsForMany($imgData['images']); + + return view('pages.parts.image-manager-list', $viewData); } /** diff --git a/app/Uploads/Controllers/GalleryImageController.php b/app/Uploads/Controllers/GalleryImageController.php index 33d3dd74c67..258f2bef6bd 100644 --- a/app/Uploads/Controllers/GalleryImageController.php +++ b/app/Uploads/Controllers/GalleryImageController.php @@ -5,7 +5,11 @@ use BookStack\Exceptions\ImageUploadException; use BookStack\Http\Controller; use BookStack\Uploads\ImageRepo; +use BookStack\Uploads\ImageResizer; +use BookStack\Util\OutOfMemoryHandler; use Illuminate\Http\Request; +use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\ValidationException; class GalleryImageController extends Controller @@ -19,7 +23,7 @@ public function __construct( * Get a list of gallery images, in a list. * Can be paged and filtered by entity. */ - public function list(Request $request) + public function list(Request $request, ImageResizer $resizer) { $page = $request->get('page', 1); $searchTerm = $request->get('search', null); @@ -27,11 +31,20 @@ public function list(Request $request) $parentTypeFilter = $request->get('filter_type', null); $imgData = $this->imageRepo->getEntityFiltered('gallery', $parentTypeFilter, $page, 30, $uploadedToFilter, $searchTerm); - - return view('pages.parts.image-manager-list', [ + $viewData = [ + 'warning' => '', 'images' => $imgData['images'], 'hasMore' => $imgData['has_more'], - ]); + ]; + + new OutOfMemoryHandler(function () use ($viewData) { + $viewData['warning'] = trans('errors.image_gallery_thumbnail_memory_limit'); + return response()->view('pages.parts.image-manager-list', $viewData, 200); + }); + + $resizer->loadGalleryThumbnailsForMany($imgData['images']); + + return view('pages.parts.image-manager-list', $viewData); } /** @@ -51,6 +64,10 @@ public function create(Request $request) return $this->jsonError(implode("\n", $exception->errors()['file'])); } + new OutOfMemoryHandler(function () { + return $this->jsonError(trans('errors.image_upload_memory_limit')); + }); + try { $imageUpload = $request->file('file'); $uploadedTo = $request->get('uploaded_to', 0); diff --git a/app/Uploads/Controllers/ImageController.php b/app/Uploads/Controllers/ImageController.php index 2c611c515bf..c68ffdf6bd0 100644 --- a/app/Uploads/Controllers/ImageController.php +++ b/app/Uploads/Controllers/ImageController.php @@ -4,19 +4,22 @@ use BookStack\Exceptions\ImageUploadException; use BookStack\Exceptions\NotFoundException; +use BookStack\Exceptions\NotifyException; use BookStack\Http\Controller; use BookStack\Uploads\Image; use BookStack\Uploads\ImageRepo; +use BookStack\Uploads\ImageResizer; use BookStack\Uploads\ImageService; +use BookStack\Util\OutOfMemoryHandler; use Exception; use Illuminate\Http\Request; -use Illuminate\Validation\ValidationException; class ImageController extends Controller { public function __construct( protected ImageRepo $imageRepo, - protected ImageService $imageService + protected ImageService $imageService, + protected ImageResizer $imageResizer, ) { } @@ -38,13 +41,10 @@ public function showImage(string $path) /** * Update image details. - * - * @throws ImageUploadException - * @throws ValidationException */ public function update(Request $request, string $id) { - $this->validate($request, [ + $data = $this->validate($request, [ 'name' => ['required', 'min:2', 'string'], ]); @@ -52,9 +52,7 @@ public function update(Request $request, string $id) $this->checkImagePermission($image); $this->checkOwnablePermission('image-update', $image); - $image = $this->imageRepo->updateImageDetails($image, $request->all()); - - $this->imageRepo->loadThumbs($image); + $image = $this->imageRepo->updateImageDetails($image, $data); return view('pages.parts.image-manager-form', [ 'image' => $image, @@ -76,6 +74,10 @@ public function updateFile(Request $request, string $id) $this->checkOwnablePermission('image-update', $image); $file = $request->file('file'); + new OutOfMemoryHandler(function () { + return $this->jsonError(trans('errors.image_upload_memory_limit')); + }); + try { $this->imageRepo->updateImageFile($image, $file); } catch (ImageUploadException $exception) { @@ -99,12 +101,20 @@ public function edit(Request $request, string $id) $dependantPages = $this->imageRepo->getPagesUsingImage($image); } - $this->imageRepo->loadThumbs($image); - - return view('pages.parts.image-manager-form', [ + $viewData = [ 'image' => $image, 'dependantPages' => $dependantPages ?? null, - ]); + 'warning' => '', + ]; + + new OutOfMemoryHandler(function () use ($viewData) { + $viewData['warning'] = trans('errors.image_thumbnail_memory_limit'); + return response()->view('pages.parts.image-manager-form', $viewData); + }); + + $this->imageResizer->loadGalleryThumbnailsForImage($image, false); + + return view('pages.parts.image-manager-form', $viewData); } /** @@ -123,10 +133,29 @@ public function destroy(string $id) return response(''); } + /** + * Rebuild the thumbnails for the given image. + */ + public function rebuildThumbnails(string $id) + { + $image = $this->imageRepo->getById($id); + $this->checkImagePermission($image); + $this->checkOwnablePermission('image-update', $image); + + new OutOfMemoryHandler(function () { + return $this->jsonError(trans('errors.image_thumbnail_memory_limit')); + }); + + $this->imageResizer->loadGalleryThumbnailsForImage($image, true); + + return response(trans('components.image_rebuild_thumbs_success')); + } + /** * Check related page permission and ensure type is drawio or gallery. + * @throws NotifyException */ - protected function checkImagePermission(Image $image) + protected function checkImagePermission(Image $image): void { if ($image->type !== 'drawio' && $image->type !== 'gallery') { $this->showPermissionError(); diff --git a/app/Uploads/Controllers/ImageGalleryApiController.php b/app/Uploads/Controllers/ImageGalleryApiController.php index 0d35d2905f7..ec96e4593bc 100644 --- a/app/Uploads/Controllers/ImageGalleryApiController.php +++ b/app/Uploads/Controllers/ImageGalleryApiController.php @@ -6,6 +6,7 @@ use BookStack\Http\ApiController; use BookStack\Uploads\Image; use BookStack\Uploads\ImageRepo; +use BookStack\Uploads\ImageResizer; use Illuminate\Http\Request; class ImageGalleryApiController extends ApiController @@ -15,7 +16,8 @@ class ImageGalleryApiController extends ApiController ]; public function __construct( - protected ImageRepo $imageRepo + protected ImageRepo $imageRepo, + protected ImageResizer $imageResizer, ) { } @@ -130,7 +132,7 @@ public function delete(string $id) */ protected function formatForSingleResponse(Image $image): array { - $this->imageRepo->loadThumbs($image); + $this->imageResizer->loadGalleryThumbnailsForImage($image, false); $data = $image->toArray(); $data['created_by'] = $image->createdBy; $data['updated_by'] = $image->updatedBy; @@ -138,6 +140,7 @@ protected function formatForSingleResponse(Image $image): array $escapedUrl = htmlentities($image->url); $escapedName = htmlentities($image->name); + if ($image->type === 'drawio') { $data['content']['html'] = "
id}\">
"; $data['content']['markdown'] = $data['content']['html']; diff --git a/app/Uploads/FaviconHandler.php b/app/Uploads/FaviconHandler.php index c637356e068..d5044943cb7 100644 --- a/app/Uploads/FaviconHandler.php +++ b/app/Uploads/FaviconHandler.php @@ -3,14 +3,13 @@ namespace BookStack\Uploads; use Illuminate\Http\UploadedFile; -use Intervention\Image\ImageManager; class FaviconHandler { protected string $path; public function __construct( - protected ImageManager $imageTool + protected ImageResizer $imageResizer, ) { $this->path = public_path('favicon.ico'); } @@ -25,10 +24,8 @@ public function saveForUploadedImage(UploadedFile $file): void } $imageData = file_get_contents($file->getRealPath()); - $image = $this->imageTool->make($imageData); - $image->resize(32, 32); - $bmpData = $image->encode('png'); - $icoData = $this->pngToIco($bmpData, 32, 32); + $pngData = $this->imageResizer->resizeImageData($imageData, 32, 32, false, 'png'); + $icoData = $this->pngToIco($pngData, 32, 32); file_put_contents($this->path, $icoData); } @@ -81,7 +78,7 @@ public function getOriginalPath(): string * Built following the file format info from Wikipedia: * https://en.wikipedia.org/wiki/ICO_(file_format) */ - protected function pngToIco(string $bmpData, int $width, int $height): string + protected function pngToIco(string $pngData, int $width, int $height): string { // ICO header $header = pack('v', 0x00); // Reserved. Must always be 0 @@ -100,11 +97,11 @@ protected function pngToIco(string $bmpData, int $width, int $height): string // via intervention from png typically provides this as 24. $entry .= pack('v', 0x00); // Size of the image data in bytes - $entry .= pack('V', strlen($bmpData)); + $entry .= pack('V', strlen($pngData)); // Offset of the bmp data from file start $entry .= pack('V', strlen($header) + strlen($entry) + 4); // Join & return the combined parts of the ICO image data - return $header . $entry . $bmpData; + return $header . $entry . $pngData; } } diff --git a/app/Uploads/HttpFetcher.php b/app/Uploads/HttpFetcher.php deleted file mode 100644 index fcb4147e9ee..00000000000 --- a/app/Uploads/HttpFetcher.php +++ /dev/null @@ -1,38 +0,0 @@ - $uri, - CURLOPT_RETURNTRANSFER => 1, - CURLOPT_CONNECTTIMEOUT => 5, - ]); - - $data = curl_exec($ch); - $err = curl_error($ch); - curl_close($ch); - - if ($err) { - $errno = curl_errno($ch); - throw new HttpFetchException($err, $errno); - } - - return $data; - } -} diff --git a/app/Uploads/Image.php b/app/Uploads/Image.php index 9f571693a0a..0a267a64465 100644 --- a/app/Uploads/Image.php +++ b/app/Uploads/Image.php @@ -45,13 +45,14 @@ public function scopeVisible(Builder $query): Builder } /** - * Get a thumbnail for this image. + * Get a thumbnail URL for this image. + * Attempts to generate the thumbnail if not already existing. * * @throws \Exception */ - public function getThumb(?int $width, ?int $height, bool $keepRatio = false): string + public function getThumb(?int $width, ?int $height, bool $keepRatio = false): ?string { - return app()->make(ImageService::class)->getThumbnail($this, $width, $height, $keepRatio); + return app()->make(ImageResizer::class)->resizeToThumbnailUrl($this, $width, $height, $keepRatio, false); } /** diff --git a/app/Uploads/ImageRepo.php b/app/Uploads/ImageRepo.php index 5507933f3fa..0e312d88327 100644 --- a/app/Uploads/ImageRepo.php +++ b/app/Uploads/ImageRepo.php @@ -13,7 +13,8 @@ class ImageRepo { public function __construct( protected ImageService $imageService, - protected PermissionApplicator $permissions + protected PermissionApplicator $permissions, + protected ImageResizer $imageResizer, ) { } @@ -29,19 +30,13 @@ public function getById($id): Image * Execute a paginated query, returning in a standard format. * Also runs the query through the restriction system. */ - private function returnPaginated($query, $page = 1, $pageSize = 24): array + protected function returnPaginated(Builder $query, int $page = 1, int $pageSize = 24): array { $images = $query->orderBy('created_at', 'desc')->skip($pageSize * ($page - 1))->take($pageSize + 1)->get(); - $hasMore = count($images) > $pageSize; - - $returnImages = $images->take($pageSize); - $returnImages->each(function (Image $image) { - $this->loadThumbs($image); - }); return [ - 'images' => $returnImages, - 'has_more' => $hasMore, + 'images' => $images->take($pageSize), + 'has_more' => count($images) > $pageSize, ]; } @@ -119,7 +114,7 @@ public function saveNew(UploadedFile $uploadFile, string $type, int $uploadedTo $image = $this->imageService->saveNewFromUpload($uploadFile, $type, $uploadedTo, $resizeWidth, $resizeHeight, $keepRatio); if ($type !== 'system') { - $this->loadThumbs($image); + $this->imageResizer->loadGalleryThumbnailsForImage($image, true); } return $image; @@ -133,7 +128,7 @@ public function saveNew(UploadedFile $uploadFile, string $type, int $uploadedTo public function saveNewFromData(string $imageName, string $imageData, string $type, int $uploadedTo = 0): Image { $image = $this->imageService->saveNew($imageName, $imageData, $type, $uploadedTo); - $this->loadThumbs($image); + $this->imageResizer->loadGalleryThumbnailsForImage($image, true); return $image; } @@ -160,7 +155,7 @@ public function updateImageDetails(Image $image, $updateDetails): Image $image->fill($updateDetails); $image->updated_by = user()->id; $image->save(); - $this->loadThumbs($image); + $this->imageResizer->loadGalleryThumbnailsForImage($image, false); return $image; } @@ -179,8 +174,9 @@ public function updateImageFile(Image $image, UploadedFile $file): void $image->updated_by = user()->id; $image->touch(); $image->save(); + $this->imageService->replaceExistingFromUpload($image->path, $image->type, $file); - $this->loadThumbs($image, true); + $this->imageResizer->loadGalleryThumbnailsForImage($image, true); } /** @@ -212,31 +208,6 @@ public function destroyByUrlAndType(string $url, string $imageType): void } } - /** - * Load thumbnails onto an image object. - */ - public function loadThumbs(Image $image, bool $forceCreate = false): void - { - $image->setAttribute('thumbs', [ - 'gallery' => $this->getThumbnail($image, 150, 150, false, $forceCreate), - 'display' => $this->getThumbnail($image, 1680, null, true, $forceCreate), - ]); - } - - /** - * Get the thumbnail for an image. - * If $keepRatio is true only the width will be used. - * Checks the cache then storage to avoid creating / accessing the filesystem on every check. - */ - protected function getThumbnail(Image $image, ?int $width, ?int $height, bool $keepRatio, bool $forceCreate): ?string - { - try { - return $this->imageService->getThumbnail($image, $width, $height, $keepRatio, $forceCreate); - } catch (Exception $exception) { - return null; - } - } - /** * Get the raw image data from an Image. */ diff --git a/app/Uploads/ImageResizer.php b/app/Uploads/ImageResizer.php new file mode 100644 index 00000000000..4dc1b0b9922 --- /dev/null +++ b/app/Uploads/ImageResizer.php @@ -0,0 +1,222 @@ + $images + */ + public function loadGalleryThumbnailsForMany(iterable $images, bool $shouldCreate = false): void + { + foreach ($images as $image) { + $this->loadGalleryThumbnailsForImage($image, $shouldCreate); + } + } + + /** + * Load gallery thumbnails into the given image instance. + */ + public function loadGalleryThumbnailsForImage(Image $image, bool $shouldCreate): void + { + $thumbs = ['gallery' => null, 'display' => null]; + + try { + $thumbs['gallery'] = $this->resizeToThumbnailUrl($image, 150, 150, false, $shouldCreate); + $thumbs['display'] = $this->resizeToThumbnailUrl($image, 1680, null, true, $shouldCreate); + } catch (Exception $exception) { + // Prevent thumbnail errors from stopping execution + } + + $image->setAttribute('thumbs', $thumbs); + } + + /** + * Get the thumbnail for an image. + * If $keepRatio is true only the width will be used. + * Checks the cache then storage to avoid creating / accessing the filesystem on every check. + * + * @throws Exception + */ + public function resizeToThumbnailUrl( + Image $image, + ?int $width, + ?int $height, + bool $keepRatio = false, + bool $shouldCreate = false + ): ?string { + // Do not resize GIF images where we're not cropping + if ($keepRatio && $this->isGif($image)) { + return $this->storage->getPublicUrl($image->path); + } + + $thumbDirName = '/' . ($keepRatio ? 'scaled-' : 'thumbs-') . $width . '-' . $height . '/'; + $imagePath = $image->path; + $thumbFilePath = dirname($imagePath) . $thumbDirName . basename($imagePath); + + $thumbCacheKey = 'images::' . $image->id . '::' . $thumbFilePath; + + // Return path if in cache + $cachedThumbPath = Cache::get($thumbCacheKey); + if ($cachedThumbPath && !$shouldCreate) { + return $this->storage->getPublicUrl($cachedThumbPath); + } + + // If thumbnail has already been generated, serve that and cache path + $disk = $this->storage->getDisk($image->type); + if (!$shouldCreate && $disk->exists($thumbFilePath)) { + Cache::put($thumbCacheKey, $thumbFilePath, static::THUMBNAIL_CACHE_TIME); + + return $this->storage->getPublicUrl($thumbFilePath); + } + + $imageData = $disk->get($imagePath); + + // Do not resize apng images where we're not cropping + if ($keepRatio && $this->isApngData($image, $imageData)) { + Cache::put($thumbCacheKey, $image->path, static::THUMBNAIL_CACHE_TIME); + + return $this->storage->getPublicUrl($image->path); + } + + // If not in cache and thumbnail does not exist, generate thumb and cache path + $thumbData = $this->resizeImageData($imageData, $width, $height, $keepRatio); + $disk->put($thumbFilePath, $thumbData, true); + Cache::put($thumbCacheKey, $thumbFilePath, static::THUMBNAIL_CACHE_TIME); + + return $this->storage->getPublicUrl($thumbFilePath); + } + + /** + * Resize the image of given data to the specified size, and return the new image data. + * Format will remain the same as the input format, unless specified. + * + * @throws ImageUploadException + */ + public function resizeImageData( + string $imageData, + ?int $width, + ?int $height, + bool $keepRatio, + ?string $format = null, + ): string { + try { + $thumb = $this->interventionFromImageData($imageData); + } catch (Exception $e) { + throw new ImageUploadException(trans('errors.cannot_create_thumbs')); + } + + $this->orientImageToOriginalExif($thumb, $imageData); + + if ($keepRatio) { + $thumb->resize($width, $height, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + }); + } else { + $thumb->fit($width, $height); + } + + $thumbData = (string) $thumb->encode($format); + + // Use original image data if we're keeping the ratio + // and the resizing does not save any space. + if ($keepRatio && strlen($thumbData) > strlen($imageData)) { + return $imageData; + } + + return $thumbData; + } + + /** + * Create an intervention image instance from the given image data. + * Performs some manual library usage to ensure image is specifically loaded + * from given binary data instead of data being misinterpreted. + */ + protected function interventionFromImageData(string $imageData): InterventionImage + { + $driver = new Driver(); + return $driver->decoder->initFromBinary($imageData); + } + + /** + * Orientate the given intervention image based upon the given original image data. + * Intervention does have an `orientate` method but the exif data it needs is lost before it + * can be used (At least when created using binary string data) so we need to do some + * implementation on our side to use the original image data. + * Bulk of logic taken from: https://github.com/Intervention/image/blob/b734a4988b2148e7d10364b0609978a88d277536/src/Intervention/Image/Commands/OrientateCommand.php + * Copyright (c) Oliver Vogel, MIT License. + */ + protected function orientImageToOriginalExif(InterventionImage $image, string $originalData): void + { + if (!extension_loaded('exif')) { + return; + } + + $stream = Utils::streamFor($originalData)->detach(); + $exif = @exif_read_data($stream); + $orientation = $exif ? ($exif['Orientation'] ?? null) : null; + + switch ($orientation) { + case 2: + $image->flip(); + break; + case 3: + $image->rotate(180); + break; + case 4: + $image->rotate(180)->flip(); + break; + case 5: + $image->rotate(270)->flip(); + break; + case 6: + $image->rotate(270); + break; + case 7: + $image->rotate(90)->flip(); + break; + case 8: + $image->rotate(90); + break; + } + } + + /** + * Checks if the image is a gif. Returns true if it is, else false. + */ + protected function isGif(Image $image): bool + { + return strtolower(pathinfo($image->path, PATHINFO_EXTENSION)) === 'gif'; + } + + /** + * Check if the given image and image data is apng. + */ + protected function isApngData(Image $image, string &$imageData): bool + { + $isPng = strtolower(pathinfo($image->path, PATHINFO_EXTENSION)) === 'png'; + if (!$isPng) { + return false; + } + + $initialHeader = substr($imageData, 0, strpos($imageData, 'IDAT')); + + return str_contains($initialHeader, 'acTL'); + } +} diff --git a/app/Uploads/ImageService.php b/app/Uploads/ImageService.php index 66596a57f09..1655a4cc3aa 100644 --- a/app/Uploads/ImageService.php +++ b/app/Uploads/ImageService.php @@ -6,109 +6,27 @@ use BookStack\Entities\Models\Bookshelf; use BookStack\Entities\Models\Page; use BookStack\Exceptions\ImageUploadException; -use ErrorException; use Exception; -use GuzzleHttp\Psr7\Utils; -use Illuminate\Contracts\Cache\Repository as Cache; -use Illuminate\Contracts\Filesystem\FileNotFoundException; -use Illuminate\Contracts\Filesystem\Filesystem as Storage; -use Illuminate\Filesystem\FilesystemAdapter; -use Illuminate\Filesystem\FilesystemManager; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; -use Intervention\Image\Exception\NotSupportedException; -use Intervention\Image\Image as InterventionImage; -use Intervention\Image\ImageManager; -use League\Flysystem\WhitespacePathNormalizer; -use Psr\SimpleCache\InvalidArgumentException; use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\StreamedResponse; class ImageService { - protected ImageManager $imageTool; - protected Cache $cache; - protected FilesystemManager $fileSystem; - protected static array $supportedExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp']; - public function __construct(ImageManager $imageTool, FilesystemManager $fileSystem, Cache $cache) - { - $this->imageTool = $imageTool; - $this->fileSystem = $fileSystem; - $this->cache = $cache; - } - - /** - * Get the storage that will be used for storing images. - */ - protected function getStorageDisk(string $imageType = ''): Storage - { - return $this->fileSystem->disk($this->getStorageDiskName($imageType)); - } - - /** - * Check if local secure image storage (Fetched behind authentication) - * is currently active in the instance. - */ - protected function usingSecureImages(string $imageType = 'gallery'): bool - { - return $this->getStorageDiskName($imageType) === 'local_secure_images'; - } - - /** - * Check if "local secure restricted" (Fetched behind auth, with permissions enforced) - * is currently active in the instance. - */ - protected function usingSecureRestrictedImages() - { - return config('filesystems.images') === 'local_secure_restricted'; - } - - /** - * Change the originally provided path to fit any disk-specific requirements. - * This also ensures the path is kept to the expected root folders. - */ - protected function adjustPathForStorageDisk(string $path, string $imageType = ''): string - { - $path = (new WhitespacePathNormalizer())->normalizePath(str_replace('uploads/images/', '', $path)); - - if ($this->usingSecureImages($imageType)) { - return $path; - } - - return 'uploads/images/' . $path; - } - - /** - * Get the name of the storage disk to use. - */ - protected function getStorageDiskName(string $imageType): string - { - $storageType = config('filesystems.images'); - $localSecureInUse = ($storageType === 'local_secure' || $storageType === 'local_secure_restricted'); - - // Ensure system images (App logo) are uploaded to a public space - if ($imageType === 'system' && $localSecureInUse) { - return 'local'; - } - - // Rename local_secure options to get our image specific storage driver which - // is scoped to the relevant image directories. - if ($localSecureInUse) { - return 'local_secure_images'; - } - - return $storageType; + public function __construct( + protected ImageStorage $storage, + protected ImageResizer $resizer, + ) { } /** * Saves a new image from an upload. * * @throws ImageUploadException - * - * @return mixed */ public function saveNewFromUpload( UploadedFile $uploadedFile, @@ -117,12 +35,12 @@ public function saveNewFromUpload( int $resizeWidth = null, int $resizeHeight = null, bool $keepRatio = true - ) { + ): Image { $imageName = $uploadedFile->getClientOriginalName(); $imageData = file_get_contents($uploadedFile->getRealPath()); if ($resizeWidth !== null || $resizeHeight !== null) { - $imageData = $this->resizeImage($imageData, $resizeWidth, $resizeHeight, $keepRatio); + $imageData = $this->resizer->resizeImageData($imageData, $resizeWidth, $resizeHeight, $keepRatio); } return $this->saveNew($imageName, $imageData, $type, $uploadedTo); @@ -151,13 +69,13 @@ public function saveNewFromBase64Uri(string $base64Uri, string $name, string $ty */ public function saveNew(string $imageName, string $imageData, string $type, int $uploadedTo = 0): Image { - $storage = $this->getStorageDisk($type); + $disk = $this->storage->getDisk($type); $secureUploads = setting('app-secure-images'); - $fileName = $this->cleanImageFileName($imageName); + $fileName = $this->storage->cleanImageFileName($imageName); $imagePath = '/uploads/images/' . $type . '/' . date('Y-m') . '/'; - while ($storage->exists($this->adjustPathForStorageDisk($imagePath . $fileName, $type))) { + while ($disk->exists($imagePath . $fileName)) { $fileName = Str::random(3) . $fileName; } @@ -167,7 +85,7 @@ public function saveNew(string $imageName, string $imageData, string $type, int } try { - $this->saveImageDataInPublicSpace($storage, $this->adjustPathForStorageDisk($fullPath, $type), $imageData); + $disk->put($fullPath, $imageData, true); } catch (Exception $e) { Log::error('Error when attempting image upload:' . $e->getMessage()); @@ -177,7 +95,7 @@ public function saveNew(string $imageName, string $imageData, string $type, int $imageDetails = [ 'name' => $imageName, 'path' => $fullPath, - 'url' => $this->getPublicUrl($fullPath), + 'url' => $this->storage->getPublicUrl($fullPath), 'type' => $type, 'uploaded_to' => $uploadedTo, ]; @@ -194,214 +112,26 @@ public function saveNew(string $imageName, string $imageData, string $type, int return $image; } - public function replaceExistingFromUpload(string $path, string $type, UploadedFile $file): void - { - $imageData = file_get_contents($file->getRealPath()); - $storage = $this->getStorageDisk($type); - $adjustedPath = $this->adjustPathForStorageDisk($path, $type); - $storage->put($adjustedPath, $imageData); - } - - /** - * Save image data for the given path in the public space, if possible, - * for the provided storage mechanism. - */ - protected function saveImageDataInPublicSpace(Storage $storage, string $path, string $data) - { - $storage->put($path, $data); - - // Set visibility when a non-AWS-s3, s3-like storage option is in use. - // Done since this call can break s3-like services but desired for other image stores. - // Attempting to set ACL during above put request requires different permissions - // hence would technically be a breaking change for actual s3 usage. - $usingS3 = strtolower(config('filesystems.images')) === 's3'; - $usingS3Like = $usingS3 && !is_null(config('filesystems.disks.s3.endpoint')); - if (!$usingS3Like) { - $storage->setVisibility($path, 'public'); - } - } - - /** - * Clean up an image file name to be both URL and storage safe. - */ - protected function cleanImageFileName(string $name): string - { - $name = str_replace(' ', '-', $name); - $nameParts = explode('.', $name); - $extension = array_pop($nameParts); - $name = implode('-', $nameParts); - $name = Str::slug($name); - - if (strlen($name) === 0) { - $name = Str::random(10); - } - - return $name . '.' . $extension; - } - - /** - * Checks if the image is a gif. Returns true if it is, else false. - */ - protected function isGif(Image $image): bool - { - return strtolower(pathinfo($image->path, PATHINFO_EXTENSION)) === 'gif'; - } - - /** - * Check if the given image and image data is apng. - */ - protected function isApngData(Image $image, string &$imageData): bool - { - $isPng = strtolower(pathinfo($image->path, PATHINFO_EXTENSION)) === 'png'; - if (!$isPng) { - return false; - } - - $initialHeader = substr($imageData, 0, strpos($imageData, 'IDAT')); - - return strpos($initialHeader, 'acTL') !== false; - } - /** - * Get the thumbnail for an image. - * If $keepRatio is true only the width will be used. - * Checks the cache then storage to avoid creating / accessing the filesystem on every check. - * - * @throws Exception - * @throws InvalidArgumentException + * Replace an existing image file in the system using the given file. */ - public function getThumbnail(Image $image, ?int $width, ?int $height, bool $keepRatio = false, bool $forceCreate = false): string - { - // Do not resize GIF images where we're not cropping - if ($keepRatio && $this->isGif($image)) { - return $this->getPublicUrl($image->path); - } - - $thumbDirName = '/' . ($keepRatio ? 'scaled-' : 'thumbs-') . $width . '-' . $height . '/'; - $imagePath = $image->path; - $thumbFilePath = dirname($imagePath) . $thumbDirName . basename($imagePath); - - $thumbCacheKey = 'images::' . $image->id . '::' . $thumbFilePath; - - // Return path if in cache - $cachedThumbPath = $this->cache->get($thumbCacheKey); - if ($cachedThumbPath && !$forceCreate) { - return $this->getPublicUrl($cachedThumbPath); - } - - // If thumbnail has already been generated, serve that and cache path - $storage = $this->getStorageDisk($image->type); - if (!$forceCreate && $storage->exists($this->adjustPathForStorageDisk($thumbFilePath, $image->type))) { - $this->cache->put($thumbCacheKey, $thumbFilePath, 60 * 60 * 72); - - return $this->getPublicUrl($thumbFilePath); - } - - $imageData = $storage->get($this->adjustPathForStorageDisk($imagePath, $image->type)); - - // Do not resize apng images where we're not cropping - if ($keepRatio && $this->isApngData($image, $imageData)) { - $this->cache->put($thumbCacheKey, $image->path, 60 * 60 * 72); - - return $this->getPublicUrl($image->path); - } - - // If not in cache and thumbnail does not exist, generate thumb and cache path - $thumbData = $this->resizeImage($imageData, $width, $height, $keepRatio); - $this->saveImageDataInPublicSpace($storage, $this->adjustPathForStorageDisk($thumbFilePath, $image->type), $thumbData); - $this->cache->put($thumbCacheKey, $thumbFilePath, 60 * 60 * 72); - - return $this->getPublicUrl($thumbFilePath); - } - - /** - * Resize the image of given data to the specified size, and return the new image data. - * - * @throws ImageUploadException - */ - protected function resizeImage(string $imageData, ?int $width, ?int $height, bool $keepRatio): string - { - try { - $thumb = $this->imageTool->make($imageData); - } catch (ErrorException | NotSupportedException $e) { - throw new ImageUploadException(trans('errors.cannot_create_thumbs')); - } - - $this->orientImageToOriginalExif($thumb, $imageData); - - if ($keepRatio) { - $thumb->resize($width, $height, function ($constraint) { - $constraint->aspectRatio(); - $constraint->upsize(); - }); - } else { - $thumb->fit($width, $height); - } - - $thumbData = (string) $thumb->encode(); - - // Use original image data if we're keeping the ratio - // and the resizing does not save any space. - if ($keepRatio && strlen($thumbData) > strlen($imageData)) { - return $imageData; - } - - return $thumbData; - } - - /** - * Orientate the given intervention image based upon the given original image data. - * Intervention does have an `orientate` method but the exif data it needs is lost before it - * can be used (At least when created using binary string data) so we need to do some - * implementation on our side to use the original image data. - * Bulk of logic taken from: https://github.com/Intervention/image/blob/b734a4988b2148e7d10364b0609978a88d277536/src/Intervention/Image/Commands/OrientateCommand.php - * Copyright (c) Oliver Vogel, MIT License. - */ - protected function orientImageToOriginalExif(InterventionImage $image, string $originalData): void + public function replaceExistingFromUpload(string $path, string $type, UploadedFile $file): void { - if (!extension_loaded('exif')) { - return; - } - - $stream = Utils::streamFor($originalData)->detach(); - $exif = @exif_read_data($stream); - $orientation = $exif ? ($exif['Orientation'] ?? null) : null; - - switch ($orientation) { - case 2: - $image->flip(); - break; - case 3: - $image->rotate(180); - break; - case 4: - $image->rotate(180)->flip(); - break; - case 5: - $image->rotate(270)->flip(); - break; - case 6: - $image->rotate(270); - break; - case 7: - $image->rotate(90)->flip(); - break; - case 8: - $image->rotate(90); - break; - } + $imageData = file_get_contents($file->getRealPath()); + $disk = $this->storage->getDisk($type); + $disk->put($path, $imageData); } /** * Get the raw data content from an image. * - * @throws FileNotFoundException + * @throws Exception */ public function getImageData(Image $image): string { - $storage = $this->getStorageDisk(); + $disk = $this->storage->getDisk(); - return $storage->get($this->adjustPathForStorageDisk($image->path, $image->type)); + return $disk->get($image->path); } /** @@ -409,53 +139,13 @@ public function getImageData(Image $image): string * * @throws Exception */ - public function destroy(Image $image) + public function destroy(Image $image): void { - $this->destroyImagesFromPath($image->path, $image->type); + $disk = $this->storage->getDisk($image->type); + $disk->destroyAllMatchingNameFromPath($image->path); $image->delete(); } - /** - * Destroys an image at the given path. - * Searches for image thumbnails in addition to main provided path. - */ - protected function destroyImagesFromPath(string $path, string $imageType): bool - { - $path = $this->adjustPathForStorageDisk($path, $imageType); - $storage = $this->getStorageDisk($imageType); - - $imageFolder = dirname($path); - $imageFileName = basename($path); - $allImages = collect($storage->allFiles($imageFolder)); - - // Delete image files - $imagesToDelete = $allImages->filter(function ($imagePath) use ($imageFileName) { - return basename($imagePath) === $imageFileName; - }); - $storage->delete($imagesToDelete->all()); - - // Cleanup of empty folders - $foldersInvolved = array_merge([$imageFolder], $storage->directories($imageFolder)); - foreach ($foldersInvolved as $directory) { - if ($this->isFolderEmpty($storage, $directory)) { - $storage->deleteDirectory($directory); - } - } - - return true; - } - - /** - * Check whether a folder is empty. - */ - protected function isFolderEmpty(Storage $storage, string $path): bool - { - $files = $storage->files($path); - $folders = $storage->directories($path); - - return count($files) === 0 && count($folders) === 0; - } - /** * Delete gallery and drawings that are not within HTML content of pages or page revisions. * Checks based off of only the image name. @@ -463,7 +153,7 @@ protected function isFolderEmpty(Storage $storage, string $path): bool * * Returns the path of the images that would be/have been deleted. */ - public function deleteUnusedImages(bool $checkRevisions = true, bool $dryRun = true) + public function deleteUnusedImages(bool $checkRevisions = true, bool $dryRun = true): array { $types = ['gallery', 'drawio']; $deletedPaths = []; @@ -499,36 +189,32 @@ public function deleteUnusedImages(bool $checkRevisions = true, bool $dryRun = t * Attempts to convert the URL to a system storage url then * fetch the data from the disk or storage location. * Returns null if the image data cannot be fetched from storage. - * - * @throws FileNotFoundException */ - public function imageUriToBase64(string $uri): ?string + public function imageUrlToBase64(string $url): ?string { - $storagePath = $this->imageUrlToStoragePath($uri); - if (empty($uri) || is_null($storagePath)) { + $storagePath = $this->storage->urlToPath($url); + if (empty($url) || is_null($storagePath)) { return null; } - $storagePath = $this->adjustPathForStorageDisk($storagePath); - // Apply access control when local_secure_restricted images are active - if ($this->usingSecureRestrictedImages()) { + if ($this->storage->usingSecureRestrictedImages()) { if (!$this->checkUserHasAccessToRelationOfImageAtPath($storagePath)) { return null; } } - $storage = $this->getStorageDisk(); + $disk = $this->storage->getDisk(); $imageData = null; - if ($storage->exists($storagePath)) { - $imageData = $storage->get($storagePath); + if ($disk->exists($storagePath)) { + $imageData = $disk->get($storagePath); } if (is_null($imageData)) { return null; } - $extension = pathinfo($uri, PATHINFO_EXTENSION); + $extension = pathinfo($url, PATHINFO_EXTENSION); if ($extension === 'svg') { $extension = 'svg+xml'; } @@ -543,20 +229,18 @@ public function imageUriToBase64(string $uri): ?string */ public function pathAccessibleInLocalSecure(string $imagePath): bool { - /** @var FilesystemAdapter $disk */ - $disk = $this->getStorageDisk('gallery'); + $disk = $this->storage->getDisk('gallery'); - if ($this->usingSecureRestrictedImages() && !$this->checkUserHasAccessToRelationOfImageAtPath($imagePath)) { + if ($this->storage->usingSecureRestrictedImages() && !$this->checkUserHasAccessToRelationOfImageAtPath($imagePath)) { return false; } // Check local_secure is active - return $this->usingSecureImages() - && $disk instanceof FilesystemAdapter + return $disk->usingSecureImages() // Check the image file exists && $disk->exists($imagePath) // Check the file is likely an image file - && strpos($disk->mimeType($imagePath), 'image/') === 0; + && str_starts_with($disk->mimeType($imagePath), 'image/'); } /** @@ -565,14 +249,14 @@ public function pathAccessibleInLocalSecure(string $imagePath): bool */ protected function checkUserHasAccessToRelationOfImageAtPath(string $path): bool { - if (strpos($path, '/uploads/images/') === 0) { + if (str_starts_with($path, 'uploads/images/')) { $path = substr($path, 15); } // Strip thumbnail element from path if existing $originalPathSplit = array_filter(explode('/', $path), function (string $part) { - $resizedDir = (strpos($part, 'thumbs-') === 0 || strpos($part, 'scaled-') === 0); - $missingExtension = strpos($part, '.') === false; + $resizedDir = (str_starts_with($part, 'thumbs-') || str_starts_with($part, 'scaled-')); + $missingExtension = !str_contains($part, '.'); return !($resizedDir && $missingExtension); }); @@ -613,7 +297,7 @@ protected function checkUserHasAccessToRelationOfImageAtPath(string $path): bool */ public function streamImageFromStorageResponse(string $imageType, string $path): StreamedResponse { - $disk = $this->getStorageDisk($imageType); + $disk = $this->storage->getDisk($imageType); return $disk->response($path); } @@ -627,64 +311,4 @@ public static function isExtensionSupported(string $extension): bool { return in_array($extension, static::$supportedExtensions); } - - /** - * Get a storage path for the given image URL. - * Ensures the path will start with "uploads/images". - * Returns null if the url cannot be resolved to a local URL. - */ - private function imageUrlToStoragePath(string $url): ?string - { - $url = ltrim(trim($url), '/'); - - // Handle potential relative paths - $isRelative = strpos($url, 'http') !== 0; - if ($isRelative) { - if (strpos(strtolower($url), 'uploads/images') === 0) { - return trim($url, '/'); - } - - return null; - } - - // Handle local images based on paths on the same domain - $potentialHostPaths = [ - url('uploads/images/'), - $this->getPublicUrl('/uploads/images/'), - ]; - - foreach ($potentialHostPaths as $potentialBasePath) { - $potentialBasePath = strtolower($potentialBasePath); - if (strpos(strtolower($url), $potentialBasePath) === 0) { - return 'uploads/images/' . trim(substr($url, strlen($potentialBasePath)), '/'); - } - } - - return null; - } - - /** - * Gets a public facing url for an image by checking relevant environment variables. - * If s3-style store is in use it will default to guessing a public bucket URL. - */ - private function getPublicUrl(string $filePath): string - { - $storageUrl = config('filesystems.url'); - - // Get the standard public s3 url if s3 is set as storage type - // Uses the nice, short URL if bucket name has no periods in otherwise the longer - // region-based url will be used to prevent http issues. - if (!$storageUrl && config('filesystems.images') === 's3') { - $storageDetails = config('filesystems.disks.s3'); - if (strpos($storageDetails['bucket'], '.') === false) { - $storageUrl = 'https://' . $storageDetails['bucket'] . '.s3.amazonaws.com'; - } else { - $storageUrl = 'https://s3-' . $storageDetails['region'] . '.amazonaws.com/' . $storageDetails['bucket']; - } - } - - $basePath = $storageUrl ?: url('/'); - - return rtrim($basePath, '/') . $filePath; - } } diff --git a/app/Uploads/ImageStorage.php b/app/Uploads/ImageStorage.php new file mode 100644 index 00000000000..dc4abc0f281 --- /dev/null +++ b/app/Uploads/ImageStorage.php @@ -0,0 +1,136 @@ +getDiskName($imageType); + + return new ImageStorageDisk( + $diskName, + $this->fileSystem->disk($diskName), + ); + } + + /** + * Check if "local secure restricted" (Fetched behind auth, with permissions enforced) + * is currently active in the instance. + */ + public function usingSecureRestrictedImages(): bool + { + return config('filesystems.images') === 'local_secure_restricted'; + } + + /** + * Clean up an image file name to be both URL and storage safe. + */ + public function cleanImageFileName(string $name): string + { + $name = str_replace(' ', '-', $name); + $nameParts = explode('.', $name); + $extension = array_pop($nameParts); + $name = implode('-', $nameParts); + $name = Str::slug($name); + + if (strlen($name) === 0) { + $name = Str::random(10); + } + + return $name . '.' . $extension; + } + + /** + * Get the name of the storage disk to use. + */ + protected function getDiskName(string $imageType): string + { + $storageType = strtolower(config('filesystems.images')); + $localSecureInUse = ($storageType === 'local_secure' || $storageType === 'local_secure_restricted'); + + // Ensure system images (App logo) are uploaded to a public space + if ($imageType === 'system' && $localSecureInUse) { + return 'local'; + } + + // Rename local_secure options to get our image specific storage driver which + // is scoped to the relevant image directories. + if ($localSecureInUse) { + return 'local_secure_images'; + } + + return $storageType; + } + + /** + * Get a storage path for the given image URL. + * Ensures the path will start with "uploads/images". + * Returns null if the url cannot be resolved to a local URL. + */ + public function urlToPath(string $url): ?string + { + $url = ltrim(trim($url), '/'); + + // Handle potential relative paths + $isRelative = !str_starts_with($url, 'http'); + if ($isRelative) { + if (str_starts_with(strtolower($url), 'uploads/images')) { + return trim($url, '/'); + } + + return null; + } + + // Handle local images based on paths on the same domain + $potentialHostPaths = [ + url('uploads/images/'), + $this->getPublicUrl('/uploads/images/'), + ]; + + foreach ($potentialHostPaths as $potentialBasePath) { + $potentialBasePath = strtolower($potentialBasePath); + if (str_starts_with(strtolower($url), $potentialBasePath)) { + return 'uploads/images/' . trim(substr($url, strlen($potentialBasePath)), '/'); + } + } + + return null; + } + + /** + * Gets a public facing url for an image by checking relevant environment variables. + * If s3-style store is in use it will default to guessing a public bucket URL. + */ + public function getPublicUrl(string $filePath): string + { + $storageUrl = config('filesystems.url'); + + // Get the standard public s3 url if s3 is set as storage type + // Uses the nice, short URL if bucket name has no periods in otherwise the longer + // region-based url will be used to prevent http issues. + if (!$storageUrl && config('filesystems.images') === 's3') { + $storageDetails = config('filesystems.disks.s3'); + if (!str_contains($storageDetails['bucket'], '.')) { + $storageUrl = 'https://' . $storageDetails['bucket'] . '.s3.amazonaws.com'; + } else { + $storageUrl = 'https://s3-' . $storageDetails['region'] . '.amazonaws.com/' . $storageDetails['bucket']; + } + } + + $basePath = $storageUrl ?: url('/'); + + return rtrim($basePath, '/') . $filePath; + } +} diff --git a/app/Uploads/ImageStorageDisk.php b/app/Uploads/ImageStorageDisk.php new file mode 100644 index 00000000000..798b72abdbf --- /dev/null +++ b/app/Uploads/ImageStorageDisk.php @@ -0,0 +1,140 @@ +diskName === 'local_secure_images'; + } + + /** + * Change the originally provided path to fit any disk-specific requirements. + * This also ensures the path is kept to the expected root folders. + */ + protected function adjustPathForDisk(string $path): string + { + $path = (new WhitespacePathNormalizer())->normalizePath(str_replace('uploads/images/', '', $path)); + + if ($this->usingSecureImages()) { + return $path; + } + + return 'uploads/images/' . $path; + } + + /** + * Check if a file at the given path exists. + */ + public function exists(string $path): bool + { + return $this->filesystem->exists($this->adjustPathForDisk($path)); + } + + /** + * Get the file at the given path. + */ + public function get(string $path): ?string + { + return $this->filesystem->get($this->adjustPathForDisk($path)); + } + + /** + * Save the given image data at the given path. Can choose to set + * the image as public which will update its visibility after saving. + */ + public function put(string $path, string $data, bool $makePublic = false): void + { + $path = $this->adjustPathForDisk($path); + $this->filesystem->put($path, $data); + + // Set visibility when a non-AWS-s3, s3-like storage option is in use. + // Done since this call can break s3-like services but desired for other image stores. + // Attempting to set ACL during above put request requires different permissions + // hence would technically be a breaking change for actual s3 usage. + if ($makePublic && !$this->isS3Like()) { + $this->filesystem->setVisibility($path, 'public'); + } + } + + /** + * Destroys an image at the given path. + * Searches for image thumbnails in addition to main provided path. + */ + public function destroyAllMatchingNameFromPath(string $path): void + { + $path = $this->adjustPathForDisk($path); + + $imageFolder = dirname($path); + $imageFileName = basename($path); + $allImages = collect($this->filesystem->allFiles($imageFolder)); + + // Delete image files + $imagesToDelete = $allImages->filter(function ($imagePath) use ($imageFileName) { + return basename($imagePath) === $imageFileName; + }); + $this->filesystem->delete($imagesToDelete->all()); + + // Cleanup of empty folders + $foldersInvolved = array_merge([$imageFolder], $this->filesystem->directories($imageFolder)); + foreach ($foldersInvolved as $directory) { + if ($this->isFolderEmpty($directory)) { + $this->filesystem->deleteDirectory($directory); + } + } + } + + /** + * Get the mime type of the file at the given path. + * Only works for local filesystem adapters. + */ + public function mimeType(string $path): string + { + $path = $this->adjustPathForDisk($path); + return $this->filesystem instanceof FilesystemAdapter ? $this->filesystem->mimeType($path) : ''; + } + + /** + * Get a stream response for the image at the given path. + */ + public function response(string $path): StreamedResponse + { + return $this->filesystem->response($this->adjustPathForDisk($path)); + } + + /** + * Check if the image storage in use is an S3-like (but not likely S3) external system. + */ + protected function isS3Like(): bool + { + $usingS3 = $this->diskName === 's3'; + return $usingS3 && !is_null(config('filesystems.disks.s3.endpoint')); + } + + /** + * Check whether a folder is empty. + */ + protected function isFolderEmpty(string $path): bool + { + $files = $this->filesystem->files($path); + $folders = $this->filesystem->directories($path); + + return count($files) === 0 && count($folders) === 0; + } +} diff --git a/app/Uploads/UserAvatars.php b/app/Uploads/UserAvatars.php index 3cd37812acb..c623247352b 100644 --- a/app/Uploads/UserAvatars.php +++ b/app/Uploads/UserAvatars.php @@ -3,20 +3,20 @@ namespace BookStack\Uploads; use BookStack\Exceptions\HttpFetchException; +use BookStack\Http\HttpRequestService; use BookStack\Users\Models\User; use Exception; +use GuzzleHttp\Psr7\Request; use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; +use Psr\Http\Client\ClientExceptionInterface; class UserAvatars { - protected $imageService; - protected $http; - - public function __construct(ImageService $imageService, HttpFetcher $http) - { - $this->imageService = $imageService; - $this->http = $http; + public function __construct( + protected ImageService $imageService, + protected HttpRequestService $http + ) { } /** @@ -56,7 +56,7 @@ public function assignToUserFromExistingData(User $user, string $imageData, stri /** * Destroy all user avatars uploaded to the given user. */ - public function destroyAllForUser(User $user) + public function destroyAllForUser(User $user): void { $profileImages = Image::query()->where('type', '=', 'user') ->where('uploaded_to', '=', $user->id) @@ -70,7 +70,7 @@ public function destroyAllForUser(User $user) /** * Save an avatar image from an external service. * - * @throws Exception + * @throws HttpFetchException */ protected function saveAvatarImage(User $user, int $size = 500): Image { @@ -112,28 +112,32 @@ protected function createAvatarImageFromData(User $user, string $imageData, stri protected function getAvatarImageData(string $url): string { try { - $imageData = $this->http->fetch($url); - } catch (HttpFetchException $exception) { + $client = $this->http->buildClient(5); + $response = $client->sendRequest(new Request('GET', $url)); + if ($response->getStatusCode() !== 200) { + throw new HttpFetchException(trans('errors.cannot_get_image_from_url', ['url' => $url])); + } + + return (string) $response->getBody(); + } catch (ClientExceptionInterface $exception) { throw new HttpFetchException(trans('errors.cannot_get_image_from_url', ['url' => $url]), $exception->getCode(), $exception); } - - return $imageData; } /** * Check if fetching external avatars is enabled. */ - protected function avatarFetchEnabled(): bool + public function avatarFetchEnabled(): bool { $fetchUrl = $this->getAvatarUrl(); - return is_string($fetchUrl) && strpos($fetchUrl, 'http') === 0; + return str_starts_with($fetchUrl, 'http'); } /** * Get the URL to fetch avatars from. */ - protected function getAvatarUrl(): string + public function getAvatarUrl(): string { $configOption = config('services.avatar_url'); if ($configOption === false) { diff --git a/app/Users/Controllers/UserAccountController.php b/app/Users/Controllers/UserAccountController.php new file mode 100644 index 00000000000..55776a7f685 --- /dev/null +++ b/app/Users/Controllers/UserAccountController.php @@ -0,0 +1,227 @@ +middleware(function (Request $request, Closure $next) { + $this->preventGuestAccess(); + return $next($request); + }); + } + + /** + * Redirect the root my-account path to the main/first category. + * Required as a controller method, instead of the Route::redirect helper, + * to ensure the URL is generated correctly. + */ + public function redirect() + { + return redirect('/my-account/profile'); + } + + /** + * Show the profile form interface. + */ + public function showProfile() + { + $this->setPageTitle(trans('preferences.profile')); + + return view('users.account.profile', [ + 'model' => user(), + 'category' => 'profile', + ]); + } + + /** + * Handle the submission of the user profile form. + */ + public function updateProfile(Request $request, ImageRepo $imageRepo) + { + $this->preventAccessInDemoMode(); + + $user = user(); + $validated = $this->validate($request, [ + 'name' => ['min:2', 'max:100'], + 'email' => ['min:2', 'email', 'unique:users,email,' . $user->id], + 'language' => ['string', 'max:15', 'alpha_dash'], + 'profile_image' => array_merge(['nullable'], $this->getImageValidationRules()), + ]); + + $this->userRepo->update($user, $validated, userCan('users-manage')); + + // Save profile image if in request + if ($request->hasFile('profile_image')) { + $imageUpload = $request->file('profile_image'); + $imageRepo->destroyImage($user->avatar); + $image = $imageRepo->saveNew($imageUpload, 'user', $user->id); + $user->image_id = $image->id; + $user->save(); + } + + // Delete the profile image if reset option is in request + if ($request->has('profile_image_reset')) { + $imageRepo->destroyImage($user->avatar); + $user->image_id = 0; + $user->save(); + } + + return redirect('/my-account/profile'); + } + + /** + * Show the user-specific interface shortcuts. + */ + public function showShortcuts() + { + $shortcuts = UserShortcutMap::fromUserPreferences(); + $enabled = setting()->getForCurrentUser('ui-shortcuts-enabled', false); + + $this->setPageTitle(trans('preferences.shortcuts_interface')); + + return view('users.account.shortcuts', [ + 'category' => 'shortcuts', + 'shortcuts' => $shortcuts, + 'enabled' => $enabled, + ]); + } + + /** + * Update the user-specific interface shortcuts. + */ + public function updateShortcuts(Request $request) + { + $enabled = $request->get('enabled') === 'true'; + $providedShortcuts = $request->get('shortcut', []); + $shortcuts = new UserShortcutMap($providedShortcuts); + + setting()->putForCurrentUser('ui-shortcuts', $shortcuts->toJson()); + setting()->putForCurrentUser('ui-shortcuts-enabled', $enabled); + + $this->showSuccessNotification(trans('preferences.shortcuts_update_success')); + + return redirect('/my-account/shortcuts'); + } + + /** + * Show the notification preferences for the current user. + */ + public function showNotifications(PermissionApplicator $permissions) + { + $this->checkPermission('receive-notifications'); + + $preferences = (new UserNotificationPreferences(user())); + + $query = user()->watches()->getQuery(); + $query = $permissions->restrictEntityRelationQuery($query, 'watches', 'watchable_id', 'watchable_type'); + $query = $permissions->filterDeletedFromEntityRelationQuery($query, 'watches', 'watchable_id', 'watchable_type'); + $watches = $query->with('watchable')->paginate(20); + + $this->setPageTitle(trans('preferences.notifications')); + return view('users.account.notifications', [ + 'category' => 'notifications', + 'preferences' => $preferences, + 'watches' => $watches, + ]); + } + + /** + * Update the notification preferences for the current user. + */ + public function updateNotifications(Request $request) + { + $this->preventAccessInDemoMode(); + $this->checkPermission('receive-notifications'); + $data = $this->validate($request, [ + 'preferences' => ['required', 'array'], + 'preferences.*' => ['required', 'string'], + ]); + + $preferences = (new UserNotificationPreferences(user())); + $preferences->updateFromSettingsArray($data['preferences']); + $this->showSuccessNotification(trans('preferences.notifications_update_success')); + + return redirect('/my-account/notifications'); + } + + /** + * Show the view for the "Access & Security" account options. + */ + public function showAuth(SocialAuthService $socialAuthService) + { + $mfaMethods = user()->mfaValues()->get()->groupBy('method'); + + $this->setPageTitle(trans('preferences.auth')); + + return view('users.account.auth', [ + 'category' => 'auth', + 'mfaMethods' => $mfaMethods, + 'authMethod' => config('auth.method'), + 'activeSocialDrivers' => $socialAuthService->getActiveDrivers(), + ]); + } + + /** + * Handle the submission for the auth change password form. + */ + public function updatePassword(Request $request) + { + $this->preventAccessInDemoMode(); + + if (config('auth.method') !== 'standard') { + $this->showPermissionError(); + } + + $validated = $this->validate($request, [ + 'password' => ['required_with:password_confirm', Password::default()], + 'password-confirm' => ['same:password', 'required_with:password'], + ]); + + $this->userRepo->update(user(), $validated, false); + + $this->showSuccessNotification(trans('preferences.auth_change_password_success')); + + return redirect('/my-account/auth'); + } + + /** + * Show the user self-delete page. + */ + public function delete() + { + $this->setPageTitle(trans('preferences.delete_my_account')); + + return view('users.account.delete', [ + 'category' => 'profile', + ]); + } + + /** + * Remove the current user from the system. + */ + public function destroy(Request $request) + { + $this->preventAccessInDemoMode(); + + $requestNewOwnerId = intval($request->get('new_owner_id')) ?: null; + $newOwnerId = userCan('users-manage') ? $requestNewOwnerId : null; + + $this->userRepo->destroy(user(), $newOwnerId); + + return redirect('/'); + } +} diff --git a/app/Users/Controllers/UserController.php b/app/Users/Controllers/UserController.php index d42cc17bf07..f8d426b30c9 100644 --- a/app/Users/Controllers/UserController.php +++ b/app/Users/Controllers/UserController.php @@ -103,8 +103,7 @@ public function store(Request $request) */ public function edit(int $id, SocialAuthService $socialAuthService) { - $this->preventGuestAccess(); - $this->checkPermissionOrCurrentUser('users-manage', $id); + $this->checkPermission('users-manage'); $user = $this->userRepo->getById($id); $user->load(['apiTokens', 'mfaValues']); @@ -134,8 +133,7 @@ public function edit(int $id, SocialAuthService $socialAuthService) public function update(Request $request, int $id) { $this->preventAccessInDemoMode(); - $this->preventGuestAccess(); - $this->checkPermissionOrCurrentUser('users-manage', $id); + $this->checkPermission('users-manage'); $validated = $this->validate($request, [ //'name' => ['min:2', 'max:100'], @@ -150,7 +148,7 @@ public function update(Request $request, int $id) ]); $user = $this->userRepo->getById($id); - $this->userRepo->update($user, $validated, userCan('users-manage')); + $this->userRepo->update($user, $validated, true); // Save profile image if in request if ($request->hasFile('profile_image')) { @@ -168,9 +166,7 @@ public function update(Request $request, int $id) $user->save(); } - $redirectUrl = userCan('users-manage') ? '/settings/users' : "/settings/users/{$user->id}"; - - return redirect($redirectUrl); + return redirect('/settings/users'); } /** @@ -178,8 +174,7 @@ public function update(Request $request, int $id) */ public function delete(int $id) { - $this->preventGuestAccess(); - $this->checkPermissionOrCurrentUser('users-manage', $id); + $this->checkPermission('users-manage'); $user = $this->userRepo->getById($id); $this->setPageTitle(trans('settings.users_delete_named', ['userName' => $user->name])); @@ -195,8 +190,7 @@ public function delete(int $id) public function destroy(Request $request, int $id) { $this->preventAccessInDemoMode(); - $this->preventGuestAccess(); - $this->checkPermissionOrCurrentUser('users-manage', $id); + $this->checkPermission('users-manage'); $user = $this->userRepo->getById($id); $newOwnerId = intval($request->get('new_owner_id')) ?: null; diff --git a/app/Users/Controllers/UserPreferencesController.php b/app/Users/Controllers/UserPreferencesController.php index 9c38ff2af75..3600dc55f59 100644 --- a/app/Users/Controllers/UserPreferencesController.php +++ b/app/Users/Controllers/UserPreferencesController.php @@ -16,88 +16,6 @@ public function __construct( ) { } - /** - * Show the overview for user preferences. - */ - public function index() - { - return view('users.preferences.index'); - } - - /** - * Show the user-specific interface shortcuts. - */ - public function showShortcuts() - { - $shortcuts = UserShortcutMap::fromUserPreferences(); - $enabled = setting()->getForCurrentUser('ui-shortcuts-enabled', false); - - $this->setPageTitle(trans('preferences.shortcuts_interface')); - - return view('users.preferences.shortcuts', [ - 'shortcuts' => $shortcuts, - 'enabled' => $enabled, - ]); - } - - /** - * Update the user-specific interface shortcuts. - */ - public function updateShortcuts(Request $request) - { - $enabled = $request->get('enabled') === 'true'; - $providedShortcuts = $request->get('shortcut', []); - $shortcuts = new UserShortcutMap($providedShortcuts); - - setting()->putForCurrentUser('ui-shortcuts', $shortcuts->toJson()); - setting()->putForCurrentUser('ui-shortcuts-enabled', $enabled); - - $this->showSuccessNotification(trans('preferences.shortcuts_update_success')); - - return redirect('/preferences/shortcuts'); - } - - /** - * Show the notification preferences for the current user. - */ - public function showNotifications(PermissionApplicator $permissions) - { - $this->checkPermission('receive-notifications'); - $this->preventGuestAccess(); - - $preferences = (new UserNotificationPreferences(user())); - - $query = user()->watches()->getQuery(); - $query = $permissions->restrictEntityRelationQuery($query, 'watches', 'watchable_id', 'watchable_type'); - $query = $permissions->filterDeletedFromEntityRelationQuery($query, 'watches', 'watchable_id', 'watchable_type'); - $watches = $query->with('watchable')->paginate(20); - - $this->setPageTitle(trans('preferences.notifications')); - return view('users.preferences.notifications', [ - 'preferences' => $preferences, - 'watches' => $watches, - ]); - } - - /** - * Update the notification preferences for the current user. - */ - public function updateNotifications(Request $request) - { - $this->checkPermission('receive-notifications'); - $this->preventGuestAccess(); - $data = $this->validate($request, [ - 'preferences' => ['required', 'array'], - 'preferences.*' => ['required', 'string'], - ]); - - $preferences = (new UserNotificationPreferences(user())); - $preferences->updateFromSettingsArray($data['preferences']); - $this->showSuccessNotification(trans('preferences.notifications_update_success')); - - return redirect('/preferences/notifications'); - } - /** * Update the preferred view format for a list view of the given type. */ @@ -145,7 +63,7 @@ public function changeSort(Request $request, string $type) */ public function toggleDarkMode() { - $enabled = setting()->getForCurrentUser('dark-mode-enabled', false); + $enabled = setting()->getForCurrentUser('dark-mode-enabled'); setting()->putForCurrentUser('dark-mode-enabled', $enabled ? 'false' : 'true'); return redirect()->back(); diff --git a/app/Users/Controllers/UserSearchController.php b/app/Users/Controllers/UserSearchController.php index 1c7786f5896..b6f37bce08b 100644 --- a/app/Users/Controllers/UserSearchController.php +++ b/app/Users/Controllers/UserSearchController.php @@ -14,7 +14,7 @@ class UserSearchController extends Controller */ public function forSelect(Request $request) { - $hasPermission = signedInUser() && ( + $hasPermission = !user()->isGuest() && ( userCan('users-manage') || userCan('restrictions-manage-own') || userCan('restrictions-manage-all') diff --git a/app/Users/Models/User.php b/app/Users/Models/User.php index 7038f6d99e5..653137a7330 100644 --- a/app/Users/Models/User.php +++ b/app/Users/Models/User.php @@ -3,6 +3,7 @@ namespace BookStack\Users\Models; use BookStack\Access\Mfa\MfaValue; +use BookStack\Access\Notifications\ResetPasswordNotification; use BookStack\Access\SocialAccount; use BookStack\Activity\Models\Favourite; use BookStack\Activity\Models\Loggable; @@ -11,8 +12,8 @@ use BookStack\App\Model; use BookStack\App\Sluggable; use BookStack\Entities\Tools\SlugGenerator; -use BookStack\Notifications\ResetPassword; -use BookStack\Translation\LanguageManager; +use BookStack\Translation\LocaleDefinition; +use BookStack\Translation\LocaleManager; use BookStack\Uploads\Image; use Carbon\Carbon; use Exception; @@ -93,36 +94,29 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon */ protected string $avatarUrl = ''; - /** - * This holds the default user when loaded. - */ - protected static ?User $defaultUser = null; - /** * Returns the default public user. + * Fetches from the container as a singleton to effectively cache at an app level. */ - public static function getDefault(): self + public static function getGuest(): self { - if (!is_null(static::$defaultUser)) { - return static::$defaultUser; - } - - static::$defaultUser = static::query()->where('system_name', '=', 'public')->first(); - - return static::$defaultUser; + return app()->make('users.default'); } - public static function clearDefault(): void + /** + * Check if the user is the default public user. + */ + public function isGuest(): bool { - static::$defaultUser = null; + return $this->system_name === 'public'; } /** - * Check if the user is the default public user. + * Check if the user has general access to the application. */ - public function isDefault(): bool + public function hasAppAccess(): bool { - return $this->system_name === 'public'; + return !$this->isGuest() || setting('app-public'); } /** @@ -171,10 +165,6 @@ public function attachDefaultRole(): void */ public function can(string $permissionName): bool { - if ($this->email === 'guest') { - return false; - } - return $this->permissions()->contains($permissionName); } @@ -255,7 +245,7 @@ public function getAvatar(int $size = 50): string } try { - $avatar = $this->avatar ? url($this->avatar->getThumb($size, $size, false)) : $default; + $avatar = $this->avatar?->getThumb($size, $size, false) ?? $default; } catch (Exception $err) { $avatar = $default; } @@ -356,11 +346,11 @@ public function getShortName(int $chars = 8): string } /** - * Get the system language for this user. + * Get the locale for this user. */ - public function getLanguage(): string + public function getLocale(): LocaleDefinition { - return app()->make(LanguageManager::class)->getLanguageForUser($this); + return app()->make(LocaleManager::class)->getForUser($this); } /** @@ -372,7 +362,7 @@ public function getLanguage(): string */ public function sendPasswordResetNotification($token) { - $this->notify(new ResetPassword($token)); + $this->notify(new ResetPasswordNotification($token)); } /** @@ -388,7 +378,7 @@ public function logDescriptor(): string */ public function refreshSlug(): string { - $this->slug = app(SlugGenerator::class)->generate($this); + $this->slug = app()->make(SlugGenerator::class)->generate($this); return $this->slug; } diff --git a/app/Util/OutOfMemoryHandler.php b/app/Util/OutOfMemoryHandler.php new file mode 100644 index 00000000000..88e9581f492 --- /dev/null +++ b/app/Util/OutOfMemoryHandler.php @@ -0,0 +1,58 @@ +onOutOfMemory = $onOutOfMemory; + + $this->memoryReserve = str_repeat('x', $memoryReserveMB * 1_000_000); + $this->getHandler()->prepareForOutOfMemory(function () { + return $this->handle(); + }); + } + + protected function handle(): mixed + { + $result = null; + $this->memoryReserve = ''; + + if ($this->onOutOfMemory) { + $result = call_user_func($this->onOutOfMemory); + $this->forget(); + } + + return $result; + } + + /** + * Forget the handler so no action is taken place on out of memory. + */ + public function forget(): void + { + $this->memoryReserve = ''; + $this->onOutOfMemory = null; + $this->getHandler()->forgetOutOfMemoryHandler(); + } + + protected function getHandler(): Handler + { + return app()->make(ExceptionHandler::class); + } +} diff --git a/app/Util/SvgIcon.php b/app/Util/SvgIcon.php new file mode 100644 index 00000000000..ce6e1c23e37 --- /dev/null +++ b/app/Util/SvgIcon.php @@ -0,0 +1,39 @@ + 'svg-icon', + 'data-icon' => $this->name, + 'role' => 'presentation', + ], $this->attrs); + + $attrString = ' '; + foreach ($attrs as $attrName => $attr) { + $attrString .= $attrName . '="' . $attr . '" '; + } + + $iconPath = resource_path('icons/' . $this->name . '.svg'); + $themeIconPath = theme_path('icons/' . $this->name . '.svg'); + + if ($themeIconPath && file_exists($themeIconPath)) { + $iconPath = $themeIconPath; + } elseif (!file_exists($iconPath)) { + return ''; + } + + $fileContents = file_get_contents($iconPath); + + return str_replace('=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "AWS SDK Common Runtime Team", + "email": "aws-sdk-common-runtime@amazon.com" + } + ], + "description": "AWS Common Runtime for PHP", + "homepage": "https://github.com/awslabs/aws-crt-php", + "keywords": [ + "amazon", + "aws", + "crt", + "sdk" + ], + "support": { + "issues": "https://github.com/awslabs/aws-crt-php/issues", + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.2" + }, + "time": "2023-07-20T16:49:55+00:00" + }, + { + "name": "aws/aws-sdk-php", + "version": "3.283.8", + "source": { + "type": "git", + "url": "https://github.com/aws/aws-sdk-php.git", + "reference": "0f73ec85852312a6e971cfe2eebfd7c8091cca34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/0f73ec85852312a6e971cfe2eebfd7c8091cca34", + "reference": "0f73ec85852312a6e971cfe2eebfd7c8091cca34", + "shasum": "" + }, + "require": { + "aws/aws-crt-php": "^1.0.4", + "ext-json": "*", + "ext-pcre": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", + "guzzlehttp/promises": "^1.4.0 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "mtdowling/jmespath.php": "^2.6", + "php": ">=7.2.5", + "psr/http-message": "^1.0 || ^2.0" + }, + "require-dev": { + "andrewsville/php-token-reflection": "^1.4", + "aws/aws-php-sns-message-validator": "~1.0", + "behat/behat": "~3.0", + "composer/composer": "^1.10.22", + "dms/phpunit-arraysubset-asserts": "^0.4.0", + "doctrine/cache": "~1.4", + "ext-dom": "*", + "ext-openssl": "*", + "ext-pcntl": "*", + "ext-sockets": "*", + "nette/neon": "^2.3", + "paragonie/random_compat": ">= 2", + "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", + "psr/cache": "^1.0", + "psr/simple-cache": "^1.0", + "sebastian/comparator": "^1.2.3 || ^4.0", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", + "doctrine/cache": "To use the DoctrineCacheAdapter", + "ext-curl": "To send requests using cURL", + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "ext-sockets": "To use client-side monitoring" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Aws\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Amazon Web Services", + "homepage": "http://aws.amazon.com" + } + ], + "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", + "homepage": "http://aws.amazon.com/sdkforphp", + "keywords": [ + "amazon", + "aws", + "cloud", + "dynamodb", + "ec2", + "glacier", + "s3", + "sdk" + ], + "support": { + "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "issues": "https://github.com/aws/aws-sdk-php/issues", + "source": "https://github.com/aws/aws-sdk-php/tree/3.283.8" + }, + "time": "2023-10-19T19:26:52+00:00" + }, + { + "name": "bacon/bacon-qr-code", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22", + "shasum": "" + }, + "require": { + "dasprid/enum": "^1.0.3", + "ext-iconv": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phly/keep-a-changelog": "^2.1", + "phpunit/phpunit": "^7 | ^8 | ^9", + "spatie/phpunit-snapshot-assertions": "^4.2.9", + "squizlabs/php_codesniffer": "^3.4" + }, + "suggest": { + "ext-imagick": "to generate QR code images" + }, + "type": "library", + "autoload": { + "psr-4": { + "BaconQrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "support": { + "issues": "https://github.com/Bacon/BaconQrCode/issues", + "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8" + }, + "time": "2022-12-07T17:46:57+00:00" + }, + { + "name": "barryvdh/laravel-dompdf", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-dompdf.git", + "reference": "9843d2be423670fb434f4c978b3c0f4dd92c87a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/9843d2be423670fb434f4c978b3c0f4dd92c87a6", + "reference": "9843d2be423670fb434f4c978b3c0f4dd92c87a6", + "shasum": "" + }, + "require": { + "dompdf/dompdf": "^2.0.1", + "illuminate/support": "^6|^7|^8|^9|^10", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "nunomaduro/larastan": "^1|^2", + "orchestra/testbench": "^4|^5|^6|^7|^8", + "phpro/grumphp": "^1", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\DomPDF\\ServiceProvider" + ], + "aliases": { + "Pdf": "Barryvdh\\DomPDF\\Facade\\Pdf", + "PDF": "Barryvdh\\DomPDF\\Facade\\Pdf" + } + } + }, + "autoload": { + "psr-4": { + "Barryvdh\\DomPDF\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "A DOMPDF Wrapper for Laravel", + "keywords": [ + "dompdf", + "laravel", + "pdf" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-dompdf/issues", + "source": "https://github.com/barryvdh/laravel-dompdf/tree/v2.0.1" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-01-12T15:12:49+00:00" + }, + { + "name": "barryvdh/laravel-snappy", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-snappy.git", + "reference": "940eec2d99b89cbc9bea2f493cf068382962a485" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-snappy/zipball/940eec2d99b89cbc9bea2f493cf068382962a485", + "reference": "940eec2d99b89cbc9bea2f493cf068382962a485", + "shasum": "" + }, + "require": { + "illuminate/filesystem": "^9|^10", + "illuminate/support": "^9|^10", + "knplabs/knp-snappy": "^1.4", + "php": ">=7.2" + }, + "require-dev": { + "orchestra/testbench": "^7|^8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\Snappy\\ServiceProvider" + ], + "aliases": { + "PDF": "Barryvdh\\Snappy\\Facades\\SnappyPdf", + "SnappyImage": "Barryvdh\\Snappy\\Facades\\SnappyImage" + } + } + }, + "autoload": { + "psr-4": { + "Barryvdh\\Snappy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Snappy PDF/Image for Laravel", + "keywords": [ + "image", + "laravel", + "pdf", + "snappy", + "wkhtmltoimage", + "wkhtmltopdf" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-snappy/issues", + "source": "https://github.com/barryvdh/laravel-snappy/tree/v1.0.2" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-04-07T10:38:54+00:00" + }, + { + "name": "brick/math", + "version": "0.11.0", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "5.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.11.0" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2023-01-15T23:15:59+00:00" + }, + { + "name": "dasprid/enum", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6faf451159fb8ba4126b925ed2d78acfce0dc016", + "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016", + "shasum": "" + }, + "require": { + "php": ">=7.1 <9.0" + }, + "require-dev": { + "phpunit/phpunit": "^7 | ^8 | ^9", + "squizlabs/php_codesniffer": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.5" + }, + "time": "2023-08-25T16:18:39+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + }, + "time": "2022-10-27T11:44:00+00:00" + }, + { + "name": "doctrine/cache", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/2.2.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2022-05-20T20:07:39+00:00" + }, + { + "name": "doctrine/dbal", + "version": "3.7.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/5b7bd66c9ff58c04c5474ab85edce442f8081cb2", + "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "1.10.35", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "9.6.13", + "psalm/plugin-phpunit": "0.18.4", + "slevomat/coding-standard": "8.13.1", + "squizlabs/php_codesniffer": "3.7.2", + "symfony/cache": "^5.4|^6.0", + "symfony/console": "^4.4|^5.4|^6.0", + "vimeo/psalm": "4.30.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.7.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2023-10-06T05:06:20+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.2" + }, + "time": "2023-09-27T20:04:15+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^0.5.3 || ^1", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.8", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.24" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2022-10-12T20:51:15+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.8" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2023-06-16T13:40:37+00:00" + }, + { + "name": "doctrine/lexer", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-12-14T08:49:07+00:00" + }, + { + "name": "dompdf/dompdf", + "version": "v2.0.3", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/e8d2d5e37e8b0b30f0732a011295ab80680d7e85", + "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "masterminds/html5": "^2.0", + "phenx/php-font-lib": ">=0.5.4 <1.0.0", + "phenx/php-svg-lib": ">=0.3.3 <1.0.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "ext-json": "*", + "ext-zip": "*", + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^7.5 || ^8 || ^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance", + "ext-zlib": "Needed for pdf stream compression" + }, + "type": "library", + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "The Dompdf Community", + "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/v2.0.3" + }, + "time": "2023-02-07T12:51:48+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.3", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2023-08-10T19:36:49+00:00" + }, + { + "name": "egulias/email-validator", + "version": "3.2.6", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", + "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.2|^2", + "php": ">=7.2", + "symfony/polyfill-intl-idn": "^1.15" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.8|^9.3.3", + "vimeo/psalm": "^4" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/3.2.6" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-06-01T07:04:22+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6|^7" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-10-12T05:21:21+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2023-02-25T20:23:15+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.8.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.8.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2023-08-27T10:20:53+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2023-08-03T15:11:55+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.6.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-08-27T10:13:57+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/61bf437fc2197f587f6857d3ff903a24f1731b5d", + "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.19 || ^9.5.8", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2023-08-27T10:19:19+00:00" + }, + { + "name": "intervention/image", + "version": "2.7.2", + "source": { + "type": "git", + "url": "https://github.com/Intervention/image.git", + "reference": "04be355f8d6734c826045d02a1079ad658322dad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad", + "reference": "04be355f8d6734c826045d02a1079ad658322dad", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "guzzlehttp/psr7": "~1.1 || ^2.0", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.2", + "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15" + }, + "suggest": { + "ext-gd": "to use GD library based image processing.", + "ext-imagick": "to use Imagick based image processing.", + "intervention/imagecache": "Caching extension for the Intervention Image library" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + }, + "laravel": { + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ], + "aliases": { + "Image": "Intervention\\Image\\Facades\\Image" + } + } + }, + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src/Intervention/Image" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@intervention.io", + "homepage": "https://intervention.io/" + } + ], + "description": "Image handling and manipulation library with support for Laravel integration", + "homepage": "http://image.intervention.io/", + "keywords": [ + "gd", + "image", + "imagick", + "laravel", + "thumbnail", + "watermark" + ], + "support": { + "issues": "https://github.com/Intervention/image/issues", + "source": "https://github.com/Intervention/image/tree/2.7.2" + }, + "funding": [ + { + "url": "https://paypal.me/interventionio", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + } + ], + "time": "2022-05-21T17:30:32+00:00" + }, + { + "name": "knplabs/knp-snappy", + "version": "v1.4.4", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/snappy.git", + "reference": "3db13fe45d12a7bccb2b83f622e5a90f7e40b111" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/snappy/zipball/3db13fe45d12a7bccb2b83f622e5a90f7e40b111", + "reference": "3db13fe45d12a7bccb2b83f622e5a90f7e40b111", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/log": "^1.0||^2.0||^3.0", + "symfony/process": "~3.4||~4.3||~5.0||~6.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16||^3.0", + "pedrotroller/php-cs-custom-fixer": "^2.19", + "phpstan/phpstan": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.0.0", + "phpunit/phpunit": "~7.4||~8.5" + }, + "suggest": { + "h4cc/wkhtmltoimage-amd64": "Provides wkhtmltoimage-amd64 binary for Linux-compatible machines, use version `~0.12` as dependency", + "h4cc/wkhtmltoimage-i386": "Provides wkhtmltoimage-i386 binary for Linux-compatible machines, use version `~0.12` as dependency", + "h4cc/wkhtmltopdf-amd64": "Provides wkhtmltopdf-amd64 binary for Linux-compatible machines, use version `~0.12` as dependency", + "h4cc/wkhtmltopdf-i386": "Provides wkhtmltopdf-i386 binary for Linux-compatible machines, use version `~0.12` as dependency", + "wemersonjanuario/wkhtmltopdf-windows": "Provides wkhtmltopdf executable for Windows, use version `~0.12` as dependency" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Snappy\\": "src/Knp/Snappy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KNP Labs Team", + "homepage": "http://knplabs.com" + }, + { + "name": "Symfony Community", + "homepage": "http://github.com/KnpLabs/snappy/contributors" + } + ], + "description": "PHP library allowing thumbnail, snapshot or PDF generation from a url or a html page. Wrapper for wkhtmltopdf/wkhtmltoimage.", + "homepage": "http://github.com/KnpLabs/snappy", + "keywords": [ + "knp", + "knplabs", + "pdf", + "snapshot", + "thumbnail", + "wkhtmltopdf" + ], + "support": { + "issues": "https://github.com/KnpLabs/snappy/issues", + "source": "https://github.com/KnpLabs/snappy/tree/v1.4.4" + }, + "time": "2023-09-13T12:18:19+00:00" + }, + { + "name": "laravel/framework", + "version": "v9.52.16", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "082345d76fc6a55b649572efe10b11b03e279d24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/082345d76fc6a55b649572efe10b11b03e279d24", + "reference": "082345d76fc6a55b649572efe10b11b03e279d24", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.2", + "guzzlehttp/uri-template": "^1.0", + "laravel/serializable-closure": "^1.2.2", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.62.1", + "nunomaduro/termwind": "^1.13", + "php": "^8.0.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^6.0.9", + "symfony/error-handler": "^6.0", + "symfony/finder": "^6.0", + "symfony/http-foundation": "^6.0", + "symfony/http-kernel": "^6.0", + "symfony/mailer": "^6.0", + "symfony/mime": "^6.0", + "symfony/process": "^6.0", + "symfony/routing": "^6.0", + "symfony/uid": "^6.0", + "symfony/var-dumper": "^6.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "doctrine/dbal": "^2.13.3|^3.1.4", + "ext-gmp": "*", + "fakerphp/faker": "^1.21", + "guzzlehttp/guzzle": "^7.5", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^7.24", + "pda/pheanstalk": "^4.0", + "phpstan/phpdoc-parser": "^1.15", + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^9.5.8", + "predis/predis": "^1.1.9|^2.0.2", + "symfony/cache": "^6.0", + "symfony/http-client": "^6.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.5.1).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-10-03T13:02:30+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902", + "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2023-07-14T13:56:28+00:00" + }, + { + "name": "laravel/socialite", + "version": "v5.9.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/socialite.git", + "reference": "49ecc4c907ed88c1254bae991c6b2948945645c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/socialite/zipball/49ecc4c907ed88c1254bae991c6b2948945645c2", + "reference": "49ecc4c907ed88c1254bae991c6b2948945645c2", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", + "league/oauth1-client": "^1.10.1", + "php": "^7.2|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0|^8.0", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.0|^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Socialite\\SocialiteServiceProvider" + ], + "aliases": { + "Socialite": "Laravel\\Socialite\\Facades\\Socialite" + } + } + }, + "autoload": { + "psr-4": { + "Laravel\\Socialite\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.", + "homepage": "https://laravel.com", + "keywords": [ + "laravel", + "oauth" + ], + "support": { + "issues": "https://github.com/laravel/socialite/issues", + "source": "https://github.com/laravel/socialite" + }, + "time": "2023-09-07T16:13:53+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.8.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/b936d415b252b499e8c3b1f795cd4fc20f57e1f3", + "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.8.2" + }, + "time": "2023-08-15T14:27:00+00:00" + }, + { + "name": "league/commonmark", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2023-08-30T16:55:00+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.17.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "bd4c9b26849d82364119c68429541f1631fba94b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/bd4c9b26849d82364119c68429541f1631fba94b", + "reference": "bd4c9b26849d82364119c68429541f1631fba94b", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.220.0", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.14", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.17.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-10-05T20:15:05+00:00" + }, + { + "name": "league/flysystem-aws-s3-v3", + "version": "3.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", + "reference": "ded9ba346bb01cb9cc4cc7f2743c2c0e14d18e1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/ded9ba346bb01cb9cc4cc7f2743c2c0e14d18e1c", + "reference": "ded9ba346bb01cb9cc4cc7f2743c2c0e14d18e1c", + "shasum": "" + }, + "require": { + "aws/aws-sdk-php": "^3.220.0", + "league/flysystem": "^3.10.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\AwsS3V3\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "AWS S3 filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "aws", + "file", + "files", + "filesystem", + "s3", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues", + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.16.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-08-30T10:14:57+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "ec7383f25642e6fd4bb0c9554fc2311245391781" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ec7383f25642e6fd4bb0c9554fc2311245391781", + "reference": "ec7383f25642e6fd4bb0c9554fc2311245391781", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-local/issues", + "source": "https://github.com/thephpleague/flysystem-local/tree/3.16.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-08-30T10:23:59+00:00" + }, + { + "name": "league/html-to-markdown", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/html-to-markdown.git", + "reference": "0b4066eede55c48f38bcee4fb8f0aa85654390fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/0b4066eede55c48f38bcee4fb8f0aa85654390fd", + "reference": "0b4066eede55c48f38bcee4fb8f0aa85654390fd", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xml": "*", + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "mikehaertl/php-shellcommand": "^1.1.0", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^8.5 || ^9.2", + "scrutinizer/ocular": "^1.6", + "unleashedtech/php-coding-standard": "^2.7 || ^3.0", + "vimeo/psalm": "^4.22 || ^5.0" + }, + "bin": [ + "bin/html-to-markdown" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\HTMLToMarkdown\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + }, + { + "name": "Nick Cernis", + "email": "nick@cern.is", + "homepage": "http://modernnerd.net", + "role": "Original Author" + } + ], + "description": "An HTML-to-markdown conversion helper for PHP", + "homepage": "https://github.com/thephpleague/html-to-markdown", + "keywords": [ + "html", + "markdown" + ], + "support": { + "issues": "https://github.com/thephpleague/html-to-markdown/issues", + "source": "https://github.com/thephpleague/html-to-markdown/tree/5.1.1" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/html-to-markdown", + "type": "tidelift" + } + ], + "time": "2023-07-12T21:21:09+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.14.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "b6a5854368533df0295c5761a0253656a2e52d9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e", + "reference": "b6a5854368533df0295c5761a0253656a2e52d9e", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.14.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2023-10-17T14:13:20+00:00" + }, + { + "name": "league/oauth1-client", + "version": "v1.10.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth1-client.git", + "reference": "d6365b901b5c287dd41f143033315e2f777e1167" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/d6365b901b5c287dd41f143033315e2f777e1167", + "reference": "d6365b901b5c287dd41f143033315e2f777e1167", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-openssl": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "guzzlehttp/psr7": "^1.7|^2.0", + "php": ">=7.1||>=8.0" + }, + "require-dev": { + "ext-simplexml": "*", + "friendsofphp/php-cs-fixer": "^2.17", + "mockery/mockery": "^1.3.3", + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5||9.5" + }, + "suggest": { + "ext-simplexml": "For decoding XML-based responses." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev", + "dev-develop": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "League\\OAuth1\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Corlett", + "email": "bencorlett@me.com", + "homepage": "http://www.webcomm.com.au", + "role": "Developer" + } + ], + "description": "OAuth 1.0 Client Library", + "keywords": [ + "Authentication", + "SSO", + "authorization", + "bitbucket", + "identity", + "idp", + "oauth", + "oauth1", + "single sign on", + "trello", + "tumblr", + "twitter" + ], + "support": { + "issues": "https://github.com/thephpleague/oauth1-client/issues", + "source": "https://github.com/thephpleague/oauth1-client/tree/v1.10.1" + }, + "time": "2022-04-15T14:02:14+00:00" + }, + { + "name": "league/oauth2-client", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth2-client.git", + "reference": "160d6274b03562ebeb55ed18399281d8118b76c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/160d6274b03562ebeb55ed18399281d8118b76c8", + "reference": "160d6274b03562ebeb55ed18399281d8118b76c8", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0 || ^7.0", + "paragonie/random_compat": "^1 || ^2 || ^9.99", + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.3.5", + "php-parallel-lint/php-parallel-lint": "^1.3.1", + "phpunit/phpunit": "^5.7 || ^6.0 || ^9.5", + "squizlabs/php_codesniffer": "^2.3 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\OAuth2\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alex Bilbie", + "email": "hello@alexbilbie.com", + "homepage": "http://www.alexbilbie.com", + "role": "Developer" + }, + { + "name": "Woody Gilk", + "homepage": "https://github.com/shadowhand", + "role": "Contributor" + } + ], + "description": "OAuth 2.0 Client Library", + "keywords": [ + "Authentication", + "SSO", + "authorization", + "identity", + "idp", + "oauth", + "oauth2", + "single sign on" + ], + "support": { + "issues": "https://github.com/thephpleague/oauth2-client/issues", + "source": "https://github.com/thephpleague/oauth2-client/tree/2.7.0" + }, + "time": "2023-04-16T18:19:15+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.8.1", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" + }, + "time": "2023-05-10T11:58:31+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.9.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2023-02-06T13:44:46+00:00" + }, + { + "name": "mtdowling/jmespath.php", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/jmespath/jmespath.php.git", + "reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/bbb69a935c2cbb0c03d7f481a238027430f6440b", + "reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-mbstring": "^1.17" + }, + "require-dev": { + "composer/xdebug-handler": "^3.0.3", + "phpunit/phpunit": "^8.5.33" + }, + "bin": [ + "bin/jp.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "files": [ + "src/JmesPath.php" + ], + "psr-4": { + "JmesPath\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Declaratively specify how to extract elements from a JSON document", + "keywords": [ + "json", + "jsonpath" + ], + "support": { + "issues": "https://github.com/jmespath/jmespath.php/issues", + "source": "https://github.com/jmespath/jmespath.php/tree/2.7.0" + }, + "time": "2023-08-25T10:54:48+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.71.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "98276233188583f2ff845a0f992a235472d9466a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/98276233188583f2ff845a0f992a235472d9466a", + "reference": "98276233188583f2ff845a0f992a235472d9466a", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2023-09-25T11:31:05+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.5", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": "7.1 - 8.3" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.5" + }, + "time": "2023-10-05T20:37:59+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "cead6637226456b35e1175cc53797dd585d85545" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/cead6637226456b35e1175cc53797dd585d85545", + "reference": "cead6637226456b35e1175cc53797dd585d85545", + "shasum": "" + }, + "require": { + "php": ">=8.0 <8.4" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.5", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.2" + }, + "time": "2023-09-19T11:58:07+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.17.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + }, + "time": "2023-08-13T19:53:39+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v1.15.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^1.0.", + "illuminate/console": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "laravel/pint": "^1.0.0", + "pestphp/pest": "^1.21.0", + "pestphp/pest-plugin-mock": "^1.0", + "phpstan/phpstan": "^1.4.6", + "phpstan/phpstan-strict-rules": "^1.1.0", + "symfony/var-dumper": "^5.2.7|^6.0.0", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2023-02-08T01:06:31+00:00" + }, + { + "name": "onelogin/php-saml", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/onelogin/php-saml.git", + "reference": "b22a57ebd13e838b90df5d3346090bc37056409d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/onelogin/php-saml/zipball/b22a57ebd13e838b90df5d3346090bc37056409d", + "reference": "b22a57ebd13e838b90df5d3346090bc37056409d", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "robrichards/xmlseclibs": ">=3.1.1" + }, + "require-dev": { + "pdepend/pdepend": "^2.8.0", + "php-coveralls/php-coveralls": "^2.0", + "phploc/phploc": "^4.0 || ^5.0 || ^6.0 || ^7.0", + "phpunit/phpunit": "^9.5", + "sebastian/phpcpd": "^4.0 || ^5.0 || ^6.0 ", + "squizlabs/php_codesniffer": "^3.5.8" + }, + "suggest": { + "ext-curl": "Install curl lib to be able to use the IdPMetadataParser for parsing remote XMLs", + "ext-dom": "Install xml lib", + "ext-openssl": "Install openssl lib in order to handle with x509 certs (require to support sign and encryption)", + "ext-zlib": "Install zlib" + }, + "type": "library", + "autoload": { + "psr-4": { + "OneLogin\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "OneLogin PHP SAML Toolkit", + "homepage": "https://developers.onelogin.com/saml/php", + "keywords": [ + "SAML2", + "onelogin", + "saml" + ], + "support": { + "email": "sixto.garcia@onelogin.com", + "issues": "https://github.com/onelogin/php-saml/issues", + "source": "https://github.com/onelogin/php-saml/" + }, + "time": "2022-07-15T20:44:36+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v2.6.3", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "58c3f47f650c94ec05a151692652a868995d2938" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", + "reference": "58c3f47f650c94ec05a151692652a868995d2938", + "shasum": "" + }, + "require": { + "php": "^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^6|^7|^8|^9", + "vimeo/psalm": "^1|^2|^3|^4" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2022-06-14T06:56:20+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" + }, + { + "name": "phenx/php-font-lib", + "version": "0.5.4", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-font-lib.git", + "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/dd448ad1ce34c63d09baccd05415e361300c35b4", + "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4", + "shasum": "" + }, + "require": { + "ext-mbstring": "*" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3 || ^4 || ^5" + }, + "type": "library", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/PhenX/php-font-lib", + "support": { + "issues": "https://github.com/dompdf/php-font-lib/issues", + "source": "https://github.com/dompdf/php-font-lib/tree/0.5.4" + }, + "time": "2021-12-17T19:44:54+00:00" + }, + { + "name": "phenx/php-svg-lib", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-svg-lib.git", + "reference": "76876c6cf3080bcb6f249d7d59705108166a6685" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/76876c6cf3080bcb6f249d7d59705108166a6685", + "reference": "76876c6cf3080bcb6f249d7d59705108166a6685", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0", + "sabberworm/php-css-parser": "^8.4" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Svg\\": "src/Svg" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/PhenX/php-svg-lib", + "support": { + "issues": "https://github.com/dompdf/php-svg-lib/issues", + "source": "https://github.com/dompdf/php-svg-lib/tree/0.5.0" + }, + "time": "2022-09-06T12:16:56+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2023-02-25T19:38:58+00:00" + }, + { + "name": "phpseclib/phpseclib", + "version": "3.0.23", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "866cc78fbd82462ffd880e3f65692afe928bed50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/866cc78fbd82462ffd880e3f65692afe928bed50", + "reference": "866cc78fbd82462ffd880e3f65692afe928bed50", + "shasum": "" + }, + "require": { + "paragonie/constant_time_encoding": "^1|^2", + "paragonie/random_compat": "^1.4|^2.0|^9.99.99", + "php": ">=5.6.1" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "ext-dom": "Install the DOM extension to load XML formatted public keys.", + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib3\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "support": { + "issues": "https://github.com/phpseclib/phpseclib/issues", + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.23" + }, + "funding": [ + { + "url": "https://github.com/terrafrost", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpseclib", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", + "type": "tidelift" + } + ], + "time": "2023-09-18T17:22:01+00:00" + }, + { + "name": "pragmarx/google2fa", + "version": "v8.0.1", + "source": { + "type": "git", + "url": "https://github.com/antonioribeiro/google2fa.git", + "reference": "80c3d801b31fe165f8fe99ea085e0a37834e1be3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/80c3d801b31fe165f8fe99ea085e0a37834e1be3", + "reference": "80c3d801b31fe165f8fe99ea085e0a37834e1be3", + "shasum": "" + }, + "require": { + "paragonie/constant_time_encoding": "^1.0|^2.0", + "php": "^7.1|^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.18", + "phpunit/phpunit": "^7.5.15|^8.5|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "PragmaRX\\Google2FA\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Antonio Carlos Ribeiro", + "email": "acr@antoniocarlosribeiro.com", + "role": "Creator & Designer" + } + ], + "description": "A One Time Password Authentication package, compatible with Google Authenticator.", + "keywords": [ + "2fa", + "Authentication", + "Two Factor Authentication", + "google2fa" + ], + "support": { + "issues": "https://github.com/antonioribeiro/google2fa/issues", + "source": "https://github.com/antonioribeiro/google2fa/tree/v8.0.1" + }, + "time": "2022-06-13T21:57:56+00:00" + }, + { + "name": "predis/predis", + "version": "v2.2.2", + "source": { + "type": "git", + "url": "https://github.com/predis/predis.git", + "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/predis/predis/zipball/b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", + "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.3", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^8.0 || ~9.4.4" + }, + "suggest": { + "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" + }, + "type": "library", + "autoload": { + "psr-4": { + "Predis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Till Krüss", + "homepage": "https://till.im", + "role": "Maintainer" + } + ], + "description": "A flexible and feature-complete Redis client for PHP.", + "homepage": "http://github.com/predis/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "support": { + "issues": "https://github.com/predis/predis/issues", + "source": "https://github.com/predis/predis/tree/v2.2.2" + }, + "funding": [ + { + "url": "https://github.com/sponsors/tillkruss", + "type": "github" + } + ], + "time": "2023-09-13T16:42:03+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + }, + "time": "2023-04-10T20:10:41+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.11.22", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/128fa1b608be651999ed9789c95e6e2a31b5802b", + "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-0.11": "0.11.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.22" + }, + "time": "2023-10-14T21:56:36+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/ad7475d1c9e70b190ecffc58f2d989416af339b4", + "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "symfony/polyfill-php81": "^1.23" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-27T19:12:24+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.7.4", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "60a4c63ab724854332900504274f6150ff26d286" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", + "reference": "60a4c63ab724854332900504274f6150ff26d286", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.7.4" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2023-04-15T23:01:58+00:00" + }, + { + "name": "robrichards/xmlseclibs", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/robrichards/xmlseclibs.git", + "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/f8f19e58f26cdb42c54b214ff8a820760292f8df", + "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "php": ">= 5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "RobRichards\\XMLSecLibs\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "A PHP library for XML Security", + "homepage": "https://github.com/robrichards/xmlseclibs", + "keywords": [ + "security", + "signature", + "xml", + "xmldsig" + ], + "support": { + "issues": "https://github.com/robrichards/xmlseclibs/issues", + "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.1" + }, + "time": "2020-09-05T13:00:25+00:00" + }, + { + "name": "sabberworm/php-css-parser", + "version": "8.4.0", + "source": { + "type": "git", + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/e41d2140031d533348b2192a83f02d8dd8a71d30", + "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=5.6.20" + }, + "require-dev": { + "codacy/coverage": "^1.4", + "phpunit/phpunit": "^4.8.36" + }, + "suggest": { + "ext-mbstring": "for parsing UTF-8 CSS" + }, + "type": "library", + "autoload": { + "psr-4": { + "Sabberworm\\CSS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "support": { + "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", + "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.4.0" + }, + "time": "2021-12-11T13:40:54+00:00" + }, + { + "name": "socialiteproviders/discord", + "version": "4.2.0", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/Discord.git", + "reference": "c71c379acfdca5ba4aa65a3db5ae5222852a919c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/Discord/zipball/c71c379acfdca5ba4aa65a3db5ae5222852a919c", + "reference": "c71c379acfdca5ba4aa65a3db5ae5222852a919c", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4 || ^8.0", + "socialiteproviders/manager": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "SocialiteProviders\\Discord\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christopher Eklund", + "email": "eklundchristopher@gmail.com" + } + ], + "description": "Discord OAuth2 Provider for Laravel Socialite", + "keywords": [ + "discord", + "laravel", + "oauth", + "provider", + "socialite" + ], + "support": { + "docs": "https://socialiteproviders.com/discord", + "issues": "https://github.com/socialiteproviders/providers/issues", + "source": "https://github.com/socialiteproviders/providers" + }, + "time": "2023-07-24T23:28:47+00:00" + }, + { + "name": "socialiteproviders/gitlab", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/GitLab.git", + "reference": "a8f67d3b02c9ee8c70c25c6728417c0eddcbbb9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/GitLab/zipball/a8f67d3b02c9ee8c70c25c6728417c0eddcbbb9d", + "reference": "a8f67d3b02c9ee8c70c25c6728417c0eddcbbb9d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2 || ^8.0", + "socialiteproviders/manager": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "SocialiteProviders\\GitLab\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christoffer Martinsen", + "email": "christoffermartinsen@gmail.com" + } + ], + "description": "GitLab OAuth2 Provider for Laravel Socialite", + "support": { + "source": "https://github.com/SocialiteProviders/GitLab/tree/4.1.0" + }, + "time": "2020-12-01T23:10:59+00:00" + }, + { + "name": "socialiteproviders/manager", + "version": "v4.4.0", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/Manager.git", + "reference": "df5e45b53d918ec3d689f014d98a6c838b98ed96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/df5e45b53d918ec3d689f014d98a6c838b98ed96", + "reference": "df5e45b53d918ec3d689f014d98a6c838b98ed96", + "shasum": "" + }, + "require": { + "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0", + "laravel/socialite": "~5.0", + "php": "^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.2", + "phpunit/phpunit": "^6.0 || ^9.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "SocialiteProviders\\Manager\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "SocialiteProviders\\Manager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andy Wendt", + "email": "andy@awendt.com" + }, + { + "name": "Anton Komarev", + "email": "a.komarev@cybercog.su" + }, + { + "name": "Miguel Piedrafita", + "email": "soy@miguelpiedrafita.com" + }, + { + "name": "atymic", + "email": "atymicq@gmail.com", + "homepage": "https://atymic.dev" + } + ], + "description": "Easily add new or override built-in providers in Laravel Socialite.", + "homepage": "https://socialiteproviders.com", + "keywords": [ + "laravel", + "manager", + "oauth", + "providers", + "socialite" + ], + "support": { + "issues": "https://github.com/socialiteproviders/manager/issues", + "source": "https://github.com/socialiteproviders/manager" + }, + "time": "2023-08-27T23:46:34+00:00" + }, + { + "name": "socialiteproviders/microsoft-azure", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/Microsoft-Azure.git", + "reference": "7522b27cd8518706b50e03b40a396fb0a6891feb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/Microsoft-Azure/zipball/7522b27cd8518706b50e03b40a396fb0a6891feb", + "reference": "7522b27cd8518706b50e03b40a396fb0a6891feb", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2 || ^8.0", + "socialiteproviders/manager": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "SocialiteProviders\\Azure\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Hemmings", + "email": "chris@hemmin.gs" + } + ], + "description": "Microsoft Azure OAuth2 Provider for Laravel Socialite", + "keywords": [ + "azure", + "laravel", + "microsoft", + "oauth", + "provider", + "socialite" + ], + "support": { + "docs": "https://socialiteproviders.com/microsoft-azure", + "issues": "https://github.com/socialiteproviders/providers/issues", + "source": "https://github.com/socialiteproviders/providers" + }, + "time": "2022-03-15T21:17:43+00:00" + }, + { + "name": "socialiteproviders/okta", + "version": "4.3.0", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/Okta.git", + "reference": "e5fb62035bfa0ccdbc8facf4cf205428fc502edb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/Okta/zipball/e5fb62035bfa0ccdbc8facf4cf205428fc502edb", + "reference": "e5fb62035bfa0ccdbc8facf4cf205428fc502edb", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4 || ^8.0", + "socialiteproviders/manager": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "SocialiteProviders\\Okta\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chase Coney", + "email": "chase.coney@gmail.com" + } + ], + "description": "Okta OAuth2 Provider for Laravel Socialite", + "keywords": [ + "laravel", + "oauth", + "okta", + "provider", + "socialite" + ], + "support": { + "docs": "https://socialiteproviders.com/okta", + "issues": "https://github.com/socialiteproviders/providers/issues", + "source": "https://github.com/socialiteproviders/providers" + }, + "time": "2022-09-06T03:39:26+00:00" + }, + { + "name": "socialiteproviders/twitch", + "version": "5.3.1", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/Twitch.git", + "reference": "7accf30ae7a3139b757b4ca8f34989c09a3dbee7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/Twitch/zipball/7accf30ae7a3139b757b4ca8f34989c09a3dbee7", + "reference": "7accf30ae7a3139b757b4ca8f34989c09a3dbee7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2 || ^8.0", + "socialiteproviders/manager": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "SocialiteProviders\\Twitch\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Faust", + "email": "hello@brianfaust.de" + } + ], + "description": "Twitch OAuth2 Provider for Laravel Socialite", + "support": { + "source": "https://github.com/SocialiteProviders/Twitch/tree/5.3.1" + }, + "time": "2020-12-01T23:10:59+00:00" + }, + { + "name": "ssddanbrown/htmldiff", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/ssddanbrown/HtmlDiff.git", + "reference": "58f81857c02b50b199273edb4cc339876b5a4038" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ssddanbrown/HtmlDiff/zipball/58f81857c02b50b199273edb4cc339876b5a4038", + "reference": "58f81857c02b50b199273edb4cc339876b5a4038", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5|^9.5.9", + "vimeo/psalm": "^4.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ssddanbrown\\HtmlDiff\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dan Brown", + "email": "ssddanbrown@googlemail.com", + "role": "Developer" + } + ], + "description": "HTML Content Diff Generator", + "homepage": "https://github.com/ssddanbrown/htmldiff", + "support": { + "issues": "https://github.com/ssddanbrown/HtmlDiff/issues", + "source": "https://github.com/ssddanbrown/HtmlDiff/tree/v1.0.2" + }, + "funding": [ + { + "url": "https://github.com/ssddanbrown", + "type": "github" + } + ], + "time": "2022-01-24T20:12:20+00:00" + }, + { + "name": "ssddanbrown/symfony-mailer", + "version": "6.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/ssddanbrown/symfony-mailer.git", + "reference": "2219dcdc5f58e4f382ce8f1e6942d16982aa3012" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ssddanbrown/symfony-mailer/zipball/2219dcdc5f58e4f382ce8f1e6942d16982aa3012", + "reference": "2219dcdc5f58e4f382ce8f1e6942d16982aa3012", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.0.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<5.4" + }, + "replace": { + "symfony/mailer": "^6.0" + }, + "require-dev": { + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/messenger": "^5.4|^6.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dan Brown", + "homepage": "https://danb.me" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/ssddanbrown/symfony-mailer/tree/6.0" + }, + "time": "2023-07-04T14:10:33+00:00" + }, + { + "name": "symfony/console", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed", + "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "f1d00bddb83a4cb2138564b2150001cb6ce272b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/f1d00bddb83a4cb2138564b2150001cb6ce272b1", + "reference": "f1d00bddb83a4cb2138564b2150001cb6ce272b1", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "c7df52182f43a68522756ac31a532dd5b1e6db67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c7df52182f43a68522756ac31a532dd5b1e6db67", + "reference": "c7df52182f43a68522756ac31a532dd5b1e6db67", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", + "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11", + "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-20T17:44:14+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.0.20", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "e16b2676a4b3b1fa12378a20b29c364feda2a8d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e16b2676a4b3b1fa12378a20b29c364feda2a8d6", + "reference": "e16b2676a4b3b1fa12378a20b29c364feda2a8d6", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.0.20" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-30T15:41:07+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.0.20", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "6dc70833fd0ef5e861e17c7854c12d7d86679349" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6dc70833fd0ef5e861e17c7854c12d7d86679349", + "reference": "6dc70833fd0ef5e861e17c7854c12d7d86679349", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/log": "^1|^2|^3", + "symfony/error-handler": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.0.20" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-01T08:22:55+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "d7052547a0070cbeadd474e172b527a00d657301" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/d7052547a0070cbeadd474e172b527a00d657301", + "reference": "d7052547a0070cbeadd474e172b527a00d657301", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4", + "symfony/serializer": "<5.4.14|>=6.0,<6.0.14|>=6.1,<6.1.6" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^5.4.14|~6.0.14|^6.1.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-11T11:50:03+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "875e90aeea2777b6f135677f618529449334a612" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:30:37+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "42292d99c55abe617799667f454222c54c60e229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-28T09:04:16+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e", + "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/process", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "2114fd60f26a296cc403a7939ab91478475a33d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4", + "reference": "2114fd60f26a296cc403a7939ab91478475a33d4", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "e56ca9b41c1ec447193474cd86ad7c0b547755ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/e56ca9b41c1ec447193474cd86ad7c0b547755ac", + "reference": "e56ca9b41c1ec447193474cd86ad7c0b547755ac", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66", + "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.0.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-30T19:17:58+00:00" + }, + { + "name": "symfony/string", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a", + "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f", + "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.3|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/acbfbb274e730e5a0236f619b6168d9dedb3e282", + "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.0.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T17:10:44+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d", + "reference": "6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:36:10+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eb980457fa6899840fe1687e8627a03a7d8a3d52", + "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-20T17:44:14+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.6", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" + }, + "time": "2023-01-03T09:29:04+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.5.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "5.5-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2022-10-16T01:01:54+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:15: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.3", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "c83e88a30524f9360b11f585f71e6b17313b7187" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187", + "reference": "c83e88a30524f9360b11f585f71e6b17313b7187", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.15.3" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2023-07-13T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "itsgoingd/clockwork", + "version": "v5.1.12", + "source": { + "type": "git", + "url": "https://github.com/itsgoingd/clockwork.git", + "reference": "c9dbdbb1f0efd19bb80f1080ef63f1b9b1bc3b1b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/c9dbdbb1f0efd19bb80f1080ef63f1b9b1bc3b1b", + "reference": "c9dbdbb1f0efd19bb80f1080ef63f1b9b1bc3b1b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.6" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Clockwork\\Support\\Laravel\\ClockworkServiceProvider" + ], + "aliases": { + "Clockwork": "Clockwork\\Support\\Laravel\\Facade" + } + } + }, + "autoload": { + "psr-4": { + "Clockwork\\": "Clockwork/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "itsgoingd", + "email": "itsgoingd@luzer.sk", + "homepage": "https://twitter.com/itsgoingd" + } + ], + "description": "php dev tools in your browser", + "homepage": "https://underground.works/clockwork", + "keywords": [ + "Devtools", + "debugging", + "laravel", + "logging", + "lumen", + "profiling", + "slim" + ], + "support": { + "issues": "https://github.com/itsgoingd/clockwork/issues", + "source": "https://github.com/itsgoingd/clockwork/tree/v5.1.12" + }, + "funding": [ + { + "url": "https://github.com/itsgoingd", + "type": "github" + } + ], + "time": "2022-12-13T00:04:12+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.6", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.10", + "psalm/plugin-phpunit": "^0.18.4", + "symplify/easy-coding-standard": "^11.5.0", + "vimeo/psalm": "^4.30" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2023-08-09T00:03:52+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v6.4.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "f05978827b9343cba381ca05b8c7deee346b6015" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f05978827b9343cba381ca05b8c7deee346b6015", + "reference": "f05978827b9343cba381ca05b8c7deee346b6015", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.14.5", + "php": "^8.0.0", + "symfony/console": "^6.0.2" + }, + "require-dev": { + "brianium/paratest": "^6.4.1", + "laravel/framework": "^9.26.1", + "laravel/pint": "^1.1.1", + "nunomaduro/larastan": "^1.0.3", + "nunomaduro/mock-final-classes": "^1.1.0", + "orchestra/testbench": "^7.7", + "phpunit/phpunit": "^9.5.23", + "spatie/ignition": "^1.4.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "6.x-dev" + }, + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2023-01-03T12:54:54+00:00" + }, + { + "name": "nunomaduro/larastan", + "version": "v2.6.4", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/larastan.git", + "reference": "6c5e8820f3db6397546f3ce48520af9d312aed27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/6c5e8820f3db6397546f3ce48520af9d312aed27", + "reference": "6c5e8820f3db6397546f3ce48520af9d312aed27", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^9.47.0 || ^10.0.0", + "illuminate/container": "^9.47.0 || ^10.0.0", + "illuminate/contracts": "^9.47.0 || ^10.0.0", + "illuminate/database": "^9.47.0 || ^10.0.0", + "illuminate/http": "^9.47.0 || ^10.0.0", + "illuminate/pipeline": "^9.47.0 || ^10.0.0", + "illuminate/support": "^9.47.0 || ^10.0.0", + "php": "^8.0.2", + "phpmyadmin/sql-parser": "^5.6.0", + "phpstan/phpstan": "~1.10.6" + }, + "require-dev": { + "nikic/php-parser": "^4.15.2", + "orchestra/testbench": "^7.19.0 || ^8.0.0", + "phpunit/phpunit": "^9.5.27" + }, + "suggest": { + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" + }, + "type": "phpstan-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Larastan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", + "keywords": [ + "PHPStan", + "code analyse", + "code analysis", + "larastan", + "laravel", + "package", + "php", + "static analysis" + ], + "support": { + "issues": "https://github.com/nunomaduro/larastan/issues", + "source": "https://github.com/nunomaduro/larastan/tree/v2.6.4" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/canvural", + "type": "github" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2023-07-29T12:13:13+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpmyadmin/sql-parser", + "version": "5.8.2", + "source": { + "type": "git", + "url": "https://github.com/phpmyadmin/sql-parser.git", + "reference": "f1720ae19abe6294cb5599594a8a57bc3c8cc287" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/f1720ae19abe6294cb5599594a8a57bc3c8cc287", + "reference": "f1720ae19abe6294cb5599594a8a57bc3c8cc287", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "phpmyadmin/motranslator": "<3.0" + }, + "require-dev": { + "phpbench/phpbench": "^1.1", + "phpmyadmin/coding-standard": "^3.0", + "phpmyadmin/motranslator": "^4.0 || ^5.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.9.12", + "phpstan/phpstan-phpunit": "^1.3.3", + "phpunit/php-code-coverage": "*", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.11", + "zumba/json-serializer": "~3.0.2" + }, + "suggest": { + "ext-mbstring": "For best performance", + "phpmyadmin/motranslator": "Translate messages to your favorite locale" + }, + "bin": [ + "bin/highlight-query", + "bin/lint-query", + "bin/tokenize-query" + ], + "type": "library", + "autoload": { + "psr-4": { + "PhpMyAdmin\\SqlParser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "The phpMyAdmin Team", + "email": "developers@phpmyadmin.net", + "homepage": "https://www.phpmyadmin.net/team/" + } + ], + "description": "A validating SQL lexer and parser with a focus on MySQL dialect.", + "homepage": "https://github.com/phpmyadmin/sql-parser", + "keywords": [ + "analysis", + "lexer", + "parser", + "query linter", + "sql", + "sql lexer", + "sql linter", + "sql parser", + "sql syntax highlighter", + "sql tokenizer" + ], + "support": { + "issues": "https://github.com/phpmyadmin/sql-parser/issues", + "source": "https://github.com/phpmyadmin/sql-parser" + }, + "funding": [ + { + "url": "https://www.phpmyadmin.net/donate/", + "type": "other" + } + ], + "time": "2023-09-19T12:34:29+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.10.39", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "d9dedb0413f678b4d03cbc2279a48f91592c97c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d9dedb0413f678b4d03cbc2279a48f91592c97c4", + "reference": "d9dedb0413f678b4d03cbc2279a48f91592c97c4", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2023-10-17T15:46:26+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.29", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.15", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "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/9.2.29" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-09-19T04:57:46+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.13", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3d767f7f9e191eab4189abe41ab37797e30b1be", + "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.28", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.13" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2023-09-19T05:39:22+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-05-07T05:35:17+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T06:03:37+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bde739e7565280bda77be70044ac1047bc007e34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", + "reference": "bde739e7565280bda77be70044ac1047bc007e34", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-02T09:26:13+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.7.2", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", + "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + }, + "time": "2023-02-22T23:07:41+00:00" + }, + { + "name": "ssddanbrown/asserthtml", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/ssddanbrown/asserthtml.git", + "reference": "6baf3ef2087f5928ae34f0d41db27aefcdf60414" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ssddanbrown/asserthtml/zipball/6baf3ef2087f5928ae34f0d41db27aefcdf60414", + "reference": "6baf3ef2087f5928ae34f0d41db27aefcdf60414", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "php": ">=7.4", + "phpunit/phpunit": "^9.0", + "symfony/css-selector": "^5.0|^6.0", + "symfony/dom-crawler": "^5.0|^6.0" + }, + "require-dev": { + "vimeo/psalm": "^4.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ssddanbrown\\AssertHtml\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dan Brown", + "email": "ssddanbrown@googlemail.com", + "role": "Developer" + } + ], + "description": "HTML Content Assertions for PHPUnit", + "homepage": "https://github.com/ssddanbrown/asserthtml", + "support": { + "issues": "https://github.com/ssddanbrown/asserthtml/issues", + "source": "https://github.com/ssddanbrown/asserthtml/tree/v2.0.0" + }, + "funding": [ + { + "url": "https://github.com/ssddanbrown", + "type": "github" + } + ], + "time": "2023-03-01T16:48:08+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v6.0.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "622578ff158318b1b49d95068bd6b66c713601e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/622578ff158318b1b49d95068bd6b66c713601e9", + "reference": "622578ff158318b1b49d95068bd6b66c713601e9", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "masterminds/html5": "<2.6" + }, + "require-dev": { + "masterminds/html5": "^2.6", + "symfony/css-selector": "^5.4|^6.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases DOM navigation for HTML and XML documents", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v6.0.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-20T17:44:14+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "ssddanbrown/symfony-mailer": 20 + }, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.0.2", + "ext-curl": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-xml": "*" + }, + "platform-dev": [], + "platform-overrides": { + "php": "8.0.2" + }, + "plugin-api-version": "2.3.0" +} diff --git a/dev/docs/development.md b/dev/docs/development.md index 44a077fa8f9..3c7a6e9d299 100644 --- a/dev/docs/development.md +++ b/dev/docs/development.md @@ -23,13 +23,13 @@ npm run production npm run dev ``` -BookStack has many integration tests that use Laravel's built-in testing capabilities which makes use of PHPUnit. There is a `mysql_testing` database defined within the app config which is what is used by PHPUnit. This database is set with the database name, username and password all defined as `bookstack-test`. You will have to create that database and that set of credentials before testing. +Further details about the BookStack JavaScript codebase can be found in the [javascript-code.md document](javascript-code.md). -The testing database will also need migrating and seeding beforehand. This can be done by running `composer refresh-test-database`. +## Automated App Testing -Once done you can run `composer test` in the application root directory to run all tests. Tests can be ran in parallel by running them via `composer t`. This will use Laravel's built-in parallel testing functionality, and attempt to create and seed a database instance for each testing thread. If required these parallel testing instances can be reset, before testing again, by running `composer t-reset`. +BookStack has a large suite of PHP tests to cover application functionality. We try to ensure that all additions and changes to the platform are covered with testing. -If the codebase needs to be tested with deprecations, this can be done via uncommenting the relevant line within the TestCase@setUp function. +For details about setting-up, running and writing tests please see the [php-testing.md document](php-testing.md). ## Code Standards diff --git a/dev/docs/javascript-public-events.md b/dev/docs/javascript-public-events.md index 95300ddd360..4f68daaebf0 100644 --- a/dev/docs/javascript-public-events.md +++ b/dev/docs/javascript-public-events.md @@ -253,3 +253,69 @@ window.addEventListener('library-cm6::configure-theme', event => { }); ``` + +### `library-cm6::pre-init` + +This event is called just before any CodeMirror instances are initialised so that the instance configuration can be viewed and altered before the instance is created. + +#### Event Data + +- `usage` - A string label to identify the usage type of the CodeMirror instance in BookStack. +- `editorViewConfig` - A reference to the [EditorViewConfig](https://codemirror.net/docs/ref/#view.EditorViewConfig) that will be used to create the instance. +- `libEditorView` - The CodeMirror [EditorView](https://codemirror.net/docs/ref/#view.EditorView) class object, provided for convenience. +- `libEditorState` - The CodeMirror [EditorState](https://codemirror.net/docs/ref/#state.EditorState) class object, provided for convenience. +- `libCompartment` - The CodeMirror [Compartment](https://codemirror.net/docs/ref/#state.Compartment) class object, provided for convenience. + +##### Example + +The below shows how you'd enable the built-in line wrapping extension for page content code blocks: + +
+Show Example + +```javascript +window.addEventListener('library-cm6::pre-init', event => { + const detail = event.detail; + const config = detail.editorViewConfig; + const EditorView = detail.libEditorView; + + if (detail.usage === 'content-code-block') { + config.extensions.push(EditorView.lineWrapping); + } +}); +``` +
+ +### `library-cm6::post-init` + +This event is called just after any CodeMirror instances are initialised so that you're able to gain a reference to the CodeMirror EditorView instance. + +#### Event Data + +- `usage` - A string label to identify the usage type of the CodeMirror instance in BookStack. +- `editorView` - A reference to the [EditorView](https://codemirror.net/docs/ref/#view.EditorView) instance that has been created. +- `editorViewConfig` - A reference to the [EditorViewConfig](https://codemirror.net/docs/ref/#view.EditorViewConfig) that was used to create the instance. +- `libEditorView` - The CodeMirror [EditorView](https://codemirror.net/docs/ref/#view.EditorView) class object, provided for convenience. +- `libEditorState` - The CodeMirror [EditorState](https://codemirror.net/docs/ref/#state.EditorState) class object, provided for convenience. +- `libCompartment` - The CodeMirror [Compartment](https://codemirror.net/docs/ref/#state.Compartment) class object, provided for convenience. + +##### Example + +The below shows how you'd prepend some default text to all content (page) code blocks. + +
+Show Example + +```javascript +window.addEventListener('library-cm6::post-init', event => { + const detail = event.detail; + const editorView = detail.editorView; + + if (detail.usage === 'content-code-block') { + editorView.dispatch({ + changes: {from: 0, to: 0, insert: 'Copyright 2023\n\n'} + }); + } +}); +``` +
\ No newline at end of file diff --git a/dev/docs/php-testing.md b/dev/docs/php-testing.md new file mode 100644 index 00000000000..1bd4a414ff3 --- /dev/null +++ b/dev/docs/php-testing.md @@ -0,0 +1,87 @@ +# BookStack PHP Testing + +BookStack has many test cases defined within the `tests/` directory of the app. These are built upon [PHPUnit](https://phpunit.de/) along with Laravel's own test framework additions, and a bunch of custom helper classes. + +## Setup + +The application tests are mostly functional, rather than unit tests, meaning they simulate user actions and system components and therefore these require use of the database. To avoid potential conflicts within your development environment, the tests use a separate database. This is defined via a specific `mysql_testing` database connection in our configuration, and expects to use the following database access details: + +- Host: `127.0.0.1` +- Username: `bookstack-test` +- Password: `bookstack-test` +- Database: `bookstack-test` + +You will need to create a database, with access for these credentials, to allow the system to connect when running tests. Alternatively, if those don't suit, you can define a `TEST_DATABASE_URL` option in your `.env` file, or environment, with connection details like so: + +```bash +TEST_DATABASE_URL="mysql://username:password@host-name:port/database-name" +``` + +The testing database will need migrating and seeding with test data beforehand. This can be done by running `composer refresh-test-database`. + +## Running Tests + +You can run all tests via composer with `composer test` in the application root directory. +Alternatively, you can run PHPUnit directly with `php vendor/bin/phpunit`. + +Some editors, like PHPStorm, have in-built support for running tests on a per file, directory or class basis. +Otherwise, you can run PHPUnit with specified tests and/or filter to limit the tests ran: + +```bash +# Run all test in the "./tests/HomepageTest.php" file +php vendor/bin/phpunit ./tests/HomepageTest.php + +# Run all test in the "./tests/User" directory +php vendor/bin/phpunit ./tests/User + +# Filter to a particular test method name +php vendor/bin/phpunit --filter test_default_homepage_visible + +# Filter to a particular test class name +php vendor/bin/phpunit --filter HomepageTest +``` + +If the codebase needs to be tested with deprecations, this can be done via uncommenting the relevant line within the `TestCase@setUp` function. This is not expected for most PRs to the project, but instead used for maintenance tasks like dependency & PHP upgrades. + +## Writing Tests + +To understand how tests are written & used, it's advised you read through existing test cases similar to what you need to write. Tests are written in a rather scrappy manner, compared to the core app codebase, which is fine and expected since there's often hoops to jump through for various functionality. Scrappy tests are better than no tests. + +Test classes have to be within the `tests/` folder, and be named ending in `Test`. These should always extend the `Tests\TestCase` class. +Test methods should be written in snake_case, start with `test_`, and be public methods. + +Here are some general rules & patterns we follow in the tests: + +- All external remote system resources, like HTTP calls and LDAP connections, are mocked. +- We prefer to hard-code expected text & URLs to better detect potential changes in the system rather than use dynamic references. This provides higher sensitivity to changes, and has never been much of a maintenance issue. +- Only test with an admin user if needed, otherwise keep to less privileged users to ensure permission systems are active and exercised within tests. +- If testing for the lack of something (e.g. `$this->assertDontSee('TextAfterChange')`) then this should be accompanied by some form of positive confirmation (e.g. `$this->assertSee('TextBeforeChange')`). + +### Test Helpers + +Our default `TestCase` is bloated with helpers to assist in testing scenarios. Some of these shown below, but you should jump through and explore these in your IDE/editor to explore their full capabilities and options: + +```php +// Run the test as a logged-in-user at a certain privilege level +$this->asAdmin(); +$this->asEditor(); +$this->asViewer(); + +// Provides a bunch of entity (shelf/book/chapter/page) content and actions +$this->entities; + +// Provides various user & role abilities +$this->users; + +// Provides many helpful actions relate to system & content permissions +$this->permissions; + +// Provides a range of methods for dealing with files & uploads in tests +$this->files; + +// Parse HTML of a response to assert HTML-based conditions +// Uses https://github.com/ssddanbrown/asserthtml library. +$this->withHtml($resp); +// Example: +$this->withHtml($this->get('/'))->assertElementContains('p[id="top"]', 'Hello!'); +``` \ No newline at end of file diff --git a/lang/ar/common.php b/lang/ar/common.php index fa838a810ab..75bdfdec27c 100644 --- a/lang/ar/common.php +++ b/lang/ar/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Clear Filter', 'download' => 'Download', 'open_in_tab' => 'Open in Tab', + 'open' => 'Open', // Sort Options 'sort_options' => 'خيارات الفرز', diff --git a/lang/ar/components.php b/lang/ar/components.php index b04ba7bc1c3..211b249eadd 100644 --- a/lang/ar/components.php +++ b/lang/ar/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'تم حذف الصورة بنجاح', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'تعديل الشفرة', diff --git a/lang/ar/entities.php b/lang/ar/entities.php index fc544aa0db5..1c9c15bd95b 100644 --- a/lang/ar/entities.php +++ b/lang/ar/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'قالب الصفحة', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'وسوم الصفحة', 'chapter_tags' => 'وسوم الفصل', 'book_tags' => 'وسوم الكتاب', diff --git a/lang/ar/errors.php b/lang/ar/errors.php index e6561e8bd6c..ffd7b2e1181 100644 --- a/lang/ar/errors.php +++ b/lang/ar/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'لا يمكن الحصول على الصورة من :url', 'cannot_create_thumbs' => 'لا يمكن للخادم إنشاء صور مصغرة. الرجاء التأكد من تثبيت إضافة GD PHP.', 'server_upload_limit' => 'الخادم لا يسمح برفع ملفات بهذا الحجم. الرجاء محاولة الرفع بحجم أصغر.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'الخادم لا يسمح برفع ملفات بهذا الحجم. الرجاء محاولة الرفع بحجم أصغر.', // Drawing & Images 'image_upload_error' => 'حدث خطأ خلال رفع الصورة', 'image_upload_type_error' => 'صيغة الصورة المرفوعة غير صالحة', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/ar/preferences.php b/lang/ar/preferences.php index 118e8ba820f..2b88f9671ff 100644 --- a/lang/ar/preferences.php +++ b/lang/ar/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Shortcuts', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/ar/settings.php b/lang/ar/settings.php index 8023e0110c3..309c9a06c2e 100644 --- a/lang/ar/settings.php +++ b/lang/ar/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'يمكنك اختيار إرسال دعوة بالبريد الإلكتروني إلى هذا المستخدم مما يسمح له بتعيين كلمة المرور الخاصة به أو يمكنك تعيين كلمة المرور الخاصة به بنفسك.', 'users_send_invite_option' => 'أرسل بريدًا إلكترونيًا لدعوة المستخدم', 'users_external_auth_id' => 'ربط الحساب بمواقع التواصل', - 'users_external_auth_id_desc' => 'تستخدم هذه الهوية لإثبات شخصية المستخدم عند الدخول إلى مواقع التواصل الخاصة بك.', - 'users_password_warning' => 'الرجاء ملئ الحقل أدناه فقط في حال أردتم تغيير كلمة المرور:', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'هذا المستخدم يمثل أي ضيف يقوم بزيارة شيء يخصك. لا يمكن استخدامه لتسجيل الدخول ولكن يتم تعيينه تلقائياً.', 'users_delete' => 'حذف المستخدم', 'users_delete_named' => 'حذف المستخدم :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'اللغة المفضلة', 'users_preferred_language_desc' => 'سيؤدي هذا الخيار إلى تغيير اللغة المستخدمة لواجهة المستخدم الخاصة بالتطبيق. لن يؤثر هذا على أي محتوى قد أنشائه المستخدم.', 'users_social_accounts' => 'الحسابات الاجتماعية', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not previously authorized access. Revoke access from your profile settings on the connected social account.', 'users_social_connect' => 'ربط الحساب', 'users_social_disconnect' => 'فصل الحساب', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => 'تم ربط حساب :socialAccount بملفك بنجاح.', 'users_social_disconnected' => 'تم فصل حساب :socialAccount من ملفك بنجاح.', 'users_api_tokens' => 'رموز الـ API', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'لم يتم إنشاء رموز API لهذا المستخدم', 'users_api_tokens_create' => 'قم بإنشاء رمز مميز', 'users_api_tokens_expires' => 'انتهاء مدة الصلاحية', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/bg/common.php b/lang/bg/common.php index 49d9a4cd273..5fa91b2e871 100644 --- a/lang/bg/common.php +++ b/lang/bg/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Изчистване на филтрите', 'download' => 'Изтегляне', 'open_in_tab' => 'Отваряне в раздел', + 'open' => 'Open', // Sort Options 'sort_options' => 'Опции за сортиране', diff --git a/lang/bg/components.php b/lang/bg/components.php index 24269b09fc9..f88c69fc8be 100644 --- a/lang/bg/components.php +++ b/lang/bg/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Изображението е успешно изтрито', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Редактиране на кода', diff --git a/lang/bg/entities.php b/lang/bg/entities.php index 6e5048e4814..e4ed83ef9a3 100644 --- a/lang/bg/entities.php +++ b/lang/bg/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Шаблон на страницата', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Тагове на страницата', 'chapter_tags' => 'Тагове на главата', 'book_tags' => 'Тагове на книгата', diff --git a/lang/bg/errors.php b/lang/bg/errors.php index d9efec43e47..91c7b6f600c 100644 --- a/lang/bg/errors.php +++ b/lang/bg/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Не мога да взема съобщението от :url', 'cannot_create_thumbs' => 'Сървърът не може да създаде малки изображения. Моля, увери се, че разширението GD PHP е инсталирано.', 'server_upload_limit' => 'Сървърът не позволява качвания с такъв размер. Моля, пробвайте файл с по-малък размер.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Сървърът не позволява качвания с такъв размер. Моля, пробвайте файл с по-малък размер.', // Drawing & Images 'image_upload_error' => 'Възникна грешка при качването на изображението', 'image_upload_type_error' => 'Типът на качваното изображение е невалиден', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/bg/preferences.php b/lang/bg/preferences.php index 26b42142868..963f1f04c7d 100644 --- a/lang/bg/preferences.php +++ b/lang/bg/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Преки пътища', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/bg/settings.php b/lang/bg/settings.php index 12ddd678e34..df500db44f9 100644 --- a/lang/bg/settings.php +++ b/lang/bg/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Можеш да изпратиш на потребителя покана по имейл, след което той ще може да настрои своя собствена парола. В противен случай, ти също можеш да настроиш паролата му.', 'users_send_invite_option' => 'Изпрати на потребителя имейл покана', 'users_external_auth_id' => 'Външен номер за удостоверяване', - 'users_external_auth_id_desc' => 'Това е номерът, използван за сверяване на потребители при комуникация с конфигурираната външна система за удостоверяване.', - 'users_password_warning' => 'Попълни отдолу само ако желаеш да смениш паролата си.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Този потребител представлява всеки гост, който посещава това приложение. Потребителят не може да се използва за вписване, а вместо това се присвоява автоматично.', 'users_delete' => 'Изтрий потребител', 'users_delete_named' => 'Изтрий потребителя :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Предпочитан език', 'users_preferred_language_desc' => 'Тази настройка ще промени езика за потребителския интерфейс на приложението. Това няма да се отрази на създаденото от потребителите съдържание.', 'users_social_accounts' => 'Социални профили', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Тук можеш да свържеш другите си профили за по-бързо и лесно вписване. Отвързването на профил тук няма да анулира предишно удостоверен достъп. Вместо това, спри достъпа от настройките на профила си в свързаната социална мрежа.', 'users_social_connect' => 'Свържи профил', 'users_social_disconnect' => 'Отвържи профил', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => 'Профилът :socialAccount беше успешно свързан с профила ти.', 'users_social_disconnected' => 'Профилът :socialAccount беше успешно отвързан от профила ти.', 'users_api_tokens' => 'API маркери', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Няма създадени API маркери за този потребител', 'users_api_tokens_create' => 'Създай маркер', 'users_api_tokens_expires' => 'Изтича на', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/bs/common.php b/lang/bs/common.php index 9dd94e21408..dcf6248a0ce 100644 --- a/lang/bs/common.php +++ b/lang/bs/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Clear Filter', 'download' => 'Download', 'open_in_tab' => 'Open in Tab', + 'open' => 'Open', // Sort Options 'sort_options' => 'Opcije sortiranja', diff --git a/lang/bs/components.php b/lang/bs/components.php index 2485abb1585..6441ffed1b2 100644 --- a/lang/bs/components.php +++ b/lang/bs/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Slika uspješno izbrisana', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Uredi Kod', diff --git a/lang/bs/entities.php b/lang/bs/entities.php index a75c8aa493e..5955b47e768 100644 --- a/lang/bs/entities.php +++ b/lang/bs/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Predložak stranice', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Oznake stranice', 'chapter_tags' => 'Oznake poglavlja', 'book_tags' => 'Oznake knjige', diff --git a/lang/bs/errors.php b/lang/bs/errors.php index 4e013f10ba4..8af5a6c78c5 100644 --- a/lang/bs/errors.php +++ b/lang/bs/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Nije moguće dobiti sliku sa :url', 'cannot_create_thumbs' => 'Server ne može kreirati sličice. Provjerite da imate instaliranu GD PHP ekstenziju.', 'server_upload_limit' => 'Server ne dopušta učitavanja ove veličine. Pokušajte sa manjom veličinom fajla.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Server ne dopušta učitavanja ove veličine. Pokušajte sa manjom veličinom fajla.', // Drawing & Images 'image_upload_error' => 'Desila se greška prilikom učitavanja slike', 'image_upload_type_error' => 'Vrsta slike koja se učitava je neispravna', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/bs/preferences.php b/lang/bs/preferences.php index 118e8ba820f..2b88f9671ff 100644 --- a/lang/bs/preferences.php +++ b/lang/bs/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Shortcuts', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/bs/settings.php b/lang/bs/settings.php index 8821c77f0d1..c5ca662c37d 100644 --- a/lang/bs/settings.php +++ b/lang/bs/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.', 'users_send_invite_option' => 'Send user invite email', 'users_external_auth_id' => 'External Authentication ID', - 'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.', - 'users_password_warning' => 'Only fill the below if you would like to change your password.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.', 'users_delete' => 'Delete User', 'users_delete_named' => 'Delete user :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Preferred Language', 'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.', 'users_social_accounts' => 'Social Accounts', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not revoke previously authorized access. Revoke access from your profile settings on the connected social account.', 'users_social_connect' => 'Connect Account', 'users_social_disconnect' => 'Disconnect Account', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount account was successfully attached to your profile.', 'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.', 'users_api_tokens' => 'API Tokens', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'No API tokens have been created for this user', 'users_api_tokens_create' => 'Create Token', 'users_api_tokens_expires' => 'Expires', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/ca/common.php b/lang/ca/common.php index 010ec63ae70..4b8f2eddc23 100644 --- a/lang/ca/common.php +++ b/lang/ca/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Clear Filter', 'download' => 'Download', 'open_in_tab' => 'Open in Tab', + 'open' => 'Open', // Sort Options 'sort_options' => 'Opcions d\'ordenació', diff --git a/lang/ca/components.php b/lang/ca/components.php index c296c064b35..e002886d79a 100644 --- a/lang/ca/components.php +++ b/lang/ca/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Imatge suprimida correctament', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Edita el codi', diff --git a/lang/ca/entities.php b/lang/ca/entities.php index 23a88b0502d..a53a7a3bd77 100644 --- a/lang/ca/entities.php +++ b/lang/ca/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Plantilla de pàgina', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Etiquetes de la pàgina', 'chapter_tags' => 'Etiquetes del capítol', 'book_tags' => 'Etiquetes del llibre', diff --git a/lang/ca/errors.php b/lang/ca/errors.php index a716e240b3c..ba53bd849c1 100644 --- a/lang/ca/errors.php +++ b/lang/ca/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'No s\'ha pogut obtenir la imatge de :url', 'cannot_create_thumbs' => 'El servidor no pot crear miniatures. Reviseu que tingueu instal·lada l\'extensió GD del PHP.', 'server_upload_limit' => 'El servidor no permet pujades d\'aquesta mida. Proveu-ho amb una mida de fitxer més petita.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'El servidor no permet pujades d\'aquesta mida. Proveu-ho amb una mida de fitxer més petita.', // Drawing & Images 'image_upload_error' => 'S\'ha produït un error en pujar la imatge', 'image_upload_type_error' => 'El tipus d\'imatge que heu pujat no és vàlid', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/ca/preferences.php b/lang/ca/preferences.php index 118e8ba820f..2b88f9671ff 100644 --- a/lang/ca/preferences.php +++ b/lang/ca/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Shortcuts', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/ca/settings.php b/lang/ca/settings.php index d93e52a732a..48a04e7e2df 100644 --- a/lang/ca/settings.php +++ b/lang/ca/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Podeu elegir enviar un correu d\'invitació a aquest usuari, la qual cosa li permetrà definir la seva contrasenya, o podeu definir-li una contrasenya vós.', 'users_send_invite_option' => 'Envia un correu d\'invitació a l\'usuari', 'users_external_auth_id' => 'Identificador d\'autenticació extern', - 'users_external_auth_id_desc' => 'Aquest és l\'identificador que s\'utilitza per a enllaçar aquest usuari en comunicar amb el sistema d\'autenticació extern.', - 'users_password_warning' => 'Ompliu-ho només si voleu canviar la vostra contrasenya.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Aquest usuari representa qualsevol usuari convidat que visita la vostra instància. No es pot fer servir per a iniciar la sessió però s\'assigna automàticament.', 'users_delete' => 'Suprimeix l\'usuari', 'users_delete_named' => 'Suprimeix l\'usuari :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Llengua preferida', 'users_preferred_language_desc' => 'Aquesta opció canviarà la llengua utilitzada a la interfície d\'usuari de l\'aplicació. No afectarà el contingut creat pels usuaris.', 'users_social_accounts' => 'Comptes socials', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Aquí podeu connectar altres comptes per a un inici de sessió més ràpid i còmode. Si desconnecteu un compte aquí, no en revoqueu l\'accés d\'autorització donat amb anterioritat. Revoqueu-hi l\'accés a la configuració del perfil del compte social que hàgiu connectat.', 'users_social_connect' => 'Connecta un compte', 'users_social_disconnect' => 'Desconnecta el compte', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => 'El compte de :socialAccount s\'ha associat correctament al vostre perfil.', 'users_social_disconnected' => 'El compte de :socialAccount s\'ha desassociat correctament del vostre perfil.', 'users_api_tokens' => 'Testimonis d\'API', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'No s\'ha creat cap testimoni d\'API per a aquest usuari', 'users_api_tokens_create' => 'Crea un testimoni', 'users_api_tokens_expires' => 'Caducitat', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/cs/common.php b/lang/cs/common.php index e7fc6ece815..cf1b12922c8 100644 --- a/lang/cs/common.php +++ b/lang/cs/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Zrušit filtr', 'download' => 'Stáhnout', 'open_in_tab' => 'Otevřít v nové záložce', + 'open' => 'Open', // Sort Options 'sort_options' => 'Možnosti řazení', diff --git a/lang/cs/components.php b/lang/cs/components.php index cf917407b78..8e5b7f0099d 100644 --- a/lang/cs/components.php +++ b/lang/cs/components.php @@ -6,34 +6,36 @@ // Image Manager 'image_select' => 'Výběr obrázku', - 'image_list' => 'Image List', - 'image_details' => 'Image Details', - 'image_upload' => 'Upload Image', - 'image_intro' => 'Here you can select and manage images that have been previously uploaded to the system.', - 'image_intro_upload' => 'Upload a new image by dragging an image file into this window, or by using the "Upload Image" button above.', + 'image_list' => 'Seznam obrázků', + 'image_details' => 'Detail obrázku', + 'image_upload' => 'Nahrát obrázek', + 'image_intro' => 'Zde můžete vybrat a spravovat obrázky, které byly dříve nahrány do systému.', + 'image_intro_upload' => 'Nahrajte nový obrázek přetažením obrázku do tohoto okna, nebo pomocí tlačítka "Nahrát obrázek" výše.', 'image_all' => 'Vše', 'image_all_title' => 'Zobrazit všechny obrázky', 'image_book_title' => 'Zobrazit obrázky nahrané do této knihy', 'image_page_title' => 'Zobrazit obrázky nahrané na tuto stránku', 'image_search_hint' => 'Hledat podle názvu obrázku', 'image_uploaded' => 'Nahráno :uploadedDate', - 'image_uploaded_by' => 'Uploaded by :userName', - 'image_uploaded_to' => 'Uploaded to :pageLink', - 'image_updated' => 'Updated :updateDate', + 'image_uploaded_by' => 'Nahráno uživatelem :userName', + 'image_uploaded_to' => 'Nahráno na :pageLink', + 'image_updated' => 'Aktualizováno :updateDate', 'image_load_more' => 'Načíst další', 'image_image_name' => 'Název obrázku', 'image_delete_used' => 'Tento obrázek je použit na níže uvedených stránkách.', 'image_delete_confirm_text' => 'Opravdu chcete odstranit tento obrázek?', 'image_select_image' => 'Zvolte obrázek', 'image_dropzone' => 'Přetáhněte obrázky nebo klikněte sem pro nahrání', - 'image_dropzone_drop' => 'Drop images here to upload', + 'image_dropzone_drop' => 'Obrázky nahrajete přetažením sem', 'images_deleted' => 'Obrázky odstraněny', 'image_preview' => 'Náhled obrázku', 'image_upload_success' => 'Obrázek byl nahrán', 'image_update_success' => 'Podrobnosti o obrázku byly aktualizovány', 'image_delete_success' => 'Obrázek byl odstraněn', - 'image_replace' => 'Replace Image', - 'image_replace_success' => 'Image file successfully updated', + 'image_replace' => 'Nahradit obrázek', + 'image_replace_success' => 'Obrázek úspěšně vytvořen', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Upravit kód', diff --git a/lang/cs/entities.php b/lang/cs/entities.php index 1b526bd8c3a..6381c43f2ca 100644 --- a/lang/cs/entities.php +++ b/lang/cs/entities.php @@ -106,7 +106,7 @@ 'shelves_permissions_updated' => 'Oprávnění knihovny byla aktualizována', 'shelves_permissions_active' => 'Oprávnění knihovny byla aktivována', 'shelves_permissions_cascade_warning' => 'Oprávnění v Knihovnách nejsou automaticky kaskádována do obsažených knih. To proto, že kniha může existovat ve více Knihovnách. Oprávnění však lze zkopírovat do podřízených knih pomocí níže uvedené možnosti.', - 'shelves_permissions_create' => 'Shelf create permissions are only used for copying permissions to child books using the action below. They do not control the ability to create books.', + 'shelves_permissions_create' => 'Oprávnění k vytváření Shelf se používají pouze ke kopírování oprávnění do dětských knih pomocí níže uvedené akce. Nekontrolují schopnost vytvářet knihy.', 'shelves_copy_permissions_to_books' => 'Kopírovat oprávnění na knihy', 'shelves_copy_permissions' => 'Kopírovat oprávnění', 'shelves_copy_permissions_explain' => 'Toto použije aktuální nastavení oprávnění knihovny na všechny knihy v ní obsažené. Před aktivací se ujistěte, že byly uloženy všechny změny oprávnění této knihovny.', @@ -214,7 +214,7 @@ 'pages_editing_page' => 'Úpravy stránky', 'pages_edit_draft_save_at' => 'Koncept uložen v ', 'pages_edit_delete_draft' => 'Odstranit koncept', - 'pages_edit_delete_draft_confirm' => 'Are you sure you want to delete your draft page changes? All of your changes, since the last full save, will be lost and the editor will be updated with the latest page non-draft save state.', + 'pages_edit_delete_draft_confirm' => 'Jste si jisti, že chcete odstranit změny vašich konceptů? Všechny vaše změny, od posledního úplného uložení, budou ztraceny a editor bude aktualizován s nejnovějším stavem nekonceptu stránky.', 'pages_edit_discard_draft' => 'Zahodit koncept', 'pages_edit_switch_to_markdown' => 'Přepnout na Markdown Editor', 'pages_edit_switch_to_markdown_clean' => '(Vytvořený obsah)', @@ -239,8 +239,8 @@ 'pages_md_insert_drawing' => 'Vložit kresbu', 'pages_md_show_preview' => 'Zobrazit náhled', 'pages_md_sync_scroll' => 'Synchronizovat náhled', - 'pages_drawing_unsaved' => 'Unsaved Drawing Found', - 'pages_drawing_unsaved_confirm' => 'Unsaved drawing data was found from a previous failed drawing save attempt. Would you like to restore and continue editing this unsaved drawing?', + 'pages_drawing_unsaved' => 'Nalezen neuložený výkres', + 'pages_drawing_unsaved_confirm' => 'Byly nalezeny neuložené kresby z předchozí neúspěšné pokusu o uložení kresby. Chcete je obnovit a pokračovat v úpravě této neuložené kresby?', 'pages_not_in_chapter' => 'Stránka není v kapitole', 'pages_move' => 'Přesunout stránku', 'pages_copy' => 'Kopírovat stránku', @@ -268,13 +268,13 @@ 'pages_revisions_restore' => 'Obnovit', 'pages_revisions_none' => 'Tato stránka nemá žádné revize', 'pages_copy_link' => 'Kopírovat odkaz', - 'pages_edit_content_link' => 'Jump to section in editor', - 'pages_pointer_enter_mode' => 'Enter section select mode', - 'pages_pointer_label' => 'Page Section Options', - 'pages_pointer_permalink' => 'Page Section Permalink', - 'pages_pointer_include_tag' => 'Page Section Include Tag', - 'pages_pointer_toggle_link' => 'Permalink mode, Press to show include tag', - 'pages_pointer_toggle_include' => 'Include tag mode, Press to show permalink', + 'pages_edit_content_link' => 'Přejít na sekci v editoru', + 'pages_pointer_enter_mode' => 'Zadejte režim výběru sekce', + 'pages_pointer_label' => 'Možnosti sekce stránky', + 'pages_pointer_permalink' => 'Trvalý odkaz sekce stránky', + 'pages_pointer_include_tag' => 'Sekce stránky obsahuje štítek', + 'pages_pointer_toggle_link' => 'Režim trvalého odkazu, stiskem zobrazíte značku', + 'pages_pointer_toggle_include' => 'Zahrnout režim značek, stiskněte pro zobrazení trvalého odkazu', 'pages_permissions_active' => 'Oprávnění stránky byla aktivována', 'pages_initial_revision' => 'První vydání', 'pages_references_update_revision' => 'Automatická aktualizace interních odkazů', @@ -289,12 +289,13 @@ 'time_b' => 'v posledních minutách (:minCount min.)', 'message' => ':start :time. Dávejte pozor abyste nepřepsali změny ostatním!', ], - 'pages_draft_discarded' => 'Draft discarded! The editor has been updated with the current page content', - 'pages_draft_deleted' => 'Draft deleted! The editor has been updated with the current page content', + 'pages_draft_discarded' => 'Koncept byl zahozen. Editor nyní obsahuje aktuální verzi stránky', + 'pages_draft_deleted' => 'Koncept byl zahozen. Editor nyní obsahuje aktuální verzi stránky', 'pages_specific' => 'Konkrétní stránka', 'pages_is_template' => 'Šablona stránky', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Štítky stránky', 'chapter_tags' => 'Štítky kapitoly', 'book_tags' => 'Štítky knihy', @@ -322,10 +323,10 @@ 'attachments_explain_instant_save' => 'Změny zde provedené se okamžitě ukládají.', 'attachments_upload' => 'Nahrát soubor', 'attachments_link' => 'Připojit odkaz', - 'attachments_upload_drop' => 'Alternatively you can drag and drop a file here to upload it as an attachment.', + 'attachments_upload_drop' => 'Případně můžete přetáhnout soubor zde, abyste jej mohli nahrát jako přílohu.', 'attachments_set_link' => 'Nastavit odkaz', 'attachments_delete' => 'Jste si jisti, že chcete odstranit tuto přílohu?', - 'attachments_dropzone' => 'Drop files here to upload', + 'attachments_dropzone' => 'Soubory nahrajete přetažením sem', 'attachments_no_files' => 'Žádné soubory nebyly nahrány', 'attachments_explain_link' => 'Můžete pouze připojit odkaz pokud nechcete nahrávat soubor přímo. Může to být odkaz na jinou stránku nebo na soubor v cloudu.', 'attachments_link_name' => 'Název odkazu', @@ -368,13 +369,13 @@ 'comment_new' => 'Nový komentář', 'comment_created' => 'komentováno :createDiff', 'comment_updated' => 'Aktualizováno :updateDiff uživatelem :username', - 'comment_updated_indicator' => 'Updated', + 'comment_updated_indicator' => 'Aktualizováno', 'comment_deleted_success' => 'Komentář odstraněn', 'comment_created_success' => 'Komentář přidán', 'comment_updated_success' => 'Komentář aktualizován', 'comment_delete_confirm' => 'Opravdu chcete odstranit tento komentář?', 'comment_in_reply_to' => 'Odpověď na :commentId', - 'comment_editor_explain' => 'Here are the comments that have been left on this page. Comments can be added & managed when viewing the saved page.', + 'comment_editor_explain' => 'Zde jsou komentáře, které zůstaly na této stránce. Komentáře lze přidat a spravovat při prohlížení uložené stránky.', // Revision 'revision_delete_confirm' => 'Opravdu chcete odstranit tuto revizi?', @@ -407,26 +408,26 @@ 'references_to_desc' => 'Níže jsou uvedeny všechny známé stránky systému, které odkazují na tuto položku.', // Watch Options - 'watch' => 'Watch', - 'watch_title_default' => 'Default Preferences', - 'watch_desc_default' => 'Revert watching to just your default notification preferences.', - 'watch_title_ignore' => 'Ignore', - 'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.', - 'watch_title_new' => 'New Pages', - 'watch_desc_new' => 'Notify when any new page is created within this item.', - 'watch_title_updates' => 'All Page Updates', - 'watch_desc_updates' => 'Notify upon all new pages and page changes.', - 'watch_desc_updates_page' => 'Notify upon all page changes.', - 'watch_title_comments' => 'All Page Updates & Comments', - 'watch_desc_comments' => 'Notify upon all new pages, page changes and new comments.', - 'watch_desc_comments_page' => 'Notify upon page changes and new comments.', - 'watch_change_default' => 'Change default notification preferences', - 'watch_detail_ignore' => 'Ignoring notifications', - 'watch_detail_new' => 'Watching for new pages', - 'watch_detail_updates' => 'Watching new pages and updates', - 'watch_detail_comments' => 'Watching new pages, updates & comments', - 'watch_detail_parent_book' => 'Watching via parent book', - 'watch_detail_parent_book_ignore' => 'Ignoring via parent book', - 'watch_detail_parent_chapter' => 'Watching via parent chapter', - 'watch_detail_parent_chapter_ignore' => 'Ignoring via parent chapter', + 'watch' => 'Sledovat', + 'watch_title_default' => 'Výchozí vlastnosti', + 'watch_desc_default' => 'Vrátit sledování pouze do výchozích nastavení oznámení.', + 'watch_title_ignore' => 'Ignorovat', + 'watch_desc_ignore' => 'Ignorovat všechna oznámení, včetně oznámení z nastavení uživatelské úrovně.', + 'watch_title_new' => 'Nová stránka', + 'watch_desc_new' => 'Upozornit, když je v této položce vytvořena nová stránka.', + 'watch_title_updates' => 'Všechny aktualizace stránky', + 'watch_desc_updates' => 'Upozornit na všechny nové stránky a změny stránek.', + 'watch_desc_updates_page' => 'Upozornit na všechny změny stránky.', + 'watch_title_comments' => 'Všechny aktualizace a komentáře stránky', + 'watch_desc_comments' => 'Upozornit na všechny nové stránky, změny stránek a nové komentáře.', + 'watch_desc_comments_page' => 'Upozornit na změny stránky a nové komentáře.', + 'watch_change_default' => 'Změnit výchozí předvolby oznámení', + 'watch_detail_ignore' => 'Ignorování oznámení', + 'watch_detail_new' => 'Sledování nových stránek', + 'watch_detail_updates' => 'Sledování nových stránek a aktualizací', + 'watch_detail_comments' => 'Sledování nových stránek, aktualizací a komentářů', + 'watch_detail_parent_book' => 'Sledování přes nadřazenou knihu', + 'watch_detail_parent_book_ignore' => 'Ignorování přes nadřazenou knihu', + 'watch_detail_parent_chapter' => 'Sledování přes nadřazenou knihu', + 'watch_detail_parent_chapter_ignore' => 'Ignorování přes nadřazenou knihu', ]; diff --git a/lang/cs/errors.php b/lang/cs/errors.php index dfcddb9cb70..3b38ec00b91 100644 --- a/lang/cs/errors.php +++ b/lang/cs/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Nelze získat obrázek z adresy :url', 'cannot_create_thumbs' => 'Server nedokáže udělat náhledy. Zkontrolujte, že rozšíření GD pro PHP je nainstalováno.', 'server_upload_limit' => 'Server nepovoluje nahrávat tak veliké soubory. Zkuste prosím menší soubor.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Server nepovoluje nahrávat tak veliké soubory. Zkuste prosím menší soubor.', // Drawing & Images 'image_upload_error' => 'Nastala chyba během nahrávání souboru', 'image_upload_type_error' => 'Typ nahrávaného obrázku je neplatný.', 'image_upload_replace_type' => 'Náhrady souboru obrázku musí být stejného typu', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Data výkresu nelze načíst. Výkresový soubor již nemusí existovat nebo nemusí mít oprávnění k němu přistupovat.', // Attachments diff --git a/lang/cs/notifications.php b/lang/cs/notifications.php index 5539ae9a9d8..00c4030a403 100644 --- a/lang/cs/notifications.php +++ b/lang/cs/notifications.php @@ -4,23 +4,23 @@ */ return [ - 'new_comment_subject' => 'New comment on page: :pageName', - 'new_comment_intro' => 'A user has commented on a page in :appName:', + 'new_comment_subject' => 'Nový komentář na stránce: :pageName', + 'new_comment_intro' => 'Uživatel okomentoval stránku v :appName:', 'new_page_subject' => 'New page: :pageName', - 'new_page_intro' => 'A new page has been created in :appName:', - 'updated_page_subject' => 'Updated page: :pageName', - 'updated_page_intro' => 'A page has been updated in :appName:', - 'updated_page_debounce' => 'To prevent a mass of notifications, for a while you won\'t be sent notifications for further edits to this page by the same editor.', + 'new_page_intro' => 'Nová stránka byla vytvořena v :appName:', + 'updated_page_subject' => 'Aktualizovaná stránka: :pageName', + 'updated_page_intro' => 'Stránka byla aktualizována v :appName:', + 'updated_page_debounce' => 'Aby se zabránilo hromadnému zasílání upozornění, na nějakou dobu nebudete posílat oznámení o dalších úpravách této stránky stejným editorem.', - 'detail_page_name' => 'Page Name:', - 'detail_commenter' => 'Commenter:', - 'detail_comment' => 'Comment:', - 'detail_created_by' => 'Created By:', - 'detail_updated_by' => 'Updated By:', + 'detail_page_name' => 'Název stránky:', + 'detail_commenter' => 'Komentoval:', + 'detail_comment' => 'Komentář:', + 'detail_created_by' => 'Vytvořil:', + 'detail_updated_by' => 'Aktualizoval(a):', - 'action_view_comment' => 'View Comment', - 'action_view_page' => 'View Page', + 'action_view_comment' => 'Zobrazit komentář', + 'action_view_page' => 'Zobrazit stránku', - 'footer_reason' => 'This notification was sent to you because :link cover this type of activity for this item.', - 'footer_reason_link' => 'your notification preferences', + 'footer_reason' => 'Toto oznámení vám bylo zasláno, protože :link pokrývá tento typ aktivity pro tuto položku.', + 'footer_reason_link' => 'nastavení upozornění', ]; diff --git a/lang/cs/preferences.php b/lang/cs/preferences.php index ea529efce4b..638fe4c6305 100644 --- a/lang/cs/preferences.php +++ b/lang/cs/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Předvolby', + 'my_account' => 'My Account', 'shortcuts' => 'Zkratky', - 'shortcuts_interface' => 'Zobrazit klávesové zkratky', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Zde můžete povolit nebo zakázat klávesové zkratky systémového rozhraní používané pro navigaci a akce.', 'shortcuts_customize_desc' => 'Po výběru vstupu pro zástupce si můžete přizpůsobit všechny klávesové zkratky.', 'shortcuts_toggle_label' => 'Klávesové zkratky povoleny', @@ -17,17 +17,35 @@ 'shortcuts_save' => 'Uložit zkratky', 'shortcuts_overlay_desc' => 'Poznámka: Když jsou povoleny zkratky, je k dispozici pomocný překryv stisknutím "? která zvýrazní dostupné zkratky pro akce viditelné na obrazovce.', 'shortcuts_update_success' => 'Nastavení pro zkratky bylo aktualizováno!', - 'shortcuts_overview_desc' => 'Manage keyboard shortcuts you can use to navigate the system user interface.', + 'shortcuts_overview_desc' => 'Správa klávesových zkratek, které můžete použít k navigaci systémového uživatelského rozhraní.', - 'notifications' => 'Notification Preferences', - 'notifications_desc' => 'Control the email notifications you receive when certain activity is performed within the system.', - 'notifications_opt_own_page_changes' => 'Notify upon changes to pages I own', - 'notifications_opt_own_page_comments' => 'Notify upon comments on pages I own', - 'notifications_opt_comment_replies' => 'Notify upon replies to my comments', - 'notifications_save' => 'Save Preferences', - 'notifications_update_success' => 'Notification preferences have been updated!', - 'notifications_watched' => 'Watched & Ignored Items', - 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', + 'notifications' => 'Nastavení upozornění', + 'notifications_desc' => 'Ovládat e-mailová oznámení, která dostáváte při provádění určité aktivity v systému.', + 'notifications_opt_own_page_changes' => 'Upozornit na změny stránek u kterých jsem vlastníkem', + 'notifications_opt_own_page_comments' => 'Upozornit na komentáře na stránkách, které vlastním', + 'notifications_opt_comment_replies' => 'Upozornit na odpovědi na mé komentáře', + 'notifications_save' => 'Uložit preference', + 'notifications_update_success' => 'Nastavení oznámení byla aktualizována!', + 'notifications_watched' => 'Sledované a ignorované položky', + 'notifications_watched_desc' => ' Níže jsou položky, které mají vlastní nastavení hodinek. Chcete-li aktualizovat vaše předvolby, podívejte se na položku a pak najděte možnosti hodinek v postranním panelu.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/cs/settings.php b/lang/cs/settings.php index 2359af0b941..04c290634ab 100644 --- a/lang/cs/settings.php +++ b/lang/cs/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Uživateli můžete poslat pozvánku e-mailem, která umožní uživateli, aby si zvolil sám svoje heslo do aplikace a nebo můžete zadat heslo sami.', 'users_send_invite_option' => 'Poslat uživateli pozvánku e-mailem', 'users_external_auth_id' => 'Přihlašovací identifikátor třetích stran', - 'users_external_auth_id_desc' => 'ID použité pro rozpoznání tohoto uživatele když komunikuje s externím přihlašovacím systémem.', - 'users_password_warning' => 'Vyplňujte pouze v případě, že chcete heslo změnit.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Symbolizuje každého nepřihlášeného návštěvníka, který navštívil aplikaci. Nelze ho použít k přihlášení ale je přiřazen automaticky nepřihlášeným.', 'users_delete' => 'Odstranit uživatele', 'users_delete_named' => 'Odstranit uživatele :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Preferovaný jazyk', 'users_preferred_language_desc' => 'Tato volba ovlivní pouze jazyk používaný v uživatelském rozhraní aplikace. Volba nemá vliv na žádný uživateli vytvářený obsah.', 'users_social_accounts' => 'Sociální účty', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Zde můžete přidat vaše účty ze sociálních sítí pro pohodlnější přihlašování. Odpojení účtů neznamená, že tato aplikace ztratí práva číst detaily z vašeho účtu. Zakázat této aplikaci přístup k detailům vašeho účtu musíte přímo ve svém profilu na dané sociální síti.', 'users_social_connect' => 'Připojit účet', 'users_social_disconnect' => 'Odpojit účet', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => 'Účet :socialAccount byl připojen k vašemu profilu.', 'users_social_disconnected' => 'Účet :socialAccount byl odpojen od vašeho profilu.', 'users_api_tokens' => 'API Tokeny', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Tento uživatel nemá vytvořené žádné API Tokeny', 'users_api_tokens_create' => 'Vytvořit Token', 'users_api_tokens_expires' => 'Vyprší', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/cy/common.php b/lang/cy/common.php index 47b74d5b6eb..27037babec0 100644 --- a/lang/cy/common.php +++ b/lang/cy/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Clear Filter', 'download' => 'Download', 'open_in_tab' => 'Open in Tab', + 'open' => 'Open', // Sort Options 'sort_options' => 'Sort Options', diff --git a/lang/cy/components.php b/lang/cy/components.php index 8a105096b4f..c33b1d0b791 100644 --- a/lang/cy/components.php +++ b/lang/cy/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Image successfully deleted', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Edit Code', diff --git a/lang/cy/entities.php b/lang/cy/entities.php index 4468cd68f90..cfb5aae1a78 100644 --- a/lang/cy/entities.php +++ b/lang/cy/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Page Template', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Page Tags', 'chapter_tags' => 'Chapter Tags', 'book_tags' => 'Book Tags', diff --git a/lang/cy/errors.php b/lang/cy/errors.php index 6e687f4f2bd..5ba7edf59ed 100644 --- a/lang/cy/errors.php +++ b/lang/cy/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Methu cael delwedd o :url', 'cannot_create_thumbs' => 'Ni all y gweinydd greu mân-luniau. Gwiriwch fod gennych yr estyniad GD PHP wedi\'i osod.', 'server_upload_limit' => 'Nid yw\'r gweinydd yn caniatáu uwchlwythiadau o\'r maint hwn. Rhowch gynnig ar faint ffeil llai.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Nid yw\'r gweinydd yn caniatáu uwchlwythiadau o\'r maint hwn. Rhowch gynnig ar faint ffeil llai.', // Drawing & Images 'image_upload_error' => 'Bu gwall wrth uwchlwytho\'r ddelwedd', 'image_upload_type_error' => 'Mae\'r math o ddelwedd sy\'n cael ei huwchlwytho yn annilys', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/cy/preferences.php b/lang/cy/preferences.php index 118e8ba820f..2b88f9671ff 100644 --- a/lang/cy/preferences.php +++ b/lang/cy/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Shortcuts', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/cy/settings.php b/lang/cy/settings.php index 8821c77f0d1..c5ca662c37d 100644 --- a/lang/cy/settings.php +++ b/lang/cy/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.', 'users_send_invite_option' => 'Send user invite email', 'users_external_auth_id' => 'External Authentication ID', - 'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.', - 'users_password_warning' => 'Only fill the below if you would like to change your password.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.', 'users_delete' => 'Delete User', 'users_delete_named' => 'Delete user :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Preferred Language', 'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.', 'users_social_accounts' => 'Social Accounts', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not revoke previously authorized access. Revoke access from your profile settings on the connected social account.', 'users_social_connect' => 'Connect Account', 'users_social_disconnect' => 'Disconnect Account', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount account was successfully attached to your profile.', 'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.', 'users_api_tokens' => 'API Tokens', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'No API tokens have been created for this user', 'users_api_tokens_create' => 'Create Token', 'users_api_tokens_expires' => 'Expires', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/da/common.php b/lang/da/common.php index b9bb03e1250..8c3aa24a79f 100644 --- a/lang/da/common.php +++ b/lang/da/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Nulstil Filter', 'download' => 'Hent', 'open_in_tab' => 'Åben i ny fane', + 'open' => 'Open', // Sort Options 'sort_options' => 'Sorteringsindstillinger', diff --git a/lang/da/components.php b/lang/da/components.php index 575786765b7..bcbf1167285 100644 --- a/lang/da/components.php +++ b/lang/da/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Billede slettet', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Rediger kode', diff --git a/lang/da/entities.php b/lang/da/entities.php index 36791efbbe3..6453d92ce03 100644 --- a/lang/da/entities.php +++ b/lang/da/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Sideskabelon', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Sidetags', 'chapter_tags' => 'Kapiteltags', 'book_tags' => 'Bogtags', diff --git a/lang/da/errors.php b/lang/da/errors.php index 7c172c0aafb..5c64219c950 100644 --- a/lang/da/errors.php +++ b/lang/da/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Kan ikke finde billede på :url', 'cannot_create_thumbs' => 'Serveren kan ikke oprette miniaturer. Kontroller, at GD PHP-udvidelsen er installeret.', 'server_upload_limit' => 'Serveren tillader ikke uploads af denne størrelse. Prøv en mindre filstørrelse.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Serveren tillader ikke uploads af denne størrelse. Prøv en mindre filstørrelse.', // Drawing & Images 'image_upload_error' => 'Der opstod en fejl ved upload af billedet', 'image_upload_type_error' => 'Billedtypen, der uploades, er ugyldig', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/da/preferences.php b/lang/da/preferences.php index 118e8ba820f..2b88f9671ff 100644 --- a/lang/da/preferences.php +++ b/lang/da/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Shortcuts', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/da/settings.php b/lang/da/settings.php index a121c1982e9..3cecd1b865e 100644 --- a/lang/da/settings.php +++ b/lang/da/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Du kan vælge at sende denne bruger en invitation på E-Mail, som giver dem mulighed for at indstille deres egen adgangskode, ellers kan du indstille deres adgangskode selv.', 'users_send_invite_option' => 'Send bruger en invitationsmail', 'users_external_auth_id' => 'Ekstern godkendelses ID', - 'users_external_auth_id_desc' => 'Dette er det ID, der bruges til at matche denne bruger ved kommunikation med dit eksterne godkendelsessystem.', - 'users_password_warning' => 'Udfyld kun nedenstående, hvis du vil ændre din adgangskode.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Denne bruger repræsenterer alle gæstebrugere, der besøger din instans. Den kan ikke bruges til at logge på, men tildeles automatisk.', 'users_delete' => 'Slet bruger', 'users_delete_named' => 'Slet bruger :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Foretrukket sprog', 'users_preferred_language_desc' => 'Denne indstilling ændrer det sprog, der bruges til applikationens brugergrænseflade. Dette påvirker ikke noget brugeroprettet indhold.', 'users_social_accounts' => 'Sociale konti', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Her kan du forbinde dine andre konti for hurtigere og lettere login. Afbrydelse af en konto her tilbagekalder ikke tidligere autoriseret adgang. Tilbagekald adgang fra dine profilindstillinger på den tilsluttede sociale konto.', 'users_social_connect' => 'Forbind konto', 'users_social_disconnect' => 'Frakobl konto', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount kontoen blev knyttet til din profil.', 'users_social_disconnected' => ':socialAccount kontoen blev afbrudt fra din profil.', 'users_api_tokens' => 'API Tokens', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Ingen API tokens er blevet oprettet for denne bruger', 'users_api_tokens_create' => 'Opret Token', 'users_api_tokens_expires' => 'Udløber', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/de/common.php b/lang/de/common.php index 2946e4df6bc..5934e1e7194 100644 --- a/lang/de/common.php +++ b/lang/de/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Filter löschen', 'download' => 'Herunterladen', 'open_in_tab' => 'In neuem Tab öffnen', + 'open' => 'Öffnen', // Sort Options 'sort_options' => 'Sortieroptionen', diff --git a/lang/de/components.php b/lang/de/components.php index 1f4c409afc5..5f0da6f301b 100644 --- a/lang/de/components.php +++ b/lang/de/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Bild erfolgreich gelöscht', 'image_replace' => 'Bild ersetzen', 'image_replace_success' => 'Bild erfolgreich aktualisiert', + 'image_rebuild_thumbs' => 'Größenvariationen neu generieren', + 'image_rebuild_thumbs_success' => 'Bildgrößenvariationen erfolgreich neu erstellt!', // Code Editor 'code_editor' => 'Code editieren', diff --git a/lang/de/editor.php b/lang/de/editor.php index ae7a99775e4..230dc29f6df 100644 --- a/lang/de/editor.php +++ b/lang/de/editor.php @@ -32,7 +32,7 @@ 'header_medium' => 'Mittlere Überschrift', 'header_small' => 'Kleine Überschrift', 'header_tiny' => 'Sehr kleine Überschrift', - 'paragraph' => 'Paragraph', + 'paragraph' => 'Absatz', 'blockquote' => 'Blockzitat', 'inline_code' => 'Inline-Code', 'callouts' => 'Anmerkungen', diff --git a/lang/de/entities.php b/lang/de/entities.php index 9e69196acfe..2d223ef4206 100644 --- a/lang/de/entities.php +++ b/lang/de/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Seitenvorlage', // Editor Sidebar + 'toggle_sidebar' => 'Seitenleiste umschalten', 'page_tags' => 'Seiten-Schlagwörter', 'chapter_tags' => 'Kapitel-Schlagwörter', 'book_tags' => 'Buch-Schlagwörter', diff --git a/lang/de/errors.php b/lang/de/errors.php index 04e97c047d0..639373f3418 100644 --- a/lang/de/errors.php +++ b/lang/de/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Bild konnte nicht von der URL :url geladen werden.', 'cannot_create_thumbs' => 'Der Server kann keine Vorschau-Bilder erzeugen. Bitte prüfen Sie, ob die GD PHP-Erweiterung installiert ist.', 'server_upload_limit' => 'Der Server verbietet das Hochladen von Dateien mit dieser Dateigröße. Bitte versuchen Sie es mit einer kleineren Datei.', + 'server_post_limit' => 'Der Server kann die angegebene Datenmenge nicht empfangen. Versuchen Sie es erneut mit weniger Daten oder einer kleineren Datei.', 'uploaded' => 'Der Server verbietet das Hochladen von Dateien mit dieser Dateigröße. Bitte versuchen Sie es mit einer kleineren Datei.', // Drawing & Images 'image_upload_error' => 'Beim Hochladen des Bildes trat ein Fehler auf.', 'image_upload_type_error' => 'Der Bildtyp der hochgeladenen Datei ist ungültig.', 'image_upload_replace_type' => 'Bild-Ersetzungen müssen vom gleichen Typ sein', + 'image_upload_memory_limit' => 'Bildupload und/oder Thumbnailerstellung konnten aufgrund von Systemressourcenbeschränkungen nicht verarbeitet werden.', + 'image_thumbnail_memory_limit' => 'Fehler beim Erstellen der Thumbnails aufgrund von Systemressourcenbeschränkungen.', + 'image_gallery_thumbnail_memory_limit' => 'Fehler beim Erstellen der Galerie Thumbnails aufgrund von Systemressourcenbeschränkungen.', 'drawing_data_not_found' => 'Zeichnungsdaten konnten nicht geladen werden. Die Zeichnungsdatei existiert möglicherweise nicht mehr oder Sie haben nicht die Berechtigung, darauf zuzugreifen.', // Attachments diff --git a/lang/de/preferences.php b/lang/de/preferences.php index 8eac9725da1..66c7f6f12e4 100644 --- a/lang/de/preferences.php +++ b/lang/de/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Profil-Einstellungen', + 'my_account' => 'Mein Account', 'shortcuts' => 'Tastenkürzel', - 'shortcuts_interface' => 'Oberflächen-Tastaturkürzel', + 'shortcuts_interface' => 'Einstellungen zu UI Abkürzungen', 'shortcuts_toggle_desc' => 'Hier können Sie Tastaturkürzel für die Systemoberfläche für Navigation und Aktionen aktivieren oder deaktivieren.', 'shortcuts_customize_desc' => 'Unten können Sie alle Tastenkürzel anpassen. Drücken Sie einfach die gewünschte Tastenkombination, nachdem Sie die Eingabe für eine Tastenkombination ausgewählt haben.', 'shortcuts_toggle_label' => 'Tastaturkürzel aktiviert', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Beobachtete und ignorierte Elemente', 'notifications_watched_desc' => ' Nachfolgend finden Sie die Elemente, für die benutzerdefinierten Überwachungspräferenzen gelten. Um Ihre Einstellungen für diese Elemente zu aktualisieren, sehen Sie sich das Element an und suchen dann die Überwachungsoptionen in der Seitenleiste.', - 'profile_overview_desc' => ' Verwalten Sie die Details Ihres Benutzerprofils einschließlich bevorzugter Sprache und Authentifizierungsoptionen.', + 'auth' => 'Zugang & Sicherheit', + 'auth_change_password' => 'Passwort ändern', + 'auth_change_password_desc' => 'Legen Sie ein Passwort für die Anmeldung in der Anwendung fest. Dieses muss mindestens 8 Zeichen lang sein.', + 'auth_change_password_success' => 'Das Passwort wurde aktualisiert!', + + 'profile' => 'Profildetails', + 'profile_desc' => 'Verwalten Sie die Details Ihres Kontos welche Sie gegenüber anderen Benutzern repräsentiert, zusätzlich zu den Details die für die Kommunikation und Personalisierung des Systems genutzt werden.', + 'profile_view_public' => 'Öffentliches Profil zeigen', + 'profile_name_desc' => 'Konfigurieren Sie Ihren Anzeigenamen, der durch die Aktivität, die Sie ausführen, für andere Benutzer und Ihre eigenen Inhalte im System sichtbar ist.', + 'profile_email_desc' => 'Diese E-Mail wird für Benachrichtigungen und, je nach aktiver Systemauthentifizierung, den Systemzugriff verwendet.', + 'profile_email_no_permission' => 'Leider haben Sie nicht die Berechtigung, Ihre E-Mail-Adresse zu ändern. Wenn Sie diese ändern möchten, wenden Sie sich bitte an Ihren Administrator.', + 'profile_avatar_desc' => 'Wählen Sie ein Bild, dass anderen im System angezeigt wird, um Sie zu repräsentieren. Idealerweise sollte dieses Bild quadratisch und etwa 256px breit und hoch sein.', + 'profile_admin_options' => 'Administratoroptionen', + 'profile_admin_options_desc' => 'Weitere Administrator-Optionen wie zum Beispiel die Verwaltung von Rollenzuweisungen für Ihr Benutzerkonto finden Sie im Bereich "Einstellungen > Benutzer" der Anwendung.', + + 'delete_account' => 'Konto löschen', + 'delete_my_account' => 'Meine Konto löschen', + 'delete_my_account_desc' => 'Dadurch wird Ihr Benutzerkonto vollständig vom System gelöscht. Sie können dieses Konto nicht wiederherstellen oder diese Aktion rückgängig machen. Inhalte, die Sie erstellt haben, wie erstellte Seiten und hochgeladene Bilder, bleiben erhalten.', + 'delete_my_account_warning' => 'Sind Sie sicher, dass Sie Ihr Benutzerkonto löschen möchten?', ]; diff --git a/lang/de/settings.php b/lang/de/settings.php index 7789c7b65e8..c97a1715cef 100644 --- a/lang/de/settings.php +++ b/lang/de/settings.php @@ -194,8 +194,8 @@ 'users_send_invite_text' => 'Sie können diesem Benutzer eine Einladungs-E-Mail senden, die es ihm erlaubt, sein eigenes Passwort zu setzen, andernfalls können Sie sein Passwort selbst setzen.', 'users_send_invite_option' => 'Benutzer-Einladungs-E-Mail senden', 'users_external_auth_id' => 'Externe Authentifizierungs-ID', - 'users_external_auth_id_desc' => 'Dies ist die ID, mit der dieser Benutzer bei der Kommunikation mit Ihrem externen Authentifizierungssystem übereinstimmt.', - 'users_password_warning' => 'Füllen Sie die folgenden Felder nur aus, wenn Sie Ihr Passwort ändern möchten:', + 'users_external_auth_id_desc' => 'Wenn ein externes Authentifizierungssystem verwendet wird (z. B. SAML2, OIDC oder LDAP) ist dies die ID, die diesen BookStack-Benutzer mit dem Authentifizierungs-Systemkonto verknüpft. Sie können dieses Feld ignorieren, wenn Sie die Standard-E-Mail-basierte Authentifizierung verwenden.', + 'users_password_warning' => 'Füllen Sie die untenstehenden Felder nur aus, wenn Sie das Passwort für diesen Benutzer ändern möchten.', 'users_system_public' => 'Dieser Benutzer repräsentiert alle unangemeldeten Benutzer, die diese Seite betrachten. Er kann nicht zum Anmelden benutzt werden, sondern wird automatisch zugeordnet.', 'users_delete' => 'Benutzer löschen', 'users_delete_named' => 'Benutzer ":userName" löschen', @@ -211,12 +211,16 @@ 'users_preferred_language' => 'Bevorzugte Sprache', 'users_preferred_language_desc' => 'Diese Option ändert die Sprache, die für die Benutzeroberfläche der Anwendung verwendet wird. Dies hat keinen Einfluss auf von Benutzern erstellte Inhalte.', 'users_social_accounts' => 'Social-Media Konten', + 'users_social_accounts_desc' => 'Zeigt den Status der verbundenen sozialen Konten für diesen Benutzer an. Social Accounts können zusätzlich zum primären Authentifizierungssystem für den Systemzugriff verwendet werden.', 'users_social_accounts_info' => 'Hier können Sie andere Social-Media-Konten für eine schnellere und einfachere Anmeldung verknüpfen. Wenn Sie ein Social-Media Konto lösen, bleibt der Zugriff erhalten. Entfernen Sie in diesem Falle die Berechtigung in Ihren Profil-Einstellungen des verknüpften Social-Media-Kontos.', 'users_social_connect' => 'Social-Media-Konto verknüpfen', 'users_social_disconnect' => 'Social-Media-Konto löschen', + 'users_social_status_connected' => 'Verbunden', + 'users_social_status_disconnected' => 'Getrennt', 'users_social_connected' => ':socialAccount-Konto wurde erfolgreich mit dem Profil verknüpft.', 'users_social_disconnected' => ':socialAccount-Konto wurde erfolgreich vom Profil gelöst.', 'users_api_tokens' => 'API-Token', + 'users_api_tokens_desc' => 'Erstellen und verwalten Sie die Zugangs-Tokens zur Authentifizierung mit der BookStack REST API. Berechtigungen für die API werden über den Benutzer verwaltet, dem das Token gehört.', 'users_api_tokens_none' => 'Für diesen Benutzer wurden keine API-Token erstellt', 'users_api_tokens_create' => 'Token erstellen', 'users_api_tokens_expires' => 'Endet', @@ -303,8 +307,9 @@ 'ko' => 'Koreanisch', 'lt' => 'Litauisch', 'lv' => 'Lettisch', - 'nl' => 'Niederländisch', 'nb' => 'Norwegisch (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Niederländisch', 'pl' => 'Polnisch', 'pt' => 'Portugiesisch', 'pt_BR' => 'Portugiesisch (Brasilien)', @@ -315,6 +320,7 @@ 'sv' => 'Schwedisch', 'tr' => 'Türkisch', 'uk' => 'Ukrainisch', + 'uz' => 'O‘zbekcha', 'vi' => 'Vietnamesisch', 'zh_CN' => 'Vereinfachtes Chinesisch', 'zh_TW' => 'Traditionelles Chinesisch', diff --git a/lang/de_informal/common.php b/lang/de_informal/common.php index cfa28453f30..9014f4b2f3e 100644 --- a/lang/de_informal/common.php +++ b/lang/de_informal/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Filter löschen', 'download' => 'Herunterladen', 'open_in_tab' => 'In Tab öffnen', + 'open' => 'Öffnen', // Sort Options 'sort_options' => 'Sortieroptionen', @@ -99,7 +100,7 @@ 'tab_content_label' => 'Tab: Hauptinhalt anzeigen', // Email Content - 'email_action_help' => 'Sollte es beim Anklicken der Schaltfläche ":action_text" Probleme geben, öffne die folgende URL in Deinem Browser:', + 'email_action_help' => 'Sollte es beim Anklicken der Schaltfläche ":actionText" Probleme geben, öffne die folgende URL in Deinem Browser:', 'email_rights' => 'Alle Rechte vorbehalten', // Footer Link Options diff --git a/lang/de_informal/components.php b/lang/de_informal/components.php index fc3e61a0ce6..02047c60a46 100644 --- a/lang/de_informal/components.php +++ b/lang/de_informal/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Bild erfolgreich gelöscht', 'image_replace' => 'Bild ersetzen', 'image_replace_success' => 'Bild erfolgreich aktualisiert', + 'image_rebuild_thumbs' => 'Größenvariationen neu generieren', + 'image_rebuild_thumbs_success' => 'Bildgrößenvariationen erfolgreich neu erstellt!', // Code Editor 'code_editor' => 'Code editieren', diff --git a/lang/de_informal/entities.php b/lang/de_informal/entities.php index 2fe1ffad8d6..063d51967ae 100644 --- a/lang/de_informal/entities.php +++ b/lang/de_informal/entities.php @@ -116,7 +116,7 @@ 'book' => 'Buch', 'books' => 'Bücher', 'x_books' => ':count Buch|:count Bücher', - 'books_empty' => 'Keine Bücher vorhanden', + 'books_empty' => 'Es wurden noch keine Bücher angelegt', 'books_popular' => 'Beliebte Bücher', 'books_recent' => 'Kürzlich angesehene Bücher', 'books_new' => 'Neue Bücher', @@ -240,7 +240,7 @@ 'pages_md_show_preview' => 'Vorschau anzeigen', 'pages_md_sync_scroll' => 'Vorschau synchronisieren', 'pages_drawing_unsaved' => 'Ungespeicherte Zeichnung gefunden', - 'pages_drawing_unsaved_confirm' => 'Es wurden ungespeicherte Zeichnungsdaten von einem früheren, fehlgeschlagenen Versuch, die Zeichnung zu speichern, gefunden. Möchten Sie diese ungespeicherte Zeichnung wiederherstellen und weiter bearbeiten?', + 'pages_drawing_unsaved_confirm' => 'Es wurden ungespeicherte Zeichnungsdaten von einem früheren, fehlgeschlagenen Versuch, die Zeichnung zu speichern, gefunden. Möchtest du diese ungespeicherte Zeichnung wiederherstellen und weiter bearbeiten?', 'pages_not_in_chapter' => 'Seite ist in keinem Kapitel', 'pages_move' => 'Seite verschieben', 'pages_copy' => 'Seite kopieren', @@ -295,6 +295,7 @@ 'pages_is_template' => 'Seitenvorlage', // Editor Sidebar + 'toggle_sidebar' => 'Seitenleiste umschalten', 'page_tags' => 'Seiten-Schlagwörter', 'chapter_tags' => 'Kapitel-Schlagwörter', 'book_tags' => 'Buch-Schlagwörter', @@ -413,7 +414,7 @@ 'watch_title_ignore' => 'Ignorieren', 'watch_desc_ignore' => 'Ignorieren aller Benachrichtigungen, auch die von den Einstellungen auf Benutzerebene.', 'watch_title_new' => 'Neue Seiten', - 'watch_desc_new' => 'Benachrichtigung, wenn eine neue Seite in diesem Element erstellt wird.', + 'watch_desc_new' => 'Benachrichtigen, wenn eine neue Seite in diesem Element erstellt wird.', 'watch_title_updates' => 'Alle Seitenupdates', 'watch_desc_updates' => 'Bei allen neuen Seiten und Seitenänderungen benachrichtigen.', 'watch_desc_updates_page' => 'Bei allen Seitenänderungen benachrichtigen.', diff --git a/lang/de_informal/errors.php b/lang/de_informal/errors.php index c19c0eda8c5..c91fede4f6c 100644 --- a/lang/de_informal/errors.php +++ b/lang/de_informal/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Bild konnte nicht von der URL :url geladen werden.', 'cannot_create_thumbs' => 'Der Server kann keine Vorschau-Bilder erzeugen. Bitte prüfe, ob die GD PHP-Erweiterung installiert ist.', 'server_upload_limit' => 'Der Server verbietet das Hochladen von Dateien mit dieser Dateigröße. Bitte versuche es mit einer kleineren Datei.', + 'server_post_limit' => 'Der Server kann die angegebene Datenmenge nicht empfangen. Versuche es erneut mit weniger Daten oder einer kleineren Datei.', 'uploaded' => 'Der Server verbietet das Hochladen von Dateien mit dieser Dateigröße. Bitte versuche es mit einer kleineren Datei.', // Drawing & Images 'image_upload_error' => 'Beim Hochladen des Bildes trat ein Fehler auf.', 'image_upload_type_error' => 'Der Bildtyp der hochgeladenen Datei ist ungültig.', 'image_upload_replace_type' => 'Bild-Ersetzungen müssen vom gleichen Typ sein', + 'image_upload_memory_limit' => 'Bildupload und/oder Thumbnailerstellung konnten aufgrund von Systemressourcenbeschränkungen nicht verarbeitet werden.', + 'image_thumbnail_memory_limit' => 'Fehler beim Erstellen der Thumbnails aufgrund von Systemressourcenbeschränkungen.', + 'image_gallery_thumbnail_memory_limit' => 'Fehler beim Erstellen der Galerie Thumbnails aufgrund von Systemressourcenbeschränkungen.', 'drawing_data_not_found' => 'Zeichnungsdaten konnten nicht geladen werden. Die Zeichnungsdatei existiert möglicherweise nicht mehr oder du hast nicht die Berechtigung, darauf zuzugreifen.', // Attachments diff --git a/lang/de_informal/notifications.php b/lang/de_informal/notifications.php index 314f0bfe39c..fc6204d5018 100644 --- a/lang/de_informal/notifications.php +++ b/lang/de_informal/notifications.php @@ -10,9 +10,9 @@ 'new_page_intro' => 'Es wurde eine neue Seite in :appName erstellt:', 'updated_page_subject' => 'Aktualisierte Seite: :pageName', 'updated_page_intro' => 'Eine Seite wurde in :appName aktualisiert:', - 'updated_page_debounce' => 'Um eine Flut von Benachrichtigungen zu vermeiden, werden Sie für eine gewisse Zeit keine Benachrichtigungen für weitere Bearbeitungen dieser Seite durch denselben Bearbeiter erhalten.', + 'updated_page_debounce' => 'Um eine Flut von Benachrichtigungen zu vermeiden, wirst du für eine gewisse Zeit keine Benachrichtigungen für weitere Bearbeitungen dieser Seite durch denselben Bearbeiter erhalten.', - 'detail_page_name' => 'Name der Seite:', + 'detail_page_name' => 'Seitenname:', 'detail_commenter' => 'Kommentator:', 'detail_comment' => 'Kommentar:', 'detail_created_by' => 'Erstellt von:', @@ -21,6 +21,6 @@ 'action_view_comment' => 'Kommentar anzeigen', 'action_view_page' => 'Seite anzeigen', - 'footer_reason' => 'Diese Benachrichtigung wurde an Sie gesendet, weil :link diese Art von Aktivität für dieses Element abdeckt.', - 'footer_reason_link' => 'ihre Benachrichtigungseinstellungen', + 'footer_reason' => 'Diese Benachrichtigung wurde an dich gesendet, weil :link diese Art von Aktivität für dieses Element abdeckt.', + 'footer_reason_link' => 'deine Benachrichtigungseinstellungen', ]; diff --git a/lang/de_informal/passwords.php b/lang/de_informal/passwords.php index 0dd28c019f1..e3606760bee 100644 --- a/lang/de_informal/passwords.php +++ b/lang/de_informal/passwords.php @@ -6,7 +6,7 @@ */ return [ - 'password' => 'Passwörter müssen aus mindestens sechs Zeichen bestehen und mit der eingegebenen Wiederholung übereinstimmen.', + 'password' => 'Passwörter müssen aus mindestens acht Zeichen bestehen und mit der eingegebenen Wiederholung übereinstimmen.', 'user' => "Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden.", 'token' => 'Der Token zum Zurücksetzen des Passworts für diese E-Mail-Adresse ist ungültig.', 'sent' => 'Wir haben dir einen Link zum Zurücksetzen des Passwortes per E-Mail geschickt!', diff --git a/lang/de_informal/preferences.php b/lang/de_informal/preferences.php index 1cad52b7274..a2fc60a14ff 100644 --- a/lang/de_informal/preferences.php +++ b/lang/de_informal/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Profil-Einstellungen', + 'my_account' => 'Mein Account', 'shortcuts' => 'Kürzel', - 'shortcuts_interface' => 'Oberflächen-Tastaturkürzel', + 'shortcuts_interface' => 'UI Shortcut Einstellungen', 'shortcuts_toggle_desc' => 'Hier kannst du Tastaturkürzel für die Systemoberfläche für Navigation und Aktionen aktivieren oder deaktivieren.', 'shortcuts_customize_desc' => 'Unten kannst du alle Tastenkürzel anpassen. Drücke einfach die gewünschte Tastenkombination, nachdem du die Eingabe für eine Tastenkombination ausgewählt hast.', 'shortcuts_toggle_label' => 'Tastaturkürzel aktiviert', @@ -20,14 +20,32 @@ 'shortcuts_overview_desc' => 'Verwalten von Tastenkombinationen, die zur Navigation der Benutzeroberfläche verwendet werden können.', 'notifications' => 'Benachrichtigungseinstellungen', - 'notifications_desc' => 'Legen Sie fest, welche E-Mail-Benachrichtigungen Sie erhalten, wenn bestimmte Aktivitäten im System durchgeführt werden.', + 'notifications_desc' => 'Lege fest, welche E-Mail-Benachrichtigungen du erhältst, wenn bestimmte Aktivitäten im System durchgeführt werden.', 'notifications_opt_own_page_changes' => 'Benachrichtigung bei Änderungen an eigenen Seiten', 'notifications_opt_own_page_comments' => 'Benachrichtigung bei Kommentaren an eigenen Seiten', 'notifications_opt_comment_replies' => 'Bei Antworten auf meine Kommentare benachrichtigen', 'notifications_save' => 'Einstellungen speichern', 'notifications_update_success' => 'Benachrichtigungseinstellungen wurden aktualisiert!', 'notifications_watched' => 'Beobachtete und ignorierte Elemente', - 'notifications_watched_desc' => ' Nachfolgend finden Sie die Elemente, für die benutzerdefinierten Überwachungspräferenzen gelten. Um Ihre Einstellungen für diese Elemente zu aktualisieren, sehen Sie sich das Element an und suchen dann die Überwachungsoptionen in der Seitenleiste.', + 'notifications_watched_desc' => ' Nachfolgend finden Sie die Elemente, für die benutzerdefinierten Überwachungspräferenzen gelten. Um deine Einstellungen für diese Elemente zu aktualisieren, sieh dir das Element an und suche dann die Überwachungsoptionen in der Seitenleiste.', - 'profile_overview_desc' => ' Verwalten Sie die Details Ihres Benutzerprofils einschließlich bevorzugter Sprache und Authentifizierungsoptionen.', + 'auth' => 'Zugang & Sicherheit', + 'auth_change_password' => 'Passwort ändern', + 'auth_change_password_desc' => 'Ändere das Passwort, mit dem du dich bei der Anwendung anmeldest. Dieses muss mindestens 8 Zeichen lang sein.', + 'auth_change_password_success' => 'Das Passwort wurde aktualisiert!', + + 'profile' => 'Profildetails', + 'profile_desc' => 'Verwalte die Details für dein Konto, welche dich gegenüber anderen Benutzern repräsentieren, zusätzlich zu den Details, die für die Kommunikation und die Personalisierung des Systems verwendet werden.', + 'profile_view_public' => 'Öffentliches Profil anzeigen', + 'profile_name_desc' => 'Konfiguriere deinen Anzeigenamen, der durch die Aktivität, die du durchführst, für andere Benutzer und deine eigenen Inhalte im System sichtbar ist.', + 'profile_email_desc' => 'Diese E-Mail wird für Benachrichtigungen und, je nach aktiver Systemauthentifizierung, den Systemzugriff verwendet.', + 'profile_email_no_permission' => 'Leider hast du nicht die Berechtigung, deine E-Mail-Adresse zu ändern. Wenn du diese ändern möchtest, wende dich bitte an deinen Administrator.', + 'profile_avatar_desc' => 'Wähle ein Bild aus, dass anderen im System angezeigt wird, um dich zu repräsentieren. Idealerweise sollte dieses Bild quadratisch und etwa 256px breit und hoch sein.', + 'profile_admin_options' => 'Administratoroptionen', + 'profile_admin_options_desc' => 'Weitere Administrator-Optionen, wie zum Beispiel die Verwaltung von Rollenzuweisungen, findest du in deinem Benutzerkonto im Bereich "Einstellungen > Benutzer" der Anwendung.', + + 'delete_account' => 'Konto löschen', + 'delete_my_account' => 'Mein Konto löschen', + 'delete_my_account_desc' => 'Dadurch wird dein Benutzerkonto vollständig vom System gelöscht. Du kannst dieses Konto nicht wiederherstellen oder diese Aktion rückgängig machen. Inhalte, die du erstellt hast, wie erstellte Seiten und hochgeladene Bilder, bleiben erhalten.', + 'delete_my_account_warning' => 'Bist du sicher, dass du dein Benutzerkonto löschen möchten?', ]; diff --git a/lang/de_informal/settings.php b/lang/de_informal/settings.php index 54e90fab0db..dc5721ac9c5 100644 --- a/lang/de_informal/settings.php +++ b/lang/de_informal/settings.php @@ -194,8 +194,8 @@ 'users_send_invite_text' => 'Du kannst diesem Benutzer eine Einladungs-E-Mail senden, die es ihm erlaubt, sein eigenes Passwort zu setzen, andernfalls kannst du sein Passwort selbst setzen.', 'users_send_invite_option' => 'Benutzer-Einladungs-E-Mail senden', 'users_external_auth_id' => 'Externe Authentifizierungs-ID', - 'users_external_auth_id_desc' => 'Dies ist die ID, die verwendet wird, um diesen Benutzer bei der Kommunikation mit deinem externen Authentifizierungssystem abzugleichen.', - 'users_password_warning' => 'Fülle die folgenden Felder nur aus, wenn du dein Passwort ändern möchtest:', + 'users_external_auth_id_desc' => 'Wenn ein externes Authentifizierungssystem verwendet wird (z. B. SAML2, OIDC oder LDAP) ist dies die ID, die diesen BookStack-Benutzer mit dem Authentifizierungs-Systemkonto verknüpft. Du kannst dieses Feld ignorieren, wenn du die Standard-E-Mail-basierte Authentifizierung verwenden.', + 'users_password_warning' => 'Fülle die untenstehenden Felder nur aus, wenn du das Passwort für diesen Benutzer ändern möchten.', 'users_system_public' => 'Dieser Benutzer repräsentiert alle unangemeldeten Benutzer, die diese Seite betrachten. Er kann nicht zum Anmelden benutzt werden, sondern wird automatisch zugeordnet.', 'users_delete' => 'Benutzer löschen', 'users_delete_named' => 'Benutzer ":userName" löschen', @@ -211,12 +211,16 @@ 'users_preferred_language' => 'Bevorzugte Sprache', 'users_preferred_language_desc' => 'Diese Option ändert die Sprache, die für die Benutzeroberfläche der Anwendung verwendet wird. Dies hat keinen Einfluss auf von Benutzern erstellte Inhalte.', 'users_social_accounts' => 'Social-Media Konten', + 'users_social_accounts_desc' => 'Zeigt den Status der verbundenen sozialen Konten für diesen Benutzer an. Social Accounts können zusätzlich zum primären Authentifizierungssystem für den Systemzugriff verwendet werden.', 'users_social_accounts_info' => 'Hier kannst Du andere Social-Media-Konten für eine schnellere und einfachere Anmeldung verknüpfen. Wenn Du ein Social-Media Konto löschst, bleibt der Zugriff erhalten. Entferne in diesem Falle die Berechtigung in Deinen Profil-Einstellungen des verknüpften Social-Media-Kontos.', 'users_social_connect' => 'Social-Media-Konto verknüpfen', 'users_social_disconnect' => 'Social-Media-Konto lösen', + 'users_social_status_connected' => 'Verbunden', + 'users_social_status_disconnected' => 'Getrennt', 'users_social_connected' => ':socialAccount-Konto wurde erfolgreich mit dem Profil verknüpft.', 'users_social_disconnected' => ':socialAccount-Konto wurde erfolgreich vom Profil gelöst.', 'users_api_tokens' => 'API-Token', + 'users_api_tokens_desc' => 'Erstelle und verwalte die Zugangs-Tokens zur Authentifizierung mit der BookStack REST API. Berechtigungen für die API werden über den Benutzer verwaltet, dem das Token gehört.', 'users_api_tokens_none' => 'Für diesen Benutzer wurden kein API-Token erstellt', 'users_api_tokens_create' => 'Token erstellen', 'users_api_tokens_expires' => 'Endet', @@ -303,8 +307,9 @@ 'ko' => 'Koreanisch', 'lt' => 'Litauisch', 'lv' => 'Lettisch', - 'nl' => 'Niederländisch', 'nb' => 'Norwegisch (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Niederländisch', 'pl' => 'Polnisch', 'pt' => 'Portugiesisch', 'pt_BR' => 'Portugiesisch (Brasilien)', @@ -315,6 +320,7 @@ 'sv' => 'Schwedisch', 'tr' => 'Türkisch', 'uk' => 'Ukrainisch', + 'uz' => 'O‘zbekcha', 'vi' => 'Vietnamesisch', 'zh_CN' => 'Vereinfachtes Chinesisch', 'zh_TW' => 'Traditionelles Chinesisch', diff --git a/lang/el/common.php b/lang/el/common.php index 523e83addf3..c9d38d5fd14 100644 --- a/lang/el/common.php +++ b/lang/el/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Διαγραφή φίλτρου', 'download' => 'Λήψη', 'open_in_tab' => 'Άνοιγμα σε Καρτέλα', + 'open' => 'Open', // Sort Options 'sort_options' => 'Επιλογές ταξινόμησης', diff --git a/lang/el/components.php b/lang/el/components.php index 851575474f4..b54a48601e3 100644 --- a/lang/el/components.php +++ b/lang/el/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Η εικόνα διαγράφηκε επιτυχώς', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Επεξεργασία κώδικα', diff --git a/lang/el/entities.php b/lang/el/entities.php index 42163eaf08a..031844662a9 100644 --- a/lang/el/entities.php +++ b/lang/el/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Πρότυπο σελίδας', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Ετικέτες Σελίδας', 'chapter_tags' => 'Ετικέτες Κεφαλαίου', 'book_tags' => 'Ετικέτες Βιβλίου', diff --git a/lang/el/errors.php b/lang/el/errors.php index 9d98015a048..e42d0a85559 100644 --- a/lang/el/errors.php +++ b/lang/el/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Αδυναμία λήψης εικόνας από :url', 'cannot_create_thumbs' => 'Ο διακομιστής δεν μπορεί να δημιουργήσει μικρογραφίες. Παρακαλώ ελέγξτε ότι έχετε την επέκταση GD PHP εγκατεστημένη.', 'server_upload_limit' => 'Ο διακομιστής δεν επιτρέπει τη μεταφόρτωση αυτού του μεγέθους. Παρακαλώ δοκιμάστε ένα μικρότερο μέγεθος αρχείου.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Ο διακομιστής δεν επιτρέπει τη μεταφόρτωση αυτού του μεγέθους. Παρακαλώ δοκιμάστε ένα μικρότερο μέγεθος αρχείου.', // Drawing & Images 'image_upload_error' => 'Παρουσιάστηκε σφάλμα κατά το ανέβασμα της εικόνας.', 'image_upload_type_error' => 'Ο τύπος εικόνας που μεταφορτώθηκε δεν είναι έγκυρος', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Δεν ήταν δυνατή η φόρτωση δεδομένων σχεδίασης. Το αρχείο σχεδίασης ενδέχεται να μην υπάρχει πλέον ή ενδέχεται να μην έχετε άδεια πρόσβασης σε αυτά.', // Attachments diff --git a/lang/el/preferences.php b/lang/el/preferences.php index 2ead9f17b59..a06aff54718 100644 --- a/lang/el/preferences.php +++ b/lang/el/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Συντομεύσεις', - 'shortcuts_interface' => 'Συντομεύσεις Πληκτρολογίου Διεπαφής', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Εδώ μπορείτε να ενεργοποιήσετε ή να απενεργοποιήσετε τις συντομεύσεις του συστήματος πληκτρολογίου, που χρησιμοποιούνται για την πλοήγηση και τις ενέργειες.', 'shortcuts_customize_desc' => 'Μπορείτε να προσαρμόσετε κάθε μία από τις παρακάτω συντομεύσεις. Απλά πατήστε το επιθυμητό συνδυασμό πλήκτρων μετά την επιλογή της εισόδου για μια συντόμευση.', 'shortcuts_toggle_label' => 'Ενεργοποίηση συντομεύσεων πληκτρολογίου', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/el/settings.php b/lang/el/settings.php index 24913e22289..f9c199fc3ff 100644 --- a/lang/el/settings.php +++ b/lang/el/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Μπορείτε να επιλέξετε να στείλετε σε αυτόν τον χρήστη ένα email πρόσκλησης που του επιτρέπει να ορίσει τον δικό του κωδικό πρόσβασης. Σε διαφορετική περίπτωση μπορείτε να ορίσετε τον κωδικό πρόσβασής του εσείς.', 'users_send_invite_option' => 'Αποστολή email πρόσκλησης σε χρήστη', 'users_external_auth_id' => 'Εξωτερικός έλεγχος ταυτότητας', - 'users_external_auth_id_desc' => 'Αυτό είναι το αναγνωριστικό που χρησιμοποιείται για την αντιστοίχιση αυτού του χρήστη κατά την επικοινωνία με το εξωτερικό σύστημα ελέγχου ταυτότητας.', - 'users_password_warning' => 'Συμπληρώστε τα παρακάτω μόνο αν θέλετε να αλλάξετε τον κωδικό πρόσβασής σας.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Αυτός ο χρήστης αντιπροσωπεύει οποιονδήποτε επισκέπτη που επισκέπτεται τη Βιβλιοθήκη σας. Δεν μπορεί να χρησιμοποιηθεί για τη σύνδεση αλλά εκχωρείται αυτόματα.', 'users_delete' => 'Διαγραφή Χρήστη', 'users_delete_named' => 'Διαγραφή χρήστη :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Προτιμώμενη γλώσσα', 'users_preferred_language_desc' => 'Αυτή η επιλογή θα αλλάξει τη γλώσσα που χρησιμοποιείται για τη διεπαφή χρήστη της εφαρμογής. Αυτό δεν θα επηρεάσει οποιοδήποτε περιεχόμενο που δημιουργήθηκε από χρήστες.', 'users_social_accounts' => 'Λογαριασμοί Κοινωνικής δικτύωσης ', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Εδώ μπορείτε να συνδέσετε τους άλλους λογαριασμούς σας για ταχύτερη και ευκολότερη σύνδεση. Η αποσύνδεση ενός λογαριασμού εδώ δεν ανακαλεί προηγουμένως εξουσιοδοτημένη πρόσβαση. Ανάκληση πρόσβασης από τις ρυθμίσεις προφίλ σας στον συνδεδεμένο κοινωνικό λογαριασμό.', 'users_social_connect' => 'Σύνδεση λογαριασμού', 'users_social_disconnect' => 'Αποσύνδεση λογαριασμού', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialΛογαριασμός λογαριασμού συνδέθηκε με επιτυχία στο προφίλ σας.', 'users_social_disconnected' => ':socialΛογαριασμός αποσυνδέθηκε επιτυχώς από το προφίλ σας.', 'users_api_tokens' => 'API Tokens', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Δεν έχουν δημιουργηθεί διακριτικά API για αυτόν το χρήστη', 'users_api_tokens_create' => 'Δημιουργία διακριτικού Api Token', 'users_api_tokens_expires' => 'Λήγει', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/en/common.php b/lang/en/common.php index 47b74d5b6eb..27037babec0 100644 --- a/lang/en/common.php +++ b/lang/en/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Clear Filter', 'download' => 'Download', 'open_in_tab' => 'Open in Tab', + 'open' => 'Open', // Sort Options 'sort_options' => 'Sort Options', diff --git a/lang/en/components.php b/lang/en/components.php index 8a105096b4f..c33b1d0b791 100644 --- a/lang/en/components.php +++ b/lang/en/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Image successfully deleted', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Edit Code', diff --git a/lang/en/entities.php b/lang/en/entities.php index 4468cd68f90..cfb5aae1a78 100644 --- a/lang/en/entities.php +++ b/lang/en/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Page Template', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Page Tags', 'chapter_tags' => 'Chapter Tags', 'book_tags' => 'Book Tags', diff --git a/lang/en/errors.php b/lang/en/errors.php index 4cde4cea36f..8813cf90a2d 100644 --- a/lang/en/errors.php +++ b/lang/en/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Cannot get image from :url', 'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.', 'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.', // Drawing & Images 'image_upload_error' => 'An error occurred uploading the image', 'image_upload_type_error' => 'The image type being uploaded is invalid', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/en/preferences.php b/lang/en/preferences.php index 118e8ba820f..2b88f9671ff 100644 --- a/lang/en/preferences.php +++ b/lang/en/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Shortcuts', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/en/settings.php b/lang/en/settings.php index 8821c77f0d1..c5ca662c37d 100644 --- a/lang/en/settings.php +++ b/lang/en/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.', 'users_send_invite_option' => 'Send user invite email', 'users_external_auth_id' => 'External Authentication ID', - 'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.', - 'users_password_warning' => 'Only fill the below if you would like to change your password.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.', 'users_delete' => 'Delete User', 'users_delete_named' => 'Delete user :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Preferred Language', 'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.', 'users_social_accounts' => 'Social Accounts', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not revoke previously authorized access. Revoke access from your profile settings on the connected social account.', 'users_social_connect' => 'Connect Account', 'users_social_disconnect' => 'Disconnect Account', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount account was successfully attached to your profile.', 'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.', 'users_api_tokens' => 'API Tokens', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'No API tokens have been created for this user', 'users_api_tokens_create' => 'Create Token', 'users_api_tokens_expires' => 'Expires', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/es/common.php b/lang/es/common.php index fac8bf259aa..6295c598713 100644 --- a/lang/es/common.php +++ b/lang/es/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Limpiar filtro', 'download' => 'Descargar', 'open_in_tab' => 'Abrir en una nueva pestaña', + 'open' => 'Abrir', // Sort Options 'sort_options' => 'Opciones de ordenación', diff --git a/lang/es/components.php b/lang/es/components.php index 2874092cfbd..932976e26d5 100644 --- a/lang/es/components.php +++ b/lang/es/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Imagen borrada exitosamente', 'image_replace' => 'Sustituir imagen', 'image_replace_success' => 'Imagen actualizada correctamente', + 'image_rebuild_thumbs' => 'Regenerar distintos tamaños', + 'image_rebuild_thumbs_success' => '¡Imágenes de distinto tamaño regeneradas correctamente!', // Code Editor 'code_editor' => 'Editar Código', diff --git a/lang/es/entities.php b/lang/es/entities.php index c02ce064da7..ff2b8b8d501 100644 --- a/lang/es/entities.php +++ b/lang/es/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Página es plantilla', // Editor Sidebar + 'toggle_sidebar' => 'Mostrar/ocultar barra lateral', 'page_tags' => 'Etiquetas de Página', 'chapter_tags' => 'Etiquetas de Capítulo', 'book_tags' => 'Etiquetas de Libro', diff --git a/lang/es/errors.php b/lang/es/errors.php index 74fdd0e9dc9..f32aa1cec3d 100644 --- a/lang/es/errors.php +++ b/lang/es/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'No se puede obtener la imagen desde :url', 'cannot_create_thumbs' => 'El servidor no puede crear la miniatura de la imagen. Compruebe que tiene la extensión PHP GD instalada.', 'server_upload_limit' => 'El servidor no permite la subida de ficheros de este tamaño. Intente subir un fichero de menor tamaño.', + 'server_post_limit' => 'El servidor no puede recibir la cantidad de datos proporcionados. Inténtelo de nuevo con menos datos o un archivo más pequeño.', 'uploaded' => 'El servidor no permite la subida de ficheros de este tamaño. Intente subir un fichero de menor tamaño.', // Drawing & Images 'image_upload_error' => 'Ha ocurrido un error al subir la imagen', 'image_upload_type_error' => 'El tipo de imagen que se quiere subir no es válido', 'image_upload_replace_type' => 'Las imágenes para sustituir deben ser del mismo tipo', + 'image_upload_memory_limit' => 'No se pudo gestionar la subida de imágenes y/o crear miniaturas debido a los límites de recursos del sistema.', + 'image_thumbnail_memory_limit' => 'Error al crear imágenes de distintos tamaños debido a los límites de los recursos del sistema.', + 'image_gallery_thumbnail_memory_limit' => 'Error al crear imágenes de previsualización de la galería debido a los límites de los recursos del sistema.', 'drawing_data_not_found' => 'No se han podido cargar los datos del dibujo. Puede que el archivo de dibujo ya no exista o que no tenga permiso para acceder a él.', // Attachments diff --git a/lang/es/preferences.php b/lang/es/preferences.php index d18be752827..3974683f7f7 100644 --- a/lang/es/preferences.php +++ b/lang/es/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferencias', + 'my_account' => 'Mi cuenta', 'shortcuts' => 'Accesos directos', - 'shortcuts_interface' => 'Accesos directos de la interfaz', + 'shortcuts_interface' => 'Preferencias de acceso directo en la interfaz', 'shortcuts_toggle_desc' => 'Aquí puede activar o desactivar los accesos directos de la interfaz, utilizados para la navegación y las acciones.', 'shortcuts_customize_desc' => 'Puede personalizar cada uno de los accesos directos a continuación. Simplemente pulse la combinación de teclas deseada después de seleccionar la entrada para un acceso directo.', 'shortcuts_toggle_label' => 'Accesos directos habilitados', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Elementos vistos e ignorados', 'notifications_watched_desc' => ' A continuación se muestran los elementos que tienen preferencias personalizadas de monitorización. Para actualizar sus preferencias, vea el artículo y las opciones se mostrarán en la barra lateral.', - 'profile_overview_desc' => ' Gestione los detalles de su perfil de usuario, incluyendo las opciones de idioma y autenticación preferidas.', + 'auth' => 'Acceso y seguridad', + 'auth_change_password' => 'Cambiar contraseña', + 'auth_change_password_desc' => 'Cambie la contraseña que utiliza para iniciar sesión en la aplicación. Debe tener al menos 8 caracteres.', + 'auth_change_password_success' => '¡La contraseña ha sido actualizada!', + + 'profile' => 'Detalles del perfil', + 'profile_desc' => 'Administre los detalles de su cuenta que le representa a otros usuarios, además de los detalles que se utilizan para la comunicación y la personalización del sistema.', + 'profile_view_public' => 'Ver perfil público', + 'profile_name_desc' => 'Configure el nombre que será visible para otros usuarios del sistema a través de la actividad que realiza, y el contenido que posee.', + 'profile_email_desc' => 'Este correo electrónico se utilizará para las notificaciones y, dependiendo de la autenticación activa del sistema, el acceso del sistema.', + 'profile_email_no_permission' => 'Lamentablemente no tiene permiso para cambiar su dirección de correo electrónico. Si desea cambiar esto, necesitará pedir a un administrador que lo cambie por usted.', + 'profile_avatar_desc' => 'Seleccione una imagen pública que verán los demás en el sistema. Idealmente esta imagen debe ser cuadrada y alrededor de 256px de anchura y altura.', + 'profile_admin_options' => 'Opciones de administrador', + 'profile_admin_options_desc' => 'Opciones adicionales de administrador, como por ejemplo administrar asignaciones de rol, se pueden encontrar para su cuenta de usuario en el área de "Ajustes > Usuarios" de la aplicación.', + + 'delete_account' => 'Eliminar cuenta', + 'delete_my_account' => 'Eliminar mi cuenta', + 'delete_my_account_desc' => 'Esto eliminará completamente su cuenta de usuario del sistema. No podrá recuperar esta cuenta o revertir esta acción. El contenido que ha creado, como páginas creadas e imágenes subidas, permanecerá.', + 'delete_my_account_warning' => '¿Está seguro de que desea eliminar su cuenta?', ]; diff --git a/lang/es/settings.php b/lang/es/settings.php index 1acebd7b3f2..221a96e1cea 100644 --- a/lang/es/settings.php +++ b/lang/es/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Puede enviar una invitación a este usuario por correo electrónico que le permitirá ajustar su propia contraseña, o puede usted ajustar su contraseña.', 'users_send_invite_option' => 'Enviar un correo electrónico de invitación', 'users_external_auth_id' => 'ID externo de autenticación', - 'users_external_auth_id_desc' => 'Esta es la ID usada para asociar este usuario con el sistema de autenticación externo.', - 'users_password_warning' => 'Solo debe rellenar este campo si desea cambiar su contraseña.', + 'users_external_auth_id_desc' => 'Cuando un sistema de autenticación externa está en uso (como SAML2, OIDC o LDAP) este es el ID que vincula este usuario de BookStack a la cuenta del sistema de autenticación. Puede ignorar este campo si utiliza la autenticación por defecto basada en correo electrónico.', + 'users_password_warning' => 'Solo debe rellenar este campo si desea cambiar la contraseña pora este usuario.', 'users_system_public' => 'Este usuario representa cualquier usuario invitado que visita la aplicación. No puede utilizarse para acceder pero es asignado automáticamente.', 'users_delete' => 'Borrar usuario', 'users_delete_named' => 'Borrar usuario :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Idioma preferido', 'users_preferred_language_desc' => 'Esta opción cambiará el idioma de la interfaz de usuario en la aplicación. No afectará al contenido creado por los usuarios.', 'users_social_accounts' => 'Cuentas sociales', + 'users_social_accounts_desc' => 'Ver el estado de las cuentas sociales conectadas para este usuario. Las cuentas sociales se pueden utilizar adicionalmente al sistema de autenticación primaria para el acceso al sistema.', 'users_social_accounts_info' => 'Aquí puede conectar sus otras cuentas para un acceso rápido y fácil a la aplicación. Desconectando una cuenta aquí no revoca accesos ya autorizados. Revoque el acceso desde los ajustes de perfil en la cuenta social conectada.', 'users_social_connect' => 'Conectar cuenta', 'users_social_disconnect' => 'Desconectar cuenta', + 'users_social_status_connected' => 'Conectado', + 'users_social_status_disconnected' => 'Desconectado', 'users_social_connected' => 'La cuenta :socialAccount ha sido añadida éxitosamente a su perfil.', 'users_social_disconnected' => 'La cuenta :socialAccount ha sido desconectada éxitosamente de su perfil.', 'users_api_tokens' => 'Tokens API', + 'users_api_tokens_desc' => 'Crear y administrar los tokens de acceso utilizados para autenticar con la REST API de BookStack. Los permisos para el API se administran a través del usuario al que pertenece el token.', 'users_api_tokens_none' => 'No se han creado tokens API para este usuario', 'users_api_tokens_create' => 'Crear token', 'users_api_tokens_expires' => 'Expira', @@ -302,8 +306,9 @@ 'ko' => 'Coreano', 'lt' => 'Lituano', 'lv' => 'Letón', - 'nl' => 'Holanda', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Holanda', 'pl' => 'Polaco', 'pt' => 'Portugués', 'pt_BR' => 'Portugués brasileño', @@ -314,6 +319,7 @@ 'sv' => 'Sueco', 'tr' => 'Turco', 'uk' => 'Ucraniano', + 'uz' => 'O‘zbekcha', 'vi' => 'Vietnamita', 'zh_CN' => 'Chino mandarín', 'zh_TW' => 'Chino tradicional', diff --git a/lang/es_AR/common.php b/lang/es_AR/common.php index aaec7c443d8..bc95a4fcfcb 100644 --- a/lang/es_AR/common.php +++ b/lang/es_AR/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Limpiar filtro', 'download' => 'Descargar', 'open_in_tab' => 'Abrir en una pestaña', + 'open' => 'Abrir', // Sort Options 'sort_options' => 'Opciones de Orden', diff --git a/lang/es_AR/components.php b/lang/es_AR/components.php index 39d42814741..d701c857a6a 100644 --- a/lang/es_AR/components.php +++ b/lang/es_AR/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Imagen borrada exitosamente', 'image_replace' => 'Reemplazar imagen', 'image_replace_success' => 'Imagen actualizada correctamente', + 'image_rebuild_thumbs' => 'Regenerar distintos tamaños', + 'image_rebuild_thumbs_success' => '¡Imágenes de distinto tamaño regeneradas correctamente!', // Code Editor 'code_editor' => 'Editar Código', diff --git a/lang/es_AR/entities.php b/lang/es_AR/entities.php index bf4194b2181..32c1b24b43b 100644 --- a/lang/es_AR/entities.php +++ b/lang/es_AR/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Plantilla de Página', // Editor Sidebar + 'toggle_sidebar' => 'Mostrar/ocultar barra lateral', 'page_tags' => 'Etiquetas de página', 'chapter_tags' => 'Etiquetas de capítulo', 'book_tags' => 'Etiquetas de libro', diff --git a/lang/es_AR/errors.php b/lang/es_AR/errors.php index e8365981dfd..d5e08220af7 100644 --- a/lang/es_AR/errors.php +++ b/lang/es_AR/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'No se puede obtener la imagen desde :url', 'cannot_create_thumbs' => 'El servidor no puede crear la imagen miniatura. Por favor chequee que tiene la extensión GD instalada.', 'server_upload_limit' => 'El servidor no permite la subida de ficheros de este tamañ. Por favor intente con un fichero de menor tamañ.', + 'server_post_limit' => 'El servidor no puede recibir la cantidad de datos proporcionados. Inténtelo de nuevo con menos datos o un archivo más pequeño.', 'uploaded' => 'El servidor no permite subir archivos de este tamaño. Por favor intente un tamaño menor.', // Drawing & Images 'image_upload_error' => 'Ha ocurrido un error al subir la imagen', 'image_upload_type_error' => 'El tipo de imagen subida es inválido.', 'image_upload_replace_type' => 'Los reemplazos de archivos de imágenes deben ser del mismo tipo', + 'image_upload_memory_limit' => 'No se pudo gestionar la subida de imágenes y/o crear miniaturas debido a los límites de recursos del sistema.', + 'image_thumbnail_memory_limit' => 'Error al crear imágenes de distintos tamaños debido a los límites de los recursos del sistema.', + 'image_gallery_thumbnail_memory_limit' => 'Error al crear imágenes de previsualización de la galería debido a los límites de los recursos del sistema.', 'drawing_data_not_found' => 'No se pudieron cargar los datos del dibujo. Es probable que el archivo de dibujo ya no exista o que no tenga permiso para acceder a él.', // Attachments diff --git a/lang/es_AR/preferences.php b/lang/es_AR/preferences.php index 4ad955d6da6..f037d0d92a6 100644 --- a/lang/es_AR/preferences.php +++ b/lang/es_AR/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferencias', + 'my_account' => 'Mi cuenta', 'shortcuts' => 'Atajos', - 'shortcuts_interface' => 'Atajos del Teclado para la Interfaz', + 'shortcuts_interface' => 'Preferencias de acceso directo en la interfaz', 'shortcuts_toggle_desc' => 'Aquí puede activar o desactivar los accesos rápidos de la interfaz, utilizados para la navegación y las acciones.', 'shortcuts_customize_desc' => 'Puede personalizar cada uno de los atajos a continuación. Simplemente pulse la combinación de teclas deseada después de seleccionar la entrada para un atajo.', 'shortcuts_toggle_label' => 'Atajos de teclado habilitados', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Elementos vistos e ignorados', 'notifications_watched_desc' => ' A continuación se muestran los elementos que tienen preferencias personalizadas de monitorización. Para actualizar sus preferencias, vea el artículo y las opciones se mostrarán en la barra lateral.', - 'profile_overview_desc' => ' Gestione los detalles de su perfil de usuario, incluyendo las opciones de idioma y autenticación preferidas.', + 'auth' => 'Acceso y seguridad', + 'auth_change_password' => 'Cambiar contraseña', + 'auth_change_password_desc' => 'Cambie la contraseña que utiliza para iniciar sesión en la aplicación. Debe tener al menos 8 caracteres.', + 'auth_change_password_success' => '¡La contraseña ha sido actualizada!', + + 'profile' => 'Detalles del perfil', + 'profile_desc' => 'Administre los detalles de su cuenta que le representa a otros usuarios, además de los detalles que se utilizan para la comunicación y la personalización del sistema.', + 'profile_view_public' => 'Ver perfil público', + 'profile_name_desc' => 'Configure el nombre que será visible para otros usuarios del sistema a través de la actividad que realiza, y el contenido que posee.', + 'profile_email_desc' => 'Este correo electrónico se utilizará para las notificaciones y, dependiendo de la autenticación activa del sistema, el acceso del sistema.', + 'profile_email_no_permission' => 'Lamentablemente no tiene permiso para cambiar su dirección de correo electrónico. Si desea cambiar esto, necesitará pedir a un administrador que lo cambie por usted.', + 'profile_avatar_desc' => 'Seleccione una imagen pública que verán los demás en el sistema. Idealmente esta imagen debe ser cuadrada y alrededor de 256px de anchura y altura.', + 'profile_admin_options' => 'Opciones de administrador', + 'profile_admin_options_desc' => 'Opciones adicionales de administrador, como por ejemplo administrar asignaciones de rol, se pueden encontrar para su cuenta de usuario en el área de "Ajustes > Usuarios" de la aplicación.', + + 'delete_account' => 'Eliminar cuenta', + 'delete_my_account' => 'Eliminar mi cuenta', + 'delete_my_account_desc' => 'Esto eliminará completamente su cuenta de usuario del sistema. No podrá recuperar esta cuenta o revertir esta acción. El contenido que ha creado, como páginas creadas e imágenes subidas, permanecerá.', + 'delete_my_account_warning' => '¿Está seguro de que desea eliminar su cuenta?', ]; diff --git a/lang/es_AR/settings.php b/lang/es_AR/settings.php index 67895ffeb2a..50d2e7c709a 100644 --- a/lang/es_AR/settings.php +++ b/lang/es_AR/settings.php @@ -194,8 +194,8 @@ 'users_send_invite_text' => 'Puede optar por enviar a este usuario un correo electrónico de invitación que les permita establecer su propia contraseña; de lo contrario, puede establecerla contraseña usted mismo.', 'users_send_invite_option' => 'Enviar correo electrónico de invitación al usuario.', 'users_external_auth_id' => 'ID externo de autenticación', - 'users_external_auth_id_desc' => 'Esta es la ID usada para asociar este usuario con el sistema de autenticación externo.', - 'users_password_warning' => 'Solo rellene a continuación si desea cambiar su password:', + 'users_external_auth_id_desc' => 'Cuando un sistema de autenticación externa está en uso (como SAML2, OIDC o LDAP) este es el ID que vincula este usuario de BookStack a la cuenta del sistema de autenticación. Puede ignorar este campo si utiliza la autenticación por defecto basada en correo electrónico.', + 'users_password_warning' => 'Solo debe rellenar este campo si desea cambiar la contraseña pora este usuario.', 'users_system_public' => 'Este usuario representa cualquier usuario invitado que visita la aplicación. No puede utilizarse para hacer login sino que es asignado automáticamente.', 'users_delete' => 'Borrar usuario', 'users_delete_named' => 'Borrar usuario :userName', @@ -211,12 +211,16 @@ 'users_preferred_language' => 'Lenguaje preferido', 'users_preferred_language_desc' => 'Esta opción cambiará el idioma de la interfaz de usuario en la aplicación. No afectará al contenido creado por los usuarios.', 'users_social_accounts' => 'Cuentas sociales', + 'users_social_accounts_desc' => 'Ver el estado de las cuentas sociales conectadas para este usuario. Las cuentas sociales se pueden utilizar adicionalmente al sistema de autenticación primaria para el acceso al sistema.', 'users_social_accounts_info' => 'Aquí puede conectar sus otras cuentas para un acceso rápido y más fácil. Desconectando una cuenta aquí no revoca accesos ya autorizados. Revoque el acceso desde los ajustes de perfil en la cuenta social conectada.', 'users_social_connect' => 'Conectar cuenta', 'users_social_disconnect' => 'Desconectar cuenta', + 'users_social_status_connected' => 'Conectado', + 'users_social_status_disconnected' => 'Desconectado', 'users_social_connected' => 'La cuenta :socialAccount ha sido exitosamente añadida a su perfil.', 'users_social_disconnected' => 'La cuenta :socialAccount ha sido desconectada exitosamente de su perfil.', 'users_api_tokens' => 'Tokens API', + 'users_api_tokens_desc' => 'Crear y administrar los tokens de acceso utilizados para autenticar con la REST API de BookStack. Los permisos para el API se administran a través del usuario al que pertenece el token.', 'users_api_tokens_none' => 'No se han creado tokens API para este usuario', 'users_api_tokens_create' => 'Crear token', 'users_api_tokens_expires' => 'Expira', @@ -303,8 +307,9 @@ 'ko' => 'Coreano', 'lt' => 'Lituano', 'lv' => 'Letón', - 'nl' => 'Holanda', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Holanda', 'pl' => 'Polaco', 'pt' => 'Portugués', 'pt_BR' => 'Portugués brasileño', @@ -315,6 +320,7 @@ 'sv' => 'Sueco', 'tr' => 'Turco', 'uk' => 'Ucraniano', + 'uz' => 'O‘zbekcha', 'vi' => 'Vietnamita', 'zh_CN' => 'Chino mandarín', 'zh_TW' => 'Chino tradicional', diff --git a/lang/et/common.php b/lang/et/common.php index 61fc259b274..465a1a40508 100644 --- a/lang/et/common.php +++ b/lang/et/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Tühjenda filter', 'download' => 'Laadi alla', 'open_in_tab' => 'Ava vahelehel', + 'open' => 'Ava', // Sort Options 'sort_options' => 'Sorteerimise valikud', diff --git a/lang/et/components.php b/lang/et/components.php index bf44c00f4a3..47adba2c53d 100644 --- a/lang/et/components.php +++ b/lang/et/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Pildifail kustutatud', 'image_replace' => 'Asenda pilt', 'image_replace_success' => 'Pildifail on uuendatud', + 'image_rebuild_thumbs' => 'Taastekita eelvaated', + 'image_rebuild_thumbs_success' => 'Pildi eelvaated edukalt taastekitatud!', // Code Editor 'code_editor' => 'Muuda koodi', diff --git a/lang/et/entities.php b/lang/et/entities.php index 2c42b0512c1..8e6a84e10b3 100644 --- a/lang/et/entities.php +++ b/lang/et/entities.php @@ -106,7 +106,7 @@ 'shelves_permissions_updated' => 'Riiuli õigused muudetud', 'shelves_permissions_active' => 'Riiuli õigused on aktiivsed', 'shelves_permissions_cascade_warning' => 'Riiuli õigused ei rakendu automaatselt sellel olevatele raamatutele, kuna raamat võib olla korraga mitmel riiulil. Alloleva valiku abil saab aga riiuli õigused kopeerida raamatutele.', - 'shelves_permissions_create' => 'Shelf create permissions are only used for copying permissions to child books using the action below. They do not control the ability to create books.', + 'shelves_permissions_create' => 'Riiuli lisamise õiguseid kasutatakse ainult alloleva tegevuse kaudu õiguste raamatutele kopeerimiseks. Need ei piira raamatute lisamist.', 'shelves_copy_permissions_to_books' => 'Kopeeri õigused raamatutele', 'shelves_copy_permissions' => 'Kopeeri õigused', 'shelves_copy_permissions_explain' => 'See rakendab riiuli praegused õigused kõigile sellel olevatele raamatutele. Enne jätkamist veendu, et riiuli õiguste muudatused oleks salvestatud.', @@ -240,7 +240,7 @@ 'pages_md_show_preview' => 'Näita eelvaadet', 'pages_md_sync_scroll' => 'Sünkrooni eelvaate kerimine', 'pages_drawing_unsaved' => 'Leiti salvestamata joonis', - 'pages_drawing_unsaved_confirm' => 'Unsaved drawing data was found from a previous failed drawing save attempt. Would you like to restore and continue editing this unsaved drawing?', + 'pages_drawing_unsaved_confirm' => 'Varasemast ebaõnnestunud salvestuskatsest leiti salvestamata joonis. Kas soovid salvestamata joonise taastada ja selle muutmist jätkata?', 'pages_not_in_chapter' => 'Leht ei kuulu peatüki alla', 'pages_move' => 'Liiguta leht', 'pages_copy' => 'Kopeeri leht', @@ -269,12 +269,12 @@ 'pages_revisions_none' => 'Sellel lehel ei ole redaktsioone', 'pages_copy_link' => 'Kopeeri link', 'pages_edit_content_link' => 'Hüppa redaktoris sektsioonini', - 'pages_pointer_enter_mode' => 'Enter section select mode', + 'pages_pointer_enter_mode' => 'Ava sektsiooni valiku režiim', 'pages_pointer_label' => 'Lehe sektsiooni valikud', - 'pages_pointer_permalink' => 'Page Section Permalink', - 'pages_pointer_include_tag' => 'Page Section Include Tag', - 'pages_pointer_toggle_link' => 'Permalink mode, Press to show include tag', - 'pages_pointer_toggle_include' => 'Include tag mode, Press to show permalink', + 'pages_pointer_permalink' => 'Lehe sektsiooni permalink', + 'pages_pointer_include_tag' => 'Lehe sektsiooni viitesilt', + 'pages_pointer_toggle_link' => 'Permalingi režiim, vajuta viitesildi kuvamiseks', + 'pages_pointer_toggle_include' => 'Viitesildi režiim, vajuta permalingi kuvamiseks', 'pages_permissions_active' => 'Lehe õigused on aktiivsed', 'pages_initial_revision' => 'Esimene redaktsioon', 'pages_references_update_revision' => 'Seesmiste linkide automaatne uuendamine', @@ -295,6 +295,7 @@ 'pages_is_template' => 'Lehe mall', // Editor Sidebar + 'toggle_sidebar' => 'Kuva/peida külgriba', 'page_tags' => 'Lehe sildid', 'chapter_tags' => 'Peatüki sildid', 'book_tags' => 'Raamatu sildid', @@ -374,7 +375,7 @@ 'comment_updated_success' => 'Kommentaar muudetud', 'comment_delete_confirm' => 'Kas oled kindel, et soovid selle kommentaari kustutada?', 'comment_in_reply_to' => 'Vastus kommentaarile :commentId', - 'comment_editor_explain' => 'Here are the comments that have been left on this page. Comments can be added & managed when viewing the saved page.', + 'comment_editor_explain' => 'Siin on lehele jäetud kommentaarid. Kommentaare saab lisada ja hallata salvestatud lehte vaadates.', // Revision 'revision_delete_confirm' => 'Kas oled kindel, et soovid selle redaktsiooni kustutada?', @@ -409,7 +410,7 @@ // Watch Options 'watch' => 'Jälgi', 'watch_title_default' => 'Vaikimisi eelistused', - 'watch_desc_default' => 'Revert watching to just your default notification preferences.', + 'watch_desc_default' => 'Lähtesta jälgimine vaikimisi eelistustele.', 'watch_title_ignore' => 'Ignoreeri', 'watch_desc_ignore' => 'Ignoreeri kõiki teavitusi, ka kasutaja tasemel määratud eelistusi.', 'watch_title_new' => 'Uued lehed', diff --git a/lang/et/errors.php b/lang/et/errors.php index fd68b12af83..3145a0b29bd 100644 --- a/lang/et/errors.php +++ b/lang/et/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Ei suutnud laadida pilti aadressilt :url', 'cannot_create_thumbs' => 'Server ei saa piltide eelvaateid tekitada. Veendu, et PHP GD laiendus on paigaldatud.', 'server_upload_limit' => 'Server ei luba nii suurte failide üleslaadimist. Proovi väiksema failiga.', + 'server_post_limit' => 'Server ei saa etteantud andmemahtu vastu võtta. Proovi uuesti väiksema failiga.', 'uploaded' => 'Server ei luba nii suurte failide üleslaadimist. Proovi väiksema failiga.', // Drawing & Images 'image_upload_error' => 'Pildi üleslaadimisel tekkis viga', 'image_upload_type_error' => 'Pildifaili tüüp ei ole korrektne', 'image_upload_replace_type' => 'Pildifaili asendused peavad olema sama tüüpi', + 'image_upload_memory_limit' => 'Pildi üleslaadimine ja/või eelvaadete tekitamine ebaõnnestus süsteemsete ressursipiirangute tõttu.', + 'image_thumbnail_memory_limit' => 'Pildi eelvaadete tekitamine ebaõnnestus süsteemsete ressursipiirangute tõttu.', + 'image_gallery_thumbnail_memory_limit' => 'Galerii eelvaadete tekitamine ebaõnnestus süsteemsete ressursipiirangute tõttu.', 'drawing_data_not_found' => 'Joonise andmeid ei õnnestunud laadida. Joonist ei pruugi enam eksisteerida, või sul puuduvad õigused selle vaatamiseks.', // Attachments diff --git a/lang/et/preferences.php b/lang/et/preferences.php index dbe80a0bee2..ee3b9e5ea41 100644 --- a/lang/et/preferences.php +++ b/lang/et/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Eelistused', + 'my_account' => 'Minu konto', 'shortcuts' => 'Kiirklahvid', - 'shortcuts_interface' => 'Kasutajaliidese kiirklahvid', + 'shortcuts_interface' => 'Kasutajaliidese eelistused', 'shortcuts_toggle_desc' => 'Siit saad sisse ja välja lülitada navigeerimiseks ja tegevusteks kasutatavad kiirklahvid.', 'shortcuts_customize_desc' => 'Allpool saad iga kiirklahvi kohandada. Pärast kiirklahvile vastava tekstivälja valimist vajuta lihtsalt soovitud klahvikombinatsiooni.', 'shortcuts_toggle_label' => 'Kiirklahvid sisse lülitatud', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Jälgitud ja ignoreeritud objektid', 'notifications_watched_desc' => ' Allpool on objektid, millele on määratud kohaldatud jälgimise eelistused. Eelistuste muutmiseks ava vastav objekt ning leia jälgimise valikud külgmenüüs.', - 'profile_overview_desc' => ' Halda oma kasutajaprofiili andmeid, kaasa arvatud keele eelistust ja autentimisvalikuid.', + 'auth' => 'Ligipääs ja turvalisus', + 'auth_change_password' => 'Muuda parool', + 'auth_change_password_desc' => 'Muuda parooli, millega rakendusse sisse logid. See peab olema vähemalt 8 tähemärki.', + 'auth_change_password_success' => 'Parool on muudetud!', + + 'profile' => 'Profiili detailid', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'Vaata avalikku profiili', + 'profile_name_desc' => 'Seadista oma avalik nimi, mis on nähtav teistele kasutajatele sinu tehtud tegevuste ja sulle kuuluva sisu kaudu.', + 'profile_email_desc' => 'Seda e-posti aadressi kasutatakse teavituste saatmiseks ning, sõltuvalt aktiivsest autentimismeetodist, süsteemile ligipääsemiseks.', + 'profile_email_no_permission' => 'Kahjuks ei ole sul luba oma e-posti aadressi muuta. Kui soovid seda muuta, pead administraatoriga ühendust võtma.', + 'profile_avatar_desc' => 'Vali pilt, mis sind süsteemis teistele kasutajatele esindab. Ideaalis peaks see pilt olema ruudukujuline ning 256px kõrge ja lai.', + 'profile_admin_options' => 'Administraatori valikud', + 'profile_admin_options_desc' => 'Täiendavad administraatori-taseme valikud, näiteks rollide haldamiseks, on rakenduse "Seaded > Kasutajad" all sinu kasutajakonto vaates.', + + 'delete_account' => 'Kustuta konto', + 'delete_my_account' => 'Kustuta minu konto', + 'delete_my_account_desc' => 'See kustutab su kasutajakonto süsteemist. Sa ei saa kontot taastada ega seda tegevust tagasi võtta. Sinu loodud sisu, näiteks lisatud lehed ja üleslaaditud pildid, jäävad alles.', + 'delete_my_account_warning' => 'Kas oled kindel, et soovid oma konto kustutada?', ]; diff --git a/lang/et/settings.php b/lang/et/settings.php index 930dab58000..b4a5ca17422 100644 --- a/lang/et/settings.php +++ b/lang/et/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Sa võid kasutajale saata e-postiga kutse, mis võimaldab neil ise parooli seada. Vastasel juhul määra parool ise.', 'users_send_invite_option' => 'Saada e-postiga kutse', 'users_external_auth_id' => 'Välise autentimise ID', - 'users_external_auth_id_desc' => 'Selle ID abil identifitseeritakse kasutajat välise autentimissüsteemiga suhtlemisel.', - 'users_password_warning' => 'Täida allolevad väljad ainult siis, kui soovid oma parooli muuta.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'See kasutaja tähistab kõiki külalisi, kes su rakendust vaatavad. Selle kontoga ei saa sisse logida, see määratakse automaatselt.', 'users_delete' => 'Kustuta kasutaja', 'users_delete_named' => 'Kustuta kasutaja :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Eelistatud keel', 'users_preferred_language_desc' => 'See valik muudab rakenduse kasutajaliidese keelt. Kasutajate loodud sisu see ei mõjuta.', 'users_social_accounts' => 'Sotsiaalmeedia kontod', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Siin saad seostada teised kontod, millega kiiremini ja lihtsamini sisse logida. Siit konto eemaldamine ei tühista varem lubatud ligipääsu. Ligipääsu saad tühistada ühendatud konto profiili seadetest.', 'users_social_connect' => 'Lisa konto', 'users_social_disconnect' => 'Eemalda konto', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount konto lisati su profiilile.', 'users_social_disconnected' => ':socialAccount konto eemaldati su profiililt.', 'users_api_tokens' => 'API tunnused', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Sellel kasutajal pole API tunnuseid', 'users_api_tokens_create' => 'Lisa tunnus', 'users_api_tokens_expires' => 'Aegub', @@ -302,8 +306,9 @@ 'ko' => '한국어 (korea keel)', 'lt' => 'Lietuvių Kalba (leedu keel)', 'lv' => 'Latviešu Valoda (läti keel)', - 'nl' => 'Nederlands (hollandi keel)', 'nb' => 'Norsk (Bokmål) (norra keel)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands (hollandi keel)', 'pl' => 'Polski (poola keel)', 'pt' => 'Português (portugali keel)', 'pt_BR' => 'Português do Brasil (Brasiilia portugali keel)', @@ -314,6 +319,7 @@ 'sv' => 'Rootsi', 'tr' => 'Türgi', 'uk' => 'Ukraina', + 'uz' => 'O‘zbekcha', 'vi' => 'Vietnami', 'zh_CN' => 'Hiina (lihtsustatud)', 'zh_TW' => 'Hiina (traditsiooniline)', diff --git a/lang/eu/common.php b/lang/eu/common.php index ca707702ec7..e2de6ae9f81 100644 --- a/lang/eu/common.php +++ b/lang/eu/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Iragazkia garbitu', 'download' => 'Download', 'open_in_tab' => 'Open in Tab', + 'open' => 'Open', // Sort Options 'sort_options' => 'Ordenatzeko aukerak', diff --git a/lang/eu/components.php b/lang/eu/components.php index b1f66add175..d853eb483e1 100644 --- a/lang/eu/components.php +++ b/lang/eu/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Irudia ondo ezabatu da', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Kodea editatu', diff --git a/lang/eu/entities.php b/lang/eu/entities.php index dfae52af183..bc31d372e2a 100644 --- a/lang/eu/entities.php +++ b/lang/eu/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Orrialde txantiloia', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Orrialde etiketak', 'chapter_tags' => 'Kapitulu etiketak', 'book_tags' => 'Liburu etiketak', diff --git a/lang/eu/errors.php b/lang/eu/errors.php index d71cf742cc1..1028d380294 100644 --- a/lang/eu/errors.php +++ b/lang/eu/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Cannot get image from :url', 'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.', 'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.', // Drawing & Images 'image_upload_error' => 'Errorea gertatu da irudia igotzerakoan', 'image_upload_type_error' => 'The image type being uploaded is invalid', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/eu/preferences.php b/lang/eu/preferences.php index 3d37f6e3aa9..3e83a9784d6 100644 --- a/lang/eu/preferences.php +++ b/lang/eu/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Lastertekla', - 'shortcuts_interface' => 'Teklatuko lasterbideak ikusi', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Hemen, nabigaziorako eta ekintzetarako erabiltzen diren teklatu-sistemako lasterbideak gaitu edo desgaitu daitezke.', 'shortcuts_customize_desc' => 'Beheko lasterbide bakoitza pertsonalizatu dezakezu. Sakatu nahi duzun tekla konbinazioa lasterbide baterako sarrera aukeratu ondoren.', 'shortcuts_toggle_label' => 'Teklatu-lasterbideak aktibatuta', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/eu/settings.php b/lang/eu/settings.php index 93137326a0f..a9aa41dba8e 100644 --- a/lang/eu/settings.php +++ b/lang/eu/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.', 'users_send_invite_option' => 'Erabiltzailea gonbidatzeko emaila bidali', 'users_external_auth_id' => 'Kanpo autentikazioa IDa', - 'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.', - 'users_password_warning' => 'Only fill the below if you would like to change your password.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.', 'users_delete' => 'Ezabatu erabiltzailea', 'users_delete_named' => ':userName erabiltzailea ezabatu', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Hobetsitako hizkuntza', 'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.', 'users_social_accounts' => 'Social Accounts', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not revoke previously authorized access. Revoke access from your profile settings on the connected social account.', 'users_social_connect' => 'Kontua Konektatu', 'users_social_disconnect' => 'Deskonektatu kontua', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount account was successfully attached to your profile.', 'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.', 'users_api_tokens' => 'API tokenak', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'No API tokens have been created for this user', 'users_api_tokens_create' => 'Sortu Tokena', 'users_api_tokens_expires' => 'Iraungita', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/fa/activities.php b/lang/fa/activities.php index ea4e18142b4..7b536bf2dc5 100644 --- a/lang/fa/activities.php +++ b/lang/fa/activities.php @@ -50,8 +50,8 @@ 'bookshelf_delete_notification' => 'قفسه کتاب با موفقیت حذف شد', // Revisions - 'revision_restore' => 'restored revision', - 'revision_delete' => 'deleted revision', + 'revision_restore' => 'نسخه بازیابی شده', + 'revision_delete' => 'نسخه حذف شده', 'revision_delete_notification' => 'نسخه مورد نظر با موفقیت حذف شد', // Favourites @@ -59,22 +59,22 @@ 'favourite_remove_notification' => '":name" از علاقه مندی های شما حذف شد', // Watching - 'watch_update_level_notification' => 'Watch preferences successfully updated', + 'watch_update_level_notification' => 'تنظیمات نظارت با موفقیت بروز شد', // Auth - 'auth_login' => 'logged in', - 'auth_register' => 'registered as new user', - 'auth_password_reset_request' => 'requested user password reset', - 'auth_password_reset_update' => 'reset user password', - 'mfa_setup_method' => 'configured MFA method', + 'auth_login' => 'وارد شده', + 'auth_register' => 'ثبت نام شده بعنوان کاربر جدید', + 'auth_password_reset_request' => 'بازیابی درخواست شده رمز عبور کاربر', + 'auth_password_reset_update' => 'بازیابی رمز عبور کاربر', + 'mfa_setup_method' => 'متد MFA پیکربندی شده', 'mfa_setup_method_notification' => 'روش چند فاکتوری با موفقیت پیکربندی شد', - 'mfa_remove_method' => 'removed MFA method', + 'mfa_remove_method' => 'روش MFA حذف شده', 'mfa_remove_method_notification' => 'روش چند فاکتوری با موفقیت حذف شد', // Settings - 'settings_update' => 'updated settings', + 'settings_update' => 'تنظیمات بروز شده', 'settings_update_notification' => 'تنظیمات با موفقیت به روز شد', - 'maintenance_action_run' => 'ran maintenance action', + 'maintenance_action_run' => 'فعالیت نگهداری اجرا شده', // Webhooks 'webhook_create' => 'ایجاد وب هوک', @@ -85,39 +85,39 @@ 'webhook_delete_notification' => 'وب هوک با موفقیت حذف شد', // Users - 'user_create' => 'created user', + 'user_create' => 'کاربر ایجاد شده', 'user_create_notification' => 'کاربر با موفقیت به ایجاد شد', - 'user_update' => 'updated user', + 'user_update' => 'کاربر بروز شده', 'user_update_notification' => 'کاربر با موفقیت به روز شد', - 'user_delete' => 'deleted user', + 'user_delete' => 'کاربر حذف شده', 'user_delete_notification' => 'کاربر با موفقیت حذف شد', // API Tokens - 'api_token_create' => 'created api token', - 'api_token_create_notification' => 'API token successfully created', - 'api_token_update' => 'updated api token', - 'api_token_update_notification' => 'API token successfully updated', - 'api_token_delete' => 'deleted api token', - 'api_token_delete_notification' => 'API token successfully deleted', + 'api_token_create' => 'توکن api ایجاد شده', + 'api_token_create_notification' => 'توکن api با موفقیت ایجاد شد', + 'api_token_update' => 'توکن api بروز شده', + 'api_token_update_notification' => 'توکن API با موفقیت بروزرسانی شد', + 'api_token_delete' => 'توکن api حذف شده', + 'api_token_delete_notification' => 'توکن API با موفقیت حذف شد', // Roles - 'role_create' => 'created role', + 'role_create' => 'نقش ایجاد شده', 'role_create_notification' => 'نقش با موفقیت ایجاد شد', - 'role_update' => 'updated role', + 'role_update' => 'نقش بروز شده', 'role_update_notification' => 'نقش با موفقیت به روز شد', - 'role_delete' => 'deleted role', + 'role_delete' => 'نقش حذف شده', 'role_delete_notification' => 'نقش با موفقیت حذف شد', // Recycle Bin - 'recycle_bin_empty' => 'emptied recycle bin', + 'recycle_bin_empty' => 'سطل زباله خالی', 'recycle_bin_restore' => 'از سطل بازیافت، بازآوری شده است', 'recycle_bin_destroy' => 'از سطل بازیافت حذف شده است', // Comments 'commented_on' => 'ثبت دیدگاه', - 'comment_create' => 'added comment', - 'comment_update' => 'updated comment', - 'comment_delete' => 'deleted comment', + 'comment_create' => 'نظر اضافه شده', + 'comment_update' => 'نظر به روز شده', + 'comment_delete' => 'نظر حذف شده', // Other 'permissions_update' => 'به روزرسانی مجوزها', diff --git a/lang/fa/common.php b/lang/fa/common.php index f609c528f95..1f1fa688393 100644 --- a/lang/fa/common.php +++ b/lang/fa/common.php @@ -42,7 +42,7 @@ 'remove' => 'حذف', 'add' => 'ﺍﻓﺰﻭﺩﻥ', 'configure' => 'پیکربندی کنید', - 'manage' => 'Manage', + 'manage' => 'مدیریت تنظیمات', 'fullscreen' => 'تمام صفحه', 'favourite' => 'علاقه‌مندی', 'unfavourite' => 'حذف از علاقه‌مندی', @@ -52,6 +52,7 @@ 'filter_clear' => 'پاک کردن فیلتر', 'download' => 'دانلود', 'open_in_tab' => 'باز کردن در تب جدید', + 'open' => 'بازکردن', // Sort Options 'sort_options' => 'گزینه‌های مرتب سازی', @@ -70,7 +71,7 @@ 'back_to_top' => 'بازگشت به بالا', 'skip_to_main_content' => 'رفتن به محتوای اصلی', 'toggle_details' => 'معکوس کردن اطلاعات', - 'toggle_thumbnails' => 'معکوس ریز عکس ها', + 'toggle_thumbnails' => 'معکوس کردن ریزعکس‌ها', 'details' => 'جزییات', 'grid_view' => 'نمایش شبکه‌ای', 'list_view' => 'نمای لیست', diff --git a/lang/fa/components.php b/lang/fa/components.php index d4e77bebf8b..90681d3b66e 100644 --- a/lang/fa/components.php +++ b/lang/fa/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'تصویر با موفقیت حذف شد', 'image_replace' => 'جایگزینی تصویر', 'image_replace_success' => 'تصویر با موفقیت به روز شد', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'ویرایش کد', diff --git a/lang/fa/entities.php b/lang/fa/entities.php index d945b8370ef..900a91b9216 100644 --- a/lang/fa/entities.php +++ b/lang/fa/entities.php @@ -14,7 +14,7 @@ 'recently_created_shelves' => 'قفسه کتاب های اخیرا ایجاد شده', 'recently_update' => 'اخیرا به روز شده', 'recently_viewed' => 'اخیرا مشاهده شده', - 'recent_activity' => 'فعالیت های اخیر', + 'recent_activity' => 'فعالیت‌های اخیر', 'create_now' => 'اکنون یکی ایجاد کنید', 'revisions' => 'بازبینی‌ها', 'meta_revision' => 'بازبینی #:revisionCount', @@ -71,7 +71,7 @@ 'search_created_by_me' => 'ایجاد شده توسط من', 'search_updated_by_me' => 'به روز شده توسط من', 'search_owned_by_me' => 'متعلق به من است', - 'search_date_options' => 'گزینه های تاریخ', + 'search_date_options' => 'تنظیمات تاریخ', 'search_updated_before' => 'قبلا به روز شده', 'search_updated_after' => 'پس از به روز رسانی', 'search_created_before' => 'ایجاد شده قبل از', @@ -91,7 +91,7 @@ 'shelves_popular_empty' => 'محبوب ترین قفسه ها در اینجا ظاهر می شوند.', 'shelves_new_empty' => 'جدیدترین قفسه های ایجاد شده در اینجا ظاهر می شوند.', 'shelves_save' => 'ذخیره قفسه', - 'shelves_books' => 'کتاب های موجود در این قفسه', + 'shelves_books' => 'کتاب‌های موجود در این قفسه', 'shelves_add_books' => 'کتاب ها را به این قفسه اضافه کنید', 'shelves_drag_books' => 'کتاب‌ها را به اینجا بکشید تا به این قفسه اضافه شوند', 'shelves_empty_contents' => 'این قفسه هیچ کتابی به آن اختصاص داده نشده است', @@ -107,7 +107,7 @@ 'shelves_permissions_active' => 'مجوزهای قفسه فعال است', 'shelves_permissions_cascade_warning' => 'مجوزهای موجود در قفسه‌ها به طور خودکار به کتاب‌های حاوی اطلاق نمی‌شوند. دلیل آن این است که یک کتاب می تواند در چندین قفسه وجود داشته باشد. با این حال، مجوزها را می‌توان با استفاده از گزینه پایین همین صفحه در کتاب‌های فرزند کپی کرد.', 'shelves_permissions_create' => 'مجوزهای «ایجاد» قفسه فقط برای کپی کردن مجوزها در کتاب‌های کودک با استفاده از عملکرد زیر استفاده می‌شوند. آنها توانایی ایجاد کتاب را کنترل نمی‌کنند.', - 'shelves_copy_permissions_to_books' => 'کپی مجوزها در کتابها', + 'shelves_copy_permissions_to_books' => 'کپی مجوزها در کتاب‌ها', 'shelves_copy_permissions' => 'کپی مجوزها', 'shelves_copy_permissions_explain' => 'با این کار تنظیمات مجوز فعلی این قفسه برای همه کتاب‌های موجود در آن اعمال می‌شود. قبل از فعال کردن، مطمئن شوید که هر گونه تغییر در مجوزهای این قفسه، ذخیره شده است.', 'shelves_copy_permission_success' => 'مجوزهای قفسه در :count کتاب کپی شد', @@ -149,7 +149,7 @@ 'books_sort_updated' => 'مرتب سازی بر اساس تاریخ به روز رسانی', 'books_sort_chapters_first' => 'فصل اول', 'books_sort_chapters_last' => 'فصل آخر', - 'books_sort_show_other' => 'نمایش کتاب های دیگر', + 'books_sort_show_other' => 'نمایش کتاب‌های دیگر', 'books_sort_save' => 'ذخیره سفارش جدید', 'books_sort_show_other_desc' => 'کتاب‌های دیگری را در اینجا اضافه کنید تا آنها را در عملیات مرتب‌سازی بگنجانید و به آسانی کتاب‌ها را مجددا سازماندهی کنید.', 'books_sort_move_up' => 'انتقال به بالا', @@ -169,7 +169,7 @@ 'chapter' => 'فصل', 'chapters' => 'فصل', 'x_chapters' => ':count فصل|:count فصل', - 'chapters_popular' => 'فصل های محبوب', + 'chapters_popular' => 'فصل‌های محبوب', 'chapters_new' => 'فصل جدید', 'chapters_create' => 'ایجاد فصل جدید', 'chapters_delete' => 'حذف فصل', @@ -207,14 +207,14 @@ 'pages_delete_confirm' => 'آیا مطمئن هستید که می خواهید این صفحه را حذف کنید؟', 'pages_delete_draft_confirm' => 'آیا مطمئن هستید که می خواهید این صفحه پیش نویس را حذف کنید؟', 'pages_editing_named' => 'ویرایش صفحه :pageName', - 'pages_edit_draft_options' => 'گزینه های پیش نویس', + 'pages_edit_draft_options' => 'تنظیمات پیش‌نویس', 'pages_edit_save_draft' => 'ذخیره پیش نویس', 'pages_edit_draft' => 'ویرایش پیش نویس صفحه', 'pages_editing_draft' => 'در حال ویرایش پیش نویس', 'pages_editing_page' => 'در حال ویرایش صفحه', 'pages_edit_draft_save_at' => 'پیش نویس ذخیره شده در', 'pages_edit_delete_draft' => 'حذف پیش نویس', - 'pages_edit_delete_draft_confirm' => 'Are you sure you want to delete your draft page changes? All of your changes, since the last full save, will be lost and the editor will be updated with the latest page non-draft save state.', + 'pages_edit_delete_draft_confirm' => 'آیا از حذف تغییرات صفحه پیش‌نویس اطمینان دارید؟ تمامی تغییرات‌تان، از آخرین ذخیره‌سازی کامل، از بین خواهد رفت و ویرایش‌گر به آخرین وضعیت پیش‌نویس ذخیره شده بازگردانی خواهد شد.', 'pages_edit_discard_draft' => 'دور انداختن پیش نویس', 'pages_edit_switch_to_markdown' => 'به ویرایشگر Markdown بروید', 'pages_edit_switch_to_markdown_clean' => '(مطالب تمیز)', @@ -239,8 +239,8 @@ 'pages_md_insert_drawing' => 'درج طرح', 'pages_md_show_preview' => 'دیدن پیش نمایش', 'pages_md_sync_scroll' => 'هماهنگ سازی اسکرول پیش نمایش', - 'pages_drawing_unsaved' => 'Unsaved Drawing Found', - 'pages_drawing_unsaved_confirm' => 'Unsaved drawing data was found from a previous failed drawing save attempt. Would you like to restore and continue editing this unsaved drawing?', + 'pages_drawing_unsaved' => 'نقاشی ذخیره نشده پیدا شد', + 'pages_drawing_unsaved_confirm' => 'نسخه‌ای ذخیره‌نشده از طراحی‌های قبلی پیدا شد. آیا می‌خواهید این طراحی ذخیره‌نشده را بازیابی کنید و به ویرایش آن ادامه دهید؟', 'pages_not_in_chapter' => 'صفحه در یک فصل نیست', 'pages_move' => 'انتقال صفحه', 'pages_copy' => 'کپی صفحه', @@ -268,10 +268,10 @@ 'pages_revisions_restore' => 'بازگرداندن', 'pages_revisions_none' => 'این صفحه هیچ ویرایشی ندارد', 'pages_copy_link' => 'کپی لینک', - 'pages_edit_content_link' => 'Jump to section in editor', - 'pages_pointer_enter_mode' => 'Enter section select mode', - 'pages_pointer_label' => 'Page Section Options', - 'pages_pointer_permalink' => 'Page Section Permalink', + 'pages_edit_content_link' => 'پرش به قسمت در ویرایش‌گر', + 'pages_pointer_enter_mode' => 'ورود به حالت انتخاب قسمت', + 'pages_pointer_label' => 'گزینه‌های قسمت صفحه', + 'pages_pointer_permalink' => 'لینک ثابت قسمت صفحه', 'pages_pointer_include_tag' => 'Page Section Include Tag', 'pages_pointer_toggle_link' => 'Permalink mode, Press to show include tag', 'pages_pointer_toggle_include' => 'Include tag mode, Press to show permalink', @@ -289,18 +289,19 @@ 'time_b' => 'در آخرین دقیقه :minCount', 'message' => ':start :time. مراقب باشید به روز رسانی های یکدیگر را بازنویسی نکنید!', ], - 'pages_draft_discarded' => 'Draft discarded! The editor has been updated with the current page content', - 'pages_draft_deleted' => 'Draft deleted! The editor has been updated with the current page content', + 'pages_draft_discarded' => 'پیش نویس حذف شد، ویرایشگر با محتوای صفحه فعلی به روز شده است', + 'pages_draft_deleted' => 'پیش نویس حذف شد، ویرایشگر با محتوای صفحه فعلی به روز شده است', 'pages_specific' => 'صفحه خاص', 'pages_is_template' => 'الگوی صفحه', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'برچسب‌های صفحه', - 'chapter_tags' => 'برچسب های فصل', + 'chapter_tags' => 'برچسب‌های فصل', 'book_tags' => 'برچسب های کتاب', - 'shelf_tags' => 'برچسب های قفسه', + 'shelf_tags' => 'برچسب‌های قفسه', 'tag' => 'برچسب', - 'tags' => 'برچسب ها', + 'tags' => 'برچسب‌ها', 'tags_index_desc' => 'تگ ها را میتوان به محتوای داخل سیستم اعمال کرد تا فرم هماهنگی از طبقه‌بندی ایجاد شود. تگ ها می توانند شامل یک کلید و یک مقدار باشند، که مقدار آن انتخابی یا قابل خذف است. بعد از ایجاد تگ، محتوا را می توان توسط کلید یا مقدار هر تگ جستجو نمود.', 'tag_name' => 'نام برچسب', 'tag_value' => 'مقدار برچسب (اختیاری)', @@ -368,7 +369,7 @@ 'comment_new' => 'نظر جدید', 'comment_created' => ':createDiff نظر داد', 'comment_updated' => 'به روز رسانی :updateDiff توسط :username', - 'comment_updated_indicator' => 'Updated', + 'comment_updated_indicator' => 'به روز شده', 'comment_deleted_success' => 'نظر حذف شد', 'comment_created_success' => 'نظر اضافه شد', 'comment_updated_success' => 'نظر به روز شد', @@ -407,26 +408,26 @@ 'references_to_desc' => 'در زیر تمام صفحات شناخته شده در سیستم که به این مورد پیوند دارند، نشان داده شده است.', // Watch Options - 'watch' => 'Watch', - 'watch_title_default' => 'Default Preferences', - 'watch_desc_default' => 'Revert watching to just your default notification preferences.', - 'watch_title_ignore' => 'Ignore', - 'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.', - 'watch_title_new' => 'New Pages', - 'watch_desc_new' => 'Notify when any new page is created within this item.', - 'watch_title_updates' => 'All Page Updates', - 'watch_desc_updates' => 'Notify upon all new pages and page changes.', - 'watch_desc_updates_page' => 'Notify upon all page changes.', - 'watch_title_comments' => 'All Page Updates & Comments', - 'watch_desc_comments' => 'Notify upon all new pages, page changes and new comments.', - 'watch_desc_comments_page' => 'Notify upon page changes and new comments.', - 'watch_change_default' => 'Change default notification preferences', - 'watch_detail_ignore' => 'Ignoring notifications', - 'watch_detail_new' => 'Watching for new pages', - 'watch_detail_updates' => 'Watching new pages and updates', - 'watch_detail_comments' => 'Watching new pages, updates & comments', - 'watch_detail_parent_book' => 'Watching via parent book', - 'watch_detail_parent_book_ignore' => 'Ignoring via parent book', - 'watch_detail_parent_chapter' => 'Watching via parent chapter', - 'watch_detail_parent_chapter_ignore' => 'Ignoring via parent chapter', + 'watch' => 'نظارت', + 'watch_title_default' => 'تنظیمات پیش‌فرض', + 'watch_desc_default' => 'نظارت را تنها به تنظیمات پیش فرض اعلان برگردانید.', + 'watch_title_ignore' => 'نادیده‌گرفتن', + 'watch_desc_ignore' => 'همه اعلان‌ها، از جمله اعلان‌های مربوط به تنظیمات سطح کاربر را نادیده بگیرید.', + 'watch_title_new' => 'صفحات جدید', + 'watch_desc_new' => 'هنگامی که صفحه جدیدی در این مورد ایجاد می‌شود، اطلاع بده.', + 'watch_title_updates' => 'همه به روزرسانی‌های صفحه', + 'watch_desc_updates' => 'تمام صفحات جدید و تغییرات صفحه را اطلاع بده.', + 'watch_desc_updates_page' => 'همه تغییرات صفحه را اطلاع بده.', + 'watch_title_comments' => 'همه به‌روزرسانی‌ها و نظرات', + 'watch_desc_comments' => 'در مورد تمام صفحات جدید، تغییرات در صفحات و ثبت نظرات جدید، اطلاع بده.', + 'watch_desc_comments_page' => 'در مورد تغییرات در صفحه و ثبت نظرات جدید، اطلاع بده.', + 'watch_change_default' => 'تنظیمات پیش‌فرض اعلان‌ها را تغییر دهید', + 'watch_detail_ignore' => 'نادیده گرفتن اعلان‌ها', + 'watch_detail_new' => 'نظارت بر صفحات جدید', + 'watch_detail_updates' => 'نظارت بر صفحات جدید و به‌روزرسانی‌ها', + 'watch_detail_comments' => 'نظارت بر صفحات جدید، به‌روزرسانی‌ها و نظرات', + 'watch_detail_parent_book' => 'نظارت از طریق کتاب والد', + 'watch_detail_parent_book_ignore' => 'نادیده گرفتن (نظارت) از طریق کتاب والد', + 'watch_detail_parent_chapter' => 'نظارت از طریق فصل والد', + 'watch_detail_parent_chapter_ignore' => 'نادیده گرفتن (نظارت) از طریق فصل والد', ]; diff --git a/lang/fa/errors.php b/lang/fa/errors.php index ad3772b0c2a..2dc4b18e97e 100644 --- a/lang/fa/errors.php +++ b/lang/fa/errors.php @@ -44,21 +44,25 @@ 'cannot_get_image_from_url' => 'نمی توان تصویر را از :url دریافت کرد', 'cannot_create_thumbs' => 'سرور نمی تواند تصاویر کوچک ایجاد کند. لطفاً بررسی کنید که پسوند GD PHP را نصب کرده اید.', 'server_upload_limit' => 'سرور اجازه آپلود در این اندازه را نمی دهد. لطفا اندازه فایل کوچکتر را امتحان کنید.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'سرور اجازه آپلود در این اندازه را نمی دهد. لطفا اندازه فایل کوچکتر را امتحان کنید.', // Drawing & Images 'image_upload_error' => 'هنگام آپلود تصویر خطایی روی داد', 'image_upload_type_error' => 'نوع تصویر در حال آپلود نامعتبر است', - 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_replace_type' => 'جایگزینی فایل تصویری باید از یک نوع باشد', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'داده های طرح قابل بارگذاری نیستند. ممکن است فایل طرح دیگر وجود نداشته باشد یا شما به آن دسترسی نداشته باشید.', // Attachments 'attachment_not_found' => 'پیوست یافت نشد', - 'attachment_upload_error' => 'An error occurred uploading the attachment file', + 'attachment_upload_error' => 'هنگام آپلود فایل خطایی روی داد', // Pages 'page_draft_autosave_fail' => 'پیش نویس ذخیره نشد. قبل از ذخیره این صفحه مطمئن شوید که به اینترنت متصل هستید', - 'page_draft_delete_fail' => 'Failed to delete page draft and fetch current page saved content', + 'page_draft_delete_fail' => 'حذف پیش‌نویس و همچنین بازآوری محتوای صفحه فعلی، ناموفق بود', 'page_custom_home_deletion' => 'وقتی صفحه ای به عنوان صفحه اصلی تنظیم شده است، نمی توان آن را حذف کرد', // Entities @@ -112,5 +116,5 @@ 'maintenance_test_email_failure' => 'خطا در هنگام ارسال ایمیل آزمایشی:', // HTTP errors - 'http_ssr_url_no_match' => 'The URL does not match the configured allowed SSR hosts', + 'http_ssr_url_no_match' => 'URL با میزبان های SSR مجاز پیکربندی شده، مطابقت ندارد', ]; diff --git a/lang/fa/notifications.php b/lang/fa/notifications.php index 5539ae9a9d8..573c7511395 100644 --- a/lang/fa/notifications.php +++ b/lang/fa/notifications.php @@ -4,23 +4,23 @@ */ return [ - 'new_comment_subject' => 'New comment on page: :pageName', - 'new_comment_intro' => 'A user has commented on a page in :appName:', - 'new_page_subject' => 'New page: :pageName', - 'new_page_intro' => 'A new page has been created in :appName:', - 'updated_page_subject' => 'Updated page: :pageName', - 'updated_page_intro' => 'A page has been updated in :appName:', - 'updated_page_debounce' => 'To prevent a mass of notifications, for a while you won\'t be sent notifications for further edits to this page by the same editor.', + 'new_comment_subject' => 'نظر جدید در صفحه: :pageName', + 'new_comment_intro' => 'یک کاربر در بر روی صفحه‌ای نظر ثبت کرده است :appName:', + 'new_page_subject' => 'صفحه جدید: :pageName', + 'new_page_intro' => 'یک صفحه جدید ایجاد شده است در :appName:', + 'updated_page_subject' => 'صفحه جدید: :pageName', + 'updated_page_intro' => 'یک صفحه جدید ایجاد شده است در :appName:', + 'updated_page_debounce' => 'برای جلوگیری از انبوه اعلان‌ها، برای مدتی اعلان‌ ویرایش‌هایی که توسط همان ویرایشگر در این صفحه انجام می‌شود، ارسال نخواهد شد.', - 'detail_page_name' => 'Page Name:', - 'detail_commenter' => 'Commenter:', - 'detail_comment' => 'Comment:', - 'detail_created_by' => 'Created By:', - 'detail_updated_by' => 'Updated By:', + 'detail_page_name' => 'نام صفحه:', + 'detail_commenter' => 'نظر دهنده:', + 'detail_comment' => 'نظر:', + 'detail_created_by' => 'ایجاد شده توسط:', + 'detail_updated_by' => 'به روزرسانی شده توسط:', - 'action_view_comment' => 'View Comment', + 'action_view_comment' => 'مشاهده نظر', 'action_view_page' => 'View Page', 'footer_reason' => 'This notification was sent to you because :link cover this type of activity for this item.', - 'footer_reason_link' => 'your notification preferences', + 'footer_reason_link' => 'تنظیمات اطلاع‌رسانی شما', ]; diff --git a/lang/fa/preferences.php b/lang/fa/preferences.php index 187f82ef8b8..ceecedc8033 100644 --- a/lang/fa/preferences.php +++ b/lang/fa/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'حساب کاربری من', 'shortcuts' => 'میانبرها', - 'shortcuts_interface' => 'میانبرهای صفحه کلید', + 'shortcuts_interface' => 'تنظیمات کلید‌های میانبر رابط کاربری', 'shortcuts_toggle_desc' => 'در اینجا می توانید میانبرهای سیستم را که برای پیمایش و ... استفاده می شود، فعال یا غیرفعال کنید.', 'shortcuts_customize_desc' => 'می توانید هر یک از میانبرهای زیر را سفارشی کنید. کافی است پس از انتخاب ورودی برای میانبر، کلید ترکیبی مورد نظر خود را فشار دهید.', 'shortcuts_toggle_label' => 'میانبرهای صفحه کلید فعال شد', @@ -17,17 +17,35 @@ 'shortcuts_save' => 'ذخیره کلیدهای میانبر', 'shortcuts_overlay_desc' => 'توجه: هنگامی که میانبرها فعال هستند، یک رابط کمکی با فشار دادن "؟" در دسترس است که میانبرهای موجود برای اقداماتی که در حال حاضر روی صفحه قابل مشاهده است را برجسته می‌کند.', 'shortcuts_update_success' => 'تنظیمات میانبر به روز شده است!', - 'shortcuts_overview_desc' => 'Manage keyboard shortcuts you can use to navigate the system user interface.', + 'shortcuts_overview_desc' => 'مدیریت میانبرهای صفحه کلید برای پیمایش در رابط کاربری سیستم.', - 'notifications' => 'Notification Preferences', - 'notifications_desc' => 'Control the email notifications you receive when certain activity is performed within the system.', - 'notifications_opt_own_page_changes' => 'Notify upon changes to pages I own', - 'notifications_opt_own_page_comments' => 'Notify upon comments on pages I own', - 'notifications_opt_comment_replies' => 'Notify upon replies to my comments', - 'notifications_save' => 'Save Preferences', - 'notifications_update_success' => 'Notification preferences have been updated!', - 'notifications_watched' => 'Watched & Ignored Items', - 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', + 'notifications' => 'تنظیمات اطلاع‌رسانی', + 'notifications_desc' => 'تنظیمات اطلاعیه‌های ایمیلی هنگام انجام فعالیت‌های خاص در سیستم.', + 'notifications_opt_own_page_changes' => 'در صورت تغییرات در صفحاتی که متعلق به من است، اطلاع بده', + 'notifications_opt_own_page_comments' => 'در صورت ثبت نظر در صفحاتی که متعلق به من است، اطلاع بده', + 'notifications_opt_comment_replies' => 'پس از درج پاسخ به روی نظراتی که من ثبت کرده‌ام، اطلاع بده', + 'notifications_save' => 'ذخیره تنظیمات', + 'notifications_update_success' => 'تنظیمات اعلان‌ها به روز شده است!', + 'notifications_watched' => 'موارد مشاهده و رد شده', + 'notifications_watched_desc' => 'در زیر آیتم‌هایی وجود دارد که تنظیمات «نظارت» سفارشی بر آن‌ها اعمال شده است. برای به‌روزرسانی تنظیمات خود در مورد هر کدام از این آیتم‌ها، روی آن کلیک کنید و سپس گزینه‌ی «نظارت» را در نوار کناری پیدا کنید.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'دسترسی و امنیت', + 'auth_change_password' => 'تغییر گذرواژه', + 'auth_change_password_desc' => 'گذرواژه‌ای که برای ورود به برنامه استفاده می‌شود، تنظیم کنید. این عبارت باید حداقل 8 کاراکتر باشد.', + 'auth_change_password_success' => 'رمز عبور به روز شد!', + + 'profile' => 'جزئیات پروفایل', + 'profile_desc' => 'علاوه بر جزئیاتی که برای ارتباط و شخصی‌سازی سیستم استفاده می‌شود، جزییات حساب خود را که نشان دهنده شما برای سایر کاربران است، مدیریت کنید.', + 'profile_view_public' => 'مشاهده پروفایل عمومی', + 'profile_name_desc' => 'نام نمایشی خود را تنظیم کنید. این نام بسته به فعالیت شما و محتوای متعلق به شما، برای سایر کاربران سیستم قابل مشاهده است.', + 'profile_email_desc' => 'این ایمیل برای اعلان‌ها و دسترسی به سیستم استفاده خواهد شد.', + 'profile_email_no_permission' => 'متأسفانه شما اجازه تغییر آدرس ایمیل خود را ندارید. برای تغییر این بخش با ادمین سیستم در ارتباط باشید.', + 'profile_avatar_desc' => 'تصویری را انتخاب کنید که برای نمایش حساب کاربری شما به دیگران در این سیستم استفاده شود. در حالت ایده‌آل، این تصویر باید مربع بوده و در عرض و ارتفاع حدود 256 پیکسل باشد.', + 'profile_admin_options' => 'تنظیمات ادمین', + 'profile_admin_options_desc' => 'گزینه‌های اضافی سطح ادمین، در قسمت «تنظیمات > کاربران» یافت می‌شوند.', + + 'delete_account' => 'حذف حساب کاربری', + 'delete_my_account' => 'حذف حساب کاربری من', + 'delete_my_account_desc' => 'با این کار حساب کاربری شما به طور کامل از سیستم حذف می‌شود. شما نمی‌توانید این حساب را بازیابی کنید. محتوایی که ایجاد کرده اید، مانند صفحات ایجاد شده و تصاویر آپلود شده، باقی خواهند ماند.', + 'delete_my_account_warning' => 'آیا مطمئن هستید که می‌خواهید حساب کاربری خود را حذف کنید؟', ]; diff --git a/lang/fa/settings.php b/lang/fa/settings.php index 0a9d531a155..1b3b04eb5e9 100644 --- a/lang/fa/settings.php +++ b/lang/fa/settings.php @@ -10,11 +10,11 @@ 'settings' => 'تنظیمات', 'settings_save' => 'تنظیمات را ذخیره کن', 'system_version' => 'نسخه سیستم', - 'categories' => 'دسته بندی ها', + 'categories' => 'دسته‌بندی‌ها', // App Settings - 'app_customization' => 'سفارشی سازی', - 'app_features_security' => 'ویژگی ها و امنیت', + 'app_customization' => 'سفارشی‌سازی', + 'app_features_security' => 'ویژگی‌ها و امنیت', 'app_name' => 'نام نرم افزار', 'app_name_desc' => 'این نام در هدر و در هر ایمیل ارسال شده توسط سیستم نشان داده شده است.', 'app_name_header' => 'نمایش نام در هدر', @@ -134,8 +134,8 @@ 'audit_date_to' => 'محدوده تاریخ تا', // Role Settings - 'roles' => 'نقش ها', - 'role_user_roles' => 'نقش های کاربر', + 'roles' => 'نقش‌ها', + 'role_user_roles' => 'نقش‌های کاربر', 'roles_index_desc' => 'نقش‌ها برای گروه‌بندی کاربران و ارائه مجوز سیستم به اعضای آن‌ها استفاده می‌شوند. هنگامی که یک کاربر عضو چندین نقش باشد، امتیازات اعطا شده روی هم قرار می‌گیرند و کاربر تمام مجوزها را به ارث می‌برد.', 'roles_x_users_assigned' => ':count کاربر اختصاص داده شده|:count کاربر اختصاص داده شده', 'roles_x_permissions_provided' => ':count مجوز|:count مجوز', @@ -163,7 +163,7 @@ 'role_manage_settings' => 'تنظیمات برنامه را مدیریت کنید', 'role_export_content' => 'صادرات محتوا', 'role_editor_change' => 'تغییر ویرایشگر صفحه', - 'role_notifications' => 'Receive & manage notifications', + 'role_notifications' => 'دریافت و مدیریت اعلان‌ها', 'role_asset' => 'مجوزهای دارایی', 'roles_system_warning' => 'توجه داشته باشید که دسترسی به هر یک از سه مجوز فوق می‌تواند به کاربر اجازه دهد تا امتیازات خود یا امتیازات دیگران را در سیستم تغییر دهد. فقط نقش هایی را با این مجوزها به کاربران مورد اعتماد اختصاص دهید.', 'role_asset_desc' => 'این مجوزها دسترسی پیش‌فرض به دارایی‌های درون سیستم را کنترل می‌کنند. مجوزهای مربوط به کتاب‌ها، فصل‌ها و صفحات این مجوزها را لغو می‌کنند.', @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'می توانید انتخاب کنید که برای این کاربر یک ایمیل دعوت نامه ارسال شود که به آنها امکان می دهد رمز عبور خود را تعیین کنند در غیر این صورت می توانید رمز عبور خود را تعیین کنید.', 'users_send_invite_option' => 'ارسال ایمیل دعوت کاربر', 'users_external_auth_id' => 'شناسه احراز هویت خارجی', - 'users_external_auth_id_desc' => 'این شناسه ای است که برای مطابقت با این کاربر هنگام برقراری ارتباط با سیستم احراز هویت خارجی شما استفاده می شود.', - 'users_password_warning' => 'فقط در صورتی که مایل به تغییر رمز عبور خود هستید، موارد زیر را پر کنید.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'این کاربر نماینده هر کاربر مهمانی است که از نمونه شما بازدید می کند. نمی توان از آن برای ورود استفاده کرد اما به طور خودکار اختصاص داده می شود.', 'users_delete' => 'حذف کاربر', 'users_delete_named' => 'حذف :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'زبان ترجیحی', 'users_preferred_language_desc' => 'این گزینه زبان مورد استفاده برای رابط کاربری برنامه را تغییر می دهد. این روی محتوای ایجاد شده توسط کاربر تأثیری نخواهد داشت.', 'users_social_accounts' => 'حساب های اجتماعی', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'در اینجا می‌توانید حساب‌های دیگر خود را برای ورود سریع‌تر و آسان‌تر متصل کنید. قطع ارتباط حساب در اینجا، دسترسی مجاز قبلی را لغو نمی کند. دسترسی را از تنظیمات نمایه خود در حساب اجتماعی متصل لغو کنید.', 'users_social_connect' => 'اتصال حساب کاربری', 'users_social_disconnect' => 'قطع حساب', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => 'حساب :socialAccount با موفقیت به نمایه شما پیوست شد.', 'users_social_disconnected' => 'حساب :socialAccount با موفقیت از نمایه شما قطع شد.', 'users_api_tokens' => 'توکن‌های API', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'هیچ نشانه API برای این کاربر ایجاد نشده است', 'users_api_tokens_create' => 'ایجاد توکن', 'users_api_tokens_expires' => 'منقضی شده ها', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/fi/activities.php b/lang/fi/activities.php new file mode 100644 index 00000000000..d5b55c03dcb --- /dev/null +++ b/lang/fi/activities.php @@ -0,0 +1,124 @@ + 'created page', + 'page_create_notification' => 'Page successfully created', + 'page_update' => 'updated page', + 'page_update_notification' => 'Page successfully updated', + 'page_delete' => 'deleted page', + 'page_delete_notification' => 'Page successfully deleted', + 'page_restore' => 'restored page', + 'page_restore_notification' => 'Page successfully restored', + 'page_move' => 'moved page', + 'page_move_notification' => 'Page successfully moved', + + // Chapters + 'chapter_create' => 'created chapter', + 'chapter_create_notification' => 'Chapter successfully created', + 'chapter_update' => 'updated chapter', + 'chapter_update_notification' => 'Chapter successfully updated', + 'chapter_delete' => 'deleted chapter', + 'chapter_delete_notification' => 'Chapter successfully deleted', + 'chapter_move' => 'moved chapter', + 'chapter_move_notification' => 'Chapter successfully moved', + + // Books + 'book_create' => 'created book', + 'book_create_notification' => 'Book successfully created', + 'book_create_from_chapter' => 'converted chapter to book', + 'book_create_from_chapter_notification' => 'Chapter successfully converted to a book', + 'book_update' => 'updated book', + 'book_update_notification' => 'Book successfully updated', + 'book_delete' => 'deleted book', + 'book_delete_notification' => 'Book successfully deleted', + 'book_sort' => 'sorted book', + 'book_sort_notification' => 'Book successfully re-sorted', + + // Bookshelves + 'bookshelf_create' => 'created shelf', + 'bookshelf_create_notification' => 'Shelf successfully created', + 'bookshelf_create_from_book' => 'converted book to shelf', + 'bookshelf_create_from_book_notification' => 'Book successfully converted to a shelf', + 'bookshelf_update' => 'updated shelf', + 'bookshelf_update_notification' => 'Shelf successfully updated', + 'bookshelf_delete' => 'deleted shelf', + 'bookshelf_delete_notification' => 'Shelf successfully deleted', + + // Revisions + 'revision_restore' => 'restored revision', + 'revision_delete' => 'deleted revision', + 'revision_delete_notification' => 'Revision successfully deleted', + + // Favourites + 'favourite_add_notification' => '":name" has been added to your favourites', + 'favourite_remove_notification' => '":name" has been removed from your favourites', + + // Watching + 'watch_update_level_notification' => 'Watch preferences successfully updated', + + // Auth + 'auth_login' => 'logged in', + 'auth_register' => 'registered as new user', + 'auth_password_reset_request' => 'requested user password reset', + 'auth_password_reset_update' => 'reset user password', + 'mfa_setup_method' => 'configured MFA method', + 'mfa_setup_method_notification' => 'Multi-factor method successfully configured', + 'mfa_remove_method' => 'removed MFA method', + 'mfa_remove_method_notification' => 'Multi-factor method successfully removed', + + // Settings + 'settings_update' => 'updated settings', + 'settings_update_notification' => 'Settings successfully updated', + 'maintenance_action_run' => 'ran maintenance action', + + // Webhooks + 'webhook_create' => 'created webhook', + 'webhook_create_notification' => 'Webhook successfully created', + 'webhook_update' => 'updated webhook', + 'webhook_update_notification' => 'Webhook successfully updated', + 'webhook_delete' => 'deleted webhook', + 'webhook_delete_notification' => 'Webhook successfully deleted', + + // Users + 'user_create' => 'created user', + 'user_create_notification' => 'User successfully created', + 'user_update' => 'updated user', + 'user_update_notification' => 'User successfully updated', + 'user_delete' => 'deleted user', + 'user_delete_notification' => 'User successfully removed', + + // API Tokens + 'api_token_create' => 'created api token', + 'api_token_create_notification' => 'API token successfully created', + 'api_token_update' => 'updated api token', + 'api_token_update_notification' => 'API token successfully updated', + 'api_token_delete' => 'deleted api token', + 'api_token_delete_notification' => 'API token successfully deleted', + + // Roles + 'role_create' => 'created role', + 'role_create_notification' => 'Role successfully created', + 'role_update' => 'updated role', + 'role_update_notification' => 'Role successfully updated', + 'role_delete' => 'deleted role', + 'role_delete_notification' => 'Role successfully deleted', + + // Recycle Bin + 'recycle_bin_empty' => 'emptied recycle bin', + 'recycle_bin_restore' => 'restored from recycle bin', + 'recycle_bin_destroy' => 'removed from recycle bin', + + // Comments + 'commented_on' => 'commented on', + 'comment_create' => 'added comment', + 'comment_update' => 'updated comment', + 'comment_delete' => 'deleted comment', + + // Other + 'permissions_update' => 'updated permissions', +]; diff --git a/lang/fi/auth.php b/lang/fi/auth.php new file mode 100644 index 00000000000..dc4b242a09e --- /dev/null +++ b/lang/fi/auth.php @@ -0,0 +1,117 @@ + 'These credentials do not match our records.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + + // Login & Register + 'sign_up' => 'Sign up', + 'log_in' => 'Log in', + 'log_in_with' => 'Login with :socialDriver', + 'sign_up_with' => 'Sign up with :socialDriver', + 'logout' => 'Logout', + + 'name' => 'Name', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'password_confirm' => 'Confirm Password', + 'password_hint' => 'Must be at least 8 characters', + 'forgot_password' => 'Forgot Password?', + 'remember_me' => 'Remember Me', + 'ldap_email_hint' => 'Please enter an email to use for this account.', + 'create_account' => 'Create Account', + 'already_have_account' => 'Already have an account?', + 'dont_have_account' => 'Don\'t have an account?', + 'social_login' => 'Social Login', + 'social_registration' => 'Social Registration', + 'social_registration_text' => 'Register and sign in using another service.', + + 'register_thanks' => 'Thanks for registering!', + 'register_confirm' => 'Please check your email and click the confirmation button to access :appName.', + 'registrations_disabled' => 'Registrations are currently disabled', + 'registration_email_domain_invalid' => 'That email domain does not have access to this application', + 'register_success' => 'Thanks for signing up! You are now registered and signed in.', + + // Login auto-initiation + 'auto_init_starting' => 'Attempting Login', + 'auto_init_starting_desc' => 'We\'re contacting your authentication system to start the login process. If there\'s no progress after 5 seconds you can try clicking the link below.', + 'auto_init_start_link' => 'Proceed with authentication', + + // Password Reset + 'reset_password' => 'Reset Password', + 'reset_password_send_instructions' => 'Enter your email below and you will be sent an email with a password reset link.', + 'reset_password_send_button' => 'Send Reset Link', + 'reset_password_sent' => 'A password reset link will be sent to :email if that email address is found in the system.', + 'reset_password_success' => 'Your password has been successfully reset.', + 'email_reset_subject' => 'Reset your :appName password', + 'email_reset_text' => 'You are receiving this email because we received a password reset request for your account.', + 'email_reset_not_requested' => 'If you did not request a password reset, no further action is required.', + + // Email Confirmation + 'email_confirm_subject' => 'Confirm your email on :appName', + 'email_confirm_greeting' => 'Thanks for joining :appName!', + 'email_confirm_text' => 'Please confirm your email address by clicking the button below:', + 'email_confirm_action' => 'Confirm Email', + 'email_confirm_send_error' => 'Email confirmation required but the system could not send the email. Contact the admin to ensure email is set up correctly.', + 'email_confirm_success' => 'Your email has been confirmed! You should now be able to login using this email address.', + 'email_confirm_resent' => 'Confirmation email resent, Please check your inbox.', + 'email_confirm_thanks' => 'Thanks for confirming!', + 'email_confirm_thanks_desc' => 'Please wait a moment while your confirmation is handled. If you are not redirected after 3 seconds press the "Continue" link below to proceed.', + + 'email_not_confirmed' => 'Email Address Not Confirmed', + 'email_not_confirmed_text' => 'Your email address has not yet been confirmed.', + 'email_not_confirmed_click_link' => 'Please click the link in the email that was sent shortly after you registered.', + 'email_not_confirmed_resend' => 'If you cannot find the email you can re-send the confirmation email by submitting the form below.', + 'email_not_confirmed_resend_button' => 'Resend Confirmation Email', + + // User Invite + 'user_invite_email_subject' => 'You have been invited to join :appName!', + 'user_invite_email_greeting' => 'An account has been created for you on :appName.', + 'user_invite_email_text' => 'Click the button below to set an account password and gain access:', + 'user_invite_email_action' => 'Set Account Password', + 'user_invite_page_welcome' => 'Welcome to :appName!', + 'user_invite_page_text' => 'To finalise your account and gain access you need to set a password which will be used to log-in to :appName on future visits.', + 'user_invite_page_confirm_button' => 'Confirm Password', + 'user_invite_success_login' => 'Password set, you should now be able to login using your set password to access :appName!', + + // Multi-factor Authentication + 'mfa_setup' => 'Setup Multi-Factor Authentication', + 'mfa_setup_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', + 'mfa_setup_configured' => 'Already configured', + 'mfa_setup_reconfigure' => 'Reconfigure', + 'mfa_setup_remove_confirmation' => 'Are you sure you want to remove this multi-factor authentication method?', + 'mfa_setup_action' => 'Setup', + 'mfa_backup_codes_usage_limit_warning' => 'You have less than 5 backup codes remaining, Please generate and store a new set before you run out of codes to prevent being locked out of your account.', + 'mfa_option_totp_title' => 'Mobile App', + 'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.', + 'mfa_option_backup_codes_title' => 'Backup Codes', + 'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.', + 'mfa_gen_confirm_and_enable' => 'Confirm and Enable', + 'mfa_gen_backup_codes_title' => 'Backup Codes Setup', + 'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.', + 'mfa_gen_backup_codes_download' => 'Download Codes', + 'mfa_gen_backup_codes_usage_warning' => 'Each code can only be used once', + 'mfa_gen_totp_title' => 'Mobile App Setup', + 'mfa_gen_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.', + 'mfa_gen_totp_scan' => 'Scan the QR code below using your preferred authentication app to get started.', + 'mfa_gen_totp_verify_setup' => 'Verify Setup', + 'mfa_gen_totp_verify_setup_desc' => 'Verify that all is working by entering a code, generated within your authentication app, in the input box below:', + 'mfa_gen_totp_provide_code_here' => 'Provide your app generated code here', + 'mfa_verify_access' => 'Verify Access', + 'mfa_verify_access_desc' => 'Your user account requires you to confirm your identity via an additional level of verification before you\'re granted access. Verify using one of your configured methods to continue.', + 'mfa_verify_no_methods' => 'No Methods Configured', + 'mfa_verify_no_methods_desc' => 'No multi-factor authentication methods could be found for your account. You\'ll need to set up at least one method before you gain access.', + 'mfa_verify_use_totp' => 'Verify using a mobile app', + 'mfa_verify_use_backup_codes' => 'Verify using a backup code', + 'mfa_verify_backup_code' => 'Backup Code', + 'mfa_verify_backup_code_desc' => 'Enter one of your remaining backup codes below:', + 'mfa_verify_backup_code_enter_here' => 'Enter backup code here', + 'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:', + 'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.', +]; diff --git a/lang/fi/common.php b/lang/fi/common.php new file mode 100644 index 00000000000..27037babec0 --- /dev/null +++ b/lang/fi/common.php @@ -0,0 +1,110 @@ + 'Cancel', + 'close' => 'Close', + 'confirm' => 'Confirm', + 'back' => 'Back', + 'save' => 'Save', + 'continue' => 'Continue', + 'select' => 'Select', + 'toggle_all' => 'Toggle All', + 'more' => 'More', + + // Form Labels + 'name' => 'Name', + 'description' => 'Description', + 'role' => 'Role', + 'cover_image' => 'Cover image', + 'cover_image_description' => 'This image should be approx 440x250px.', + + // Actions + 'actions' => 'Actions', + 'view' => 'View', + 'view_all' => 'View All', + 'new' => 'New', + 'create' => 'Create', + 'update' => 'Update', + 'edit' => 'Edit', + 'sort' => 'Sort', + 'move' => 'Move', + 'copy' => 'Copy', + 'reply' => 'Reply', + 'delete' => 'Delete', + 'delete_confirm' => 'Confirm Deletion', + 'search' => 'Search', + 'search_clear' => 'Clear Search', + 'reset' => 'Reset', + 'remove' => 'Remove', + 'add' => 'Add', + 'configure' => 'Configure', + 'manage' => 'Manage', + 'fullscreen' => 'Fullscreen', + 'favourite' => 'Favourite', + 'unfavourite' => 'Unfavourite', + 'next' => 'Next', + 'previous' => 'Previous', + 'filter_active' => 'Active Filter:', + 'filter_clear' => 'Clear Filter', + 'download' => 'Download', + 'open_in_tab' => 'Open in Tab', + 'open' => 'Open', + + // Sort Options + 'sort_options' => 'Sort Options', + 'sort_direction_toggle' => 'Sort Direction Toggle', + 'sort_ascending' => 'Sort Ascending', + 'sort_descending' => 'Sort Descending', + 'sort_name' => 'Name', + 'sort_default' => 'Default', + 'sort_created_at' => 'Created Date', + 'sort_updated_at' => 'Updated Date', + + // Misc + 'deleted_user' => 'Deleted User', + 'no_activity' => 'No activity to show', + 'no_items' => 'No items available', + 'back_to_top' => 'Back to top', + 'skip_to_main_content' => 'Skip to main content', + 'toggle_details' => 'Toggle Details', + 'toggle_thumbnails' => 'Toggle Thumbnails', + 'details' => 'Details', + 'grid_view' => 'Grid View', + 'list_view' => 'List View', + 'default' => 'Default', + 'breadcrumb' => 'Breadcrumb', + 'status' => 'Status', + 'status_active' => 'Active', + 'status_inactive' => 'Inactive', + 'never' => 'Never', + 'none' => 'None', + + // Header + 'homepage' => 'Homepage', + 'header_menu_expand' => 'Expand Header Menu', + 'profile_menu' => 'Profile Menu', + 'view_profile' => 'View Profile', + 'edit_profile' => 'Edit Profile', + 'dark_mode' => 'Dark Mode', + 'light_mode' => 'Light Mode', + 'global_search' => 'Global Search', + + // Layout tabs + 'tab_info' => 'Info', + 'tab_info_label' => 'Tab: Show Secondary Information', + 'tab_content' => 'Content', + 'tab_content_label' => 'Tab: Show Primary Content', + + // Email Content + 'email_action_help' => 'If you’re having trouble clicking the ":actionText" button, copy and paste the URL below into your web browser:', + 'email_rights' => 'All rights reserved', + + // Footer Link Options + // Not directly used but available for convenience to users. + 'privacy_policy' => 'Privacy Policy', + 'terms_of_service' => 'Terms of Service', +]; diff --git a/lang/fi/components.php b/lang/fi/components.php new file mode 100644 index 00000000000..c33b1d0b791 --- /dev/null +++ b/lang/fi/components.php @@ -0,0 +1,46 @@ + 'Image Select', + 'image_list' => 'Image List', + 'image_details' => 'Image Details', + 'image_upload' => 'Upload Image', + 'image_intro' => 'Here you can select and manage images that have been previously uploaded to the system.', + 'image_intro_upload' => 'Upload a new image by dragging an image file into this window, or by using the "Upload Image" button above.', + 'image_all' => 'All', + 'image_all_title' => 'View all images', + 'image_book_title' => 'View images uploaded to this book', + 'image_page_title' => 'View images uploaded to this page', + 'image_search_hint' => 'Search by image name', + 'image_uploaded' => 'Uploaded :uploadedDate', + 'image_uploaded_by' => 'Uploaded by :userName', + 'image_uploaded_to' => 'Uploaded to :pageLink', + 'image_updated' => 'Updated :updateDate', + 'image_load_more' => 'Load More', + 'image_image_name' => 'Image Name', + 'image_delete_used' => 'This image is used in the pages below.', + 'image_delete_confirm_text' => 'Are you sure you want to delete this image?', + 'image_select_image' => 'Select Image', + 'image_dropzone' => 'Drop images or click here to upload', + 'image_dropzone_drop' => 'Drop images here to upload', + 'images_deleted' => 'Images Deleted', + 'image_preview' => 'Image Preview', + 'image_upload_success' => 'Image uploaded successfully', + 'image_update_success' => 'Image details successfully updated', + 'image_delete_success' => 'Image successfully deleted', + 'image_replace' => 'Replace Image', + 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', + + // Code Editor + 'code_editor' => 'Edit Code', + 'code_language' => 'Code Language', + 'code_content' => 'Code Content', + 'code_session_history' => 'Session History', + 'code_save' => 'Save Code', +]; diff --git a/lang/fi/editor.php b/lang/fi/editor.php new file mode 100644 index 00000000000..670c1c5e1ac --- /dev/null +++ b/lang/fi/editor.php @@ -0,0 +1,174 @@ + 'General', + 'advanced' => 'Advanced', + 'none' => 'None', + 'cancel' => 'Cancel', + 'save' => 'Save', + 'close' => 'Close', + 'undo' => 'Undo', + 'redo' => 'Redo', + 'left' => 'Left', + 'center' => 'Center', + 'right' => 'Right', + 'top' => 'Top', + 'middle' => 'Middle', + 'bottom' => 'Bottom', + 'width' => 'Width', + 'height' => 'Height', + 'More' => 'More', + 'select' => 'Select...', + + // Toolbar + 'formats' => 'Formats', + 'header_large' => 'Large Header', + 'header_medium' => 'Medium Header', + 'header_small' => 'Small Header', + 'header_tiny' => 'Tiny Header', + 'paragraph' => 'Paragraph', + 'blockquote' => 'Blockquote', + 'inline_code' => 'Inline code', + 'callouts' => 'Callouts', + 'callout_information' => 'Information', + 'callout_success' => 'Success', + 'callout_warning' => 'Warning', + 'callout_danger' => 'Danger', + 'bold' => 'Bold', + 'italic' => 'Italic', + 'underline' => 'Underline', + 'strikethrough' => 'Strikethrough', + 'superscript' => 'Superscript', + 'subscript' => 'Subscript', + 'text_color' => 'Text color', + 'custom_color' => 'Custom color', + 'remove_color' => 'Remove color', + 'background_color' => 'Background color', + 'align_left' => 'Align left', + 'align_center' => 'Align center', + 'align_right' => 'Align right', + 'align_justify' => 'Justify', + 'list_bullet' => 'Bullet list', + 'list_numbered' => 'Numbered list', + 'list_task' => 'Task list', + 'indent_increase' => 'Increase indent', + 'indent_decrease' => 'Decrease indent', + 'table' => 'Table', + 'insert_image' => 'Insert image', + 'insert_image_title' => 'Insert/Edit Image', + 'insert_link' => 'Insert/edit link', + 'insert_link_title' => 'Insert/Edit Link', + 'insert_horizontal_line' => 'Insert horizontal line', + 'insert_code_block' => 'Insert code block', + 'edit_code_block' => 'Edit code block', + 'insert_drawing' => 'Insert/edit drawing', + 'drawing_manager' => 'Drawing manager', + 'insert_media' => 'Insert/edit media', + 'insert_media_title' => 'Insert/Edit Media', + 'clear_formatting' => 'Clear formatting', + 'source_code' => 'Source code', + 'source_code_title' => 'Source Code', + 'fullscreen' => 'Fullscreen', + 'image_options' => 'Image options', + + // Tables + 'table_properties' => 'Table properties', + 'table_properties_title' => 'Table Properties', + 'delete_table' => 'Delete table', + 'insert_row_before' => 'Insert row before', + 'insert_row_after' => 'Insert row after', + 'delete_row' => 'Delete row', + 'insert_column_before' => 'Insert column before', + 'insert_column_after' => 'Insert column after', + 'delete_column' => 'Delete column', + 'table_cell' => 'Cell', + 'table_row' => 'Row', + 'table_column' => 'Column', + 'cell_properties' => 'Cell properties', + 'cell_properties_title' => 'Cell Properties', + 'cell_type' => 'Cell type', + 'cell_type_cell' => 'Cell', + 'cell_scope' => 'Scope', + 'cell_type_header' => 'Header cell', + 'merge_cells' => 'Merge cells', + 'split_cell' => 'Split cell', + 'table_row_group' => 'Row Group', + 'table_column_group' => 'Column Group', + 'horizontal_align' => 'Horizontal align', + 'vertical_align' => 'Vertical align', + 'border_width' => 'Border width', + 'border_style' => 'Border style', + 'border_color' => 'Border color', + 'row_properties' => 'Row properties', + 'row_properties_title' => 'Row Properties', + 'cut_row' => 'Cut row', + 'copy_row' => 'Copy row', + 'paste_row_before' => 'Paste row before', + 'paste_row_after' => 'Paste row after', + 'row_type' => 'Row type', + 'row_type_header' => 'Header', + 'row_type_body' => 'Body', + 'row_type_footer' => 'Footer', + 'alignment' => 'Alignment', + 'cut_column' => 'Cut column', + 'copy_column' => 'Copy column', + 'paste_column_before' => 'Paste column before', + 'paste_column_after' => 'Paste column after', + 'cell_padding' => 'Cell padding', + 'cell_spacing' => 'Cell spacing', + 'caption' => 'Caption', + 'show_caption' => 'Show caption', + 'constrain' => 'Constrain proportions', + 'cell_border_solid' => 'Solid', + 'cell_border_dotted' => 'Dotted', + 'cell_border_dashed' => 'Dashed', + 'cell_border_double' => 'Double', + 'cell_border_groove' => 'Groove', + 'cell_border_ridge' => 'Ridge', + 'cell_border_inset' => 'Inset', + 'cell_border_outset' => 'Outset', + 'cell_border_none' => 'None', + 'cell_border_hidden' => 'Hidden', + + // Images, links, details/summary & embed + 'source' => 'Source', + 'alt_desc' => 'Alternative description', + 'embed' => 'Embed', + 'paste_embed' => 'Paste your embed code below:', + 'url' => 'URL', + 'text_to_display' => 'Text to display', + 'title' => 'Title', + 'open_link' => 'Open link', + 'open_link_in' => 'Open link in...', + 'open_link_current' => 'Current window', + 'open_link_new' => 'New window', + 'remove_link' => 'Remove link', + 'insert_collapsible' => 'Insert collapsible block', + 'collapsible_unwrap' => 'Unwrap', + 'edit_label' => 'Edit label', + 'toggle_open_closed' => 'Toggle open/closed', + 'collapsible_edit' => 'Edit collapsible block', + 'toggle_label' => 'Toggle label', + + // About view + 'about' => 'About the editor', + 'about_title' => 'About the WYSIWYG Editor', + 'editor_license' => 'Editor License & Copyright', + 'editor_tiny_license' => 'This editor is built using :tinyLink which is provided under the MIT license.', + 'editor_tiny_license_link' => 'The copyright and license details of TinyMCE can be found here.', + 'save_continue' => 'Save Page & Continue', + 'callouts_cycle' => '(Keep pressing to toggle through types)', + 'link_selector' => 'Link to content', + 'shortcuts' => 'Shortcuts', + 'shortcut' => 'Shortcut', + 'shortcuts_intro' => 'The following shortcuts are available in the editor:', + 'windows_linux' => '(Windows/Linux)', + 'mac' => '(Mac)', + 'description' => 'Description', +]; diff --git a/lang/fi/entities.php b/lang/fi/entities.php new file mode 100644 index 00000000000..cfb5aae1a78 --- /dev/null +++ b/lang/fi/entities.php @@ -0,0 +1,433 @@ + 'Recently Created', + 'recently_created_pages' => 'Recently Created Pages', + 'recently_updated_pages' => 'Recently Updated Pages', + 'recently_created_chapters' => 'Recently Created Chapters', + 'recently_created_books' => 'Recently Created Books', + 'recently_created_shelves' => 'Recently Created Shelves', + 'recently_update' => 'Recently Updated', + 'recently_viewed' => 'Recently Viewed', + 'recent_activity' => 'Recent Activity', + 'create_now' => 'Create one now', + 'revisions' => 'Revisions', + 'meta_revision' => 'Revision #:revisionCount', + 'meta_created' => 'Created :timeLength', + 'meta_created_name' => 'Created :timeLength by :user', + 'meta_updated' => 'Updated :timeLength', + 'meta_updated_name' => 'Updated :timeLength by :user', + 'meta_owned_name' => 'Owned by :user', + 'meta_reference_page_count' => 'Referenced on :count page|Referenced on :count pages', + 'entity_select' => 'Entity Select', + 'entity_select_lack_permission' => 'You don\'t have the required permissions to select this item', + 'images' => 'Images', + 'my_recent_drafts' => 'My Recent Drafts', + 'my_recently_viewed' => 'My Recently Viewed', + 'my_most_viewed_favourites' => 'My Most Viewed Favourites', + 'my_favourites' => 'My Favourites', + 'no_pages_viewed' => 'You have not viewed any pages', + 'no_pages_recently_created' => 'No pages have been recently created', + 'no_pages_recently_updated' => 'No pages have been recently updated', + 'export' => 'Export', + 'export_html' => 'Contained Web File', + 'export_pdf' => 'PDF File', + 'export_text' => 'Plain Text File', + 'export_md' => 'Markdown File', + + // Permissions and restrictions + 'permissions' => 'Permissions', + 'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.', + 'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.', + 'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.', + 'permissions_save' => 'Save Permissions', + 'permissions_owner' => 'Owner', + 'permissions_role_everyone_else' => 'Everyone Else', + 'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.', + 'permissions_role_override' => 'Override permissions for role', + 'permissions_inherit_defaults' => 'Inherit defaults', + + // Search + 'search_results' => 'Search Results', + 'search_total_results_found' => ':count result found|:count total results found', + 'search_clear' => 'Clear Search', + 'search_no_pages' => 'No pages matched this search', + 'search_for_term' => 'Search for :term', + 'search_more' => 'More Results', + 'search_advanced' => 'Advanced Search', + 'search_terms' => 'Search Terms', + 'search_content_type' => 'Content Type', + 'search_exact_matches' => 'Exact Matches', + 'search_tags' => 'Tag Searches', + 'search_options' => 'Options', + 'search_viewed_by_me' => 'Viewed by me', + 'search_not_viewed_by_me' => 'Not viewed by me', + 'search_permissions_set' => 'Permissions set', + 'search_created_by_me' => 'Created by me', + 'search_updated_by_me' => 'Updated by me', + 'search_owned_by_me' => 'Owned by me', + 'search_date_options' => 'Date Options', + 'search_updated_before' => 'Updated before', + 'search_updated_after' => 'Updated after', + 'search_created_before' => 'Created before', + 'search_created_after' => 'Created after', + 'search_set_date' => 'Set Date', + 'search_update' => 'Update Search', + + // Shelves + 'shelf' => 'Shelf', + 'shelves' => 'Shelves', + 'x_shelves' => ':count Shelf|:count Shelves', + 'shelves_empty' => 'No shelves have been created', + 'shelves_create' => 'Create New Shelf', + 'shelves_popular' => 'Popular Shelves', + 'shelves_new' => 'New Shelves', + 'shelves_new_action' => 'New Shelf', + 'shelves_popular_empty' => 'The most popular shelves will appear here.', + 'shelves_new_empty' => 'The most recently created shelves will appear here.', + 'shelves_save' => 'Save Shelf', + 'shelves_books' => 'Books on this shelf', + 'shelves_add_books' => 'Add books to this shelf', + 'shelves_drag_books' => 'Drag books below to add them to this shelf', + 'shelves_empty_contents' => 'This shelf has no books assigned to it', + 'shelves_edit_and_assign' => 'Edit shelf to assign books', + 'shelves_edit_named' => 'Edit Shelf :name', + 'shelves_edit' => 'Edit Shelf', + 'shelves_delete' => 'Delete Shelf', + 'shelves_delete_named' => 'Delete Shelf :name', + 'shelves_delete_explain' => "This will delete the shelf with the name ':name'. Contained books will not be deleted.", + 'shelves_delete_confirmation' => 'Are you sure you want to delete this shelf?', + 'shelves_permissions' => 'Shelf Permissions', + 'shelves_permissions_updated' => 'Shelf Permissions Updated', + 'shelves_permissions_active' => 'Shelf Permissions Active', + 'shelves_permissions_cascade_warning' => 'Permissions on shelves do not automatically cascade to contained books. This is because a book can exist on multiple shelves. Permissions can however be copied down to child books using the option found below.', + 'shelves_permissions_create' => 'Shelf create permissions are only used for copying permissions to child books using the action below. They do not control the ability to create books.', + 'shelves_copy_permissions_to_books' => 'Copy Permissions to Books', + 'shelves_copy_permissions' => 'Copy Permissions', + 'shelves_copy_permissions_explain' => 'This will apply the current permission settings of this shelf to all books contained within. Before activating, ensure any changes to the permissions of this shelf have been saved.', + 'shelves_copy_permission_success' => 'Shelf permissions copied to :count books', + + // Books + 'book' => 'Book', + 'books' => 'Books', + 'x_books' => ':count Book|:count Books', + 'books_empty' => 'No books have been created', + 'books_popular' => 'Popular Books', + 'books_recent' => 'Recent Books', + 'books_new' => 'New Books', + 'books_new_action' => 'New Book', + 'books_popular_empty' => 'The most popular books will appear here.', + 'books_new_empty' => 'The most recently created books will appear here.', + 'books_create' => 'Create New Book', + 'books_delete' => 'Delete Book', + 'books_delete_named' => 'Delete Book :bookName', + 'books_delete_explain' => 'This will delete the book with the name \':bookName\'. All pages and chapters will be removed.', + 'books_delete_confirmation' => 'Are you sure you want to delete this book?', + 'books_edit' => 'Edit Book', + 'books_edit_named' => 'Edit Book :bookName', + 'books_form_book_name' => 'Book Name', + 'books_save' => 'Save Book', + 'books_permissions' => 'Book Permissions', + 'books_permissions_updated' => 'Book Permissions Updated', + 'books_empty_contents' => 'No pages or chapters have been created for this book.', + 'books_empty_create_page' => 'Create a new page', + 'books_empty_sort_current_book' => 'Sort the current book', + 'books_empty_add_chapter' => 'Add a chapter', + 'books_permissions_active' => 'Book Permissions Active', + 'books_search_this' => 'Search this book', + 'books_navigation' => 'Book Navigation', + 'books_sort' => 'Sort Book Contents', + 'books_sort_desc' => 'Move chapters and pages within a book to reorganise its contents. Other books can be added which allows easy moving of chapters and pages between books.', + 'books_sort_named' => 'Sort Book :bookName', + 'books_sort_name' => 'Sort by Name', + 'books_sort_created' => 'Sort by Created Date', + 'books_sort_updated' => 'Sort by Updated Date', + 'books_sort_chapters_first' => 'Chapters First', + 'books_sort_chapters_last' => 'Chapters Last', + 'books_sort_show_other' => 'Show Other Books', + 'books_sort_save' => 'Save New Order', + 'books_sort_show_other_desc' => 'Add other books here to include them in the sort operation, and allow easy cross-book reorganisation.', + 'books_sort_move_up' => 'Move Up', + 'books_sort_move_down' => 'Move Down', + 'books_sort_move_prev_book' => 'Move to Previous Book', + 'books_sort_move_next_book' => 'Move to Next Book', + 'books_sort_move_prev_chapter' => 'Move Into Previous Chapter', + 'books_sort_move_next_chapter' => 'Move Into Next Chapter', + 'books_sort_move_book_start' => 'Move to Start of Book', + 'books_sort_move_book_end' => 'Move to End of Book', + 'books_sort_move_before_chapter' => 'Move to Before Chapter', + 'books_sort_move_after_chapter' => 'Move to After Chapter', + 'books_copy' => 'Copy Book', + 'books_copy_success' => 'Book successfully copied', + + // Chapters + 'chapter' => 'Chapter', + 'chapters' => 'Chapters', + 'x_chapters' => ':count Chapter|:count Chapters', + 'chapters_popular' => 'Popular Chapters', + 'chapters_new' => 'New Chapter', + 'chapters_create' => 'Create New Chapter', + 'chapters_delete' => 'Delete Chapter', + 'chapters_delete_named' => 'Delete Chapter :chapterName', + 'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages that exist within this chapter will also be deleted.', + 'chapters_delete_confirm' => 'Are you sure you want to delete this chapter?', + 'chapters_edit' => 'Edit Chapter', + 'chapters_edit_named' => 'Edit Chapter :chapterName', + 'chapters_save' => 'Save Chapter', + 'chapters_move' => 'Move Chapter', + 'chapters_move_named' => 'Move Chapter :chapterName', + 'chapters_copy' => 'Copy Chapter', + 'chapters_copy_success' => 'Chapter successfully copied', + 'chapters_permissions' => 'Chapter Permissions', + 'chapters_empty' => 'No pages are currently in this chapter.', + 'chapters_permissions_active' => 'Chapter Permissions Active', + 'chapters_permissions_success' => 'Chapter Permissions Updated', + 'chapters_search_this' => 'Search this chapter', + 'chapter_sort_book' => 'Sort Book', + + // Pages + 'page' => 'Page', + 'pages' => 'Pages', + 'x_pages' => ':count Page|:count Pages', + 'pages_popular' => 'Popular Pages', + 'pages_new' => 'New Page', + 'pages_attachments' => 'Attachments', + 'pages_navigation' => 'Page Navigation', + 'pages_delete' => 'Delete Page', + 'pages_delete_named' => 'Delete Page :pageName', + 'pages_delete_draft_named' => 'Delete Draft Page :pageName', + 'pages_delete_draft' => 'Delete Draft Page', + 'pages_delete_success' => 'Page deleted', + 'pages_delete_draft_success' => 'Draft page deleted', + 'pages_delete_confirm' => 'Are you sure you want to delete this page?', + 'pages_delete_draft_confirm' => 'Are you sure you want to delete this draft page?', + 'pages_editing_named' => 'Editing Page :pageName', + 'pages_edit_draft_options' => 'Draft Options', + 'pages_edit_save_draft' => 'Save Draft', + 'pages_edit_draft' => 'Edit Page Draft', + 'pages_editing_draft' => 'Editing Draft', + 'pages_editing_page' => 'Editing Page', + 'pages_edit_draft_save_at' => 'Draft saved at ', + 'pages_edit_delete_draft' => 'Delete Draft', + 'pages_edit_delete_draft_confirm' => 'Are you sure you want to delete your draft page changes? All of your changes, since the last full save, will be lost and the editor will be updated with the latest page non-draft save state.', + 'pages_edit_discard_draft' => 'Discard Draft', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', + 'pages_edit_set_changelog' => 'Set Changelog', + 'pages_edit_enter_changelog_desc' => 'Enter a brief description of the changes you\'ve made', + 'pages_edit_enter_changelog' => 'Enter Changelog', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', + 'pages_save' => 'Save Page', + 'pages_title' => 'Page Title', + 'pages_name' => 'Page Name', + 'pages_md_editor' => 'Editor', + 'pages_md_preview' => 'Preview', + 'pages_md_insert_image' => 'Insert Image', + 'pages_md_insert_link' => 'Insert Entity Link', + 'pages_md_insert_drawing' => 'Insert Drawing', + 'pages_md_show_preview' => 'Show preview', + 'pages_md_sync_scroll' => 'Sync preview scroll', + 'pages_drawing_unsaved' => 'Unsaved Drawing Found', + 'pages_drawing_unsaved_confirm' => 'Unsaved drawing data was found from a previous failed drawing save attempt. Would you like to restore and continue editing this unsaved drawing?', + 'pages_not_in_chapter' => 'Page is not in a chapter', + 'pages_move' => 'Move Page', + 'pages_copy' => 'Copy Page', + 'pages_copy_desination' => 'Copy Destination', + 'pages_copy_success' => 'Page successfully copied', + 'pages_permissions' => 'Page Permissions', + 'pages_permissions_success' => 'Page permissions updated', + 'pages_revision' => 'Revision', + 'pages_revisions' => 'Page Revisions', + 'pages_revisions_desc' => 'Listed below are all the past revisions of this page. You can look back upon, compare, and restore old page versions if permissions allow. The full history of the page may not be fully reflected here since, depending on system configuration, old revisions could be auto-deleted.', + 'pages_revisions_named' => 'Page Revisions for :pageName', + 'pages_revision_named' => 'Page Revision for :pageName', + 'pages_revision_restored_from' => 'Restored from #:id; :summary', + 'pages_revisions_created_by' => 'Created By', + 'pages_revisions_date' => 'Revision Date', + 'pages_revisions_number' => '#', + 'pages_revisions_sort_number' => 'Revision Number', + 'pages_revisions_numbered' => 'Revision #:id', + 'pages_revisions_numbered_changes' => 'Revision #:id Changes', + 'pages_revisions_editor' => 'Editor Type', + 'pages_revisions_changelog' => 'Changelog', + 'pages_revisions_changes' => 'Changes', + 'pages_revisions_current' => 'Current Version', + 'pages_revisions_preview' => 'Preview', + 'pages_revisions_restore' => 'Restore', + 'pages_revisions_none' => 'This page has no revisions', + 'pages_copy_link' => 'Copy Link', + 'pages_edit_content_link' => 'Jump to section in editor', + 'pages_pointer_enter_mode' => 'Enter section select mode', + 'pages_pointer_label' => 'Page Section Options', + 'pages_pointer_permalink' => 'Page Section Permalink', + 'pages_pointer_include_tag' => 'Page Section Include Tag', + 'pages_pointer_toggle_link' => 'Permalink mode, Press to show include tag', + 'pages_pointer_toggle_include' => 'Include tag mode, Press to show permalink', + 'pages_permissions_active' => 'Page Permissions Active', + 'pages_initial_revision' => 'Initial publish', + 'pages_references_update_revision' => 'System auto-update of internal links', + 'pages_initial_name' => 'New Page', + 'pages_editing_draft_notification' => 'You are currently editing a draft that was last saved :timeDiff.', + 'pages_draft_edited_notification' => 'This page has been updated by since that time. It is recommended that you discard this draft.', + 'pages_draft_page_changed_since_creation' => 'This page has been updated since this draft was created. It is recommended that you discard this draft or take care not to overwrite any page changes.', + 'pages_draft_edit_active' => [ + 'start_a' => ':count users have started editing this page', + 'start_b' => ':userName has started editing this page', + 'time_a' => 'since the page was last updated', + 'time_b' => 'in the last :minCount minutes', + 'message' => ':start :time. Take care not to overwrite each other\'s updates!', + ], + 'pages_draft_discarded' => 'Draft discarded! The editor has been updated with the current page content', + 'pages_draft_deleted' => 'Draft deleted! The editor has been updated with the current page content', + 'pages_specific' => 'Specific Page', + 'pages_is_template' => 'Page Template', + + // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', + 'page_tags' => 'Page Tags', + 'chapter_tags' => 'Chapter Tags', + 'book_tags' => 'Book Tags', + 'shelf_tags' => 'Shelf Tags', + 'tag' => 'Tag', + 'tags' => 'Tags', + 'tags_index_desc' => 'Tags can be applied to content within the system to apply a flexible form of categorization. Tags can have both a key and value, with the value being optional. Once applied, content can then be queried using the tag name and value.', + 'tag_name' => 'Tag Name', + 'tag_value' => 'Tag Value (Optional)', + 'tags_explain' => "Add some tags to better categorise your content. \n You can assign a value to a tag for more in-depth organisation.", + 'tags_add' => 'Add another tag', + 'tags_remove' => 'Remove this tag', + 'tags_usages' => 'Total tag usages', + 'tags_assigned_pages' => 'Assigned to Pages', + 'tags_assigned_chapters' => 'Assigned to Chapters', + 'tags_assigned_books' => 'Assigned to Books', + 'tags_assigned_shelves' => 'Assigned to Shelves', + 'tags_x_unique_values' => ':count unique values', + 'tags_all_values' => 'All values', + 'tags_view_tags' => 'View Tags', + 'tags_view_existing_tags' => 'View existing tags', + 'tags_list_empty_hint' => 'Tags can be assigned via the page editor sidebar or while editing the details of a book, chapter or shelf.', + 'attachments' => 'Attachments', + 'attachments_explain' => 'Upload some files or attach some links to display on your page. These are visible in the page sidebar.', + 'attachments_explain_instant_save' => 'Changes here are saved instantly.', + 'attachments_upload' => 'Upload File', + 'attachments_link' => 'Attach Link', + 'attachments_upload_drop' => 'Alternatively you can drag and drop a file here to upload it as an attachment.', + 'attachments_set_link' => 'Set Link', + 'attachments_delete' => 'Are you sure you want to delete this attachment?', + 'attachments_dropzone' => 'Drop files here to upload', + 'attachments_no_files' => 'No files have been uploaded', + 'attachments_explain_link' => 'You can attach a link if you\'d prefer not to upload a file. This can be a link to another page or a link to a file in the cloud.', + 'attachments_link_name' => 'Link Name', + 'attachment_link' => 'Attachment link', + 'attachments_link_url' => 'Link to file', + 'attachments_link_url_hint' => 'Url of site or file', + 'attach' => 'Attach', + 'attachments_insert_link' => 'Add Attachment Link to Page', + 'attachments_edit_file' => 'Edit File', + 'attachments_edit_file_name' => 'File Name', + 'attachments_edit_drop_upload' => 'Drop files or click here to upload and overwrite', + 'attachments_order_updated' => 'Attachment order updated', + 'attachments_updated_success' => 'Attachment details updated', + 'attachments_deleted' => 'Attachment deleted', + 'attachments_file_uploaded' => 'File successfully uploaded', + 'attachments_file_updated' => 'File successfully updated', + 'attachments_link_attached' => 'Link successfully attached to page', + 'templates' => 'Templates', + 'templates_set_as_template' => 'Page is a template', + 'templates_explain_set_as_template' => 'You can set this page as a template so its contents be utilized when creating other pages. Other users will be able to use this template if they have view permissions for this page.', + 'templates_replace_content' => 'Replace page content', + 'templates_append_content' => 'Append to page content', + 'templates_prepend_content' => 'Prepend to page content', + + // Profile View + 'profile_user_for_x' => 'User for :time', + 'profile_created_content' => 'Created Content', + 'profile_not_created_pages' => ':userName has not created any pages', + 'profile_not_created_chapters' => ':userName has not created any chapters', + 'profile_not_created_books' => ':userName has not created any books', + 'profile_not_created_shelves' => ':userName has not created any shelves', + + // Comments + 'comment' => 'Comment', + 'comments' => 'Comments', + 'comment_add' => 'Add Comment', + 'comment_placeholder' => 'Leave a comment here', + 'comment_count' => '{0} No Comments|{1} 1 Comment|[2,*] :count Comments', + 'comment_save' => 'Save Comment', + 'comment_new' => 'New Comment', + 'comment_created' => 'commented :createDiff', + 'comment_updated' => 'Updated :updateDiff by :username', + 'comment_updated_indicator' => 'Updated', + 'comment_deleted_success' => 'Comment deleted', + 'comment_created_success' => 'Comment added', + 'comment_updated_success' => 'Comment updated', + 'comment_delete_confirm' => 'Are you sure you want to delete this comment?', + 'comment_in_reply_to' => 'In reply to :commentId', + 'comment_editor_explain' => 'Here are the comments that have been left on this page. Comments can be added & managed when viewing the saved page.', + + // Revision + 'revision_delete_confirm' => 'Are you sure you want to delete this revision?', + 'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.', + 'revision_cannot_delete_latest' => 'Cannot delete the latest revision.', + + // Copy view + 'copy_consider' => 'Please consider the below when copying content.', + 'copy_consider_permissions' => 'Custom permission settings will not be copied.', + 'copy_consider_owner' => 'You will become the owner of all copied content.', + 'copy_consider_images' => 'Page image files will not be duplicated & the original images will retain their relation to the page they were originally uploaded to.', + 'copy_consider_attachments' => 'Page attachments will not be copied.', + 'copy_consider_access' => 'A change of location, owner or permissions may result in this content being accessible to those previously without access.', + + // Conversions + 'convert_to_shelf' => 'Convert to Shelf', + 'convert_to_shelf_contents_desc' => 'You can convert this book to a new shelf with the same contents. Chapters contained within this book will be converted to new books. If this book contains any pages, that are not in a chapter, this book will be renamed and contain such pages, and this book will become part of the new shelf.', + 'convert_to_shelf_permissions_desc' => 'Any permissions set on this book will be copied to the new shelf and to all new child books that don\'t have their own permissions enforced. Note that permissions on shelves do not auto-cascade to content within, as they do for books.', + 'convert_book' => 'Convert Book', + 'convert_book_confirm' => 'Are you sure you want to convert this book?', + 'convert_undo_warning' => 'This cannot be as easily undone.', + 'convert_to_book' => 'Convert to Book', + 'convert_to_book_desc' => 'You can convert this chapter to a new book with the same contents. Any permissions set on this chapter will be copied to the new book but any inherited permissions, from the parent book, will not be copied which could lead to a change of access control.', + 'convert_chapter' => 'Convert Chapter', + 'convert_chapter_confirm' => 'Are you sure you want to convert this chapter?', + + // References + 'references' => 'References', + 'references_none' => 'There are no tracked references to this item.', + 'references_to_desc' => 'Shown below are all the known pages in the system that link to this item.', + + // Watch Options + 'watch' => 'Watch', + 'watch_title_default' => 'Default Preferences', + 'watch_desc_default' => 'Revert watching to just your default notification preferences.', + 'watch_title_ignore' => 'Ignore', + 'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.', + 'watch_title_new' => 'New Pages', + 'watch_desc_new' => 'Notify when any new page is created within this item.', + 'watch_title_updates' => 'All Page Updates', + 'watch_desc_updates' => 'Notify upon all new pages and page changes.', + 'watch_desc_updates_page' => 'Notify upon all page changes.', + 'watch_title_comments' => 'All Page Updates & Comments', + 'watch_desc_comments' => 'Notify upon all new pages, page changes and new comments.', + 'watch_desc_comments_page' => 'Notify upon page changes and new comments.', + 'watch_change_default' => 'Change default notification preferences', + 'watch_detail_ignore' => 'Ignoring notifications', + 'watch_detail_new' => 'Watching for new pages', + 'watch_detail_updates' => 'Watching new pages and updates', + 'watch_detail_comments' => 'Watching new pages, updates & comments', + 'watch_detail_parent_book' => 'Watching via parent book', + 'watch_detail_parent_book_ignore' => 'Ignoring via parent book', + 'watch_detail_parent_chapter' => 'Watching via parent chapter', + 'watch_detail_parent_chapter_ignore' => 'Ignoring via parent chapter', +]; diff --git a/lang/fi/errors.php b/lang/fi/errors.php new file mode 100644 index 00000000000..8813cf90a2d --- /dev/null +++ b/lang/fi/errors.php @@ -0,0 +1,120 @@ + 'You do not have permission to access the requested page.', + 'permissionJson' => 'You do not have permission to perform the requested action.', + + // Auth + 'error_user_exists_different_creds' => 'A user with the email :email already exists but with different credentials.', + 'email_already_confirmed' => 'Email has already been confirmed, Try logging in.', + 'email_confirmation_invalid' => 'This confirmation token is not valid or has already been used, Please try registering again.', + 'email_confirmation_expired' => 'The confirmation token has expired, A new confirmation email has been sent.', + 'email_confirmation_awaiting' => 'The email address for the account in use needs to be confirmed', + 'ldap_fail_anonymous' => 'LDAP access failed using anonymous bind', + 'ldap_fail_authed' => 'LDAP access failed using given dn & password details', + 'ldap_extension_not_installed' => 'LDAP PHP extension not installed', + 'ldap_cannot_connect' => 'Cannot connect to ldap server, Initial connection failed', + 'saml_already_logged_in' => 'Already logged in', + 'saml_user_not_registered' => 'The user :name is not registered and automatic registration is disabled', + 'saml_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system', + 'saml_invalid_response_id' => 'The request from the external authentication system is not recognised by a process started by this application. Navigating back after a login could cause this issue.', + 'saml_fail_authed' => 'Login using :system failed, system did not provide successful authorization', + 'oidc_already_logged_in' => 'Already logged in', + 'oidc_user_not_registered' => 'The user :name is not registered and automatic registration is disabled', + 'oidc_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system', + 'oidc_fail_authed' => 'Login using :system failed, system did not provide successful authorization', + 'social_no_action_defined' => 'No action defined', + 'social_login_bad_response' => "Error received during :socialAccount login: \n:error", + 'social_account_in_use' => 'This :socialAccount account is already in use, Try logging in via the :socialAccount option.', + 'social_account_email_in_use' => 'The email :email is already in use. If you already have an account you can connect your :socialAccount account from your profile settings.', + 'social_account_existing' => 'This :socialAccount is already attached to your profile.', + 'social_account_already_used_existing' => 'This :socialAccount account is already used by another user.', + 'social_account_not_used' => 'This :socialAccount account is not linked to any users. Please attach it in your profile settings. ', + 'social_account_register_instructions' => 'If you do not yet have an account, You can register an account using the :socialAccount option.', + 'social_driver_not_found' => 'Social driver not found', + 'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.', + 'invite_token_expired' => 'This invitation link has expired. You can instead try to reset your account password.', + + // System + 'path_not_writable' => 'File path :filePath could not be uploaded to. Ensure it is writable to the server.', + 'cannot_get_image_from_url' => 'Cannot get image from :url', + 'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.', + 'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', + 'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.', + + // Drawing & Images + 'image_upload_error' => 'An error occurred uploading the image', + 'image_upload_type_error' => 'The image type being uploaded is invalid', + 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', + 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', + + // Attachments + 'attachment_not_found' => 'Attachment not found', + 'attachment_upload_error' => 'An error occurred uploading the attachment file', + + // Pages + 'page_draft_autosave_fail' => 'Failed to save draft. Ensure you have internet connection before saving this page', + 'page_draft_delete_fail' => 'Failed to delete page draft and fetch current page saved content', + 'page_custom_home_deletion' => 'Cannot delete a page while it is set as a homepage', + + // Entities + 'entity_not_found' => 'Entity not found', + 'bookshelf_not_found' => 'Shelf not found', + 'book_not_found' => 'Book not found', + 'page_not_found' => 'Page not found', + 'chapter_not_found' => 'Chapter not found', + 'selected_book_not_found' => 'The selected book was not found', + 'selected_book_chapter_not_found' => 'The selected Book or Chapter was not found', + 'guests_cannot_save_drafts' => 'Guests cannot save drafts', + + // Users + 'users_cannot_delete_only_admin' => 'You cannot delete the only admin', + 'users_cannot_delete_guest' => 'You cannot delete the guest user', + + // Roles + 'role_cannot_be_edited' => 'This role cannot be edited', + 'role_system_cannot_be_deleted' => 'This role is a system role and cannot be deleted', + 'role_registration_default_cannot_delete' => 'This role cannot be deleted while set as the default registration role', + 'role_cannot_remove_only_admin' => 'This user is the only user assigned to the administrator role. Assign the administrator role to another user before attempting to remove it here.', + + // Comments + 'comment_list' => 'An error occurred while fetching the comments.', + 'cannot_add_comment_to_draft' => 'You cannot add comments to a draft.', + 'comment_add' => 'An error occurred while adding / updating the comment.', + 'comment_delete' => 'An error occurred while deleting the comment.', + 'empty_comment' => 'Cannot add an empty comment.', + + // Error pages + '404_page_not_found' => 'Page Not Found', + 'sorry_page_not_found' => 'Sorry, The page you were looking for could not be found.', + 'sorry_page_not_found_permission_warning' => 'If you expected this page to exist, you might not have permission to view it.', + 'image_not_found' => 'Image Not Found', + 'image_not_found_subtitle' => 'Sorry, The image file you were looking for could not be found.', + 'image_not_found_details' => 'If you expected this image to exist it might have been deleted.', + 'return_home' => 'Return to home', + 'error_occurred' => 'An Error Occurred', + 'app_down' => ':appName is down right now', + 'back_soon' => 'It will be back up soon.', + + // API errors + 'api_no_authorization_found' => 'No authorization token found on the request', + 'api_bad_authorization_format' => 'An authorization token was found on the request but the format appeared incorrect', + 'api_user_token_not_found' => 'No matching API token was found for the provided authorization token', + 'api_incorrect_token_secret' => 'The secret provided for the given used API token is incorrect', + 'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls', + 'api_user_token_expired' => 'The authorization token used has expired', + + // Settings & Maintenance + 'maintenance_test_email_failure' => 'Error thrown when sending a test email:', + + // HTTP errors + 'http_ssr_url_no_match' => 'The URL does not match the configured allowed SSR hosts', +]; diff --git a/lang/fi/notifications.php b/lang/fi/notifications.php new file mode 100644 index 00000000000..5539ae9a9d8 --- /dev/null +++ b/lang/fi/notifications.php @@ -0,0 +1,26 @@ + 'New comment on page: :pageName', + 'new_comment_intro' => 'A user has commented on a page in :appName:', + 'new_page_subject' => 'New page: :pageName', + 'new_page_intro' => 'A new page has been created in :appName:', + 'updated_page_subject' => 'Updated page: :pageName', + 'updated_page_intro' => 'A page has been updated in :appName:', + 'updated_page_debounce' => 'To prevent a mass of notifications, for a while you won\'t be sent notifications for further edits to this page by the same editor.', + + 'detail_page_name' => 'Page Name:', + 'detail_commenter' => 'Commenter:', + 'detail_comment' => 'Comment:', + 'detail_created_by' => 'Created By:', + 'detail_updated_by' => 'Updated By:', + + 'action_view_comment' => 'View Comment', + 'action_view_page' => 'View Page', + + 'footer_reason' => 'This notification was sent to you because :link cover this type of activity for this item.', + 'footer_reason_link' => 'your notification preferences', +]; diff --git a/lang/fi/pagination.php b/lang/fi/pagination.php new file mode 100644 index 00000000000..85bd12fc319 --- /dev/null +++ b/lang/fi/pagination.php @@ -0,0 +1,12 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/fi/passwords.php b/lang/fi/passwords.php new file mode 100644 index 00000000000..b408f3c2fda --- /dev/null +++ b/lang/fi/passwords.php @@ -0,0 +1,15 @@ + 'Passwords must be at least eight characters and match the confirmation.', + 'user' => "We can't find a user with that e-mail address.", + 'token' => 'The password reset token is invalid for this email address.', + 'sent' => 'We have e-mailed your password reset link!', + 'reset' => 'Your password has been reset!', + +]; diff --git a/lang/fi/preferences.php b/lang/fi/preferences.php new file mode 100644 index 00000000000..2b88f9671ff --- /dev/null +++ b/lang/fi/preferences.php @@ -0,0 +1,51 @@ + 'My Account', + + 'shortcuts' => 'Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', + 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', + 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', + 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', + 'shortcuts_section_navigation' => 'Navigation', + 'shortcuts_section_actions' => 'Common Actions', + 'shortcuts_save' => 'Save Shortcuts', + 'shortcuts_overlay_desc' => 'Note: When shortcuts are enabled a helper overlay is available via pressing "?" which will highlight the available shortcuts for actions currently visible on the screen.', + 'shortcuts_update_success' => 'Shortcut preferences have been updated!', + 'shortcuts_overview_desc' => 'Manage keyboard shortcuts you can use to navigate the system user interface.', + + 'notifications' => 'Notification Preferences', + 'notifications_desc' => 'Control the email notifications you receive when certain activity is performed within the system.', + 'notifications_opt_own_page_changes' => 'Notify upon changes to pages I own', + 'notifications_opt_own_page_comments' => 'Notify upon comments on pages I own', + 'notifications_opt_comment_replies' => 'Notify upon replies to my comments', + 'notifications_save' => 'Save Preferences', + 'notifications_update_success' => 'Notification preferences have been updated!', + 'notifications_watched' => 'Watched & Ignored Items', + 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', + + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', +]; diff --git a/lang/fi/settings.php b/lang/fi/settings.php new file mode 100644 index 00000000000..c5ca662c37d --- /dev/null +++ b/lang/fi/settings.php @@ -0,0 +1,328 @@ + 'Settings', + 'settings_save' => 'Save Settings', + 'system_version' => 'System Version', + 'categories' => 'Categories', + + // App Settings + 'app_customization' => 'Customization', + 'app_features_security' => 'Features & Security', + 'app_name' => 'Application Name', + 'app_name_desc' => 'This name is shown in the header and in any system-sent emails.', + 'app_name_header' => 'Show name in header', + 'app_public_access' => 'Public Access', + 'app_public_access_desc' => 'Enabling this option will allow visitors, that are not logged-in, to access content in your BookStack instance.', + 'app_public_access_desc_guest' => 'Access for public visitors can be controlled through the "Guest" user.', + 'app_public_access_toggle' => 'Allow public access', + 'app_public_viewing' => 'Allow public viewing?', + 'app_secure_images' => 'Higher Security Image Uploads', + 'app_secure_images_toggle' => 'Enable higher security image uploads', + 'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', + 'app_custom_html' => 'Custom HTML Head Content', + 'app_custom_html_desc' => 'Any content added here will be inserted into the bottom of the section of every page. This is handy for overriding styles or adding analytics code.', + 'app_custom_html_disabled_notice' => 'Custom HTML head content is disabled on this settings page to ensure any breaking changes can be reverted.', + 'app_logo' => 'Application Logo', + 'app_logo_desc' => 'This is used in the application header bar, among other areas. This image should be 86px in height. Large images will be scaled down.', + 'app_icon' => 'Application Icon', + 'app_icon_desc' => 'This icon is used for browser tabs and shortcut icons. This should be a 256px square PNG image.', + 'app_homepage' => 'Application Homepage', + 'app_homepage_desc' => 'Select a view to show on the homepage instead of the default view. Page permissions are ignored for selected pages.', + 'app_homepage_select' => 'Select a page', + 'app_footer_links' => 'Footer Links', + 'app_footer_links_desc' => 'Add links to show within the site footer. These will be displayed at the bottom of most pages, including those that do not require login. You can use a label of "trans::" to use system-defined translations. For example: Using "trans::common.privacy_policy" will provide the translated text "Privacy Policy" and "trans::common.terms_of_service" will provide the translated text "Terms of Service".', + 'app_footer_links_label' => 'Link Label', + 'app_footer_links_url' => 'Link URL', + 'app_footer_links_add' => 'Add Footer Link', + 'app_disable_comments' => 'Disable Comments', + 'app_disable_comments_toggle' => 'Disable comments', + 'app_disable_comments_desc' => 'Disables comments across all pages in the application.
Existing comments are not shown.', + + // Color settings + 'color_scheme' => 'Application Color Scheme', + 'color_scheme_desc' => 'Set the colors to use in the application user interface. Colors can be configured separately for dark and light modes to best fit the theme and ensure legibility.', + 'ui_colors_desc' => 'Set the application primary color and default link color. The primary color is mainly used for the header banner, buttons and interface decorations. The default link color is used for text-based links and actions, both within written content and in the application interface.', + 'app_color' => 'Primary Color', + 'link_color' => 'Default Link Color', + 'content_colors_desc' => 'Set colors for all elements in the page organisation hierarchy. Choosing colors with a similar brightness to the default colors is recommended for readability.', + 'bookshelf_color' => 'Shelf Color', + 'book_color' => 'Book Color', + 'chapter_color' => 'Chapter Color', + 'page_color' => 'Page Color', + 'page_draft_color' => 'Page Draft Color', + + // Registration Settings + 'reg_settings' => 'Registration', + 'reg_enable' => 'Enable Registration', + 'reg_enable_toggle' => 'Enable registration', + 'reg_enable_desc' => 'When registration is enabled user will be able to sign themselves up as an application user. Upon registration they are given a single, default user role.', + 'reg_default_role' => 'Default user role after registration', + 'reg_enable_external_warning' => 'The option above is ignored while external LDAP or SAML authentication is active. User accounts for non-existing members will be auto-created if authentication, against the external system in use, is successful.', + 'reg_email_confirmation' => 'Email Confirmation', + 'reg_email_confirmation_toggle' => 'Require email confirmation', + 'reg_confirm_email_desc' => 'If domain restriction is used then email confirmation will be required and this option will be ignored.', + 'reg_confirm_restrict_domain' => 'Domain Restriction', + 'reg_confirm_restrict_domain_desc' => 'Enter a comma separated list of email domains you would like to restrict registration to. Users will be sent an email to confirm their address before being allowed to interact with the application.
Note that users will be able to change their email addresses after successful registration.', + 'reg_confirm_restrict_domain_placeholder' => 'No restriction set', + + // Maintenance settings + 'maint' => 'Maintenance', + 'maint_image_cleanup' => 'Cleanup Images', + 'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.', + 'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions', + 'maint_image_cleanup_run' => 'Run Cleanup', + 'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?', + 'maint_image_cleanup_success' => ':count potentially unused images found and deleted!', + 'maint_image_cleanup_nothing_found' => 'No unused images found, Nothing deleted!', + 'maint_send_test_email' => 'Send a Test Email', + 'maint_send_test_email_desc' => 'This sends a test email to your email address specified in your profile.', + 'maint_send_test_email_run' => 'Send test email', + 'maint_send_test_email_success' => 'Email sent to :address', + 'maint_send_test_email_mail_subject' => 'Test Email', + 'maint_send_test_email_mail_greeting' => 'Email delivery seems to work!', + 'maint_send_test_email_mail_text' => 'Congratulations! As you received this email notification, your email settings seem to be configured properly.', + 'maint_recycle_bin_desc' => 'Deleted shelves, books, chapters & pages are sent to the recycle bin so they can be restored or permanently deleted. Older items in the recycle bin may be automatically removed after a while depending on system configuration.', + 'maint_recycle_bin_open' => 'Open Recycle Bin', + 'maint_regen_references' => 'Regenerate References', + 'maint_regen_references_desc' => 'This action will rebuild the cross-item reference index within the database. This is usually handled automatically but this action can be useful to index old content or content added via unofficial methods.', + 'maint_regen_references_success' => 'Reference index has been regenerated!', + 'maint_timeout_command_note' => 'Note: This action can take time to run, which can lead to timeout issues in some web environments. As an alternative, this action be performed using a terminal command.', + + // Recycle Bin + 'recycle_bin' => 'Recycle Bin', + 'recycle_bin_desc' => 'Here you can restore items that have been deleted or choose to permanently remove them from the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.', + 'recycle_bin_deleted_item' => 'Deleted Item', + 'recycle_bin_deleted_parent' => 'Parent', + 'recycle_bin_deleted_by' => 'Deleted By', + 'recycle_bin_deleted_at' => 'Deletion Time', + 'recycle_bin_permanently_delete' => 'Permanently Delete', + 'recycle_bin_restore' => 'Restore', + 'recycle_bin_contents_empty' => 'The recycle bin is currently empty', + 'recycle_bin_empty' => 'Empty Recycle Bin', + 'recycle_bin_empty_confirm' => 'This will permanently destroy all items in the recycle bin including content contained within each item. Are you sure you want to empty the recycle bin?', + 'recycle_bin_destroy_confirm' => 'This action will permanently delete this item, along with any child elements listed below, from the system and you will not be able to restore this content. Are you sure you want to permanently delete this item?', + 'recycle_bin_destroy_list' => 'Items to be Destroyed', + 'recycle_bin_restore_list' => 'Items to be Restored', + 'recycle_bin_restore_confirm' => 'This action will restore the deleted item, including any child elements, to their original location. If the original location has since been deleted, and is now in the recycle bin, the parent item will also need to be restored.', + 'recycle_bin_restore_deleted_parent' => 'The parent of this item has also been deleted. These will remain deleted until that parent is also restored.', + 'recycle_bin_restore_parent' => 'Restore Parent', + 'recycle_bin_destroy_notification' => 'Deleted :count total items from the recycle bin.', + 'recycle_bin_restore_notification' => 'Restored :count total items from the recycle bin.', + + // Audit Log + 'audit' => 'Audit Log', + 'audit_desc' => 'This audit log displays a list of activities tracked in the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.', + 'audit_event_filter' => 'Event Filter', + 'audit_event_filter_no_filter' => 'No Filter', + 'audit_deleted_item' => 'Deleted Item', + 'audit_deleted_item_name' => 'Name: :name', + 'audit_table_user' => 'User', + 'audit_table_event' => 'Event', + 'audit_table_related' => 'Related Item or Detail', + 'audit_table_ip' => 'IP Address', + 'audit_table_date' => 'Activity Date', + 'audit_date_from' => 'Date Range From', + 'audit_date_to' => 'Date Range To', + + // Role Settings + 'roles' => 'Roles', + 'role_user_roles' => 'User Roles', + 'roles_index_desc' => 'Roles are used to group users & provide system permission to their members. When a user is a member of multiple roles the privileges granted will stack and the user will inherit all abilities.', + 'roles_x_users_assigned' => ':count user assigned|:count users assigned', + 'roles_x_permissions_provided' => ':count permission|:count permissions', + 'roles_assigned_users' => 'Assigned Users', + 'roles_permissions_provided' => 'Provided Permissions', + 'role_create' => 'Create New Role', + 'role_delete' => 'Delete Role', + 'role_delete_confirm' => 'This will delete the role with the name \':roleName\'.', + 'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.', + 'role_delete_no_migration' => "Don't migrate users", + 'role_delete_sure' => 'Are you sure you want to delete this role?', + 'role_edit' => 'Edit Role', + 'role_details' => 'Role Details', + 'role_name' => 'Role Name', + 'role_desc' => 'Short Description of Role', + 'role_mfa_enforced' => 'Requires Multi-Factor Authentication', + 'role_external_auth_id' => 'External Authentication IDs', + 'role_system' => 'System Permissions', + 'role_manage_users' => 'Manage users', + 'role_manage_roles' => 'Manage roles & role permissions', + 'role_manage_entity_permissions' => 'Manage all book, chapter & page permissions', + 'role_manage_own_entity_permissions' => 'Manage permissions on own book, chapter & pages', + 'role_manage_page_templates' => 'Manage page templates', + 'role_access_api' => 'Access system API', + 'role_manage_settings' => 'Manage app settings', + 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', + 'role_notifications' => 'Receive & manage notifications', + 'role_asset' => 'Asset Permissions', + 'roles_system_warning' => 'Be aware that access to any of the above three permissions can allow a user to alter their own privileges or the privileges of others in the system. Only assign roles with these permissions to trusted users.', + 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', + 'role_asset_admins' => 'Admins are automatically given access to all content but these options may show or hide UI options.', + 'role_asset_image_view_note' => 'This relates to visibility within the image manager. Actual access of uploaded image files will be dependant upon system image storage option.', + 'role_all' => 'All', + 'role_own' => 'Own', + 'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to', + 'role_save' => 'Save Role', + 'role_users' => 'Users in this role', + 'role_users_none' => 'No users are currently assigned to this role', + + // Users + 'users' => 'Users', + 'users_index_desc' => 'Create & manage individual user accounts within the system. User accounts are used for login and attribution of content & activity. Access permissions are primarily role-based but user content ownership, among other factors, may also affect permissions & access.', + 'user_profile' => 'User Profile', + 'users_add_new' => 'Add New User', + 'users_search' => 'Search Users', + 'users_latest_activity' => 'Latest Activity', + 'users_details' => 'User Details', + 'users_details_desc' => 'Set a display name and an email address for this user. The email address will be used for logging into the application.', + 'users_details_desc_no_email' => 'Set a display name for this user so others can recognise them.', + 'users_role' => 'User Roles', + 'users_role_desc' => 'Select which roles this user will be assigned to. If a user is assigned to multiple roles the permissions from those roles will stack and they will receive all abilities of the assigned roles.', + 'users_password' => 'User Password', + 'users_password_desc' => 'Set a password used to log-in to the application. This must be at least 8 characters long.', + 'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.', + 'users_send_invite_option' => 'Send user invite email', + 'users_external_auth_id' => 'External Authentication ID', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', + 'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.', + 'users_delete' => 'Delete User', + 'users_delete_named' => 'Delete user :userName', + 'users_delete_warning' => 'This will fully delete this user with the name \':userName\' from the system.', + 'users_delete_confirm' => 'Are you sure you want to delete this user?', + 'users_migrate_ownership' => 'Migrate Ownership', + 'users_migrate_ownership_desc' => 'Select a user here if you want another user to become the owner of all items currently owned by this user.', + 'users_none_selected' => 'No user selected', + 'users_edit' => 'Edit User', + 'users_edit_profile' => 'Edit Profile', + 'users_avatar' => 'User Avatar', + 'users_avatar_desc' => 'Select an image to represent this user. This should be approx 256px square.', + 'users_preferred_language' => 'Preferred Language', + 'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.', + 'users_social_accounts' => 'Social Accounts', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', + 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not revoke previously authorized access. Revoke access from your profile settings on the connected social account.', + 'users_social_connect' => 'Connect Account', + 'users_social_disconnect' => 'Disconnect Account', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', + 'users_social_connected' => ':socialAccount account was successfully attached to your profile.', + 'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.', + 'users_api_tokens' => 'API Tokens', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', + 'users_api_tokens_none' => 'No API tokens have been created for this user', + 'users_api_tokens_create' => 'Create Token', + 'users_api_tokens_expires' => 'Expires', + 'users_api_tokens_docs' => 'API Documentation', + 'users_mfa' => 'Multi-Factor Authentication', + 'users_mfa_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', + 'users_mfa_x_methods' => ':count method configured|:count methods configured', + 'users_mfa_configure' => 'Configure Methods', + + // API Tokens + 'user_api_token_create' => 'Create API Token', + 'user_api_token_name' => 'Name', + 'user_api_token_name_desc' => 'Give your token a readable name as a future reminder of its intended purpose.', + 'user_api_token_expiry' => 'Expiry Date', + 'user_api_token_expiry_desc' => 'Set a date at which this token expires. After this date, requests made using this token will no longer work. Leaving this field blank will set an expiry 100 years into the future.', + 'user_api_token_create_secret_message' => 'Immediately after creating this token a "Token ID" & "Token Secret" will be generated and displayed. The secret will only be shown a single time so be sure to copy the value to somewhere safe and secure before proceeding.', + 'user_api_token' => 'API Token', + 'user_api_token_id' => 'Token ID', + 'user_api_token_id_desc' => 'This is a non-editable system generated identifier for this token which will need to be provided in API requests.', + 'user_api_token_secret' => 'Token Secret', + 'user_api_token_secret_desc' => 'This is a system generated secret for this token which will need to be provided in API requests. This will only be displayed this one time so copy this value to somewhere safe and secure.', + 'user_api_token_created' => 'Token created :timeAgo', + 'user_api_token_updated' => 'Token updated :timeAgo', + 'user_api_token_delete' => 'Delete Token', + 'user_api_token_delete_warning' => 'This will fully delete this API token with the name \':tokenName\' from the system.', + 'user_api_token_delete_confirm' => 'Are you sure you want to delete this API token?', + + // Webhooks + 'webhooks' => 'Webhooks', + 'webhooks_index_desc' => 'Webhooks are a way to send data to external URLs when certain actions and events occur within the system which allows event-based integration with external platforms such as messaging or notification systems.', + 'webhooks_x_trigger_events' => ':count trigger event|:count trigger events', + 'webhooks_create' => 'Create New Webhook', + 'webhooks_none_created' => 'No webhooks have yet been created.', + 'webhooks_edit' => 'Edit Webhook', + 'webhooks_save' => 'Save Webhook', + 'webhooks_details' => 'Webhook Details', + 'webhooks_details_desc' => 'Provide a user friendly name and a POST endpoint as a location for the webhook data to be sent to.', + 'webhooks_events' => 'Webhook Events', + 'webhooks_events_desc' => 'Select all the events that should trigger this webhook to be called.', + 'webhooks_events_warning' => 'Keep in mind that these events will be triggered for all selected events, even if custom permissions are applied. Ensure that use of this webhook won\'t expose confidential content.', + 'webhooks_events_all' => 'All system events', + 'webhooks_name' => 'Webhook Name', + 'webhooks_timeout' => 'Webhook Request Timeout (Seconds)', + 'webhooks_endpoint' => 'Webhook Endpoint', + 'webhooks_active' => 'Webhook Active', + 'webhook_events_table_header' => 'Events', + 'webhooks_delete' => 'Delete Webhook', + 'webhooks_delete_warning' => 'This will fully delete this webhook, with the name \':webhookName\', from the system.', + 'webhooks_delete_confirm' => 'Are you sure you want to delete this webhook?', + 'webhooks_format_example' => 'Webhook Format Example', + 'webhooks_format_example_desc' => 'Webhook data is sent as a POST request to the configured endpoint as JSON following the format below. The "related_item" and "url" properties are optional and will depend on the type of event triggered.', + 'webhooks_status' => 'Webhook Status', + 'webhooks_last_called' => 'Last Called:', + 'webhooks_last_errored' => 'Last Errored:', + 'webhooks_last_error_message' => 'Last Error Message:', + + + //! If editing translations files directly please ignore this in all + //! languages apart from en. Content will be auto-copied from en. + //!//////////////////////////////// + 'language_select' => [ + 'en' => 'English', + 'ar' => 'العربية', + 'bg' => 'Bǎlgarski', + 'bs' => 'Bosanski', + 'ca' => 'Català', + 'cs' => 'Česky', + 'da' => 'Dansk', + 'de' => 'Deutsch (Sie)', + 'de_informal' => 'Deutsch (Du)', + 'el' => 'ελληνικά', + 'es' => 'Español', + 'es_AR' => 'Español Argentina', + 'et' => 'Eesti keel', + 'eu' => 'Euskara', + 'fa' => 'فارسی', + 'fr' => 'Français', + 'he' => 'עברית', + 'hr' => 'Hrvatski', + 'hu' => 'Magyar', + 'id' => 'Bahasa Indonesia', + 'it' => 'Italian', + 'ja' => '日本語', + 'ko' => '한국어', + 'lt' => 'Lietuvių Kalba', + 'lv' => 'Latviešu Valoda', + 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', + 'pl' => 'Polski', + 'pt' => 'Português', + 'pt_BR' => 'Português do Brasil', + 'ro' => 'Română', + 'ru' => 'Русский', + 'sk' => 'Slovensky', + 'sl' => 'Slovenščina', + 'sv' => 'Svenska', + 'tr' => 'Türkçe', + 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', + 'vi' => 'Tiếng Việt', + 'zh_CN' => '简体中文', + 'zh_TW' => '繁體中文', + ], + //!//////////////////////////////// +]; diff --git a/lang/fi/validation.php b/lang/fi/validation.php new file mode 100644 index 00000000000..2a676c7c4cc --- /dev/null +++ b/lang/fi/validation.php @@ -0,0 +1,117 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'backup_codes' => 'The provided code is not valid or has already been used.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values', + 'file' => 'The :attribute must be provided as a valid file.', + 'filled' => 'The :attribute field is required.', + 'gt' => [ + 'numeric' => 'The :attribute must be greater than :value.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'string' => 'The :attribute must be greater than :value characters.', + 'array' => 'The :attribute must have more than :value items.', + ], + 'gte' => [ + 'numeric' => 'The :attribute must be greater than or equal :value.', + 'file' => 'The :attribute must be greater than or equal :value kilobytes.', + 'string' => 'The :attribute must be greater than or equal :value characters.', + 'array' => 'The :attribute must have :value items or more.', + ], + 'exists' => 'The selected :attribute is invalid.', + 'image' => 'The :attribute must be an image.', + 'image_extension' => 'The :attribute must have a valid & supported image extension.', + 'in' => 'The selected :attribute is invalid.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'numeric' => 'The :attribute must be less than :value.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'string' => 'The :attribute must be less than :value characters.', + 'array' => 'The :attribute must have less than :value items.', + ], + 'lte' => [ + 'numeric' => 'The :attribute must be less than or equal :value.', + 'file' => 'The :attribute must be less than or equal :value kilobytes.', + 'string' => 'The :attribute must be less than or equal :value characters.', + 'array' => 'The :attribute must not have more than :value items.', + ], + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'safe_url' => 'The provided link may not be safe.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'totp' => 'The provided code is not valid or has expired.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + 'uploaded' => 'The file could not be uploaded. The server may not accept files of this size.', + + // Custom validation lines + 'custom' => [ + 'password-confirm' => [ + 'required_with' => 'Password confirmation required', + ], + ], + + // Custom validation attributes + 'attributes' => [], +]; diff --git a/lang/fr/common.php b/lang/fr/common.php index fdb7c0daeb3..2f54ed7fe15 100644 --- a/lang/fr/common.php +++ b/lang/fr/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Effacer le filtre', 'download' => 'Télécharger', 'open_in_tab' => 'Ouvrir dans un onglet', + 'open' => 'Ouvert', // Sort Options 'sort_options' => 'Options de tri', diff --git a/lang/fr/components.php b/lang/fr/components.php index 98f38843327..379fba2f73f 100644 --- a/lang/fr/components.php +++ b/lang/fr/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Image supprimée avec succès', 'image_replace' => 'Remplacer l\'image', 'image_replace_success' => 'Image mise à jour avec succès', + 'image_rebuild_thumbs' => 'Régénérer les variantes de taille', + 'image_rebuild_thumbs_success' => 'Les variantes de taille d\'image ont été reconstruites avec succès !', // Code Editor 'code_editor' => 'Éditer le code', diff --git a/lang/fr/entities.php b/lang/fr/entities.php index 673ee1a2aed..5b813b4f6d8 100644 --- a/lang/fr/entities.php +++ b/lang/fr/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Modèle de page', // Editor Sidebar + 'toggle_sidebar' => 'Afficher/masquer la barre latérale', 'page_tags' => 'Mots-clés de la page', 'chapter_tags' => 'Mots-clés du chapitre', 'book_tags' => 'Mots-clés du livre', diff --git a/lang/fr/errors.php b/lang/fr/errors.php index 03db2e95a26..ce4ae1bb590 100644 --- a/lang/fr/errors.php +++ b/lang/fr/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Impossible de récupérer l\'image depuis :url', 'cannot_create_thumbs' => 'Le serveur ne peut pas créer de miniature, vérifier que l\'extension PHP GD est installée.', 'server_upload_limit' => 'La taille du fichier est trop grande.', + 'server_post_limit' => 'Le serveur ne peut pas recevoir la quantité de données fournie. Réessayez avec moins de données ou un fichier plus petit.', 'uploaded' => 'Le serveur n\'autorise pas l\'envoi d\'un fichier de cette taille. Veuillez essayer avec une taille de fichier réduite.', // Drawing & Images 'image_upload_error' => 'Une erreur est survenue pendant l\'envoi de l\'image', 'image_upload_type_error' => 'Le format de l\'image envoyée n\'est pas valide', 'image_upload_replace_type' => 'Le fichier image doit être remplacé par une image du même type', + 'image_upload_memory_limit' => 'Impossible de gérer le chargement de l\'image et/ou la création de miniatures en raison de limitations de ressources du système.', + 'image_thumbnail_memory_limit' => 'Impossible de créer les variations de taille d\'image en raison des limitations de ressources du système.', + 'image_gallery_thumbnail_memory_limit' => 'Impossible de créer les vignettes de la galerie en raison de limitations de ressources du système.', 'drawing_data_not_found' => 'Les données de dessin n\'ont pas pu être chargées. Le fichier de dessin peut ne plus exister ou vous n\'avez pas la permission d\'y accéder.', // Attachments diff --git a/lang/fr/preferences.php b/lang/fr/preferences.php index 771fee3bd04..f26972d7c36 100644 --- a/lang/fr/preferences.php +++ b/lang/fr/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Préférences', + 'my_account' => 'Mon compte', 'shortcuts' => 'Raccourcis', - 'shortcuts_interface' => 'Raccourcis clavier', + 'shortcuts_interface' => 'Préférences de raccourci de l\'interface utilisateur', 'shortcuts_toggle_desc' => 'Ici vous pouvez activer ou désactiver les raccourcis clavier, utilisés pour la navigation et les actions.', 'shortcuts_customize_desc' => 'Vous pouvez personnaliser chaque raccourci ci-dessous. Il vous suffit d\'appuyer sur la combinaison de touche choisie après avoir sélectionné l\'entrée pour un raccourci.', 'shortcuts_toggle_label' => 'Raccourcis clavier activés', @@ -22,12 +22,30 @@ 'notifications' => 'Préférences de notification', 'notifications_desc' => 'Contrôlez les notifications par e-mail que vous recevez lorsque certaines activités sont effectuées dans le système.', 'notifications_opt_own_page_changes' => 'Notifier lors des modifications des pages que je possède', - 'notifications_opt_own_page_comments' => 'Notifier lors des modifications des pages que je possède', + 'notifications_opt_own_page_comments' => 'Notifier lorsque les pages que je possède sont commentées', 'notifications_opt_comment_replies' => 'Notifier les réponses à mes commentaires', 'notifications_save' => 'Enregistrer les préférences', 'notifications_update_success' => 'Les préférences de notification ont été mises à jour !', 'notifications_watched' => 'Éléments surveillés et ignorés', 'notifications_watched_desc' => ' Voici les éléments qui ont des préférences de surveillance personnalisées appliquées. Pour mettre à jour vos préférences pour celles-ci, consultez l\'élément puis trouvez les options de surveillance dans la barre latérale.', - 'profile_overview_desc' => ' Gérer les détails de votre profil utilisateur y compris la langue préférée et les options d\'authentification.', + 'auth' => 'Accès et sécurité', + 'auth_change_password' => 'Changer le mot de passe', + 'auth_change_password_desc' => 'Changez le mot de passe que vous utilisez pour vous connecter à l\'application. Il doit comporter au moins 8 caractères.', + 'auth_change_password_success' => 'Le mot de passe a été mis à jour !', + + 'profile' => 'Détails du profil', + 'profile_desc' => 'Gérez les détails de votre compte qui représentent comment les autres utilisateurs vous voient, en plus d\'autres détails utilisés pour la communication et la personnalisation du système.', + 'profile_view_public' => 'Voir le profil public', + 'profile_name_desc' => 'Configurez votre nom d\'affichage qui sera visible par les autres utilisateurs à travers l\'activité que vous effectuez ainsi que le contenu que vous possédez.', + 'profile_email_desc' => 'Ce courriel sera utilisé pour les notifications et, en fonction de l\'authentification active du système, l\'accès au système.', + 'profile_email_no_permission' => 'Malheureusement, vous n\'avez pas la permission de changer votre adresse e-mail. Si vous souhaitez la modifier, demandez à un administrateur de le faire pour vous.', + 'profile_avatar_desc' => 'Sélectionnez une image qui sera utilisée pour vous représenter aux autres utilisateurs. Idéalement, cette image devrait être carrée et d\'environ 256 pixels de largeur et de hauteur.', + 'profile_admin_options' => 'Options Administrateur', + 'profile_admin_options_desc' => 'Des options administrateurs supplémentaires, comme celles permettant de gérer les affectations de rôles, peuvent être trouvées pour votre compte dans la zone "Paramètres > Utilisateurs" de l\'application.', + + 'delete_account' => 'Supprimer le compte', + 'delete_my_account' => 'Supprimer mon compte', + 'delete_my_account_desc' => 'Cela supprimera complètement votre compte utilisateur du système. Vous ne pourrez pas récupérer ce compte ou annuler cette action. Le contenu que vous avez créé, comme les pages créées et les images téléchargées, sera sauvegardé.', + 'delete_my_account_warning' => 'Êtes-vous sûr(e) de vouloir supprimer votre compte ?', ]; diff --git a/lang/fr/settings.php b/lang/fr/settings.php index 3a60a447625..731770e8342 100644 --- a/lang/fr/settings.php +++ b/lang/fr/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Vous pouvez choisir d\'envoyer à cet utilisateur un e-mail d\'invitation qui lui permet de définir son propre mot de passe, sinon vous pouvez définir son mot de passe vous-même.', 'users_send_invite_option' => 'Envoyer l\'e-mail d\'invitation', 'users_external_auth_id' => 'Identifiant d\'authentification externe', - 'users_external_auth_id_desc' => 'C\'est l\'ID utilisé pour correspondre à cet utilisateur lors de la communication avec votre système d\'authentification externe.', - 'users_password_warning' => 'Remplissez ce formulaire uniquement si vous souhaitez changer de mot de passe :', + 'users_external_auth_id_desc' => 'Lorsqu\'un système d\'authentification externe est utilisé (SAML2, OIDC ou LDAP) c\'est l\'identifiant unique qui relie cet utilisateur à un compte système d\'authentification. Vous pouvez ignorer ce champ si vous utilisez l\'authentification email par défaut.', + 'users_password_warning' => 'Remplissez ce qui suit uniquement si vous souhaitez changer le mot de passe de cet utilisateur.', 'users_system_public' => 'Cet utilisateur représente les invités visitant votre instance. Il est assigné automatiquement aux invités.', 'users_delete' => 'Supprimer un utilisateur', 'users_delete_named' => 'Supprimer l\'utilisateur :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Langue préférée', 'users_preferred_language_desc' => 'Cette option changera la langue utilisée pour l\'interface utilisateur de l\'application. Ceci n\'affectera aucun contenu créé par l\'utilisateur.', 'users_social_accounts' => 'Réseaux sociaux', + 'users_social_accounts_desc' => 'Voir l\'état des comptes sociaux connectés pour cet utilisateur. Les comptes sociaux peuvent être utilisés en plus du système d\'authentification principal pour l\'accès au système.', 'users_social_accounts_info' => 'Vous pouvez connecter des réseaux sociaux à votre compte pour vous connecter plus rapidement. Déconnecter un compte n\'enlèvera pas les accès autorisés précédemment sur votre compte de réseau social.', 'users_social_connect' => 'Connecter le compte', 'users_social_disconnect' => 'Déconnecter le compte', + 'users_social_status_connected' => 'Connecté', + 'users_social_status_disconnected' => 'Déconnecté', 'users_social_connected' => 'Votre compte :socialAccount a été ajouté avec succès.', 'users_social_disconnected' => 'Votre compte :socialAccount a été déconnecté avec succès', 'users_api_tokens' => 'Jetons API', + 'users_api_tokens_desc' => 'Créer et gérer les jetons d\'accès utilisés pour s\'authentifier avec l\'API REST de BookStack. Les permissions pour l\'API sont gérées par l\'utilisateur auquel le jeton appartient.', 'users_api_tokens_none' => 'Aucun jeton API n\'a été créé pour cet utilisateur', 'users_api_tokens_create' => 'Créer un jeton', 'users_api_tokens_expires' => 'Expiré', @@ -302,8 +306,9 @@ 'ko' => 'Coréen', 'lt' => 'Lituanien', 'lv' => 'Letton', - 'nl' => 'Néerlandais', 'nb' => 'Norvegien', + 'nn' => 'Nynorsk', + 'nl' => 'Néerlandais', 'pl' => 'Polonais', 'pt' => 'Portugais', 'pt_BR' => 'Portugais (Brésil)', @@ -314,6 +319,7 @@ 'sv' => 'Suédois', 'tr' => 'Turc', 'uk' => 'Ukrainien', + 'uz' => 'O‘zbekcha', 'vi' => 'Vietnamien', 'zh_CN' => 'Chinois (simplifié)', 'zh_TW' => 'Mandarin de Taïwan', diff --git a/lang/he/common.php b/lang/he/common.php index 25388400418..75dbd44936d 100644 --- a/lang/he/common.php +++ b/lang/he/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'נקה מסננים', 'download' => 'הורדה', 'open_in_tab' => 'פתח בכרטיסייה חדשה', + 'open' => 'Open', // Sort Options 'sort_options' => 'אפשרויות מיון', diff --git a/lang/he/components.php b/lang/he/components.php index 4095264b7b8..9e075d89da9 100644 --- a/lang/he/components.php +++ b/lang/he/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'התמונה נמחקה בהצלחה', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'ערוך קוד', diff --git a/lang/he/entities.php b/lang/he/entities.php index 21c9d7742b0..6813cfceac4 100644 --- a/lang/he/entities.php +++ b/lang/he/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'תבנית דף', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'תגיות דף', 'chapter_tags' => 'תגיות פרק', 'book_tags' => 'תגיות ספר', diff --git a/lang/he/errors.php b/lang/he/errors.php index 181ef3db652..abf028417b3 100644 --- a/lang/he/errors.php +++ b/lang/he/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'לא ניתן לקבל תמונה מ :url', 'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.', 'server_upload_limit' => 'השרת אינו מרשה העלאת קבצים במשקל זה. אנא נסה להעלות קובץ קטן יותר.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'השרת אינו מרשה העלאת קבצים במשקל זה. אנא נסה להעלות קובץ קטן יותר.', // Drawing & Images 'image_upload_error' => 'התרחשה שגיאה במהלך העלאת התמונה', 'image_upload_type_error' => 'התמונה שהועלתה אינה תקינה', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/he/preferences.php b/lang/he/preferences.php index bed6904ccad..28c8b127c11 100644 --- a/lang/he/preferences.php +++ b/lang/he/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'קיצורי דרך', - 'shortcuts_interface' => 'קיצורי מקשים של המערכת', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'כאן תוכל להפעיל או לבטל קיצורי דרך לממשק מערכת המקלדת, המשמשים לניווט ולפעולות.', 'shortcuts_customize_desc' => 'אתה יכול להתאים אישית כל אחד מקיצורי הדרך למטה. פשוט לחץ על צירוף המקשים הרצוי לאחר בחירת הקלט לקיצור דרך.', 'shortcuts_toggle_label' => 'קיצורי מקשים מופעלים', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/he/settings.php b/lang/he/settings.php index 3423dc57a86..26b79394c3a 100644 --- a/lang/he/settings.php +++ b/lang/he/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'תוכלו לבחור לשלוח למשתמש זה דוא"ל הזמנה, המאפשר להם להגדיר סיסמה משלהם. אחרת, תוכלו להגדיר את סיסמתם בעצמכם.', 'users_send_invite_option' => 'שלח דוא"ל הזמנה למשתמש', 'users_external_auth_id' => 'זיהוי חיצוני - ID', - 'users_external_auth_id_desc' => 'זיהוי זה יהיה בשימוש מול מערכת ה LDAP שלך', - 'users_password_warning' => 'יש למלא רק אם ברצונך לשנות את הסיסמא.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'משתמש זה מייצג את כל האורחים שלא מזוהים אשר משתמשים במערכת. לא ניתן להתחבר למשתמש זה אך הוא מוגדר כברירת מחדל', 'users_delete' => 'מחק משתמש', 'users_delete_named' => 'מחק משתמש :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'שפה מועדפת', 'users_preferred_language_desc' => 'אפשרות זו תשנע את השפה אשר מוצגת בממשק המערכת. פעולה זו לא תשנה את התוכן אשר נכתב על ידי המשתמשים.', 'users_social_accounts' => 'רשתות חברתיות', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'כן ניתן לשייך חשבונות אחרים שלך לחיבור וזיהוי קל ומהיר. ניתוק חשבון אינו מנתק גישה קיימת למערכת. לביצוע ניתוק יש לשנות את ההגדרה בהגדרות של חשבון הרשת החברתית', 'users_social_connect' => 'חיבור החשבון', 'users_social_disconnect' => 'ניתוק חשבון', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => 'חשבון :socialAccount חובר בהצלחה לחשבון שלך', 'users_social_disconnected' => ':socialAccount נותק בהצלחה מהחשבון שלך', 'users_api_tokens' => 'אסימוני API', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'לא נוצרו אסימוני API למשתמש זה', 'users_api_tokens_create' => 'צור אסימון', 'users_api_tokens_expires' => 'פג', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/hr/activities.php b/lang/hr/activities.php index 5c774a73f18..541f67646b6 100644 --- a/lang/hr/activities.php +++ b/lang/hr/activities.php @@ -59,7 +59,7 @@ 'favourite_remove_notification' => '".ime" je uspješno maknuta iz tvojih favorita', // Watching - 'watch_update_level_notification' => 'Watch preferences successfully updated', + 'watch_update_level_notification' => 'Postavke gledanja uspješno ažurirane', // Auth 'auth_login' => 'prijavljen', diff --git a/lang/hr/common.php b/lang/hr/common.php index 8e94a431b51..e9ee02c86f8 100644 --- a/lang/hr/common.php +++ b/lang/hr/common.php @@ -42,7 +42,7 @@ 'remove' => 'Ukloni', 'add' => 'Dodaj', 'configure' => 'Konfiguriraj', - 'manage' => 'Manage', + 'manage' => 'Upravljaj', 'fullscreen' => 'Cijeli zaslon', 'favourite' => 'Favorit', 'unfavourite' => 'Ukloni iz favorita', @@ -52,6 +52,7 @@ 'filter_clear' => 'Poništi Filter', 'download' => 'Preuzmi', 'open_in_tab' => 'Otvori u Kartici', + 'open' => 'Open', // Sort Options 'sort_options' => 'Razvrstaj opcije', diff --git a/lang/hr/components.php b/lang/hr/components.php index ba02a5bd763..0ad59fdc2a6 100644 --- a/lang/hr/components.php +++ b/lang/hr/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Slika je obrisana', 'image_replace' => 'Zamijeni Sliku', 'image_replace_success' => 'Datiteka slike je uspješno ažurirana', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Uredi kod', diff --git a/lang/hr/entities.php b/lang/hr/entities.php index 5431a84c403..67fada5319d 100644 --- a/lang/hr/entities.php +++ b/lang/hr/entities.php @@ -239,8 +239,8 @@ 'pages_md_insert_drawing' => 'Umetni crtež', 'pages_md_show_preview' => 'Prikaži pregled', 'pages_md_sync_scroll' => 'Sinkroniziraj pomicanje pregleda', - 'pages_drawing_unsaved' => 'Unsaved Drawing Found', - 'pages_drawing_unsaved_confirm' => 'Unsaved drawing data was found from a previous failed drawing save attempt. Would you like to restore and continue editing this unsaved drawing?', + 'pages_drawing_unsaved' => 'Pronađen je Nespremljen Crtež', + 'pages_drawing_unsaved_confirm' => 'Pronađeni su nespremljeni podaci crteža iz prethodnog neuspjelog pokušaja spremanja crteža. Želite li obnoviti i nastaviti uređivati ovaj nespremljeni crtež?', 'pages_not_in_chapter' => 'Stranica nije u poglavlju', 'pages_move' => 'Premjesti stranicu', 'pages_copy' => 'Kopiraj stranicu', @@ -295,6 +295,7 @@ 'pages_is_template' => 'Predložak stranice', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Oznake stranice', 'chapter_tags' => 'Oznake poglavlja', 'book_tags' => 'Oznake knjiga', @@ -407,26 +408,26 @@ 'references_to_desc' => 'U nastavku su prikazane sve poznate stranice u sustavu koje se povezuju s ovom stavkom.', // Watch Options - 'watch' => 'Watch', - 'watch_title_default' => 'Default Preferences', - 'watch_desc_default' => 'Revert watching to just your default notification preferences.', - 'watch_title_ignore' => 'Ignore', - 'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.', - 'watch_title_new' => 'New Pages', - 'watch_desc_new' => 'Notify when any new page is created within this item.', - 'watch_title_updates' => 'All Page Updates', - 'watch_desc_updates' => 'Notify upon all new pages and page changes.', - 'watch_desc_updates_page' => 'Notify upon all page changes.', - 'watch_title_comments' => 'All Page Updates & Comments', - 'watch_desc_comments' => 'Notify upon all new pages, page changes and new comments.', - 'watch_desc_comments_page' => 'Notify upon page changes and new comments.', - 'watch_change_default' => 'Change default notification preferences', - 'watch_detail_ignore' => 'Ignoring notifications', - 'watch_detail_new' => 'Watching for new pages', - 'watch_detail_updates' => 'Watching new pages and updates', - 'watch_detail_comments' => 'Watching new pages, updates & comments', - 'watch_detail_parent_book' => 'Watching via parent book', - 'watch_detail_parent_book_ignore' => 'Ignoring via parent book', - 'watch_detail_parent_chapter' => 'Watching via parent chapter', - 'watch_detail_parent_chapter_ignore' => 'Ignoring via parent chapter', + 'watch' => 'Prati', + 'watch_title_default' => 'Zadane Postavke', + 'watch_desc_default' => 'Vratite praćenje samo na vaše zadane postavke obavijesti.', + 'watch_title_ignore' => 'Zanemari', + 'watch_desc_ignore' => 'Ignorirajte sve obavijesti, uključujući one iz postavki na razini korisnika.', + 'watch_title_new' => 'Nove Stranice', + 'watch_desc_new' => 'Obavijesti kada se stvori nova stranica unutar ove stavke.', + 'watch_title_updates' => 'Sve Promjene na Stranicama', + 'watch_desc_updates' => 'Obavijesti o svim novim stranicama i promjenama na stranicama.', + 'watch_desc_updates_page' => 'Obavijesti o svim promjenama na stranicama.', + 'watch_title_comments' => 'Sve Promjene na Stranicama i Komentari', + 'watch_desc_comments' => 'Obavijesti o svim novim stranicama, promjenama na stranicama i novim komentarima.', + 'watch_desc_comments_page' => 'Obavijesti o promjenama na stranicama i novim komentarima.', + 'watch_change_default' => 'Promijenite zadane postavke obavijesti', + 'watch_detail_ignore' => 'Ignoriranje obavijesti', + 'watch_detail_new' => 'Prati nove stranice', + 'watch_detail_updates' => 'Prati nove stranice i ažuriranja', + 'watch_detail_comments' => 'Prati nove stranice, ažuriranja i komentare', + 'watch_detail_parent_book' => 'Prati putem nadređene knjige', + 'watch_detail_parent_book_ignore' => 'Ignoriraj putem nadređene knjige', + 'watch_detail_parent_chapter' => 'Prati puten nadređenog poglavlja', + 'watch_detail_parent_chapter_ignore' => 'Ignoriraj putem nadređenog poglavlja', ]; diff --git a/lang/hr/errors.php b/lang/hr/errors.php index 900d581fae7..1b789c6c58e 100644 --- a/lang/hr/errors.php +++ b/lang/hr/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Nemoguće preuzeti sliku sa :url', 'cannot_create_thumbs' => 'Provjerite imate li instaliranu GD PHP ekstenziju.', 'server_upload_limit' => 'Prevelika količina za server. Pokušajte prenijeti manju veličinu.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Prevelika količina za server. Pokušajte prenijeti manju veličinu.', // Drawing & Images 'image_upload_error' => 'Problem s prenosom slike', 'image_upload_type_error' => 'Nepodržani format slike', 'image_upload_replace_type' => 'Zamjene slikovnih datoteka moraju biti iste vrste', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Podaci o crtežu se ne mogu učitati. Datoteka crteža možda više ne postoji ili nemate dozvolu za pristupanje istoj.', // Attachments @@ -112,5 +116,5 @@ 'maintenance_test_email_failure' => 'Pogreška prilikom slanja testnog email:', // HTTP errors - 'http_ssr_url_no_match' => 'The URL does not match the configured allowed SSR hosts', + 'http_ssr_url_no_match' => 'URL se ne podudara s konfiguriranim dozvoljenim SSR domaćinima', ]; diff --git a/lang/hr/notifications.php b/lang/hr/notifications.php index 5539ae9a9d8..e50d57dfe0f 100644 --- a/lang/hr/notifications.php +++ b/lang/hr/notifications.php @@ -4,23 +4,25 @@ */ return [ - 'new_comment_subject' => 'New comment on page: :pageName', - 'new_comment_intro' => 'A user has commented on a page in :appName:', - 'new_page_subject' => 'New page: :pageName', - 'new_page_intro' => 'A new page has been created in :appName:', - 'updated_page_subject' => 'Updated page: :pageName', - 'updated_page_intro' => 'A page has been updated in :appName:', - 'updated_page_debounce' => 'To prevent a mass of notifications, for a while you won\'t be sent notifications for further edits to this page by the same editor.', + 'new_comment_subject' => 'Novi komentar na stranici: :pageName', + 'new_comment_intro' => 'Korisnik je komentirao stranicu u :appName:', + 'new_page_subject' => 'Nova stranica: :pageName', + 'new_page_intro' => 'Nova stranica je stvorena u :appName:', + 'updated_page_subject' => 'ChatGPT - 'detail_page_name' => 'Page Name:', - 'detail_commenter' => 'Commenter:', - 'detail_comment' => 'Comment:', - 'detail_created_by' => 'Created By:', - 'detail_updated_by' => 'Updated By:', +Ažurirana stranica: :pageName', + 'updated_page_intro' => 'Stranica je ažurirana u :appName:', + 'updated_page_debounce' => 'Kako biste spriječili velik broj obavijesti, nećete primati obavijesti o daljnjim izmjenama ove stranice od istog urednika neko vrijeme.', - 'action_view_comment' => 'View Comment', - 'action_view_page' => 'View Page', + 'detail_page_name' => 'Naziv Stranice:', + 'detail_commenter' => 'Komentator:', + 'detail_comment' => 'Komentar:', + 'detail_created_by' => 'Kreirao Korisnik:', + 'detail_updated_by' => 'Ažurirao Korisnik:', - 'footer_reason' => 'This notification was sent to you because :link cover this type of activity for this item.', - 'footer_reason_link' => 'your notification preferences', + 'action_view_comment' => 'Pogledaj Komentar', + 'action_view_page' => 'Pogledaj Stranicu', + + 'footer_reason' => 'Ova obavijest vam je poslana jer :link pokriva ovu vrstu aktivnosti za ovu stavku.', + 'footer_reason_link' => 'vaše postavke obavijesti', ]; diff --git a/lang/hr/preferences.php b/lang/hr/preferences.php index a9bfd6400eb..520d9da73ee 100644 --- a/lang/hr/preferences.php +++ b/lang/hr/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Prečaci', - 'shortcuts_interface' => 'Prečaci tipkovnice u Sučelju', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Ovdje možete omogućiti ili onemogućiti prečace tastature u korisničkom sučelju sustava koji se koriste za navigaciju i akcije.', 'shortcuts_customize_desc' => 'Možete prilagoditi svaki od prečaca u nastavku. Samo pritisnite željenu kombinaciju tipki nakon odabira polja za unos prečaca.', 'shortcuts_toggle_label' => 'Prečaci tipkovnice omogućeni', @@ -17,17 +17,37 @@ 'shortcuts_save' => 'Spremi prečace', 'shortcuts_overlay_desc' => 'Napomena: Kada su prečaci tastature omogućeni, dostupan je pomoćni prikaz preko pritiska na znak "?" koji će istaknuti dostupne prečace za radnje trenutno vidljive na zaslonu.', 'shortcuts_update_success' => 'Postavke prečaca su ažurirane!', - 'shortcuts_overview_desc' => 'Manage keyboard shortcuts you can use to navigate the system user interface.', - - 'notifications' => 'Notification Preferences', - 'notifications_desc' => 'Control the email notifications you receive when certain activity is performed within the system.', - 'notifications_opt_own_page_changes' => 'Notify upon changes to pages I own', - 'notifications_opt_own_page_comments' => 'Notify upon comments on pages I own', - 'notifications_opt_comment_replies' => 'Notify upon replies to my comments', - 'notifications_save' => 'Save Preferences', - 'notifications_update_success' => 'Notification preferences have been updated!', - 'notifications_watched' => 'Watched & Ignored Items', - 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'shortcuts_overview_desc' => 'Upravljajte prečacima tastature koje možete koristiti za navigaciju korisničkim sučeljem sustava.', + + 'notifications' => 'Postavke Obavijesti', + 'notifications_desc' => 'Kontrolirajte e-mail obavijesti koje primate kada se određene aktivnosti izvrše unutar sustava.', + 'notifications_opt_own_page_changes' => 'Obavijesti o promjenama na stranicama koje posjedujem', + 'notifications_opt_own_page_comments' => 'ChatGPT + +Obavijesti o komentarima na stranicama koje posjedujem', + 'notifications_opt_comment_replies' => 'Obavijesti o odgovorima na moje komentare', + 'notifications_save' => 'Spremi Postavke', + 'notifications_update_success' => 'Postavke obavijesti su ažurirane!', + 'notifications_watched' => 'Praćene i ignorirane stavke', + 'notifications_watched_desc' => ' Ispod su stavke na koje su primijenjene prilagođene postavke praćenja. Da biste ažurirali svoje postavke za ove stavke, pregledajte stavku, a zatim pronađite opcije praćenja u bočnoj traci.', + + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/hr/settings.php b/lang/hr/settings.php index 3022357c484..4d66abfaa85 100644 --- a/lang/hr/settings.php +++ b/lang/hr/settings.php @@ -163,7 +163,7 @@ 'role_manage_settings' => 'Upravljanje postavkama aplikacija', 'role_export_content' => 'Izvoz sadržaja', 'role_editor_change' => 'Promijeni uređivač stranica', - 'role_notifications' => 'Receive & manage notifications', + 'role_notifications' => 'Primanje i upravljanje obavijestima', 'role_asset' => 'Upravljanje vlasništvom', 'roles_system_warning' => 'Uzmite u obzir da pristup bilo kojem od ovih dopuštenja dozvoljavate korisniku upravljanje dopuštenjima ostalih u sustavu. Ova dopuštenja dodijelite pouzdanim korisnicima.', 'role_asset_desc' => 'Ova dopuštenja kontroliraju zadane pristupe. Dopuštenja za knjige, poglavlja i stranice ih poništavaju.', @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Možete odabrati slanje e maila korisniku i dozvoliti mu da postavi svoju lozinku ili vi to možete učiniti za njega.', 'users_send_invite_option' => 'Pošaljite pozivnicu korisniku putem emaila', 'users_external_auth_id' => 'Vanjska autorizacija', - 'users_external_auth_id_desc' => 'Ovaj ID koristi se za komunikaciju s vanjskim sustavom za autorizaciju.', - 'users_password_warning' => 'Ispunite dolje samo ako želite promijeniti lozinku.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Ovaj korisnik predstavlja bilo kojeg gosta. Dodjeljuje se automatski.', 'users_delete' => 'Izbrišite korisnika', 'users_delete_named' => 'Izbrišite korisnika :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Prioritetni jezik', 'users_preferred_language_desc' => 'Ova će opcija promijeniti jezik korisničkog sučelja. Neće utjecati na sadržaj.', 'users_social_accounts' => 'Računi društvenih mreža', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Ovdje možete povezati račun s onim na društvenim mrežama za bržu i lakšu prijavu. Ako se odspojite ovdje to neće utjecati na prethodnu autorizaciju. Na postavkama računa vaše društvene mreže možete opozvati pristup.', 'users_social_connect' => 'Poveži račun', 'users_social_disconnect' => 'Odvoji račun', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount račun je uspješno dodan vašem profilu.', 'users_social_disconnected' => ':socialAccount račun je uspješno odvojen od vašeg profila.', 'users_api_tokens' => 'API tokeni', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Nijedan API token nije stvoren za ovog korisnika', 'users_api_tokens_create' => 'Stvori token', 'users_api_tokens_expires' => 'Isteklo', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/hu/activities.php b/lang/hu/activities.php index f7e068d69cd..a6db776415c 100644 --- a/lang/hu/activities.php +++ b/lang/hu/activities.php @@ -41,7 +41,7 @@ // Bookshelves 'bookshelf_create' => 'created shelf', - 'bookshelf_create_notification' => 'Shelf successfully created', + 'bookshelf_create_notification' => 'Könyvespolc sikeresen létrehozva', 'bookshelf_create_from_book' => 'converted book to shelf', 'bookshelf_create_from_book_notification' => 'Book successfully converted to a shelf', 'bookshelf_update' => 'updated shelf', @@ -85,9 +85,9 @@ 'webhook_delete_notification' => 'Webhook successfully deleted', // Users - 'user_create' => 'created user', - 'user_create_notification' => 'User successfully created', - 'user_update' => 'updated user', + 'user_create' => 'felhasználó létrehozása', + 'user_create_notification' => 'Felhasználó sikeresen létrehozva', + 'user_update' => 'felhasználó módosítása', 'user_update_notification' => 'Felhasználó sikeresen frissítve', 'user_delete' => 'deleted user', 'user_delete_notification' => 'Felhasználó sikeresen eltávolítva', @@ -117,8 +117,8 @@ 'commented_on' => 'megjegyzést fűzött hozzá:', 'comment_create' => 'added comment', 'comment_update' => 'updated comment', - 'comment_delete' => 'deleted comment', + 'comment_delete' => 'megjegyzés törlése', // Other - 'permissions_update' => 'updated permissions', + 'permissions_update' => 'engedélyek frissítve', ]; diff --git a/lang/hu/common.php b/lang/hu/common.php index 48a47f5e399..295fa959b45 100644 --- a/lang/hu/common.php +++ b/lang/hu/common.php @@ -6,7 +6,7 @@ // Buttons 'cancel' => 'Mégsem', - 'close' => 'Close', + 'close' => 'Bezárás', 'confirm' => 'Megerősítés', 'back' => 'Vissza', 'save' => 'Mentés', @@ -26,7 +26,7 @@ 'actions' => 'Műveletek', 'view' => 'Megtekintés', 'view_all' => 'Összes megtekintése', - 'new' => 'New', + 'new' => 'Új', 'create' => 'Létrehozás', 'update' => 'Frissítés', 'edit' => 'Szerkesztés', @@ -41,7 +41,7 @@ 'reset' => 'Visszaállítás', 'remove' => 'Eltávolítás', 'add' => 'Hozzáadás', - 'configure' => 'Configure', + 'configure' => 'Beállítás', 'manage' => 'Manage', 'fullscreen' => 'Teljes képernyő', 'favourite' => 'Kedvencekhez ad', @@ -50,8 +50,9 @@ 'previous' => 'Előző', 'filter_active' => 'Aktív szűrő:', 'filter_clear' => 'Szűrő törlése', - 'download' => 'Download', - 'open_in_tab' => 'Open in Tab', + 'download' => 'Letöltés', + 'open_in_tab' => 'Megnyitás új tab-on', + 'open' => 'Megnyitás', // Sort Options 'sort_options' => 'Rendezési beállítások', @@ -83,14 +84,14 @@ 'none' => 'Egyik sem', // Header - 'homepage' => 'Homepage', + 'homepage' => 'Kezdőlap', 'header_menu_expand' => 'Expand Header Menu', 'profile_menu' => 'Profil menü', 'view_profile' => 'Profil megtekintése', 'edit_profile' => 'Profil szerkesztése', 'dark_mode' => 'Sötét mód', 'light_mode' => 'Világos mód', - 'global_search' => 'Global Search', + 'global_search' => 'Keresés mindenhol', // Layout tabs 'tab_info' => 'Információ', diff --git a/lang/hu/components.php b/lang/hu/components.php index 1c20b5faae2..26cd89010db 100644 --- a/lang/hu/components.php +++ b/lang/hu/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Kép sikeresen törölve', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Kód szerkesztése', diff --git a/lang/hu/entities.php b/lang/hu/entities.php index 5fc079ecf58..97c8b206d3d 100644 --- a/lang/hu/entities.php +++ b/lang/hu/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Oldalsablon', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Oldal címkék', 'chapter_tags' => 'Fejezet címkék', 'book_tags' => 'Könyv címkék', diff --git a/lang/hu/errors.php b/lang/hu/errors.php index 5a0b6a0ed55..19407a8e98b 100644 --- a/lang/hu/errors.php +++ b/lang/hu/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Nem lehet lekérni a képet innen: :url', 'cannot_create_thumbs' => 'A kiszolgáló nem tud létrehozni bélyegképeket. Ellenőrizni kell, hogy telepítve van-a a GD PHP kiterjesztés.', 'server_upload_limit' => 'A kiszolgáló nem engedélyez ilyen méretű feltöltéseket. Kisebb fájlmérettel kell próbálkozni.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'A kiszolgáló nem engedélyez ilyen méretű feltöltéseket. Kisebb fájlmérettel kell próbálkozni.', // Drawing & Images 'image_upload_error' => 'Hiba történt a kép feltöltése közben', 'image_upload_type_error' => 'A feltöltött kép típusa érvénytelen', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/hu/preferences.php b/lang/hu/preferences.php index 118e8ba820f..2b88f9671ff 100644 --- a/lang/hu/preferences.php +++ b/lang/hu/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Shortcuts', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/hu/settings.php b/lang/hu/settings.php index 51487542bbf..45f6437c429 100644 --- a/lang/hu/settings.php +++ b/lang/hu/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Lehetséges egy meghívó emailt küldeni ennek a felhasználónak ami lehetővé teszi, hogy beállíthassa a saját jelszavát. Máskülönben a jelszót az erre jogosult felhasználónak kell beállítania.', 'users_send_invite_option' => 'Felhasználó meghívó levél küldése', 'users_external_auth_id' => 'Külső hitelesítés azonosítója', - 'users_external_auth_id_desc' => 'Ez az azonosító lesz használva a felhasználó ellenőrzéséhez mikor a külső hitelesítő rendszerrel kommunikál.', - 'users_password_warning' => 'A lenti mezőket csak a jelszó módosításához kell kitölteni.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Ez a felhasználó bármelyik, a példányt megtekintő felhasználót képviseli. Nem lehet vele bejelentkezni de automatikusan hozzá lesz rendelve.', 'users_delete' => 'Felhasználó törlése', 'users_delete_named' => ':userName felhasználó törlése', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Előnyben részesített nyelv', 'users_preferred_language_desc' => 'Ez a beállítás megváltoztatja az alkalmazás felhasználói felületén használt nyelvet. Nincs hatása a felhasználók által létrehozott tartalomra.', 'users_social_accounts' => 'Közösségi fiókok', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Itt lehet egyéb fiókokat hozzákapcsolni a gyorsabb és könnyebb bejelentkezés érdekében. Itt olyan fiókot lehet lecsatlakoztatni, melynek korábban nem volt engedélyezett hozzáférése. Visszavonja a hozzáférést a csatlakoztatott szociális fiók profilbeállításaiból.', 'users_social_connect' => 'Fiók csatlakoztatása', 'users_social_disconnect' => 'Fiók lecsatlakoztatása', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount fiók sikeresen csatlakoztatva a profilhoz.', 'users_social_disconnected' => ':socialAccount fiók sikeresen lecsatlakoztatva a profilról.', 'users_api_tokens' => 'API vezérjelek', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Ehhez a felhasználóhoz nincsenek létrehozva API vezérjelek', 'users_api_tokens_create' => 'Vezérjel létrehozása', 'users_api_tokens_expires' => 'Lejárat', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/id/common.php b/lang/id/common.php index 66f6ec1b4f0..efb72dc4dd8 100644 --- a/lang/id/common.php +++ b/lang/id/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Clear Filter', 'download' => 'Download', 'open_in_tab' => 'Open in Tab', + 'open' => 'Open', // Sort Options 'sort_options' => 'Opsi Sortir', diff --git a/lang/id/components.php b/lang/id/components.php index 4c411f1b1ee..373d6ace516 100644 --- a/lang/id/components.php +++ b/lang/id/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Gambar berhasil dihapus', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Edit Kode', diff --git a/lang/id/entities.php b/lang/id/entities.php index b78887a8285..7f80d6258a4 100644 --- a/lang/id/entities.php +++ b/lang/id/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Template Halaman', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Halaman Tag', 'chapter_tags' => 'Bab Tag', 'book_tags' => 'Tag Buku', diff --git a/lang/id/errors.php b/lang/id/errors.php index 70a07727060..6843e62ea04 100644 --- a/lang/id/errors.php +++ b/lang/id/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Tidak dapat mengambil gambar dari :url', 'cannot_create_thumbs' => 'Server tidak dapat membuat thumbnail. Harap periksa apakah Anda telah memasang ekstensi GD PHP.', 'server_upload_limit' => 'Server tidak mengizinkan unggahan dengan ukuran ini. Harap coba ukuran berkas yang lebih kecil.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Server tidak mengizinkan unggahan dengan ukuran ini. Harap coba ukuran berkas yang lebih kecil.', // Drawing & Images 'image_upload_error' => 'Terjadi kesalahan saat mengunggah gambar', 'image_upload_type_error' => 'Jenis gambar yang diunggah tidak valid', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/id/preferences.php b/lang/id/preferences.php index 118e8ba820f..2b88f9671ff 100644 --- a/lang/id/preferences.php +++ b/lang/id/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Shortcuts', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/id/settings.php b/lang/id/settings.php index ea5f55f38b4..866f3098474 100644 --- a/lang/id/settings.php +++ b/lang/id/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Anda dapat memilih untuk mengirimi pengguna ini email undangan yang memungkinkan mereka menyetel sandi mereka sendiri, atau Anda dapat menyetel sandi mereka sendiri.', 'users_send_invite_option' => 'Kirim email undangan pengguna', 'users_external_auth_id' => 'Otentikasi Eksternal ID', - 'users_external_auth_id_desc' => 'Ini adalah ID yang digunakan untuk mencocokkan pengguna ini saat berkomunikasi dengan sistem otentikasi eksternal Anda.', - 'users_password_warning' => 'Hanya isi di bawah ini jika Anda ingin mengubah kata sandi Anda.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Pengguna ini mewakili semua pengguna tamu yang mengunjungi instance Anda. Ini tidak dapat digunakan untuk masuk tetapi ditetapkan secara otomatis.', 'users_delete' => 'Hapus pengguna', 'users_delete_named' => 'Hapus Pengguna :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Bahasa Pilihan', 'users_preferred_language_desc' => 'Opsi ini akan mengubah bahasa yang digunakan untuk antarmuka pengguna aplikasi. Ini tidak akan memengaruhi konten yang dibuat pengguna.', 'users_social_accounts' => 'Akun Sosial', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Di sini Anda dapat menghubungkan akun Anda yang lain untuk login yang lebih cepat dan mudah. Memutuskan akun di sini tidak mencabut akses resmi sebelumnya. Cabut akses dari pengaturan profil Anda pada akun sosial yang terhubung.', 'users_social_connect' => 'Hubungkan Akun', 'users_social_disconnect' => 'Putuskan Sambungan Akun', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount akun berhasil dilampirkan ke profil Anda.', 'users_social_disconnected' => ':socialAccount akun berhasil diputuskan dari profil Anda.', 'users_api_tokens' => 'Token API', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Tidak ada token API yang telah dibuat untuk pengguna ini', 'users_api_tokens_create' => 'Buat Token', 'users_api_tokens_expires' => 'Kedaluwarsa', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/it/common.php b/lang/it/common.php index 14a3e271dcf..4501c606cbb 100644 --- a/lang/it/common.php +++ b/lang/it/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Pulisci filtro', 'download' => 'Download', 'open_in_tab' => 'Apri nella scheda', + 'open' => 'Apri', // Sort Options 'sort_options' => 'Opzioni Ordinamento', diff --git a/lang/it/components.php b/lang/it/components.php index 6d288c232b9..b336893b5d2 100644 --- a/lang/it/components.php +++ b/lang/it/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Immagine eliminata correttamente', 'image_replace' => 'Sostituisci Immagine', 'image_replace_success' => 'File immagine aggiornato con successo', + 'image_rebuild_thumbs' => 'Rigenera Variazioni Dimensione', + 'image_rebuild_thumbs_success' => 'Variazioni di dimensione immagine ricostruite con successo!', // Code Editor 'code_editor' => 'Modifica Codice', diff --git a/lang/it/entities.php b/lang/it/entities.php index 0b635c503dd..a0d570732a0 100644 --- a/lang/it/entities.php +++ b/lang/it/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Template Pagina', // Editor Sidebar + 'toggle_sidebar' => 'Attiva/Disattiva Barra Laterale', 'page_tags' => 'Tag Pagina', 'chapter_tags' => 'Tag Capitolo', 'book_tags' => 'Tag Libro', diff --git a/lang/it/errors.php b/lang/it/errors.php index 3a37031c963..ab05b406c17 100644 --- a/lang/it/errors.php +++ b/lang/it/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Impossibile scaricare immagine da :url', 'cannot_create_thumbs' => 'Il server non può creare thumbnail. Controlla che l\'estensione GD sia installata.', 'server_upload_limit' => 'Il server non permette un upload di questa grandezza. Prova con un file più piccolo.', + 'server_post_limit' => 'Il server non può ricevere la quantità di dati fornita. Riprovare con meno dati o con un file più piccolo.', 'uploaded' => 'Il server non consente upload di questa grandezza. Prova un file più piccolo.', // Drawing & Images 'image_upload_error' => 'C\'è stato un errore caricando l\'immagine', 'image_upload_type_error' => 'Il tipo di immagine caricata non è valido', 'image_upload_replace_type' => 'Le sostituzioni di file immagine devono essere dello stesso tipo', + 'image_upload_memory_limit' => 'Impossibile gestire il caricamento d\'immagini e/o creare miniature a causa dei limiti delle risorse di sistema.', + 'image_thumbnail_memory_limit' => 'Impossibile creare variazioni delle dimensioni dell\'immagine a causa dei limiti delle risorse di sistema.', + 'image_gallery_thumbnail_memory_limit' => 'Impossibile creare le miniature della galleria a causa dei limiti delle risorse di sistema.', 'drawing_data_not_found' => 'Non è stato possibile caricare i dati del disegno. È possibile che il file del disegno non esista più o che non si abbia il permesso di accedervi.', // Attachments diff --git a/lang/it/preferences.php b/lang/it/preferences.php index ac70d095e69..c06374e6926 100644 --- a/lang/it/preferences.php +++ b/lang/it/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferenze', + 'my_account' => 'Il Mio Account', 'shortcuts' => 'Scorciatoie', - 'shortcuts_interface' => 'Interfaccia scorciatoie da tastiera', + 'shortcuts_interface' => 'Preferenze di scelta rapida dell\'Interfaccia Utente', 'shortcuts_toggle_desc' => 'Qui puoi abilitare o disabilitare le scorciatoie dell\'interfaccia di sistema da tastiera, utilizzate per la navigazione e le azioni.', 'shortcuts_customize_desc' => 'È possibile personalizzare ciascuna delle scorciatoie riportate di seguito. È sufficiente premere la combinazione di tasti desiderata dopo aver selezionato l\'input per una scelta rapida.', 'shortcuts_toggle_label' => 'Scorciatoie da tastiera attivate', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Oggetti Osservati E Ignorati', 'notifications_watched_desc' => 'Di seguito sono riportati gli articoli a cui sono state applicate le preferenze di monitoraggio personalizzate. Per aggiornare le preferenze, visualizzare l\'articolo e trovare le opzioni di monitoraggio nella barra laterale.', - 'profile_overview_desc' => ' Gestisci i dettagli del tuo profilo utente, incluse la lingua preferita e le opzioni di autenticazione.', + 'auth' => 'Accesso E Sicurezza', + 'auth_change_password' => 'Modifica password', + 'auth_change_password_desc' => 'Modifica la password che usi per accedere all\'applicazione. Deve essere lunga almeno 8 caratteri.', + 'auth_change_password_success' => 'La password è stata aggiornata!', + + 'profile' => 'Dettagli del profilo', + 'profile_desc' => 'Gestisci i dettagli dell\'account che ti rappresenta agli altri utenti, oltre ai dettagli utilizzati per la comunicazione e la personalizzazione del sistema.', + 'profile_view_public' => 'Visualizza Profilo Pubblico', + 'profile_name_desc' => 'Configura il tuo nome visualizzato che sarà visibile ad altri utenti del sistema attraverso l\'attività che esegui e il contenuto che possiedi.', + 'profile_email_desc' => 'Questa email verrà utilizzata per le notifiche e, a seconda dell\'autenticazione al sistema attiva, per l\'accesso al sistema.', + 'profile_email_no_permission' => 'Purtroppo non hai il permesso di modificare il tuo indirizzo email. Se si desidera modificarlo, è necessario chiedere ad un amministratore di farlo per te.', + 'profile_avatar_desc' => 'Seleziona un\'immagine che verrà usata per rappresentarti agli altri utenti del sistema. Idealmente questa immagine dovrebbe essere quadrata e di circa 256px in larghezza e altezza.', + 'profile_admin_options' => 'Opzioni Amministratore', + 'profile_admin_options_desc' => 'Ulteriori opzioni di livello amministrativo, come quelle per gestire le assegnazioni dei ruoli, possono essere trovate per il tuo account utente nell\'area "Impostazioni > Utenti".', + + 'delete_account' => 'Elimina Account', + 'delete_my_account' => 'Elimina Il Mio Account', + 'delete_my_account_desc' => 'Questa azione eliminerà completamente il tuo account utente dal sistema. Non sarai in grado di recuperare l\'account né di annullare questa azione. Il contenuto che hai creato, come le pagine create e le immagini caricate, rimarrà nel sistema.', + 'delete_my_account_warning' => 'Sei sicuro di voler eliminare il tuo account?', ]; diff --git a/lang/it/settings.php b/lang/it/settings.php index 369b6677a50..fac7e36f51c 100644 --- a/lang/it/settings.php +++ b/lang/it/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Puoi scegliere di inviare a questo utente un\'email di invito che permette loro di impostare la propria password altrimenti puoi impostare la password tu stesso.', 'users_send_invite_option' => 'Invia email di invito', 'users_external_auth_id' => 'ID Autenticazioni Esterna', - 'users_external_auth_id_desc' => 'Questo è l\'ID usato per abbinare questo utente quando si comunica con il sistema di autenticazione esterno.', - 'users_password_warning' => 'Riempi solo se desideri cambiare la tua password:', + 'users_external_auth_id_desc' => 'Quando è in uso un sistema di autenticazione esterno (come SAML2, OIDC o LDAP) questo è l\'ID che collega questo utente BookStack all\'account del sistema di autenticazione. È possibile ignorare questo campo se si utilizza l\'autenticazione predefinita basata su email.', + 'users_password_warning' => 'Compila la parte sottostante solo se desideri cambiare la password per questo utente.', 'users_system_public' => 'Questo utente rappresente qualsiasi ospite che visita il sito. Non può essere usato per effettuare il login ma è assegnato automaticamente.', 'users_delete' => 'Elimina Utente', 'users_delete_named' => 'Elimina l\'utente :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Lingua Preferita', 'users_preferred_language_desc' => 'Questa opzione cambierà la lingua utilizzata per l\'interfaccia utente dell\'applicazione. Questo non influirà su alcun contenuto creato dall\'utente.', 'users_social_accounts' => 'Account Social', + 'users_social_accounts_desc' => 'Visualizza lo stato degli account social connessi per questo utente. Gli account social possono essere utilizzati in aggiunta al sistema di autenticazione primaria per l\'accesso al sistema.', 'users_social_accounts_info' => 'Qui puoi connettere gli altri account per un accesso più veloce e semplice. Disconnettere un account qui non rimuoverà le altre sessioni. Revoca l\'accesso dal tuo profilo negli account social connessi.', 'users_social_connect' => 'Connetti Account', 'users_social_disconnect' => 'Disconnetti Account', + 'users_social_status_connected' => 'Connesso', + 'users_social_status_disconnected' => 'Disconnesso', 'users_social_connected' => 'L\'account :socialAccount è stato connesso correttamente al tuo profilo.', 'users_social_disconnected' => 'L\'account :socialAccount è stato disconnesso correttamente dal tuo profilo.', 'users_api_tokens' => 'Token API', + 'users_api_tokens_desc' => 'Creare e gestire i token di accesso utilizzati per autenticarsi con l\'API REST di BookStack. I permessi per l\'API sono gestiti tramite l\'utente a cui appartiene il token.', 'users_api_tokens_none' => 'Nessun token API è stato creato per questo utente', 'users_api_tokens_create' => 'Crea Token', 'users_api_tokens_expires' => 'Scade', @@ -302,8 +306,9 @@ 'ko' => 'Coreano', 'lt' => 'Lituano', 'lv' => 'Lettone', - 'nl' => 'Olandese', 'nb' => 'Norvegese (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Olandese', 'pl' => 'Polacco', 'pt' => 'Portoghese', 'pt_BR' => 'Portoghese Brasiliano', @@ -314,6 +319,7 @@ 'sv' => 'Svedese', 'tr' => 'Turco', 'uk' => 'Ucraino', + 'uz' => 'O‘zbekcha', 'vi' => 'Vietnamita', 'zh_CN' => 'Cinese semplificato', 'zh_TW' => 'Cinese tradizionale', diff --git a/lang/ja/common.php b/lang/ja/common.php index 7ea68c79844..5810d306d55 100644 --- a/lang/ja/common.php +++ b/lang/ja/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'フィルターを解除', 'download' => 'ダウンロード', 'open_in_tab' => 'タブで開く', + 'open' => '開く', // Sort Options 'sort_options' => '並べ替えオプション', diff --git a/lang/ja/components.php b/lang/ja/components.php index 3e0a41eb388..ca9f2cc9d35 100644 --- a/lang/ja/components.php +++ b/lang/ja/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => '画像が削除されました', 'image_replace' => '画像の差し替え', 'image_replace_success' => '画像を更新しました', + 'image_rebuild_thumbs' => 'サイズバリエーションを再生成', + 'image_rebuild_thumbs_success' => '画像サイズバリエーションの再構築に成功しました!', // Code Editor 'code_editor' => 'コードを編集する', diff --git a/lang/ja/entities.php b/lang/ja/entities.php index d8289551269..fd396b1de38 100644 --- a/lang/ja/entities.php +++ b/lang/ja/entities.php @@ -296,6 +296,7 @@ 'pages_is_template' => 'ページテンプレート', // Editor Sidebar + 'toggle_sidebar' => 'サイドバーの切り替え', 'page_tags' => 'タグ', 'chapter_tags' => 'チャプターのタグ', 'book_tags' => 'ブックのタグ', diff --git a/lang/ja/errors.php b/lang/ja/errors.php index 1ed1fe2355e..b54479a2dd1 100644 --- a/lang/ja/errors.php +++ b/lang/ja/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => ':url から画像を取得できませんでした。', 'cannot_create_thumbs' => 'このサーバはサムネイルを作成できません。GD PHP extensionがインストールされていることを確認してください。', 'server_upload_limit' => 'このサイズの画像をアップロードすることは許可されていません。ファイルサイズを小さくし、再試行してください。', + 'server_post_limit' => 'サーバーは提供されたデータ量を受け取ることができません。少ないデータまたは小さいファイルでもう一度お試しください。', 'uploaded' => 'このサイズの画像をアップロードすることは許可されていません。ファイルサイズを小さくし、再試行してください。', // Drawing & Images 'image_upload_error' => '画像アップロード時にエラーが発生しました。', 'image_upload_type_error' => 'アップロード中の画像の種類が無効です', 'image_upload_replace_type' => '画像ファイルの置き換えは同じ種類でなければなりません', + 'image_upload_memory_limit' => 'システムリソースの制限により、画像のアップロードやサムネイルの作成に失敗しました。', + 'image_thumbnail_memory_limit' => 'システムリソース制限のため、画像サイズのバリエーションを作成できませんでした。', + 'image_gallery_thumbnail_memory_limit' => 'システムリソース制限のため、ギャラリーのサムネイルを作成できませんでした。', 'drawing_data_not_found' => '描画データを読み込めませんでした。描画ファイルが存在しないか、アクセス権限がありません。', // Attachments diff --git a/lang/ja/preferences.php b/lang/ja/preferences.php index 7f650059e45..0e56852602c 100644 --- a/lang/ja/preferences.php +++ b/lang/ja/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => '設定', + 'my_account' => 'マイアカウント', 'shortcuts' => 'ショートカット', - 'shortcuts_interface' => 'インターフェイスのキーボードショートカット', + 'shortcuts_interface' => 'UIショートカット設定', 'shortcuts_toggle_desc' => 'ここでは、ナビゲーションやアクションに使用されるキーボードシステムインターフェイスのショートカットを有効または無効にすることができます。', 'shortcuts_customize_desc' => '以下の各ショートカットをカスタマイズできます。ショートカットの入力を選択した後、希望のキーの組み合わせを押してください。', 'shortcuts_toggle_label' => 'キーボードショートカットを有効にする', @@ -29,5 +29,23 @@ 'notifications_watched' => 'ウォッチ/通知無効 項目', 'notifications_watched_desc' => ' 以下はカスタムウォッチの設定が適用されている項目です。 これらの設定を更新するには、項目を表示してサイドバーのウォッチオプションを参照してください。', - 'profile_overview_desc' => ' 言語や認証オプションを含むユーザープロファイルの詳細を管理します。', + 'auth' => 'アクセス & セキュリティ', + 'auth_change_password' => 'パスワードの変更', + 'auth_change_password_desc' => 'アプリケーションにログインするために使用するパスワードを変更します。これは少なくとも8文字以上でなければなりません。', + 'auth_change_password_success' => 'パスワードが更新されました!', + + 'profile' => 'プロフィール詳細', + 'profile_desc' => 'コミュニケーションやシステムのパーソナライズでの使用および、他のユーザーに表示されるアカウントの詳細を管理します。', + 'profile_view_public' => '公開プロフィールを表示', + 'profile_name_desc' => '実行したアクティビティや所有しているコンテンツを通じて、システム内で他のユーザーに表示される表示名を設定します。', + 'profile_email_desc' => 'このメールアドレスは通知、アクティブなシステム認証、システムアクセスに使用されます。', + 'profile_email_no_permission' => '残念ながらメールアドレスを変更する権限がありません。 これを変更したい場合は管理者に変更を依頼する必要があります。', + 'profile_avatar_desc' => 'システム内で他のユーザーに自分を表現するために使用される画像を選択します。 この画像は幅と高さが256pxの正方形が最適です。', + 'profile_admin_options' => '管理者オプション', + 'profile_admin_options_desc' => '役割の割り当て管理など、管理者レベルの追加オプションはアプリケーションの「設定 > ユーザー」エリアにあります。', + + 'delete_account' => 'アカウントを削除', + 'delete_my_account' => '自身のアカウント削除', + 'delete_my_account_desc' => 'システムからユーザーアカウントを完全に削除します。このアカウントを復元したり、この操作を元に戻したりすることはできません。 作成されたページやアップロードされた画像などのコンテンツは残ります。', + 'delete_my_account_warning' => '本当にアカウントを削除しますか?', ]; diff --git a/lang/ja/settings.php b/lang/ja/settings.php index 1f4eabb5628..a1a9b74e9f1 100644 --- a/lang/ja/settings.php +++ b/lang/ja/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'このユーザーに招待メールを送信してユーザー自身にパスワードを設定してもらうか、あなたがここでパスワードを設定するかを選択できます。', 'users_send_invite_option' => 'ユーザーに招待メールを送信', 'users_external_auth_id' => '外部認証ID', - 'users_external_auth_id_desc' => 'これは外部認証システムと通信するときにこのユーザーの照合に使用されるIDです。', - 'users_password_warning' => 'パスワードを変更したい場合のみ入力してください', + 'users_external_auth_id_desc' => '外部認証システム(SAML2、OIDC、LDAPなど)が使用されている場合、このBookStackユーザーを認証システムアカウントにリンクするIDです。デフォルトの電子メールベース認証を使用する場合は、このフィールドを無視できます。', + 'users_password_warning' => 'このユーザーのパスワードを変更したい場合にのみ、以下を入力してください。', 'users_system_public' => 'このユーザーはアプリケーションにアクセスする全てのゲストを表します。ログインはできませんが、自動的に割り当てられます。', 'users_delete' => 'ユーザを削除', 'users_delete_named' => 'ユーザ「:userName」を削除', @@ -210,12 +210,16 @@ 'users_preferred_language' => '使用言語', 'users_preferred_language_desc' => 'このオプションは、アプリケーションのユーザーインターフェイスに使用される言語を変更します。これは、ユーザーが作成したコンテンツには影響しません。', 'users_social_accounts' => 'ソーシャルアカウント', + 'users_social_accounts_desc' => 'このユーザーのソーシャルアカウントのステータスを表示します。システムアクセスのためのプライマリ認証システムに加えて ソーシャルアカウントを使用することができます。', 'users_social_accounts_info' => 'アカウントを接続すると、ログインが簡単になります。ここでアカウントの接続を解除すると、そのアカウントを経由したログインを禁止できます。接続解除後、各ソーシャルアカウントの設定にてこのアプリケーションへのアクセス許可を解除してください。', 'users_social_connect' => 'アカウントを接続', 'users_social_disconnect' => 'アカウントを接続解除', + 'users_social_status_connected' => '接続済み', + 'users_social_status_disconnected' => '未接続', 'users_social_connected' => '「:socialAccount」がプロフィールに接続されました。', 'users_social_disconnected' => '「:socialAccount」がプロフィールから接続解除されました。', 'users_api_tokens' => 'APIトークン', + 'users_api_tokens_desc' => 'BookStack REST APIでの認証に使用するアクセストークンを作成・管理します。APIのパーミッションはトークンが属するユーザーを介して管理されます。', 'users_api_tokens_none' => 'このユーザーにはAPIトークンが作成されていません', 'users_api_tokens_create' => 'トークンを作成', 'users_api_tokens_expires' => '有効期限', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/ka/common.php b/lang/ka/common.php index 47b74d5b6eb..27037babec0 100644 --- a/lang/ka/common.php +++ b/lang/ka/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Clear Filter', 'download' => 'Download', 'open_in_tab' => 'Open in Tab', + 'open' => 'Open', // Sort Options 'sort_options' => 'Sort Options', diff --git a/lang/ka/components.php b/lang/ka/components.php index 8a105096b4f..c33b1d0b791 100644 --- a/lang/ka/components.php +++ b/lang/ka/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Image successfully deleted', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Edit Code', diff --git a/lang/ka/entities.php b/lang/ka/entities.php index 4468cd68f90..cfb5aae1a78 100644 --- a/lang/ka/entities.php +++ b/lang/ka/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Page Template', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Page Tags', 'chapter_tags' => 'Chapter Tags', 'book_tags' => 'Book Tags', diff --git a/lang/ka/errors.php b/lang/ka/errors.php index 4cde4cea36f..8813cf90a2d 100644 --- a/lang/ka/errors.php +++ b/lang/ka/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Cannot get image from :url', 'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.', 'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.', // Drawing & Images 'image_upload_error' => 'An error occurred uploading the image', 'image_upload_type_error' => 'The image type being uploaded is invalid', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/ka/preferences.php b/lang/ka/preferences.php index 118e8ba820f..2b88f9671ff 100644 --- a/lang/ka/preferences.php +++ b/lang/ka/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Shortcuts', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/ka/settings.php b/lang/ka/settings.php index 8821c77f0d1..c5ca662c37d 100644 --- a/lang/ka/settings.php +++ b/lang/ka/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.', 'users_send_invite_option' => 'Send user invite email', 'users_external_auth_id' => 'External Authentication ID', - 'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.', - 'users_password_warning' => 'Only fill the below if you would like to change your password.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.', 'users_delete' => 'Delete User', 'users_delete_named' => 'Delete user :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Preferred Language', 'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.', 'users_social_accounts' => 'Social Accounts', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not revoke previously authorized access. Revoke access from your profile settings on the connected social account.', 'users_social_connect' => 'Connect Account', 'users_social_disconnect' => 'Disconnect Account', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount account was successfully attached to your profile.', 'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.', 'users_api_tokens' => 'API Tokens', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'No API tokens have been created for this user', 'users_api_tokens_create' => 'Create Token', 'users_api_tokens_expires' => 'Expires', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/ko/common.php b/lang/ko/common.php index dec41631a69..89ae78bd389 100644 --- a/lang/ko/common.php +++ b/lang/ko/common.php @@ -52,6 +52,7 @@ 'filter_clear' => '모든 필터 해제', 'download' => '내려받기', 'open_in_tab' => '탭에서 열기', + 'open' => 'Open', // Sort Options 'sort_options' => '정렬 기준', diff --git a/lang/ko/components.php b/lang/ko/components.php index ca4569976fd..8df54a19e54 100644 --- a/lang/ko/components.php +++ b/lang/ko/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => '이미지 삭제함', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => '코드 수정', diff --git a/lang/ko/entities.php b/lang/ko/entities.php index f7480e8d3f3..86d4b934756 100644 --- a/lang/ko/entities.php +++ b/lang/ko/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => '템플릿', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => '문서 꼬리표', 'chapter_tags' => '챕터 꼬리표', 'book_tags' => '책 꼬리표', diff --git a/lang/ko/errors.php b/lang/ko/errors.php index 6f9dc72ca89..464774d29de 100644 --- a/lang/ko/errors.php +++ b/lang/ko/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => ':url에서 이미지를 불러올 수 없습니다.', 'cannot_create_thumbs' => '섬네일을 못 만들었습니다. PHP에 GD 확장 도구를 설치하세요.', 'server_upload_limit' => '파일 크기가 서버에서 허용하는 수치를 넘습니다.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => '파일 크기가 서버에서 허용하는 수치를 넘습니다.', // Drawing & Images 'image_upload_error' => '이미지를 올리다 문제가 생겼습니다.', 'image_upload_type_error' => '유효하지 않은 이미지 형식입니다.', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/ko/preferences.php b/lang/ko/preferences.php index c312db8c095..dec399112a5 100644 --- a/lang/ko/preferences.php +++ b/lang/ko/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => '단축키', - 'shortcuts_interface' => '키보드 단축키', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => '여기에서 탐색과 행동에 사용될 수 있는 키보드 단축키를 활성화하거나 비활성화할 수 있습니다.', 'shortcuts_customize_desc' => '아래에서 각 단축키를 사용자 지정할 수 있습니다. 바로가기에 대한 입력을 선택한 후 원하는 키 조합을 누르기만 하면 됩니다.', 'shortcuts_toggle_label' => '키보드 단축키가 활성화되었습니다.', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/ko/settings.php b/lang/ko/settings.php index 17bd83abfde..e2174ebc53c 100644 --- a/lang/ko/settings.php +++ b/lang/ko/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => '패스워드 설정을 권유하는 메일을 보내거나 내가 정할 수 있습니다.', 'users_send_invite_option' => '메일 보내기', 'users_external_auth_id' => '외부 인증 계정', - 'users_external_auth_id_desc' => '외부 인증 시스템과 통신할 때 사용자와 연결시키는 데 사용되는 ID 입니다.', - 'users_password_warning' => '패스워드를 바꿀 때만 쓰세요.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => '계정 없는 모든 사용자에 할당한 사용자입니다. 이 사용자로 로그인할 수 없어요.', 'users_delete' => '사용자 삭제', 'users_delete_named' => ':userName 삭제', @@ -210,12 +210,16 @@ 'users_preferred_language' => '언어', 'users_preferred_language_desc' => '문서 내용에는 아무런 영향을 주지 않습니다.', 'users_social_accounts' => '소셜 계정', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => '다른 계정으로 간단하게 로그인하세요. 여기에서 계정 연결을 끊는 것과 소셜 계정에서 접근 권한을 취소하는 것은 다릅니다.', 'users_social_connect' => '계정 연결', 'users_social_disconnect' => '계정 연결 끊기', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount(와)과 연결했습니다.', 'users_social_disconnected' => ':socialAccount(와)과의 연결을 끊었습니다.', 'users_api_tokens' => 'API 토큰', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => '이 사용자를 위해 생성된 API 토큰이 없습니다.', 'users_api_tokens_create' => '토큰 만들기', 'users_api_tokens_expires' => '만료', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/lt/common.php b/lang/lt/common.php index a0f9faabba1..8ef5b5d8abd 100644 --- a/lang/lt/common.php +++ b/lang/lt/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Clear Filter', 'download' => 'Download', 'open_in_tab' => 'Open in Tab', + 'open' => 'Open', // Sort Options 'sort_options' => 'Rūšiuoti pasirinkimus', diff --git a/lang/lt/components.php b/lang/lt/components.php index 8521bdec771..0b938a3dd04 100644 --- a/lang/lt/components.php +++ b/lang/lt/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Nuotrauka sėkmingai ištrinti', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Redaguoti kodą', diff --git a/lang/lt/entities.php b/lang/lt/entities.php index 633f2b6535a..42a7e601881 100644 --- a/lang/lt/entities.php +++ b/lang/lt/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Puslapio šablonas', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Puslapio žymos', 'chapter_tags' => 'Skyriaus žymos', 'book_tags' => 'Knygos žymos', diff --git a/lang/lt/errors.php b/lang/lt/errors.php index bf4350fff4d..44c9ace08d0 100644 --- a/lang/lt/errors.php +++ b/lang/lt/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Negalima gauti vaizdo iš :url', 'cannot_create_thumbs' => 'Serveris negali sukurti miniatiūros. Prašome patikrinkite, ar turite įdiegtą GD PHP plėtinį.', 'server_upload_limit' => 'Serveris neleidžia įkelti tokio dydžio failų. Prašome bandykite mažesnį failo dydį.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Serveris neleidžia įkelti tokio dydžio failų. Prašome bandykite mažesnį failo dydį.', // Drawing & Images 'image_upload_error' => 'Įvyko klaida įkeliant vaizdą', 'image_upload_type_error' => 'Vaizdo tipas, kurį norima įkelti, yra neteisingas', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/lt/preferences.php b/lang/lt/preferences.php index 118e8ba820f..2b88f9671ff 100644 --- a/lang/lt/preferences.php +++ b/lang/lt/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Shortcuts', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/lt/settings.php b/lang/lt/settings.php index eeeb271e946..1e467ca3e6a 100644 --- a/lang/lt/settings.php +++ b/lang/lt/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Jūs galite pasirinkti nusiųsti šiam naudotojui kvietimą elektroniniu paštu, kuris leistų jiems patiems susikurti slaptažodį. Priešingu atveju slaptažodį galite sukurti patys.', 'users_send_invite_option' => 'Nusiųsti naudotojui kvietimą elektroniniu paštu', 'users_external_auth_id' => 'Išorinio autentifikavimo ID', - 'users_external_auth_id_desc' => 'Tai yra ID, naudojamas norint suderinti šį naudotoją bendraujant su jūsų išorinio autentifikavimo sistema.', - 'users_password_warning' => 'Užpildykite laukelį apačioje tik tuo atveju, jeigu norite pakeisti savo slaptažodį.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Šis naudotojas atstovauja svečius, kurie aplanko jūsų egzempliorių. Jis negali būti naudojamas prisijungimui, tačiau yra priskiriamas automatiškai.', 'users_delete' => 'Ištrinti naudotoją', 'users_delete_named' => 'Ištrinti naudotoją :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Norima kalba', 'users_preferred_language_desc' => 'Ši parinktis pakeis kalbą, naudojamą naudotojo sąsajoje aplikacijoje. Tai neturės įtakos jokiam vartotojo sukurtam turiniui.', 'users_social_accounts' => 'Socialinės paskyros', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Čia galite susieti savo kitas paskyras greitesniam ir lengvesniam prisijungimui. Atjungus paskyrą čia neatšaukiama anksčiau leista prieiga. Atšaukite prieigą iš profilio nustatymų prijungtoje socialinėje paskyroje.', 'users_social_connect' => 'Susieti paskyrą', 'users_social_disconnect' => 'Atskirti paskyrą', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount paskyra buvo sėkmingai susieta su jūsų profiliu.', 'users_social_disconnected' => ':socialAccount paskyra buvo sėkmingai atskirta nuo jūsu profilio.', 'users_api_tokens' => 'API sąsajos prieigos raktai', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Jokie API sąsajos prieigos raktai nebuvo sukurti šiam naudotojui', 'users_api_tokens_create' => 'Sukurti prieigos raktą', 'users_api_tokens_expires' => 'Baigia galioti', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/lv/activities.php b/lang/lv/activities.php index 2e0c9e60943..3441621547d 100644 --- a/lang/lv/activities.php +++ b/lang/lv/activities.php @@ -15,7 +15,7 @@ 'page_restore' => 'atjaunoja lapu', 'page_restore_notification' => 'Lapa veiksmīgi atjaunota', 'page_move' => 'pārvietoja lapu', - 'page_move_notification' => 'Page successfully moved', + 'page_move_notification' => 'Lapa veiksmīgi pārvietota', // Chapters 'chapter_create' => 'izveidoja nodaļu', @@ -25,7 +25,7 @@ 'chapter_delete' => 'izdzēsa nodaļu', 'chapter_delete_notification' => 'Nodaļa veiksmīgi dzēsta', 'chapter_move' => 'pārvietoja nodaļu', - 'chapter_move_notification' => 'Chapter successfully moved', + 'chapter_move_notification' => 'Nodaļa veiksmīgi pārvietota', // Books 'book_create' => 'izveidoja grāmatu', @@ -50,9 +50,9 @@ 'bookshelf_delete_notification' => 'Plaukts veiksmīgi dzēsts', // Revisions - 'revision_restore' => 'restored revision', - 'revision_delete' => 'deleted revision', - 'revision_delete_notification' => 'Revision successfully deleted', + 'revision_restore' => 'versija atjaunota', + 'revision_delete' => 'versija dzēsta', + 'revision_delete_notification' => 'Versija veiksmīgi dzēsta', // Favourites 'favourite_add_notification' => '":name" ir pievienots jūsu favorītiem', diff --git a/lang/lv/common.php b/lang/lv/common.php index 52e9e37ce78..01abea4f388 100644 --- a/lang/lv/common.php +++ b/lang/lv/common.php @@ -42,7 +42,7 @@ 'remove' => 'Noņemt', 'add' => 'Pievienot', 'configure' => 'Mainīt konfigurāciju', - 'manage' => 'Manage', + 'manage' => 'Pārvaldīt', 'fullscreen' => 'Pilnekrāns', 'favourite' => 'Pievienot favorītiem', 'unfavourite' => 'Noņemt no favorītiem', @@ -52,6 +52,7 @@ 'filter_clear' => 'Notīrīt filtru', 'download' => 'Lejupielādēt', 'open_in_tab' => 'Atvērt cilnē', + 'open' => 'Atvērt', // Sort Options 'sort_options' => 'Kārtošanas Opcijas', diff --git a/lang/lv/components.php b/lang/lv/components.php index 68620625941..2b29b56253c 100644 --- a/lang/lv/components.php +++ b/lang/lv/components.php @@ -9,7 +9,7 @@ 'image_list' => 'Attēlu saraksts', 'image_details' => 'Attēla dati', 'image_upload' => 'Augšuplādēt attēlu', - 'image_intro' => 'Here you can select and manage images that have been previously uploaded to the system.', + 'image_intro' => 'Šeit jūs varat izvēlēties un pārvaldīt attēlus, kuri iepriekš tika aplugšupielādēti sistēmā.', 'image_intro_upload' => 'Upload a new image by dragging an image file into this window, or by using the "Upload Image" button above.', 'image_all' => 'Visi', 'image_all_title' => 'Skatīt visus attēlus', @@ -34,6 +34,8 @@ 'image_delete_success' => 'Attēls veiksmīgi dzēsts', 'image_replace' => 'Nomainīt bildi', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Rediģēt kodu', diff --git a/lang/lv/entities.php b/lang/lv/entities.php index 2d7f476e245..d23e2721006 100644 --- a/lang/lv/entities.php +++ b/lang/lv/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Lapas šablons', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Lapas birkas', 'chapter_tags' => 'Nodaļas birkas', 'book_tags' => 'Grāmatas birkas', diff --git a/lang/lv/errors.php b/lang/lv/errors.php index 74a480314f2..d85a4f7fc0a 100644 --- a/lang/lv/errors.php +++ b/lang/lv/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Nevar iegūt bildi no :url', 'cannot_create_thumbs' => 'Serveris nevar izveidot samazinātus attēlus. Lūdzu pārbaudiet, vai ir uzstādīts PHP GD paplašinājums.', 'server_upload_limit' => 'Serveris neatļauj šāda izmēra failu ielādi. Lūdzu mēģiniet mazāka izmēra failu.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Serveris neatļauj šāda izmēra failu ielādi. Lūdzu mēģiniet mazāka izmēra failu.', // Drawing & Images 'image_upload_error' => 'Radās kļūda augšupielādējot attēlu', 'image_upload_type_error' => 'Ielādējamā attēla tips nav derīgs', 'image_upload_replace_type' => 'Aizvietojot attēlu tipiem ir jābūt vienādiem', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Attēla datus nevarēja ielādēt. Attēla fails, iespējams, vairs neeksistē, vai arī jums varētu nebūt piekļuves tiesības tam.', // Attachments diff --git a/lang/lv/notifications.php b/lang/lv/notifications.php index 5539ae9a9d8..b1cc3b6deeb 100644 --- a/lang/lv/notifications.php +++ b/lang/lv/notifications.php @@ -4,23 +4,23 @@ */ return [ - 'new_comment_subject' => 'New comment on page: :pageName', - 'new_comment_intro' => 'A user has commented on a page in :appName:', - 'new_page_subject' => 'New page: :pageName', - 'new_page_intro' => 'A new page has been created in :appName:', - 'updated_page_subject' => 'Updated page: :pageName', - 'updated_page_intro' => 'A page has been updated in :appName:', + 'new_comment_subject' => 'Jauns komentārs lapā: :pageName', + 'new_comment_intro' => ':appName: lietotājs komentējis lapu', + 'new_page_subject' => 'Jauna lapa: :pageName', + 'new_page_intro' => 'Jauna lapa izveidota :appName:', + 'updated_page_subject' => 'Atjaunināta lapa: :pageName', + 'updated_page_intro' => 'Lapa atjaunināta :appName:', 'updated_page_debounce' => 'To prevent a mass of notifications, for a while you won\'t be sent notifications for further edits to this page by the same editor.', - 'detail_page_name' => 'Page Name:', - 'detail_commenter' => 'Commenter:', - 'detail_comment' => 'Comment:', - 'detail_created_by' => 'Created By:', - 'detail_updated_by' => 'Updated By:', + 'detail_page_name' => 'Lapas nosaukums:', + 'detail_commenter' => 'Komentētājs:', + 'detail_comment' => 'Komentārs:', + 'detail_created_by' => 'Izveidoja:', + 'detail_updated_by' => 'Atjaunināja:', - 'action_view_comment' => 'View Comment', - 'action_view_page' => 'View Page', + 'action_view_comment' => 'Skatīt komentāru', + 'action_view_page' => 'Skatīt lapu', 'footer_reason' => 'This notification was sent to you because :link cover this type of activity for this item.', - 'footer_reason_link' => 'your notification preferences', + 'footer_reason_link' => 'paziņojumu vēlamie iestatījumi', ]; diff --git a/lang/lv/preferences.php b/lang/lv/preferences.php index a3692cf09db..aea349b3b72 100644 --- a/lang/lv/preferences.php +++ b/lang/lv/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Saīsnes', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Klaviatūras saīsnes ieslēgtas', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/lv/settings.php b/lang/lv/settings.php index fc9c6af3f15..0864c6b37de 100644 --- a/lang/lv/settings.php +++ b/lang/lv/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Jūs varat izvēlētes vai nosūtīt šim lietotājam uzaicinājuma epastu, kas ļauj tam uzstādīt savu paroli pašam, vai arī varat uzstādīt paroli tagad.', 'users_send_invite_option' => 'Nosūtīt lietotāja uzaicinājuma epastu', 'users_external_auth_id' => 'Ārējais autentifikācijas ID', - 'users_external_auth_id_desc' => 'Šis ir identifikators, kas tiks izmantots, lai atpazītu lietotāju, sazinoaties ar jūsu ārējo autentifikācijas sistēmu.', - 'users_password_warning' => 'Aizpildiet tikai tad, ja vēlaties mainīt savu paroli.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Šis lietotājs apzīmē visus viesus, kas apmeklēs jūsu lapu. To nevar izmantot lapas piekļuvei un tas tiek norādīts automātiski.', 'users_delete' => 'Dzēst lietotāju', 'users_delete_named' => 'Dzēst lietotāju :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Vēlamā valoda', 'users_preferred_language_desc' => 'Šis uzstādījums nomainīs valodu, kas izmantota aplikācijas lietotāja saskarnē. Tas neietekmēs neko no lietotāju radītā satura.', 'users_social_accounts' => 'Sociālie konti', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Te jūs varat pieslēgt citus kontus ātrākai un ērtākai piekļuvei. Konta atvienošana no šejienes neatceļ šai aplikācijai dotās tiesības šī konta piekļuvei. Atvienojtiet piekļuvi arī no jūsu profila uzstādījumiem pievienotajā sociālajā kontā.', 'users_social_connect' => 'Pievienot kontu', 'users_social_disconnect' => 'Atvienot kontu', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount konts veiksmīgi pieslēgts jūsu profilam.', 'users_social_disconnected' => ':socialAccount konts veiksmīgi atslēgts no jūsu profila.', 'users_api_tokens' => 'API žetoni', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Šim lietotājam nav izveidotu API žetonu', 'users_api_tokens_create' => 'Izveidot žetonu', 'users_api_tokens_expires' => 'Derīguma termiņš', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/nb/common.php b/lang/nb/common.php index b6b378efb3f..bcbf8e13a57 100644 --- a/lang/nb/common.php +++ b/lang/nb/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Tøm filter', 'download' => 'Last ned', 'open_in_tab' => 'Åpne i fane', + 'open' => 'Åpne', // Sort Options 'sort_options' => 'Sorteringsalternativer', diff --git a/lang/nb/components.php b/lang/nb/components.php index 38521c6b093..8a8c69f1729 100644 --- a/lang/nb/components.php +++ b/lang/nb/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Bilde ble slettet', 'image_replace' => 'Erstatt bilde', 'image_replace_success' => 'Bildefil ble oppdatert', + 'image_rebuild_thumbs' => 'Regenerer størrelsesvarianter', + 'image_rebuild_thumbs_success' => 'Variasjoner i bildestørrelse var gjenoppbygget!', // Code Editor 'code_editor' => 'Endre kode', diff --git a/lang/nb/entities.php b/lang/nb/entities.php index 74e39fff7cd..87fbf513801 100644 --- a/lang/nb/entities.php +++ b/lang/nb/entities.php @@ -64,7 +64,7 @@ 'search_content_type' => 'Innholdstype', 'search_exact_matches' => 'Eksakte ord', 'search_tags' => 'Søk på merker', - 'search_options' => 'ALternativer', + 'search_options' => 'Alternativer', 'search_viewed_by_me' => 'Sett av meg', 'search_not_viewed_by_me' => 'Ikke sett av meg', 'search_permissions_set' => 'Tilganger er angitt', @@ -295,6 +295,7 @@ 'pages_is_template' => 'Sidemal', // Editor Sidebar + 'toggle_sidebar' => 'Bytt sidestolpe', 'page_tags' => 'Sidemerker', 'chapter_tags' => 'Kapittelmerker', 'book_tags' => 'Bokmerker', diff --git a/lang/nb/errors.php b/lang/nb/errors.php index ff7ecc0c4ba..941158744e4 100644 --- a/lang/nb/errors.php +++ b/lang/nb/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Kan ikke hente bilde fra :url', 'cannot_create_thumbs' => 'Kan ikke opprette miniatyrbilder. GD PHP er ikke installert.', 'server_upload_limit' => 'Vedlegget er for stort, forsøk med et mindre vedlegg.', + 'server_post_limit' => 'Serveren kan ikke motta det denne mengde data. Prøv igjen med mindre data eller en mindre fil.', 'uploaded' => 'Tjenesten aksepterer ikke vedlegg som er så stor.', // Drawing & Images 'image_upload_error' => 'Bildet kunne ikke lastes opp, forsøk igjen.', 'image_upload_type_error' => 'Bildeformatet støttes ikke, forsøk med et annet format.', 'image_upload_replace_type' => 'Bildeerstatning må være av samme type', + 'image_upload_memory_limit' => 'Kunne ikke håndtere bildeopplasting og/eller lage miniatyrbilder på grunn av systemressursgrensen.', + 'image_thumbnail_memory_limit' => 'Kunne ikke opprette variasjoner i bildestørrelse på grunn av systemressursgrensen.', + 'image_gallery_thumbnail_memory_limit' => 'Kunne ikke opprette miniatyrbilder på grunn av systemressursgrensene.', 'drawing_data_not_found' => 'Tegningsdata kunne ikke lastes. Det er mulig at tegningsfilen ikke finnes lenger, eller du har ikke rettigheter til å få tilgang til den.', // Attachments @@ -112,5 +116,5 @@ 'maintenance_test_email_failure' => 'Feil kastet når du sendte en test-e-post:', // HTTP errors - 'http_ssr_url_no_match' => 'The URL does not match the configured allowed SSR hosts', + 'http_ssr_url_no_match' => 'URLen samsvarer ikke med de konfigurerte SSR-vertene', ]; diff --git a/lang/nb/preferences.php b/lang/nb/preferences.php index 16fd8cbd031..502a343428c 100644 --- a/lang/nb/preferences.php +++ b/lang/nb/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Innstillinger', + 'my_account' => 'Min konto', 'shortcuts' => 'Snarveier', - 'shortcuts_interface' => 'Grensesnitt hurtigtaster', + 'shortcuts_interface' => 'Innstillinger for UI snarveier', 'shortcuts_toggle_desc' => 'Her kan du aktivere eller deaktivere snarveier for tastatur system som brukes til navigasjon og handlinger.', 'shortcuts_customize_desc' => 'Du kan tilpasse hver av snarveiene nedenfor. Trykk på ønsket nøkkelkombinasjon etter å ha valgt inndata for en snarvei.', 'shortcuts_toggle_label' => 'Tastatursnarveier aktivert', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Overvåka & ignorerte elementer', 'notifications_watched_desc' => ' Nedenfor er elementene som har egendefinerte varslingsinnstillinger i bruk. For å oppdatere innstillingene for disse, se elementet, finn varslingsalternativene i sidepanelet.', - 'profile_overview_desc' => ' Behandle brukerprofildetaljene dine, inkludert foretrukne språk og autentiseringsalternativer.', + 'auth' => 'Tilgang og sikkerhet', + 'auth_change_password' => 'Endre passord', + 'auth_change_password_desc' => 'Endre passordet du bruker for å logge inn med. Dette må være minst 8 tegn langt.', + 'auth_change_password_success' => 'Passordet har blitt oppdatert!', + + 'profile' => 'Profildetaljer', + 'profile_desc' => 'Gi opplysningene om kontoen din som representerer deg til andre brukere, i tillegg til opplysninger som brukes til kommunikasjon og systempersonalisering.', + 'profile_view_public' => 'Vis offentlig profil', + 'profile_name_desc' => 'Tilpass visningsnavn som vil være synlig for andre brukere i systemet ved hjelp av aktiviteten du utfører, og innholdet du eier.', + 'profile_email_desc' => 'Denne e-posten brukes for varsler, og avhengig av aktiv systemautentisering, systemtilgang.', + 'profile_email_no_permission' => 'Du har dessverre ikke tillatelse til å endre e-postadressen din. Hvis du ønsker å endre dette, må du be om en administrator om å endre dette for deg.', + 'profile_avatar_desc' => 'Velg et bilde som skal brukes til å representere deg selv til andre i systemet. Ideelt sett bør dette bildet være kvadratisk og ca. 256 px i bredde og høyde.', + 'profile_admin_options' => 'Alternativer for administrator', + 'profile_admin_options_desc' => 'Du finner flere alternativer på administratornivå, som de som skal administrere rolletildelinger, for din brukerkonto i området "Innstillinger > Brukere" i applikasjonen.', + + 'delete_account' => 'Slett konto', + 'delete_my_account' => 'Slett kontoen min', + 'delete_my_account_desc' => 'Dette vil slette din brukerkonto fra systemet. Du vil ikke kunne gjenopprette denne kontoen eller tilbakestille denne handlingen. Innhold du har opprettet, som f. eks. opprettede sider og opplastede bilder, vil forbli uendret.', + 'delete_my_account_warning' => 'Er du sikker på at du vil slette kontoen din?', ]; diff --git a/lang/nb/settings.php b/lang/nb/settings.php index 73ee7c6074f..9f607519eef 100644 --- a/lang/nb/settings.php +++ b/lang/nb/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Du kan velge å sende denne kontoholderen en invitasjons-e-post som lar dem angi sitt eget passord, ellers kan du selv angi passordet.', 'users_send_invite_option' => 'Send invitasjonsmelding', 'users_external_auth_id' => 'Ekstern godkjennings-ID', - 'users_external_auth_id_desc' => 'Dette er ID-en som brukes til å matche denne kontoholderen når de kommuniserer med det eksterne autentiseringssystemet.', - 'users_password_warning' => 'Fyll bare ut nedenfor hvis du vil endre passordet ditt.', + 'users_external_auth_id_desc' => 'Når et eksternt autentiseringssystem er i bruk (som SAML2, OIDC eller LDAP) er dette er ID-en som kobles til denne Bookstack-brukeren til autentiseringssystemkontoen. Du kan ignorere dette feltet hvis du bruker standard e-postbasert autentisering.', + 'users_password_warning' => 'Fyll bare ut nedenfor hvis du vil endre passordet for denne brukeren.', 'users_system_public' => 'Denne brukeren representerer alle gjester som besøker appliaksjonen din. Den kan ikke brukes til å logge på, men tildeles automatisk.', 'users_delete' => 'Slett konto', 'users_delete_named' => 'Slett kontoen :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Foretrukket språk', 'users_preferred_language_desc' => 'Dette alternativet vil endre språket som brukes til brukergrensesnittet til applikasjonen. Dette påvirker ikke noe brukeropprettet innhold.', 'users_social_accounts' => 'Sosiale kontoer', + 'users_social_accounts_desc' => 'Vis status for de tilkoblede sosiale kontoene for denne brukeren. Sosiale kontoer kan brukes i tillegg til det primære autentiseringssystemet for systemtilgang.', 'users_social_accounts_info' => 'Her kan du koble andre kontoer for raskere og enklere pålogging. Hvis du frakobler en konto her, tilbakekaller ikke dette tidligere autorisert tilgang. Tilbakekall tilgang fra profilinnstillingene dine på den tilkoblede sosiale kontoen.', 'users_social_connect' => 'Koble til konto', 'users_social_disconnect' => 'Koble fra konto', + 'users_social_status_connected' => 'Tilkoblet', + 'users_social_status_disconnected' => 'Frakoblet', 'users_social_connected' => ':socialAccount ble lagt til din konto.', 'users_social_disconnected' => ':socialAccount ble koblet fra din konto.', 'users_api_tokens' => 'API-nøkler', + 'users_api_tokens_desc' => 'Opprett og håndter tilgangstokener som brukes til å godkjenne med BookStack REST API. Tillatelser til API blir administrert via brukeren som tokenet tilhører.', 'users_api_tokens_none' => 'Ingen API-nøkler finnes for denne kontoen', 'users_api_tokens_create' => 'Opprett nøkkel', 'users_api_tokens_expires' => 'Utløper', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/nl/activities.php b/lang/nl/activities.php index 2051a5051d9..633ac888ebc 100644 --- a/lang/nl/activities.php +++ b/lang/nl/activities.php @@ -59,7 +59,7 @@ 'favourite_remove_notification' => '":name" is verwijderd uit je favorieten', // Watching - 'watch_update_level_notification' => 'Kijkvoorkeuren succesvol aangepast', + 'watch_update_level_notification' => 'Volg voorkeuren succesvol aangepast', // Auth 'auth_login' => 'heeft ingelogd', diff --git a/lang/nl/common.php b/lang/nl/common.php index 2d310545e01..898fd10a556 100644 --- a/lang/nl/common.php +++ b/lang/nl/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Wis Filter', 'download' => 'Download', 'open_in_tab' => 'Open als Tabblad', + 'open' => 'Open', // Sort Options 'sort_options' => 'Sorteeropties', diff --git a/lang/nl/components.php b/lang/nl/components.php index 168d106b597..852a7ea85fe 100644 --- a/lang/nl/components.php +++ b/lang/nl/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Afbeelding succesvol verwijderd', 'image_replace' => 'Vervang Afbeelding', 'image_replace_success' => 'Afbeelding succesvol bijgewerkt', + 'image_rebuild_thumbs' => 'Variaties in grootte opnieuw genereren', + 'image_rebuild_thumbs_success' => 'Variaties in afbeeldingsgrootte succesvol herbouwd!', // Code Editor 'code_editor' => 'Bewerk Code', diff --git a/lang/nl/entities.php b/lang/nl/entities.php index 6f09b8ce3a1..a408aa1e5a5 100644 --- a/lang/nl/entities.php +++ b/lang/nl/entities.php @@ -239,8 +239,8 @@ 'pages_md_insert_drawing' => 'Tekening invoegen', 'pages_md_show_preview' => 'Toon preview', 'pages_md_sync_scroll' => 'Synchroniseer preview scroll', - 'pages_drawing_unsaved' => 'Unsaved Drawing Found', - 'pages_drawing_unsaved_confirm' => 'Unsaved drawing data was found from a previous failed drawing save attempt. Would you like to restore and continue editing this unsaved drawing?', + 'pages_drawing_unsaved' => 'Niet-opgeslagen Tekening Gevonden', + 'pages_drawing_unsaved_confirm' => 'Er zijn niet-opgeslagen tekeninggegevens gevonden van een eerdere mislukte poging om de tekening op te slaan. Wilt u deze niet-opgeslagen tekening herstellen en verder bewerken?', 'pages_not_in_chapter' => 'Deze pagina staat niet in een hoofdstuk', 'pages_move' => 'Pagina verplaatsten', 'pages_copy' => 'Pagina kopiëren', @@ -295,6 +295,7 @@ 'pages_is_template' => 'Paginasjabloon', // Editor Sidebar + 'toggle_sidebar' => 'Zijbalk Tonen/Verbergen', 'page_tags' => 'Pagina Labels', 'chapter_tags' => 'Hoofdstuk Labels', 'book_tags' => 'Boek Labels', @@ -407,7 +408,7 @@ 'references_to_desc' => 'Hieronder staan alle gekende pagina\'s in het systeem die naar dit item linken.', // Watch Options - 'watch' => 'Kijk', + 'watch' => 'Volg', 'watch_title_default' => 'Standaard Voorkeuren', 'watch_desc_default' => 'Terugkeren naar alleen je standaardvoorkeuren voor meldingen.', 'watch_title_ignore' => 'Negeer', diff --git a/lang/nl/errors.php b/lang/nl/errors.php index 79a935b26fb..f30014702e7 100644 --- a/lang/nl/errors.php +++ b/lang/nl/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Kon geen afbeelding verkrijgen van :url', 'cannot_create_thumbs' => 'De server kon geen miniaturen maken. Controleer of je de GD PHP extensie geïnstalleerd hebt.', 'server_upload_limit' => 'De server staat geen uploads van deze grootte toe. Probeer een kleinere bestandsgrootte.', + 'server_post_limit' => 'De server kan de opgegeven hoeveelheid gegevens niet ontvangen. Probeer het opnieuw met minder gegevens of een kleiner bestand.', 'uploaded' => 'De server staat geen uploads van deze grootte toe. Probeer een kleinere bestandsgrootte.', // Drawing & Images 'image_upload_error' => 'Er is een fout opgetreden bij het uploaden van de afbeelding', 'image_upload_type_error' => 'Het geüploade afbeeldingstype is ongeldig', 'image_upload_replace_type' => 'Afbeeldingen moeten van hetzelfde type zijn', + 'image_upload_memory_limit' => 'Het uploaden van afbeeldingen en/of het maken van miniaturen is mislukt vanwege te beperkte systeemmiddelen.', + 'image_thumbnail_memory_limit' => 'Het maken van variaties in afbeeldingsgrootte is mislukt vanwege te beperkte systeemmiddelen.', + 'image_gallery_thumbnail_memory_limit' => 'Het maken van galerij miniaturen is mislukt vanwege te beperkte systeemmiddelen.', 'drawing_data_not_found' => 'De gegevens van de tekening konden niet worden geladen. Het tekenbestand bestaat misschien niet meer of u hebt geen machtiging om het te openen.', // Attachments @@ -112,5 +116,5 @@ 'maintenance_test_email_failure' => 'Fout opgetreden bij het verzenden van een test email:', // HTTP errors - 'http_ssr_url_no_match' => 'The URL does not match the configured allowed SSR hosts', + 'http_ssr_url_no_match' => 'De URL komt niet overeen met de geconfigureerde toegestane SSR-hosts', ]; diff --git a/lang/nl/preferences.php b/lang/nl/preferences.php index 1442d3455ab..41ed3c547f7 100644 --- a/lang/nl/preferences.php +++ b/lang/nl/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Voorkeuren', + 'my_account' => 'Mijn account', 'shortcuts' => 'Snelkoppelingen', - 'shortcuts_interface' => 'Toetsencombinaties voor de gebruikersinterface', + 'shortcuts_interface' => 'Snelkoppelingen', 'shortcuts_toggle_desc' => 'Hier kunt u toetscombinaties voor de gebruikersinterface in- of uitschakelen voor navigatie en acties.', 'shortcuts_customize_desc' => 'U kunt elk van de onderstaande toetsencombinaties aanpassen. Druk simpelweg op de gewenste toetscombinatie na het selecteren van de invoer voor een toetscombinatie.', 'shortcuts_toggle_label' => 'Toetsencombinaties ingeschakeld', @@ -26,8 +26,26 @@ 'notifications_opt_comment_replies' => 'Geef melding van reacties op mijn opmerkingen', 'notifications_save' => 'Voorkeuren opslaan', 'notifications_update_success' => 'Voorkeuren voor meldingen zijn bijgewerkt!', - 'notifications_watched' => 'Ingestelde Items', - 'notifications_watched_desc' => ' Hieronder staan de items waarvoor aangepaste \'kijk\' voorkeuren zijn toegepast. Om je voorkeuren voor deze items bij te werken, bekijk je het item en zoek je naar de \'kijk\' opties in de zijbalk.', + 'notifications_watched' => 'Gevolgde & Genegeerde Items', + 'notifications_watched_desc' => ' Hieronder staan de items waarvoor aangepaste \'Volg\'-voorkeuren zijn toegepast. Om je voorkeuren voor deze items bij te werken, bekijk je het item en zoek je naar de \'Volg\' opties in de zijbalk.', - 'profile_overview_desc' => ' Beheer de details van je gebruikersprofiel, inclusief de voorkeurstaal en verificatieopties.', + 'auth' => 'Toegang & Beveiliging', + 'auth_change_password' => 'Wachtwoord Wijzigen', + 'auth_change_password_desc' => 'Wijzig hier je wachtwoord om in te loggen op de applicatie. Minstens 8 tekens gebruiken.', + 'auth_change_password_success' => 'Wachtwoord is bijgewerkt!', + + 'profile' => 'Profielgegevens', + 'profile_desc' => 'De gegevens van je account beheren die je representeren naar andere gebruikers toe, evenals gegevens die worden gebruikt voor communicatie en systeempersonalisatie.', + 'profile_view_public' => 'Toon Publiek Profiel', + 'profile_name_desc' => 'Configureer je weergavenaam die zichtbaar zal zijn voor andere gebruikers in het systeem via de activiteit die je uitvoert en de inhoud die je bezit.', + 'profile_email_desc' => 'Dit e-mailadres wordt gebruikt voor meldingen en afhankelijk van de actieve systeemverificatie ook voor toegang tot het systeem.', + 'profile_email_no_permission' => 'Helaas heb je geen toestemming om je e-mailadres te wijzigen. Als je dit wilt veranderen, moet je een beheerder vragen om dit voor je te veranderen.', + 'profile_avatar_desc' => 'Selecteer een afbeelding waarmee je jezelf representeert naar anderen in het systeem. In het ideale geval is deze afbeelding vierkant en ongeveer 256 pixels breed en hoog.', + 'profile_admin_options' => 'Beheerdersopties', + 'profile_admin_options_desc' => 'Extra opties op beheerdersniveau, zoals die voor het beheren van roltoewijzingen zijn te vinden voor je gebruikersaccount in het gedeelte "Instellingen > Gebruikers" van de applicatie.', + + 'delete_account' => 'Verwijder Account', + 'delete_my_account' => 'Verwijder Mijn Account', + 'delete_my_account_desc' => 'Dit verwijdert je gebruikersaccount volledig uit het systeem. Niemand kan het account herstellen of deze actie ongedaan maken. Inhoud die je hebt gemaakt, zoals aangemaakte pagina\'s en geüploade afbeeldingen, blijft bestaan.', + 'delete_my_account_warning' => 'Weet je zeker dat je je account permanent wil verwijderen?', ]; diff --git a/lang/nl/settings.php b/lang/nl/settings.php index 915999f8eff..6ef1d4a3c57 100644 --- a/lang/nl/settings.php +++ b/lang/nl/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'U kunt ervoor kiezen om deze gebruiker een uitnodigingsmail te sturen waarmee hij zijn eigen wachtwoord kan instellen, anders kunt u zelf zijn wachtwoord instellen.', 'users_send_invite_option' => 'Stuur gebruiker uitnodigings e-mail', 'users_external_auth_id' => 'Externe authenticatie ID', - 'users_external_auth_id_desc' => 'Dit is het ID dat gebruikt wordt om deze gebruiker te vergelijken met uw externe verificatiesysteem.', - 'users_password_warning' => 'Vul onderstaande formulier alleen in als je het wachtwoord wilt aanpassen.', + 'users_external_auth_id_desc' => 'Wanneer een extern authenticatiesysteem wordt gebruikt (zoals SAML2, OIDC of LDAP) is dit de ID die deze BookStack-gebruiker koppelt aan het account van het authenticatiesysteem. Je kunt dit veld negeren als je de standaard op e-mail gebaseerde verificatie gebruikt.', + 'users_password_warning' => 'Vul onderstaande velden alleen in als je het wachtwoord voor deze gebruiker wil wijzigen.', 'users_system_public' => 'Deze gebruiker vertegenwoordigt alle gastgebruikers die uw applicatie bezoeken. Hij kan niet worden gebruikt om in te loggen, maar wordt automatisch toegewezen.', 'users_delete' => 'Verwijder gebruiker', 'users_delete_named' => 'Verwijder gebruiker :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Voorkeurstaal', 'users_preferred_language_desc' => 'Deze optie wijzigt de taal die gebruikt wordt voor de gebruikersinterface. Dit heeft geen invloed op door gebruiker gemaakte inhoud.', 'users_social_accounts' => 'Sociale media accounts', + 'users_social_accounts_desc' => 'Bekijk de status van de verbonden socialmedia-accounts voor deze gebruiker. socialmedia-accounts kunnen worden gebruikt naast het primaire authenticatiesysteem voor systeemtoegang.', 'users_social_accounts_info' => 'Hier kunt u uw andere accounts koppelen om sneller en eenvoudiger in te loggen. Als u hier een account loskoppelt, wordt de eerder gemachtigde toegang niet ingetrokken. U kunt de toegang intrekken via uw profielinstellingen op het gekoppelde socialemedia-account zelf.', 'users_social_connect' => 'Account Verbinden', 'users_social_disconnect' => 'Account Ontkoppelen', + 'users_social_status_connected' => 'Verbonden', + 'users_social_status_disconnected' => 'Verbroken', 'users_social_connected' => ':socialAccount account is succesvol aan je profiel gekoppeld.', 'users_social_disconnected' => ':socialAccount account is succesvol ontkoppeld van je profiel.', 'users_api_tokens' => 'API Tokens', + 'users_api_tokens_desc' => 'Creëer en beheer de toegangstokens die gebruikt worden om te authenticeren met de BookStack REST API. Machtigingen voor de API worden beheerd via de gebruiker waartoe het token behoort.', 'users_api_tokens_none' => 'Er zijn geen API-tokens gemaakt voor deze gebruiker', 'users_api_tokens_create' => 'Token aanmaken', 'users_api_tokens_expires' => 'Verloopt', @@ -302,8 +306,9 @@ 'ko' => '한국어 (Koreaans)', 'lt' => 'Lietuvių Kalba (Litouws)', 'lv' => 'Latviešu Valoda (Lets)', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål) (Noors)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski (Pools)', 'pt' => 'Português (Portugees)', 'pt_BR' => 'Português do Brasil (Braziliaans-Portugees)', @@ -314,6 +319,7 @@ 'sv' => 'Svenska (Zweeds)', 'tr' => 'Türkçe (Turks)', 'uk' => 'Українська (Oekraïens)', + 'uz' => 'Oezbeeks', 'vi' => 'Tiếng Việt (Vietnamees)', 'zh_CN' => '简体中文 (Chinees)', 'zh_TW' => '繁體中文 (Traditioneel Chinees)', diff --git a/lang/nn/activities.php b/lang/nn/activities.php new file mode 100644 index 00000000000..3545db12946 --- /dev/null +++ b/lang/nn/activities.php @@ -0,0 +1,124 @@ + 'oppretta side', + 'page_create_notification' => 'Sida vart oppretta', + 'page_update' => 'oppdaterte side', + 'page_update_notification' => 'Sida vart oppretta', + 'page_delete' => 'sletta side', + 'page_delete_notification' => 'Sida vart sletta', + 'page_restore' => 'gjenoppretta side', + 'page_restore_notification' => 'Sida vart gjenoppretta', + 'page_move' => 'flytta side', + 'page_move_notification' => 'Sida vart flytta', + + // Chapters + 'chapter_create' => 'oppretta kapittel', + 'chapter_create_notification' => 'Kapittelet vart oppretta', + 'chapter_update' => 'oppdaterte kapittel', + 'chapter_update_notification' => 'Kapittelet vart oppdatert', + 'chapter_delete' => 'sletta kapittel', + 'chapter_delete_notification' => 'Kapittelet vart sletta', + 'chapter_move' => 'flytta kapittel', + 'chapter_move_notification' => 'Kapitelet vart flytta', + + // Books + 'book_create' => 'oppretta bok', + 'book_create_notification' => 'Boka vart oppretta', + 'book_create_from_chapter' => 'konverterte kapittelet til bok', + 'book_create_from_chapter_notification' => 'Kapittelet vart konvertert til ei bok', + 'book_update' => 'oppdaterte bok', + 'book_update_notification' => 'Boka vart oppdatert', + 'book_delete' => 'sletta bok', + 'book_delete_notification' => 'Boka vart sletta', + 'book_sort' => 'sorterte bok', + 'book_sort_notification' => 'Sorteringa vart endra', + + // Bookshelves + 'bookshelf_create' => 'oppretta hylle', + 'bookshelf_create_notification' => 'Hylla vart opprettet', + 'bookshelf_create_from_book' => 'endra frå bok til hylle', + 'bookshelf_create_from_book_notification' => 'Boka vart konvertert til ei bokhylle', + 'bookshelf_update' => 'oppdaterte hylle', + 'bookshelf_update_notification' => 'Hylla vart oppdatert', + 'bookshelf_delete' => 'sletta hylle', + 'bookshelf_delete_notification' => 'Hylla vart sletta', + + // Revisions + 'revision_restore' => 'gjenoppretta revisjon', + 'revision_delete' => 'sletta revisjon', + 'revision_delete_notification' => 'Revisjon sletta', + + // Favourites + 'favourite_add_notification' => '«:name» vart lagt til i dine favorittar', + 'favourite_remove_notification' => '«:name» vart fjerna frå dine favorittar', + + // Watching + 'watch_update_level_notification' => 'Overvåkingsinnstillingene vart oppdatert', + + // Auth + 'auth_login' => 'logga inn', + 'auth_register' => 'registrert som ny brukar', + 'auth_password_reset_request' => 'ba om tilbakestilling av passord', + 'auth_password_reset_update' => 'tilbakestill brukarpassord', + 'mfa_setup_method' => 'konfigurert MFA-metode', + 'mfa_setup_method_notification' => 'Fleirfaktor-metoden vart konfigurert', + 'mfa_remove_method' => 'fjerna MFA-metode', + 'mfa_remove_method_notification' => 'Fleirfaktor-metoden vart fjerna', + + // Settings + 'settings_update' => 'oppdaterte innstillingar', + 'settings_update_notification' => 'Innstillingane er oppdatert', + 'maintenance_action_run' => 'kjørte vedlikehaldshandling', + + // Webhooks + 'webhook_create' => 'oppretta webhook', + 'webhook_create_notification' => 'Webhook vart oppretta', + 'webhook_update' => 'oppdatert webhook', + 'webhook_update_notification' => 'Webhook vart oppdatert', + 'webhook_delete' => 'sletta webhook', + 'webhook_delete_notification' => 'Webhook vart sletta', + + // Users + 'user_create' => 'oppretta brukar', + 'user_create_notification' => 'Brukar vart oppretta', + 'user_update' => 'oppdatert brukar', + 'user_update_notification' => 'Brukaren vart oppdatert', + 'user_delete' => 'sletta brukar', + 'user_delete_notification' => 'Brukaren vart fjerna', + + // API Tokens + 'api_token_create' => 'oppretta api token', + 'api_token_create_notification' => 'API-token er oppretta', + 'api_token_update' => 'oppdatert api token', + 'api_token_update_notification' => 'API-token oppdatert', + 'api_token_delete' => 'sletta api token', + 'api_token_delete_notification' => 'API-token vart sletta', + + // Roles + 'role_create' => 'oppretta rolle', + 'role_create_notification' => 'Rolla vart oppretta', + 'role_update' => 'oppdatert rolla', + 'role_update_notification' => 'Rolla vart oppdatert', + 'role_delete' => 'sletta rolla', + 'role_delete_notification' => 'Rolla vart fjerna', + + // Recycle Bin + 'recycle_bin_empty' => 'tømt søppelbøtta', + 'recycle_bin_restore' => 'gjenoppretta frå søppelbøtta', + 'recycle_bin_destroy' => 'fjerna frå søppelbøtta', + + // Comments + 'commented_on' => 'kommenterte på', + 'comment_create' => 'lagt til kommentar', + 'comment_update' => 'oppdatert kommentar', + 'comment_delete' => 'sletta kommentar', + + // Other + 'permissions_update' => 'oppdaterte tilgangar', +]; diff --git a/lang/nn/auth.php b/lang/nn/auth.php new file mode 100644 index 00000000000..615f7bb9c5a --- /dev/null +++ b/lang/nn/auth.php @@ -0,0 +1,117 @@ + 'Desse detaljane samsvarar ikkje med det me har på bok.', + 'throttle' => 'For mange forsøk, prøv på nytt om :seconds sekunder.', + + // Login & Register + 'sign_up' => 'Registrer deg', + 'log_in' => 'Logg inn', + 'log_in_with' => 'Logg inn med :socialDriver', + 'sign_up_with' => 'Registrer med :socialDriver', + 'logout' => 'Logg ut', + + 'name' => 'Namn', + 'username' => 'Brukarnamn', + 'email' => 'E-post', + 'password' => 'Passord', + 'password_confirm' => 'Stadfest passord', + 'password_hint' => 'Må vere minst 8 teikn', + 'forgot_password' => 'Gløymt passord?', + 'remember_me' => 'Hugs meg', + 'ldap_email_hint' => 'Oppgi ein e-post for denne kontoen.', + 'create_account' => 'Opprett konto', + 'already_have_account' => 'Har du allereie ein konto?', + 'dont_have_account' => 'Manglar du ein konto?', + 'social_login' => 'Sosiale kontoar', + 'social_registration' => 'Registrer via sosiale kontoar', + 'social_registration_text' => 'Bruk ei anna teneste for å registrere deg.', + + 'register_thanks' => 'Takk for at du registrerte deg!', + 'register_confirm' => 'Sjekk e-posten din for informasjon som gir deg tilgang til :appName.', + 'registrations_disabled' => 'Registrering er deaktivert.', + 'registration_email_domain_invalid' => 'Du kan ikkje bruke det domenet for å registrere ein konto', + 'register_success' => 'Takk for registreringa! Du kan no logge inn på tenesta.', + + // Login auto-initiation + 'auto_init_starting' => 'Prøver innlogging', + 'auto_init_starting_desc' => 'Me kontaktar autentiseringssystemet ditt for å starte innloggingsprosessen. Dersom det ikkje er noko fremdrift i løpet av fem sekunder kan du trykke på lenka under.', + 'auto_init_start_link' => 'Fortsett med autentisering', + + // Password Reset + 'reset_password' => 'Nullstill passord', + 'reset_password_send_instructions' => 'Oppgi e-posten kobla til kontoen din, så sender me ein e-post der du kan nullstille passordet.', + 'reset_password_send_button' => 'Send nullstillingslenke', + 'reset_password_sent' => 'Ein nullstillingslenke vart sendt til :email om den eksisterer i systemet.', + 'reset_password_success' => 'Passordet vart nullstilt.', + 'email_reset_subject' => 'Nullstill ditt :appName passord', + 'email_reset_text' => 'Du mottar denne e-posten fordi det er blitt bedt om ei nullstilling av passord for denne kontoen.', + 'email_reset_not_requested' => 'Om det ikkje var deg, så trenger du ikkje gjere noko.', + + // Email Confirmation + 'email_confirm_subject' => 'Stadfest epost-adressa for :appName', + 'email_confirm_greeting' => 'Takk for at du registrerte deg på :appName!', + 'email_confirm_text' => 'Stadfest e-posten din ved å trykke på knappen under:', + 'email_confirm_action' => 'Stadfest e-post', + 'email_confirm_send_error' => 'Bekreftelse er krevd av systemet, men systemet kan ikke sende disse. Kontakt admin for å løse problemet.', + 'email_confirm_success' => 'Epost-adressen din er verifisert! Du kan nå logge inn ved å bruke denne ved innlogging.', + 'email_confirm_resent' => 'Bekreftelsespost ble sendt, sjekk innboksen din.', + 'email_confirm_thanks' => 'Takk for verifiseringen!', + 'email_confirm_thanks_desc' => 'Vent et øyeblikk mens verifiseringen blir utført. Om du ikke blir videresendt i løpet av tre sekunder kan du trykke «Fortsett» nedenfor.', + + 'email_not_confirmed' => 'E-posten er ikke bekreftet.', + 'email_not_confirmed_text' => 'Epost-adressen er ennå ikke bekreftet.', + 'email_not_confirmed_click_link' => 'Trykk på lenken i e-posten du fikk vedrørende din registrering.', + 'email_not_confirmed_resend' => 'Om du ikke finner den i innboksen eller søppelboksen, kan du få tilsendt ny ved å trykke på knappen under.', + 'email_not_confirmed_resend_button' => 'Send bekreftelsespost på nytt', + + // User Invite + 'user_invite_email_subject' => 'Du har blitt invitert til :appName!', + 'user_invite_email_greeting' => 'En konto har blitt opprettet for deg på :appName.', + 'user_invite_email_text' => 'Trykk på knappen under for å opprette et sikkert passord:', + 'user_invite_email_action' => 'Angi passord', + 'user_invite_page_welcome' => 'Velkommen til :appName!', + 'user_invite_page_text' => 'For å fullføre prosessen må du oppgi et passord som sikrer din konto på :appName for fremtidige besøk.', + 'user_invite_page_confirm_button' => 'Bekreft passord', + 'user_invite_success_login' => 'Passordet ble satt, du skal nå kunne logge inn med ditt nye passord for å få tilgang til :appName!', + + // Multi-factor Authentication + 'mfa_setup' => 'Konfigurer flerfaktor-autentisering', + 'mfa_setup_desc' => 'Konfigurer flerfaktor-autentisering som et ekstra lag med sikkerhet for brukerkontoen din.', + 'mfa_setup_configured' => 'Allerede konfigurert', + 'mfa_setup_reconfigure' => 'Omkonfigurer', + 'mfa_setup_remove_confirmation' => 'Er du sikker på at du vil deaktivere denne flerfaktor-autentiseringsmetoden?', + 'mfa_setup_action' => 'Konfigurasjon', + 'mfa_backup_codes_usage_limit_warning' => 'Du har mindre enn 5 sikkerhetskoder igjen; vennligst generer og lagre ett nytt sett før du går tom for koder, for å unngå å bli låst ute av kontoen din.', + 'mfa_option_totp_title' => 'Mobilapplikasjon', + 'mfa_option_totp_desc' => 'For å bruke flerfaktorautentisering trenger du en mobilapplikasjon som støtter TOTP-teknologien, slik som Google Authenticator, Authy eller Microsoft Authenticator.', + 'mfa_option_backup_codes_title' => 'Sikkerhetskoder', + 'mfa_option_backup_codes_desc' => 'Lagre sikkerhetskoder til engangsbruk på et trygt sted, disse kan du bruke for å verifisere identiteten din.', + 'mfa_gen_confirm_and_enable' => 'Bekreft og aktiver', + 'mfa_gen_backup_codes_title' => 'Konfigurasjon av sikkerhetskoder', + 'mfa_gen_backup_codes_desc' => 'Lagre nedeforstående liste med koder på et trygt sted. Når du skal ha tilgang til systemet kan du bruke en av disse som en faktor under innlogging.', + 'mfa_gen_backup_codes_download' => 'Last ned koder', + 'mfa_gen_backup_codes_usage_warning' => 'Hver kode kan kun brukes en gang', + 'mfa_gen_totp_title' => 'Oppsett for mobilapplikasjon', + 'mfa_gen_totp_desc' => 'For å bruke flerfaktorautentisering trenger du en mobilapplikasjon som støtter TOTP-teknologien, slik som Google Authenticator, Authy eller Microsoft Authenticator.', + 'mfa_gen_totp_scan' => 'Scan QR-koden nedenfor med valgt TOTP-applikasjon for å starte.', + 'mfa_gen_totp_verify_setup' => 'Bekreft oppsett', + 'mfa_gen_totp_verify_setup_desc' => 'Bekreft at oppsettet fungerer ved å skrive inn koden fra TOTP-applikasjonen i boksen nedenfor:', + 'mfa_gen_totp_provide_code_here' => 'Skriv inn den genererte koden her', + 'mfa_verify_access' => 'Bekreft tilgang', + 'mfa_verify_access_desc' => 'Brukerkontoen din krever at du bekrefter din identitet med en ekstra autentiseringsfaktor før du får tilgang. Bekreft identiteten med en av dine konfigurerte metoder for å fortsette.', + 'mfa_verify_no_methods' => 'Ingen metoder er konfigurert', + 'mfa_verify_no_methods_desc' => 'Ingen flerfaktorautentiseringsmetoder er satt opp for din konto. Du må sette opp minst en metode for å få tilgang.', + 'mfa_verify_use_totp' => 'Bekreft med mobilapplikasjon', + 'mfa_verify_use_backup_codes' => 'Bekreft med sikkerhetskode', + 'mfa_verify_backup_code' => 'Sikkerhetskode', + 'mfa_verify_backup_code_desc' => 'Skriv inn en av dine ubrukte sikkerhetskoder under:', + 'mfa_verify_backup_code_enter_here' => 'Skriv inn sikkerhetskode her', + 'mfa_verify_totp_desc' => 'Skriv inn koden, generert ved hjelp av mobilapplikasjonen, nedenfor:', + 'mfa_setup_login_notification' => 'Flerfaktorautentisering er konfigurert, vennligst logg inn på nytt med denne metoden.', +]; diff --git a/lang/nn/common.php b/lang/nn/common.php new file mode 100644 index 00000000000..d817fc3551d --- /dev/null +++ b/lang/nn/common.php @@ -0,0 +1,110 @@ + 'Avbryt', + 'close' => 'Lukk', + 'confirm' => 'Bekreft', + 'back' => 'Tilbake', + 'save' => 'Lagre', + 'continue' => 'Fortsett', + 'select' => 'Velg', + 'toggle_all' => 'Bytt alle', + 'more' => 'Mer', + + // Form Labels + 'name' => 'Navn', + 'description' => 'Beskrivelse', + 'role' => 'Rolle', + 'cover_image' => 'Forside', + 'cover_image_description' => 'Bildet bør være ca. 440x250px.', + + // Actions + 'actions' => 'Handlinger', + 'view' => 'Vis', + 'view_all' => 'Vis alle', + 'new' => 'Ny', + 'create' => 'Opprett', + 'update' => 'Oppdater', + 'edit' => 'Rediger', + 'sort' => 'Sortér', + 'move' => 'Flytt', + 'copy' => 'Kopier', + 'reply' => 'Svar', + 'delete' => 'Slett', + 'delete_confirm' => 'Bekreft sletting', + 'search' => 'Søk', + 'search_clear' => 'Nullstill søk', + 'reset' => 'Nullstill', + 'remove' => 'Fjern', + 'add' => 'Legg til', + 'configure' => 'Konfigurer', + 'manage' => 'Administrer', + 'fullscreen' => 'Fullskjerm', + 'favourite' => 'Favorisér', + 'unfavourite' => 'Avfavorisér', + 'next' => 'Neste', + 'previous' => 'Forrige', + 'filter_active' => 'Aktivt filter:', + 'filter_clear' => 'Tøm filter', + 'download' => 'Last ned', + 'open_in_tab' => 'Åpne i fane', + 'open' => 'Opne', + + // Sort Options + 'sort_options' => 'Sorteringsalternativer', + 'sort_direction_toggle' => 'Sorteringsretning', + 'sort_ascending' => 'Stigende sortering', + 'sort_descending' => 'Synkende sortering', + 'sort_name' => 'Navn', + 'sort_default' => 'Standard', + 'sort_created_at' => 'Dato opprettet', + 'sort_updated_at' => 'Dato oppdatert', + + // Misc + 'deleted_user' => 'Slett bruker', + 'no_activity' => 'Ingen aktivitet å vise', + 'no_items' => 'Ingen ting å vise', + 'back_to_top' => 'Hopp til toppen', + 'skip_to_main_content' => 'Gå til hovedinnhold', + 'toggle_details' => 'Vis/skjul detaljer', + 'toggle_thumbnails' => 'Vis/skjul miniatyrbilder', + 'details' => 'Detaljer', + 'grid_view' => 'Rutenettvisning', + 'list_view' => 'Listevisning', + 'default' => 'Standard', + 'breadcrumb' => 'Brødsmuler', + 'status' => 'Status', + 'status_active' => 'Aktiv', + 'status_inactive' => 'Inaktiv', + 'never' => 'Aldri', + 'none' => 'Ingen', + + // Header + 'homepage' => 'Hjemmeside', + 'header_menu_expand' => 'Utvid toppmeny', + 'profile_menu' => 'Profilmeny', + 'view_profile' => 'Vis profil', + 'edit_profile' => 'Endre Profile', + 'dark_mode' => 'Kveldsmodus', + 'light_mode' => 'Dagmodus', + 'global_search' => 'Globalt søk', + + // Layout tabs + 'tab_info' => 'Informasjon', + 'tab_info_label' => 'Fane: Vis tilleggsinfo', + 'tab_content' => 'Innhold', + 'tab_content_label' => 'Fane: Vis hovedinnhold', + + // Email Content + 'email_action_help' => 'Om du har problemer med å trykke på «:actionText»-knappen, bruk nettadressen under for å gå direkte dit:', + 'email_rights' => 'Kopibeskyttet', + + // Footer Link Options + // Not directly used but available for convenience to users. + 'privacy_policy' => 'Personvernregler', + 'terms_of_service' => 'Bruksvilkår', +]; diff --git a/lang/nn/components.php b/lang/nn/components.php new file mode 100644 index 00000000000..20abbc3af80 --- /dev/null +++ b/lang/nn/components.php @@ -0,0 +1,46 @@ + 'Velg bilde', + 'image_list' => 'Bilde liste', + 'image_details' => 'Bildedetaljer', + 'image_upload' => 'Last opp bilde', + 'image_intro' => 'Her kan du velge og behandle bilder som tidligere har blitt lastet opp til systemet.', + 'image_intro_upload' => 'Last opp et nytt bilde ved å dra et bilde i dette vinduet, eller ved å bruke knappen "Last opp bilde" ovenfor.', + 'image_all' => 'Alle', + 'image_all_title' => 'Vis alle bilder', + 'image_book_title' => 'Vis bilder som er lastet opp i denne boken', + 'image_page_title' => 'Vis bilder lastet opp til denne siden', + 'image_search_hint' => 'Søk på bilder etter navn', + 'image_uploaded' => 'Opplastet :uploadedDate', + 'image_uploaded_by' => 'Lastet opp av :userName', + 'image_uploaded_to' => 'Lastet opp til :pageLink', + 'image_updated' => 'Oppdatert :updateDate', + 'image_load_more' => 'Last in flere', + 'image_image_name' => 'Bildenavn', + 'image_delete_used' => 'Dette bildet er brukt på sidene nedenfor.', + 'image_delete_confirm_text' => 'Vil du slette dette bildet?', + 'image_select_image' => 'Velg bilde', + 'image_dropzone' => 'Dra og slipp eller trykk her for å laste opp bilder', + 'image_dropzone_drop' => 'Slipp bilder her for å laste opp', + 'images_deleted' => 'Bilder slettet', + 'image_preview' => 'Hurtigvisning av bilder', + 'image_upload_success' => 'Bilde ble lastet opp', + 'image_update_success' => 'Bildedetaljer ble oppdatert', + 'image_delete_success' => 'Bilde ble slettet', + 'image_replace' => 'Erstatt bilde', + 'image_replace_success' => 'Bildefil ble oppdatert', + 'image_rebuild_thumbs' => 'Regenerer ulike storleikar', + 'image_rebuild_thumbs_success' => 'Bilete i ulike storleikar vart bygd på nytt!', + + // Code Editor + 'code_editor' => 'Endre kode', + 'code_language' => 'Kodespråk', + 'code_content' => 'Kodeinnhold', + 'code_session_history' => 'Sesjonshistorikk', + 'code_save' => 'Lagre kode', +]; diff --git a/lang/nn/editor.php b/lang/nn/editor.php new file mode 100644 index 00000000000..2f3b22d8bd2 --- /dev/null +++ b/lang/nn/editor.php @@ -0,0 +1,174 @@ + 'Generelt', + 'advanced' => 'Avansert', + 'none' => 'Ingen', + 'cancel' => 'Avbryt', + 'save' => 'Lagre', + 'close' => 'Lukk', + 'undo' => 'Angre', + 'redo' => 'Gjør om', + 'left' => 'Venstre', + 'center' => 'Sentrert', + 'right' => 'Høyre', + 'top' => 'Topp', + 'middle' => 'Sentrert', + 'bottom' => 'Bunn', + 'width' => 'Bredde', + 'height' => 'Høyde', + 'More' => 'Mer', + 'select' => 'Velg …', + + // Toolbar + 'formats' => 'Formater', + 'header_large' => 'Stor overskrift', + 'header_medium' => 'Medium overskrift', + 'header_small' => 'Liten overskrift', + 'header_tiny' => 'Bitteliten overskrift', + 'paragraph' => 'Avsnitt', + 'blockquote' => 'Blokksitat', + 'inline_code' => 'Kodesetning', + 'callouts' => 'Notabene', + 'callout_information' => 'Informasjon', + 'callout_success' => 'Positiv', + 'callout_warning' => 'Advarsel', + 'callout_danger' => 'Negativ', + 'bold' => 'Fet', + 'italic' => 'Kursiv', + 'underline' => 'Understrek', + 'strikethrough' => 'Strek over', + 'superscript' => 'Hevet skrift', + 'subscript' => 'Senket skrift', + 'text_color' => 'Tekstfarge', + 'custom_color' => 'Egenvalgt farge', + 'remove_color' => 'Fjern farge', + 'background_color' => 'Bakgrunnsfarge', + 'align_left' => 'Venstrejustering', + 'align_center' => 'Midtstilling', + 'align_right' => 'Høyrejustering', + 'align_justify' => 'Blokkjustering', + 'list_bullet' => 'Punktliste', + 'list_numbered' => 'Nummerert liste', + 'list_task' => 'Oppgaveliste', + 'indent_increase' => 'Øk innrykk', + 'indent_decrease' => 'Redusér innrykk', + 'table' => 'Tabell', + 'insert_image' => 'Sett inn bilde', + 'insert_image_title' => 'Sett inn/redigér bilde', + 'insert_link' => 'Sett inn/redigér lenke', + 'insert_link_title' => 'Sett inn/redigér lenke', + 'insert_horizontal_line' => 'Sett inn horisontal linje', + 'insert_code_block' => 'Sett inn kodeblokk', + 'edit_code_block' => 'Redigér kodeblokk', + 'insert_drawing' => 'Sett inn/redigér tegning', + 'drawing_manager' => 'Tegningsbehandling', + 'insert_media' => 'Sett inn/redigér media', + 'insert_media_title' => 'Sett inn/redigér media', + 'clear_formatting' => 'Rens formattering', + 'source_code' => 'Kildekode', + 'source_code_title' => 'Kildekode', + 'fullscreen' => 'Fullskjerm', + 'image_options' => 'Bildealternativer', + + // Tables + 'table_properties' => 'Tabellegenskaper', + 'table_properties_title' => 'Tabellegenskaper', + 'delete_table' => 'Slett tabell', + 'insert_row_before' => 'Sett inn rad før', + 'insert_row_after' => 'Sett inn rad etter', + 'delete_row' => 'Slett rad', + 'insert_column_before' => 'Sett inn kolonne før', + 'insert_column_after' => 'Sett inn kolonne etter', + 'delete_column' => 'Slett kolonne', + 'table_cell' => 'Celle', + 'table_row' => 'Rad', + 'table_column' => 'Kolonne', + 'cell_properties' => 'Celle-egenskaper', + 'cell_properties_title' => 'Celle-egenskaper', + 'cell_type' => 'Celletype', + 'cell_type_cell' => 'Celle', + 'cell_scope' => 'Omfang', + 'cell_type_header' => 'Topptekst-celle', + 'merge_cells' => 'Slå sammen celler', + 'split_cell' => 'Del celle', + 'table_row_group' => 'Radgruppe', + 'table_column_group' => 'Kolonnegruppe', + 'horizontal_align' => 'Horisontal justering', + 'vertical_align' => 'Vertikal justering', + 'border_width' => 'Kantbredde', + 'border_style' => 'Kantstil', + 'border_color' => 'Kantfarge', + 'row_properties' => 'Radegenskaper', + 'row_properties_title' => 'Radegenskaper', + 'cut_row' => 'Klipp ut rad', + 'copy_row' => 'Kopiér rad', + 'paste_row_before' => 'Lim rad inn før', + 'paste_row_after' => 'Lim rad inn etter', + 'row_type' => 'Radtype', + 'row_type_header' => 'Topptekst', + 'row_type_body' => 'Hovedtekst', + 'row_type_footer' => 'Bunntekst', + 'alignment' => 'Justering', + 'cut_column' => 'Klipp ut kolonne', + 'copy_column' => 'Kopiér kolonne', + 'paste_column_before' => 'Lim kolonne inn før', + 'paste_column_after' => 'Lim kolonne inn etter', + 'cell_padding' => 'Celleutfylling', + 'cell_spacing' => 'Celleavstand', + 'caption' => 'Overskrift', + 'show_caption' => 'Vis overskrift', + 'constrain' => 'Behold proporsjoner', + 'cell_border_solid' => 'Heltrukket', + 'cell_border_dotted' => 'Prikker', + 'cell_border_dashed' => 'Stipler', + 'cell_border_double' => 'Dobbel', + 'cell_border_groove' => 'Rille', + 'cell_border_ridge' => 'Kant', + 'cell_border_inset' => 'Nedsenk', + 'cell_border_outset' => 'Uthev', + 'cell_border_none' => 'Ingen', + 'cell_border_hidden' => 'Skjult bredde', + + // Images, links, details/summary & embed + 'source' => 'Kilde', + 'alt_desc' => 'Alternativ beskrivelse', + 'embed' => 'Bygg inn', + 'paste_embed' => 'Lim inn koden din her:', + 'url' => 'Nettlenke', + 'text_to_display' => 'Synlig tekst', + 'title' => 'Tittel', + 'open_link' => 'Åpne lenke', + 'open_link_in' => 'Åpne i ...', + 'open_link_current' => 'Samme vindu', + 'open_link_new' => 'Nytt vindu', + 'remove_link' => 'Fjern lenke', + 'insert_collapsible' => 'Sett inn sammenleggbar blokk', + 'collapsible_unwrap' => 'Pakk ut', + 'edit_label' => 'Rediger etikett', + 'toggle_open_closed' => 'Veksle åpen/lukket', + 'collapsible_edit' => 'Rediger sammenleggbar blokk', + 'toggle_label' => 'Veksle etikettsynlighet', + + // About view + 'about' => 'Om tekstredigeringsprogrammet', + 'about_title' => 'Om HDSEHDF-tekstredigeringsprogrammet', + 'editor_license' => 'Tekstbehandlerlisens og opphavsrett', + 'editor_tiny_license' => 'Denne tekstredigereren er laget med :tinyLink som er lisensiert under MIT.', + 'editor_tiny_license_link' => 'Informasjon om opphavsrett og lisens for TinyMCE finnes her.', + 'save_continue' => 'Lagre side og fortsett', + 'callouts_cycle' => '(Fortsett å trykke for å veksle mellom typer)', + 'link_selector' => 'Lenke til innhold', + 'shortcuts' => 'Snarveier', + 'shortcut' => 'Snarvei', + 'shortcuts_intro' => 'Følgende snarveier er tilgjengelige i tekstredigeringsverktøyet:', + 'windows_linux' => '(Windows/Linux)', + 'mac' => '(MacOS)', + 'description' => 'Beskrivelse', +]; diff --git a/lang/nn/entities.php b/lang/nn/entities.php new file mode 100644 index 00000000000..bed008b73dd --- /dev/null +++ b/lang/nn/entities.php @@ -0,0 +1,433 @@ + 'Nylig opprettet', + 'recently_created_pages' => 'Nylig opprettede sider', + 'recently_updated_pages' => 'Nylig oppdaterte sider', + 'recently_created_chapters' => 'Nylig opprettede kapitler', + 'recently_created_books' => 'Nylig opprettede bøker', + 'recently_created_shelves' => 'Nylig opprettede bokhyller', + 'recently_update' => 'Nylig oppdatert', + 'recently_viewed' => 'Nylig vist', + 'recent_activity' => 'Nylig aktivitet', + 'create_now' => 'Opprett en nå', + 'revisions' => 'Revisjoner', + 'meta_revision' => 'Revisjon #:revisionCount', + 'meta_created' => 'Opprettet :timeLength', + 'meta_created_name' => 'Opprettet :timeLength av :user', + 'meta_updated' => 'Oppdatert :timeLength', + 'meta_updated_name' => 'Oppdatert :timeLength av :user', + 'meta_owned_name' => 'Eies av :user', + 'meta_reference_page_count' => 'Sitert på :count side|Sitert på :count sider', + 'entity_select' => 'Velg entitet', + 'entity_select_lack_permission' => 'Do har ikke tilgang til å velge dette elementet', + 'images' => 'Bilder', + 'my_recent_drafts' => 'Mine nylige utkast', + 'my_recently_viewed' => 'Mine nylige visninger', + 'my_most_viewed_favourites' => 'Mine mest sette favoritter', + 'my_favourites' => 'Mine favoritter', + 'no_pages_viewed' => 'Du har ikke sett på noen sider', + 'no_pages_recently_created' => 'Ingen sider har nylig blitt opprettet', + 'no_pages_recently_updated' => 'Ingen sider har nylig blitt oppdatert', + 'export' => 'Eksporter', + 'export_html' => 'Nettside med alt', + 'export_pdf' => 'PDF Fil', + 'export_text' => 'Tekstfil', + 'export_md' => 'Markdownfil', + + // Permissions and restrictions + 'permissions' => 'Tilganger', + 'permissions_desc' => 'Endringer gjort her vil overstyre standardrettigheter gitt via brukerroller.', + 'permissions_book_cascade' => 'Rettigheter satt på bøker vil automatisk arves ned til sidenivå. Du kan overstyre arv ved å definere egne rettigheter på kapitler eller sider.', + 'permissions_chapter_cascade' => 'Rettigheter satt på kapitler vi automatisk arves ned til sider. Du kan overstyre arv ved å definere rettigheter på enkeltsider.', + 'permissions_save' => 'Lagre tillatelser', + 'permissions_owner' => 'Eier', + 'permissions_role_everyone_else' => 'Alle andre', + 'permissions_role_everyone_else_desc' => 'Angi rettigheter for alle roller som ikke blir overstyrt (arvede rettigheter).', + 'permissions_role_override' => 'Overstyr rettigheter for rolle', + 'permissions_inherit_defaults' => 'Arv standardrettigheter', + + // Search + 'search_results' => 'Søkeresultater', + 'search_total_results_found' => ':count resultater funnet|:count totalt', + 'search_clear' => 'Nullstill søk', + 'search_no_pages' => 'Ingen sider passer med søket', + 'search_for_term' => 'Søk etter :term', + 'search_more' => 'Flere resultater', + 'search_advanced' => 'Avansert søk', + 'search_terms' => 'Søkeord', + 'search_content_type' => 'Innholdstype', + 'search_exact_matches' => 'Eksakte ord', + 'search_tags' => 'Søk på merker', + 'search_options' => 'ALternativer', + 'search_viewed_by_me' => 'Sett av meg', + 'search_not_viewed_by_me' => 'Ikke sett av meg', + 'search_permissions_set' => 'Tilganger er angitt', + 'search_created_by_me' => 'Opprettet av meg', + 'search_updated_by_me' => 'Oppdatert av meg', + 'search_owned_by_me' => 'Eid av meg', + 'search_date_options' => 'Datoalternativer', + 'search_updated_before' => 'Oppdatert før', + 'search_updated_after' => 'Oppdatert etter', + 'search_created_before' => 'Opprettet før', + 'search_created_after' => 'Opprettet etter', + 'search_set_date' => 'Angi dato', + 'search_update' => 'Oppdater søk', + + // Shelves + 'shelf' => 'Hylle', + 'shelves' => 'Hyller', + 'x_shelves' => ':count hylle|:count hyller', + 'shelves_empty' => 'Ingen bokhyller er opprettet', + 'shelves_create' => 'Opprett ny bokhylle', + 'shelves_popular' => 'Populære bokhyller', + 'shelves_new' => 'Nye bokhyller', + 'shelves_new_action' => 'Ny bokhylle', + 'shelves_popular_empty' => 'De mest populære bokhyllene blir vist her.', + 'shelves_new_empty' => 'Nylig opprettede bokhyller vises her.', + 'shelves_save' => 'Lagre hylle', + 'shelves_books' => 'Bøker på denne hyllen', + 'shelves_add_books' => 'Legg til bøker på denne hyllen', + 'shelves_drag_books' => 'Dra og slipp bøker nedenfor for å legge dem til i denne hyllen', + 'shelves_empty_contents' => 'Ingen bøker er stabla i denne hylla', + 'shelves_edit_and_assign' => 'Endre hylla for å legge til bøker', + 'shelves_edit_named' => 'Rediger :name (hylle)', + 'shelves_edit' => 'Rediger hylle', + 'shelves_delete' => 'Fjern hylle', + 'shelves_delete_named' => 'Fjern :name (hylle)', + 'shelves_delete_explain' => "Dette vil fjerne hyllen «:name». Bøkene på hyllen vil ikke bli slettet fra systemet.", + 'shelves_delete_confirmation' => 'Er du sikker på at du vil fjerne denne hyllen?', + 'shelves_permissions' => 'Hyllerettigheter', + 'shelves_permissions_updated' => 'Oppdaterte hyllerettigheter', + 'shelves_permissions_active' => 'Aktiverte hyllerettigheter', + 'shelves_permissions_cascade_warning' => 'Rettigheter på en hylle blir ikke automatisk arvet av bøker på hylla. Dette er fordi en bok kan finnes på flere hyller samtidig. Rettigheter kan likevel kopieres til bøker på hylla ved å bruke alternativene under.', + 'shelves_permissions_create' => 'Bokhylle-tillatelser brukes kun for kopiering av tillatelser til under-bøker ved hjelp av handlingen nedenfor. De kontrollerer ikke muligheten til å lage bøker.', + 'shelves_copy_permissions_to_books' => 'Kopier tilganger til bøkene på hylla', + 'shelves_copy_permissions' => 'Kopier tilganger', + 'shelves_copy_permissions_explain' => 'Dette vil kopiere rettighetene på denne hylla til alle bøkene som er plassert på den. Før du starter kopieringen bør du sjekke at rettighetene på hylla er lagret først.', + 'shelves_copy_permission_success' => 'Rettighetene ble kopiert til :count bøker', + + // Books + 'book' => 'Bok', + 'books' => 'Bøker', + 'x_books' => ':count bok|:count bøker', + 'books_empty' => 'Ingen bøker er skrevet', + 'books_popular' => 'Populære bøker', + 'books_recent' => 'Nylige bøker', + 'books_new' => 'Nye bøker', + 'books_new_action' => 'Ny bok', + 'books_popular_empty' => 'De mest populære bøkene', + 'books_new_empty' => 'Siste utgivelser vises her.', + 'books_create' => 'Skriv ny bok', + 'books_delete' => 'Brenn bok', + 'books_delete_named' => 'Brenn boken :bookName', + 'books_delete_explain' => 'Dette vil brenne boken «:bookName». Alle sider i boken vil fordufte for godt.', + 'books_delete_confirmation' => 'Er du sikker på at du vil brenne boken?', + 'books_edit' => 'Endre bok', + 'books_edit_named' => 'Endre boken :bookName', + 'books_form_book_name' => 'Boktittel', + 'books_save' => 'Lagre bok', + 'books_permissions' => 'Boktilganger', + 'books_permissions_updated' => 'Boktilganger oppdatert', + 'books_empty_contents' => 'Ingen sider eller kapitler finnes i denne boken.', + 'books_empty_create_page' => 'Skriv en ny side', + 'books_empty_sort_current_book' => 'Sorter innholdet i boken', + 'books_empty_add_chapter' => 'Start på nytt kapittel', + 'books_permissions_active' => 'Boktilganger er aktive', + 'books_search_this' => 'Søk i boken', + 'books_navigation' => 'Boknavigasjon', + 'books_sort' => 'Sorter bokinnhold', + 'books_sort_desc' => 'Flytt kapitler og sider inni en bok for å omorganisere dem. Andre bøker kan bli lagt til slik at det er enklere å flytte frem og tilbake mellom dem.', + 'books_sort_named' => 'Omorganisér :bookName (bok)', + 'books_sort_name' => 'Sorter på navn', + 'books_sort_created' => 'Sorter på opprettet dato', + 'books_sort_updated' => 'Sorter på oppdatert dato', + 'books_sort_chapters_first' => 'Kapitler først', + 'books_sort_chapters_last' => 'Kapitler sist', + 'books_sort_show_other' => 'Vis andre bøker', + 'books_sort_save' => 'Lagre sortering', + 'books_sort_show_other_desc' => 'Legg til andre bøker her for å inkludere dem i omorganiseringen og muliggjør enkel flytting på tvers av dem.', + 'books_sort_move_up' => 'Flytt opp', + 'books_sort_move_down' => 'Flytt ned', + 'books_sort_move_prev_book' => 'Flytt til forrige bok', + 'books_sort_move_next_book' => 'Flytt til neste bok', + 'books_sort_move_prev_chapter' => 'Flytt inn i forrige kapittel', + 'books_sort_move_next_chapter' => 'Flytt inn i neste kapittel', + 'books_sort_move_book_start' => 'Flytt til starten av boken', + 'books_sort_move_book_end' => 'Flytt til slutten av boken', + 'books_sort_move_before_chapter' => 'Flytt før kapittel', + 'books_sort_move_after_chapter' => 'Flytt etter kapittel', + 'books_copy' => 'Kopiér bok', + 'books_copy_success' => 'Boken ble kopiert', + + // Chapters + 'chapter' => 'Kapittel', + 'chapters' => 'Kapitler', + 'x_chapters' => ':count kapittel|:count kapitler', + 'chapters_popular' => 'Populære kapitler', + 'chapters_new' => 'Nytt kapittel', + 'chapters_create' => 'Skriv nytt kapittel', + 'chapters_delete' => 'Riv ut kapittel', + 'chapters_delete_named' => 'Slett :chapterName (kapittel)', + 'chapters_delete_explain' => 'Dette vil slette «:chapterName» (kapittel). Alle sider i kapittelet vil også slettes.', + 'chapters_delete_confirm' => 'Er du sikker på at du vil slette dette kapittelet?', + 'chapters_edit' => 'Redigér kapittel', + 'chapters_edit_named' => 'Redigér :chapterName (kapittel)', + 'chapters_save' => 'Lagre kapittel', + 'chapters_move' => 'Flytt kapittel', + 'chapters_move_named' => 'Flytt :chapterName (kapittel)', + 'chapters_copy' => 'Kopiér kapittel', + 'chapters_copy_success' => 'Kapitelet ble kopiert', + 'chapters_permissions' => 'Kapitteltilganger', + 'chapters_empty' => 'Det finnes ingen sider i dette kapittelet.', + 'chapters_permissions_active' => 'Kapitteltilganger er aktivert', + 'chapters_permissions_success' => 'Kapitteltilgager er oppdatert', + 'chapters_search_this' => 'Søk i dette kapittelet', + 'chapter_sort_book' => 'Omorganisér bok', + + // Pages + 'page' => 'Side', + 'pages' => 'Sider', + 'x_pages' => ':count side|:count sider', + 'pages_popular' => 'Populære sider', + 'pages_new' => 'Ny side', + 'pages_attachments' => 'Vedlegg', + 'pages_navigation' => 'Sidenavigasjon', + 'pages_delete' => 'Slett side', + 'pages_delete_named' => 'Slett :pageName (side)', + 'pages_delete_draft_named' => 'Slett utkastet :pageName (side)', + 'pages_delete_draft' => 'Slett utkastet', + 'pages_delete_success' => 'Siden er slettet', + 'pages_delete_draft_success' => 'Sideutkastet ble slettet', + 'pages_delete_confirm' => 'Er du sikker på at du vil slette siden?', + 'pages_delete_draft_confirm' => 'Er du sikker på at du vil slette utkastet?', + 'pages_editing_named' => 'Redigerer :pageName (side)', + 'pages_edit_draft_options' => 'Utkastsalternativer', + 'pages_edit_save_draft' => 'Lagre utkast', + 'pages_edit_draft' => 'Redigér utkast', + 'pages_editing_draft' => 'Redigerer utkast', + 'pages_editing_page' => 'Redigerer side', + 'pages_edit_draft_save_at' => 'Sist lagret ', + 'pages_edit_delete_draft' => 'Slett utkast', + 'pages_edit_delete_draft_confirm' => 'Er du sikker på at du vil slette utkastendringer i utkastet? Alle dine endringer, siden siste lagring vil gå tapt, og editoren vil bli oppdatert med den siste siden uten utkast til lagring.', + 'pages_edit_discard_draft' => 'Tilbakestill endring', + 'pages_edit_switch_to_markdown' => 'Bytt til Markdown tekstredigering', + 'pages_edit_switch_to_markdown_clean' => '(Renset innhold)', + 'pages_edit_switch_to_markdown_stable' => '(Urørt innhold)', + 'pages_edit_switch_to_wysiwyg' => 'Bytt til WYSIWYG tekstredigering', + 'pages_edit_set_changelog' => 'Angi endringslogg', + 'pages_edit_enter_changelog_desc' => 'Gi en kort beskrivelse av endringene dine', + 'pages_edit_enter_changelog' => 'Se endringslogg', + 'pages_editor_switch_title' => 'Bytt tekstredigeringsprogram', + 'pages_editor_switch_are_you_sure' => 'Er du sikker på at du vil bytte tekstredigeringsprogram for denne siden?', + 'pages_editor_switch_consider_following' => 'Husk dette når du bytter tekstredigeringsprogram:', + 'pages_editor_switch_consideration_a' => 'Når du bytter, vil den nye tekstredigereren bli satt for alle fremtidige redaktører. Dette inkluderer alle redaktører som ikke kan endre type selv.', + 'pages_editor_switch_consideration_b' => 'Dette kan potensielt føre til tap av formatdetaljer eller syntaks i noen tilfeller.', + 'pages_editor_switch_consideration_c' => 'Etikett- eller redigeringslogg-endringer loggført siden siste lagring vil ikke føres videre etter endringen.', + 'pages_save' => 'Lagre side', + 'pages_title' => 'Sidetittel', + 'pages_name' => 'Sidenavn', + 'pages_md_editor' => 'Tekstbehandler', + 'pages_md_preview' => 'Forhåndsvisning', + 'pages_md_insert_image' => 'Sett inn bilde', + 'pages_md_insert_link' => 'Sett inn lenke', + 'pages_md_insert_drawing' => 'Sett inn tegning', + 'pages_md_show_preview' => 'Forhåndsvisning', + 'pages_md_sync_scroll' => 'Synkroniser forhåndsvisningsrulle', + 'pages_drawing_unsaved' => 'Ulagret tegning funnet', + 'pages_drawing_unsaved_confirm' => 'Ulagret tegningsdata ble funnet fra en tidligere mislykket lagring. Vil du gjenopprette og fortsette å redigere denne ulagrede tegningen?', + 'pages_not_in_chapter' => 'Siden tilhører ingen kapittel', + 'pages_move' => 'Flytt side', + 'pages_copy' => 'Kopiér side', + 'pages_copy_desination' => 'Destinasjon', + 'pages_copy_success' => 'Siden ble flyttet', + 'pages_permissions' => 'Sidetilganger', + 'pages_permissions_success' => 'Sidens tilganger ble endret', + 'pages_revision' => 'Revisjon', + 'pages_revisions' => 'Sidens revisjoner', + 'pages_revisions_desc' => 'Oppført nedenfor er alle tidligere revisjoner av denne siden. Du kan se tilbake igjen, sammenligne og gjenopprette tidligere sideversjoner hvis du tillater det. Den hele sidens historikk kan kanskje ikke gjenspeiles fullstendig her, avhengig av systemkonfigurasjonen, kan gamle revisjoner bli slettet automatisk.', + 'pages_revisions_named' => 'Revisjoner for :pageName', + 'pages_revision_named' => 'Revisjoner for :pageName', + 'pages_revision_restored_from' => 'Gjenopprettet fra #:id; :summary', + 'pages_revisions_created_by' => 'Skrevet av', + 'pages_revisions_date' => 'Revideringsdato', + 'pages_revisions_number' => '#', + 'pages_revisions_sort_number' => 'Revisjonsnummer', + 'pages_revisions_numbered' => 'Revisjon #:id', + 'pages_revisions_numbered_changes' => 'Endringer på revisjon #:id', + 'pages_revisions_editor' => 'Tekstredigeringstype', + 'pages_revisions_changelog' => 'Endringslogg', + 'pages_revisions_changes' => 'Endringer', + 'pages_revisions_current' => 'Siste versjon', + 'pages_revisions_preview' => 'Forhåndsvisning', + 'pages_revisions_restore' => 'Gjenopprett', + 'pages_revisions_none' => 'Denne siden har ingen revisjoner', + 'pages_copy_link' => 'Kopier lenke', + 'pages_edit_content_link' => 'Hopp til seksjonen i tekstbehandleren', + 'pages_pointer_enter_mode' => 'Gå til seksjonen velg modus', + 'pages_pointer_label' => 'Sidens seksjon alternativer', + 'pages_pointer_permalink' => 'Sideseksjons permalenke', + 'pages_pointer_include_tag' => 'Sideseksjonen inkluderer Tag', + 'pages_pointer_toggle_link' => 'Permalenke modus, trykk for å vise inkluderer tag', + 'pages_pointer_toggle_include' => 'Inkluder tag-modus, trykk for å vise permalenke', + 'pages_permissions_active' => 'Sidetilganger er aktive', + 'pages_initial_revision' => 'Første publisering', + 'pages_references_update_revision' => 'Automatisk oppdatering av interne lenker', + 'pages_initial_name' => 'Ny side', + 'pages_editing_draft_notification' => 'Du skriver på et utkast som sist ble lagret :timeDiff.', + 'pages_draft_edited_notification' => 'Siden har blitt endret siden du startet. Det anbefales at du forkaster dine endringer.', + 'pages_draft_page_changed_since_creation' => 'Denne siden er blitt oppdatert etter at dette utkastet ble opprettet. Det anbefales at du forkaster dette utkastet, eller er ekstra forsiktig slik at du ikke overskriver noen sideendringer.', + 'pages_draft_edit_active' => [ + 'start_a' => ':count forfattere har begynt å endre denne siden.', + 'start_b' => ':userName skriver på siden for øyeblikket', + 'time_a' => 'siden sist siden ble oppdatert', + 'time_b' => 'i løpet av de siste :minCount minuttene', + 'message' => ':start :time. Prøv å ikke overskriv hverandres endringer!', + ], + 'pages_draft_discarded' => 'Utkastet er forkastet! Redigeringsprogrammet er oppdatert med gjeldende sideinnhold', + 'pages_draft_deleted' => 'Utkast slettet! Redigeringsprogrammet er oppdatert med gjeldende sideinnhold', + 'pages_specific' => 'Bestemt side', + 'pages_is_template' => 'Sidemal', + + // Editor Sidebar + 'toggle_sidebar' => 'Vis/gøym sidepanelet', + 'page_tags' => 'Sidemerker', + 'chapter_tags' => 'Kapittelmerker', + 'book_tags' => 'Bokmerker', + 'shelf_tags' => 'Hyllemerker', + 'tag' => 'Merke', + 'tags' => 'Merker', + 'tags_index_desc' => 'Merker kan brukes på innhold i systemet for å anvende en kategorisering på en fleksibel måte. Etiketter kan ha både en nøkkel og verdi, med valgfri. Når det er brukt, kan innhold sjekkes ved hjelp av taggnavn og verdi.', + 'tag_name' => 'Merketittel', + 'tag_value' => 'Merkeverdi (Valgfritt)', + 'tags_explain' => "Legg til merker for å kategorisere innholdet ditt. \n Du kan legge til merkeverdier for å beskrive dem ytterligere.", + 'tags_add' => 'Legg til flere merker', + 'tags_remove' => 'Fjern merke', + 'tags_usages' => 'Totalt emneordbruk', + 'tags_assigned_pages' => 'Tilordnet sider', + 'tags_assigned_chapters' => 'Tildelt til kapitler', + 'tags_assigned_books' => 'Tilordnet til bøker', + 'tags_assigned_shelves' => 'Tilordnet hyller', + 'tags_x_unique_values' => ':count unike verdier', + 'tags_all_values' => 'Alle verdier', + 'tags_view_tags' => 'Vis etiketter', + 'tags_view_existing_tags' => 'Vis eksisterende etiketter', + 'tags_list_empty_hint' => 'Etiketter kan tilordnes via sidepanelet, eller mens du redigerer detaljene for en hylle, bok eller kapittel.', + 'attachments' => 'Vedlegg', + 'attachments_explain' => 'Last opp vedlegg eller legg til lenker for å berike innholdet. Disse vil vises i sidestolpen på siden.', + 'attachments_explain_instant_save' => 'Endringer her blir lagret med en gang.', + 'attachments_upload' => 'Last opp vedlegg', + 'attachments_link' => 'Fest lenke', + 'attachments_upload_drop' => 'Alternativt kan du dra og slippe en fil her for å laste den opp som et vedlegg.', + 'attachments_set_link' => 'Angi lenke', + 'attachments_delete' => 'Er du sikker på at du vil fjerne vedlegget?', + 'attachments_dropzone' => 'Slipp filer her for å laste opp', + 'attachments_no_files' => 'Ingen vedlegg er lastet opp', + 'attachments_explain_link' => 'Du kan feste lenker til denne. Det kan være henvisning til andre sider, bøker etc. eller lenker fra nettet.', + 'attachments_link_name' => 'Lenkenavn', + 'attachment_link' => 'Vedleggslenke', + 'attachments_link_url' => 'Lenke til vedlegg', + 'attachments_link_url_hint' => 'Adresse til lenke eller vedlegg', + 'attach' => 'Fest', + 'attachments_insert_link' => 'Fest vedleggslenke', + 'attachments_edit_file' => 'Endre vedlegg', + 'attachments_edit_file_name' => 'Vedleggsnavn', + 'attachments_edit_drop_upload' => 'Dra og slipp eller trykk her for å oppdatere eller overskrive', + 'attachments_order_updated' => 'Vedleggssortering endret', + 'attachments_updated_success' => 'Vedleggsdetaljer endret', + 'attachments_deleted' => 'Vedlegg fjernet', + 'attachments_file_uploaded' => 'Vedlegg ble lastet opp', + 'attachments_file_updated' => 'Vedlegget ble oppdatert', + 'attachments_link_attached' => 'Lenken ble festet til siden', + 'templates' => 'Maler', + 'templates_set_as_template' => 'Siden er en mal', + 'templates_explain_set_as_template' => 'Du kan angi denne siden som en mal slik at innholdet kan brukes når du oppretter andre sider. Andre brukere vil kunne bruke denne malen hvis de har visningstillatelser for denne siden.', + 'templates_replace_content' => 'Bytt sideinnhold', + 'templates_append_content' => 'Legg til neders på siden', + 'templates_prepend_content' => 'Legg til øverst på siden', + + // Profile View + 'profile_user_for_x' => 'Medlem i :time', + 'profile_created_content' => 'Har skrevet', + 'profile_not_created_pages' => ':userName har ikke forfattet noen sider', + 'profile_not_created_chapters' => ':userName har ikke opprettet noen kapitler', + 'profile_not_created_books' => ':userName har ikke laget noen bøker', + 'profile_not_created_shelves' => ':userName har ikke hengt opp noen hyller', + + // Comments + 'comment' => 'Kommentar', + 'comments' => 'Kommentarer', + 'comment_add' => 'Skriv kommentar', + 'comment_placeholder' => 'Skriv en kommentar her', + 'comment_count' => '{0} Ingen kommentarer|{1} 1 kommentar|[2,*] :count kommentarer', + 'comment_save' => 'Publiser kommentar', + 'comment_new' => 'Ny kommentar', + 'comment_created' => 'kommenterte :createDiff', + 'comment_updated' => 'Oppdatert :updateDiff av :username', + 'comment_updated_indicator' => 'Oppdatert', + 'comment_deleted_success' => 'Kommentar fjernet', + 'comment_created_success' => 'Kommentar skrevet', + 'comment_updated_success' => 'Kommentar endret', + 'comment_delete_confirm' => 'Er du sikker på at du vil fjerne kommentaren?', + 'comment_in_reply_to' => 'Som svar til :commentId', + 'comment_editor_explain' => 'Her er kommentarene som er på denne siden. Kommentarer kan legges til og administreres når du ser på den lagrede siden.', + + // Revision + 'revision_delete_confirm' => 'Vil du slette revisjonen?', + 'revision_restore_confirm' => 'Vil du gjenopprette revisjonen? Innholdet på siden vil bli overskrevet med denne revisjonen.', + 'revision_cannot_delete_latest' => 'CKan ikke slette siste revisjon.', + + // Copy view + 'copy_consider' => 'Vennligst vurder nedenfor når du kopierer innholdet.', + 'copy_consider_permissions' => 'Egendefinerte tilgangsinnstillinger vil ikke bli kopiert.', + 'copy_consider_owner' => 'Du vil bli eier av alt kopiert innhold.', + 'copy_consider_images' => 'Sidebildefiler vil ikke bli duplisert og de opprinnelige bildene beholder relasjonen til siden de opprinnelig ble lastet opp til.', + 'copy_consider_attachments' => 'Sidevedlegg vil ikke bli kopiert.', + 'copy_consider_access' => 'Endring av sted, eier eller rettigheter kan føre til at innholdet er tilgjengelig for dem som tidligere har vært uten adgang.', + + // Conversions + 'convert_to_shelf' => 'Konverter til bokhylle', + 'convert_to_shelf_contents_desc' => 'Du kan konvertere denne boken til en ny hylle med samme innhold. Kapitteler i denne boken vil bli konvertert til nye bøker. Hvis boken inneholder noen sider, som ikke er i et kapitler, boka blir omdøpt og med slike sider, og boka blir en del av den nye bokhyllen.', + 'convert_to_shelf_permissions_desc' => 'Eventuelle tillatelser som er satt på denne boka, vil bli kopiert til ny hylle og til alle nye under-bøker som ikke har egne tillatelser satt. Vær oppmerksom på at tillatelser på hyllene ikke skjuler automatisk innhold innenfor, da de gjør for bøker.', + 'convert_book' => 'Konverter bok', + 'convert_book_confirm' => 'Er du sikker på at du vil konvertere denne boken?', + 'convert_undo_warning' => 'Dette kan ikke bli så lett å angre.', + 'convert_to_book' => 'Konverter til bok', + 'convert_to_book_desc' => 'Du kan konvertere kapittelet til en ny bok med samme innhold. Alle tillatelser som er angitt i dette kapittelet vil bli kopiert til den nye boken, men alle arvede tillatelser, fra overordnet bok vil ikke kopieres noe som kan føre til en endring av tilgangskontroll.', + 'convert_chapter' => 'Konverter kapittel', + 'convert_chapter_confirm' => 'Er du sikker på at du vil konvertere dette kapittelet?', + + // References + 'references' => 'Referanser', + 'references_none' => 'Det er ingen sporede referanser til dette elementet.', + 'references_to_desc' => 'Nedenfor vises alle de kjente sidene i systemet som lenker til denne oppføringen.', + + // Watch Options + 'watch' => 'Overvåk', + 'watch_title_default' => 'Standardinnstillinger', + 'watch_desc_default' => 'Bytt til dine standardinnstilleringer for varsling.', + 'watch_title_ignore' => 'Ignorer', + 'watch_desc_ignore' => 'Ignorer alle varslinger, inkludert de fra preferanser for brukernivå.', + 'watch_title_new' => 'Nye sider', + 'watch_desc_new' => 'Varsle når en ny side er opprettet innenfor dette elementet.', + 'watch_title_updates' => 'Alle sideoppdateringer', + 'watch_desc_updates' => 'Varsle på alle nye sider og endringer av siden.', + 'watch_desc_updates_page' => 'Varsle ved alle sideendringer.', + 'watch_title_comments' => 'Alle sideoppdateringer og kommentarer', + 'watch_desc_comments' => 'Varsle om alle nye sider, endringer på side og nye kommentarer.', + 'watch_desc_comments_page' => 'Varsle ved sideendringer og nye kommentarer.', + 'watch_change_default' => 'Endre standard varslingsinnstillinger', + 'watch_detail_ignore' => 'Ignorerer varsler', + 'watch_detail_new' => 'Varsling for nye sider', + 'watch_detail_updates' => 'Varsling for nye sider og oppdateringer', + 'watch_detail_comments' => 'Varsling for nye sider, oppdateringer og kommentarer', + 'watch_detail_parent_book' => 'Overvåker via overordnet bok', + 'watch_detail_parent_book_ignore' => 'Ignorerer via overordnet bok', + 'watch_detail_parent_chapter' => 'Overvåker via overordnet kapittel', + 'watch_detail_parent_chapter_ignore' => 'Ignorerer via overordnet kapittel', +]; diff --git a/lang/nn/errors.php b/lang/nn/errors.php new file mode 100644 index 00000000000..5cea95da02c --- /dev/null +++ b/lang/nn/errors.php @@ -0,0 +1,120 @@ + 'Du har ikke tilgang til å se denne siden.', + 'permissionJson' => 'Du har ikke tilgang til å utføre denne handlingen.', + + // Auth + 'error_user_exists_different_creds' => 'En konto med :email finnes allerede, men har andre detaljer.', + 'email_already_confirmed' => 'E-posten er allerede bekreftet, du kan forsøke å logge inn.', + 'email_confirmation_invalid' => 'Denne bekreftelseskoden er allerede benyttet eller utgått. Prøv å registrere på nytt.', + 'email_confirmation_expired' => 'Bekreftelseskoden er allerede utgått, en ny e-post er sendt.', + 'email_confirmation_awaiting' => 'Du må bekrefte e-posten for denne kontoen.', + 'ldap_fail_anonymous' => 'LDAP kan ikke benyttes med anonym tilgang for denne tjeneren.', + 'ldap_fail_authed' => 'LDAP tilgang feilet med angitt DN', + 'ldap_extension_not_installed' => 'LDAP PHP modulen er ikke installert.', + 'ldap_cannot_connect' => 'Klarer ikke koble til LDAP på denne adressen', + 'saml_already_logged_in' => 'Allerede logget inn', + 'saml_user_not_registered' => 'Kontoen med navn :name er ikke registert, registrering er også deaktivert.', + 'saml_no_email_address' => 'Denne kontoinformasjonen finnes ikke i det eksterne autentiseringssystemet.', + 'saml_invalid_response_id' => 'Forespørselen fra det eksterne autentiseringssystemet gjenkjennes ikke av en prosess som startes av dette programmet. Å navigere tilbake etter pålogging kan forårsake dette problemet.', + 'saml_fail_authed' => 'Innlogging gjennom :system feilet. Fikk ikke kontakt med autentiseringstjeneren.', + 'oidc_already_logged_in' => 'Allerede logget inn', + 'oidc_user_not_registered' => 'Brukeren :name er ikke registrert og automatisk registrering er deaktivert', + 'oidc_no_email_address' => 'Finner ikke en e-postadresse, for denne brukeren, i dataene som leveres av det eksterne autentiseringssystemet', + 'oidc_fail_authed' => 'Innlogging ved hjelp av :system feilet, systemet ga ikke vellykket godkjenning', + 'social_no_action_defined' => 'Ingen handlinger er definert', + 'social_login_bad_response' => "Feilmelding mottat fra :socialAccount innloggingstjeneste: \n:error", + 'social_account_in_use' => 'Denne :socialAccount kontoen er allerede registrert, Prøv å logge inn med :socialAccount alternativet.', + 'social_account_email_in_use' => 'E-posten :email er allerede i bruk. Har du allerede en konto hos :socialAccount kan dette angis fra profilsiden din.', + 'social_account_existing' => 'Denne :socialAccount er allerede koblet til din konto.', + 'social_account_already_used_existing' => 'Denne :socialAccount kontoen brukes allerede av noen andre.', + 'social_account_not_used' => 'Denne :socialAccount konten er ikke koblet til noen konto, angi denne i profilinnstillingene dine. ', + 'social_account_register_instructions' => 'Har du ikke en konto her ennå, kan du benytte :socialAccount alternativet for å registrere deg.', + 'social_driver_not_found' => 'Autentiseringstjeneste fra sosiale medier er ikke installert', + 'social_driver_not_configured' => 'Dine :socialAccount innstilliner er ikke angitt.', + 'invite_token_expired' => 'Invitasjonslenken har utgått, du kan forsøke å be om nytt passord istede.', + + // System + 'path_not_writable' => 'Filstien :filePath aksepterer ikke filer, du må sjekke filstitilganger i systemet.', + 'cannot_get_image_from_url' => 'Kan ikke hente bilde fra :url', + 'cannot_create_thumbs' => 'Kan ikke opprette miniatyrbilder. GD PHP er ikke installert.', + 'server_upload_limit' => 'Vedlegget er for stort, forsøk med et mindre vedlegg.', + 'server_post_limit' => 'Serveren kan ikkje ta i mot denne mengda med data. Prøv igjen med mindre data eller ei mindre fil.', + 'uploaded' => 'Tjenesten aksepterer ikke vedlegg som er så stor.', + + // Drawing & Images + 'image_upload_error' => 'Bildet kunne ikke lastes opp, forsøk igjen.', + 'image_upload_type_error' => 'Bildeformatet støttes ikke, forsøk med et annet format.', + 'image_upload_replace_type' => 'Bildeerstatning må være av samme type', + 'image_upload_memory_limit' => 'Klarte ikkje å ta i mot bilete og lage miniatyrbilete grunna grenser knytt til systemet.', + 'image_thumbnail_memory_limit' => 'Klarte ikkje å lage miniatyrbilete grunna grenser knytt til systemet.', + 'image_gallery_thumbnail_memory_limit' => 'Klarte ikkje å lage miniatyrbilete grunna grenser knytt til systemet.', + 'drawing_data_not_found' => 'Tegningsdata kunne ikke lastes. Det er mulig at tegningsfilen ikke finnes lenger, eller du har ikke rettigheter til å få tilgang til den.', + + // Attachments + 'attachment_not_found' => 'Vedlegget ble ikke funnet', + 'attachment_upload_error' => 'En feil har oppstått ved opplasting av vedleggsfil', + + // Pages + 'page_draft_autosave_fail' => 'Kunne ikke lagre utkastet, forsikre deg om at du er tilkoblet tjeneren (Har du nettilgang?)', + 'page_draft_delete_fail' => 'Kunne ikke slette sideutkast og hente gjeldende side lagret innhold', + 'page_custom_home_deletion' => 'Kan ikke slette en side som er satt som forside.', + + // Entities + 'entity_not_found' => 'Entitet ble ikke funnet', + 'bookshelf_not_found' => 'Bokhyllen ble ikke funnet', + 'book_not_found' => 'Boken ble ikke funnet', + 'page_not_found' => 'Siden ble ikke funnet', + 'chapter_not_found' => 'Kapittel ble ikke funnet', + 'selected_book_not_found' => 'Den valgte boken eksisterer ikke', + 'selected_book_chapter_not_found' => 'Den valgte boken eller kapittelet eksisterer ikke', + 'guests_cannot_save_drafts' => 'Gjester kan ikke lagre utkast', + + // Users + 'users_cannot_delete_only_admin' => 'Du kan ikke kaste ut den eneste administratoren', + 'users_cannot_delete_guest' => 'Du kan ikke slette gjestebrukeren (Du kan deaktivere offentlig visning istede)', + + // Roles + 'role_cannot_be_edited' => 'Denne rollen kan ikke endres', + 'role_system_cannot_be_deleted' => 'Denne systemrollen kan ikke slettes', + 'role_registration_default_cannot_delete' => 'Du kan ikke slette en rolle som er satt som registreringsrolle (rollen nye kontoer får når de registrerer seg)', + 'role_cannot_remove_only_admin' => 'Denne brukeren er den eneste brukeren som er tildelt administratorrollen. Tilordne administratorrollen til en annen bruker før du prøver å fjerne den her.', + + // Comments + 'comment_list' => 'Det oppstod en feil under henting av kommentarene.', + 'cannot_add_comment_to_draft' => 'Du kan ikke legge til kommentarer i et utkast.', + 'comment_add' => 'Det oppsto en feil da kommentaren skulle legges til / oppdateres.', + 'comment_delete' => 'Det oppstod en feil under sletting av kommentaren.', + 'empty_comment' => 'Kan ikke legge til en tom kommentar.', + + // Error pages + '404_page_not_found' => 'Siden finnes ikke', + 'sorry_page_not_found' => 'Beklager, siden du leter etter ble ikke funnet.', + 'sorry_page_not_found_permission_warning' => 'Hvis du forventet at denne siden skulle eksistere, har du kanskje ikke tillatelse til å se den.', + 'image_not_found' => 'Bildet ble ikke funnet', + 'image_not_found_subtitle' => 'Beklager, bildefilen du ser etter ble ikke funnet.', + 'image_not_found_details' => 'Om du forventet at dette bildet skal eksistere, er det mulig det er slettet.', + 'return_home' => 'Gå til hovedside', + 'error_occurred' => 'En feil oppsto', + 'app_down' => ':appName er nede for øyeblikket', + 'back_soon' => 'Den vil snart komme tilbake.', + + // API errors + 'api_no_authorization_found' => 'Ingen autorisasjonstoken ble funnet på forespørselen', + 'api_bad_authorization_format' => 'Det ble funnet et autorisasjonstoken på forespørselen, men formatet virket feil', + 'api_user_token_not_found' => 'Ingen samsvarende API-token ble funnet for det angitte autorisasjonstokenet', + 'api_incorrect_token_secret' => 'Hemmeligheten som er gitt for det gitte brukte API-tokenet er feil', + 'api_user_no_api_permission' => 'Eieren av det brukte API-tokenet har ikke tillatelse til å ringe API-samtaler', + 'api_user_token_expired' => 'Autorisasjonstokenet som er brukt, har utløpt', + + // Settings & Maintenance + 'maintenance_test_email_failure' => 'Feil kastet når du sendte en test-e-post:', + + // HTTP errors + 'http_ssr_url_no_match' => 'URLen samsvarer ikke med de konfigurerte SSR-vertene', +]; diff --git a/lang/nn/notifications.php b/lang/nn/notifications.php new file mode 100644 index 00000000000..78aad718159 --- /dev/null +++ b/lang/nn/notifications.php @@ -0,0 +1,26 @@ + 'Ny kommentar på siden: :pageName', + 'new_comment_intro' => 'En bruker har kommentert en side i :appName:', + 'new_page_subject' => 'Ny side: :pageName', + 'new_page_intro' => 'En ny side er opprettet i :appName:', + 'updated_page_subject' => 'Oppdatert side: :pageName', + 'updated_page_intro' => 'En side er oppdatert i :appName:', + 'updated_page_debounce' => 'For å forhindre mange varslinger, vil du ikke få nye varslinger for endringer på denne siden fra samme forfatter.', + + 'detail_page_name' => 'Sidenavn:', + 'detail_commenter' => 'Kommentar fra:', + 'detail_comment' => 'Kommentar:', + 'detail_created_by' => 'Opprettet av:', + 'detail_updated_by' => 'Oppdatert av:', + + 'action_view_comment' => 'Vis kommentar', + 'action_view_page' => 'Se side', + + 'footer_reason' => 'Denne meldingen ble sendt til deg fordi :link dekker denne typen aktivitet for dette elementet.', + 'footer_reason_link' => 'dine varslingsinnstillinger', +]; diff --git a/lang/nn/pagination.php b/lang/nn/pagination.php new file mode 100644 index 00000000000..d910da124be --- /dev/null +++ b/lang/nn/pagination.php @@ -0,0 +1,12 @@ + '« Forrige', + 'next' => 'Neste »', + +]; diff --git a/lang/nn/passwords.php b/lang/nn/passwords.php new file mode 100644 index 00000000000..8c3215b422a --- /dev/null +++ b/lang/nn/passwords.php @@ -0,0 +1,15 @@ + 'Passord må inneholde minst åtte tegn og samsvarer med bekreftelsen.', + 'user' => "Vi finner ikke en bruker med den e-postadressen.", + 'token' => 'Passordet for tilbakestilling av passord er ugyldig for denne e-postadressen.', + 'sent' => 'Vi har sendt e-postadressen til tilbakestilling av passordet ditt!', + 'reset' => 'Passordet ditt har blitt tilbakestilt!', + +]; diff --git a/lang/nn/preferences.php b/lang/nn/preferences.php new file mode 100644 index 00000000000..4e6e6c1ffd1 --- /dev/null +++ b/lang/nn/preferences.php @@ -0,0 +1,51 @@ + 'Min konto', + + 'shortcuts' => 'Snarveier', + 'shortcuts_interface' => 'UI snarvegar', + 'shortcuts_toggle_desc' => 'Her kan du aktivere eller deaktivere snarveier for tastatur system som brukes til navigasjon og handlinger.', + 'shortcuts_customize_desc' => 'Du kan tilpasse hver av snarveiene nedenfor. Trykk på ønsket nøkkelkombinasjon etter å ha valgt inndata for en snarvei.', + 'shortcuts_toggle_label' => 'Tastatursnarveier aktivert', + 'shortcuts_section_navigation' => 'Navigasjon', + 'shortcuts_section_actions' => 'Vanlige handlinger', + 'shortcuts_save' => 'Lagre snarveier', + 'shortcuts_overlay_desc' => 'Merk: Når snarveier er aktivert er et hjelperoverlegg tilgjengelig via å trykke "?" som vil fremheve de tilgjengelige snarveiene som for øyeblikket er synlige på skjermen.', + 'shortcuts_update_success' => 'Snarvei innstillinger er oppdatert!', + 'shortcuts_overview_desc' => 'Behandle tastatursnarveier du kan bruke for å navigere i systembrukergrensesnittet.', + + 'notifications' => 'Innstillinger for varsling', + 'notifications_desc' => 'Kontroller e-postvarslene du mottar når en bestemt aktivitet utføres i systemet.', + 'notifications_opt_own_page_changes' => 'Varsle ved endringer til sider jeg eier', + 'notifications_opt_own_page_comments' => 'Varsle om kommentarer på sider jeg eier', + 'notifications_opt_comment_replies' => 'Varsle ved svar på mine kommentarer', + 'notifications_save' => 'Lagre innstillinger', + 'notifications_update_success' => 'Varslingsinnstillingene er oppdatert!', + 'notifications_watched' => 'Overvåka & ignorerte elementer', + 'notifications_watched_desc' => ' Nedenfor er elementene som har egendefinerte varslingsinnstillinger i bruk. For å oppdatere innstillingene for disse, se elementet, finn varslingsalternativene i sidepanelet.', + + 'auth' => 'Tilgang og tryggleik', + 'auth_change_password' => 'Endre passord', + 'auth_change_password_desc' => 'Endre passordet du brukar for å logge inn på programmet. Dette må vere minst 8 teikn langt.', + 'auth_change_password_success' => 'Passordet har blitt oppdatert!', + + 'profile' => 'Profildetaljar', + 'profile_desc' => 'Gi opplysningar om kontoen som representerer deg til andre brukarar, i tillegg til opplysninger som vert brukt til kommunikasjon og systempersonalisering.', + 'profile_view_public' => 'Vis offentleg profil', + 'profile_name_desc' => 'Tilpass visingsnavn som vil vere synlig for andre brukarar i systemet ved hjelp av aktiviteten du utfører, og innhaldet du eiger.', + 'profile_email_desc' => 'Denne e-posten vert brukt til å sende varsler, og avhengig av aktiv systemautentisering, systemtilgang.', + 'profile_email_no_permission' => 'Du har diverre ikkje løyve til å endre e-postadressa di. Om du ynskjer å endre, må du be ein administrator om å endre dette for deg.', + 'profile_avatar_desc' => 'Velg eit profilbilete. Ideelt sett bør dette bildet vere kvadratisk og ca. 256 px i breidde og høgde.', + 'profile_admin_options' => 'Alternativer for administrator', + 'profile_admin_options_desc' => 'Du finner fleire alternativ på administratornivå, t. d. administrasjon av rolletildelinger, for din brukerkonto i området "Innstillingar > Brukarar" i applikasjonen.', + + 'delete_account' => 'Slett konto', + 'delete_my_account' => 'Slett kontoen min', + 'delete_my_account_desc' => 'Dette vil slette din brukarkonto frå systemet. Du vil ikkje kunne gjenopprette kontoen eller tilbakestille denne handlinga. Innhald du har oppretta, som t. d. sider og bilete, vil forbli uendret.', + 'delete_my_account_warning' => 'Er du sikker på at du vil slette kontoen din?', +]; diff --git a/lang/nn/settings.php b/lang/nn/settings.php new file mode 100644 index 00000000000..a6d848331b1 --- /dev/null +++ b/lang/nn/settings.php @@ -0,0 +1,328 @@ + 'Innstillinger', + 'settings_save' => 'Lagre innstillinger', + 'system_version' => 'System versjon', + 'categories' => 'Kategorier', + + // App Settings + 'app_customization' => 'Tilpassing', + 'app_features_security' => 'Funksjoner og sikkerhet', + 'app_name' => 'Applikasjonsnavn', + 'app_name_desc' => 'Dette navnet vises i overskriften og i alle e-postmeldinger som sendes av systemet.', + 'app_name_header' => 'Vis navn i topptekst', + 'app_public_access' => 'Offentlig tilgang', + 'app_public_access_desc' => 'Hvis du aktiverer dette alternativet, kan besøkende, som ikke er logget på, få tilgang til innhold i din BookStack-forekomst.', + 'app_public_access_desc_guest' => 'Tilgang for offentlige besøkende kan kontrolleres gjennom "Gjest" -brukeren.', + 'app_public_access_toggle' => 'Tillat offentlig tilgang', + 'app_public_viewing' => 'Tillat offentlig visning?', + 'app_secure_images' => 'Høyere sikkerhet på bildeopplastinger', + 'app_secure_images_toggle' => 'Enable høyere sikkerhet på bildeopplastinger', + 'app_secure_images_desc' => 'Av ytelsesgrunner er alle bilder offentlige. Dette alternativet legger til en tilfeldig streng som er vanskelig å gjette foran bildets nettadresser. Forsikre deg om at katalogindekser ikke er aktivert for å forhindre enkel tilgang.', + 'app_default_editor' => 'Standard sideredigeringsprogram', + 'app_default_editor_desc' => 'Velg hvilken tekstbehandler som skal brukes som standard når du redigerer nye sider. Dette kan overskrives på et sidenivå der tillatelser tillates.', + 'app_custom_html' => 'Tilpasset HTML-hodeinnhold', + 'app_custom_html_desc' => 'Alt innhold som legges til her, blir satt inn i bunnen av -delen på hver side. Dette er praktisk for å overstyre stiler eller legge til analysekode.', + 'app_custom_html_disabled_notice' => 'Tilpasset HTML-hodeinnhold er deaktivert på denne innstillingssiden for å sikre at eventuelle endringer ødelegger noe, kan tilbakestilles.', + 'app_logo' => 'Applikasjonslogo', + 'app_logo_desc' => 'Dette brukes i programtoppfeltet blant andre områder. Dette bildet skal være 86px i høyde. Store bilder vil bli skalert ned.', + 'app_icon' => 'Applikasjons ikon', + 'app_icon_desc' => 'Dette ikonet brukes for nettleserfaner og snarveisikoner. Dette bør være et bilde på 256 px kvadrat PNG.', + 'app_homepage' => 'Applikasjonens hjemmeside', + 'app_homepage_desc' => 'Velg en visning som skal vises på hjemmesiden i stedet for standardvisningen. Sidetillatelser ignoreres for utvalgte sider.', + 'app_homepage_select' => 'Velg en side', + 'app_footer_links' => 'Fotlenker', + 'app_footer_links_desc' => 'Legg til fotlenker i sidens fotområde. Disse vil vises nederst på de fleste sider, inkludert sider som ikke krever innlogging. Du kan bruke «trans::» etiketter for system-definerte oversettelser. For eksempel: Bruk «trans::common.privacy_policy» for å vise teksten «Personvernregler» og «trans::common.terms_of_service» for å vise teksten «Bruksvilkår».', + 'app_footer_links_label' => 'Lenketekst', + 'app_footer_links_url' => 'Lenke', + 'app_footer_links_add' => 'Legg til fotlenke', + 'app_disable_comments' => 'Deaktiver kommentarer', + 'app_disable_comments_toggle' => 'Deaktiver kommentarer', + 'app_disable_comments_desc' => 'Deaktiver kommentarer på tvers av alle sidene i applikasjonen.
Eksisterende kommentarer vises ikke.', + + // Color settings + 'color_scheme' => 'Applikasjonens farge oppsett', + 'color_scheme_desc' => 'Sett farger for å bruke i programmets brukergrensesnitt. Farger kan konfigureres separat for mørke og lysmoduser for å passe best inn temaet og sørge for lesbarhet.', + 'ui_colors_desc' => 'Angi primær farge for programmet og standard link farge. Primær farge brukes hovedsakelig for toppbanner, knapper og grensesnittets dekorasjoner. Standardfargen for koblinger brukes for tekstbaserte lenker og handlinger, både i skriftlig innhold og i programgrensesnittet.', + 'app_color' => 'Primær farge', + 'link_color' => 'Standard koblingsfarge', + 'content_colors_desc' => 'Angi farger for alle elementer i organiseringshierarkiet. Velger du farger med lik lysstyrke til standard farger anbefales for lesbarhet.', + 'bookshelf_color' => 'Hyllefarge', + 'book_color' => 'Bokfarge', + 'chapter_color' => 'Kapittelfarge', + 'page_color' => 'Sidefarge', + 'page_draft_color' => 'Sideutkastsfarge', + + // Registration Settings + 'reg_settings' => 'Registrering', + 'reg_enable' => 'Tillat registrering', + 'reg_enable_toggle' => 'Tillat registrering', + 'reg_enable_desc' => 'Når registrering er aktivert vil brukeren kunne registrere seg som applikasjonsbruker. Ved registrering får de en standard brukerrolle.', + 'reg_default_role' => 'Standard brukerrolle etter registrering', + 'reg_enable_external_warning' => 'Alternativet ovenfor ignoreres mens ekstern LDAP- eller SAML-autentisering er aktiv. Brukerkontoer for ikke-eksisterende medlemmer blir automatisk opprettet hvis autentisering mot det eksterne systemet i bruk lykkes.', + 'reg_email_confirmation' => 'E-postbekreftelse', + 'reg_email_confirmation_toggle' => 'Krev e-postbekreftelse', + 'reg_confirm_email_desc' => 'Hvis domenebegrensning brukes, vil e-postbekreftelse være nødvendig, og dette alternativet vil bli ignorert.', + 'reg_confirm_restrict_domain' => 'Domenebegrensning', + 'reg_confirm_restrict_domain_desc' => 'Skriv inn en kommaseparert liste over e-postdomener du vil begrense registreringen til. Brukerne vil bli sendt en e-post for å bekrefte adressen deres før de får lov til å kommunisere med applikasjonen.
Vær oppmerksom på at brukere vil kunne endre e-postadressene sine etter vellykket registrering.', + 'reg_confirm_restrict_domain_placeholder' => 'Ingen begrensninger er satt', + + // Maintenance settings + 'maint' => 'Vedlikehold', + 'maint_image_cleanup' => 'Bildeopprydding', + 'maint_image_cleanup_desc' => 'Skanner side og revisjonsinnhold for å sjekke hvilke bilder og tegninger som for øyeblikket er i bruk, og hvilke bilder som er overflødige. Forsikre deg om at du lager en full database og sikkerhetskopiering av bilder før du kjører denne.', + 'maint_delete_images_only_in_revisions' => 'Slett også bilder som bare finnes i game siderevisjoner', + 'maint_image_cleanup_run' => 'Kjør opprydding', + 'maint_image_cleanup_warning' => ':count potensielt ubrukte bilder ble funnet. Er du sikker på at du vil slette disse bildene?', + 'maint_image_cleanup_success' => ':count potensielt ubrukte bilder funnet og slettet!', + 'maint_image_cleanup_nothing_found' => 'Ingen ubrukte bilder funnet, ingenting slettet!', + 'maint_send_test_email' => 'Send en test-e-post', + 'maint_send_test_email_desc' => 'Dette sender en test-e-post til din e-postadresse som er angitt i profilen din.', + 'maint_send_test_email_run' => 'Send en test-e-post', + 'maint_send_test_email_success' => 'Send en test-e-post til :address', + 'maint_send_test_email_mail_subject' => 'Test-e-post', + 'maint_send_test_email_mail_greeting' => 'E-postsending ser ut til å fungere!', + 'maint_send_test_email_mail_text' => 'Gratulerer! Da du mottok dette e-postvarselet, ser det ut til at e-postinnstillingene dine er konfigurert riktig.', + 'maint_recycle_bin_desc' => 'Slettede hyller, bøker, kapitler og sider kastes i papirkurven så de kan bli gjenopprettet eller slettet permanent. Eldre utgaver i papirkurven kan slettes automatisk etter en stund, avhengig av systemkonfigurasjonen.', + 'maint_recycle_bin_open' => 'Åpne papirkurven', + 'maint_regen_references' => 'Regenerer referanser', + 'maint_regen_references_desc' => 'Denne handlingen gjenoppbygger referanseindeksen for krysselement i databasen. Dette håndteres vanligvis automatisk, men denne handlingen kan være nyttig for å indeksere gammelt innhold eller innhold lagt til via uoffisielle metoder.', + 'maint_regen_references_success' => 'Referanseindeksen har blitt regenerert!', + 'maint_timeout_command_note' => 'Merk: Denne handlingen kan ta tid å kjøre, noe som kan føre til tidsavbruddsmessige problemer i noen webomgivelser. Dette gjøres som et alternativ ved hjelp av en terminalkommando.', + + // Recycle Bin + 'recycle_bin' => 'Papirkurven', + 'recycle_bin_desc' => 'Her kan du gjenopprette ting du har kastet i papirkurven eller velge å slette dem permanent fra systemet. Denne listen er ikke filtrert i motsetning til lignende lister i systemet hvor tilgangskontroll overholdes.', + 'recycle_bin_deleted_item' => 'Kastet element', + 'recycle_bin_deleted_parent' => 'Overordnet', + 'recycle_bin_deleted_by' => 'Kastet av', + 'recycle_bin_deleted_at' => 'Kastet den', + 'recycle_bin_permanently_delete' => 'Slett permanent', + 'recycle_bin_restore' => 'Gjenopprett', + 'recycle_bin_contents_empty' => 'Papirkurven er for øyeblikket tom', + 'recycle_bin_empty' => 'Tøm papirkurven', + 'recycle_bin_empty_confirm' => 'Dette vil slette alle elementene i papirkurven permanent. Dette inkluderer innhold i hvert element. Er du sikker på at du vil tømme papirkurven?', + 'recycle_bin_destroy_confirm' => 'Denne handlingen vil permanent slette dette elementet og alle dets underelementer fra systemet, som beskrevet nedenfor. Du vil ikke kunne gjenopprette dette innholdet med mindre du har en tidligere sikkerhetskopi av databasen. Er du sikker på at du vil fortsette?', + 'recycle_bin_destroy_list' => 'Elementer som skal slettes', + 'recycle_bin_restore_list' => 'Elementer som skal gjenopprettes', + 'recycle_bin_restore_confirm' => 'Denne handlingen vil hente opp elementet fra papirkurven, inkludert underliggende innhold, til sin opprinnelige sted. Om den opprinnelige plassen har blitt slettet i mellomtiden og nå befinner seg i papirkurven, vil også dette bli hentet opp igjen.', + 'recycle_bin_restore_deleted_parent' => 'Det overordnede elementet var også kastet i papirkurven. Disse elementene vil forbli kastet inntil det overordnede også hentes opp igjen.', + 'recycle_bin_restore_parent' => 'Gjenopprett overodnet', + 'recycle_bin_destroy_notification' => 'Slettet :count elementer fra papirkurven.', + 'recycle_bin_restore_notification' => 'Gjenopprettet :count elementer fra papirkurven.', + + // Audit Log + 'audit' => 'Revisjonslogg', + 'audit_desc' => 'Denne revisjonsloggen viser en liste over aktiviteter som spores i systemet. Denne listen er ufiltrert i motsetning til lignende aktivitetslister i systemet der tillatelsesfiltre brukes.', + 'audit_event_filter' => 'Hendelsesfilter', + 'audit_event_filter_no_filter' => 'Ingen filter', + 'audit_deleted_item' => 'Slettet ting', + 'audit_deleted_item_name' => 'Navn: :name', + 'audit_table_user' => 'Kontoholder', + 'audit_table_event' => 'Hendelse', + 'audit_table_related' => 'Relaterte elementer eller detaljer', + 'audit_table_ip' => 'IP Adresse', + 'audit_table_date' => 'Aktivitetsdato', + 'audit_date_from' => 'Datoperiode fra', + 'audit_date_to' => 'Datoperiode til', + + // Role Settings + 'roles' => 'Roller', + 'role_user_roles' => 'Kontoroller', + 'roles_index_desc' => 'Roller brukes til å gruppere brukere og gi systemtilgang til medlemmene. Når en bruker er medlem av flere roller, vil de tildelte rettighetene samles inn, og brukeren vil arve alle evner.', + 'roles_x_users_assigned' => ':count bruker tildelt|:count brukere tildelt', + 'roles_x_permissions_provided' => ':count tillatelse|:count tillatelser', + 'roles_assigned_users' => 'Tilordnede brukere', + 'roles_permissions_provided' => 'Tilbudte rettigheter', + 'role_create' => 'Opprett ny rolle', + 'role_delete' => 'Slett rolle', + 'role_delete_confirm' => 'Dette vil slette rollen «:roleName».', + 'role_delete_users_assigned' => 'Denne rollen har :userCount kontoer koblet opp mot seg. Velg hvilke rolle du vil flytte disse til.', + 'role_delete_no_migration' => "Ikke flytt kontoer", + 'role_delete_sure' => 'Er du sikker på at du vil slette rollen?', + 'role_edit' => 'Endre rolle', + 'role_details' => 'Rolledetaljer', + 'role_name' => 'Rollenavn', + 'role_desc' => 'Kort beskrivelse av rolle', + 'role_mfa_enforced' => 'Krever flerfaktorautentisering', + 'role_external_auth_id' => 'Ekstern godkjennings-ID', + 'role_system' => 'Systemtilganger', + 'role_manage_users' => 'Behandle kontoer', + 'role_manage_roles' => 'Behandle roller og rolletilganger', + 'role_manage_entity_permissions' => 'Behandle bok-, kapittel- og sidetilganger', + 'role_manage_own_entity_permissions' => 'Behandle tilganger på egne verk', + 'role_manage_page_templates' => 'Behandle sidemaler', + 'role_access_api' => 'Systemtilgang API', + 'role_manage_settings' => 'Behandle applikasjonsinnstillinger', + 'role_export_content' => 'Eksporter innhold', + 'role_editor_change' => 'Endre sideredigering', + 'role_notifications' => 'Motta og administrere varslinger', + 'role_asset' => 'Eiendomstillatelser', + 'roles_system_warning' => 'Vær oppmerksom på at tilgang til noen av de ovennevnte tre tillatelsene kan tillate en bruker å endre sine egne rettigheter eller rettighetene til andre i systemet. Bare tildel roller med disse tillatelsene til pålitelige brukere.', + 'role_asset_desc' => 'Disse tillatelsene kontrollerer standard tilgang til eiendelene i systemet. Tillatelser til bøker, kapitler og sider overstyrer disse tillatelsene.', + 'role_asset_admins' => 'Administratorer får automatisk tilgang til alt innhold, men disse alternativene kan vise eller skjule UI-alternativer.', + 'role_asset_image_view_note' => 'Dette gjelder synlighet innenfor bilde-administrasjonen. Faktisk tilgang på opplastede bildefiler vil være avhengig av valget for systemlagring av bildet.', + 'role_all' => 'Alle', + 'role_own' => 'Egne', + 'role_controlled_by_asset' => 'Kontrollert av eiendelen de er lastet opp til', + 'role_save' => 'Lagre rolle', + 'role_users' => 'Kontoholdere med denne rollen', + 'role_users_none' => 'Ingen kontoholdere er gitt denne rollen', + + // Users + 'users' => 'Brukere', + 'users_index_desc' => 'Opprett og administrer individuelle brukerkontoer innenfor systemet. Brukerkontoer brukes for innlogging og navngivelse av innhold og aktivitet. Tilgangstillatelser er primært rollebasert, men brukerinnhold eierskap, blant andre faktorer, kan også påvirke tillatelser og tilgang.', + 'user_profile' => 'Profil', + 'users_add_new' => 'Register ny konto', + 'users_search' => 'Søk i kontoer', + 'users_latest_activity' => 'Siste aktivitet', + 'users_details' => 'Kontodetaljer', + 'users_details_desc' => 'Angi et visningsnavn og en e-postadresse for denne kontoholderen. E-postadressen vil bli brukt til å logge på applikasjonen.', + 'users_details_desc_no_email' => 'Angi et visningsnavn for denne kontoholderen slik at andre kan gjenkjenne dem.', + 'users_role' => 'Roller', + 'users_role_desc' => 'Velg hvilke roller denne kontoholderen vil bli tildelt. Hvis en kontoholderen er tildelt flere roller, vil tillatelsene fra disse rollene stable seg, og de vil motta alle evnene til de tildelte rollene.', + 'users_password' => 'Passord', + 'users_password_desc' => 'Angi et passord som brukes til å logge inn til programmet. Dette må være minst 8 tegn langt.', + 'users_send_invite_text' => 'Du kan velge å sende denne kontoholderen en invitasjons-e-post som lar dem angi sitt eget passord, ellers kan du selv angi passordet.', + 'users_send_invite_option' => 'Send invitasjonsmelding', + 'users_external_auth_id' => 'Ekstern godkjennings-ID', + 'users_external_auth_id_desc' => 'Når eit eksternt autentiseringssystem er i bruk (som SAML2, OIDC eller LDAP) er dette ID-en som vert kobla til denneBookStack-brukaren til autentiseringssystemkontoen. Du kan ignorere dette feltet om du bruker standard e-postbasert autentisering.', + 'users_password_warning' => 'Berre fyll ut under om du vil endre passordet til brukaren.', + 'users_system_public' => 'Denne brukeren representerer alle gjester som besøker appliaksjonen din. Den kan ikke brukes til å logge på, men tildeles automatisk.', + 'users_delete' => 'Slett konto', + 'users_delete_named' => 'Slett kontoen :userName', + 'users_delete_warning' => 'Dette vil fullstendig slette denne brukeren med navnet «:userName» fra systemet.', + 'users_delete_confirm' => 'Er du sikker på at du vil slette denne kontoen?', + 'users_migrate_ownership' => 'Overfør eierskap', + 'users_migrate_ownership_desc' => 'Velg en bruker her, som du ønsker skal ta eierskap over alle elementene som er eid av denne brukeren.', + 'users_none_selected' => 'Ingen bruker valgt', + 'users_edit' => 'Rediger konto', + 'users_edit_profile' => 'Rediger profil', + 'users_avatar' => 'Kontobilde', + 'users_avatar_desc' => 'Velg et bilde for å representere denne kontoholderen. Dette skal være omtrent 256px kvadrat.', + 'users_preferred_language' => 'Foretrukket språk', + 'users_preferred_language_desc' => 'Dette alternativet vil endre språket som brukes til brukergrensesnittet til applikasjonen. Dette påvirker ikke noe brukeropprettet innhold.', + 'users_social_accounts' => 'Sosiale kontoer', + 'users_social_accounts_desc' => 'Vis status for dei tilkoblede sosiale kontoane for denne brukaren. Sosiale kontoer kan brukast i tillegg til det primære autentiseringssystemet for systemtilgang.', + 'users_social_accounts_info' => 'Her kan du koble andre kontoer for raskere og enklere pålogging. Hvis du frakobler en konto her, tilbakekaller ikke dette tidligere autorisert tilgang. Tilbakekall tilgang fra profilinnstillingene dine på den tilkoblede sosiale kontoen.', + 'users_social_connect' => 'Koble til konto', + 'users_social_disconnect' => 'Koble fra konto', + 'users_social_status_connected' => 'Tilkobla', + 'users_social_status_disconnected' => 'Fråkobla', + 'users_social_connected' => ':socialAccount ble lagt til din konto.', + 'users_social_disconnected' => ':socialAccount ble koblet fra din konto.', + 'users_api_tokens' => 'API-nøkler', + 'users_api_tokens_desc' => 'Opprett og handter tilgangstokenar som vert brukt til å godkjenne med BookStack REST API. Løyve til API blir administrert via brukaren som tokenet tilhører.', + 'users_api_tokens_none' => 'Ingen API-nøkler finnes for denne kontoen', + 'users_api_tokens_create' => 'Opprett nøkkel', + 'users_api_tokens_expires' => 'Utløper', + 'users_api_tokens_docs' => 'API-dokumentasjon', + 'users_mfa' => 'Flerfaktorautentisering', + 'users_mfa_desc' => 'Konfigurer flerfaktorautentisering som et ekstra lag med sikkerhet for din konto.', + 'users_mfa_x_methods' => ':count metode konfigurert|:count metoder konfigurert', + 'users_mfa_configure' => 'Konfigurer metoder', + + // API Tokens + 'user_api_token_create' => 'Opprett API-nøkkel', + 'user_api_token_name' => 'Navn', + 'user_api_token_name_desc' => 'Gi nøkkelen et lesbart navn som en fremtidig påminnelse om det tiltenkte formålet.', + 'user_api_token_expiry' => 'Utløpsdato', + 'user_api_token_expiry_desc' => 'Angi en dato da denne nøkkelen utløper. Etter denne datoen vil forespørsler som er gjort med denne nøkkelen ikke lenger fungere. Å la dette feltet stå tomt vil sette utløpsdato 100 år inn i fremtiden.', + 'user_api_token_create_secret_message' => 'Umiddelbart etter å ha opprettet denne nøkkelen vil en identifikator og hemmelighet bli generert og vist. Hemmeligheten vil bare vises en gang, så husk å kopiere verdien til et trygt sted før du fortsetter.', + 'user_api_token' => 'API-nøkkel', + 'user_api_token_id' => 'Identifikator', + 'user_api_token_id_desc' => 'Dette er en ikke-redigerbar systemgenerert identifikator for denne nøkkelen som må oppgis i API-forespørsler.', + 'user_api_token_secret' => 'Hemmelighet', + 'user_api_token_secret_desc' => 'Dette er en systemgenerert hemmelighet for denne nøkkelen som må leveres i API-forespørsler. Dette vises bare denne gangen, så kopier denne verdien til et trygt sted.', + 'user_api_token_created' => 'Nøkkel opprettet :timeAgo', + 'user_api_token_updated' => 'Nøkkel oppdatert :timeAgo', + 'user_api_token_delete' => 'Slett nøkkel', + 'user_api_token_delete_warning' => 'Dette vil slette API-nøkkelen \':tokenName\' fra systemet.', + 'user_api_token_delete_confirm' => 'Sikker på at du vil slette nøkkelen?', + + // Webhooks + 'webhooks' => 'Webhooks', + 'webhooks_index_desc' => 'Webhooks er en måte å sende data til eksterne nettadresser når bestemte handlinger og hendelser oppstår i systemet som gjør det mulig å integrer med eksterne plattformer som meldingssystemer eller varslingssystemer.', + 'webhooks_x_trigger_events' => ':count utløsende hendelse:count utløsende hendelser', + 'webhooks_create' => 'Lag ny Webhook', + 'webhooks_none_created' => 'Ingen webhooks er opprettet ennå.', + 'webhooks_edit' => 'Rediger webhook', + 'webhooks_save' => 'Lagre Webhook', + 'webhooks_details' => 'Webhook detaljer', + 'webhooks_details_desc' => 'Gi et brukervennlig navn og et POST endepunkt som et sted der webhook-dataene skal sendes til.', + 'webhooks_events' => 'Webhook hendelser', + 'webhooks_events_desc' => 'Velg alle hendelsene som skal utløse denne webhook som skal kalles.', + 'webhooks_events_warning' => 'Husk at disse hendelsene vil bli utløst for alle valgte hendelser, selv om egendefinerte tillatelser brukes. Pass på at bruk av denne webhooken ikke vil utsette konfidensiell innhold.', + 'webhooks_events_all' => 'Alle systemhendelser', + 'webhooks_name' => 'Webhook navn', + 'webhooks_timeout' => 'Tidsavbrudd for Webhook forespørsler (sekunder)', + 'webhooks_endpoint' => 'Webhook endepunkt', + 'webhooks_active' => 'Webhook aktiv', + 'webhook_events_table_header' => 'Hendelser', + 'webhooks_delete' => 'Slett webhook', + 'webhooks_delete_warning' => 'Dette vil slette webhook, med navnet \':webhookName\', fra systemet.', + 'webhooks_delete_confirm' => 'Er du sikker på at du vil slette denne webhooken?', + 'webhooks_format_example' => 'Webhook formattering eksempel', + 'webhooks_format_example_desc' => 'Webhook-data sendes som en POST-forespørsel til det konfigurerte endepunktet som JSON ved hjelp av formatet nedenfor. «related_item» og «url» egenskaper er valgfrie og vil avhenge av hvilken type hendelse som utløses.', + 'webhooks_status' => 'Webhook status', + 'webhooks_last_called' => 'Sist ringt:', + 'webhooks_last_errored' => 'Siste feil:', + 'webhooks_last_error_message' => 'Siste feilmelding:', + + + //! If editing translations files directly please ignore this in all + //! languages apart from en. Content will be auto-copied from en. + //!//////////////////////////////// + 'language_select' => [ + 'en' => 'English', + 'ar' => 'العربية', + 'bg' => 'Bǎlgarski', + 'bs' => 'Bosanski', + 'ca' => 'Català', + 'cs' => 'Česky', + 'da' => 'Dansk', + 'de' => 'Deutsch (Sie)', + 'de_informal' => 'Deutsch (Du)', + 'el' => 'ελληνικά', + 'es' => 'Español', + 'es_AR' => 'Español Argentina', + 'et' => 'Eesti keel', + 'eu' => 'Euskara', + 'fa' => 'فارسی', + 'fr' => 'Français', + 'he' => 'עברית', + 'hr' => 'Hrvatski', + 'hu' => 'Magyar', + 'id' => 'Bahasa Indonesia', + 'it' => 'Italian', + 'ja' => '日本語', + 'ko' => '한국어', + 'lt' => 'Lietuvių Kalba', + 'lv' => 'Latviešu Valoda', + 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', + 'pl' => 'Polski', + 'pt' => 'Português', + 'pt_BR' => 'Português do Brasil', + 'ro' => 'Română', + 'ru' => 'Русский', + 'sk' => 'Slovensky', + 'sl' => 'Slovenščina', + 'sv' => 'Svenska', + 'tr' => 'Türkçe', + 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', + 'vi' => 'Tiếng Việt', + 'zh_CN' => '简体中文', + 'zh_TW' => '繁體中文', + ], + //!//////////////////////////////// +]; diff --git a/lang/nn/validation.php b/lang/nn/validation.php new file mode 100644 index 00000000000..7e3784e30c7 --- /dev/null +++ b/lang/nn/validation.php @@ -0,0 +1,117 @@ + ':attribute må aksepteres.', + 'active_url' => ':attribute er ikke en godkjent URL.', + 'after' => ':attribute må være en dato etter :date.', + 'alpha' => ':attribute kan kun inneholde bokstaver.', + 'alpha_dash' => ':attribute kan kunne inneholde bokstaver, tall, bindestreker eller understreker.', + 'alpha_num' => ':attribute kan kun inneholde bokstaver og tall.', + 'array' => ':attribute må være en liste.', + 'backup_codes' => 'Den angitte koden er ikke gyldig, eller er allerede benyttet.', + 'before' => ':attribute må være en dato før :date.', + 'between' => [ + 'numeric' => ':attribute må være mellom :min og :max.', + 'file' => ':attribute må være mellom :min og :max kilobytes.', + 'string' => ':attribute må være mellom :min og :max tegn.', + 'array' => ':attribute må være mellom :min og :max ting.', + ], + 'boolean' => ':attribute feltet kan bare være sann eller falsk.', + 'confirmed' => ':attribute bekreftelsen samsvarer ikke.', + 'date' => ':attribute er ikke en gyldig dato.', + 'date_format' => ':attribute samsvarer ikke med :format.', + 'different' => ':attribute og :other må være forskjellige.', + 'digits' => ':attribute må være :digits tall.', + 'digits_between' => ':attribute må være mellomg :min og :max tall.', + 'email' => ':attribute må være en gyldig e-post.', + 'ends_with' => ':attribute må slutte med en av verdiene: :values', + 'file' => 'Attributtet :attribute må angis som en gyldig fil.', + 'filled' => ':attribute feltet er påkrevd.', + 'gt' => [ + 'numeric' => ':attribute må være større enn :value.', + 'file' => ':attribute må være større enn :value kilobytes.', + 'string' => ':attribute må være større enn :value tegn.', + 'array' => ':attribute må ha mer en :value ting.', + ], + 'gte' => [ + 'numeric' => ':attribute må være større enn eller lik :value.', + 'file' => ':attribute må være større enn eller lik :value kilobytes.', + 'string' => ':attribute må være større enn eller lik :value tegn.', + 'array' => ':attribute må ha :value eller flere ting.', + ], + 'exists' => 'Den valgte :attribute er ugyldig.', + 'image' => ':attribute må være et bilde.', + 'image_extension' => ':attribute må ha støttet formattype.', + 'in' => 'Den valgte :attribute er ugyldig.', + 'integer' => ':attribute må være et heltall', + 'ip' => ':attribute må være en gyldig IP adresse.', + 'ipv4' => ':attribute må være en gyldig IPv4 adresse.', + 'ipv6' => ':attribute må være en gyldig IPv6 adresse.', + 'json' => ':attribute må være en gyldig JSON tekststreng.', + 'lt' => [ + 'numeric' => ':attribute må være mindre enn :value.', + 'file' => ':attribute må være mindre enn :value kilobytes.', + 'string' => ':attribute må være mindre enn :value tegn.', + 'array' => ':attribute må ha mindre enn :value ting.', + ], + 'lte' => [ + 'numeric' => ':attribute må være mindre enn eller lik :value.', + 'file' => ':attribute må være mindre enn eller lik :value kilobytes.', + 'string' => ':attribute må være mindre enn eller lik :value characters.', + 'array' => ':attribute må ha mindre enn eller lik :value ting.', + ], + 'max' => [ + 'numeric' => ':attribute kan ikke være større enn :max.', + 'file' => ':attribute kan ikke være større enn :max kilobytes.', + 'string' => ':attribute kan ikke være større enn :max tegn.', + 'array' => ':attribute kan ikke inneholde mer enn :max ting.', + ], + 'mimes' => ':attribute må være en fil av typen: :values.', + 'min' => [ + 'numeric' => ':attribute må være på minst :min.', + 'file' => ':attribute må være på minst :min kilobytes.', + 'string' => ':attribute må være på minst :min tegn.', + 'array' => ':attribute må minst ha :min ting.', + ], + 'not_in' => 'Den valgte :attribute er ugyldig.', + 'not_regex' => ':attribute format er ugyldig.', + 'numeric' => ':attribute må være et nummer.', + 'regex' => ':attribute format er ugyldig.', + 'required' => ':attribute feltet er påkrevt.', + 'required_if' => ':attribute feltet er påkrevt når :other er :value.', + 'required_with' => ':attribute feltet er påkrevt når :values er tilgjengelig.', + 'required_with_all' => ':attribute feltet er påkrevt når :values er tilgjengelig', + 'required_without' => ':attribute feltet er påkrevt når :values ikke er tilgjengelig.', + 'required_without_all' => ':attribute feltet er påkrevt når ingen av :values er tilgjengelig.', + 'same' => ':attribute og :other må samsvare.', + 'safe_url' => 'Den angitte lenken kan være farlig.', + 'size' => [ + 'numeric' => ':attribute må være :size.', + 'file' => ':attribute må være :size kilobytes.', + 'string' => ':attribute må være :size tegn.', + 'array' => ':attribute må inneholde :size ting.', + ], + 'string' => ':attribute må være en tekststreng.', + 'timezone' => ':attribute må være en tidssone.', + 'totp' => 'Den angitte koden er ikke gyldig eller har utløpt.', + 'unique' => ':attribute har allerede blitt tatt.', + 'url' => ':attribute format er ugyldig.', + 'uploaded' => 'kunne ikke lastes opp, tjeneren støtter ikke filer av denne størrelsen.', + + // Custom validation lines + 'custom' => [ + 'password-confirm' => [ + 'required_with' => 'passordbekreftelse er påkrevd', + ], + ], + + // Custom validation attributes + 'attributes' => [], +]; diff --git a/lang/pl/common.php b/lang/pl/common.php index ca9b4634715..8006bd5396d 100644 --- a/lang/pl/common.php +++ b/lang/pl/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Wyczyść Filtr', 'download' => 'Pobierz', 'open_in_tab' => 'Otwórz w karcie', + 'open' => 'Open', // Sort Options 'sort_options' => 'Opcje sortowania', diff --git a/lang/pl/components.php b/lang/pl/components.php index 5770e09e18a..fcc5a32a8cf 100644 --- a/lang/pl/components.php +++ b/lang/pl/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Obrazek usunięty pomyślnie', 'image_replace' => 'Zastąp obraz', 'image_replace_success' => 'Plik obrazu zaktualizowany pomyślnie', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Edytuj kod', diff --git a/lang/pl/entities.php b/lang/pl/entities.php index 4c042396256..ae2bbc20b4a 100644 --- a/lang/pl/entities.php +++ b/lang/pl/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Szablon strony', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Tagi strony', 'chapter_tags' => 'Tagi rozdziału', 'book_tags' => 'Tagi książki', diff --git a/lang/pl/errors.php b/lang/pl/errors.php index 9602dc603b3..3e9bce6f7a8 100644 --- a/lang/pl/errors.php +++ b/lang/pl/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Nie można pobrać obrazka z :url', 'cannot_create_thumbs' => 'Serwer nie może utworzyć miniaturek. Upewnij się że rozszerzenie GD PHP zostało zainstalowane.', 'server_upload_limit' => 'Serwer nie pozwala na przyjęcie pliku o tym rozmiarze. Spróbuj przesłać plik o mniejszym rozmiarze.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Serwer nie pozwala na przyjęcie pliku o tym rozmiarze. Spróbuj przesłać plik o mniejszym rozmiarze.', // Drawing & Images 'image_upload_error' => 'Wystąpił błąd podczas przesyłania obrazka', 'image_upload_type_error' => 'Typ przesłanego obrazka jest nieprwidłowy.', 'image_upload_replace_type' => 'Zamienniki plików graficznych muszą być tego samego typu', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Nie można załadować danych rysunku. Plik rysunku może już nie istnieć lub nie masz uprawnień dostępu do niego.', // Attachments diff --git a/lang/pl/preferences.php b/lang/pl/preferences.php index af24aaed243..5b664fd5018 100644 --- a/lang/pl/preferences.php +++ b/lang/pl/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferencje', + 'my_account' => 'My Account', 'shortcuts' => 'Skróty', - 'shortcuts_interface' => 'Interfejs Skrótów Klawiszowych', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Tutaj możesz włączyć lub wyłączyć interfejs skrótów klawiszowych używanych do nawigacji i akcji.', 'shortcuts_customize_desc' => 'Możesz dostosować każdy z poniższych skrótów. Wystarczy nacisnąć wybraną kombinację klawiszy po wybraniu wprowadzania dla danego skrótu.', 'shortcuts_toggle_label' => 'Skróty klawiszowe włączone', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Obserwowane i ignorowane elementy', 'notifications_watched_desc' => ' Poniżej znajdują się elementy, które mają własne preferencje obserwowania. Aby zaktualizować swoje preferencje, zobacz dany element, a następnie znajdź opcje obserwowania na pasku bocznym.', - 'profile_overview_desc' => ' Zarządzaj szczegółami swojego profilu użytkownika, w tym preferowanym językiem i opcjami uwierzytelniania.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/pl/settings.php b/lang/pl/settings.php index 32cda6e64b6..80e320d5668 100644 --- a/lang/pl/settings.php +++ b/lang/pl/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Możesz wybrać wysłanie do tego użytkownika wiadomości e-mail z zaproszeniem, która pozwala mu ustawić własne hasło, w przeciwnym razie możesz ustawić je samemu.', 'users_send_invite_option' => 'Wyślij e-mail z zaproszeniem', 'users_external_auth_id' => 'Zewnętrzne identyfikatory autentykacji', - 'users_external_auth_id_desc' => 'Jest to identyfikator używany do dopasowania tego użytkownika podczas komunikacji z zewnętrznym systemem uwierzytelniania.', - 'users_password_warning' => 'Wypełnij poniżej tylko jeśli chcesz zmienić swoje hasło:', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Ten użytkownik reprezentuje każdego gościa odwiedzającego tę aplikację. Nie można się na niego zalogować, lecz jest przyznawany automatycznie.', 'users_delete' => 'Usuń użytkownika', 'users_delete_named' => 'Usuń :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Preferowany język', 'users_preferred_language_desc' => 'Opcja ta zmieni język używany w interfejsie użytkownika aplikacji. Nie wpłynie to na zawartość stworzoną przez użytkownika.', 'users_social_accounts' => 'Konta społecznościowe', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Tutaj możesz połączyć kilka kont społecznościowych w celu łatwiejszego i szybszego logowania. Odłączenie konta tutaj nie autoryzowało dostępu. Odwołaj dostęp z ustawień profilu na podłączonym koncie społecznościowym.', 'users_social_connect' => 'Podłącz konto', 'users_social_disconnect' => 'Odłącz konto', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount zostało dodane do Twojego profilu.', 'users_social_disconnected' => ':socialAccount zostało odłączone od Twojego profilu.', 'users_api_tokens' => 'Tokeny API', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Nie utworzono tokenów API dla tego użytkownika', 'users_api_tokens_create' => 'Utwórz token', 'users_api_tokens_expires' => 'Wygasa', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/pt/common.php b/lang/pt/common.php index dc8582ce647..d2d37391118 100644 --- a/lang/pt/common.php +++ b/lang/pt/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Limpar Filtro', 'download' => 'Transferir', 'open_in_tab' => 'Abrir em novo separador', + 'open' => 'Open', // Sort Options 'sort_options' => 'Opções de Ordenação', diff --git a/lang/pt/components.php b/lang/pt/components.php index c46bcf28db3..1bf504dd137 100644 --- a/lang/pt/components.php +++ b/lang/pt/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Imagem eliminada com sucesso', 'image_replace' => 'Substituir Imagem', 'image_replace_success' => 'Imagem carregada com sucesso', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Editar Código', diff --git a/lang/pt/entities.php b/lang/pt/entities.php index 3cf3857265c..3da42f43299 100644 --- a/lang/pt/entities.php +++ b/lang/pt/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Modelo de Página', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Etiquetas de Página', 'chapter_tags' => 'Etiquetas do Capítulo', 'book_tags' => 'Etiquetas do Livro', diff --git a/lang/pt/errors.php b/lang/pt/errors.php index c157112abd5..38133756194 100644 --- a/lang/pt/errors.php +++ b/lang/pt/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Não foi possível obter a imagem a partir de :url', 'cannot_create_thumbs' => 'O servidor não pôde criar as miniaturas de imagem. Por favor, verifique se a extensão GD PHP está instalada.', 'server_upload_limit' => 'O servidor não permite o carregamento de arquivos com esse tamanho. Por favor, tente fazer o carregamento de arquivos mais pequenos.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'O servidor não permite o carregamento de arquivos com esse tamanho. Por favor, tente fazer o carregamento de arquivos mais pequenos.', // Drawing & Images 'image_upload_error' => 'Ocorreu um erro no carregamento da imagem', 'image_upload_type_error' => 'O tipo de imagem enviada é inválida', 'image_upload_replace_type' => 'A imagem de substituição deverá ser do mesmo tipo que a anterior', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Dados de desenho não puderam ser carregados. Talvez o arquivo de desenho não exista mais ou não tenha permissão para aceder-lhe.', // Attachments diff --git a/lang/pt/preferences.php b/lang/pt/preferences.php index e0c1d9c787d..8cf0697b49c 100644 --- a/lang/pt/preferences.php +++ b/lang/pt/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Atalhos', - 'shortcuts_interface' => 'Atalhos de Teclado', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Aqui pode ativar ou desativar os atalhos de teclado do sistema, usados para navegação e ações.', 'shortcuts_customize_desc' => 'Pode personalizar cada um dos atalhos abaixo. Pressione a combinação de tecla desejada após selecionar a entrada para um atalho.', 'shortcuts_toggle_label' => 'Atalhos de teclado ativados', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/pt/settings.php b/lang/pt/settings.php index 1ce3751ace8..45bea9d051a 100644 --- a/lang/pt/settings.php +++ b/lang/pt/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Pode escolher enviar a este utilizador um convite por e-mail que o possibilitará definir a sua própria palavra-passe, ou defina você mesmo uma.', 'users_send_invite_option' => 'Enviar convite por e-mail', 'users_external_auth_id' => 'ID de Autenticação Externa', - 'users_external_auth_id_desc' => 'Este ID é utilizado para relacionar um utilizador ao comunicar com um sistema de autenticação externo.', - 'users_password_warning' => 'Apenas preencha os dados abaixo caso queira modificar a sua palavra-passe.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Este utilizador representa quaisquer convidados que visitam a aplicação. Não pode ser utilizado para efetuar autenticação, mas é automaticamente atribuído.', 'users_delete' => 'Eliminar Utilizador', 'users_delete_named' => 'Eliminar :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Linguagem de Preferência', 'users_preferred_language_desc' => 'Esta opção irá alterar o idioma utilizado para a interface de utilizador da aplicação. Isto não afetará nenhum conteúdo criado por utilizadores.', 'users_social_accounts' => 'Contas Sociais', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Aqui pode ligar outras contas para acesso mais rápido. Desligar uma conta não retira a possibilidade de acesso usando-a. Para revogar o acesso ao perfil através da conta social, você deverá fazê-lo na sua conta social.', 'users_social_connect' => 'Contas Associadas', 'users_social_disconnect' => 'Dissociar Conta', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => 'A conta:socialAccount foi associada com sucesso ao seu perfil.', 'users_social_disconnected' => 'A conta:socialAccount foi dissociada com sucesso de seu perfil.', 'users_api_tokens' => 'Tokens de API', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Nenhum token de API foi criado para este utilizador', 'users_api_tokens_create' => 'Criar Token', 'users_api_tokens_expires' => 'Expira', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/pt_BR/activities.php b/lang/pt_BR/activities.php index bc87ebf5e0a..650782b1db8 100644 --- a/lang/pt_BR/activities.php +++ b/lang/pt_BR/activities.php @@ -6,7 +6,7 @@ return [ // Pages - 'page_create' => 'página criada', + 'page_create' => 'criou a página', 'page_create_notification' => 'Página criada com sucesso', 'page_update' => 'atualizou a página', 'page_update_notification' => 'Página atualizada com sucesso', diff --git a/lang/pt_BR/common.php b/lang/pt_BR/common.php index 7ab57058068..5e3f7611407 100644 --- a/lang/pt_BR/common.php +++ b/lang/pt_BR/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Limpar Filtro', 'download' => 'Baixar', 'open_in_tab' => 'Abrir na aba', + 'open' => 'Abrir', // Sort Options 'sort_options' => 'Opções de Ordenação', diff --git a/lang/pt_BR/components.php b/lang/pt_BR/components.php index d91adf2682b..cdbcdf66f58 100644 --- a/lang/pt_BR/components.php +++ b/lang/pt_BR/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Imagem excluída com sucesso', 'image_replace' => 'Substituir imagem', 'image_replace_success' => 'Arquivo de imagem atualizado com sucesso', + 'image_rebuild_thumbs' => 'Gerar variações de tamanho', + 'image_rebuild_thumbs_success' => 'Variações de tamanho da imagem geradas com sucesso!', // Code Editor 'code_editor' => 'Editar Código', diff --git a/lang/pt_BR/entities.php b/lang/pt_BR/entities.php index 4498cd2bdde..e012042c808 100644 --- a/lang/pt_BR/entities.php +++ b/lang/pt_BR/entities.php @@ -239,8 +239,8 @@ 'pages_md_insert_drawing' => 'Inserir Desenho', 'pages_md_show_preview' => 'Mostrar pré-visualização', 'pages_md_sync_scroll' => 'Sincronizar pré-visualização', - 'pages_drawing_unsaved' => 'Unsaved Drawing Found', - 'pages_drawing_unsaved_confirm' => 'Unsaved drawing data was found from a previous failed drawing save attempt. Would you like to restore and continue editing this unsaved drawing?', + 'pages_drawing_unsaved' => 'Desenho não-salvo encontrado', + 'pages_drawing_unsaved_confirm' => 'Foram encontrados dados não-salvos de uma tentativa anterior de salvar o desenho. Você gostaria de restaurá-los e continuar editando este desenho?', 'pages_not_in_chapter' => 'Página não está dentro de um capítulo', 'pages_move' => 'Mover Página', 'pages_copy' => 'Copiar Página', @@ -295,6 +295,7 @@ 'pages_is_template' => 'Modelo de Página', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Tags de Página', 'chapter_tags' => 'Tags de Capítulo', 'book_tags' => 'Tags de Livro', @@ -425,8 +426,8 @@ 'watch_detail_new' => 'Acompanhando para novas páginas', 'watch_detail_updates' => 'Acompanhando novas páginas e atualizações', 'watch_detail_comments' => 'Acompanhando novas páginas, atualizações e comentários', - 'watch_detail_parent_book' => 'Watching via parent book', - 'watch_detail_parent_book_ignore' => 'Ignoring via parent book', - 'watch_detail_parent_chapter' => 'Watching via parent chapter', - 'watch_detail_parent_chapter_ignore' => 'Ignoring via parent chapter', + 'watch_detail_parent_book' => 'Acompanhando através do livro pai', + 'watch_detail_parent_book_ignore' => 'Ignorando através do livro pai', + 'watch_detail_parent_chapter' => 'Acompanhando através do capítulo pai', + 'watch_detail_parent_chapter_ignore' => 'Ignorando através do capítulo pai', ]; diff --git a/lang/pt_BR/errors.php b/lang/pt_BR/errors.php index 63defbda926..c7d82e18d95 100644 --- a/lang/pt_BR/errors.php +++ b/lang/pt_BR/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Não foi possível obter a imagem a partir de :url', 'cannot_create_thumbs' => 'O servidor não pôde criar as miniaturas de imagem. Por favor, verifique se a extensão GD PHP está instalada.', 'server_upload_limit' => 'O servidor não permite o upload de arquivos com esse tamanho. Por favor, tente fazer o upload de arquivos de menor tamanho.', + 'server_post_limit' => 'O servidor não pode receber a quantidade de dados fornecida. Tente novamente com menos dados ou um arquivo menor.', 'uploaded' => 'O servidor não permite o upload de arquivos com esse tamanho. Por favor, tente fazer o upload de arquivos de menor tamanho.', // Drawing & Images 'image_upload_error' => 'Um erro aconteceu enquanto o servidor tentava efetuar o upload da imagem', 'image_upload_type_error' => 'O tipo de imagem que está sendo enviada é inválido', 'image_upload_replace_type' => 'Substituições de arquivos de imagem devem ser do mesmo tipo', + 'image_upload_memory_limit' => 'Falha ao processar o upload de imagem e/ou criar miniaturas devido a limites de recursos do sistema.', + 'image_thumbnail_memory_limit' => 'Falha ao criar variações de tamanho da imagem devido a limites de recursos do sistema.', + 'image_gallery_thumbnail_memory_limit' => 'Falha ao criar miniaturas da galeria devido a limites de recursos do sistema.', 'drawing_data_not_found' => 'Dados de desenho não puderam ser carregados. Talvez o arquivo de desenho não exista mais ou você não tenha permissão para acessá-lo.', // Attachments @@ -112,5 +116,5 @@ 'maintenance_test_email_failure' => 'Erro encontrado ao enviar um e-mail de teste:', // HTTP errors - 'http_ssr_url_no_match' => 'The URL does not match the configured allowed SSR hosts', + 'http_ssr_url_no_match' => 'A URL não corresponde aos hosts SSR configurados como permitidos', ]; diff --git a/lang/pt_BR/preferences.php b/lang/pt_BR/preferences.php index ffcce6c8e30..aa354a9ad93 100644 --- a/lang/pt_BR/preferences.php +++ b/lang/pt_BR/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferências', + 'my_account' => 'Minha conta', 'shortcuts' => 'Atalhos', - 'shortcuts_interface' => 'Atalhos de Teclado da Interface', + 'shortcuts_interface' => 'Preferências de Atalho UI', 'shortcuts_toggle_desc' => 'Aqui você pode habilitar ou desabilitar os atalhos da interface do sistema de teclado, usados para navegação e ações.', 'shortcuts_customize_desc' => 'Você pode personalizar cada um dos atalhos abaixo. Basta pressionar a combinação de teclas desejada após selecionar a entrada para um atalho.', 'shortcuts_toggle_label' => 'Atalhos de teclado ativados', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Itens assistidos e ignorados', 'notifications_watched_desc' => ' Abaixo estão os itens que possuem preferências de relógio personalizadas aplicadas. Para atualizar suas preferências para estes, veja o item e encontre as opções de relógio na barra lateral.', - 'profile_overview_desc' => ' Gerencie os detalhes do seu perfil de usuário, incluindo o idioma preferido e opções de autenticação.', + 'auth' => 'Acesso & Segurança', + 'auth_change_password' => 'Mudar a senha', + 'auth_change_password_desc' => 'Altere a senha que você usa para fazer login no aplicativo. Deve ter pelo menos 8 caracteres.', + 'auth_change_password_success' => 'A senha foi atualizada!', + + 'profile' => 'Detalhes do Perfil', + 'profile_desc' => 'Gerencie os detalhes da sua conta que o representam perante outros usuários, além dos detalhes que são utilizados para comunicação e personalização do sistema.', + 'profile_view_public' => 'Visualizar Perfil Público', + 'profile_name_desc' => 'Configure seu nome de exibição que ficará visível para outros usuários no sistema por meio da atividade que você realiza e do conteúdo de sua propriedade.', + 'profile_email_desc' => 'Este e-mail será utilizado para notificações e, dependendo da autenticação ativa do sistema, acesso ao sistema.', + 'profile_email_no_permission' => 'Infelizmente você não tem permissão para alterar seu endereço de e-mail. Se quiser alterar isso, você precisará pedir a um administrador para alterar isso para você.', + 'profile_avatar_desc' => 'Selecione uma imagem que será usada para representar você mesmo para outras pessoas no sistema. Idealmente, esta imagem deve ser quadrada e ter cerca de 256px de largura e altura.', + 'profile_admin_options' => 'Opções do administrador', + 'profile_admin_options_desc' => 'Opções adicionais do nível administrador, como as que visam gerenciar as atribuições de papéis, podem ser encontradas para sua conta de usuário na área "Configurações > Usuários" do aplicativo.', + + 'delete_account' => 'Deletar conta', + 'delete_my_account' => 'Deletar minha conta', + 'delete_my_account_desc' => 'Isto excluirá completamente sua conta de usuário do sistema. Você não poderá recuperar esta conta ou reverter esta ação. O conteúdo que você criou, como páginas criadas e imagens carregadas, permanecerá.', + 'delete_my_account_warning' => 'Tem certeza de que deseja deletar sua conta?', ]; diff --git a/lang/pt_BR/settings.php b/lang/pt_BR/settings.php index de5fda7bf40..f9e1bfdb314 100644 --- a/lang/pt_BR/settings.php +++ b/lang/pt_BR/settings.php @@ -163,7 +163,7 @@ 'role_manage_settings' => 'Gerenciar configurações da aplicação', 'role_export_content' => 'Exportar conteúdo', 'role_editor_change' => 'Alterar página de edição', - 'role_notifications' => 'Receive & manage notifications', + 'role_notifications' => 'Receber e gerenciar notificações', 'role_asset' => 'Permissões de Ativos', 'roles_system_warning' => 'Esteja ciente de que o acesso a qualquer uma das três permissões acima pode permitir que um usuário altere seus próprios privilégios ou privilégios de outros usuários no sistema. Apenas atribua cargos com essas permissões para usuários confiáveis.', 'role_asset_desc' => 'Essas permissões controlam o acesso padrão para os ativos dentro do sistema. Permissões em Livros, Capítulos e Páginas serão sobrescritas por essas permissões.', @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Você pode escolher enviar a este usuário um convite por e-mail que o possibilitará definir sua própria senha, ou defina você uma senha.', 'users_send_invite_option' => 'Enviar convite por e-mail', 'users_external_auth_id' => 'ID de Autenticação Externa', - 'users_external_auth_id_desc' => 'Este ID é usado para relacionar o usuário quando comunicando com algum sistema de autenticação externo.', - 'users_password_warning' => 'Apenas preencha os dados abaixo caso queira modificar a sua senha.', + 'users_external_auth_id_desc' => 'Quando um sistema de autenticação externo está em uso (como SAML2, OIDC ou LDAP), este é o ID que vincula este usuário do BookStack à conta do sistema de autenticação. Você pode ignorar este campo se estiver usando a autenticação padrão baseada em email.', + 'users_password_warning' => 'Preencha o seguinte apenas se desejar alterar a senha deste usuário.', 'users_system_public' => 'Esse usuário representa quaisquer convidados que visitam o aplicativo. Ele não pode ser usado para login mas é automaticamente atribuído.', 'users_delete' => 'Excluir Usuário', 'users_delete_named' => 'Excluir :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Linguagem de Preferência', 'users_preferred_language_desc' => 'Esta opção irá alterar o idioma utilizado para a interface de usuário da aplicação. Isto não afetará nenhum conteúdo criado por usuários.', 'users_social_accounts' => 'Contas Sociais', + 'users_social_accounts_desc' => 'Veja o status das contas sociais conectadas deste usuário. As contas sociais podem ser usadas além do sistema de autenticação principal para acesso ao sistema.', 'users_social_accounts_info' => 'Aqui você pode conectar outras contas para acesso mais rápido. Desconectar uma conta não retira a possibilidade de acesso usando-a. Para revogar o acesso ao perfil através da conta social, você deverá fazê-lo na sua conta social.', 'users_social_connect' => 'Contas Conectadas', 'users_social_disconnect' => 'Desconectar Conta', + 'users_social_status_connected' => 'Conectado', + 'users_social_status_disconnected' => 'Desconectado', 'users_social_connected' => 'Conta :socialAccount foi conectada com sucesso ao seu perfil.', 'users_social_disconnected' => 'Conta :socialAccount foi desconectada com sucesso de seu perfil.', 'users_api_tokens' => 'Tokens de API', + 'users_api_tokens_desc' => 'Crie e gerencie os tokens de acesso usados para autenticação com a API REST do BookStack. As permissões para a API são gerenciadas pelo usuário ao qual o token pertence.', 'users_api_tokens_none' => 'Nenhum token de API foi criado para este usuário', 'users_api_tokens_create' => 'Criar Token', 'users_api_tokens_expires' => 'Expira', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/ro/common.php b/lang/ro/common.php index 142700fa76e..1bc23dc1883 100644 --- a/lang/ro/common.php +++ b/lang/ro/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Șterge filtru', 'download' => 'Descarcă', 'open_in_tab' => 'Deschide in tab', + 'open' => 'Open', // Sort Options 'sort_options' => 'Opțiuni ordonare', diff --git a/lang/ro/components.php b/lang/ro/components.php index 27c35440bf6..6aa6901844c 100644 --- a/lang/ro/components.php +++ b/lang/ro/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Imaginea a fost ștearsă', 'image_replace' => 'Înlocuiți imaginea', 'image_replace_success' => 'Imaginea a fost actualizată', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Editare cod', diff --git a/lang/ro/entities.php b/lang/ro/entities.php index ff074f93a2c..bcaa41695c7 100644 --- a/lang/ro/entities.php +++ b/lang/ro/entities.php @@ -151,12 +151,12 @@ 'books_sort_chapters_last' => 'Capitole la final', 'books_sort_show_other' => 'Arată alte cărți', 'books_sort_save' => 'Salvează noua ordine', - 'books_sort_show_other_desc' => 'Add other books here to include them in the sort operation, and allow easy cross-book reorganisation.', + 'books_sort_show_other_desc' => 'Adăugaţi alte cărţi aici pentru a le include în operaţia de sortare şi permiteţi o reorganizare uşoară.', 'books_sort_move_up' => 'Mută în sus', 'books_sort_move_down' => 'Mută în jos', - 'books_sort_move_prev_book' => 'Move to Previous Book', - 'books_sort_move_next_book' => 'Move to Next Book', - 'books_sort_move_prev_chapter' => 'Move Into Previous Chapter', + 'books_sort_move_prev_book' => 'Mutare în cartea anterioară', + 'books_sort_move_next_book' => 'Mută în următoarea carte', + 'books_sort_move_prev_chapter' => 'Mutați în capitolul anterior', 'books_sort_move_next_chapter' => 'Mergi la următorul capitol', 'books_sort_move_book_start' => 'Sari la începutul cârtii', 'books_sort_move_book_end' => 'Sari la sfârșitul cârtii', @@ -257,7 +257,7 @@ 'pages_revisions_created_by' => 'Creat de', 'pages_revisions_date' => 'Data revizuirii', 'pages_revisions_number' => '#', - 'pages_revisions_sort_number' => 'Revision Number', + 'pages_revisions_sort_number' => 'Numărul reviziei', 'pages_revisions_numbered' => 'Revizuire #:id', 'pages_revisions_numbered_changes' => 'Revizuirea #:id Modificări', 'pages_revisions_editor' => 'Tip editor', @@ -295,6 +295,7 @@ 'pages_is_template' => 'Şablon pagină', // Editor Sidebar + 'toggle_sidebar' => 'Comutați bara laterală', 'page_tags' => 'Etichete pagină', 'chapter_tags' => 'Etichete capitol', 'book_tags' => 'Etichete carte', @@ -410,10 +411,10 @@ 'watch' => 'Watch', 'watch_title_default' => 'Default Preferences', 'watch_desc_default' => 'Revert watching to just your default notification preferences.', - 'watch_title_ignore' => 'Ignore', + 'watch_title_ignore' => 'Ignoră', 'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.', 'watch_title_new' => 'Pagina Nouă', - 'watch_desc_new' => 'Notify when any new page is created within this item.', + 'watch_desc_new' => 'Notifică atunci când orice pagină nouă este creată în cadrul acestui element.', 'watch_title_updates' => 'Toate actualizările paginii', 'watch_desc_updates' => 'Notifică atunci când o pagină este editată sau creată.', 'watch_desc_updates_page' => 'Notifică la toate modificările paginii.', diff --git a/lang/ro/errors.php b/lang/ro/errors.php index 1a1020e21d9..1ed422f71d1 100644 --- a/lang/ro/errors.php +++ b/lang/ro/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Nu se poate obține imaginea de la :url', 'cannot_create_thumbs' => 'Serverul nu poate crea miniaturi. Verifică dacă este instalată extensia GD PHP.', 'server_upload_limit' => 'Serverul nu permite încărcarea acestei dimensiuni. Te rog să încerci o dimensiune mai mică a fișierului.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Serverul nu permite încărcarea acestei dimensiuni. Te rog să încerci o dimensiune mai mică a fișierului.', // Drawing & Images 'image_upload_error' => 'A apărut o eroare la încărcarea imaginii', 'image_upload_type_error' => 'Tipul de imagine încărcat nu este valid', 'image_upload_replace_type' => 'Inlocuirea fisierului de imagine trebuie sa fie de acelasi tip', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/ro/preferences.php b/lang/ro/preferences.php index db41dbd51dd..f4018b17168 100644 --- a/lang/ro/preferences.php +++ b/lang/ro/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferințe', + 'my_account' => 'My Account', 'shortcuts' => 'Scurtături', - 'shortcuts_interface' => 'Comenzi rapide interfață', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Aici puteți activa sau dezactiva scurtăturile interfeței folosite pentru navigare și acțiuni.', 'shortcuts_customize_desc' => 'Puteți personaliza fiecare dintre scurtăturile de mai jos. Apăsați combinația de taste dorită după ce selectați intrarea pentru o scurtătură.', 'shortcuts_toggle_label' => 'Comenzi rapide activate', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Articole urmărite și ignorate', 'notifications_watched_desc' => ' Mai jos sunt elementele care au fost aplicate preferințe personalizate. Pentru a actualiza preferințele pentru acestea, vizualizați elementul și apoi găsiți opțiunile de ceas în bara laterală.', - 'profile_overview_desc' => ' Gestionează detaliile profilului tău de utilizator, inclusiv opțiunile preferate de limbă și autentificare.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/ro/settings.php b/lang/ro/settings.php index 393baaa506f..91b1c806417 100644 --- a/lang/ro/settings.php +++ b/lang/ro/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Poți alege să trimiți acestui utilizator un e-mail de invitație care să îi permită să își seteze propria parolă, altfel îi poți seta tu parola.', 'users_send_invite_option' => 'Trimite e-mail cu invitație utilizatorului', 'users_external_auth_id' => 'ID autentificare externă', - 'users_external_auth_id_desc' => 'Acesta este ID-ul folosit pentru a potrivi acest utilizator atunci când comunică cu sistemul extern de autentificare.', - 'users_password_warning' => 'Completează mai jos numai dacă dorești schimbarea parolei.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Acest utilizator reprezintă orice utilizator invitat care vizitează instanța dvs. Nu poate fi folosit pentru a vă autentifica, dar este atribuit automat.', 'users_delete' => 'Șterge utilizator', 'users_delete_named' => 'Șterge utilizatorul :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Limba preferată', 'users_preferred_language_desc' => 'Această opțiune va schimba limba utilizată pentru interfața de utilizare a aplicației. Acest lucru nu va afecta conținutul creat de utilizatori.', 'users_social_accounts' => 'Conturi sociale', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Aici poți conecta celelalte conturi pentru o autentificare mai rapidă și mai ușoară. Deconectarea unui cont aici nu revocă accesul autorizat anterior. Revocă accesul din setările profilului tău de pe contul social conectat.', 'users_social_connect' => 'Conectare cont', 'users_social_disconnect' => 'Deconectare cont', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount a fost atașat cu succes la profilul tău.', 'users_social_disconnected' => 'Contul :socialAccount a fost deconectat cu succes de la profilul tău.', 'users_api_tokens' => 'Token API', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Nu au fost create token-uri API pentru acest utilizator', 'users_api_tokens_create' => 'Creare token', 'users_api_tokens_expires' => 'Expiră', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/ru/common.php b/lang/ru/common.php index 42f0b5d395f..aaffe250c73 100644 --- a/lang/ru/common.php +++ b/lang/ru/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Сбросить фильтр', 'download' => 'Загрузить', 'open_in_tab' => 'Открыть во вкладке', + 'open' => 'Open', // Sort Options 'sort_options' => 'Параметры сортировки', diff --git a/lang/ru/components.php b/lang/ru/components.php index fdcfb80a410..434c4acfd47 100644 --- a/lang/ru/components.php +++ b/lang/ru/components.php @@ -7,7 +7,7 @@ // Image Manager 'image_select' => 'Выбрать изображение', 'image_list' => 'Список изображений', - 'image_details' => 'Сведения об изображении', + 'image_details' => 'Детали изображения', 'image_upload' => 'Загрузить изображение', 'image_intro' => 'Здесь вы можете выбрать и управлять изображениями, которые были ранее загружены в систему.', 'image_intro_upload' => 'Загрузите новое изображение, перетянув файл в это окно, или с помощью кнопки "Загрузить изображение" выше.', @@ -34,6 +34,8 @@ 'image_delete_success' => 'Изображение успешно удалено', 'image_replace' => 'Заменить изображение', 'image_replace_success' => 'Файл изображения успешно обновлён', + 'image_rebuild_thumbs' => 'Пересоздать вариации размера', + 'image_rebuild_thumbs_success' => 'Вариации размера изображения успешно установлены!', // Code Editor 'code_editor' => 'Изменить код', diff --git a/lang/ru/entities.php b/lang/ru/entities.php index 621493b2520..066dc48f9ac 100644 --- a/lang/ru/entities.php +++ b/lang/ru/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Шаблон страницы', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Теги страницы', 'chapter_tags' => 'Теги главы', 'book_tags' => 'Теги книги', @@ -408,25 +409,25 @@ // Watch Options 'watch' => 'Watch', - 'watch_title_default' => 'Default Preferences', + 'watch_title_default' => 'Свойства по умолчанию', 'watch_desc_default' => 'Revert watching to just your default notification preferences.', - 'watch_title_ignore' => 'Ignore', - 'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.', - 'watch_title_new' => 'New Pages', - 'watch_desc_new' => 'Notify when any new page is created within this item.', - 'watch_title_updates' => 'All Page Updates', + 'watch_title_ignore' => 'Игнорировать', + 'watch_desc_ignore' => 'Игнорировать все уведомления, включая уведомления из пользовательского уровня.', + 'watch_title_new' => 'Новые страницы', + 'watch_desc_new' => 'Уведомлять при создании новой страницы внутри этого элемента.', + 'watch_title_updates' => 'Все обновления страницы', 'watch_desc_updates' => 'Notify upon all new pages and page changes.', 'watch_desc_updates_page' => 'Notify upon all page changes.', - 'watch_title_comments' => 'All Page Updates & Comments', - 'watch_desc_comments' => 'Notify upon all new pages, page changes and new comments.', - 'watch_desc_comments_page' => 'Notify upon page changes and new comments.', - 'watch_change_default' => 'Change default notification preferences', + 'watch_title_comments' => 'Все обновления и комментарии страниц', + 'watch_desc_comments' => 'Уведомлять обо всех новых страницах, изменениях страниц и новых комментариях.', + 'watch_desc_comments_page' => 'Уведомлять об изменениях страниц и новых комментариях.', + 'watch_change_default' => 'Изменить настройки уведомлений по умолчанию', 'watch_detail_ignore' => 'Игнорирование уведомлений', 'watch_detail_new' => 'Watching for new pages', - 'watch_detail_updates' => 'Watching new pages and updates', - 'watch_detail_comments' => 'Watching new pages, updates & comments', - 'watch_detail_parent_book' => 'Watching via parent book', - 'watch_detail_parent_book_ignore' => 'Ignoring via parent book', - 'watch_detail_parent_chapter' => 'Watching via parent chapter', - 'watch_detail_parent_chapter_ignore' => 'Ignoring via parent chapter', + 'watch_detail_updates' => 'Просмотр новых страниц и обновлений', + 'watch_detail_comments' => 'Просмотр новых страниц, обновлений и комментариев', + 'watch_detail_parent_book' => 'Просмотр через родительскую книгу', + 'watch_detail_parent_book_ignore' => 'Игнорирование через родительскую книгу', + 'watch_detail_parent_chapter' => 'Просмотр через родительскую главу', + 'watch_detail_parent_chapter_ignore' => 'Игнорирование через родительскую главу', ]; diff --git a/lang/ru/errors.php b/lang/ru/errors.php index 9f17ba81cff..ca9eed368e6 100644 --- a/lang/ru/errors.php +++ b/lang/ru/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Не удается получить изображение из :url', 'cannot_create_thumbs' => 'Сервер не может создавать эскизы. Убедитесь, что у вас установлено расширение GD PHP.', 'server_upload_limit' => 'Сервер не разрешает загрузку файлов такого размера. Попробуйте уменьшить размер файла.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Сервер не позволяет загружать файлы такого размера. Пожалуйста, попробуйте файл меньше.', // Drawing & Images 'image_upload_error' => 'Произошла ошибка при загрузке изображения', 'image_upload_type_error' => 'Неправильный тип загружаемого изображения', 'image_upload_replace_type' => 'Замена файла изображения должна быть того же типа', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Данные чертежа не могут быть загружены. Возможно, файл чертежа больше не существует или у вас нет разрешения на доступ к нему.', // Attachments @@ -112,5 +116,5 @@ 'maintenance_test_email_failure' => 'Ошибка при отправке тестового письма:', // HTTP errors - 'http_ssr_url_no_match' => 'The URL does not match the configured allowed SSR hosts', + 'http_ssr_url_no_match' => 'URL-адрес не соответствует настроенным разрешенным хостам SSR', ]; diff --git a/lang/ru/notifications.php b/lang/ru/notifications.php index 5e31cc72e29..888fb8b0eb0 100644 --- a/lang/ru/notifications.php +++ b/lang/ru/notifications.php @@ -5,11 +5,11 @@ return [ 'new_comment_subject' => 'Новый комментарий на странице: :pageName', - 'new_comment_intro' => 'A user has commented on a page in :appName:', + 'new_comment_intro' => 'Пользователь прокомментировал страницу в :appName:', 'new_page_subject' => 'Новая страница: :pageName', - 'new_page_intro' => 'A new page has been created in :appName:', - 'updated_page_subject' => 'Updated page: :pageName', - 'updated_page_intro' => 'A page has been updated in :appName:', + 'new_page_intro' => 'Новая страница была создана в :appName:', + 'updated_page_subject' => 'Обновлена страница: :pageName', + 'updated_page_intro' => 'Страница была обновлена в :appName:', 'updated_page_debounce' => 'To prevent a mass of notifications, for a while you won\'t be sent notifications for further edits to this page by the same editor.', 'detail_page_name' => 'Имя страницы:', diff --git a/lang/ru/preferences.php b/lang/ru/preferences.php index 9cf1395ed25..126aa6f1aed 100644 --- a/lang/ru/preferences.php +++ b/lang/ru/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Горячие клавиши', - 'shortcuts_interface' => 'Горячие клавиши интерфейса', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Здесь вы можете включить или отключить горячие клавиши системного интерфейса, используемые для навигации и действий.', 'shortcuts_customize_desc' => 'Вы можете настроить каждую из горячих клавиш ниже. Просто нажмите комбинацию клавиш после выбора вставки для горячих клавиш.', 'shortcuts_toggle_label' => 'Горячие клавиши включены', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/ru/settings.php b/lang/ru/settings.php index 3555bac5260..f49fd092be2 100644 --- a/lang/ru/settings.php +++ b/lang/ru/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Вы можете отправить этому пользователю письмо с приглашением, которое позволит ему установить пароль самостоятельно или задайте пароль сами.', 'users_send_invite_option' => 'Отправить пользователю письмо с приглашением', 'users_external_auth_id' => 'Внешний ID аутентификации', - 'users_external_auth_id_desc' => 'Этот ID используется для связи с вашей внешней системой аутентификации.', - 'users_password_warning' => 'Заполните поля ниже только если вы хотите изменить пароль.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Этот пользователь представляет любых гостевых пользователей, которые посещают ваше приложение. Он не может использоваться для входа в систему и назначается автоматически.', 'users_delete' => 'Удалить пользователя', 'users_delete_named' => 'Удалить пользователя :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Предпочитаемый язык', 'users_preferred_language_desc' => 'Этот параметр изменит язык интерфейса приложения. Это не влияет на созданный пользователем контент.', 'users_social_accounts' => 'Аккаунты социальных сетей', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Здесь вы можете подключить другие учетные записи для более быстрого и легкого входа в систему. Отключение учетной записи здесь не возможно. Отмените доступ к настройкам вашего профиля в подключенном социальном аккаунте.', 'users_social_connect' => 'Подключить аккаунт', 'users_social_disconnect' => 'Отключить аккаунт', + 'users_social_status_connected' => 'Подключен', + 'users_social_status_disconnected' => 'Отключен', 'users_social_connected' => ':socialAccount аккаунт успешно подключен к вашему профилю.', 'users_social_disconnected' => ':socialAccount аккаунт успешно отключен от вашего профиля.', 'users_api_tokens' => 'API токены', + 'users_api_tokens_desc' => 'Создание и управление токенами доступа, используемыми для аутентификации с помощью BookStack REST API. Разрешения для API управляются пользователем, которому принадлежит токен.', 'users_api_tokens_none' => 'Для этого пользователя не создано API токенов', 'users_api_tokens_create' => 'Создать токен', 'users_api_tokens_expires' => 'Истекает', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/sk/common.php b/lang/sk/common.php index da3a44ef0e6..898e08fdb53 100644 --- a/lang/sk/common.php +++ b/lang/sk/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Bez filtrovania', 'download' => 'Stiahnuť', 'open_in_tab' => 'Otvoriť na novej karte', + 'open' => 'Open', // Sort Options 'sort_options' => 'Možnosti triedenia', diff --git a/lang/sk/components.php b/lang/sk/components.php index 7762c02a41f..b9b29d71ccb 100644 --- a/lang/sk/components.php +++ b/lang/sk/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Obrázok úspešne zmazaný', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Upraviť kód', diff --git a/lang/sk/entities.php b/lang/sk/entities.php index 3d4938fff99..315033f4d2b 100644 --- a/lang/sk/entities.php +++ b/lang/sk/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Šablóna stránky', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Štítky stránok', 'chapter_tags' => 'Štítky kapitol', 'book_tags' => 'Štítky kníh', diff --git a/lang/sk/errors.php b/lang/sk/errors.php index 7aa1769e0ef..ed22e542a24 100644 --- a/lang/sk/errors.php +++ b/lang/sk/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Nedá sa získať obrázok z :url', 'cannot_create_thumbs' => 'Server nedokáže vytvoriť náhľady. Skontrolujte prosím, či máte nainštalované GD rozšírenie PHP.', 'server_upload_limit' => 'Server nedovoľuje nahrávanie súborov s takouto veľkosťou. Skúste prosím menší súbor.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Server nedovoľuje nahrávanie súborov s takouto veľkosťou. Skúste prosím menší súbor.', // Drawing & Images 'image_upload_error' => 'Pri nahrávaní obrázka nastala chyba', 'image_upload_type_error' => 'Typ nahrávaného obrázka je neplatný', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Údaje výkresu sa nepodarilo načítať. Súbor výkresu už možno neexistuje alebo nemáte povolenie na prístup k nemu.', // Attachments diff --git a/lang/sk/preferences.php b/lang/sk/preferences.php index e733f0b9f65..b3152848f3c 100644 --- a/lang/sk/preferences.php +++ b/lang/sk/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Skratky', - 'shortcuts_interface' => 'Klávesové skratky rozhrania', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Tu môžete povoliť alebo zakázať klávesové skratky systémového rozhrania, ktoré sa používajú na navigáciu a akcie.', 'shortcuts_customize_desc' => 'Každú z nižšie uvedených skratiek si môžete prispôsobiť. Po výbere vstupu pre skratku stačí stlačiť požadovanú kombináciu klávesov.', 'shortcuts_toggle_label' => 'Klávesové skratky sú povolené', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/sk/settings.php b/lang/sk/settings.php index 8a903dcda48..d1b614705af 100644 --- a/lang/sk/settings.php +++ b/lang/sk/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Môžete sa rozhodnúť poslať tomuto používateľovi e-mail s pozvánkou, ktorý mu umožní nastaviť si vlastné heslo, v opačnom prípade mu ho môžete nastaviť sami.', 'users_send_invite_option' => 'Odoslať e-mail s pozvánkou pre používateľa', 'users_external_auth_id' => 'Externé autentifikačné ID', - 'users_external_auth_id_desc' => 'Toto je ID používané na priradenie tohto používateľa pri komunikácii s vaším externým autentifikačným systémom.', - 'users_password_warning' => 'Pole nižšie vyplňte iba ak chcete zmeniť heslo:', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Tento účet reprezentuje každého hosťovského používateľa, ktorý navštívi Vašu inštanciu. Nedá sa pomocou neho prihlásiť a je priradený automaticky.', 'users_delete' => 'Zmazať používateľa', 'users_delete_named' => 'Zmazať používateľa :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Preferovaný jazyk', 'users_preferred_language_desc' => 'Táto možnosť zmení jazyk používaný pre používateľské rozhranie aplikácie. Neovplyvní to žiadny obsah vytvorený používateľmi.', 'users_social_accounts' => 'Sociálne účty', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Tu si môžete pripojiť iné účty pre rýchlejšie a jednoduchšie prihlásenie. Disconnecting an account here does not previously authorized access. Revoke access from your profile settings on the connected social account.', 'users_social_connect' => 'Pripojiť účet', 'users_social_disconnect' => 'Odpojiť účet', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount účet bol úspešne pripojený k Vášmu profilu.', 'users_social_disconnected' => ':socialAccount účet bol úspešne odpojený od Vášho profilu.', 'users_api_tokens' => 'API Kľúče', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Pre tohto používateľa neboli vytvorené žiadne tokeny API', 'users_api_tokens_create' => 'Vytvoriť token', 'users_api_tokens_expires' => 'Platnosť do', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/sl/common.php b/lang/sl/common.php index 89e7af80c32..62d8eb033d5 100644 --- a/lang/sl/common.php +++ b/lang/sl/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Clear Filter', 'download' => 'Download', 'open_in_tab' => 'Open in Tab', + 'open' => 'Open', // Sort Options 'sort_options' => 'Možnosti razvrščanja', diff --git a/lang/sl/components.php b/lang/sl/components.php index 2dadd262999..6cd92cc8d96 100644 --- a/lang/sl/components.php +++ b/lang/sl/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Slika uspešno izbrisana', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Uredi kodo', diff --git a/lang/sl/entities.php b/lang/sl/entities.php index f4186ed9db5..f6628dd1ec8 100644 --- a/lang/sl/entities.php +++ b/lang/sl/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Predloga strani', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Oznake strani', 'chapter_tags' => 'Oznake poglavja', 'book_tags' => 'Oznake knjige', diff --git a/lang/sl/errors.php b/lang/sl/errors.php index f014b114727..ffabee7ecc4 100644 --- a/lang/sl/errors.php +++ b/lang/sl/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Ne morem pridobiti slike z :url', 'cannot_create_thumbs' => 'Strežnik ne more izdelati sličice. Prosimo preverite če imate GD PHP razširitev nameščeno.', 'server_upload_limit' => 'Strežnik ne dovoli nalaganj take velikosti. Prosimo poskusite z manjšo velikostjo datoteke.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Strežnik ne dovoli nalaganj take velikosti. Prosimo poskusite zmanjšati velikost datoteke.', // Drawing & Images 'image_upload_error' => 'Prišlo je do napake med nalaganjem slike', 'image_upload_type_error' => 'Napačen tip (format) slike', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/sl/preferences.php b/lang/sl/preferences.php index 118e8ba820f..2b88f9671ff 100644 --- a/lang/sl/preferences.php +++ b/lang/sl/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Shortcuts', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/sl/settings.php b/lang/sl/settings.php index 5d5bad4c9dc..a4469e53ba2 100644 --- a/lang/sl/settings.php +++ b/lang/sl/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Uporabniku lahko pošljete e-poštno sporočilo s povabilom, ki mu omogoča, da nastavi svoje geslo, ali pa ga nastavite kar sami.', 'users_send_invite_option' => 'Pošlji uporabniku e-poštno povabilo', 'users_external_auth_id' => 'Zunanje dokazilo ID', - 'users_external_auth_id_desc' => 'To je ID, s katerim se ta uporabnik ujema pri komunikaciji z vašim zunanjim sistemom za preverjanje pristnosti.', - 'users_password_warning' => 'Spodaj izpolni le, če želiš spremeniti geslo.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Ta uporabnik predstavlja vse gostujoče uporabnike, ki obiščejo vašo wiki stran. Za prijavo je ni mogoče uporabiti, ampak je dodeljena samodejno.', 'users_delete' => 'Brisanje uporabnika', 'users_delete_named' => 'Brisanje uporabnika :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Izbrani jezik', 'users_preferred_language_desc' => 'Ta možnost bo spremenila jezik, ki se uporablja za uporabniški vmesnik aplikacije. To ne bo vplivalo na nobeno vsebino, ki jo ustvari uporabnik.', 'users_social_accounts' => 'Družbene ikone / računi', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Tu lahko za hitrejšo in lažjo prijavo povežete druge račune. Prekinitev povezave računa tukaj ne prekliče predhodno odobrenega dostopa. Prekličite dostop iz nastavitev profila v povezanem družabnem računu.', 'users_social_connect' => 'Povežite račun', 'users_social_disconnect' => 'Odklop računa', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount račun je bil uspešno dodan vašemu profilu.', 'users_social_disconnected' => ':socialAccount račun je bil uspešno odstranjen iz vašega profila.', 'users_api_tokens' => 'API žeton', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Nič API žetonov ni bilo ustvarjenih za uporabnika', 'users_api_tokens_create' => 'Ustvari žeton', 'users_api_tokens_expires' => 'Poteče', @@ -303,8 +307,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -315,6 +320,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/sq/activities.php b/lang/sq/activities.php new file mode 100644 index 00000000000..d5b55c03dcb --- /dev/null +++ b/lang/sq/activities.php @@ -0,0 +1,124 @@ + 'created page', + 'page_create_notification' => 'Page successfully created', + 'page_update' => 'updated page', + 'page_update_notification' => 'Page successfully updated', + 'page_delete' => 'deleted page', + 'page_delete_notification' => 'Page successfully deleted', + 'page_restore' => 'restored page', + 'page_restore_notification' => 'Page successfully restored', + 'page_move' => 'moved page', + 'page_move_notification' => 'Page successfully moved', + + // Chapters + 'chapter_create' => 'created chapter', + 'chapter_create_notification' => 'Chapter successfully created', + 'chapter_update' => 'updated chapter', + 'chapter_update_notification' => 'Chapter successfully updated', + 'chapter_delete' => 'deleted chapter', + 'chapter_delete_notification' => 'Chapter successfully deleted', + 'chapter_move' => 'moved chapter', + 'chapter_move_notification' => 'Chapter successfully moved', + + // Books + 'book_create' => 'created book', + 'book_create_notification' => 'Book successfully created', + 'book_create_from_chapter' => 'converted chapter to book', + 'book_create_from_chapter_notification' => 'Chapter successfully converted to a book', + 'book_update' => 'updated book', + 'book_update_notification' => 'Book successfully updated', + 'book_delete' => 'deleted book', + 'book_delete_notification' => 'Book successfully deleted', + 'book_sort' => 'sorted book', + 'book_sort_notification' => 'Book successfully re-sorted', + + // Bookshelves + 'bookshelf_create' => 'created shelf', + 'bookshelf_create_notification' => 'Shelf successfully created', + 'bookshelf_create_from_book' => 'converted book to shelf', + 'bookshelf_create_from_book_notification' => 'Book successfully converted to a shelf', + 'bookshelf_update' => 'updated shelf', + 'bookshelf_update_notification' => 'Shelf successfully updated', + 'bookshelf_delete' => 'deleted shelf', + 'bookshelf_delete_notification' => 'Shelf successfully deleted', + + // Revisions + 'revision_restore' => 'restored revision', + 'revision_delete' => 'deleted revision', + 'revision_delete_notification' => 'Revision successfully deleted', + + // Favourites + 'favourite_add_notification' => '":name" has been added to your favourites', + 'favourite_remove_notification' => '":name" has been removed from your favourites', + + // Watching + 'watch_update_level_notification' => 'Watch preferences successfully updated', + + // Auth + 'auth_login' => 'logged in', + 'auth_register' => 'registered as new user', + 'auth_password_reset_request' => 'requested user password reset', + 'auth_password_reset_update' => 'reset user password', + 'mfa_setup_method' => 'configured MFA method', + 'mfa_setup_method_notification' => 'Multi-factor method successfully configured', + 'mfa_remove_method' => 'removed MFA method', + 'mfa_remove_method_notification' => 'Multi-factor method successfully removed', + + // Settings + 'settings_update' => 'updated settings', + 'settings_update_notification' => 'Settings successfully updated', + 'maintenance_action_run' => 'ran maintenance action', + + // Webhooks + 'webhook_create' => 'created webhook', + 'webhook_create_notification' => 'Webhook successfully created', + 'webhook_update' => 'updated webhook', + 'webhook_update_notification' => 'Webhook successfully updated', + 'webhook_delete' => 'deleted webhook', + 'webhook_delete_notification' => 'Webhook successfully deleted', + + // Users + 'user_create' => 'created user', + 'user_create_notification' => 'User successfully created', + 'user_update' => 'updated user', + 'user_update_notification' => 'User successfully updated', + 'user_delete' => 'deleted user', + 'user_delete_notification' => 'User successfully removed', + + // API Tokens + 'api_token_create' => 'created api token', + 'api_token_create_notification' => 'API token successfully created', + 'api_token_update' => 'updated api token', + 'api_token_update_notification' => 'API token successfully updated', + 'api_token_delete' => 'deleted api token', + 'api_token_delete_notification' => 'API token successfully deleted', + + // Roles + 'role_create' => 'created role', + 'role_create_notification' => 'Role successfully created', + 'role_update' => 'updated role', + 'role_update_notification' => 'Role successfully updated', + 'role_delete' => 'deleted role', + 'role_delete_notification' => 'Role successfully deleted', + + // Recycle Bin + 'recycle_bin_empty' => 'emptied recycle bin', + 'recycle_bin_restore' => 'restored from recycle bin', + 'recycle_bin_destroy' => 'removed from recycle bin', + + // Comments + 'commented_on' => 'commented on', + 'comment_create' => 'added comment', + 'comment_update' => 'updated comment', + 'comment_delete' => 'deleted comment', + + // Other + 'permissions_update' => 'updated permissions', +]; diff --git a/lang/sq/auth.php b/lang/sq/auth.php new file mode 100644 index 00000000000..dc4b242a09e --- /dev/null +++ b/lang/sq/auth.php @@ -0,0 +1,117 @@ + 'These credentials do not match our records.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + + // Login & Register + 'sign_up' => 'Sign up', + 'log_in' => 'Log in', + 'log_in_with' => 'Login with :socialDriver', + 'sign_up_with' => 'Sign up with :socialDriver', + 'logout' => 'Logout', + + 'name' => 'Name', + 'username' => 'Username', + 'email' => 'Email', + 'password' => 'Password', + 'password_confirm' => 'Confirm Password', + 'password_hint' => 'Must be at least 8 characters', + 'forgot_password' => 'Forgot Password?', + 'remember_me' => 'Remember Me', + 'ldap_email_hint' => 'Please enter an email to use for this account.', + 'create_account' => 'Create Account', + 'already_have_account' => 'Already have an account?', + 'dont_have_account' => 'Don\'t have an account?', + 'social_login' => 'Social Login', + 'social_registration' => 'Social Registration', + 'social_registration_text' => 'Register and sign in using another service.', + + 'register_thanks' => 'Thanks for registering!', + 'register_confirm' => 'Please check your email and click the confirmation button to access :appName.', + 'registrations_disabled' => 'Registrations are currently disabled', + 'registration_email_domain_invalid' => 'That email domain does not have access to this application', + 'register_success' => 'Thanks for signing up! You are now registered and signed in.', + + // Login auto-initiation + 'auto_init_starting' => 'Attempting Login', + 'auto_init_starting_desc' => 'We\'re contacting your authentication system to start the login process. If there\'s no progress after 5 seconds you can try clicking the link below.', + 'auto_init_start_link' => 'Proceed with authentication', + + // Password Reset + 'reset_password' => 'Reset Password', + 'reset_password_send_instructions' => 'Enter your email below and you will be sent an email with a password reset link.', + 'reset_password_send_button' => 'Send Reset Link', + 'reset_password_sent' => 'A password reset link will be sent to :email if that email address is found in the system.', + 'reset_password_success' => 'Your password has been successfully reset.', + 'email_reset_subject' => 'Reset your :appName password', + 'email_reset_text' => 'You are receiving this email because we received a password reset request for your account.', + 'email_reset_not_requested' => 'If you did not request a password reset, no further action is required.', + + // Email Confirmation + 'email_confirm_subject' => 'Confirm your email on :appName', + 'email_confirm_greeting' => 'Thanks for joining :appName!', + 'email_confirm_text' => 'Please confirm your email address by clicking the button below:', + 'email_confirm_action' => 'Confirm Email', + 'email_confirm_send_error' => 'Email confirmation required but the system could not send the email. Contact the admin to ensure email is set up correctly.', + 'email_confirm_success' => 'Your email has been confirmed! You should now be able to login using this email address.', + 'email_confirm_resent' => 'Confirmation email resent, Please check your inbox.', + 'email_confirm_thanks' => 'Thanks for confirming!', + 'email_confirm_thanks_desc' => 'Please wait a moment while your confirmation is handled. If you are not redirected after 3 seconds press the "Continue" link below to proceed.', + + 'email_not_confirmed' => 'Email Address Not Confirmed', + 'email_not_confirmed_text' => 'Your email address has not yet been confirmed.', + 'email_not_confirmed_click_link' => 'Please click the link in the email that was sent shortly after you registered.', + 'email_not_confirmed_resend' => 'If you cannot find the email you can re-send the confirmation email by submitting the form below.', + 'email_not_confirmed_resend_button' => 'Resend Confirmation Email', + + // User Invite + 'user_invite_email_subject' => 'You have been invited to join :appName!', + 'user_invite_email_greeting' => 'An account has been created for you on :appName.', + 'user_invite_email_text' => 'Click the button below to set an account password and gain access:', + 'user_invite_email_action' => 'Set Account Password', + 'user_invite_page_welcome' => 'Welcome to :appName!', + 'user_invite_page_text' => 'To finalise your account and gain access you need to set a password which will be used to log-in to :appName on future visits.', + 'user_invite_page_confirm_button' => 'Confirm Password', + 'user_invite_success_login' => 'Password set, you should now be able to login using your set password to access :appName!', + + // Multi-factor Authentication + 'mfa_setup' => 'Setup Multi-Factor Authentication', + 'mfa_setup_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', + 'mfa_setup_configured' => 'Already configured', + 'mfa_setup_reconfigure' => 'Reconfigure', + 'mfa_setup_remove_confirmation' => 'Are you sure you want to remove this multi-factor authentication method?', + 'mfa_setup_action' => 'Setup', + 'mfa_backup_codes_usage_limit_warning' => 'You have less than 5 backup codes remaining, Please generate and store a new set before you run out of codes to prevent being locked out of your account.', + 'mfa_option_totp_title' => 'Mobile App', + 'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.', + 'mfa_option_backup_codes_title' => 'Backup Codes', + 'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.', + 'mfa_gen_confirm_and_enable' => 'Confirm and Enable', + 'mfa_gen_backup_codes_title' => 'Backup Codes Setup', + 'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.', + 'mfa_gen_backup_codes_download' => 'Download Codes', + 'mfa_gen_backup_codes_usage_warning' => 'Each code can only be used once', + 'mfa_gen_totp_title' => 'Mobile App Setup', + 'mfa_gen_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.', + 'mfa_gen_totp_scan' => 'Scan the QR code below using your preferred authentication app to get started.', + 'mfa_gen_totp_verify_setup' => 'Verify Setup', + 'mfa_gen_totp_verify_setup_desc' => 'Verify that all is working by entering a code, generated within your authentication app, in the input box below:', + 'mfa_gen_totp_provide_code_here' => 'Provide your app generated code here', + 'mfa_verify_access' => 'Verify Access', + 'mfa_verify_access_desc' => 'Your user account requires you to confirm your identity via an additional level of verification before you\'re granted access. Verify using one of your configured methods to continue.', + 'mfa_verify_no_methods' => 'No Methods Configured', + 'mfa_verify_no_methods_desc' => 'No multi-factor authentication methods could be found for your account. You\'ll need to set up at least one method before you gain access.', + 'mfa_verify_use_totp' => 'Verify using a mobile app', + 'mfa_verify_use_backup_codes' => 'Verify using a backup code', + 'mfa_verify_backup_code' => 'Backup Code', + 'mfa_verify_backup_code_desc' => 'Enter one of your remaining backup codes below:', + 'mfa_verify_backup_code_enter_here' => 'Enter backup code here', + 'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:', + 'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.', +]; diff --git a/lang/sq/common.php b/lang/sq/common.php new file mode 100644 index 00000000000..27037babec0 --- /dev/null +++ b/lang/sq/common.php @@ -0,0 +1,110 @@ + 'Cancel', + 'close' => 'Close', + 'confirm' => 'Confirm', + 'back' => 'Back', + 'save' => 'Save', + 'continue' => 'Continue', + 'select' => 'Select', + 'toggle_all' => 'Toggle All', + 'more' => 'More', + + // Form Labels + 'name' => 'Name', + 'description' => 'Description', + 'role' => 'Role', + 'cover_image' => 'Cover image', + 'cover_image_description' => 'This image should be approx 440x250px.', + + // Actions + 'actions' => 'Actions', + 'view' => 'View', + 'view_all' => 'View All', + 'new' => 'New', + 'create' => 'Create', + 'update' => 'Update', + 'edit' => 'Edit', + 'sort' => 'Sort', + 'move' => 'Move', + 'copy' => 'Copy', + 'reply' => 'Reply', + 'delete' => 'Delete', + 'delete_confirm' => 'Confirm Deletion', + 'search' => 'Search', + 'search_clear' => 'Clear Search', + 'reset' => 'Reset', + 'remove' => 'Remove', + 'add' => 'Add', + 'configure' => 'Configure', + 'manage' => 'Manage', + 'fullscreen' => 'Fullscreen', + 'favourite' => 'Favourite', + 'unfavourite' => 'Unfavourite', + 'next' => 'Next', + 'previous' => 'Previous', + 'filter_active' => 'Active Filter:', + 'filter_clear' => 'Clear Filter', + 'download' => 'Download', + 'open_in_tab' => 'Open in Tab', + 'open' => 'Open', + + // Sort Options + 'sort_options' => 'Sort Options', + 'sort_direction_toggle' => 'Sort Direction Toggle', + 'sort_ascending' => 'Sort Ascending', + 'sort_descending' => 'Sort Descending', + 'sort_name' => 'Name', + 'sort_default' => 'Default', + 'sort_created_at' => 'Created Date', + 'sort_updated_at' => 'Updated Date', + + // Misc + 'deleted_user' => 'Deleted User', + 'no_activity' => 'No activity to show', + 'no_items' => 'No items available', + 'back_to_top' => 'Back to top', + 'skip_to_main_content' => 'Skip to main content', + 'toggle_details' => 'Toggle Details', + 'toggle_thumbnails' => 'Toggle Thumbnails', + 'details' => 'Details', + 'grid_view' => 'Grid View', + 'list_view' => 'List View', + 'default' => 'Default', + 'breadcrumb' => 'Breadcrumb', + 'status' => 'Status', + 'status_active' => 'Active', + 'status_inactive' => 'Inactive', + 'never' => 'Never', + 'none' => 'None', + + // Header + 'homepage' => 'Homepage', + 'header_menu_expand' => 'Expand Header Menu', + 'profile_menu' => 'Profile Menu', + 'view_profile' => 'View Profile', + 'edit_profile' => 'Edit Profile', + 'dark_mode' => 'Dark Mode', + 'light_mode' => 'Light Mode', + 'global_search' => 'Global Search', + + // Layout tabs + 'tab_info' => 'Info', + 'tab_info_label' => 'Tab: Show Secondary Information', + 'tab_content' => 'Content', + 'tab_content_label' => 'Tab: Show Primary Content', + + // Email Content + 'email_action_help' => 'If you’re having trouble clicking the ":actionText" button, copy and paste the URL below into your web browser:', + 'email_rights' => 'All rights reserved', + + // Footer Link Options + // Not directly used but available for convenience to users. + 'privacy_policy' => 'Privacy Policy', + 'terms_of_service' => 'Terms of Service', +]; diff --git a/lang/sq/components.php b/lang/sq/components.php new file mode 100644 index 00000000000..c33b1d0b791 --- /dev/null +++ b/lang/sq/components.php @@ -0,0 +1,46 @@ + 'Image Select', + 'image_list' => 'Image List', + 'image_details' => 'Image Details', + 'image_upload' => 'Upload Image', + 'image_intro' => 'Here you can select and manage images that have been previously uploaded to the system.', + 'image_intro_upload' => 'Upload a new image by dragging an image file into this window, or by using the "Upload Image" button above.', + 'image_all' => 'All', + 'image_all_title' => 'View all images', + 'image_book_title' => 'View images uploaded to this book', + 'image_page_title' => 'View images uploaded to this page', + 'image_search_hint' => 'Search by image name', + 'image_uploaded' => 'Uploaded :uploadedDate', + 'image_uploaded_by' => 'Uploaded by :userName', + 'image_uploaded_to' => 'Uploaded to :pageLink', + 'image_updated' => 'Updated :updateDate', + 'image_load_more' => 'Load More', + 'image_image_name' => 'Image Name', + 'image_delete_used' => 'This image is used in the pages below.', + 'image_delete_confirm_text' => 'Are you sure you want to delete this image?', + 'image_select_image' => 'Select Image', + 'image_dropzone' => 'Drop images or click here to upload', + 'image_dropzone_drop' => 'Drop images here to upload', + 'images_deleted' => 'Images Deleted', + 'image_preview' => 'Image Preview', + 'image_upload_success' => 'Image uploaded successfully', + 'image_update_success' => 'Image details successfully updated', + 'image_delete_success' => 'Image successfully deleted', + 'image_replace' => 'Replace Image', + 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', + + // Code Editor + 'code_editor' => 'Edit Code', + 'code_language' => 'Code Language', + 'code_content' => 'Code Content', + 'code_session_history' => 'Session History', + 'code_save' => 'Save Code', +]; diff --git a/lang/sq/editor.php b/lang/sq/editor.php new file mode 100644 index 00000000000..670c1c5e1ac --- /dev/null +++ b/lang/sq/editor.php @@ -0,0 +1,174 @@ + 'General', + 'advanced' => 'Advanced', + 'none' => 'None', + 'cancel' => 'Cancel', + 'save' => 'Save', + 'close' => 'Close', + 'undo' => 'Undo', + 'redo' => 'Redo', + 'left' => 'Left', + 'center' => 'Center', + 'right' => 'Right', + 'top' => 'Top', + 'middle' => 'Middle', + 'bottom' => 'Bottom', + 'width' => 'Width', + 'height' => 'Height', + 'More' => 'More', + 'select' => 'Select...', + + // Toolbar + 'formats' => 'Formats', + 'header_large' => 'Large Header', + 'header_medium' => 'Medium Header', + 'header_small' => 'Small Header', + 'header_tiny' => 'Tiny Header', + 'paragraph' => 'Paragraph', + 'blockquote' => 'Blockquote', + 'inline_code' => 'Inline code', + 'callouts' => 'Callouts', + 'callout_information' => 'Information', + 'callout_success' => 'Success', + 'callout_warning' => 'Warning', + 'callout_danger' => 'Danger', + 'bold' => 'Bold', + 'italic' => 'Italic', + 'underline' => 'Underline', + 'strikethrough' => 'Strikethrough', + 'superscript' => 'Superscript', + 'subscript' => 'Subscript', + 'text_color' => 'Text color', + 'custom_color' => 'Custom color', + 'remove_color' => 'Remove color', + 'background_color' => 'Background color', + 'align_left' => 'Align left', + 'align_center' => 'Align center', + 'align_right' => 'Align right', + 'align_justify' => 'Justify', + 'list_bullet' => 'Bullet list', + 'list_numbered' => 'Numbered list', + 'list_task' => 'Task list', + 'indent_increase' => 'Increase indent', + 'indent_decrease' => 'Decrease indent', + 'table' => 'Table', + 'insert_image' => 'Insert image', + 'insert_image_title' => 'Insert/Edit Image', + 'insert_link' => 'Insert/edit link', + 'insert_link_title' => 'Insert/Edit Link', + 'insert_horizontal_line' => 'Insert horizontal line', + 'insert_code_block' => 'Insert code block', + 'edit_code_block' => 'Edit code block', + 'insert_drawing' => 'Insert/edit drawing', + 'drawing_manager' => 'Drawing manager', + 'insert_media' => 'Insert/edit media', + 'insert_media_title' => 'Insert/Edit Media', + 'clear_formatting' => 'Clear formatting', + 'source_code' => 'Source code', + 'source_code_title' => 'Source Code', + 'fullscreen' => 'Fullscreen', + 'image_options' => 'Image options', + + // Tables + 'table_properties' => 'Table properties', + 'table_properties_title' => 'Table Properties', + 'delete_table' => 'Delete table', + 'insert_row_before' => 'Insert row before', + 'insert_row_after' => 'Insert row after', + 'delete_row' => 'Delete row', + 'insert_column_before' => 'Insert column before', + 'insert_column_after' => 'Insert column after', + 'delete_column' => 'Delete column', + 'table_cell' => 'Cell', + 'table_row' => 'Row', + 'table_column' => 'Column', + 'cell_properties' => 'Cell properties', + 'cell_properties_title' => 'Cell Properties', + 'cell_type' => 'Cell type', + 'cell_type_cell' => 'Cell', + 'cell_scope' => 'Scope', + 'cell_type_header' => 'Header cell', + 'merge_cells' => 'Merge cells', + 'split_cell' => 'Split cell', + 'table_row_group' => 'Row Group', + 'table_column_group' => 'Column Group', + 'horizontal_align' => 'Horizontal align', + 'vertical_align' => 'Vertical align', + 'border_width' => 'Border width', + 'border_style' => 'Border style', + 'border_color' => 'Border color', + 'row_properties' => 'Row properties', + 'row_properties_title' => 'Row Properties', + 'cut_row' => 'Cut row', + 'copy_row' => 'Copy row', + 'paste_row_before' => 'Paste row before', + 'paste_row_after' => 'Paste row after', + 'row_type' => 'Row type', + 'row_type_header' => 'Header', + 'row_type_body' => 'Body', + 'row_type_footer' => 'Footer', + 'alignment' => 'Alignment', + 'cut_column' => 'Cut column', + 'copy_column' => 'Copy column', + 'paste_column_before' => 'Paste column before', + 'paste_column_after' => 'Paste column after', + 'cell_padding' => 'Cell padding', + 'cell_spacing' => 'Cell spacing', + 'caption' => 'Caption', + 'show_caption' => 'Show caption', + 'constrain' => 'Constrain proportions', + 'cell_border_solid' => 'Solid', + 'cell_border_dotted' => 'Dotted', + 'cell_border_dashed' => 'Dashed', + 'cell_border_double' => 'Double', + 'cell_border_groove' => 'Groove', + 'cell_border_ridge' => 'Ridge', + 'cell_border_inset' => 'Inset', + 'cell_border_outset' => 'Outset', + 'cell_border_none' => 'None', + 'cell_border_hidden' => 'Hidden', + + // Images, links, details/summary & embed + 'source' => 'Source', + 'alt_desc' => 'Alternative description', + 'embed' => 'Embed', + 'paste_embed' => 'Paste your embed code below:', + 'url' => 'URL', + 'text_to_display' => 'Text to display', + 'title' => 'Title', + 'open_link' => 'Open link', + 'open_link_in' => 'Open link in...', + 'open_link_current' => 'Current window', + 'open_link_new' => 'New window', + 'remove_link' => 'Remove link', + 'insert_collapsible' => 'Insert collapsible block', + 'collapsible_unwrap' => 'Unwrap', + 'edit_label' => 'Edit label', + 'toggle_open_closed' => 'Toggle open/closed', + 'collapsible_edit' => 'Edit collapsible block', + 'toggle_label' => 'Toggle label', + + // About view + 'about' => 'About the editor', + 'about_title' => 'About the WYSIWYG Editor', + 'editor_license' => 'Editor License & Copyright', + 'editor_tiny_license' => 'This editor is built using :tinyLink which is provided under the MIT license.', + 'editor_tiny_license_link' => 'The copyright and license details of TinyMCE can be found here.', + 'save_continue' => 'Save Page & Continue', + 'callouts_cycle' => '(Keep pressing to toggle through types)', + 'link_selector' => 'Link to content', + 'shortcuts' => 'Shortcuts', + 'shortcut' => 'Shortcut', + 'shortcuts_intro' => 'The following shortcuts are available in the editor:', + 'windows_linux' => '(Windows/Linux)', + 'mac' => '(Mac)', + 'description' => 'Description', +]; diff --git a/lang/sq/entities.php b/lang/sq/entities.php new file mode 100644 index 00000000000..cfb5aae1a78 --- /dev/null +++ b/lang/sq/entities.php @@ -0,0 +1,433 @@ + 'Recently Created', + 'recently_created_pages' => 'Recently Created Pages', + 'recently_updated_pages' => 'Recently Updated Pages', + 'recently_created_chapters' => 'Recently Created Chapters', + 'recently_created_books' => 'Recently Created Books', + 'recently_created_shelves' => 'Recently Created Shelves', + 'recently_update' => 'Recently Updated', + 'recently_viewed' => 'Recently Viewed', + 'recent_activity' => 'Recent Activity', + 'create_now' => 'Create one now', + 'revisions' => 'Revisions', + 'meta_revision' => 'Revision #:revisionCount', + 'meta_created' => 'Created :timeLength', + 'meta_created_name' => 'Created :timeLength by :user', + 'meta_updated' => 'Updated :timeLength', + 'meta_updated_name' => 'Updated :timeLength by :user', + 'meta_owned_name' => 'Owned by :user', + 'meta_reference_page_count' => 'Referenced on :count page|Referenced on :count pages', + 'entity_select' => 'Entity Select', + 'entity_select_lack_permission' => 'You don\'t have the required permissions to select this item', + 'images' => 'Images', + 'my_recent_drafts' => 'My Recent Drafts', + 'my_recently_viewed' => 'My Recently Viewed', + 'my_most_viewed_favourites' => 'My Most Viewed Favourites', + 'my_favourites' => 'My Favourites', + 'no_pages_viewed' => 'You have not viewed any pages', + 'no_pages_recently_created' => 'No pages have been recently created', + 'no_pages_recently_updated' => 'No pages have been recently updated', + 'export' => 'Export', + 'export_html' => 'Contained Web File', + 'export_pdf' => 'PDF File', + 'export_text' => 'Plain Text File', + 'export_md' => 'Markdown File', + + // Permissions and restrictions + 'permissions' => 'Permissions', + 'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.', + 'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.', + 'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.', + 'permissions_save' => 'Save Permissions', + 'permissions_owner' => 'Owner', + 'permissions_role_everyone_else' => 'Everyone Else', + 'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.', + 'permissions_role_override' => 'Override permissions for role', + 'permissions_inherit_defaults' => 'Inherit defaults', + + // Search + 'search_results' => 'Search Results', + 'search_total_results_found' => ':count result found|:count total results found', + 'search_clear' => 'Clear Search', + 'search_no_pages' => 'No pages matched this search', + 'search_for_term' => 'Search for :term', + 'search_more' => 'More Results', + 'search_advanced' => 'Advanced Search', + 'search_terms' => 'Search Terms', + 'search_content_type' => 'Content Type', + 'search_exact_matches' => 'Exact Matches', + 'search_tags' => 'Tag Searches', + 'search_options' => 'Options', + 'search_viewed_by_me' => 'Viewed by me', + 'search_not_viewed_by_me' => 'Not viewed by me', + 'search_permissions_set' => 'Permissions set', + 'search_created_by_me' => 'Created by me', + 'search_updated_by_me' => 'Updated by me', + 'search_owned_by_me' => 'Owned by me', + 'search_date_options' => 'Date Options', + 'search_updated_before' => 'Updated before', + 'search_updated_after' => 'Updated after', + 'search_created_before' => 'Created before', + 'search_created_after' => 'Created after', + 'search_set_date' => 'Set Date', + 'search_update' => 'Update Search', + + // Shelves + 'shelf' => 'Shelf', + 'shelves' => 'Shelves', + 'x_shelves' => ':count Shelf|:count Shelves', + 'shelves_empty' => 'No shelves have been created', + 'shelves_create' => 'Create New Shelf', + 'shelves_popular' => 'Popular Shelves', + 'shelves_new' => 'New Shelves', + 'shelves_new_action' => 'New Shelf', + 'shelves_popular_empty' => 'The most popular shelves will appear here.', + 'shelves_new_empty' => 'The most recently created shelves will appear here.', + 'shelves_save' => 'Save Shelf', + 'shelves_books' => 'Books on this shelf', + 'shelves_add_books' => 'Add books to this shelf', + 'shelves_drag_books' => 'Drag books below to add them to this shelf', + 'shelves_empty_contents' => 'This shelf has no books assigned to it', + 'shelves_edit_and_assign' => 'Edit shelf to assign books', + 'shelves_edit_named' => 'Edit Shelf :name', + 'shelves_edit' => 'Edit Shelf', + 'shelves_delete' => 'Delete Shelf', + 'shelves_delete_named' => 'Delete Shelf :name', + 'shelves_delete_explain' => "This will delete the shelf with the name ':name'. Contained books will not be deleted.", + 'shelves_delete_confirmation' => 'Are you sure you want to delete this shelf?', + 'shelves_permissions' => 'Shelf Permissions', + 'shelves_permissions_updated' => 'Shelf Permissions Updated', + 'shelves_permissions_active' => 'Shelf Permissions Active', + 'shelves_permissions_cascade_warning' => 'Permissions on shelves do not automatically cascade to contained books. This is because a book can exist on multiple shelves. Permissions can however be copied down to child books using the option found below.', + 'shelves_permissions_create' => 'Shelf create permissions are only used for copying permissions to child books using the action below. They do not control the ability to create books.', + 'shelves_copy_permissions_to_books' => 'Copy Permissions to Books', + 'shelves_copy_permissions' => 'Copy Permissions', + 'shelves_copy_permissions_explain' => 'This will apply the current permission settings of this shelf to all books contained within. Before activating, ensure any changes to the permissions of this shelf have been saved.', + 'shelves_copy_permission_success' => 'Shelf permissions copied to :count books', + + // Books + 'book' => 'Book', + 'books' => 'Books', + 'x_books' => ':count Book|:count Books', + 'books_empty' => 'No books have been created', + 'books_popular' => 'Popular Books', + 'books_recent' => 'Recent Books', + 'books_new' => 'New Books', + 'books_new_action' => 'New Book', + 'books_popular_empty' => 'The most popular books will appear here.', + 'books_new_empty' => 'The most recently created books will appear here.', + 'books_create' => 'Create New Book', + 'books_delete' => 'Delete Book', + 'books_delete_named' => 'Delete Book :bookName', + 'books_delete_explain' => 'This will delete the book with the name \':bookName\'. All pages and chapters will be removed.', + 'books_delete_confirmation' => 'Are you sure you want to delete this book?', + 'books_edit' => 'Edit Book', + 'books_edit_named' => 'Edit Book :bookName', + 'books_form_book_name' => 'Book Name', + 'books_save' => 'Save Book', + 'books_permissions' => 'Book Permissions', + 'books_permissions_updated' => 'Book Permissions Updated', + 'books_empty_contents' => 'No pages or chapters have been created for this book.', + 'books_empty_create_page' => 'Create a new page', + 'books_empty_sort_current_book' => 'Sort the current book', + 'books_empty_add_chapter' => 'Add a chapter', + 'books_permissions_active' => 'Book Permissions Active', + 'books_search_this' => 'Search this book', + 'books_navigation' => 'Book Navigation', + 'books_sort' => 'Sort Book Contents', + 'books_sort_desc' => 'Move chapters and pages within a book to reorganise its contents. Other books can be added which allows easy moving of chapters and pages between books.', + 'books_sort_named' => 'Sort Book :bookName', + 'books_sort_name' => 'Sort by Name', + 'books_sort_created' => 'Sort by Created Date', + 'books_sort_updated' => 'Sort by Updated Date', + 'books_sort_chapters_first' => 'Chapters First', + 'books_sort_chapters_last' => 'Chapters Last', + 'books_sort_show_other' => 'Show Other Books', + 'books_sort_save' => 'Save New Order', + 'books_sort_show_other_desc' => 'Add other books here to include them in the sort operation, and allow easy cross-book reorganisation.', + 'books_sort_move_up' => 'Move Up', + 'books_sort_move_down' => 'Move Down', + 'books_sort_move_prev_book' => 'Move to Previous Book', + 'books_sort_move_next_book' => 'Move to Next Book', + 'books_sort_move_prev_chapter' => 'Move Into Previous Chapter', + 'books_sort_move_next_chapter' => 'Move Into Next Chapter', + 'books_sort_move_book_start' => 'Move to Start of Book', + 'books_sort_move_book_end' => 'Move to End of Book', + 'books_sort_move_before_chapter' => 'Move to Before Chapter', + 'books_sort_move_after_chapter' => 'Move to After Chapter', + 'books_copy' => 'Copy Book', + 'books_copy_success' => 'Book successfully copied', + + // Chapters + 'chapter' => 'Chapter', + 'chapters' => 'Chapters', + 'x_chapters' => ':count Chapter|:count Chapters', + 'chapters_popular' => 'Popular Chapters', + 'chapters_new' => 'New Chapter', + 'chapters_create' => 'Create New Chapter', + 'chapters_delete' => 'Delete Chapter', + 'chapters_delete_named' => 'Delete Chapter :chapterName', + 'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages that exist within this chapter will also be deleted.', + 'chapters_delete_confirm' => 'Are you sure you want to delete this chapter?', + 'chapters_edit' => 'Edit Chapter', + 'chapters_edit_named' => 'Edit Chapter :chapterName', + 'chapters_save' => 'Save Chapter', + 'chapters_move' => 'Move Chapter', + 'chapters_move_named' => 'Move Chapter :chapterName', + 'chapters_copy' => 'Copy Chapter', + 'chapters_copy_success' => 'Chapter successfully copied', + 'chapters_permissions' => 'Chapter Permissions', + 'chapters_empty' => 'No pages are currently in this chapter.', + 'chapters_permissions_active' => 'Chapter Permissions Active', + 'chapters_permissions_success' => 'Chapter Permissions Updated', + 'chapters_search_this' => 'Search this chapter', + 'chapter_sort_book' => 'Sort Book', + + // Pages + 'page' => 'Page', + 'pages' => 'Pages', + 'x_pages' => ':count Page|:count Pages', + 'pages_popular' => 'Popular Pages', + 'pages_new' => 'New Page', + 'pages_attachments' => 'Attachments', + 'pages_navigation' => 'Page Navigation', + 'pages_delete' => 'Delete Page', + 'pages_delete_named' => 'Delete Page :pageName', + 'pages_delete_draft_named' => 'Delete Draft Page :pageName', + 'pages_delete_draft' => 'Delete Draft Page', + 'pages_delete_success' => 'Page deleted', + 'pages_delete_draft_success' => 'Draft page deleted', + 'pages_delete_confirm' => 'Are you sure you want to delete this page?', + 'pages_delete_draft_confirm' => 'Are you sure you want to delete this draft page?', + 'pages_editing_named' => 'Editing Page :pageName', + 'pages_edit_draft_options' => 'Draft Options', + 'pages_edit_save_draft' => 'Save Draft', + 'pages_edit_draft' => 'Edit Page Draft', + 'pages_editing_draft' => 'Editing Draft', + 'pages_editing_page' => 'Editing Page', + 'pages_edit_draft_save_at' => 'Draft saved at ', + 'pages_edit_delete_draft' => 'Delete Draft', + 'pages_edit_delete_draft_confirm' => 'Are you sure you want to delete your draft page changes? All of your changes, since the last full save, will be lost and the editor will be updated with the latest page non-draft save state.', + 'pages_edit_discard_draft' => 'Discard Draft', + 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', + 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', + 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', + 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', + 'pages_edit_set_changelog' => 'Set Changelog', + 'pages_edit_enter_changelog_desc' => 'Enter a brief description of the changes you\'ve made', + 'pages_edit_enter_changelog' => 'Enter Changelog', + 'pages_editor_switch_title' => 'Switch Editor', + 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', + 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', + 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', + 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', + 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', + 'pages_save' => 'Save Page', + 'pages_title' => 'Page Title', + 'pages_name' => 'Page Name', + 'pages_md_editor' => 'Editor', + 'pages_md_preview' => 'Preview', + 'pages_md_insert_image' => 'Insert Image', + 'pages_md_insert_link' => 'Insert Entity Link', + 'pages_md_insert_drawing' => 'Insert Drawing', + 'pages_md_show_preview' => 'Show preview', + 'pages_md_sync_scroll' => 'Sync preview scroll', + 'pages_drawing_unsaved' => 'Unsaved Drawing Found', + 'pages_drawing_unsaved_confirm' => 'Unsaved drawing data was found from a previous failed drawing save attempt. Would you like to restore and continue editing this unsaved drawing?', + 'pages_not_in_chapter' => 'Page is not in a chapter', + 'pages_move' => 'Move Page', + 'pages_copy' => 'Copy Page', + 'pages_copy_desination' => 'Copy Destination', + 'pages_copy_success' => 'Page successfully copied', + 'pages_permissions' => 'Page Permissions', + 'pages_permissions_success' => 'Page permissions updated', + 'pages_revision' => 'Revision', + 'pages_revisions' => 'Page Revisions', + 'pages_revisions_desc' => 'Listed below are all the past revisions of this page. You can look back upon, compare, and restore old page versions if permissions allow. The full history of the page may not be fully reflected here since, depending on system configuration, old revisions could be auto-deleted.', + 'pages_revisions_named' => 'Page Revisions for :pageName', + 'pages_revision_named' => 'Page Revision for :pageName', + 'pages_revision_restored_from' => 'Restored from #:id; :summary', + 'pages_revisions_created_by' => 'Created By', + 'pages_revisions_date' => 'Revision Date', + 'pages_revisions_number' => '#', + 'pages_revisions_sort_number' => 'Revision Number', + 'pages_revisions_numbered' => 'Revision #:id', + 'pages_revisions_numbered_changes' => 'Revision #:id Changes', + 'pages_revisions_editor' => 'Editor Type', + 'pages_revisions_changelog' => 'Changelog', + 'pages_revisions_changes' => 'Changes', + 'pages_revisions_current' => 'Current Version', + 'pages_revisions_preview' => 'Preview', + 'pages_revisions_restore' => 'Restore', + 'pages_revisions_none' => 'This page has no revisions', + 'pages_copy_link' => 'Copy Link', + 'pages_edit_content_link' => 'Jump to section in editor', + 'pages_pointer_enter_mode' => 'Enter section select mode', + 'pages_pointer_label' => 'Page Section Options', + 'pages_pointer_permalink' => 'Page Section Permalink', + 'pages_pointer_include_tag' => 'Page Section Include Tag', + 'pages_pointer_toggle_link' => 'Permalink mode, Press to show include tag', + 'pages_pointer_toggle_include' => 'Include tag mode, Press to show permalink', + 'pages_permissions_active' => 'Page Permissions Active', + 'pages_initial_revision' => 'Initial publish', + 'pages_references_update_revision' => 'System auto-update of internal links', + 'pages_initial_name' => 'New Page', + 'pages_editing_draft_notification' => 'You are currently editing a draft that was last saved :timeDiff.', + 'pages_draft_edited_notification' => 'This page has been updated by since that time. It is recommended that you discard this draft.', + 'pages_draft_page_changed_since_creation' => 'This page has been updated since this draft was created. It is recommended that you discard this draft or take care not to overwrite any page changes.', + 'pages_draft_edit_active' => [ + 'start_a' => ':count users have started editing this page', + 'start_b' => ':userName has started editing this page', + 'time_a' => 'since the page was last updated', + 'time_b' => 'in the last :minCount minutes', + 'message' => ':start :time. Take care not to overwrite each other\'s updates!', + ], + 'pages_draft_discarded' => 'Draft discarded! The editor has been updated with the current page content', + 'pages_draft_deleted' => 'Draft deleted! The editor has been updated with the current page content', + 'pages_specific' => 'Specific Page', + 'pages_is_template' => 'Page Template', + + // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', + 'page_tags' => 'Page Tags', + 'chapter_tags' => 'Chapter Tags', + 'book_tags' => 'Book Tags', + 'shelf_tags' => 'Shelf Tags', + 'tag' => 'Tag', + 'tags' => 'Tags', + 'tags_index_desc' => 'Tags can be applied to content within the system to apply a flexible form of categorization. Tags can have both a key and value, with the value being optional. Once applied, content can then be queried using the tag name and value.', + 'tag_name' => 'Tag Name', + 'tag_value' => 'Tag Value (Optional)', + 'tags_explain' => "Add some tags to better categorise your content. \n You can assign a value to a tag for more in-depth organisation.", + 'tags_add' => 'Add another tag', + 'tags_remove' => 'Remove this tag', + 'tags_usages' => 'Total tag usages', + 'tags_assigned_pages' => 'Assigned to Pages', + 'tags_assigned_chapters' => 'Assigned to Chapters', + 'tags_assigned_books' => 'Assigned to Books', + 'tags_assigned_shelves' => 'Assigned to Shelves', + 'tags_x_unique_values' => ':count unique values', + 'tags_all_values' => 'All values', + 'tags_view_tags' => 'View Tags', + 'tags_view_existing_tags' => 'View existing tags', + 'tags_list_empty_hint' => 'Tags can be assigned via the page editor sidebar or while editing the details of a book, chapter or shelf.', + 'attachments' => 'Attachments', + 'attachments_explain' => 'Upload some files or attach some links to display on your page. These are visible in the page sidebar.', + 'attachments_explain_instant_save' => 'Changes here are saved instantly.', + 'attachments_upload' => 'Upload File', + 'attachments_link' => 'Attach Link', + 'attachments_upload_drop' => 'Alternatively you can drag and drop a file here to upload it as an attachment.', + 'attachments_set_link' => 'Set Link', + 'attachments_delete' => 'Are you sure you want to delete this attachment?', + 'attachments_dropzone' => 'Drop files here to upload', + 'attachments_no_files' => 'No files have been uploaded', + 'attachments_explain_link' => 'You can attach a link if you\'d prefer not to upload a file. This can be a link to another page or a link to a file in the cloud.', + 'attachments_link_name' => 'Link Name', + 'attachment_link' => 'Attachment link', + 'attachments_link_url' => 'Link to file', + 'attachments_link_url_hint' => 'Url of site or file', + 'attach' => 'Attach', + 'attachments_insert_link' => 'Add Attachment Link to Page', + 'attachments_edit_file' => 'Edit File', + 'attachments_edit_file_name' => 'File Name', + 'attachments_edit_drop_upload' => 'Drop files or click here to upload and overwrite', + 'attachments_order_updated' => 'Attachment order updated', + 'attachments_updated_success' => 'Attachment details updated', + 'attachments_deleted' => 'Attachment deleted', + 'attachments_file_uploaded' => 'File successfully uploaded', + 'attachments_file_updated' => 'File successfully updated', + 'attachments_link_attached' => 'Link successfully attached to page', + 'templates' => 'Templates', + 'templates_set_as_template' => 'Page is a template', + 'templates_explain_set_as_template' => 'You can set this page as a template so its contents be utilized when creating other pages. Other users will be able to use this template if they have view permissions for this page.', + 'templates_replace_content' => 'Replace page content', + 'templates_append_content' => 'Append to page content', + 'templates_prepend_content' => 'Prepend to page content', + + // Profile View + 'profile_user_for_x' => 'User for :time', + 'profile_created_content' => 'Created Content', + 'profile_not_created_pages' => ':userName has not created any pages', + 'profile_not_created_chapters' => ':userName has not created any chapters', + 'profile_not_created_books' => ':userName has not created any books', + 'profile_not_created_shelves' => ':userName has not created any shelves', + + // Comments + 'comment' => 'Comment', + 'comments' => 'Comments', + 'comment_add' => 'Add Comment', + 'comment_placeholder' => 'Leave a comment here', + 'comment_count' => '{0} No Comments|{1} 1 Comment|[2,*] :count Comments', + 'comment_save' => 'Save Comment', + 'comment_new' => 'New Comment', + 'comment_created' => 'commented :createDiff', + 'comment_updated' => 'Updated :updateDiff by :username', + 'comment_updated_indicator' => 'Updated', + 'comment_deleted_success' => 'Comment deleted', + 'comment_created_success' => 'Comment added', + 'comment_updated_success' => 'Comment updated', + 'comment_delete_confirm' => 'Are you sure you want to delete this comment?', + 'comment_in_reply_to' => 'In reply to :commentId', + 'comment_editor_explain' => 'Here are the comments that have been left on this page. Comments can be added & managed when viewing the saved page.', + + // Revision + 'revision_delete_confirm' => 'Are you sure you want to delete this revision?', + 'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.', + 'revision_cannot_delete_latest' => 'Cannot delete the latest revision.', + + // Copy view + 'copy_consider' => 'Please consider the below when copying content.', + 'copy_consider_permissions' => 'Custom permission settings will not be copied.', + 'copy_consider_owner' => 'You will become the owner of all copied content.', + 'copy_consider_images' => 'Page image files will not be duplicated & the original images will retain their relation to the page they were originally uploaded to.', + 'copy_consider_attachments' => 'Page attachments will not be copied.', + 'copy_consider_access' => 'A change of location, owner or permissions may result in this content being accessible to those previously without access.', + + // Conversions + 'convert_to_shelf' => 'Convert to Shelf', + 'convert_to_shelf_contents_desc' => 'You can convert this book to a new shelf with the same contents. Chapters contained within this book will be converted to new books. If this book contains any pages, that are not in a chapter, this book will be renamed and contain such pages, and this book will become part of the new shelf.', + 'convert_to_shelf_permissions_desc' => 'Any permissions set on this book will be copied to the new shelf and to all new child books that don\'t have their own permissions enforced. Note that permissions on shelves do not auto-cascade to content within, as they do for books.', + 'convert_book' => 'Convert Book', + 'convert_book_confirm' => 'Are you sure you want to convert this book?', + 'convert_undo_warning' => 'This cannot be as easily undone.', + 'convert_to_book' => 'Convert to Book', + 'convert_to_book_desc' => 'You can convert this chapter to a new book with the same contents. Any permissions set on this chapter will be copied to the new book but any inherited permissions, from the parent book, will not be copied which could lead to a change of access control.', + 'convert_chapter' => 'Convert Chapter', + 'convert_chapter_confirm' => 'Are you sure you want to convert this chapter?', + + // References + 'references' => 'References', + 'references_none' => 'There are no tracked references to this item.', + 'references_to_desc' => 'Shown below are all the known pages in the system that link to this item.', + + // Watch Options + 'watch' => 'Watch', + 'watch_title_default' => 'Default Preferences', + 'watch_desc_default' => 'Revert watching to just your default notification preferences.', + 'watch_title_ignore' => 'Ignore', + 'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.', + 'watch_title_new' => 'New Pages', + 'watch_desc_new' => 'Notify when any new page is created within this item.', + 'watch_title_updates' => 'All Page Updates', + 'watch_desc_updates' => 'Notify upon all new pages and page changes.', + 'watch_desc_updates_page' => 'Notify upon all page changes.', + 'watch_title_comments' => 'All Page Updates & Comments', + 'watch_desc_comments' => 'Notify upon all new pages, page changes and new comments.', + 'watch_desc_comments_page' => 'Notify upon page changes and new comments.', + 'watch_change_default' => 'Change default notification preferences', + 'watch_detail_ignore' => 'Ignoring notifications', + 'watch_detail_new' => 'Watching for new pages', + 'watch_detail_updates' => 'Watching new pages and updates', + 'watch_detail_comments' => 'Watching new pages, updates & comments', + 'watch_detail_parent_book' => 'Watching via parent book', + 'watch_detail_parent_book_ignore' => 'Ignoring via parent book', + 'watch_detail_parent_chapter' => 'Watching via parent chapter', + 'watch_detail_parent_chapter_ignore' => 'Ignoring via parent chapter', +]; diff --git a/lang/sq/errors.php b/lang/sq/errors.php new file mode 100644 index 00000000000..8813cf90a2d --- /dev/null +++ b/lang/sq/errors.php @@ -0,0 +1,120 @@ + 'You do not have permission to access the requested page.', + 'permissionJson' => 'You do not have permission to perform the requested action.', + + // Auth + 'error_user_exists_different_creds' => 'A user with the email :email already exists but with different credentials.', + 'email_already_confirmed' => 'Email has already been confirmed, Try logging in.', + 'email_confirmation_invalid' => 'This confirmation token is not valid or has already been used, Please try registering again.', + 'email_confirmation_expired' => 'The confirmation token has expired, A new confirmation email has been sent.', + 'email_confirmation_awaiting' => 'The email address for the account in use needs to be confirmed', + 'ldap_fail_anonymous' => 'LDAP access failed using anonymous bind', + 'ldap_fail_authed' => 'LDAP access failed using given dn & password details', + 'ldap_extension_not_installed' => 'LDAP PHP extension not installed', + 'ldap_cannot_connect' => 'Cannot connect to ldap server, Initial connection failed', + 'saml_already_logged_in' => 'Already logged in', + 'saml_user_not_registered' => 'The user :name is not registered and automatic registration is disabled', + 'saml_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system', + 'saml_invalid_response_id' => 'The request from the external authentication system is not recognised by a process started by this application. Navigating back after a login could cause this issue.', + 'saml_fail_authed' => 'Login using :system failed, system did not provide successful authorization', + 'oidc_already_logged_in' => 'Already logged in', + 'oidc_user_not_registered' => 'The user :name is not registered and automatic registration is disabled', + 'oidc_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system', + 'oidc_fail_authed' => 'Login using :system failed, system did not provide successful authorization', + 'social_no_action_defined' => 'No action defined', + 'social_login_bad_response' => "Error received during :socialAccount login: \n:error", + 'social_account_in_use' => 'This :socialAccount account is already in use, Try logging in via the :socialAccount option.', + 'social_account_email_in_use' => 'The email :email is already in use. If you already have an account you can connect your :socialAccount account from your profile settings.', + 'social_account_existing' => 'This :socialAccount is already attached to your profile.', + 'social_account_already_used_existing' => 'This :socialAccount account is already used by another user.', + 'social_account_not_used' => 'This :socialAccount account is not linked to any users. Please attach it in your profile settings. ', + 'social_account_register_instructions' => 'If you do not yet have an account, You can register an account using the :socialAccount option.', + 'social_driver_not_found' => 'Social driver not found', + 'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.', + 'invite_token_expired' => 'This invitation link has expired. You can instead try to reset your account password.', + + // System + 'path_not_writable' => 'File path :filePath could not be uploaded to. Ensure it is writable to the server.', + 'cannot_get_image_from_url' => 'Cannot get image from :url', + 'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.', + 'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', + 'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.', + + // Drawing & Images + 'image_upload_error' => 'An error occurred uploading the image', + 'image_upload_type_error' => 'The image type being uploaded is invalid', + 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', + 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', + + // Attachments + 'attachment_not_found' => 'Attachment not found', + 'attachment_upload_error' => 'An error occurred uploading the attachment file', + + // Pages + 'page_draft_autosave_fail' => 'Failed to save draft. Ensure you have internet connection before saving this page', + 'page_draft_delete_fail' => 'Failed to delete page draft and fetch current page saved content', + 'page_custom_home_deletion' => 'Cannot delete a page while it is set as a homepage', + + // Entities + 'entity_not_found' => 'Entity not found', + 'bookshelf_not_found' => 'Shelf not found', + 'book_not_found' => 'Book not found', + 'page_not_found' => 'Page not found', + 'chapter_not_found' => 'Chapter not found', + 'selected_book_not_found' => 'The selected book was not found', + 'selected_book_chapter_not_found' => 'The selected Book or Chapter was not found', + 'guests_cannot_save_drafts' => 'Guests cannot save drafts', + + // Users + 'users_cannot_delete_only_admin' => 'You cannot delete the only admin', + 'users_cannot_delete_guest' => 'You cannot delete the guest user', + + // Roles + 'role_cannot_be_edited' => 'This role cannot be edited', + 'role_system_cannot_be_deleted' => 'This role is a system role and cannot be deleted', + 'role_registration_default_cannot_delete' => 'This role cannot be deleted while set as the default registration role', + 'role_cannot_remove_only_admin' => 'This user is the only user assigned to the administrator role. Assign the administrator role to another user before attempting to remove it here.', + + // Comments + 'comment_list' => 'An error occurred while fetching the comments.', + 'cannot_add_comment_to_draft' => 'You cannot add comments to a draft.', + 'comment_add' => 'An error occurred while adding / updating the comment.', + 'comment_delete' => 'An error occurred while deleting the comment.', + 'empty_comment' => 'Cannot add an empty comment.', + + // Error pages + '404_page_not_found' => 'Page Not Found', + 'sorry_page_not_found' => 'Sorry, The page you were looking for could not be found.', + 'sorry_page_not_found_permission_warning' => 'If you expected this page to exist, you might not have permission to view it.', + 'image_not_found' => 'Image Not Found', + 'image_not_found_subtitle' => 'Sorry, The image file you were looking for could not be found.', + 'image_not_found_details' => 'If you expected this image to exist it might have been deleted.', + 'return_home' => 'Return to home', + 'error_occurred' => 'An Error Occurred', + 'app_down' => ':appName is down right now', + 'back_soon' => 'It will be back up soon.', + + // API errors + 'api_no_authorization_found' => 'No authorization token found on the request', + 'api_bad_authorization_format' => 'An authorization token was found on the request but the format appeared incorrect', + 'api_user_token_not_found' => 'No matching API token was found for the provided authorization token', + 'api_incorrect_token_secret' => 'The secret provided for the given used API token is incorrect', + 'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls', + 'api_user_token_expired' => 'The authorization token used has expired', + + // Settings & Maintenance + 'maintenance_test_email_failure' => 'Error thrown when sending a test email:', + + // HTTP errors + 'http_ssr_url_no_match' => 'The URL does not match the configured allowed SSR hosts', +]; diff --git a/lang/sq/notifications.php b/lang/sq/notifications.php new file mode 100644 index 00000000000..5539ae9a9d8 --- /dev/null +++ b/lang/sq/notifications.php @@ -0,0 +1,26 @@ + 'New comment on page: :pageName', + 'new_comment_intro' => 'A user has commented on a page in :appName:', + 'new_page_subject' => 'New page: :pageName', + 'new_page_intro' => 'A new page has been created in :appName:', + 'updated_page_subject' => 'Updated page: :pageName', + 'updated_page_intro' => 'A page has been updated in :appName:', + 'updated_page_debounce' => 'To prevent a mass of notifications, for a while you won\'t be sent notifications for further edits to this page by the same editor.', + + 'detail_page_name' => 'Page Name:', + 'detail_commenter' => 'Commenter:', + 'detail_comment' => 'Comment:', + 'detail_created_by' => 'Created By:', + 'detail_updated_by' => 'Updated By:', + + 'action_view_comment' => 'View Comment', + 'action_view_page' => 'View Page', + + 'footer_reason' => 'This notification was sent to you because :link cover this type of activity for this item.', + 'footer_reason_link' => 'your notification preferences', +]; diff --git a/lang/sq/pagination.php b/lang/sq/pagination.php new file mode 100644 index 00000000000..85bd12fc319 --- /dev/null +++ b/lang/sq/pagination.php @@ -0,0 +1,12 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/sq/passwords.php b/lang/sq/passwords.php new file mode 100644 index 00000000000..b408f3c2fda --- /dev/null +++ b/lang/sq/passwords.php @@ -0,0 +1,15 @@ + 'Passwords must be at least eight characters and match the confirmation.', + 'user' => "We can't find a user with that e-mail address.", + 'token' => 'The password reset token is invalid for this email address.', + 'sent' => 'We have e-mailed your password reset link!', + 'reset' => 'Your password has been reset!', + +]; diff --git a/lang/sq/preferences.php b/lang/sq/preferences.php new file mode 100644 index 00000000000..2b88f9671ff --- /dev/null +++ b/lang/sq/preferences.php @@ -0,0 +1,51 @@ + 'My Account', + + 'shortcuts' => 'Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', + 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', + 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', + 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', + 'shortcuts_section_navigation' => 'Navigation', + 'shortcuts_section_actions' => 'Common Actions', + 'shortcuts_save' => 'Save Shortcuts', + 'shortcuts_overlay_desc' => 'Note: When shortcuts are enabled a helper overlay is available via pressing "?" which will highlight the available shortcuts for actions currently visible on the screen.', + 'shortcuts_update_success' => 'Shortcut preferences have been updated!', + 'shortcuts_overview_desc' => 'Manage keyboard shortcuts you can use to navigate the system user interface.', + + 'notifications' => 'Notification Preferences', + 'notifications_desc' => 'Control the email notifications you receive when certain activity is performed within the system.', + 'notifications_opt_own_page_changes' => 'Notify upon changes to pages I own', + 'notifications_opt_own_page_comments' => 'Notify upon comments on pages I own', + 'notifications_opt_comment_replies' => 'Notify upon replies to my comments', + 'notifications_save' => 'Save Preferences', + 'notifications_update_success' => 'Notification preferences have been updated!', + 'notifications_watched' => 'Watched & Ignored Items', + 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', + + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', +]; diff --git a/lang/sq/settings.php b/lang/sq/settings.php new file mode 100644 index 00000000000..c5ca662c37d --- /dev/null +++ b/lang/sq/settings.php @@ -0,0 +1,328 @@ + 'Settings', + 'settings_save' => 'Save Settings', + 'system_version' => 'System Version', + 'categories' => 'Categories', + + // App Settings + 'app_customization' => 'Customization', + 'app_features_security' => 'Features & Security', + 'app_name' => 'Application Name', + 'app_name_desc' => 'This name is shown in the header and in any system-sent emails.', + 'app_name_header' => 'Show name in header', + 'app_public_access' => 'Public Access', + 'app_public_access_desc' => 'Enabling this option will allow visitors, that are not logged-in, to access content in your BookStack instance.', + 'app_public_access_desc_guest' => 'Access for public visitors can be controlled through the "Guest" user.', + 'app_public_access_toggle' => 'Allow public access', + 'app_public_viewing' => 'Allow public viewing?', + 'app_secure_images' => 'Higher Security Image Uploads', + 'app_secure_images_toggle' => 'Enable higher security image uploads', + 'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.', + 'app_default_editor' => 'Default Page Editor', + 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', + 'app_custom_html' => 'Custom HTML Head Content', + 'app_custom_html_desc' => 'Any content added here will be inserted into the bottom of the section of every page. This is handy for overriding styles or adding analytics code.', + 'app_custom_html_disabled_notice' => 'Custom HTML head content is disabled on this settings page to ensure any breaking changes can be reverted.', + 'app_logo' => 'Application Logo', + 'app_logo_desc' => 'This is used in the application header bar, among other areas. This image should be 86px in height. Large images will be scaled down.', + 'app_icon' => 'Application Icon', + 'app_icon_desc' => 'This icon is used for browser tabs and shortcut icons. This should be a 256px square PNG image.', + 'app_homepage' => 'Application Homepage', + 'app_homepage_desc' => 'Select a view to show on the homepage instead of the default view. Page permissions are ignored for selected pages.', + 'app_homepage_select' => 'Select a page', + 'app_footer_links' => 'Footer Links', + 'app_footer_links_desc' => 'Add links to show within the site footer. These will be displayed at the bottom of most pages, including those that do not require login. You can use a label of "trans::" to use system-defined translations. For example: Using "trans::common.privacy_policy" will provide the translated text "Privacy Policy" and "trans::common.terms_of_service" will provide the translated text "Terms of Service".', + 'app_footer_links_label' => 'Link Label', + 'app_footer_links_url' => 'Link URL', + 'app_footer_links_add' => 'Add Footer Link', + 'app_disable_comments' => 'Disable Comments', + 'app_disable_comments_toggle' => 'Disable comments', + 'app_disable_comments_desc' => 'Disables comments across all pages in the application.
Existing comments are not shown.', + + // Color settings + 'color_scheme' => 'Application Color Scheme', + 'color_scheme_desc' => 'Set the colors to use in the application user interface. Colors can be configured separately for dark and light modes to best fit the theme and ensure legibility.', + 'ui_colors_desc' => 'Set the application primary color and default link color. The primary color is mainly used for the header banner, buttons and interface decorations. The default link color is used for text-based links and actions, both within written content and in the application interface.', + 'app_color' => 'Primary Color', + 'link_color' => 'Default Link Color', + 'content_colors_desc' => 'Set colors for all elements in the page organisation hierarchy. Choosing colors with a similar brightness to the default colors is recommended for readability.', + 'bookshelf_color' => 'Shelf Color', + 'book_color' => 'Book Color', + 'chapter_color' => 'Chapter Color', + 'page_color' => 'Page Color', + 'page_draft_color' => 'Page Draft Color', + + // Registration Settings + 'reg_settings' => 'Registration', + 'reg_enable' => 'Enable Registration', + 'reg_enable_toggle' => 'Enable registration', + 'reg_enable_desc' => 'When registration is enabled user will be able to sign themselves up as an application user. Upon registration they are given a single, default user role.', + 'reg_default_role' => 'Default user role after registration', + 'reg_enable_external_warning' => 'The option above is ignored while external LDAP or SAML authentication is active. User accounts for non-existing members will be auto-created if authentication, against the external system in use, is successful.', + 'reg_email_confirmation' => 'Email Confirmation', + 'reg_email_confirmation_toggle' => 'Require email confirmation', + 'reg_confirm_email_desc' => 'If domain restriction is used then email confirmation will be required and this option will be ignored.', + 'reg_confirm_restrict_domain' => 'Domain Restriction', + 'reg_confirm_restrict_domain_desc' => 'Enter a comma separated list of email domains you would like to restrict registration to. Users will be sent an email to confirm their address before being allowed to interact with the application.
Note that users will be able to change their email addresses after successful registration.', + 'reg_confirm_restrict_domain_placeholder' => 'No restriction set', + + // Maintenance settings + 'maint' => 'Maintenance', + 'maint_image_cleanup' => 'Cleanup Images', + 'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.', + 'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions', + 'maint_image_cleanup_run' => 'Run Cleanup', + 'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?', + 'maint_image_cleanup_success' => ':count potentially unused images found and deleted!', + 'maint_image_cleanup_nothing_found' => 'No unused images found, Nothing deleted!', + 'maint_send_test_email' => 'Send a Test Email', + 'maint_send_test_email_desc' => 'This sends a test email to your email address specified in your profile.', + 'maint_send_test_email_run' => 'Send test email', + 'maint_send_test_email_success' => 'Email sent to :address', + 'maint_send_test_email_mail_subject' => 'Test Email', + 'maint_send_test_email_mail_greeting' => 'Email delivery seems to work!', + 'maint_send_test_email_mail_text' => 'Congratulations! As you received this email notification, your email settings seem to be configured properly.', + 'maint_recycle_bin_desc' => 'Deleted shelves, books, chapters & pages are sent to the recycle bin so they can be restored or permanently deleted. Older items in the recycle bin may be automatically removed after a while depending on system configuration.', + 'maint_recycle_bin_open' => 'Open Recycle Bin', + 'maint_regen_references' => 'Regenerate References', + 'maint_regen_references_desc' => 'This action will rebuild the cross-item reference index within the database. This is usually handled automatically but this action can be useful to index old content or content added via unofficial methods.', + 'maint_regen_references_success' => 'Reference index has been regenerated!', + 'maint_timeout_command_note' => 'Note: This action can take time to run, which can lead to timeout issues in some web environments. As an alternative, this action be performed using a terminal command.', + + // Recycle Bin + 'recycle_bin' => 'Recycle Bin', + 'recycle_bin_desc' => 'Here you can restore items that have been deleted or choose to permanently remove them from the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.', + 'recycle_bin_deleted_item' => 'Deleted Item', + 'recycle_bin_deleted_parent' => 'Parent', + 'recycle_bin_deleted_by' => 'Deleted By', + 'recycle_bin_deleted_at' => 'Deletion Time', + 'recycle_bin_permanently_delete' => 'Permanently Delete', + 'recycle_bin_restore' => 'Restore', + 'recycle_bin_contents_empty' => 'The recycle bin is currently empty', + 'recycle_bin_empty' => 'Empty Recycle Bin', + 'recycle_bin_empty_confirm' => 'This will permanently destroy all items in the recycle bin including content contained within each item. Are you sure you want to empty the recycle bin?', + 'recycle_bin_destroy_confirm' => 'This action will permanently delete this item, along with any child elements listed below, from the system and you will not be able to restore this content. Are you sure you want to permanently delete this item?', + 'recycle_bin_destroy_list' => 'Items to be Destroyed', + 'recycle_bin_restore_list' => 'Items to be Restored', + 'recycle_bin_restore_confirm' => 'This action will restore the deleted item, including any child elements, to their original location. If the original location has since been deleted, and is now in the recycle bin, the parent item will also need to be restored.', + 'recycle_bin_restore_deleted_parent' => 'The parent of this item has also been deleted. These will remain deleted until that parent is also restored.', + 'recycle_bin_restore_parent' => 'Restore Parent', + 'recycle_bin_destroy_notification' => 'Deleted :count total items from the recycle bin.', + 'recycle_bin_restore_notification' => 'Restored :count total items from the recycle bin.', + + // Audit Log + 'audit' => 'Audit Log', + 'audit_desc' => 'This audit log displays a list of activities tracked in the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.', + 'audit_event_filter' => 'Event Filter', + 'audit_event_filter_no_filter' => 'No Filter', + 'audit_deleted_item' => 'Deleted Item', + 'audit_deleted_item_name' => 'Name: :name', + 'audit_table_user' => 'User', + 'audit_table_event' => 'Event', + 'audit_table_related' => 'Related Item or Detail', + 'audit_table_ip' => 'IP Address', + 'audit_table_date' => 'Activity Date', + 'audit_date_from' => 'Date Range From', + 'audit_date_to' => 'Date Range To', + + // Role Settings + 'roles' => 'Roles', + 'role_user_roles' => 'User Roles', + 'roles_index_desc' => 'Roles are used to group users & provide system permission to their members. When a user is a member of multiple roles the privileges granted will stack and the user will inherit all abilities.', + 'roles_x_users_assigned' => ':count user assigned|:count users assigned', + 'roles_x_permissions_provided' => ':count permission|:count permissions', + 'roles_assigned_users' => 'Assigned Users', + 'roles_permissions_provided' => 'Provided Permissions', + 'role_create' => 'Create New Role', + 'role_delete' => 'Delete Role', + 'role_delete_confirm' => 'This will delete the role with the name \':roleName\'.', + 'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.', + 'role_delete_no_migration' => "Don't migrate users", + 'role_delete_sure' => 'Are you sure you want to delete this role?', + 'role_edit' => 'Edit Role', + 'role_details' => 'Role Details', + 'role_name' => 'Role Name', + 'role_desc' => 'Short Description of Role', + 'role_mfa_enforced' => 'Requires Multi-Factor Authentication', + 'role_external_auth_id' => 'External Authentication IDs', + 'role_system' => 'System Permissions', + 'role_manage_users' => 'Manage users', + 'role_manage_roles' => 'Manage roles & role permissions', + 'role_manage_entity_permissions' => 'Manage all book, chapter & page permissions', + 'role_manage_own_entity_permissions' => 'Manage permissions on own book, chapter & pages', + 'role_manage_page_templates' => 'Manage page templates', + 'role_access_api' => 'Access system API', + 'role_manage_settings' => 'Manage app settings', + 'role_export_content' => 'Export content', + 'role_editor_change' => 'Change page editor', + 'role_notifications' => 'Receive & manage notifications', + 'role_asset' => 'Asset Permissions', + 'roles_system_warning' => 'Be aware that access to any of the above three permissions can allow a user to alter their own privileges or the privileges of others in the system. Only assign roles with these permissions to trusted users.', + 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', + 'role_asset_admins' => 'Admins are automatically given access to all content but these options may show or hide UI options.', + 'role_asset_image_view_note' => 'This relates to visibility within the image manager. Actual access of uploaded image files will be dependant upon system image storage option.', + 'role_all' => 'All', + 'role_own' => 'Own', + 'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to', + 'role_save' => 'Save Role', + 'role_users' => 'Users in this role', + 'role_users_none' => 'No users are currently assigned to this role', + + // Users + 'users' => 'Users', + 'users_index_desc' => 'Create & manage individual user accounts within the system. User accounts are used for login and attribution of content & activity. Access permissions are primarily role-based but user content ownership, among other factors, may also affect permissions & access.', + 'user_profile' => 'User Profile', + 'users_add_new' => 'Add New User', + 'users_search' => 'Search Users', + 'users_latest_activity' => 'Latest Activity', + 'users_details' => 'User Details', + 'users_details_desc' => 'Set a display name and an email address for this user. The email address will be used for logging into the application.', + 'users_details_desc_no_email' => 'Set a display name for this user so others can recognise them.', + 'users_role' => 'User Roles', + 'users_role_desc' => 'Select which roles this user will be assigned to. If a user is assigned to multiple roles the permissions from those roles will stack and they will receive all abilities of the assigned roles.', + 'users_password' => 'User Password', + 'users_password_desc' => 'Set a password used to log-in to the application. This must be at least 8 characters long.', + 'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.', + 'users_send_invite_option' => 'Send user invite email', + 'users_external_auth_id' => 'External Authentication ID', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', + 'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.', + 'users_delete' => 'Delete User', + 'users_delete_named' => 'Delete user :userName', + 'users_delete_warning' => 'This will fully delete this user with the name \':userName\' from the system.', + 'users_delete_confirm' => 'Are you sure you want to delete this user?', + 'users_migrate_ownership' => 'Migrate Ownership', + 'users_migrate_ownership_desc' => 'Select a user here if you want another user to become the owner of all items currently owned by this user.', + 'users_none_selected' => 'No user selected', + 'users_edit' => 'Edit User', + 'users_edit_profile' => 'Edit Profile', + 'users_avatar' => 'User Avatar', + 'users_avatar_desc' => 'Select an image to represent this user. This should be approx 256px square.', + 'users_preferred_language' => 'Preferred Language', + 'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.', + 'users_social_accounts' => 'Social Accounts', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', + 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not revoke previously authorized access. Revoke access from your profile settings on the connected social account.', + 'users_social_connect' => 'Connect Account', + 'users_social_disconnect' => 'Disconnect Account', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', + 'users_social_connected' => ':socialAccount account was successfully attached to your profile.', + 'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.', + 'users_api_tokens' => 'API Tokens', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', + 'users_api_tokens_none' => 'No API tokens have been created for this user', + 'users_api_tokens_create' => 'Create Token', + 'users_api_tokens_expires' => 'Expires', + 'users_api_tokens_docs' => 'API Documentation', + 'users_mfa' => 'Multi-Factor Authentication', + 'users_mfa_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', + 'users_mfa_x_methods' => ':count method configured|:count methods configured', + 'users_mfa_configure' => 'Configure Methods', + + // API Tokens + 'user_api_token_create' => 'Create API Token', + 'user_api_token_name' => 'Name', + 'user_api_token_name_desc' => 'Give your token a readable name as a future reminder of its intended purpose.', + 'user_api_token_expiry' => 'Expiry Date', + 'user_api_token_expiry_desc' => 'Set a date at which this token expires. After this date, requests made using this token will no longer work. Leaving this field blank will set an expiry 100 years into the future.', + 'user_api_token_create_secret_message' => 'Immediately after creating this token a "Token ID" & "Token Secret" will be generated and displayed. The secret will only be shown a single time so be sure to copy the value to somewhere safe and secure before proceeding.', + 'user_api_token' => 'API Token', + 'user_api_token_id' => 'Token ID', + 'user_api_token_id_desc' => 'This is a non-editable system generated identifier for this token which will need to be provided in API requests.', + 'user_api_token_secret' => 'Token Secret', + 'user_api_token_secret_desc' => 'This is a system generated secret for this token which will need to be provided in API requests. This will only be displayed this one time so copy this value to somewhere safe and secure.', + 'user_api_token_created' => 'Token created :timeAgo', + 'user_api_token_updated' => 'Token updated :timeAgo', + 'user_api_token_delete' => 'Delete Token', + 'user_api_token_delete_warning' => 'This will fully delete this API token with the name \':tokenName\' from the system.', + 'user_api_token_delete_confirm' => 'Are you sure you want to delete this API token?', + + // Webhooks + 'webhooks' => 'Webhooks', + 'webhooks_index_desc' => 'Webhooks are a way to send data to external URLs when certain actions and events occur within the system which allows event-based integration with external platforms such as messaging or notification systems.', + 'webhooks_x_trigger_events' => ':count trigger event|:count trigger events', + 'webhooks_create' => 'Create New Webhook', + 'webhooks_none_created' => 'No webhooks have yet been created.', + 'webhooks_edit' => 'Edit Webhook', + 'webhooks_save' => 'Save Webhook', + 'webhooks_details' => 'Webhook Details', + 'webhooks_details_desc' => 'Provide a user friendly name and a POST endpoint as a location for the webhook data to be sent to.', + 'webhooks_events' => 'Webhook Events', + 'webhooks_events_desc' => 'Select all the events that should trigger this webhook to be called.', + 'webhooks_events_warning' => 'Keep in mind that these events will be triggered for all selected events, even if custom permissions are applied. Ensure that use of this webhook won\'t expose confidential content.', + 'webhooks_events_all' => 'All system events', + 'webhooks_name' => 'Webhook Name', + 'webhooks_timeout' => 'Webhook Request Timeout (Seconds)', + 'webhooks_endpoint' => 'Webhook Endpoint', + 'webhooks_active' => 'Webhook Active', + 'webhook_events_table_header' => 'Events', + 'webhooks_delete' => 'Delete Webhook', + 'webhooks_delete_warning' => 'This will fully delete this webhook, with the name \':webhookName\', from the system.', + 'webhooks_delete_confirm' => 'Are you sure you want to delete this webhook?', + 'webhooks_format_example' => 'Webhook Format Example', + 'webhooks_format_example_desc' => 'Webhook data is sent as a POST request to the configured endpoint as JSON following the format below. The "related_item" and "url" properties are optional and will depend on the type of event triggered.', + 'webhooks_status' => 'Webhook Status', + 'webhooks_last_called' => 'Last Called:', + 'webhooks_last_errored' => 'Last Errored:', + 'webhooks_last_error_message' => 'Last Error Message:', + + + //! If editing translations files directly please ignore this in all + //! languages apart from en. Content will be auto-copied from en. + //!//////////////////////////////// + 'language_select' => [ + 'en' => 'English', + 'ar' => 'العربية', + 'bg' => 'Bǎlgarski', + 'bs' => 'Bosanski', + 'ca' => 'Català', + 'cs' => 'Česky', + 'da' => 'Dansk', + 'de' => 'Deutsch (Sie)', + 'de_informal' => 'Deutsch (Du)', + 'el' => 'ελληνικά', + 'es' => 'Español', + 'es_AR' => 'Español Argentina', + 'et' => 'Eesti keel', + 'eu' => 'Euskara', + 'fa' => 'فارسی', + 'fr' => 'Français', + 'he' => 'עברית', + 'hr' => 'Hrvatski', + 'hu' => 'Magyar', + 'id' => 'Bahasa Indonesia', + 'it' => 'Italian', + 'ja' => '日本語', + 'ko' => '한국어', + 'lt' => 'Lietuvių Kalba', + 'lv' => 'Latviešu Valoda', + 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', + 'pl' => 'Polski', + 'pt' => 'Português', + 'pt_BR' => 'Português do Brasil', + 'ro' => 'Română', + 'ru' => 'Русский', + 'sk' => 'Slovensky', + 'sl' => 'Slovenščina', + 'sv' => 'Svenska', + 'tr' => 'Türkçe', + 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', + 'vi' => 'Tiếng Việt', + 'zh_CN' => '简体中文', + 'zh_TW' => '繁體中文', + ], + //!//////////////////////////////// +]; diff --git a/lang/sq/validation.php b/lang/sq/validation.php new file mode 100644 index 00000000000..2a676c7c4cc --- /dev/null +++ b/lang/sq/validation.php @@ -0,0 +1,117 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'backup_codes' => 'The provided code is not valid or has already been used.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values', + 'file' => 'The :attribute must be provided as a valid file.', + 'filled' => 'The :attribute field is required.', + 'gt' => [ + 'numeric' => 'The :attribute must be greater than :value.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'string' => 'The :attribute must be greater than :value characters.', + 'array' => 'The :attribute must have more than :value items.', + ], + 'gte' => [ + 'numeric' => 'The :attribute must be greater than or equal :value.', + 'file' => 'The :attribute must be greater than or equal :value kilobytes.', + 'string' => 'The :attribute must be greater than or equal :value characters.', + 'array' => 'The :attribute must have :value items or more.', + ], + 'exists' => 'The selected :attribute is invalid.', + 'image' => 'The :attribute must be an image.', + 'image_extension' => 'The :attribute must have a valid & supported image extension.', + 'in' => 'The selected :attribute is invalid.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'numeric' => 'The :attribute must be less than :value.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'string' => 'The :attribute must be less than :value characters.', + 'array' => 'The :attribute must have less than :value items.', + ], + 'lte' => [ + 'numeric' => 'The :attribute must be less than or equal :value.', + 'file' => 'The :attribute must be less than or equal :value kilobytes.', + 'string' => 'The :attribute must be less than or equal :value characters.', + 'array' => 'The :attribute must not have more than :value items.', + ], + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'safe_url' => 'The provided link may not be safe.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'totp' => 'The provided code is not valid or has expired.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + 'uploaded' => 'The file could not be uploaded. The server may not accept files of this size.', + + // Custom validation lines + 'custom' => [ + 'password-confirm' => [ + 'required_with' => 'Password confirmation required', + ], + ], + + // Custom validation attributes + 'attributes' => [], +]; diff --git a/lang/sv/activities.php b/lang/sv/activities.php index 46a2f4f3cb5..d90a5f08262 100644 --- a/lang/sv/activities.php +++ b/lang/sv/activities.php @@ -15,7 +15,7 @@ 'page_restore' => 'återställde sidan', 'page_restore_notification' => 'Sidan har återställts', 'page_move' => 'flyttade sidan', - 'page_move_notification' => 'Page successfully moved', + 'page_move_notification' => 'Sidan har flyttats', // Chapters 'chapter_create' => 'skapade kapitlet', @@ -25,7 +25,7 @@ 'chapter_delete' => 'tog bort kapitlet', 'chapter_delete_notification' => 'Kapitlet har tagits bort', 'chapter_move' => 'flyttade kapitlet', - 'chapter_move_notification' => 'Chapter successfully moved', + 'chapter_move_notification' => 'Kapitlet har flyttats', // Books 'book_create' => 'skapade boken', @@ -50,19 +50,19 @@ 'bookshelf_delete_notification' => 'Hyllan har tagits bort', // Revisions - 'revision_restore' => 'restored revision', - 'revision_delete' => 'deleted revision', - 'revision_delete_notification' => 'Revision successfully deleted', + 'revision_restore' => 'återställde version', + 'revision_delete' => 'tog bort version', + 'revision_delete_notification' => 'Versionen har tagits bort', // Favourites 'favourite_add_notification' => '":name" har lagts till i dina favoriter', 'favourite_remove_notification' => '":name" har tagits bort från dina favoriter', // Watching - 'watch_update_level_notification' => 'Watch preferences successfully updated', + 'watch_update_level_notification' => 'Inställningarna för bevakning har uppdaterats', // Auth - 'auth_login' => 'logged in', + 'auth_login' => 'loggade in', 'auth_register' => 'registrerad som ny användare', 'auth_password_reset_request' => 'requested user password reset', 'auth_password_reset_update' => 'reset user password', diff --git a/lang/sv/common.php b/lang/sv/common.php index 35ba4326a84..33437eaa90e 100644 --- a/lang/sv/common.php +++ b/lang/sv/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Rensa filter', 'download' => 'Ladda ner', 'open_in_tab' => 'Öppna i flik', + 'open' => 'Open', // Sort Options 'sort_options' => 'Sorteringsalternativ', diff --git a/lang/sv/components.php b/lang/sv/components.php index 4d0043c6608..5a4296868ae 100644 --- a/lang/sv/components.php +++ b/lang/sv/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Bilden har tagits bort', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Redigera kod', diff --git a/lang/sv/entities.php b/lang/sv/entities.php index c2a41974995..a1c0a97d76e 100644 --- a/lang/sv/entities.php +++ b/lang/sv/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Sidmall', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Sidtaggar', 'chapter_tags' => 'Kapiteltaggar', 'book_tags' => 'Boktaggar', diff --git a/lang/sv/errors.php b/lang/sv/errors.php index e5792857801..865a067c71c 100644 --- a/lang/sv/errors.php +++ b/lang/sv/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Kan inte hämta bild från :url', 'cannot_create_thumbs' => 'Servern kan inte skapa miniatyrer. Kontrollera att du har PHPs GD-tillägg aktiverat.', 'server_upload_limit' => 'Servern tillåter inte så här stora filer. Prova en mindre fil.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Servern tillåter inte så här stora filer. Prova en mindre fil.', // Drawing & Images 'image_upload_error' => 'Ett fel inträffade vid uppladdningen', 'image_upload_type_error' => 'Filtypen du försöker ladda upp är ogiltig', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/sv/preferences.php b/lang/sv/preferences.php index 766e6188f13..9ca2c40b7cd 100644 --- a/lang/sv/preferences.php +++ b/lang/sv/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Genvägar', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/sv/settings.php b/lang/sv/settings.php index db58eb38a6b..e0b2564f4c3 100644 --- a/lang/sv/settings.php +++ b/lang/sv/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Du kan välja att skicka denna användare ett e-postmeddelande som tillåter dem att ställa in sitt eget lösenord, eller så kan du ställa in deras lösenord själv.', 'users_send_invite_option' => 'Skicka e-post med inbjudan', 'users_external_auth_id' => 'Externt ID för autentisering', - 'users_external_auth_id_desc' => 'Detta är det ID som används för att matcha denna användare när du kommunicerar med ditt externa autentiseringssystem.', - 'users_password_warning' => 'Fyll i nedanstående fält endast om du vill byta lösenord:', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Den här användaren representerar eventuella gäster som använder systemet. Den kan inte användas för att logga in utan tilldeles automatiskt.', 'users_delete' => 'Ta bort användare', 'users_delete_named' => 'Ta bort användaren :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Föredraget språk', 'users_preferred_language_desc' => 'Det här alternativet kommer att ändra det språk som används i användargränssnittet. Detta påverkar inget användarskapat innehåll.', 'users_social_accounts' => 'Anslutna konton', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Här kan du ansluta dina andra konton för snabbare och smidigare inloggning. Om du kopplar från en tjänst här kommer de behörigheter som tidigare givits inte att tas bort - ta bort behörigheter genom att logga in på ditt konto på tjänsten i fråga.', 'users_social_connect' => 'Anslut konto', 'users_social_disconnect' => 'Koppla från konto', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount har kopplats till ditt konto.', 'users_social_disconnected' => ':socialAccount har kopplats bort från ditt konto.', 'users_api_tokens' => 'API-nyckel', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Inga API-tokens har skapats för den här användaren', 'users_api_tokens_create' => 'Skapa token', 'users_api_tokens_expires' => 'Förfaller', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/tr/common.php b/lang/tr/common.php index fe2e6315a42..3c592a3f23a 100644 --- a/lang/tr/common.php +++ b/lang/tr/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Filtreyi Kaldır', 'download' => 'İndir', 'open_in_tab' => 'Sekmede aç', + 'open' => 'Open', // Sort Options 'sort_options' => 'Sıralama Seçenekleri', diff --git a/lang/tr/components.php b/lang/tr/components.php index 6f200e9463b..863d7484b24 100644 --- a/lang/tr/components.php +++ b/lang/tr/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Görsel başarıyla silindi', 'image_replace' => 'Görseli Değiştir', 'image_replace_success' => 'Görsel dosyası başarıyla güncellendi', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Kodu Düzenle', diff --git a/lang/tr/entities.php b/lang/tr/entities.php index 27bf1a33ce3..07922b647cc 100644 --- a/lang/tr/entities.php +++ b/lang/tr/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Sayfa Şablonu', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Sayfa Etiketleri', 'chapter_tags' => 'Bölüm Etiketleri', 'book_tags' => 'Kitap Etiketleri', diff --git a/lang/tr/errors.php b/lang/tr/errors.php index c768d46dc5b..3e301b34ea8 100644 --- a/lang/tr/errors.php +++ b/lang/tr/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => ':url adresindeki görsel alınamadı', 'cannot_create_thumbs' => 'Sunucu, görsel ön izlemelerini oluşturamadı. Lütfen GD PHP eklentisinin kurulu olduğundan emin olun.', 'server_upload_limit' => 'Sunucu bu boyutta dosya yüklemenize izin vermiyor. Lütfen daha küçük bir dosya deneyin.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Sunucu bu boyutta dosya yüklemenize izin vermiyor. Lütfen daha küçük bir dosya deneyin.', // Drawing & Images 'image_upload_error' => 'Görsel yüklenirken bir hata meydana geldi', 'image_upload_type_error' => 'Yüklemeye çalıştığınız dosya türü geçersizdir', 'image_upload_replace_type' => 'Görsel dosyası değişimleri, aynı dosya uzantı tipinde olmalı', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Çizim verileri yüklenemedi. Çizim dosyası artık mevcut olmayabilir veya erişim izniniz olmayabilir.', // Attachments diff --git a/lang/tr/preferences.php b/lang/tr/preferences.php index 0a75db214cf..94a25df739b 100644 --- a/lang/tr/preferences.php +++ b/lang/tr/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Kısayollar', - 'shortcuts_interface' => 'Klavye Kısayollarını Görüntüle', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Burada, gezinme ve eylemler için kullanılan klavye sistem arayüzü kısayollarını etkinleştirebilir veya devre dışı bırakabilirsiniz.', 'shortcuts_customize_desc' => 'Aşağıdaki kısayolların her birini özelleştirebilirsiniz. Bir kısayol için girişi seçtikten sonra istediğiniz tuş kombinasyonuna basmanız yeterlidir.', 'shortcuts_toggle_label' => 'Klavye kısayolları etkinleştirildi', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/tr/settings.php b/lang/tr/settings.php index ddc32dfb1ee..1f039b0728f 100644 --- a/lang/tr/settings.php +++ b/lang/tr/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Bu kullanıcıya kendi şifresini belirleyebilmesi için bir davetiye e-postası gönderebilir ya da kullanıcının şifresini kendiniz belirleyebilirsiniz.', 'users_send_invite_option' => 'Kullanıcıya davetiye e-postası gönder', 'users_external_auth_id' => 'Harici Doğrulama Kimliği', - 'users_external_auth_id_desc' => 'Bu kimlik numarası (ID), harici kimlik doğrulama sisteminizle iletişim kurarken bu kullanıcıyla eşleştirmek için kullanılır.', - 'users_password_warning' => 'Şifrenizi değiştirmek istiyorsanız, aşağıdaki formu doldurunuz.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Bu kullanıcı, uygulamanızı ziyaret eden bütün misafir kullanıcıları temsil eder. Giriş yapmak için kullanılamaz ancak otomatik olarak atanır.', 'users_delete' => 'Kullanıcıyı Sil', 'users_delete_named' => ':userName kullanıcısını sil ', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Tercih Edilen Dil', 'users_preferred_language_desc' => 'Bu seçenek, kullanıcı arayüzünün dilini değiştirmek için kullanılır. Burada yapılan değişiklik herhangi bir kullanıcı tarafından oluşturulmuş içeriği etkilemeyecektir.', 'users_social_accounts' => 'Sosyal Hesaplar', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Buraya diğer hesaplarınızı ekleyerek, uygulamaya daha hızlı ve kolay bir giriş sağlayabilirsiniz. Bir hesabın bağlantısını kesmek daha önce sahip olduğunuz erişimi kaldırmaz. Bağlı sosyal hesabınızın erişimini, profil ayarlarınızdan kaldırabilirsiniz.', 'users_social_connect' => 'Hesabı Bağla', 'users_social_disconnect' => 'Hesabın Bağlantısını Kes', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount hesabı, profilinize başarıyla bağlandı.', 'users_social_disconnected' => ':socialAccount hesabınızın profilinizle ilişiği başarıyla kesildi.', 'users_api_tokens' => 'API Anahtarları', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Bu kullanıcı için oluşturulmuş herhangi bir API anahtarı bulunamadı', 'users_api_tokens_create' => 'Anahtar Oluştur', 'users_api_tokens_expires' => 'Bitiş süresi', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/uk/activities.php b/lang/uk/activities.php index 23e896a8b76..ce952049e12 100644 --- a/lang/uk/activities.php +++ b/lang/uk/activities.php @@ -15,7 +15,7 @@ 'page_restore' => 'відновив сторінку', 'page_restore_notification' => 'Сторінка успішно відновлена', 'page_move' => 'перемістив сторінку', - 'page_move_notification' => 'Page successfully moved', + 'page_move_notification' => 'Сторінку успішно перенесено', // Chapters 'chapter_create' => 'створив розділ', @@ -117,7 +117,7 @@ 'commented_on' => 'прокоментував', 'comment_create' => 'added comment', 'comment_update' => 'updated comment', - 'comment_delete' => 'deleted comment', + 'comment_delete' => 'видалений коментар', // Other 'permissions_update' => 'оновив дозволи', diff --git a/lang/uk/common.php b/lang/uk/common.php index a4b37bb839e..4459e2cb42a 100644 --- a/lang/uk/common.php +++ b/lang/uk/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Очистити фільтр', 'download' => 'Завантажити', 'open_in_tab' => 'Відкрити в новій вкладці', + 'open' => 'Open', // Sort Options 'sort_options' => 'Параметри сортування', diff --git a/lang/uk/components.php b/lang/uk/components.php index 66ac2488d2d..9276c6e2f8f 100644 --- a/lang/uk/components.php +++ b/lang/uk/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Зображення успішно видалено', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Редагувати код', diff --git a/lang/uk/entities.php b/lang/uk/entities.php index b95fcc11572..88b7449c59f 100644 --- a/lang/uk/entities.php +++ b/lang/uk/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Шаблон сторінки', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Теги сторінки', 'chapter_tags' => 'Теги розділів', 'book_tags' => 'Теги книг', diff --git a/lang/uk/errors.php b/lang/uk/errors.php index 04f41ee70fc..e07e856682c 100644 --- a/lang/uk/errors.php +++ b/lang/uk/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Неможливо отримати зображення з :url', 'cannot_create_thumbs' => 'Сервер не може створювати ескізи. Будь ласка, перевірте, чи встановлено розширення GD PHP.', 'server_upload_limit' => 'Сервер не дозволяє завантажувати файли такого розміру. Спробуйте менший розмір файлу.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Сервер не дозволяє завантажувати файли такого розміру. Спробуйте менший розмір файлу.', // Drawing & Images 'image_upload_error' => 'Виникла помилка під час завантаження зображення', 'image_upload_type_error' => 'Тип завантаженого зображення недійсний', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Не вдалося завантажити дані малюнка. Файл малюнка може більше не існувати або у вас немає дозволу на доступ до нього.', // Attachments diff --git a/lang/uk/preferences.php b/lang/uk/preferences.php index 9e44a3c8232..25683e38f79 100644 --- a/lang/uk/preferences.php +++ b/lang/uk/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Ярлики', - 'shortcuts_interface' => 'Комбінації клавіш інтерфейсу', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Тут ви можете увімкнути або вимкнути ярлики інтерфейсу клавіатури, які використовуються для навігації та дій.', 'shortcuts_customize_desc' => 'Ви можете налаштувати кожен з ярликів нижче. Просто натисніть на комбінацію бажаного ключа після вибору вводу для ярлика.', 'shortcuts_toggle_label' => 'Клавіатурні скорочення увімкнено', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/uk/settings.php b/lang/uk/settings.php index 6b491a70a88..b3323f33bc8 100644 --- a/lang/uk/settings.php +++ b/lang/uk/settings.php @@ -49,8 +49,8 @@ // Color settings 'color_scheme' => 'Колірна схема застосунку', - 'color_scheme_desc' => 'Set the colors to use in the application user interface. Colors can be configured separately for dark and light modes to best fit the theme and ensure legibility.', - 'ui_colors_desc' => 'Set the application primary color and default link color. The primary color is mainly used for the header banner, buttons and interface decorations. The default link color is used for text-based links and actions, both within written content and in the application interface.', + 'color_scheme_desc' => 'Встановіть кольори для використання в інтерфейсі користувача програми. Кольори можуть бути налаштовані окремо для темних і світлих режимів, щоб найкращим чином відповідати темі й забезпечити розбірливість.', + 'ui_colors_desc' => 'Встановіть основний колір програми та колір посилання за замовчуванням. Основний колір в основному використовується для банера заголовка, кнопок і прикрас інтерфейсу. Колір посилання за замовчуванням використовується для текстових посилань і дій, як всередині письмового вмісту, так і в інтерфейсі програми.', 'app_color' => 'Головний колір', 'link_color' => 'Колір посилання за замовчуванням', 'content_colors_desc' => 'Установіть кольори для всіх елементів в ієрархії організації сторінки. Для зручності читання рекомендується вибирати кольори з такою ж яскравістю, як і кольори за замовчуванням.', @@ -163,7 +163,7 @@ 'role_manage_settings' => 'Керування налаштуваннями програми', 'role_export_content' => 'Вміст експорту', 'role_editor_change' => 'Змінити редактор сторінок', - 'role_notifications' => 'Receive & manage notifications', + 'role_notifications' => 'Отримувати та керувати повідомленнями', 'role_asset' => 'Дозволи', 'roles_system_warning' => 'Майте на увазі, що доступ до будь-якого з вищезазначених трьох дозволів може дозволити користувачеві змінювати власні привілеї або привілеї інших в системі. Ролі з цими дозволами призначайте лише довіреним користувачам.', 'role_asset_desc' => 'Ці дозволи контролюють стандартні доступи всередині системи. Права на книги, розділи та сторінки перевизначать ці дозволи.', @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Ви можете надіслати цьому користувачеві лист із запрошенням, що дозволить йому встановити пароль власноруч, або ви можете встановити йому пароль самостійно.', 'users_send_invite_option' => 'Надіслати листа із запрошенням користувачу', 'users_external_auth_id' => 'Зовнішній ID автентифікації', - 'users_external_auth_id_desc' => 'Цей ідентифікатор використовується для ідентифікації цього користувача під час взаємодії із зовнішньою системою автентифікації.', - 'users_password_warning' => 'Тільки якщо ви хочете змінити свій пароль, заповніть поля нижче:', + 'users_external_auth_id_desc' => 'Коли використовується зовнішня система аутентифікації (наприклад, SAML2, OIDC або LDAP), це ідентифікатор, який пов\'язує цього користувача BookStack з обліковим записом системи аутентифікації. Ви можете ігнорувати це поле, якщо використовуєте типову автентифікацію на основі електронної пошти.', + 'users_password_warning' => 'Заповніть поле нижче, лише якщо ви хочете змінити пароль для цього користувача.', 'users_system_public' => 'Цей користувач представляє будь-яких гостьових користувачів, які відвідують ваш екземпляр. Його не можна використовувати для входу, але він призначається автоматично.', 'users_delete' => 'Видалити користувача', 'users_delete_named' => 'Видалити користувача :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Бажана мова', 'users_preferred_language_desc' => 'Цей параметр змінить мову інтерфейсу користувача в програмі. Не вплине на створений користувачем вміст.', 'users_social_accounts' => 'Соціальні акаунти', + 'users_social_accounts_desc' => 'Перегляд стану підключених соціальних облікових записів для цього користувача. Соціальні акаунти можуть використовуватися на додаток до первинної системи аутентифікації для доступу до системи.', 'users_social_accounts_info' => 'Тут ви можете підключити інші облікові записи для швидшого та легшого входу. Від\'єднання соціального облікового запису тут не дозволяється. Скасуйте доступ із налаштувань вашого профілю в пов\'язаній соціальній мережі.', 'users_social_connect' => 'Підключити обліковий запис', 'users_social_disconnect' => 'Від\'єднати обліковий запис', + 'users_social_status_connected' => 'Під’єднано', + 'users_social_status_disconnected' => 'Від\'єднано', 'users_social_connected' => 'Обліковий запис :socialAccount успішно додано до вашого профілю.', 'users_social_disconnected' => 'Обліковий запис :socialAccount був успішно відключений від вашого профілю.', 'users_api_tokens' => 'API токени', + 'users_api_tokens_desc' => 'Створюйте та керуйте токенами доступу, які використовуються для автентифікації за допомогою BookStack REST API. Дозволи для API управляються через користувача, якому належить токен.', 'users_api_tokens_none' => 'Жодного токена API не створено для цього користувача', 'users_api_tokens_create' => 'Створити токен', 'users_api_tokens_expires' => 'Закінчується', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/uz/activities.php b/lang/uz/activities.php index 6d2ec340895..d90317749a4 100644 --- a/lang/uz/activities.php +++ b/lang/uz/activities.php @@ -10,40 +10,40 @@ 'page_create_notification' => 'Sahifa muvaffaqiyatli yaratildi', 'page_update' => 'yangilangan sahifa', 'page_update_notification' => 'Sahifa muvaffaqiyatli yangilandi', - 'page_delete' => 'o\'chirilgan sahifa', - 'page_delete_notification' => 'Sahifa muvaffaqiyatli o\'chirildi', + 'page_delete' => 'o‘chirilgan sahifa', + 'page_delete_notification' => 'Sahifa muvaffaqiyatli o‘chirildi', 'page_restore' => 'tiklangan sahifa', 'page_restore_notification' => 'Sahifa muvaffaqiyatli qayta tiklandi', - 'page_move' => 'ko\'chirilgan sahifa', + 'page_move' => 'ko‘chirilgan sahifa', 'page_move_notification' => 'Page successfully moved', // Chapters - 'chapter_create' => 'yaratilgan bo\'lim', - 'chapter_create_notification' => 'Bo\'lim muvaffaqiyatli yaratildi', - 'chapter_update' => 'yangilangan bo\'lim', - 'chapter_update_notification' => 'Bo\'lim muvaffaqiyatli yangilandi', - 'chapter_delete' => 'o\'chirilgan bo\'lim', - 'chapter_delete_notification' => 'Bo\'lim muvaffaqiyatli o\'chirildi', - 'chapter_move' => 'ko\'chirilgan bo\'lim', - 'chapter_move_notification' => 'Chapter successfully moved', + 'chapter_create' => 'yaratilgan bo‘lim', + 'chapter_create_notification' => 'Bo‘lim muvaffaqiyatli yaratildi', + 'chapter_update' => 'yangilangan bo‘lim', + 'chapter_update_notification' => 'Bo‘lim muvaffaqiyatli yangilandi', + 'chapter_delete' => 'o‘chirilgan bo‘lim', + 'chapter_delete_notification' => 'Bo‘lim muvaffaqiyatli o‘chirildi', + 'chapter_move' => 'ko‘chirilgan bo‘lim', + 'chapter_move_notification' => 'Bo‘lim muvaffaqiyatli ko‘chirildi', // Books 'book_create' => 'yaratilgan kitob', 'book_create_notification' => 'Kitob muvaffaqiyatli yaratildi', - 'book_create_from_chapter' => 'converted chapter to book', - 'book_create_from_chapter_notification' => 'Chapter successfully converted to a book', + 'book_create_from_chapter' => 'bo‘lim kitobga o‘girildi', + 'book_create_from_chapter_notification' => 'Bo‘lim kitobga muvaffaqiyatli o‘girildi', 'book_update' => 'yangilangan kitob', 'book_update_notification' => 'Kitob muvaffaqiyatli yangilandi', - 'book_delete' => 'o\'chirilgan kitob', - 'book_delete_notification' => 'Kitob muvaffaqiyatli o\'chirildi', + 'book_delete' => 'o‘chirilgan kitob', + 'book_delete_notification' => 'Kitob muvaffaqiyatli o‘chirildi', 'book_sort' => 'tartiblangan kitob', 'book_sort_notification' => 'Kitob muvaffaqiyatli qayta tartiblandi', // Bookshelves - 'bookshelf_create' => 'created shelf', - 'bookshelf_create_notification' => 'Shelf successfully created', - 'bookshelf_create_from_book' => 'converted book to shelf', - 'bookshelf_create_from_book_notification' => 'Book successfully converted to a shelf', + 'bookshelf_create' => 'Javon yaratildi', + 'bookshelf_create_notification' => 'Javon muvaffaqiyatli yaratildi', + 'bookshelf_create_from_book' => 'kitob javonga o‘girildi', + 'bookshelf_create_from_book_notification' => 'kitob javonga muvaffaqiyatli o‘girildi', 'bookshelf_update' => 'updated shelf', 'bookshelf_update_notification' => 'Shelf successfully updated', 'bookshelf_delete' => 'deleted shelf', @@ -55,7 +55,7 @@ 'revision_delete_notification' => 'Revision successfully deleted', // Favourites - 'favourite_add_notification' => '":name" sevimlilaringizga qo\'shildi', + 'favourite_add_notification' => '":name" sevimlilaringizga qo‘shildi', 'favourite_remove_notification' => '":name" sevimlilaringizdan olib tashlandi', // Watching @@ -69,7 +69,7 @@ 'mfa_setup_method' => 'configured MFA method', 'mfa_setup_method_notification' => 'Multi-faktor uslubi muvaffaqiyatli sozlandi', 'mfa_remove_method' => 'removed MFA method', - 'mfa_remove_method_notification' => 'Multi-faktor uslubi muvaffaqiyatli o\'chirildi', + 'mfa_remove_method_notification' => 'Multi-faktor uslubi muvaffaqiyatli o‘chirildi', // Settings 'settings_update' => 'updated settings', @@ -81,8 +81,8 @@ 'webhook_create_notification' => 'Webhook muvaffaqiyatli yaratildi', 'webhook_update' => 'yangilangan webhook', 'webhook_update_notification' => 'Webhook muvaffaqiyatli yangilandi', - 'webhook_delete' => 'o\'chirilgan webhook', - 'webhook_delete_notification' => 'Webhook muvaffaqiyatli o\'chirildi', + 'webhook_delete' => 'o‘chirilgan webhook', + 'webhook_delete_notification' => 'Webhook muvaffaqiyatli o‘chirildi', // Users 'user_create' => 'created user', diff --git a/lang/uz/auth.php b/lang/uz/auth.php index e9a48ab32ad..18236a8fba6 100644 --- a/lang/uz/auth.php +++ b/lang/uz/auth.php @@ -6,112 +6,112 @@ */ return [ - 'failed' => 'Ushbu ma\'lumotlar, bizdagi ma\'lumotlarga mos kelmadi.', - 'throttle' => 'Kirishga juda ko\'p urinishlar qilindi. Iltimos :seconds soniyadan so\'ng urinib ko\'ring.', + 'failed' => 'Uchbu ma‘lumotlar, bizdagi ma‘lumotlarga mos kelmadi.', + 'throttle' => 'Kirishga urinishlar juda ko‘p. Iltimos :seconds soniyadan so‘ng urinib ko‘ring.', // Login & Register - 'sign_up' => 'Ro\'yxatdan o\'tish', + 'sign_up' => 'Ro‘yxatdan o‘tish', 'log_in' => 'Kirish', 'log_in_with' => ':socialDriver orqali kirish', - 'sign_up_with' => ':socialDriver orqali ro\'yxatdan o\'tish', + 'sign_up_with' => ':socialDriver orqali ro‘yxatdan o‘tish', 'logout' => 'Chiqish', 'name' => 'Ism', 'username' => 'Foydalanuvchi nomi', - 'email' => 'Email', + 'email' => 'Elektron pochta', 'password' => 'Parol', 'password_confirm' => 'Parolni tasdiqlash', - 'password_hint' => 'Kamida 8 belgi bo\'lishi kerak', + 'password_hint' => 'Kamida 8 belgi bo‘lishi kerak', 'forgot_password' => 'Parolni unutdingizmi?', - 'remember_me' => 'Meni eslab qoling', - 'ldap_email_hint' => 'Ushbu hisob bilan foydalanish uchun emailni kiriting.', - 'create_account' => 'Hisob yaratish', - 'already_have_account' => 'Hisobingiz bormi?', - 'dont_have_account' => 'Hisobingiz yo\'qmi?', + 'remember_me' => 'Eslab qoling', + 'ldap_email_hint' => 'Ush hisob bilan o‘tish uchun emailni kiritish.', + 'create_account' => 'Profil yaratildi', + 'already_have_account' => 'Profilingiz bormi?', + 'dont_have_account' => 'Profilingiz yo‘qmi?', 'social_login' => 'Ijtimoiy tarmoqlar orqali kirish', - 'social_registration' => 'Ijtimoiy tarmoqlar orqali ro\'yxatdan o\'tish', - 'social_registration_text' => 'Boshqa xizmatdan foydalanib ro\'yxatdan o\'ting va kiring.', + 'social_registration' => 'Ijtimoiy tarmoqlar orqali ro‘yxatdan o‘tish', + 'social_registration_text' => 'Boshqa tarmoqdan foydalanish.', - 'register_thanks' => 'Ro\'yxatdan o\'tganingiz uchun rahmat!', - 'register_confirm' => ':appName dan foydalnish uchun iltimos emailingizga yuborilgan xatni ochib, tasdiqlovchi link orqali o\'ting.', - 'registrations_disabled' => 'Hozirda ro\'yxatdan o\'tish yopilgan', - 'registration_email_domain_invalid' => 'Ushbu domendagi email bilan ro\'yxatdan o\'tib bo\'lmaydi', - 'register_success' => 'Ro\'yxatdan o\'tganingiz uchun rahmat! Endi siz ushbu hisob bilan saytga kirishingiz mumkin.', + 'register_thanks' => 'Ro‘yxatdan o‘tganingiz uchun rahmat!', + 'register_confirm' => ':appName dan foydalanish uchun iltimos emailingizga yuborilgan xatni ochib, tasdiqlovchi link orqali o‘ting.', + 'registrations_disabled' => 'Hozirda ro‘yxatdan o‘tish yopilgan', + 'registration_email_domain_invalid' => 'Ush domendagi email bilan ro‘yxatdan o‘tib bo‘lmaydi', + 'register_success' => 'Ro‘yxatdan o‘tganingiz uchun rahmat! Endi siz ushbu hisob bilan saytga kirishingiz mumkin.', // Login auto-initiation - 'auto_init_starting' => 'Attempting Login', - 'auto_init_starting_desc' => 'We\'re contacting your authentication system to start the login process. If there\'s no progress after 5 seconds you can try clicking the link below.', - 'auto_init_start_link' => 'Proceed with authentication', + 'auto_init_starting' => 'Kirishga urinish', + 'auto_init_starting_desc' => 'Kirish jarayonini boshlash uchun kirish orqali murojaat qilyapmiz. Agar 5 soniyadan keyin hech qanday o‘zgarish bo‘lmasa, havolani bosib ko‘ tiklash mumkin.', + 'auto_init_start_link' => 'Kirish uchun bosing', // Password Reset - 'reset_password' => 'Parolni tiklash', - 'reset_password_send_instructions' => 'Parolni tiklash manzilini olish uchun emailingizni quyidagi maydonga kiriting.', + 'reset_password' => 'Parolni qayta tiklash', + 'reset_password_send_instructions' => 'Parolni tiklash manzilini olish uchun emailingizni maydonga kiriting.', 'reset_password_send_button' => 'Tiklash manzilini yuborish', - 'reset_password_sent' => 'A password reset link will be sent to :email if that email address is found in the system.', - 'reset_password_success' => 'Your password has been successfully reset.', - 'email_reset_subject' => 'Reset your :appName password', - 'email_reset_text' => 'You are receiving this email because we received a password reset request for your account.', - 'email_reset_not_requested' => 'If you did not request a password reset, no further action is required.', + 'reset_password_sent' => 'Agar tizimda ushbu elektron pochta manzili topilsa, parolni tiklash havolasi :email manziliga yuboriladi.', + 'reset_password_success' => 'Parolingiz yaxshilandi.', + 'email_reset_subject' => ':appName parolingizni tiklash', + 'email_reset_text' => 'Profilingiz uchun parolni oʻ Soʻrovini olganimiz uchun sizga bu xat keldi.', + 'email_reset_not_requested' => 'Agar sizga parolni tiklashni so‘ramagan bo‘lsangiz, boshqa hech qanday harakat talab qilish mumkin.', // Email Confirmation - 'email_confirm_subject' => 'Confirm your email on :appName', - 'email_confirm_greeting' => 'Thanks for joining :appName!', - 'email_confirm_text' => 'Please confirm your email address by clicking the button below:', - 'email_confirm_action' => 'Confirm Email', - 'email_confirm_send_error' => 'Email confirmation required but the system could not send the email. Contact the admin to ensure email is set up correctly.', - 'email_confirm_success' => 'Your email has been confirmed! You should now be able to login using this email address.', - 'email_confirm_resent' => 'Confirmation email resent, Please check your inbox.', - 'email_confirm_thanks' => 'Thanks for confirming!', - 'email_confirm_thanks_desc' => 'Please wait a moment while your confirmation is handled. If you are not redirected after 3 seconds press the "Continue" link below to proceed.', + 'email_confirm_subject' => ':appName orqali elektron pochtangizni tasdiqlang', + 'email_confirm_greeting' => ':appName\'ga qo‘shilganingiz uchun tashakkur!', + 'email_confirm_text' => 'Quyidagi tugmani bosish orqali elektron pochta manzilingizni tasdiqlang:', + 'email_confirm_action' => 'E-pochta manzilini tasdiqlash', + 'email_confirm_send_error' => 'Elektron pochtani tasdiqlash talab qilinadi, lekin tizim elektron pochta xabarini yubora olmadi. Elektron pochta toʻgʻri sozlanganligiga ishonch hosil qilish uchun administrator bilan bogʻlaning.', + 'email_confirm_success' => 'Emailingiz tasdiqlandi! Endi siz ushbu elektron pochta manzilidan foydalanib tizimga kirishingiz kerak.', + 'email_confirm_resent' => 'Tasdiqlash xati qayta yuborildi. Iltimos, pochta qutingizni tekshiring.', + 'email_confirm_thanks' => 'Tasdiqlaganingiz uchun tashakkur!', + 'email_confirm_thanks_desc' => 'Tasdiqlash jarayoni tugaguncha biroz kuting. Agar 3 soniyadan keyin qayta yoʻnaltirilmasangiz, davom etish uchun quyidagi “Davom etish” havolasini bosing.', - 'email_not_confirmed' => 'Email Address Not Confirmed', - 'email_not_confirmed_text' => 'Your email address has not yet been confirmed.', - 'email_not_confirmed_click_link' => 'Please click the link in the email that was sent shortly after you registered.', - 'email_not_confirmed_resend' => 'If you cannot find the email you can re-send the confirmation email by submitting the form below.', - 'email_not_confirmed_resend_button' => 'Resend Confirmation Email', + 'email_not_confirmed' => 'Elektron pochta manzili tasdiqlanmagan', + 'email_not_confirmed_text' => 'Sizning elektron pochta manzilingiz hali tasdiqlanmagan.', + 'email_not_confirmed_click_link' => 'Roʻyxatdan oʻtganingizdan soʻng, elektron pochtaga yuborilgan havolani bosing.', + 'email_not_confirmed_resend' => 'Agar elektron pochta manzilini topa olmasangiz, quyidagi shaklni yuborish orqali tasdiqlash xatini qayta yuborishingiz mumkin.', + 'email_not_confirmed_resend_button' => 'Tasdiqlash xatini qayta yuborish', // User Invite - 'user_invite_email_subject' => 'You have been invited to join :appName!', - 'user_invite_email_greeting' => 'An account has been created for you on :appName.', - 'user_invite_email_text' => 'Click the button below to set an account password and gain access:', - 'user_invite_email_action' => 'Set Account Password', - 'user_invite_page_welcome' => 'Welcome to :appName!', - 'user_invite_page_text' => 'To finalise your account and gain access you need to set a password which will be used to log-in to :appName on future visits.', - 'user_invite_page_confirm_button' => 'Confirm Password', - 'user_invite_success_login' => 'Password set, you should now be able to login using your set password to access :appName!', + 'user_invite_email_subject' => 'Siz :appName ilovasiga qo‘shilishga taklif qilindingiz!', + 'user_invite_email_greeting' => 'Siz uchun :appName ilovasida hisob yaratildi.', + 'user_invite_email_text' => 'Hisob qaydnomasi parolini o‘rnatish va unga kirish uchun quyidagi tugmani bosing:', + 'user_invite_email_action' => 'Hisob parolini o‘rnating', + 'user_invite_page_welcome' => ':appName ga xush kelibsiz!', + 'user_invite_page_text' => 'Hisob qaydnomangizni yakunlash va kirish huquqini qo‘lga kiritish uchun parolni o‘rnatishingiz kerak, undan keyingi tashriflaringizda :appName tizimiga kirish uchun foydalaniladi.', + 'user_invite_page_confirm_button' => 'Parolni tasdiqlang', + 'user_invite_success_login' => 'Parol o‘rnatilgan, endi siz o‘rnatilgan parolingizdan foydalanib tizimga kirishingiz kerak: appName!', // Multi-factor Authentication - 'mfa_setup' => 'Setup Multi-Factor Authentication', - 'mfa_setup_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', - 'mfa_setup_configured' => 'Already configured', - 'mfa_setup_reconfigure' => 'Reconfigure', - 'mfa_setup_remove_confirmation' => 'Are you sure you want to remove this multi-factor authentication method?', - 'mfa_setup_action' => 'Setup', - 'mfa_backup_codes_usage_limit_warning' => 'You have less than 5 backup codes remaining, Please generate and store a new set before you run out of codes to prevent being locked out of your account.', - 'mfa_option_totp_title' => 'Mobile App', - 'mfa_option_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.', - 'mfa_option_backup_codes_title' => 'Backup Codes', - 'mfa_option_backup_codes_desc' => 'Securely store a set of one-time-use backup codes which you can enter to verify your identity.', - 'mfa_gen_confirm_and_enable' => 'Confirm and Enable', - 'mfa_gen_backup_codes_title' => 'Backup Codes Setup', - 'mfa_gen_backup_codes_desc' => 'Store the below list of codes in a safe place. When accessing the system you\'ll be able to use one of the codes as a second authentication mechanism.', - 'mfa_gen_backup_codes_download' => 'Download Codes', - 'mfa_gen_backup_codes_usage_warning' => 'Each code can only be used once', - 'mfa_gen_totp_title' => 'Mobile App Setup', - 'mfa_gen_totp_desc' => 'To use multi-factor authentication you\'ll need a mobile application that supports TOTP such as Google Authenticator, Authy or Microsoft Authenticator.', - 'mfa_gen_totp_scan' => 'Scan the QR code below using your preferred authentication app to get started.', - 'mfa_gen_totp_verify_setup' => 'Verify Setup', - 'mfa_gen_totp_verify_setup_desc' => 'Verify that all is working by entering a code, generated within your authentication app, in the input box below:', - 'mfa_gen_totp_provide_code_here' => 'Provide your app generated code here', - 'mfa_verify_access' => 'Verify Access', - 'mfa_verify_access_desc' => 'Your user account requires you to confirm your identity via an additional level of verification before you\'re granted access. Verify using one of your configured methods to continue.', - 'mfa_verify_no_methods' => 'No Methods Configured', - 'mfa_verify_no_methods_desc' => 'No multi-factor authentication methods could be found for your account. You\'ll need to set up at least one method before you gain access.', - 'mfa_verify_use_totp' => 'Verify using a mobile app', - 'mfa_verify_use_backup_codes' => 'Verify using a backup code', - 'mfa_verify_backup_code' => 'Backup Code', - 'mfa_verify_backup_code_desc' => 'Enter one of your remaining backup codes below:', - 'mfa_verify_backup_code_enter_here' => 'Enter backup code here', - 'mfa_verify_totp_desc' => 'Enter the code, generated using your mobile app, below:', - 'mfa_setup_login_notification' => 'Multi-factor method configured, Please now login again using the configured method.', + 'mfa_setup' => 'Ko‘p faktorli autentifikatsiyani sozlash', + 'mfa_setup_desc' => 'Ko‘p faktorli autentifikatsiyani foydalanuvchi hisobingiz uchun qo‘shimcha xavfsizlik qatlami sifatida o‘rnatish.', + 'mfa_setup_configured' => 'Allaqachon sozlangan', + 'mfa_setup_reconfigure' => 'Qayta sozlang', + 'mfa_setup_remove_confirmation' => 'Haqiqatan ham bu koʻp faktorli autentifikatsiya usulini olib tashlamoqchimisiz?', + 'mfa_setup_action' => 'Sozlash; O‘rnatish', + 'mfa_backup_codes_usage_limit_warning' => 'Sizda 5 tadan kam zaxira kodingiz qoldi. Profilingiz bloklanib qolmasligi uchun kodlar tugashidan oldin yangi to‘plamni yarating va saqlang.', + 'mfa_option_totp_title' => 'Mobil ilova', + 'mfa_option_totp_desc' => 'Ko‘p faktorli autentifikatsiyadan foydalanish uchun sizga Google Authenticator, Authy yoki Microsoft Authenticator kabi OTPni qo‘llab-quvvatlaydigan mobil ilova kerak bo‘ladi.', + 'mfa_option_backup_codes_title' => 'Zaxira kodlari', + 'mfa_option_backup_codes_desc' => 'Shaxsingizni tasdiqlash uchun kiritishingiz mumkin bo‘lgan bir martalik zaxira kodlari to‘plamini xavfsiz saqlang.', + 'mfa_gen_confirm_and_enable' => 'Tasdiqlash va yoqish', + 'mfa_gen_backup_codes_title' => 'Zaxira kodlarini sozlash', + 'mfa_gen_backup_codes_desc' => 'Quyidagi kodlar ro‘yxatini xavfsiz joyda saqlang. Tizimga kirishda siz kodlardan birini ikkinchi autentifikatsiya mexanizmi sifatida ishlatishingiz mumkin.', + 'mfa_gen_backup_codes_download' => 'Kodlarni yuklab olish', + 'mfa_gen_backup_codes_usage_warning' => 'Har bir kod faqat bir marta ishlatilishi mumkin', + 'mfa_gen_totp_title' => 'Mobil ilovani sozlash', + 'mfa_gen_totp_desc' => 'Ko‘p faktorli autentifikatsiyadan foydalanish uchun sizga Google Authenticator, Authy yoki Microsoft Authenticator kabi TOTPni qo‘llab-quvvatlaydigan mobil ilova kerak bo‘ladi.', + 'mfa_gen_totp_scan' => 'Ishni boshlash uchun siz tanlagan autentifikatsiya ilovasi yordamida quyidagi QR kodni skanerlang.', + 'mfa_gen_totp_verify_setup' => 'Oʻrnatishni tasdiqlang', + 'mfa_gen_totp_verify_setup_desc' => 'Quyidagi kiritish maydoniga autentifikatsiya ilovangizda yaratilgan kodni kiritish orqali hammasi ishlayotganiga ishonch hosil qiling:', + 'mfa_gen_totp_provide_code_here' => 'Bu yerda ilovangiz tomonidan yaratilgan kodni kiriting', + 'mfa_verify_access' => 'Kirishni tasdiqlang', + 'mfa_verify_access_desc' => 'Sizning foydalanuvchi hisobingiz sizga ruxsat berishdan oldin shaxsingizni tasdiqlashning qoʻshimcha darajasi orqali tasdiqlashingizni talab qiladi. Davom etish uchun sozlangan usullardan biri yordamida tasdiqlang.', + 'mfa_verify_no_methods' => 'Hech qanday usul sozlanmagan', + 'mfa_verify_no_methods_desc' => 'Profilingiz uchun ko‘p faktorli autentifikatsiya usullari topilmadi. Kirishdan oldin kamida bitta usulni sozlashingiz kerak.', + 'mfa_verify_use_totp' => 'Mobil ilova yordamida tasdiqlang', + 'mfa_verify_use_backup_codes' => 'Zaxira kod yordamida tasdiqlang', + 'mfa_verify_backup_code' => 'Zaxira kodi', + 'mfa_verify_backup_code_desc' => 'Qolgan zaxira kodlaringizdan birini pastga kiriting:', + 'mfa_verify_backup_code_enter_here' => 'Bu yerga zaxira kodini kiriting', + 'mfa_verify_totp_desc' => 'Quyida mobil ilovangiz yordamida yaratilgan kodni kiriting:', + 'mfa_setup_login_notification' => 'Ko‘p faktorli usul sozlangan. Iltimos, endi sozlangan usul yordamida qayta kiring.', ]; diff --git a/lang/uz/common.php b/lang/uz/common.php index 47b74d5b6eb..5e01378da7f 100644 --- a/lang/uz/common.php +++ b/lang/uz/common.php @@ -5,105 +5,106 @@ return [ // Buttons - 'cancel' => 'Cancel', - 'close' => 'Close', - 'confirm' => 'Confirm', - 'back' => 'Back', - 'save' => 'Save', - 'continue' => 'Continue', - 'select' => 'Select', - 'toggle_all' => 'Toggle All', - 'more' => 'More', + 'cancel' => 'Bekor qilsih', + 'close' => 'Yopish', + 'confirm' => 'Tasdiqlang', + 'back' => 'Orqaga', + 'save' => 'Saqlash', + 'continue' => 'Davom etish', + 'select' => 'Tanlang', + 'toggle_all' => 'Hammasini almashtirish', + 'more' => 'Ko‘proq', // Form Labels - 'name' => 'Name', - 'description' => 'Description', - 'role' => 'Role', - 'cover_image' => 'Cover image', - 'cover_image_description' => 'This image should be approx 440x250px.', + 'name' => 'Nom', + 'description' => 'Tavsif', + 'role' => 'Rol', + 'cover_image' => 'Muqova rasmi', + 'cover_image_description' => 'Bu rasm taxminan 440x250px boʻlishi kerak.', // Actions - 'actions' => 'Actions', - 'view' => 'View', - 'view_all' => 'View All', - 'new' => 'New', - 'create' => 'Create', - 'update' => 'Update', - 'edit' => 'Edit', - 'sort' => 'Sort', - 'move' => 'Move', - 'copy' => 'Copy', - 'reply' => 'Reply', - 'delete' => 'Delete', - 'delete_confirm' => 'Confirm Deletion', - 'search' => 'Search', - 'search_clear' => 'Clear Search', - 'reset' => 'Reset', - 'remove' => 'Remove', - 'add' => 'Add', - 'configure' => 'Configure', - 'manage' => 'Manage', - 'fullscreen' => 'Fullscreen', - 'favourite' => 'Favourite', - 'unfavourite' => 'Unfavourite', - 'next' => 'Next', - 'previous' => 'Previous', - 'filter_active' => 'Active Filter:', - 'filter_clear' => 'Clear Filter', - 'download' => 'Download', - 'open_in_tab' => 'Open in Tab', + 'actions' => 'Harakatlar', + 'view' => 'Ko‘rinish', + 'view_all' => 'Hammasini ko‘rish', + 'new' => 'Yangi', + 'create' => 'Yaratish', + 'update' => 'Yangilash', + 'edit' => 'Tahrirlash', + 'sort' => 'Saralash', + 'move' => 'Ko‘chirish', + 'copy' => 'Nusxalash', + 'reply' => 'Javob berish', + 'delete' => 'Oʻchirish', + 'delete_confirm' => 'Oʻchirishni tasdiqlang', + 'search' => 'Qidirish', + 'search_clear' => 'Qidiruvni tozalash', + 'reset' => 'Qayta o‘rnatish', + 'remove' => 'O‘chirish', + 'add' => 'Qo‘shish', + 'configure' => 'Sozlash', + 'manage' => 'Boshqarish', + 'fullscreen' => 'To‘liq ekran', + 'favourite' => 'Sevimli', + 'unfavourite' => 'Sevimli emas', + 'next' => 'Keyingisi', + 'previous' => 'Oldingi', + 'filter_active' => 'Faol filtr:', + 'filter_clear' => 'Filtrni tozalash', + 'download' => 'Yuklab olish', + 'open_in_tab' => 'Tabda ochish', + 'open' => 'Open', // Sort Options - 'sort_options' => 'Sort Options', - 'sort_direction_toggle' => 'Sort Direction Toggle', - 'sort_ascending' => 'Sort Ascending', - 'sort_descending' => 'Sort Descending', - 'sort_name' => 'Name', - 'sort_default' => 'Default', - 'sort_created_at' => 'Created Date', - 'sort_updated_at' => 'Updated Date', + 'sort_options' => 'Saralash opsiyalari', + 'sort_direction_toggle' => 'Saralash yoʻnalishini almashtirish', + 'sort_ascending' => 'O‘sish bo‘yicha tartiblash', + 'sort_descending' => 'Kamayish bo‘yicha tartiblash', + 'sort_name' => 'Nomi', + 'sort_default' => 'Standart', + 'sort_created_at' => 'Yaratilgan sana', + 'sort_updated_at' => 'Yangilangan sana', // Misc - 'deleted_user' => 'Deleted User', - 'no_activity' => 'No activity to show', - 'no_items' => 'No items available', - 'back_to_top' => 'Back to top', - 'skip_to_main_content' => 'Skip to main content', - 'toggle_details' => 'Toggle Details', - 'toggle_thumbnails' => 'Toggle Thumbnails', - 'details' => 'Details', - 'grid_view' => 'Grid View', - 'list_view' => 'List View', - 'default' => 'Default', - 'breadcrumb' => 'Breadcrumb', - 'status' => 'Status', - 'status_active' => 'Active', - 'status_inactive' => 'Inactive', - 'never' => 'Never', - 'none' => 'None', + 'deleted_user' => 'O‘chirilgan foydalanuvchi', + 'no_activity' => 'Ko‘rsatiladigan faollik yo‘q', + 'no_items' => 'Hech narsa mavjud emas', + 'back_to_top' => 'Yuqoriga qaytish', + 'skip_to_main_content' => 'Asosiy tarkibga o‘tish', + 'toggle_details' => 'Tafsilotlarni almashtirish', + 'toggle_thumbnails' => 'Eskizlarni almashtirish', + 'details' => 'Tafsilotlar', + 'grid_view' => 'To‘r ko‘rinishi', + 'list_view' => 'Roʻyxat koʻrinishi', + 'default' => 'Standart', + 'breadcrumb' => 'Non bo‘laklari', + 'status' => 'Holat', + 'status_active' => 'Faol', + 'status_inactive' => 'Faol emas', + 'never' => 'Hech qachon', + 'none' => 'Yo‘q', // Header - 'homepage' => 'Homepage', - 'header_menu_expand' => 'Expand Header Menu', - 'profile_menu' => 'Profile Menu', - 'view_profile' => 'View Profile', - 'edit_profile' => 'Edit Profile', - 'dark_mode' => 'Dark Mode', - 'light_mode' => 'Light Mode', - 'global_search' => 'Global Search', + 'homepage' => 'Bosh sahifa', + 'header_menu_expand' => 'Sarlavha menyusini kengaytirish', + 'profile_menu' => 'Profil menyusi', + 'view_profile' => 'Profilni ko‘rish', + 'edit_profile' => 'Profilni tahrirlash', + 'dark_mode' => 'Qorong‘i rejim', + 'light_mode' => 'Nur rejimi', + 'global_search' => 'Global qidiruv', // Layout tabs - 'tab_info' => 'Info', - 'tab_info_label' => 'Tab: Show Secondary Information', - 'tab_content' => 'Content', - 'tab_content_label' => 'Tab: Show Primary Content', + 'tab_info' => 'Ma‘lumot', + 'tab_info_label' => 'Yorliq: Ikkilamchi ma‘lumotni ko‘rsatish', + 'tab_content' => 'Tarkib', + 'tab_content_label' => 'Yorliq: Asosiy tarkibni ko‘rsatish', // Email Content - 'email_action_help' => 'If you’re having trouble clicking the ":actionText" button, copy and paste the URL below into your web browser:', - 'email_rights' => 'All rights reserved', + 'email_action_help' => 'Agar siz ":actionText" tugmasini bosishda muammoga duch kelsangiz, quyidagi URL manzilidan nusxa oling va veb-brauzeringizga joylashtiring:', + 'email_rights' => 'Barcha huquqlar himoyalangan', // Footer Link Options // Not directly used but available for convenience to users. - 'privacy_policy' => 'Privacy Policy', - 'terms_of_service' => 'Terms of Service', + 'privacy_policy' => 'Maxfiylik siyosati', + 'terms_of_service' => 'Xizmat ko‘rsatish shartlari', ]; diff --git a/lang/uz/components.php b/lang/uz/components.php index b021cfbc48a..29fc0f2598e 100644 --- a/lang/uz/components.php +++ b/lang/uz/components.php @@ -6,39 +6,41 @@ // Image Manager 'image_select' => 'Rasmni tanlash', - 'image_list' => 'Image List', - 'image_details' => 'Image Details', - 'image_upload' => 'Upload Image', - 'image_intro' => 'Here you can select and manage images that have been previously uploaded to the system.', - 'image_intro_upload' => 'Upload a new image by dragging an image file into this window, or by using the "Upload Image" button above.', + 'image_list' => 'Rasmlar roʻyxati', + 'image_details' => 'Tasvir tafsilotlari', + 'image_upload' => 'Rasm yuklash', + 'image_intro' => 'Bu yerda siz avvalroq tizimga yuklangan rasmlarni tanlashingiz va boshqarishingiz mumkin.', + 'image_intro_upload' => 'Tasvir faylini ushbu oynaga sudrab yoki yuqoridagi "Rasmni yuklash" tugmasini bosib yangi rasmni yuklang.', 'image_all' => 'Barchasi', - 'image_all_title' => 'Barcha rasmlarni ko\'rish', - 'image_book_title' => 'Ushbu kitobga yuklangan barcha rasmlarni ko\'rish', - 'image_page_title' => 'Ushbu sahifaga yuklangan barcha rasmlarni ko\'rish', - 'image_search_hint' => 'Rasmni nomi bo\'yicha izlash', + 'image_all_title' => 'Barcha rasmlarni ko‘rish', + 'image_book_title' => 'Ush kitobga yuklangan barcha rasmlarni ko‘rish', + 'image_page_title' => 'Ush sahifaga yuklangan barcha rasmlarni ko‘rish', + 'image_search_hint' => 'Rasmni nomi bo‘yicha izlash', 'image_uploaded' => ':uploadedDate sanada yuklangan', - 'image_uploaded_by' => 'Uploaded by :userName', - 'image_uploaded_to' => 'Uploaded to :pageLink', - 'image_updated' => 'Updated :updateDate', + 'image_uploaded_by' => ':userName tomonidan yuklangan', + 'image_uploaded_to' => ':pageLink manziliga yuklangan', + 'image_updated' => 'Yangilangan: updateDate', 'image_load_more' => 'Yana yuklash', 'image_image_name' => 'Rasm nomi', - 'image_delete_used' => 'This image is used in the pages below.', - 'image_delete_confirm_text' => 'Are you sure you want to delete this image?', + 'image_delete_used' => 'Ushbu rasm quyidagi sahifalarda qo‘llaniladi.', + 'image_delete_confirm_text' => 'Haqiqatan ham bu rasmni oʻchirib tashlamoqchimisiz?', 'image_select_image' => 'Rasmni tanlash', - 'image_dropzone' => 'Drop images or click here to upload', - 'image_dropzone_drop' => 'Drop images here to upload', - 'images_deleted' => 'Images Deleted', - 'image_preview' => 'Image Preview', - 'image_upload_success' => 'Image uploaded successfully', - 'image_update_success' => 'Image details successfully updated', - 'image_delete_success' => 'Image successfully deleted', - 'image_replace' => 'Replace Image', - 'image_replace_success' => 'Image file successfully updated', + 'image_dropzone' => 'Rasmlarni tortib, tashlang yoki yuklash uchun shu yerni bosing', + 'image_dropzone_drop' => 'Yuklash uchun rasmlarni shu yerga tashlang', + 'images_deleted' => 'Tasvirlar oʻchirildi', + 'image_preview' => 'Tasvirni oldindan ko‘rish', + 'image_upload_success' => 'Rasm muvaffaqiyatli yuklandi', + 'image_update_success' => 'Rasm tafsilotlari muvaffaqiyatli yangilandi', + 'image_delete_success' => 'Rasm muvaffaqiyatli oʻchirildi', + 'image_replace' => 'Rasmni almashtirish', + 'image_replace_success' => 'Rasm fayli muvaffaqiyatli yangilandi', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Kodni tahrirlash', 'code_language' => 'Kod tili', 'code_content' => 'Kod matni', 'code_session_history' => 'Sessiya tarixi', - 'code_save' => 'Kodni saqlash', + 'code_save' => 'Kod saqlanadi', ]; diff --git a/lang/uz/editor.php b/lang/uz/editor.php index 670c1c5e1ac..2ec35045739 100644 --- a/lang/uz/editor.php +++ b/lang/uz/editor.php @@ -7,168 +7,168 @@ */ return [ // General editor terms - 'general' => 'General', - 'advanced' => 'Advanced', - 'none' => 'None', - 'cancel' => 'Cancel', - 'save' => 'Save', - 'close' => 'Close', - 'undo' => 'Undo', - 'redo' => 'Redo', - 'left' => 'Left', - 'center' => 'Center', - 'right' => 'Right', - 'top' => 'Top', - 'middle' => 'Middle', - 'bottom' => 'Bottom', - 'width' => 'Width', - 'height' => 'Height', - 'More' => 'More', - 'select' => 'Select...', + 'general' => 'Umumiy', + 'advanced' => 'Murakkab', + 'none' => 'Yo‘q', + 'cancel' => 'Bekor qilish', + 'save' => 'Saqlash', + 'close' => 'Yopish', + 'undo' => 'Bekor qilish', + 'redo' => 'Qayta qiling', + 'left' => 'Chapga', + 'center' => 'Markaz', + 'right' => 'To‘g‘ri', + 'top' => 'Yuqori', + 'middle' => 'O‘rta', + 'bottom' => 'Pastki', + 'width' => 'Kengligi', + 'height' => 'Balandligi', + 'More' => 'Ko‘proq', + 'select' => 'Tanlang...', // Toolbar - 'formats' => 'Formats', - 'header_large' => 'Large Header', - 'header_medium' => 'Medium Header', - 'header_small' => 'Small Header', - 'header_tiny' => 'Tiny Header', - 'paragraph' => 'Paragraph', - 'blockquote' => 'Blockquote', - 'inline_code' => 'Inline code', - 'callouts' => 'Callouts', - 'callout_information' => 'Information', - 'callout_success' => 'Success', - 'callout_warning' => 'Warning', - 'callout_danger' => 'Danger', - 'bold' => 'Bold', - 'italic' => 'Italic', - 'underline' => 'Underline', - 'strikethrough' => 'Strikethrough', - 'superscript' => 'Superscript', + 'formats' => 'Formatlar', + 'header_large' => 'Katta sarlavha', + 'header_medium' => 'O‘rta sarlavha', + 'header_small' => 'Kichik sarlavha', + 'header_tiny' => 'Kichkina sarlavha', + 'paragraph' => 'Paragraf', + 'blockquote' => 'Blok tirnoq', + 'inline_code' => 'Inline kod', + 'callouts' => 'Qo‘ng‘iroqlar', + 'callout_information' => 'Ma`lumot', + 'callout_success' => 'Muvaffaqiyat', + 'callout_warning' => 'Ogohlantirish', + 'callout_danger' => 'Xavfli', + 'bold' => 'Qalin', + 'italic' => 'Kursiv', + 'underline' => 'tagiga chizish', + 'strikethrough' => 'Chizilgan', + 'superscript' => 'Yuqori yozuv', 'subscript' => 'Subscript', - 'text_color' => 'Text color', - 'custom_color' => 'Custom color', - 'remove_color' => 'Remove color', - 'background_color' => 'Background color', - 'align_left' => 'Align left', - 'align_center' => 'Align center', - 'align_right' => 'Align right', - 'align_justify' => 'Justify', - 'list_bullet' => 'Bullet list', - 'list_numbered' => 'Numbered list', - 'list_task' => 'Task list', - 'indent_increase' => 'Increase indent', - 'indent_decrease' => 'Decrease indent', - 'table' => 'Table', - 'insert_image' => 'Insert image', - 'insert_image_title' => 'Insert/Edit Image', - 'insert_link' => 'Insert/edit link', - 'insert_link_title' => 'Insert/Edit Link', - 'insert_horizontal_line' => 'Insert horizontal line', - 'insert_code_block' => 'Insert code block', - 'edit_code_block' => 'Edit code block', - 'insert_drawing' => 'Insert/edit drawing', - 'drawing_manager' => 'Drawing manager', - 'insert_media' => 'Insert/edit media', - 'insert_media_title' => 'Insert/Edit Media', - 'clear_formatting' => 'Clear formatting', - 'source_code' => 'Source code', - 'source_code_title' => 'Source Code', - 'fullscreen' => 'Fullscreen', - 'image_options' => 'Image options', + 'text_color' => 'Matn rangi', + 'custom_color' => 'Maxsus rang', + 'remove_color' => 'Rangni olib tashlash', + 'background_color' => 'Fon rangi', + 'align_left' => 'Chapga tekislash', + 'align_center' => 'Markazni tekislaash', + 'align_right' => 'O‘ngga tekislaash', + 'align_justify' => 'Ogohlantirish', + 'list_bullet' => 'Belgilar ro‘yxati', + 'list_numbered' => 'Raqamlangan ro‘yxat', + 'list_task' => 'Vazifalar ro‘yxati', + 'indent_increase' => 'Chiziqni oshirish', + 'indent_decrease' => 'Chiziqni kamaytirish', + 'table' => 'Jadval', + 'insert_image' => 'Rasm kiritish', + 'insert_image_title' => 'Tasvirni kiritish/tahrirlash', + 'insert_link' => 'Havolani kiritish/tahrirlash', + 'insert_link_title' => 'Havola kiritish/tahrirlash', + 'insert_horizontal_line' => 'Gorizontal chiziqni kiritish', + 'insert_code_block' => 'Kod blokini kiritish', + 'edit_code_block' => 'Kod blokini tahrirlash', + 'insert_drawing' => 'Chizmani kiritish/tahrirlash', + 'drawing_manager' => 'Chizma menejeri', + 'insert_media' => 'Mediani kiritish/tahrirlash', + 'insert_media_title' => 'Media qo‘shish/tahrirlash', + 'clear_formatting' => 'Formatlashni tozalash', + 'source_code' => 'Manba kodi', + 'source_code_title' => 'Manba kodi', + 'fullscreen' => 'To‘liq ekran', + 'image_options' => 'Rasm variantlari', // Tables - 'table_properties' => 'Table properties', - 'table_properties_title' => 'Table Properties', - 'delete_table' => 'Delete table', - 'insert_row_before' => 'Insert row before', - 'insert_row_after' => 'Insert row after', - 'delete_row' => 'Delete row', - 'insert_column_before' => 'Insert column before', - 'insert_column_after' => 'Insert column after', - 'delete_column' => 'Delete column', - 'table_cell' => 'Cell', - 'table_row' => 'Row', - 'table_column' => 'Column', - 'cell_properties' => 'Cell properties', - 'cell_properties_title' => 'Cell Properties', - 'cell_type' => 'Cell type', - 'cell_type_cell' => 'Cell', - 'cell_scope' => 'Scope', - 'cell_type_header' => 'Header cell', - 'merge_cells' => 'Merge cells', - 'split_cell' => 'Split cell', - 'table_row_group' => 'Row Group', - 'table_column_group' => 'Column Group', - 'horizontal_align' => 'Horizontal align', - 'vertical_align' => 'Vertical align', - 'border_width' => 'Border width', - 'border_style' => 'Border style', - 'border_color' => 'Border color', - 'row_properties' => 'Row properties', - 'row_properties_title' => 'Row Properties', - 'cut_row' => 'Cut row', - 'copy_row' => 'Copy row', - 'paste_row_before' => 'Paste row before', - 'paste_row_after' => 'Paste row after', - 'row_type' => 'Row type', - 'row_type_header' => 'Header', - 'row_type_body' => 'Body', - 'row_type_footer' => 'Footer', - 'alignment' => 'Alignment', - 'cut_column' => 'Cut column', - 'copy_column' => 'Copy column', - 'paste_column_before' => 'Paste column before', - 'paste_column_after' => 'Paste column after', - 'cell_padding' => 'Cell padding', - 'cell_spacing' => 'Cell spacing', - 'caption' => 'Caption', - 'show_caption' => 'Show caption', - 'constrain' => 'Constrain proportions', - 'cell_border_solid' => 'Solid', - 'cell_border_dotted' => 'Dotted', - 'cell_border_dashed' => 'Dashed', - 'cell_border_double' => 'Double', + 'table_properties' => 'Jadval xususiyatlari', + 'table_properties_title' => 'Jadval xususiyatlari', + 'delete_table' => 'Jadvalni o‘chirish', + 'insert_row_before' => 'Oldinga qator kiritish', + 'insert_row_after' => 'Keyingi qatorni kiritish', + 'delete_row' => 'Qatorni o‘chirish', + 'insert_column_before' => 'Oldinga ustunni kiritish', + 'insert_column_after' => 'Ustunni keyin kiritish', + 'delete_column' => 'Ustunni o‘chirish', + 'table_cell' => 'Katak', + 'table_row' => 'Qator', + 'table_column' => 'Ustun', + 'cell_properties' => 'Katak xossalari', + 'cell_properties_title' => 'Katak xususiyatlari', + 'cell_type' => 'Katak turi', + 'cell_type_cell' => 'Katak', + 'cell_scope' => 'Qo‘llash doirasi', + 'cell_type_header' => 'Sarlavha katagi', + 'merge_cells' => 'Kataklarni birlashtirish', + 'split_cell' => 'Bo‘lingan katak', + 'table_row_group' => 'Qator guruhi', + 'table_column_group' => 'Ustunlar guruhi', + 'horizontal_align' => 'Gorizontal tekislash', + 'vertical_align' => 'Vertikal tekislash', + 'border_width' => 'Chegara kengligi', + 'border_style' => 'Chegara uslubi', + 'border_color' => 'Chegara rangi', + 'row_properties' => 'Qator xususiyatlari', + 'row_properties_title' => 'Qator xususiyatlari', + 'cut_row' => 'Qatorni kesib olish', + 'copy_row' => 'Qatorni nusxalash', + 'paste_row_before' => 'Oldinga qatorni joylashtirish', + 'paste_row_after' => 'Keyin qatorni qo‘yish', + 'row_type' => 'Qator turi', + 'row_type_header' => 'Sarlavha', + 'row_type_body' => 'Tana', + 'row_type_footer' => 'Altbilgi', + 'alignment' => 'Hizalama', + 'cut_column' => 'Kesilgan ustun', + 'copy_column' => 'Ustunni nusxalash', + 'paste_column_before' => 'Oldinga ustun qo‘yish', + 'paste_column_after' => 'Ustunni keyin joylashtirish', + 'cell_padding' => 'Katak to‘plami', + 'cell_spacing' => 'Katak oralig‘i', + 'caption' => 'Sarlavha', + 'show_caption' => 'Sarlavhani ko‘rsatish', + 'constrain' => 'Proportionlarni cheklash', + 'cell_border_solid' => 'Qattiq', + 'cell_border_dotted' => 'Nuqtali', + 'cell_border_dashed' => 'Chiziqli', + 'cell_border_double' => 'Ikki marta', 'cell_border_groove' => 'Groove', 'cell_border_ridge' => 'Ridge', - 'cell_border_inset' => 'Inset', - 'cell_border_outset' => 'Outset', - 'cell_border_none' => 'None', - 'cell_border_hidden' => 'Hidden', + 'cell_border_inset' => 'Kiritilgan', + 'cell_border_outset' => 'Boshlanish', + 'cell_border_none' => 'Yo‘q', + 'cell_border_hidden' => 'Yashirin', // Images, links, details/summary & embed - 'source' => 'Source', - 'alt_desc' => 'Alternative description', - 'embed' => 'Embed', - 'paste_embed' => 'Paste your embed code below:', + 'source' => 'Manba', + 'alt_desc' => 'Muqobil tavsif', + 'embed' => 'Oʻrnatish', + 'paste_embed' => 'O‘rnatish kodingizni pastga qo‘ying:', 'url' => 'URL', - 'text_to_display' => 'Text to display', - 'title' => 'Title', - 'open_link' => 'Open link', - 'open_link_in' => 'Open link in...', - 'open_link_current' => 'Current window', - 'open_link_new' => 'New window', - 'remove_link' => 'Remove link', - 'insert_collapsible' => 'Insert collapsible block', - 'collapsible_unwrap' => 'Unwrap', - 'edit_label' => 'Edit label', - 'toggle_open_closed' => 'Toggle open/closed', - 'collapsible_edit' => 'Edit collapsible block', - 'toggle_label' => 'Toggle label', + 'text_to_display' => 'Ko‘rish uchun matn', + 'title' => 'Sarlavha', + 'open_link' => 'Havolani ochish', + 'open_link_in' => 'Havolani ochish...', + 'open_link_current' => 'Joriy oyna', + 'open_link_new' => 'Yangi oyna', + 'remove_link' => 'Havolani olib tashlang', + 'insert_collapsible' => 'Yig‘iladigan blokni joylashtiring', + 'collapsible_unwrap' => 'Oʻramni yech', + 'edit_label' => 'Yorliqni tahrirlash', + 'toggle_open_closed' => 'Ochiq/yopiq o‘tish', + 'collapsible_edit' => 'Yig‘iladigan blokni tahrirlash', + 'toggle_label' => 'Yorliqni almashtirish', // About view - 'about' => 'About the editor', - 'about_title' => 'About the WYSIWYG Editor', - 'editor_license' => 'Editor License & Copyright', - 'editor_tiny_license' => 'This editor is built using :tinyLink which is provided under the MIT license.', - 'editor_tiny_license_link' => 'The copyright and license details of TinyMCE can be found here.', - 'save_continue' => 'Save Page & Continue', - 'callouts_cycle' => '(Keep pressing to toggle through types)', - 'link_selector' => 'Link to content', - 'shortcuts' => 'Shortcuts', - 'shortcut' => 'Shortcut', - 'shortcuts_intro' => 'The following shortcuts are available in the editor:', + 'about' => 'Muharrir haqida', + 'about_title' => 'WYSIWYG muharriri haqida', + 'editor_license' => 'Muharrir litsenziyasi va mualliflik huquqi', + 'editor_tiny_license' => 'Ushbu muharrir MIT litsenziyasi ostida taqdim etilgan :tinyLink yordamida yaratilgan.', + 'editor_tiny_license_link' => 'TinyMCE mualliflik huquqi va litsenziya tafsilotlarini bu yerda topishingiz mumkin.', + 'save_continue' => 'Sahifani saqlang va Davom eting', + 'callouts_cycle' => '(Turlar bo‘yicha o‘tish uchun bosing)', + 'link_selector' => 'Kontentga havola', + 'shortcuts' => 'Qisqa klavishlar', + 'shortcut' => 'Yorliq', + 'shortcuts_intro' => 'Tahrirlovchida quyidagi yorliqlar mavjud:', 'windows_linux' => '(Windows/Linux)', 'mac' => '(Mac)', - 'description' => 'Description', + 'description' => 'Tavsif', ]; diff --git a/lang/uz/entities.php b/lang/uz/entities.php index 672f9a99152..9385670a44e 100644 --- a/lang/uz/entities.php +++ b/lang/uz/entities.php @@ -13,108 +13,108 @@ 'recently_created_books' => 'Oxirgi yaratilgan kitoblar', 'recently_created_shelves' => 'Oxirgi yaratilgan kitobjavonlar', 'recently_update' => 'Oxirgi yangilangan', - 'recently_viewed' => 'Oxirgi ko\'rilgan', + 'recently_viewed' => 'Oxirgi koʻrilgan', 'recent_activity' => 'Oxirgi faolliklar', 'create_now' => 'Yangi yaratish', - 'revisions' => 'Reviziyalar', + 'revisions' => 'Revizionlar', 'meta_revision' => '#:revisionCount reviziya', 'meta_created' => ':timeLength da yaratilgan', 'meta_created_name' => ':user tomonidan :timeLength da yaratilgan', 'meta_updated' => ':timeLength da yangilangan', 'meta_updated_name' => ':user tomonidan :timeLength da yangilangan', - 'meta_owned_name' => 'Egasi :user', - 'meta_reference_page_count' => 'Referenced on :count page|Referenced on :count pages', - 'entity_select' => 'Entity Select', - 'entity_select_lack_permission' => 'You don\'t have the required permissions to select this item', + 'meta_owned_name' => 'Muallif: foydalanuvchi', + 'meta_reference_page_count' => ':count sahifasida havola qilingan :count sahifalarida havola qilingan', + 'entity_select' => 'Ob\'ektni tanlash', + 'entity_select_lack_permission' => 'Sizda bu elementni tanlash uchun kerakli ruxsatlar yo‘q', 'images' => 'Rasmlar', - 'my_recent_drafts' => 'Mening oxirgi qoralamalarim', - 'my_recently_viewed' => 'Mening oxirgi ko\'rganlarim', - 'my_most_viewed_favourites' => 'Mening eng oxirgi sevimliga qo\'shganlarim', + 'my_recent_drafts' => 'Mening keyingi qoralamalarim', + 'my_recently_viewed' => 'Mening keyingi ko‘rganlarim', + 'my_most_viewed_favourites' => 'Mening eng sevimli sevimliga qo‘shganlarim', 'my_favourites' => 'Mening sevimlilarim', - 'no_pages_viewed' => 'Siz hech qaysi sahifani ko\'rmagansiz', + 'no_pages_viewed' => 'Siz hech qaysi sahifani koʻrmagansiz', 'no_pages_recently_created' => 'Siz hali hech qanday sahifa yaratmagansiz', 'no_pages_recently_updated' => 'Siz hali sahifalarni yangilamagansiz', 'export' => 'Eksport', - 'export_html' => 'HTML fayl sifatida', - 'export_pdf' => 'PDF fayl sifatida', - 'export_text' => 'Oddiy matn fayli', - 'export_md' => 'Markdown fayli sifatida', + 'export_html' => 'HTML holatida', + 'export_pdf' => 'PDF holatida', + 'export_text' => 'Oddiy matn holatida', + 'export_md' => 'Markdown fayli holatida', // Permissions and restrictions 'permissions' => 'Huquqlar', - 'permissions_desc' => 'Set permissions here to override the default permissions provided by user roles.', - 'permissions_book_cascade' => 'Permissions set on books will automatically cascade to child chapters and pages, unless they have their own permissions defined.', - 'permissions_chapter_cascade' => 'Permissions set on chapters will automatically cascade to child pages, unless they have their own permissions defined.', - 'permissions_save' => 'Save Permissions', - 'permissions_owner' => 'Egasi', - 'permissions_role_everyone_else' => 'Everyone Else', - 'permissions_role_everyone_else_desc' => 'Set permissions for all roles not specifically overridden.', - 'permissions_role_override' => 'Override permissions for role', - 'permissions_inherit_defaults' => 'Inherit defaults', + 'permissions_desc' => 'Foydalanuvchi rollari tomonidan berilgan standart ruxsatlarni bekor qilish uchun bu yerda ruxsatlarni o‘rnating.', + 'permissions_book_cascade' => 'Kitoblarga oʻrnatilgan ruxsatlar, agar ularda oʻz ruxsatnomalari belgilanmagan boʻlsa, avtomatik ravishda bolalar boʻlimlari va sahifalariga oʻtadi.', + 'permissions_chapter_cascade' => 'Bo\'limlarda o\'rnatilgan ruxsatlar, agar ular o\'zlarining ruxsatlari aniqlanmagan bo\'lsa, avtomatik ravishda pastki sahifalarga o\'tadi.', + 'permissions_save' => 'Ruxsatlarni saqlash', + 'permissions_owner' => 'Muallifi', + 'permissions_role_everyone_else' => 'Boshqa hamma', + 'permissions_role_everyone_else_desc' => 'Maxsus bekor qilinmagan barcha rollar uchun ruxsatlarni o\'rnating.', + 'permissions_role_override' => 'Rol uchun ruxsatlarni bekor qilish', + 'permissions_inherit_defaults' => 'Standartlarni meros qilib olish', // Search - 'search_results' => 'Qidiruv natijalari', - 'search_total_results_found' => ':count result found|:count total results found', + 'search_results' => 'Qidiruv yordam', + 'search_total_results_found' => ':son natija topildi|:topilgan jami natijalar soni', 'search_clear' => 'Qidiruvni tozalash', 'search_no_pages' => 'Qidiruvga mos sahifalar topilmadi', - 'search_for_term' => ':term bo\'yicha qidiruv', - 'search_more' => 'Qo\'shimcha natijalar', - 'search_advanced' => 'Kengaytirilgan qidiruv', + 'search_for_term' => ':term bo‘yicha haqida', + 'search_more' => 'Qo‘shimcha ilova', + 'search_advanced' => 'Kengay olingan', 'search_terms' => 'Qidiruv parametrlari', 'search_content_type' => 'Kontent turi', - 'search_exact_matches' => 'Mos kelgan natijalar', - 'search_tags' => 'Teg qidiruvi', + 'search_exact_matches' => 'Mos kelgan hudud', + 'search_tags' => 'Teg haqida', 'search_options' => 'Opsiyalar', - 'search_viewed_by_me' => 'Men tomonimdan ko\'rilgan', - 'search_not_viewed_by_me' => 'Men tomonimdan ko\'rilmagan', - 'search_permissions_set' => 'Permissions set', - 'search_created_by_me' => 'Created by me', - 'search_updated_by_me' => 'Updated by me', - 'search_owned_by_me' => 'Owned by me', - 'search_date_options' => 'Date Options', - 'search_updated_before' => 'Updated before', - 'search_updated_after' => 'Updated after', - 'search_created_before' => 'Created before', - 'search_created_after' => 'Created after', - 'search_set_date' => 'Set Date', - 'search_update' => 'Update Search', + 'search_viewed_by_me' => 'Men kuzatuvdan ko‘rilgan', + 'search_not_viewed_by_me' => 'Men kuzatuvdan ko‘rilmagan', + 'search_permissions_set' => 'Ruxsatlar oʻrnatilgan', + 'search_created_by_me' => 'Men tomonidan yaratilgan', + 'search_updated_by_me' => 'Men tomonidan yangilangan', + 'search_owned_by_me' => 'Menga tegishli', + 'search_date_options' => 'Sana opsiyalari', + 'search_updated_before' => 'Oldin yangilangan', + 'search_updated_after' => 'Keyin yangilangan', + 'search_created_before' => 'Oldin yaratilgan', + 'search_created_after' => 'keyin yaratilgan', + 'search_set_date' => 'Sana belgilash', + 'search_update' => 'Qidiruvni yangilash', // Shelves - 'shelf' => 'Shelf', - 'shelves' => 'Shelves', - 'x_shelves' => ':count Shelf|:count Shelves', - 'shelves_empty' => 'No shelves have been created', - 'shelves_create' => 'Create New Shelf', - 'shelves_popular' => 'Popular Shelves', - 'shelves_new' => 'New Shelves', - 'shelves_new_action' => 'New Shelf', - 'shelves_popular_empty' => 'The most popular shelves will appear here.', - 'shelves_new_empty' => 'The most recently created shelves will appear here.', - 'shelves_save' => 'Save Shelf', - 'shelves_books' => 'Books on this shelf', - 'shelves_add_books' => 'Add books to this shelf', - 'shelves_drag_books' => 'Drag books below to add them to this shelf', - 'shelves_empty_contents' => 'This shelf has no books assigned to it', - 'shelves_edit_and_assign' => 'Edit shelf to assign books', - 'shelves_edit_named' => 'Edit Shelf :name', - 'shelves_edit' => 'Edit Shelf', - 'shelves_delete' => 'Delete Shelf', - 'shelves_delete_named' => 'Delete Shelf :name', + 'shelf' => 'Raf', + 'shelves' => 'Tokchalar', + 'x_shelves' => ':count Shelf|:count Raflar', + 'shelves_empty' => 'Hech qanday javon yaratilmagan', + 'shelves_create' => 'Yangi javon yaratish', + 'shelves_popular' => 'Mashhur javonlar', + 'shelves_new' => 'Yangi javonlar', + 'shelves_new_action' => 'Yangi javon', + 'shelves_popular_empty' => 'Bu erda eng mashhur javonlar paydo bo\'ladi.', + 'shelves_new_empty' => 'Eng so\'nggi yaratilgan javonlar bu erda paydo bo\'ladi.', + 'shelves_save' => 'Rafni saqlang', + 'shelves_books' => 'Bu javonda kitoblar', + 'shelves_add_books' => 'Ushbu javonga kitob qo\'shing', + 'shelves_drag_books' => 'Kitoblarni ushbu javonga qo‘shish uchun ularni pastga torting', + 'shelves_empty_contents' => 'Bu javonda unga hech qanday kitob ajratilmagan', + 'shelves_edit_and_assign' => 'Kitoblarni belgilash uchun javonni tahrirlang', + 'shelves_edit_named' => 'Rafni tahrirlash: nom', + 'shelves_edit' => 'Rafni tahrirlash', + 'shelves_delete' => 'Rafni o\'chirish', + 'shelves_delete_named' => 'Rafni o\'chirish: nomi', 'shelves_delete_explain' => "This will delete the shelf with the name ':name'. Contained books will not be deleted.", - 'shelves_delete_confirmation' => 'Are you sure you want to delete this shelf?', - 'shelves_permissions' => 'Shelf Permissions', - 'shelves_permissions_updated' => 'Shelf Permissions Updated', - 'shelves_permissions_active' => 'Shelf Permissions Active', - 'shelves_permissions_cascade_warning' => 'Permissions on shelves do not automatically cascade to contained books. This is because a book can exist on multiple shelves. Permissions can however be copied down to child books using the option found below.', - 'shelves_permissions_create' => 'Shelf create permissions are only used for copying permissions to child books using the action below. They do not control the ability to create books.', - 'shelves_copy_permissions_to_books' => 'Copy Permissions to Books', - 'shelves_copy_permissions' => 'Copy Permissions', - 'shelves_copy_permissions_explain' => 'This will apply the current permission settings of this shelf to all books contained within. Before activating, ensure any changes to the permissions of this shelf have been saved.', - 'shelves_copy_permission_success' => 'Shelf permissions copied to :count books', + 'shelves_delete_confirmation' => 'Haqiqatan ham bu javonni oʻchirib tashlamoqchimisiz?', + 'shelves_permissions' => 'Rafga ruxsatlar', + 'shelves_permissions_updated' => 'Rafga ruxsatlar yangilandi', + 'shelves_permissions_active' => 'Rafga ruxsatlar faol', + 'shelves_permissions_cascade_warning' => 'Javonlardagi ruxsatlar avtomatik ravishda saqlangan kitoblarga o\'tmaydi. Buning sababi, kitob bir nechta javonlarda mavjud bo\'lishi mumkin. Ruxsatlarni quyida joylashgan variantdan foydalanib, bolalar kitoblariga nusxalash mumkin.', + 'shelves_permissions_create' => 'Javon yaratish ruxsatlari faqat quyidagi amal yordamida bolalar kitoblariga ruxsatlarni nusxalash uchun ishlatiladi. Ular kitob yaratish qobiliyatini nazorat qilmaydi.', + 'shelves_copy_permissions_to_books' => 'Kitoblarga koʻchirish ruxsatnomalari', + 'shelves_copy_permissions' => 'Nusxa olish uchun ruxsatlar', + 'shelves_copy_permissions_explain' => 'Bu javonning joriy ruxsat sozlamalarini undagi barcha kitoblarga qo‘llaydi. Faollashtirishdan oldin ushbu javon ruxsatnomalariga kiritilgan har qanday o\'zgarishlar saqlanganligiga ishonch hosil qiling.', + 'shelves_copy_permission_success' => 'Raf ruxsatlari :count kitoblariga nusxalandi', // Books - 'book' => 'Book', - 'books' => 'Books', + 'book' => 'Kitob', + 'books' => 'Kitoblar', 'x_books' => ':count Book|:count Books', 'books_empty' => 'Kitob yaratilmagan', 'books_popular' => 'Ommabop kitoblar', @@ -122,311 +122,312 @@ 'books_new' => 'Yangi kitoblar', 'books_new_action' => 'Yangi kitob', 'books_popular_empty' => 'Eng ommabop kitoblar shu yerda aks etadi.', - 'books_new_empty' => 'Eng oxirgi yaratilgan kitoblar bu yerda aks etadi.', - 'books_create' => 'Yangi kitob yaratish', - 'books_delete' => 'Kitobni o\'chirish', - 'books_delete_named' => ':bookName kitobni o\'chirish', - 'books_delete_explain' => 'This will delete the book with the name \':bookName\'. All pages and chapters will be removed.', - 'books_delete_confirmation' => 'Are you sure you want to delete this book?', - 'books_edit' => 'Edit Book', - 'books_edit_named' => 'Edit Book :bookName', - 'books_form_book_name' => 'Book Name', - 'books_save' => 'Save Book', - 'books_permissions' => 'Book Permissions', - 'books_permissions_updated' => 'Book Permissions Updated', - 'books_empty_contents' => 'No pages or chapters have been created for this book.', - 'books_empty_create_page' => 'Create a new page', - 'books_empty_sort_current_book' => 'Sort the current book', - 'books_empty_add_chapter' => 'Add a chapter', - 'books_permissions_active' => 'Book Permissions Active', - 'books_search_this' => 'Search this book', - 'books_navigation' => 'Book Navigation', - 'books_sort' => 'Sort Book Contents', - 'books_sort_desc' => 'Move chapters and pages within a book to reorganise its contents. Other books can be added which allows easy moving of chapters and pages between books.', - 'books_sort_named' => 'Sort Book :bookName', - 'books_sort_name' => 'Sort by Name', - 'books_sort_created' => 'Sort by Created Date', - 'books_sort_updated' => 'Sort by Updated Date', - 'books_sort_chapters_first' => 'Chapters First', - 'books_sort_chapters_last' => 'Chapters Last', - 'books_sort_show_other' => 'Show Other Books', - 'books_sort_save' => 'Save New Order', - 'books_sort_show_other_desc' => 'Add other books here to include them in the sort operation, and allow easy cross-book reorganisation.', - 'books_sort_move_up' => 'Move Up', - 'books_sort_move_down' => 'Move Down', - 'books_sort_move_prev_book' => 'Move to Previous Book', - 'books_sort_move_next_book' => 'Move to Next Book', - 'books_sort_move_prev_chapter' => 'Move Into Previous Chapter', - 'books_sort_move_next_chapter' => 'Move Into Next Chapter', - 'books_sort_move_book_start' => 'Move to Start of Book', - 'books_sort_move_book_end' => 'Move to End of Book', - 'books_sort_move_before_chapter' => 'Move to Before Chapter', - 'books_sort_move_after_chapter' => 'Move to After Chapter', - 'books_copy' => 'Copy Book', - 'books_copy_success' => 'Book successfully copied', + 'books_new_empty' => 'Eng shaxsiy kitoblar bu yerda aks etadi.', + 'books_create' => 'Yangi kitob', + 'books_delete' => 'Kitobni o‘chirish', + 'books_delete_named' => ':bookName kitobni o‘chirish', + 'books_delete_explain' => 'Bu \':bookName\' nomli kitobni o\'chirib tashlaydi. Barcha sahifalar va bo\'limlar o\'chiriladi.', + 'books_delete_confirmation' => 'Haqiqatan ham bu kitobni oʻchirib tashlamoqchimisiz?', + 'books_edit' => 'Kitobni tahrirlash', + 'books_edit_named' => 'Kitobni tahrirlash: kitob nomi', + 'books_form_book_name' => 'Kitob nomi', + 'books_save' => 'Kitobni saqlash', + 'books_permissions' => 'Kitob ruxsatnomalari', + 'books_permissions_updated' => 'Kitob ruxsatnomalari yangilandi', + 'books_empty_contents' => 'Ushbu kitob uchun hech qanday sahifa yoki bob yaratilmagan.', + 'books_empty_create_page' => 'Yangi sahifa yarating', + 'books_empty_sort_current_book' => 'Joriy kitobni tartiblang', + 'books_empty_add_chapter' => 'Bo\'lim qo\'shing', + 'books_permissions_active' => 'Kitob ruxsatlari faol', + 'books_search_this' => 'Ushbu kitobni qidiring', + 'books_navigation' => 'Kitob navigatsiya', + 'books_sort' => 'Kitob tarkibini saralash', + 'books_sort_desc' => 'Kitob mazmunini qayta tartibga solish uchun bo\'lim va sahifalarni ko\'chiring. Kitoblar o\'rtasida bo\'limlar va sahifalarni osongina ko\'chirish imkonini beruvchi boshqa kitoblar qo\'shilishi mumkin.', + 'books_sort_named' => 'Kitobni tartiblash: kitob nomi', + 'books_sort_name' => 'Nomi bo\'yicha saralash', + 'books_sort_created' => 'Yaratilgan sana bo\'yicha saralash', + 'books_sort_updated' => 'Yangilangan sana bo\'yicha saralash', + 'books_sort_chapters_first' => 'Birinchi bo\'limlar', + 'books_sort_chapters_last' => 'Oxirgi bo\'limlar', + 'books_sort_show_other' => 'Boshqa kitoblarni ko\'rsatish', + 'books_sort_save' => 'Yangi buyurtmani saqlash', + 'books_sort_show_other_desc' => 'Boshqa kitoblarni saralash jarayoniga qo\'shish uchun bu yerga qo\'shing va kitoblar o\'rtasida osongina qayta tashkil etishga ruxsat bering.', + 'books_sort_move_up' => 'Yuqoriga harakatlanmoq', + 'books_sort_move_down' => 'Pastga siljiting', + 'books_sort_move_prev_book' => 'Oldingi kitobga o\'tish', + 'books_sort_move_next_book' => 'Keyingi kitobga o\'ting', + 'books_sort_move_prev_chapter' => 'Oldingi bo\'limga o\'tish', + 'books_sort_move_next_chapter' => 'Keyingi bo\'limga o\'tish', + 'books_sort_move_book_start' => 'Kitobning boshiga o\'ting', + 'books_sort_move_book_end' => 'Kitobning oxiriga o\'ting', + 'books_sort_move_before_chapter' => 'Oldingi bo\'limga o\'ting', + 'books_sort_move_after_chapter' => 'Keyingi bo\'limga o\'ting', + 'books_copy' => 'Kitobni nusxalash', + 'books_copy_success' => 'Kitob muvaffaqiyatli nusxalandi', // Chapters - 'chapter' => 'Chapter', - 'chapters' => 'Chapters', - 'x_chapters' => ':count Chapter|:count Chapters', - 'chapters_popular' => 'Popular Chapters', - 'chapters_new' => 'New Chapter', - 'chapters_create' => 'Create New Chapter', - 'chapters_delete' => 'Delete Chapter', - 'chapters_delete_named' => 'Delete Chapter :chapterName', - 'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages that exist within this chapter will also be deleted.', - 'chapters_delete_confirm' => 'Are you sure you want to delete this chapter?', - 'chapters_edit' => 'Edit Chapter', - 'chapters_edit_named' => 'Edit Chapter :chapterName', - 'chapters_save' => 'Save Chapter', - 'chapters_move' => 'Move Chapter', - 'chapters_move_named' => 'Move Chapter :chapterName', - 'chapters_copy' => 'Copy Chapter', - 'chapters_copy_success' => 'Chapter successfully copied', - 'chapters_permissions' => 'Chapter Permissions', - 'chapters_empty' => 'No pages are currently in this chapter.', - 'chapters_permissions_active' => 'Chapter Permissions Active', - 'chapters_permissions_success' => 'Chapter Permissions Updated', - 'chapters_search_this' => 'Search this chapter', - 'chapter_sort_book' => 'Sort Book', + 'chapter' => 'Bob', + 'chapters' => 'Boblar', + 'x_chapters' => ':count bo\'lim|:boblarni hisoblash', + 'chapters_popular' => 'Mashhur bo\'limlar', + 'chapters_new' => 'Yangi bo\'lim', + 'chapters_create' => 'Yangi bo\'lim yaratish', + 'chapters_delete' => 'Bo\'limni o\'chirish', + 'chapters_delete_named' => 'Bo\'limni o\'chirish: bo\'limName', + 'chapters_delete_explain' => 'Bu \':chapterName\' nomli bo\'limni o\'chiradi. Ushbu bo\'limda mavjud bo\'lgan barcha sahifalar ham o\'chiriladi.', + 'chapters_delete_confirm' => 'Haqiqatan ham bu bobni oʻchirib tashlamoqchimisiz?', + 'chapters_edit' => 'Bo\'limni tahrirlash', + 'chapters_edit_named' => 'Bobni tahrirlang: bo\'lim nomi', + 'chapters_save' => 'Bo\'limni saqlash', + 'chapters_move' => 'Bo\'limni ko\'chirish', + 'chapters_move_named' => 'Bo\'limni ko\'chiring: bo\'lim nomi', + 'chapters_copy' => 'Bobni nusxalash', + 'chapters_copy_success' => 'Bob muvaffaqiyatli nusxalandi', + 'chapters_permissions' => 'Bo\'limga ruxsatlar', + 'chapters_empty' => 'Hozirda bu bobda hech qanday sahifa yoʻq.', + 'chapters_permissions_active' => 'Bo\'lim ruxsatlari faol', + 'chapters_permissions_success' => 'Bo\'lim ruxsatlari yangilandi', + 'chapters_search_this' => 'Ushbu bo\'limni qidiring', + 'chapter_sort_book' => 'Tartiblash kitobi', // Pages - 'page' => 'Page', - 'pages' => 'Pages', - 'x_pages' => ':count Page|:count Pages', - 'pages_popular' => 'Popular Pages', - 'pages_new' => 'New Page', - 'pages_attachments' => 'Attachments', - 'pages_navigation' => 'Page Navigation', - 'pages_delete' => 'Delete Page', - 'pages_delete_named' => 'Delete Page :pageName', - 'pages_delete_draft_named' => 'Delete Draft Page :pageName', - 'pages_delete_draft' => 'Delete Draft Page', - 'pages_delete_success' => 'Page deleted', - 'pages_delete_draft_success' => 'Draft page deleted', - 'pages_delete_confirm' => 'Are you sure you want to delete this page?', - 'pages_delete_draft_confirm' => 'Are you sure you want to delete this draft page?', - 'pages_editing_named' => 'Editing Page :pageName', - 'pages_edit_draft_options' => 'Draft Options', - 'pages_edit_save_draft' => 'Save Draft', - 'pages_edit_draft' => 'Edit Page Draft', - 'pages_editing_draft' => 'Editing Draft', - 'pages_editing_page' => 'Editing Page', - 'pages_edit_draft_save_at' => 'Draft saved at ', - 'pages_edit_delete_draft' => 'Delete Draft', - 'pages_edit_delete_draft_confirm' => 'Are you sure you want to delete your draft page changes? All of your changes, since the last full save, will be lost and the editor will be updated with the latest page non-draft save state.', - 'pages_edit_discard_draft' => 'Discard Draft', - 'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor', - 'pages_edit_switch_to_markdown_clean' => '(Clean Content)', - 'pages_edit_switch_to_markdown_stable' => '(Stable Content)', - 'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor', - 'pages_edit_set_changelog' => 'Set Changelog', - 'pages_edit_enter_changelog_desc' => 'Enter a brief description of the changes you\'ve made', - 'pages_edit_enter_changelog' => 'Enter Changelog', - 'pages_editor_switch_title' => 'Switch Editor', - 'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?', - 'pages_editor_switch_consider_following' => 'Consider the following when changing editors:', - 'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.', - 'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.', - 'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.', - 'pages_save' => 'Save Page', - 'pages_title' => 'Page Title', - 'pages_name' => 'Page Name', - 'pages_md_editor' => 'Editor', - 'pages_md_preview' => 'Preview', - 'pages_md_insert_image' => 'Insert Image', - 'pages_md_insert_link' => 'Insert Entity Link', - 'pages_md_insert_drawing' => 'Insert Drawing', - 'pages_md_show_preview' => 'Show preview', - 'pages_md_sync_scroll' => 'Sync preview scroll', - 'pages_drawing_unsaved' => 'Unsaved Drawing Found', - 'pages_drawing_unsaved_confirm' => 'Unsaved drawing data was found from a previous failed drawing save attempt. Would you like to restore and continue editing this unsaved drawing?', - 'pages_not_in_chapter' => 'Page is not in a chapter', - 'pages_move' => 'Move Page', - 'pages_copy' => 'Copy Page', - 'pages_copy_desination' => 'Copy Destination', - 'pages_copy_success' => 'Page successfully copied', - 'pages_permissions' => 'Page Permissions', - 'pages_permissions_success' => 'Page permissions updated', - 'pages_revision' => 'Revision', - 'pages_revisions' => 'Page Revisions', - 'pages_revisions_desc' => 'Listed below are all the past revisions of this page. You can look back upon, compare, and restore old page versions if permissions allow. The full history of the page may not be fully reflected here since, depending on system configuration, old revisions could be auto-deleted.', - 'pages_revisions_named' => 'Page Revisions for :pageName', - 'pages_revision_named' => 'Page Revision for :pageName', - 'pages_revision_restored_from' => 'Restored from #:id; :summary', - 'pages_revisions_created_by' => 'Created By', - 'pages_revisions_date' => 'Revision Date', + 'page' => 'Sahifa', + 'pages' => 'Sahifalar', + 'x_pages' => ':count Page|:Sahifalarni hisoblash', + 'pages_popular' => 'Mashhur sahifalar', + 'pages_new' => 'Yangi sahifa', + 'pages_attachments' => 'Qo\'shimchalar', + 'pages_navigation' => 'Sahifa navigatsiyasi', + 'pages_delete' => 'Sahifani o\'chirish', + 'pages_delete_named' => 'Sahifani o\'chirish :pageName', + 'pages_delete_draft_named' => 'Qoralama sahifani oʻchirish: pageName', + 'pages_delete_draft' => 'Qoralama sahifani oʻchirish', + 'pages_delete_success' => 'Sahifa oʻchirildi', + 'pages_delete_draft_success' => 'Qoralama sahifa oʻchirildi', + 'pages_delete_confirm' => 'Haqiqatan ham bu sahifani oʻchirib tashlamoqchimisiz?', + 'pages_delete_draft_confirm' => 'Haqiqatan ham bu qoralama sahifani oʻchirib tashlamoqchimisiz?', + 'pages_editing_named' => 'Sahifani tahrirlash :pageName', + 'pages_edit_draft_options' => 'Qoralama variantlari', + 'pages_edit_save_draft' => 'Qoralamani saqlash', + 'pages_edit_draft' => 'Sahifa qoralamasini tahrirlash', + 'pages_editing_draft' => 'Qoralamani tahrirlash', + 'pages_editing_page' => 'Tahrirlash sahifasi', + 'pages_edit_draft_save_at' => 'Qoralama saqlangan', + 'pages_edit_delete_draft' => 'Qoralamani oʻchirish', + 'pages_edit_delete_draft_confirm' => 'Haqiqatan ham qoralama sahifadagi oʻzgarishlarni oʻchirib tashlamoqchimisiz? Oxirgi toʻliq saqlashdan buyon barcha oʻzgarishlaringiz yoʻqoladi va muharrir soʻnggi sahifaning qoralama saqlanmagan holati bilan yangilanadi.', + 'pages_edit_discard_draft' => 'Qoralamani bekor qilish', + 'pages_edit_switch_to_markdown' => 'Markdown muharririga o\'ting', + 'pages_edit_switch_to_markdown_clean' => '(Toza tarkib)', + 'pages_edit_switch_to_markdown_stable' => '(Barqaror tarkib)', + 'pages_edit_switch_to_wysiwyg' => 'WYSIWYG muharririga o\'ting', + 'pages_edit_set_changelog' => 'O\'zgarishlar jurnalini o\'rnating', + 'pages_edit_enter_changelog_desc' => 'Siz kiritgan o\'zgarishlarning qisqacha tavsifini kiriting', + 'pages_edit_enter_changelog' => 'O\'zgarishlar jurnaliga kiring', + 'pages_editor_switch_title' => 'Muharrirni almashtirish', + 'pages_editor_switch_are_you_sure' => 'Haqiqatan ham bu sahifa muharririni oʻzgartirmoqchimisiz?', + 'pages_editor_switch_consider_following' => 'Tahrirlovchilarni o\'zgartirishda quyidagilarga e\'tibor bering:', + 'pages_editor_switch_consideration_a' => 'Saqlangandan so\'ng, yangi tahrirlovchi opsiyasidan kelajakdagi muharrirlar, jumladan, tahrirlovchi turini o\'zlari o\'zgartira olmaydiganlar ham foydalanadi.', + 'pages_editor_switch_consideration_b' => 'Bu ma\'lum holatlarda tafsilotlar va sintaksisning yo\'qolishiga olib kelishi mumkin.', + 'pages_editor_switch_consideration_c' => 'Oxirgi saqlashdan keyin kiritilgan teg yoki oʻzgarishlar jurnali oʻzgarishlari bu oʻzgarish davomida saqlanib qolmaydi.', + 'pages_save' => 'Sahifani saqlash', + 'pages_title' => 'Sahifa sarlavhasi', + 'pages_name' => 'Sahifa nomi', + 'pages_md_editor' => 'muharrir', + 'pages_md_preview' => 'Ko‘rib chiqish', + 'pages_md_insert_image' => 'Rasm kiritish', + 'pages_md_insert_link' => 'Ob\'ekt havolasini kiriting', + 'pages_md_insert_drawing' => 'Chizma kiritish', + 'pages_md_show_preview' => 'Ko‘rish', + 'pages_md_sync_scroll' => 'Sinxronizatsiyani oldindan ko\'rish aylantirish', + 'pages_drawing_unsaved' => 'Saqlanmagan chizma topildi', + 'pages_drawing_unsaved_confirm' => 'Saqlanmagan chizma maʼlumotlari avvalgi muvaffaqiyatsiz chizmani saqlash urinishidan topildi. Ushbu saqlanmagan chizmani qayta tiklash va tahrirlashni davom ettirmoqchimisiz?', + 'pages_not_in_chapter' => 'Sahifa bir bobda emas', + 'pages_move' => 'Sahifani ko\'chirish', + 'pages_copy' => 'Sahifani nusxalash', + 'pages_copy_desination' => 'Belgilangan joydan nusxa oling', + 'pages_copy_success' => 'Sahifa muvaffaqiyatli nusxalandi', + 'pages_permissions' => 'Sahifa ruxsatnomalari', + 'pages_permissions_success' => 'Sahifa ruxsatnomalari yangilandi', + 'pages_revision' => 'Qayta ko\'rib chiqish', + 'pages_revisions' => 'Sahifani tahrirlash', + 'pages_revisions_desc' => 'Quyida ushbu sahifaning barcha o\'tgan tahrirlari keltirilgan. Ruxsatlar ruxsat bersa, eski sahifa versiyalarini qayta ko\'rib chiqishingiz, solishtirishingiz va tiklashingiz mumkin. Sahifaning toʻliq tarixi bu yerda toʻliq aks ettirilmasligi mumkin, chunki tizim konfiguratsiyasiga qarab, eski tahrirlar avtomatik ravishda oʻchirilishi mumkin.', + 'pages_revisions_named' => ':pageName uchun sahifa tahrirlari', + 'pages_revision_named' => ':pageName uchun sahifa tahriri', + 'pages_revision_restored_from' => '#:id dan tiklangan; : xulosa', + 'pages_revisions_created_by' => 'Tomonidan yaratilgan', + 'pages_revisions_date' => 'Tekshirish sanasi', 'pages_revisions_number' => '#', - 'pages_revisions_sort_number' => 'Revision Number', - 'pages_revisions_numbered' => 'Revision #:id', - 'pages_revisions_numbered_changes' => 'Revision #:id Changes', - 'pages_revisions_editor' => 'Editor Type', - 'pages_revisions_changelog' => 'Changelog', - 'pages_revisions_changes' => 'Changes', - 'pages_revisions_current' => 'Current Version', - 'pages_revisions_preview' => 'Preview', - 'pages_revisions_restore' => 'Restore', - 'pages_revisions_none' => 'This page has no revisions', - 'pages_copy_link' => 'Copy Link', - 'pages_edit_content_link' => 'Jump to section in editor', - 'pages_pointer_enter_mode' => 'Enter section select mode', - 'pages_pointer_label' => 'Page Section Options', - 'pages_pointer_permalink' => 'Page Section Permalink', - 'pages_pointer_include_tag' => 'Page Section Include Tag', - 'pages_pointer_toggle_link' => 'Permalink mode, Press to show include tag', - 'pages_pointer_toggle_include' => 'Include tag mode, Press to show permalink', - 'pages_permissions_active' => 'Page Permissions Active', - 'pages_initial_revision' => 'Initial publish', - 'pages_references_update_revision' => 'System auto-update of internal links', - 'pages_initial_name' => 'New Page', - 'pages_editing_draft_notification' => 'You are currently editing a draft that was last saved :timeDiff.', - 'pages_draft_edited_notification' => 'This page has been updated by since that time. It is recommended that you discard this draft.', - 'pages_draft_page_changed_since_creation' => 'This page has been updated since this draft was created. It is recommended that you discard this draft or take care not to overwrite any page changes.', + 'pages_revisions_sort_number' => 'Tahrir raqami', + 'pages_revisions_numbered' => 'Tahrir #: identifikator', + 'pages_revisions_numbered_changes' => 'Tahrir #: id o\'zgarishlari', + 'pages_revisions_editor' => 'Muharrir turi', + 'pages_revisions_changelog' => 'O\'zgarishlar jurnali', + 'pages_revisions_changes' => 'O\'zgarishlar', + 'pages_revisions_current' => 'Joriy versiya', + 'pages_revisions_preview' => 'Ko‘rib chiqish', + 'pages_revisions_restore' => 'Qayta tiklash', + 'pages_revisions_none' => 'Bu sahifada hech qanday tahrir yo\'q', + 'pages_copy_link' => 'Havolani nusxalash', + 'pages_edit_content_link' => 'Tahrirlovchida bo\'limga o\'tish', + 'pages_pointer_enter_mode' => 'Bo\'limni tanlash rejimiga kiring', + 'pages_pointer_label' => 'Sahifa bo\'limi parametrlari', + 'pages_pointer_permalink' => 'Sahifa bo\'limi doimiy havola', + 'pages_pointer_include_tag' => 'Sahifa bo\'limi tegni o\'z ichiga oladi', + 'pages_pointer_toggle_link' => 'Doimiy havola rejimi, Oʻz ichiga tegni koʻrsatish uchun bosing', + 'pages_pointer_toggle_include' => 'Teg rejimini qo\'shish, doimiy havolani ko\'rsatish uchun bosing', + 'pages_permissions_active' => 'Sahifa ruxsatlari faol', + 'pages_initial_revision' => 'Dastlabki nashr', + 'pages_references_update_revision' => 'Tizim ichki havolalarni avtomatik yangilash', + 'pages_initial_name' => 'Yangi sahifa', + 'pages_editing_draft_notification' => 'Siz hozirda oxirgi saqlangan qoralamani tahrir qilyapsiz :timeDiff.', + 'pages_draft_edited_notification' => 'Ushbu sahifa o\'sha paytdan beri yangilangan. Ushbu qoralamani bekor qilish tavsiya etiladi.', + 'pages_draft_page_changed_since_creation' => 'Bu qoralama yaratilganidan beri bu sahifa yangilandi. Ushbu qoralamadan voz kechishingiz yoki sahifadagi o\'zgarishlarni qayta yozmaslikka harakat qilishingiz tavsiya etiladi.', 'pages_draft_edit_active' => [ - 'start_a' => ':count users have started editing this page', - 'start_b' => ':userName has started editing this page', - 'time_a' => 'since the page was last updated', - 'time_b' => 'in the last :minCount minutes', - 'message' => ':start :time. Take care not to overwrite each other\'s updates!', + 'start_a' => ':count foydalanuvchilari ushbu sahifani tahrirlashni boshladilar', + 'start_b' => ':userName bu sahifani tahrirlashni boshladi', + 'time_a' => 'sahifa oxirgi yangilanganidan beri', + 'time_b' => 'oxirgi :minCount daqiqada', + 'message' => ':Boshlanish vaqti. Bir-biringizning yangilanishlarini qayta yozmaslikka ehtiyot bo\'ling!', ], - 'pages_draft_discarded' => 'Draft discarded! The editor has been updated with the current page content', - 'pages_draft_deleted' => 'Draft deleted! The editor has been updated with the current page content', - 'pages_specific' => 'Specific Page', - 'pages_is_template' => 'Page Template', + 'pages_draft_discarded' => 'Qoralama bekor qilindi! Tahrirlovchi joriy sahifa mazmuni bilan yangilandi', + 'pages_draft_deleted' => 'Qoralama oʻchirildi! Tahrirlovchi joriy sahifa mazmuni bilan yangilandi', + 'pages_specific' => 'Maxsus sahifa', + 'pages_is_template' => 'Sahifa shabloni', // Editor Sidebar - 'page_tags' => 'Page Tags', - 'chapter_tags' => 'Chapter Tags', - 'book_tags' => 'Book Tags', - 'shelf_tags' => 'Shelf Tags', - 'tag' => 'Tag', + 'toggle_sidebar' => 'Toggle Sidebar', + 'page_tags' => 'Sahifa teglari', + 'chapter_tags' => 'Bo\'lim teglari', + 'book_tags' => 'Kitob teglari', + 'shelf_tags' => 'Raf teglari', + 'tag' => 'teg', 'tags' => 'Tags', - 'tags_index_desc' => 'Tags can be applied to content within the system to apply a flexible form of categorization. Tags can have both a key and value, with the value being optional. Once applied, content can then be queried using the tag name and value.', + 'tags_index_desc' => 'Teglar turkumlashning moslashuvchan shaklini qo\'llash uchun tizim ichidagi tarkibga qo\'llanilishi mumkin. Teglar ham kalitga, ham qiymatga ega bo\'lishi mumkin, qiymat ixtiyoriydir. Qo\'llanilgandan so\'ng, kontent teg nomi va qiymatidan foydalanib so\'ralishi mumkin.', 'tag_name' => 'Tag Name', - 'tag_value' => 'Tag Value (Optional)', + 'tag_value' => 'Teg qiymati (ixtiyoriy)', 'tags_explain' => "Add some tags to better categorise your content. \n You can assign a value to a tag for more in-depth organisation.", - 'tags_add' => 'Add another tag', - 'tags_remove' => 'Remove this tag', - 'tags_usages' => 'Total tag usages', - 'tags_assigned_pages' => 'Assigned to Pages', - 'tags_assigned_chapters' => 'Assigned to Chapters', - 'tags_assigned_books' => 'Assigned to Books', - 'tags_assigned_shelves' => 'Assigned to Shelves', - 'tags_x_unique_values' => ':count unique values', - 'tags_all_values' => 'All values', - 'tags_view_tags' => 'View Tags', - 'tags_view_existing_tags' => 'View existing tags', - 'tags_list_empty_hint' => 'Tags can be assigned via the page editor sidebar or while editing the details of a book, chapter or shelf.', - 'attachments' => 'Attachments', - 'attachments_explain' => 'Upload some files or attach some links to display on your page. These are visible in the page sidebar.', - 'attachments_explain_instant_save' => 'Changes here are saved instantly.', - 'attachments_upload' => 'Upload File', - 'attachments_link' => 'Attach Link', - 'attachments_upload_drop' => 'Alternatively you can drag and drop a file here to upload it as an attachment.', - 'attachments_set_link' => 'Set Link', - 'attachments_delete' => 'Are you sure you want to delete this attachment?', - 'attachments_dropzone' => 'Drop files here to upload', - 'attachments_no_files' => 'No files have been uploaded', - 'attachments_explain_link' => 'You can attach a link if you\'d prefer not to upload a file. This can be a link to another page or a link to a file in the cloud.', - 'attachments_link_name' => 'Link Name', - 'attachment_link' => 'Attachment link', - 'attachments_link_url' => 'Link to file', - 'attachments_link_url_hint' => 'Url of site or file', - 'attach' => 'Attach', - 'attachments_insert_link' => 'Add Attachment Link to Page', - 'attachments_edit_file' => 'Edit File', - 'attachments_edit_file_name' => 'File Name', - 'attachments_edit_drop_upload' => 'Drop files or click here to upload and overwrite', - 'attachments_order_updated' => 'Attachment order updated', - 'attachments_updated_success' => 'Attachment details updated', - 'attachments_deleted' => 'Attachment deleted', - 'attachments_file_uploaded' => 'File successfully uploaded', - 'attachments_file_updated' => 'File successfully updated', - 'attachments_link_attached' => 'Link successfully attached to page', - 'templates' => 'Templates', - 'templates_set_as_template' => 'Page is a template', - 'templates_explain_set_as_template' => 'You can set this page as a template so its contents be utilized when creating other pages. Other users will be able to use this template if they have view permissions for this page.', - 'templates_replace_content' => 'Replace page content', - 'templates_append_content' => 'Append to page content', - 'templates_prepend_content' => 'Prepend to page content', + 'tags_add' => 'Boshqa teg qo\'shing', + 'tags_remove' => 'Ushbu tegni olib tashlang', + 'tags_usages' => 'Jami teg foydalanish', + 'tags_assigned_pages' => 'Sahifalarga tayinlangan', + 'tags_assigned_chapters' => 'Bo\'limlarga tayinlangan', + 'tags_assigned_books' => 'Kitoblarga tayinlangan', + 'tags_assigned_shelves' => 'Raflarga tayinlangan', + 'tags_x_unique_values' => ': noyob qiymatlarni hisoblash', + 'tags_all_values' => 'Barcha qadriyatlar', + 'tags_view_tags' => 'Teglarni ko\'rish', + 'tags_view_existing_tags' => 'Mavjud teglarni ko\'rish', + 'tags_list_empty_hint' => 'Teglar sahifa muharririning yon paneli orqali yoki kitob, bob yoki javon tafsilotlarini tahrirlashda tayinlanishi mumkin.', + 'attachments' => 'Qo\'shimchalar', + 'attachments_explain' => 'Ba\'zi fayllarni yuklang yoki sahifangizda ko\'rsatish uchun havolalarni qo\'shing. Ular sahifaning yon panelida ko\'rinadi.', + 'attachments_explain_instant_save' => 'Bu yerdagi o\'zgarishlar bir zumda saqlanadi.', + 'attachments_upload' => 'Faylni yuklash', + 'attachments_link' => 'Havolani biriktiring', + 'attachments_upload_drop' => 'Shu bilan bir qatorda, faylni ilova sifatida yuklash uchun bu yerga sudrab olib tashlashingiz mumkin.', + 'attachments_set_link' => 'Bog\'lanishni o\'rnatish', + 'attachments_delete' => 'Haqiqatan ham bu biriktirmani oʻchirib tashlamoqchimisiz?', + 'attachments_dropzone' => 'Yuklash uchun fayllarni bu yerga tashlang', + 'attachments_no_files' => 'Hech qanday fayl yuklanmagan', + 'attachments_explain_link' => 'Agar fayl yuklamaslikni xohlasangiz, havolani biriktirishingiz mumkin. Bu boshqa sahifaga havola yoki bulutdagi faylga havola bo\'lishi mumkin.', + 'attachments_link_name' => 'Havola nomi', + 'attachment_link' => 'Qo\'shimcha havola', + 'attachments_link_url' => 'Faylga havola', + 'attachments_link_url_hint' => 'Sayt yoki faylning URL manzili', + 'attach' => 'Biriktiring', + 'attachments_insert_link' => 'Sahifaga havola qo\'shing', + 'attachments_edit_file' => 'Faylni tahrirlash', + 'attachments_edit_file_name' => 'Fayl nomi', + 'attachments_edit_drop_upload' => 'Fayllarni tashlab yuboring yoki yuklash va ustiga yozish uchun shu yerni bosing', + 'attachments_order_updated' => 'Biriktirish tartibi yangilandi', + 'attachments_updated_success' => 'Birikma tafsilotlari yangilandi', + 'attachments_deleted' => 'Biriktirma oʻchirildi', + 'attachments_file_uploaded' => 'Fayl muvaffaqiyatli yuklandi', + 'attachments_file_updated' => 'Fayl muvaffaqiyatli yangilandi', + 'attachments_link_attached' => 'Havola sahifaga muvaffaqiyatli biriktirildi', + 'templates' => 'Shablonlar', + 'templates_set_as_template' => 'Sahifa shablondir', + 'templates_explain_set_as_template' => 'Siz ushbu sahifani shablon sifatida sozlashingiz mumkin, shunda uning mazmuni boshqa sahifalarni yaratishda foydalaniladi. Boshqa foydalanuvchilar ushbu sahifani koʻrish ruxsatiga ega boʻlsa, ushbu andozadan foydalanishlari mumkin.', + 'templates_replace_content' => 'Sahifa tarkibini almashtiring', + 'templates_append_content' => 'Sahifa tarkibiga qo\'shing', + 'templates_prepend_content' => 'Sahifa mazmuniga oldin qo\'ying', // Profile View - 'profile_user_for_x' => 'User for :time', - 'profile_created_content' => 'Created Content', - 'profile_not_created_pages' => ':userName has not created any pages', - 'profile_not_created_chapters' => ':userName has not created any chapters', - 'profile_not_created_books' => ':userName has not created any books', - 'profile_not_created_shelves' => ':userName has not created any shelves', + 'profile_user_for_x' => 'Foydalanuvchi uchun: time', + 'profile_created_content' => 'Yaratilgan tarkib', + 'profile_not_created_pages' => ':userName hech qanday sahifa yaratmagan', + 'profile_not_created_chapters' => ':userName hech qanday bob yaratmagan', + 'profile_not_created_books' => ':userName hech qanday kitob yaratmagan', + 'profile_not_created_shelves' => ':userName hech qanday javon yaratmagan', // Comments - 'comment' => 'Comment', - 'comments' => 'Comments', - 'comment_add' => 'Add Comment', - 'comment_placeholder' => 'Leave a comment here', - 'comment_count' => '{0} No Comments|{1} 1 Comment|[2,*] :count Comments', - 'comment_save' => 'Save Comment', - 'comment_new' => 'New Comment', - 'comment_created' => 'commented :createDiff', - 'comment_updated' => 'Updated :updateDiff by :username', - 'comment_updated_indicator' => 'Updated', - 'comment_deleted_success' => 'Comment deleted', - 'comment_created_success' => 'Comment added', - 'comment_updated_success' => 'Comment updated', - 'comment_delete_confirm' => 'Are you sure you want to delete this comment?', - 'comment_in_reply_to' => 'In reply to :commentId', - 'comment_editor_explain' => 'Here are the comments that have been left on this page. Comments can be added & managed when viewing the saved page.', + 'comment' => 'Izoh', + 'comments' => 'Izohlar', + 'comment_add' => 'Fikr qo\'shish', + 'comment_placeholder' => 'Bu yerda fikr qoldiring', + 'comment_count' => '{0} Sharhlar yoʻq|{1} 1 ta fikr|[2,*] :sharhlar soni', + 'comment_save' => 'Fikrni saqlash', + 'comment_new' => 'Yangi izoh', + 'comment_created' => 'izoh berdi:createDiff', + 'comment_updated' => 'Yangilangan :updateDiff tomonidan :username', + 'comment_updated_indicator' => 'Yangilangan', + 'comment_deleted_success' => 'Fikr o‘chirildi', + 'comment_created_success' => 'Fikr qo\'shildi', + 'comment_updated_success' => 'Fikr yangilandi', + 'comment_delete_confirm' => 'Haqiqatan ham bu fikrni oʻchirib tashlamoqchimisiz?', + 'comment_in_reply_to' => ':commentId ga javoban', + 'comment_editor_explain' => 'Mana shu sahifada qolgan izohlar. Saqlangan sahifani ko\'rishda sharhlar qo\'shilishi va boshqarilishi mumkin.', // Revision - 'revision_delete_confirm' => 'Are you sure you want to delete this revision?', - 'revision_restore_confirm' => 'Are you sure you want to restore this revision? The current page contents will be replaced.', - 'revision_cannot_delete_latest' => 'Cannot delete the latest revision.', + 'revision_delete_confirm' => 'Haqiqatan ham bu tahrirni oʻchirib tashlamoqchimisiz?', + 'revision_restore_confirm' => 'Haqiqatan ham bu tahrirni qayta tiklamoqchimisiz? Joriy sahifa mazmuni almashtiriladi.', + 'revision_cannot_delete_latest' => 'Oxirgi versiyani oʻchirib boʻlmadi.', // Copy view - 'copy_consider' => 'Please consider the below when copying content.', - 'copy_consider_permissions' => 'Custom permission settings will not be copied.', - 'copy_consider_owner' => 'You will become the owner of all copied content.', - 'copy_consider_images' => 'Page image files will not be duplicated & the original images will retain their relation to the page they were originally uploaded to.', - 'copy_consider_attachments' => 'Page attachments will not be copied.', - 'copy_consider_access' => 'A change of location, owner or permissions may result in this content being accessible to those previously without access.', + 'copy_consider' => 'Kontentni nusxalashda quyidagini hisobga oling.', + 'copy_consider_permissions' => 'Maxsus ruxsat sozlamalari nusxalanmaydi.', + 'copy_consider_owner' => 'Siz barcha nusxalangan kontent egasiga aylanasiz.', + 'copy_consider_images' => 'Sahifa tasvirlari fayllari takrorlanmaydi va asl tasvirlar dastlab yuklangan sahifaga aloqasini saqlab qoladi.', + 'copy_consider_attachments' => 'Sahifa qo\'shimchalari nusxalanmaydi.', + 'copy_consider_access' => 'Joylashuv, egasi yoki ruxsatlarning oʻzgarishi ushbu kontentga avval ruxsati boʻlmaganlar uchun ochiq boʻlishiga olib kelishi mumkin.', // Conversions - 'convert_to_shelf' => 'Convert to Shelf', - 'convert_to_shelf_contents_desc' => 'You can convert this book to a new shelf with the same contents. Chapters contained within this book will be converted to new books. If this book contains any pages, that are not in a chapter, this book will be renamed and contain such pages, and this book will become part of the new shelf.', - 'convert_to_shelf_permissions_desc' => 'Any permissions set on this book will be copied to the new shelf and to all new child books that don\'t have their own permissions enforced. Note that permissions on shelves do not auto-cascade to content within, as they do for books.', - 'convert_book' => 'Convert Book', - 'convert_book_confirm' => 'Are you sure you want to convert this book?', - 'convert_undo_warning' => 'This cannot be as easily undone.', - 'convert_to_book' => 'Convert to Book', - 'convert_to_book_desc' => 'You can convert this chapter to a new book with the same contents. Any permissions set on this chapter will be copied to the new book but any inherited permissions, from the parent book, will not be copied which could lead to a change of access control.', - 'convert_chapter' => 'Convert Chapter', - 'convert_chapter_confirm' => 'Are you sure you want to convert this chapter?', + 'convert_to_shelf' => 'Rafga aylantirish', + 'convert_to_shelf_contents_desc' => 'Siz ushbu kitobni bir xil tarkibga ega yangi javonga aylantirishingiz mumkin. Ushbu kitobdagi boblar yangi kitoblarga aylantiriladi. Agar bu kitobda bobda bo\'lmagan sahifalar bo\'lsa, bu kitob nomi o\'zgartiriladi va shunday sahifalarni o\'z ichiga oladi va bu kitob yangi javonning bir qismiga aylanadi.', + 'convert_to_shelf_permissions_desc' => 'Bu kitobga oʻrnatilgan har qanday ruxsatlar yangi javonga va oʻz ruxsatnomalariga ega boʻlmagan barcha yangi bolalar kitoblariga koʻchiriladi. Esda tutingki, javonlardagi ruxsatlar kitoblar uchun bo\'lgani kabi ichki kontentga avtomatik ravishda kaskad bo\'lmaydi.', + 'convert_book' => 'Kitobni aylantirish', + 'convert_book_confirm' => 'Haqiqatan ham bu kitobni aylantirmoqchimisiz?', + 'convert_undo_warning' => 'Buni osonlikcha qaytarib bo\'lmaydi.', + 'convert_to_book' => 'Kitobga aylantirish', + 'convert_to_book_desc' => 'Siz ushbu bobni xuddi shu mazmundagi yangi kitobga aylantirishingiz mumkin. Ushbu bobda oʻrnatilgan har qanday ruxsatnomalar yangi kitobga koʻchiriladi, lekin ota-ona kitobidan meros qilib olingan ruxsatlar koʻchirilmaydi, bu esa kirishni boshqarishni oʻzgartirishga olib kelishi mumkin.', + 'convert_chapter' => 'Bo\'limni aylantirish', + 'convert_chapter_confirm' => 'Haqiqatan ham bu bobni aylantirmoqchimisiz?', // References - 'references' => 'References', - 'references_none' => 'There are no tracked references to this item.', - 'references_to_desc' => 'Shown below are all the known pages in the system that link to this item.', + 'references' => 'Ma\'lumotnomalar', + 'references_none' => 'Bu elementga kuzatilgan havolalar mavjud emas.', + 'references_to_desc' => 'Quyida ushbu elementga bog\'langan tizimdagi barcha ma\'lum sahifalar ko\'rsatilgan.', // Watch Options - 'watch' => 'Watch', - 'watch_title_default' => 'Default Preferences', - 'watch_desc_default' => 'Revert watching to just your default notification preferences.', - 'watch_title_ignore' => 'Ignore', - 'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.', - 'watch_title_new' => 'New Pages', - 'watch_desc_new' => 'Notify when any new page is created within this item.', - 'watch_title_updates' => 'All Page Updates', - 'watch_desc_updates' => 'Notify upon all new pages and page changes.', - 'watch_desc_updates_page' => 'Notify upon all page changes.', - 'watch_title_comments' => 'All Page Updates & Comments', - 'watch_desc_comments' => 'Notify upon all new pages, page changes and new comments.', - 'watch_desc_comments_page' => 'Notify upon page changes and new comments.', - 'watch_change_default' => 'Change default notification preferences', - 'watch_detail_ignore' => 'Ignoring notifications', - 'watch_detail_new' => 'Watching for new pages', - 'watch_detail_updates' => 'Watching new pages and updates', - 'watch_detail_comments' => 'Watching new pages, updates & comments', - 'watch_detail_parent_book' => 'Watching via parent book', - 'watch_detail_parent_book_ignore' => 'Ignoring via parent book', - 'watch_detail_parent_chapter' => 'Watching via parent chapter', - 'watch_detail_parent_chapter_ignore' => 'Ignoring via parent chapter', + 'watch' => 'Tomosha qiling', + 'watch_title_default' => 'Standart sozlamalar', + 'watch_desc_default' => 'Tomosha qilishni faqat birlamchi bildirishnoma sozlamalaringizga qaytaring.', + 'watch_title_ignore' => 'E\'tibor bermaslik', + 'watch_desc_ignore' => 'Barcha bildirishnomalarga, jumladan, foydalanuvchi darajasidagi sozlamalarga e\'tibor bermang.', + 'watch_title_new' => 'Yangi sahifalar', + 'watch_desc_new' => 'Ushbu element ichida har qanday yangi sahifa yaratilganda xabar bering.', + 'watch_title_updates' => 'Barcha sahifa yangilanishlari', + 'watch_desc_updates' => 'Barcha yangi sahifalar va sahifa o\'zgarishlari haqida xabar bering.', + 'watch_desc_updates_page' => 'Barcha sahifa o\'zgarishlari haqida xabar bering.', + 'watch_title_comments' => 'Barcha sahifa yangilanishlari va sharhlar', + 'watch_desc_comments' => 'Barcha yangi sahifalar, sahifa o\'zgarishlari va yangi sharhlar haqida xabar bering.', + 'watch_desc_comments_page' => 'Sahifadagi o\'zgarishlar va yangi sharhlar haqida xabar bering.', + 'watch_change_default' => 'Standart bildirishnoma sozlamalarini o\'zgartiring', + 'watch_detail_ignore' => 'Bildirishnomalarga e\'tibor bermaslik', + 'watch_detail_new' => 'Yangi sahifalarni tomosha qilish', + 'watch_detail_updates' => 'Yangi sahifalar va yangilanishlarni tomosha qilish', + 'watch_detail_comments' => 'Yangi sahifalar, yangilanishlar va sharhlarni tomosha qilish', + 'watch_detail_parent_book' => 'Ota-onalar kitobi orqali tomosha qilish', + 'watch_detail_parent_book_ignore' => 'Ota-ona kitobi orqali e\'tiborsizlik', + 'watch_detail_parent_chapter' => 'Ota-onalar bo\'limi orqali tomosha qilish', + 'watch_detail_parent_chapter_ignore' => 'Ota-bob orqali e\'tiborsizlik', ]; diff --git a/lang/uz/errors.php b/lang/uz/errors.php index 4cde4cea36f..3f1c1116520 100644 --- a/lang/uz/errors.php +++ b/lang/uz/errors.php @@ -5,112 +5,116 @@ return [ // Permissions - 'permission' => 'You do not have permission to access the requested page.', - 'permissionJson' => 'You do not have permission to perform the requested action.', + 'permission' => 'Sizda soʻralgan sahifaga kirish ruxsatingiz yoʻq.', + 'permissionJson' => 'Sizda soʻralgan amalni bajarish uchun ruxsat yoʻq.', // Auth - 'error_user_exists_different_creds' => 'A user with the email :email already exists but with different credentials.', - 'email_already_confirmed' => 'Email has already been confirmed, Try logging in.', - 'email_confirmation_invalid' => 'This confirmation token is not valid or has already been used, Please try registering again.', - 'email_confirmation_expired' => 'The confirmation token has expired, A new confirmation email has been sent.', - 'email_confirmation_awaiting' => 'The email address for the account in use needs to be confirmed', - 'ldap_fail_anonymous' => 'LDAP access failed using anonymous bind', - 'ldap_fail_authed' => 'LDAP access failed using given dn & password details', - 'ldap_extension_not_installed' => 'LDAP PHP extension not installed', - 'ldap_cannot_connect' => 'Cannot connect to ldap server, Initial connection failed', - 'saml_already_logged_in' => 'Already logged in', - 'saml_user_not_registered' => 'The user :name is not registered and automatic registration is disabled', - 'saml_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system', - 'saml_invalid_response_id' => 'The request from the external authentication system is not recognised by a process started by this application. Navigating back after a login could cause this issue.', - 'saml_fail_authed' => 'Login using :system failed, system did not provide successful authorization', - 'oidc_already_logged_in' => 'Already logged in', - 'oidc_user_not_registered' => 'The user :name is not registered and automatic registration is disabled', - 'oidc_no_email_address' => 'Could not find an email address, for this user, in the data provided by the external authentication system', - 'oidc_fail_authed' => 'Login using :system failed, system did not provide successful authorization', - 'social_no_action_defined' => 'No action defined', - 'social_login_bad_response' => "Error received during :socialAccount login: \n:error", - 'social_account_in_use' => 'This :socialAccount account is already in use, Try logging in via the :socialAccount option.', - 'social_account_email_in_use' => 'The email :email is already in use. If you already have an account you can connect your :socialAccount account from your profile settings.', - 'social_account_existing' => 'This :socialAccount is already attached to your profile.', - 'social_account_already_used_existing' => 'This :socialAccount account is already used by another user.', - 'social_account_not_used' => 'This :socialAccount account is not linked to any users. Please attach it in your profile settings. ', - 'social_account_register_instructions' => 'If you do not yet have an account, You can register an account using the :socialAccount option.', - 'social_driver_not_found' => 'Social driver not found', - 'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.', - 'invite_token_expired' => 'This invitation link has expired. You can instead try to reset your account password.', + 'error_user_exists_different_creds' => 'E-pochta manzili boʻlgan foydalanuvchi allaqachon mavjud, ammo hisob ma\'lumotlari boshqacha.', + 'email_already_confirmed' => 'Elektron pochta allaqachon tasdiqlangan, tizimga kiring.', + 'email_confirmation_invalid' => 'Bu tasdiqlovchi token yaroqsiz yoki allaqachon ishlatilgan. Iltimos, qayta roʻyxatdan oʻtishga urinib koʻring.', + 'email_confirmation_expired' => 'Tasdiqlash belgisi muddati tugadi, yangi tasdiqlovchi elektron pochta xabari yuborildi.', + 'email_confirmation_awaiting' => 'Amaldagi hisob uchun elektron pochta manzili tasdiqlanishi kerak', + 'ldap_fail_anonymous' => 'Anonim ulanishdan foydalanib, LDAP ruxsati amalga oshmadi', + 'ldap_fail_authed' => 'Berilgan dn va parol maʼlumotlari yordamida LDAP kirish amalga oshmadi', + 'ldap_extension_not_installed' => 'LDAP PHP kengaytmasi oʻrnatilmagan', + 'ldap_cannot_connect' => 'Ldap serveriga ulanib boʻlmadi, Dastlabki ulanish amalga oshmadi', + 'saml_already_logged_in' => 'Allaqachon tizimga kirgan', + 'saml_user_not_registered' => 'Foydalanuvchi :name roʻyxatdan oʻtmagan va avtomatik roʻyxatdan oʻtish oʻchirilgan', + 'saml_no_email_address' => 'Tashqi autentifikatsiya tizimi tomonidan taqdim etilgan maʼlumotlarda ushbu foydalanuvchi uchun elektron pochta manzili topilmadi', + 'saml_invalid_response_id' => 'Tashqi autentifikatsiya tizimidagi so‘rov ushbu ilova tomonidan boshlangan jarayon tomonidan tan olinmaydi. Kirishdan keyin orqaga qaytish bu muammoga olib kelishi mumkin.', + 'saml_fail_authed' => ':tizim yordamida tizimga kirish amalga oshmadi, tizim muvaffaqiyatli avtorizatsiyani taqdim etmadi', + 'oidc_already_logged_in' => 'Allaqachon tizimga kirgan', + 'oidc_user_not_registered' => 'Foydalanuvchi :name roʻyxatdan oʻtmagan va avtomatik roʻyxatdan oʻtish oʻchirilgan', + 'oidc_no_email_address' => 'Tashqi autentifikatsiya tizimi tomonidan taqdim etilgan maʼlumotlarda ushbu foydalanuvchi uchun elektron pochta manzili topilmadi', + 'oidc_fail_authed' => ':tizim yordamida tizimga kirish amalga oshmadi, tizim muvaffaqiyatli avtorizatsiyani taqdim etmadi', + 'social_no_action_defined' => 'Hech qanday harakat belgilanmagan', + 'social_login_bad_response' => ":socialAccount login paytida xatolik qabul qilindi: \n:xato", + 'social_account_in_use' => 'Bu :socialAccount hisobi allaqachon ishlatilmoqda, :socialAccount opsiyasi orqali tizimga kiring.', + 'social_account_email_in_use' => 'Elektron pochta: elektron pochta allaqachon ishlatilmoqda. Agar sizda allaqachon hisob qaydnomangiz boʻlsa, profil sozlamalaringizdan :socialAccount hisobingizni ulashingiz mumkin.', + 'social_account_existing' => 'Bu :socialAccount allaqachon profilingizga biriktirilgan.', + 'social_account_already_used_existing' => 'Bu :socialAccount hisobi allaqachon boshqa foydalanuvchi tomonidan foydalanilgan.', + 'social_account_not_used' => 'Bu :socialAccount hisobi hech qanday foydalanuvchi bilan bog‘lanmagan. Iltimos, uni profil sozlamalaringizga biriktiring.', + 'social_account_register_instructions' => 'Agar sizda hali hisob qaydnomangiz boʻlmasa, :socialAccount opsiyasidan foydalanib hisob qaydnomangizni roʻyxatdan oʻtkazishingiz mumkin.', + 'social_driver_not_found' => 'Ijtimoiy haydovchi topilmadi', + 'social_driver_not_configured' => 'Sizning :socialAccount ijtimoiy sozlamalaringiz toʻgʻri sozlanmagan.', + 'invite_token_expired' => 'Bu taklif havolasi muddati tugagan. Buning oʻrniga hisobingiz parolini tiklashga urinib koʻrishingiz mumkin.', // System - 'path_not_writable' => 'File path :filePath could not be uploaded to. Ensure it is writable to the server.', - 'cannot_get_image_from_url' => 'Cannot get image from :url', - 'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.', - 'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.', - 'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.', + 'path_not_writable' => 'Fayl yoʻli :filePath faylini yuklab boʻlmadi. Uning serverga yozilishi mumkinligiga ishonch hosil qiling.', + 'cannot_get_image_from_url' => ':url dan rasmni olib boʻlmadi', + 'cannot_create_thumbs' => 'Server eskiz yarata olmaydi. GD PHP kengaytmasi oʻrnatilganligini tekshiring.', + 'server_upload_limit' => 'Server bunday hajmdagi yuklashga ruxsat bermaydi. Kichikroq fayl hajmini sinab koʻring.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', + 'uploaded' => 'Server bunday hajmdagi yuklashga ruxsat bermaydi. Kichikroq fayl hajmini sinab koʻring.', // Drawing & Images - 'image_upload_error' => 'An error occurred uploading the image', - 'image_upload_type_error' => 'The image type being uploaded is invalid', - 'image_upload_replace_type' => 'Image file replacements must be of the same type', - 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', + 'image_upload_error' => 'Rasmni yuklashda xatolik yuz berdi', + 'image_upload_type_error' => 'Yuklanayotgan rasm turi yaroqsiz', + 'image_upload_replace_type' => 'Tasvir faylini almashtirish bir xil turdagi boʻlishi kerak', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', + 'drawing_data_not_found' => 'Chizma maʼlumotlarini yuklab boʻlmadi. Chizma fayli endi mavjud boʻlmasligi yoki unga kirishga ruxsatingiz boʻlmasligi mumkin.', // Attachments - 'attachment_not_found' => 'Attachment not found', - 'attachment_upload_error' => 'An error occurred uploading the attachment file', + 'attachment_not_found' => 'Biriktirma topilmadi', + 'attachment_upload_error' => 'Biriktirilgan faylni yuklashda xatolik yuz berdi', // Pages - 'page_draft_autosave_fail' => 'Failed to save draft. Ensure you have internet connection before saving this page', - 'page_draft_delete_fail' => 'Failed to delete page draft and fetch current page saved content', - 'page_custom_home_deletion' => 'Cannot delete a page while it is set as a homepage', + 'page_draft_autosave_fail' => 'Qoralama saqlanmadi. Ushbu sahifani saqlashdan oldin internet aloqangiz borligiga ishonch hosil qiling', + 'page_draft_delete_fail' => 'Sahifaning qoralamasini o‘chirib bo‘lmadi va joriy sahifada saqlangan kontentni olib bo‘lmadi', + 'page_custom_home_deletion' => 'Bosh sahifa sifatida belgilangan sahifani oʻchirib boʻlmaydi', // Entities - 'entity_not_found' => 'Entity not found', - 'bookshelf_not_found' => 'Shelf not found', - 'book_not_found' => 'Book not found', - 'page_not_found' => 'Page not found', - 'chapter_not_found' => 'Chapter not found', - 'selected_book_not_found' => 'The selected book was not found', - 'selected_book_chapter_not_found' => 'The selected Book or Chapter was not found', - 'guests_cannot_save_drafts' => 'Guests cannot save drafts', + 'entity_not_found' => 'Ob\'ekt topilmadi', + 'bookshelf_not_found' => 'Raf topilmadi', + 'book_not_found' => 'Kitob topilmadi', + 'page_not_found' => 'sahifa topilmadi', + 'chapter_not_found' => 'Boʻlim topilmadi', + 'selected_book_not_found' => 'Tanlangan kitob topilmadi', + 'selected_book_chapter_not_found' => 'Tanlangan kitob yoki bob topilmadi', + 'guests_cannot_save_drafts' => 'Mehmonlar qoralamalarni saqlay olmaydi', // Users - 'users_cannot_delete_only_admin' => 'You cannot delete the only admin', - 'users_cannot_delete_guest' => 'You cannot delete the guest user', + 'users_cannot_delete_only_admin' => 'Siz yagona administratorni oʻchira olmaysiz', + 'users_cannot_delete_guest' => 'Siz mehmon foydalanuvchini oʻchira olmaysiz', // Roles - 'role_cannot_be_edited' => 'This role cannot be edited', - 'role_system_cannot_be_deleted' => 'This role is a system role and cannot be deleted', - 'role_registration_default_cannot_delete' => 'This role cannot be deleted while set as the default registration role', - 'role_cannot_remove_only_admin' => 'This user is the only user assigned to the administrator role. Assign the administrator role to another user before attempting to remove it here.', + 'role_cannot_be_edited' => 'Bu rolni tahrirlab bo‘lmaydi', + 'role_system_cannot_be_deleted' => 'Bu rol tizim rolidir va uni oʻchirib boʻlmaydi', + 'role_registration_default_cannot_delete' => 'Standart ro‘yxatga olish roli sifatida belgilangan bo‘lsa, bu rolni o‘chirib bo‘lmaydi', + 'role_cannot_remove_only_admin' => 'Bu foydalanuvchi administrator roliga tayinlangan yagona foydalanuvchi hisoblanadi. Administrator rolini bu yerda olib tashlashdan oldin boshqa foydalanuvchiga tayinlang.', // Comments - 'comment_list' => 'An error occurred while fetching the comments.', - 'cannot_add_comment_to_draft' => 'You cannot add comments to a draft.', - 'comment_add' => 'An error occurred while adding / updating the comment.', - 'comment_delete' => 'An error occurred while deleting the comment.', - 'empty_comment' => 'Cannot add an empty comment.', + 'comment_list' => 'Sharhlarni olishda xatolik yuz berdi.', + 'cannot_add_comment_to_draft' => 'Siz qoralamaga izoh qo‘sha olmaysiz.', + 'comment_add' => 'Sharh qo‘shish/yangilashda xatolik yuz berdi.', + 'comment_delete' => 'Fikrni o‘chirishda xatolik yuz berdi.', + 'empty_comment' => 'Boʻsh fikr qoʻshib boʻlmaydi.', // Error pages - '404_page_not_found' => 'Page Not Found', - 'sorry_page_not_found' => 'Sorry, The page you were looking for could not be found.', - 'sorry_page_not_found_permission_warning' => 'If you expected this page to exist, you might not have permission to view it.', - 'image_not_found' => 'Image Not Found', - 'image_not_found_subtitle' => 'Sorry, The image file you were looking for could not be found.', - 'image_not_found_details' => 'If you expected this image to exist it might have been deleted.', - 'return_home' => 'Return to home', - 'error_occurred' => 'An Error Occurred', - 'app_down' => ':appName is down right now', - 'back_soon' => 'It will be back up soon.', + '404_page_not_found' => 'Sahifa topilmadi', + 'sorry_page_not_found' => 'Kechirasiz, siz izlayotgan sahifa topilmadi.', + 'sorry_page_not_found_permission_warning' => 'Agar siz ushbu sahifa mavjudligini kutgan boʻlsangiz, uni koʻrish uchun ruxsatingiz boʻlmasligi mumkin.', + 'image_not_found' => 'Rasm topilmadi', + 'image_not_found_subtitle' => 'Kechirasiz, siz izlayotgan rasm fayli topilmadi.', + 'image_not_found_details' => 'Agar siz ushbu rasm mavjudligini kutgan boʻlsangiz, u oʻchirilgan boʻlishi mumkin.', + 'return_home' => 'Uyga qaytish', + 'error_occurred' => 'Xatolik yuz berdi', + 'app_down' => ':appName hozir ishlamayapti', + 'back_soon' => 'Tez orada zaxiralanadi.', // API errors - 'api_no_authorization_found' => 'No authorization token found on the request', - 'api_bad_authorization_format' => 'An authorization token was found on the request but the format appeared incorrect', - 'api_user_token_not_found' => 'No matching API token was found for the provided authorization token', - 'api_incorrect_token_secret' => 'The secret provided for the given used API token is incorrect', - 'api_user_no_api_permission' => 'The owner of the used API token does not have permission to make API calls', - 'api_user_token_expired' => 'The authorization token used has expired', + 'api_no_authorization_found' => 'So‘rovda hech qanday avtorizatsiya belgisi topilmadi', + 'api_bad_authorization_format' => 'So‘rovda avtorizatsiya belgisi topildi, lekin format noto‘g‘ri ko‘rindi', + 'api_user_token_not_found' => 'Taqdim etilgan avtorizatsiya tokeniga mos keladigan API tokeni topilmadi', + 'api_incorrect_token_secret' => 'Foydalanilgan API tokeni uchun berilgan sir notoʻgʻri', + 'api_user_no_api_permission' => 'Foydalanilgan API tokeni egasi API qoʻngʻiroqlarini amalga oshirishga ruxsatga ega emas', + 'api_user_token_expired' => 'Amaldagi avtorizatsiya tokeni muddati tugagan', // Settings & Maintenance - 'maintenance_test_email_failure' => 'Error thrown when sending a test email:', + 'maintenance_test_email_failure' => 'Sinov xatini yuborishda xatolik yuz berdi:', // HTTP errors - 'http_ssr_url_no_match' => 'The URL does not match the configured allowed SSR hosts', + 'http_ssr_url_no_match' => 'URL sozlangan ruxsat etilgan SSR xostlariga mos kelmaydi', ]; diff --git a/lang/uz/notifications.php b/lang/uz/notifications.php index 5539ae9a9d8..46e636c6fda 100644 --- a/lang/uz/notifications.php +++ b/lang/uz/notifications.php @@ -4,23 +4,23 @@ */ return [ - 'new_comment_subject' => 'New comment on page: :pageName', - 'new_comment_intro' => 'A user has commented on a page in :appName:', - 'new_page_subject' => 'New page: :pageName', - 'new_page_intro' => 'A new page has been created in :appName:', - 'updated_page_subject' => 'Updated page: :pageName', - 'updated_page_intro' => 'A page has been updated in :appName:', - 'updated_page_debounce' => 'To prevent a mass of notifications, for a while you won\'t be sent notifications for further edits to this page by the same editor.', + 'new_comment_subject' => ':pageName sahifada yangi izoh', + 'new_comment_intro' => ':appName ichida foydalanuvchi izoh qoldirdi:', + 'new_page_subject' => ':pageName yangi sahifa.', + 'new_page_intro' => ':appName ichida yangi sahifa yaratildi:', + 'updated_page_subject' => ':pageName sahifasi yangilandi', + 'updated_page_intro' => ':appName ichida sahifa yangilandi:', + 'updated_page_debounce' => 'Xabarnomalar koʻp boʻlishining oldini olish uchun bir muncha vaqt oʻsha muharrir tomonidan ushbu sahifaga keyingi tahrirlar haqida bildirishnomalar yuborilmaydi.', - 'detail_page_name' => 'Page Name:', - 'detail_commenter' => 'Commenter:', - 'detail_comment' => 'Comment:', - 'detail_created_by' => 'Created By:', - 'detail_updated_by' => 'Updated By:', + 'detail_page_name' => 'Sahifa nomi:', + 'detail_commenter' => 'Izoh egasi:', + 'detail_comment' => 'Izoh:', + 'detail_created_by' => 'Tomonidan yaratildi:', + 'detail_updated_by' => 'Tomonidan tahrirlandi:', - 'action_view_comment' => 'View Comment', - 'action_view_page' => 'View Page', + 'action_view_comment' => 'Izohlarni ko‘rish', + 'action_view_page' => 'Sahifani ko‘rish', - 'footer_reason' => 'This notification was sent to you because :link cover this type of activity for this item.', - 'footer_reason_link' => 'your notification preferences', + 'footer_reason' => ':link ushbu element uchun ushbu turdagi faoliyatni qamrab olgani uchun sizga bildirishnoma yuborildi.', + 'footer_reason_link' => 'Bildirishnoma sozlamalari', ]; diff --git a/lang/uz/pagination.php b/lang/uz/pagination.php index 428cc86e0db..b3a2e33e0e8 100644 --- a/lang/uz/pagination.php +++ b/lang/uz/pagination.php @@ -6,7 +6,7 @@ */ return [ - 'previous' => '« Avvalgi', - 'next' => 'Keyingi »', + 'previous' => '« Oldingi', + 'next' => 'Kegingi »', ]; diff --git a/lang/uz/passwords.php b/lang/uz/passwords.php index b408f3c2fda..8a7f4cc1899 100644 --- a/lang/uz/passwords.php +++ b/lang/uz/passwords.php @@ -6,10 +6,10 @@ */ return [ - 'password' => 'Passwords must be at least eight characters and match the confirmation.', - 'user' => "We can't find a user with that e-mail address.", - 'token' => 'The password reset token is invalid for this email address.', - 'sent' => 'We have e-mailed your password reset link!', - 'reset' => 'Your password has been reset!', + 'password' => 'Parollar kamida sakkiz belgidan iborat bo\'lishi va tasdiqlashga mos kelishi kerak.', + 'user' => "Bunday elektron pochta manziliga ega foydalanuvchini topa olmadik.", + 'token' => 'Ushbu e-pochta manzili uchun parolni tiklash tokeni yaroqsiz.', + 'sent' => 'Parolni tiklash havolasini elektron pochta orqali yubordik!', + 'reset' => 'Parolingiz qayta tiklandi!', ]; diff --git a/lang/uz/preferences.php b/lang/uz/preferences.php index 118e8ba820f..9dedb0fb545 100644 --- a/lang/uz/preferences.php +++ b/lang/uz/preferences.php @@ -5,29 +5,47 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', - 'shortcuts' => 'Shortcuts', - 'shortcuts_interface' => 'Interface Keyboard Shortcuts', - 'shortcuts_toggle_desc' => 'Here you can enable or disable keyboard system interface shortcuts, used for navigation and actions.', - 'shortcuts_customize_desc' => 'You can customize each of the shortcuts below. Just press your desired key combination after selecting the input for a shortcut.', - 'shortcuts_toggle_label' => 'Keyboard shortcuts enabled', - 'shortcuts_section_navigation' => 'Navigation', - 'shortcuts_section_actions' => 'Common Actions', - 'shortcuts_save' => 'Save Shortcuts', - 'shortcuts_overlay_desc' => 'Note: When shortcuts are enabled a helper overlay is available via pressing "?" which will highlight the available shortcuts for actions currently visible on the screen.', - 'shortcuts_update_success' => 'Shortcut preferences have been updated!', - 'shortcuts_overview_desc' => 'Manage keyboard shortcuts you can use to navigate the system user interface.', + 'shortcuts' => 'Qisqa klavishlar', + 'shortcuts_interface' => 'UI Shortcut Preferences', + 'shortcuts_toggle_desc' => 'Bu erda siz navigatsiya va harakatlar uchun ishlatiladigan klaviatura tizimi interfeysi yorliqlarini yoqishingiz yoki oʻchirishingiz mumkin.', + 'shortcuts_customize_desc' => 'Quyidagi yorliqlarning har birini sozlashingiz mumkin. Qisqa klavish uchun kiritishni tanlagandan soʻng, kerakli tugmalar birikmasini bosing.', + 'shortcuts_toggle_label' => 'Klaviatura yorliqlari yoqilgan', + 'shortcuts_section_navigation' => 'Navigatsiya', + 'shortcuts_section_actions' => 'Umumiy harakatlar', + 'shortcuts_save' => 'Yorliqlarni saqlash', + 'shortcuts_overlay_desc' => 'Eslatma: Yorliqlar yoqilgan boʻlsa, "?" tugmasini bosish orqali yordamchi qatlam mavjud boʻladi. hozirda ekranda koʻrinadigan amallar uchun mavjud yorliqlarni ajratib koʻrsatadi.', + 'shortcuts_update_success' => 'Qisqa klavishlar sozlamalari yangilandi!', + 'shortcuts_overview_desc' => 'Tizim foydalanuvchi interfeysida harakatlanish uchun foydalanishingiz mumkin boʻlgan klaviatura yorliqlarini boshqaring.', - 'notifications' => 'Notification Preferences', - 'notifications_desc' => 'Control the email notifications you receive when certain activity is performed within the system.', - 'notifications_opt_own_page_changes' => 'Notify upon changes to pages I own', - 'notifications_opt_own_page_comments' => 'Notify upon comments on pages I own', - 'notifications_opt_comment_replies' => 'Notify upon replies to my comments', - 'notifications_save' => 'Save Preferences', - 'notifications_update_success' => 'Notification preferences have been updated!', - 'notifications_watched' => 'Watched & Ignored Items', - 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', + 'notifications' => 'Bildirishnoma sozlamalari', + 'notifications_desc' => 'Tizimda muayyan harakatlar amalga oshirilganda qabul qilinadigan elektron pochta xabarnomalarini boshqaring.', + 'notifications_opt_own_page_changes' => 'Menga tegishli boʻlgan sahifalarimdagi oʻzgarishlar haqida xabar bering', + 'notifications_opt_own_page_comments' => 'Menga tegishli sahifalardagi sharhlar haqida xabar bering', + 'notifications_opt_comment_replies' => 'Fikrlarimga javoblarim haqida xabar bering', + 'notifications_save' => 'Afzalliklarni saqlash', + 'notifications_update_success' => 'Bildirishnoma sozlamalari yangilandi!', + 'notifications_watched' => 'Koʻrilgan va e\'tiborga olinmagan narsalar', + 'notifications_watched_desc' => ' Quyida maxsus soat sozlamalari qoʻllaniladigan elementlar mavjud. Bular uchun afzalliklaringizni yangilash uchun elementni koʻring, soʻngra yon paneldagi tomosha parametrlarini toping.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/uz/settings.php b/lang/uz/settings.php index 3b702d29a76..2286ee14d7c 100644 --- a/lang/uz/settings.php +++ b/lang/uz/settings.php @@ -7,270 +7,274 @@ return [ // Common Messages - 'settings' => 'הגדרות', - 'settings_save' => 'שמור הגדרות', - 'system_version' => 'System Version', - 'categories' => 'Categories', + 'settings' => 'Sozlamalar', + 'settings_save' => 'Sozlamalarni saqlash', + 'system_version' => 'Tizim versiyasi', + 'categories' => 'Kategoriyalar', // App Settings - 'app_customization' => 'Customization', - 'app_features_security' => 'Features & Security', - 'app_name' => 'Application Name', - 'app_name_desc' => 'This name is shown in the header and in any system-sent emails.', - 'app_name_header' => 'Show name in header', - 'app_public_access' => 'Public Access', - 'app_public_access_desc' => 'Enabling this option will allow visitors, that are not logged-in, to access content in your BookStack instance.', - 'app_public_access_desc_guest' => 'Access for public visitors can be controlled through the "Guest" user.', - 'app_public_access_toggle' => 'Allow public access', - 'app_public_viewing' => 'Allow public viewing?', - 'app_secure_images' => 'Higher Security Image Uploads', - 'app_secure_images_toggle' => 'Enable higher security image uploads', - 'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.', - 'app_default_editor' => 'Default Page Editor', - 'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.', - 'app_custom_html' => 'Custom HTML Head Content', - 'app_custom_html_desc' => 'Any content added here will be inserted into the bottom of the section of every page. This is handy for overriding styles or adding analytics code.', - 'app_custom_html_disabled_notice' => 'Custom HTML head content is disabled on this settings page to ensure any breaking changes can be reverted.', - 'app_logo' => 'Application Logo', - 'app_logo_desc' => 'This is used in the application header bar, among other areas. This image should be 86px in height. Large images will be scaled down.', - 'app_icon' => 'Application Icon', - 'app_icon_desc' => 'This icon is used for browser tabs and shortcut icons. This should be a 256px square PNG image.', - 'app_homepage' => 'Application Homepage', - 'app_homepage_desc' => 'Select a view to show on the homepage instead of the default view. Page permissions are ignored for selected pages.', - 'app_homepage_select' => 'Select a page', - 'app_footer_links' => 'Footer Links', - 'app_footer_links_desc' => 'Add links to show within the site footer. These will be displayed at the bottom of most pages, including those that do not require login. You can use a label of "trans::" to use system-defined translations. For example: Using "trans::common.privacy_policy" will provide the translated text "Privacy Policy" and "trans::common.terms_of_service" will provide the translated text "Terms of Service".', - 'app_footer_links_label' => 'Link Label', - 'app_footer_links_url' => 'Link URL', - 'app_footer_links_add' => 'Add Footer Link', - 'app_disable_comments' => 'Disable Comments', - 'app_disable_comments_toggle' => 'Disable comments', - 'app_disable_comments_desc' => 'Disables comments across all pages in the application.
Existing comments are not shown.', + 'app_customization' => 'Moslashtirish', + 'app_features_security' => 'Xususiyatlar va xavfsizlik', + 'app_name' => 'Ilova nomi', + 'app_name_desc' => 'Ushbu nom sarlavhada va tizim tomonidan yuborilgan har qanday elektron pochta xabarlarida ko\'rsatilgan.', + 'app_name_header' => 'Sarlavhada nomni ko\'rsatish', + 'app_public_access' => 'Umumiy foydalanish imkoniyati', + 'app_public_access_desc' => 'Ushbu parametr yoqilsa, tizimga kirmagan tashrif buyuruvchilarga BookStack nusxangiz tarkibiga kirishga ruxsat beriladi.', + 'app_public_access_desc_guest' => 'Ommaviy tashrif buyuruvchilar uchun kirishni "Mehmon" foydalanuvchisi orqali boshqarish mumkin.', + 'app_public_access_toggle' => 'Umumiy foydalanishga ruxsat bering', + 'app_public_viewing' => 'Hammaga ochiq koʻrishga ruxsat berilsinmi?', + 'app_secure_images' => 'Yuqori darajadagi xavfsizlik tasvirini yuklash', + 'app_secure_images_toggle' => 'Yuqori darajadagi xavfsizlik tasvirini yuklashni yoqing', + 'app_secure_images_desc' => 'Ishlash sabablariga ko\'ra, barcha tasvirlar ommaviydir. Ushbu parametr tasvir URL manzillari oldiga tasodifiy, taxmin qilish qiyin bo\'lgan qatorni qo\'shadi. Oson kirishni oldini olish uchun katalog indekslari yoqilmaganligiga ishonch hosil qiling.', + 'app_default_editor' => 'Standart sahifa muharriri', + 'app_default_editor_desc' => 'Yangi sahifalarni tahrirlashda sukut bo\'yicha qaysi muharrir ishlatilishini tanlang. Bu ruxsatlar ruxsat etilgan sahifa darajasida bekor qilinishi mumkin.', + 'app_custom_html' => 'Maxsus HTML bosh tarkibi', + 'app_custom_html_desc' => 'Bu yerga qo\'shilgan har qanday kontent har bir sahifaning bo\'limining pastki qismiga kiritiladi. Bu uslublarni bekor qilish yoki analitik kodni qo\'shish uchun qulay.', + 'app_custom_html_disabled_notice' => 'Har qanday buzilgan oʻzgarishlarni qaytarib olish uchun maxsus HTML bosh kontenti ushbu sozlamalar sahifasida oʻchirib qoʻyilgan.', + 'app_logo' => 'Ilova logotipi', + 'app_logo_desc' => 'Bu boshqa sohalar qatorida dastur sarlavhasi satrida ishlatiladi. Ushbu rasm balandligi 86px bo\'lishi kerak. Katta tasvirlar kichraytiriladi.', + 'app_icon' => 'Ilova belgisi', + 'app_icon_desc' => 'Ushbu belgi brauzer yorliqlari va yorliqlar uchun ishlatiladi. Bu 256px kvadrat PNG tasvir bo\'lishi kerak.', + 'app_homepage' => 'Ilova bosh sahifasi', + 'app_homepage_desc' => 'Bosh sahifada standart koʻrinish oʻrniga koʻrsatish uchun koʻrinishni tanlang. Tanlangan sahifalar uchun sahifa ruxsatnomalari hisobga olinmaydi.', + 'app_homepage_select' => 'Sahifani tanlang', + 'app_footer_links' => 'Altbilgi havolalari', + 'app_footer_links_desc' => 'Sayt altbilgisida ko\'rsatish uchun havolalarni qo\'shing. Ular ko\'pchilik sahifalarning pastki qismida, jumladan, kirishni talab qilmaydigan sahifalarda ko\'rsatiladi. Tizim tomonidan belgilangan tarjimalardan foydalanish uchun "trans::" yorlig\'idan foydalanishingiz mumkin. Masalan: "trans::common.privacy_policy" dan foydalanish "Maxfiylik siyosati" tarjima qilingan matnni va "trans::common.terms_of_service" tarjima qilingan "Xizmat shartlari" matnini taqdim etadi.', + 'app_footer_links_label' => 'Havola yorlig\'i', + 'app_footer_links_url' => 'Havola URL', + 'app_footer_links_add' => 'Altbilgi havolasini qo\'shing', + 'app_disable_comments' => 'Fikrlarni o‘chirib qo‘yish', + 'app_disable_comments_toggle' => 'Fikrlarni o\'chirib qo\'ying', + 'app_disable_comments_desc' => 'Ilovaning barcha sahifalarida sharhlarni o\'chirib qo\'yadi.
Mavjud sharhlar ko\'rsatilmaydi.', // Color settings - 'color_scheme' => 'Application Color Scheme', - 'color_scheme_desc' => 'Set the colors to use in the application user interface. Colors can be configured separately for dark and light modes to best fit the theme and ensure legibility.', - 'ui_colors_desc' => 'Set the application primary color and default link color. The primary color is mainly used for the header banner, buttons and interface decorations. The default link color is used for text-based links and actions, both within written content and in the application interface.', - 'app_color' => 'Primary Color', - 'link_color' => 'Default Link Color', - 'content_colors_desc' => 'Set colors for all elements in the page organisation hierarchy. Choosing colors with a similar brightness to the default colors is recommended for readability.', - 'bookshelf_color' => 'Shelf Color', - 'book_color' => 'Book Color', - 'chapter_color' => 'Chapter Color', - 'page_color' => 'Page Color', - 'page_draft_color' => 'Page Draft Color', + 'color_scheme' => 'Ilova rang sxemasi', + 'color_scheme_desc' => 'Ilova foydalanuvchi interfeysida foydalanish uchun ranglarni o\'rnating. Mavzuga eng mos kelishi va tushunarliligini ta\'minlash uchun ranglar qorong\'u va yorug\'lik rejimlari uchun alohida sozlanishi mumkin.', + 'ui_colors_desc' => 'Ilovaning asosiy rangini va standart havola rangini o\'rnating. Asosiy rang asosan sarlavhali banner, tugmalar va interfeys bezaklari uchun ishlatiladi. Standart havola rangi yozma tarkibda ham, ilova interfeysida ham matnga asoslangan havolalar va harakatlar uchun ishlatiladi.', + 'app_color' => 'Asosiy rang', + 'link_color' => 'Standart havola rangi', + 'content_colors_desc' => 'Sahifani tashkil etish ierarxiyasidagi barcha elementlar uchun ranglarni o\'rnating. O\'qish uchun standart ranglarga o\'xshash yorqinlikdagi ranglarni tanlash tavsiya etiladi.', + 'bookshelf_color' => 'Raf rangi', + 'book_color' => 'Kitob rangi', + 'chapter_color' => 'Bo\'lim rangi', + 'page_color' => 'Sahifa rangi', + 'page_draft_color' => 'Sahifa qoralama rangi', // Registration Settings - 'reg_settings' => 'Registration', - 'reg_enable' => 'Enable Registration', - 'reg_enable_toggle' => 'Enable registration', - 'reg_enable_desc' => 'When registration is enabled user will be able to sign themselves up as an application user. Upon registration they are given a single, default user role.', - 'reg_default_role' => 'Default user role after registration', - 'reg_enable_external_warning' => 'The option above is ignored while external LDAP or SAML authentication is active. User accounts for non-existing members will be auto-created if authentication, against the external system in use, is successful.', - 'reg_email_confirmation' => 'Email Confirmation', - 'reg_email_confirmation_toggle' => 'Require email confirmation', - 'reg_confirm_email_desc' => 'If domain restriction is used then email confirmation will be required and this option will be ignored.', - 'reg_confirm_restrict_domain' => 'Domain Restriction', - 'reg_confirm_restrict_domain_desc' => 'Enter a comma separated list of email domains you would like to restrict registration to. Users will be sent an email to confirm their address before being allowed to interact with the application.
Note that users will be able to change their email addresses after successful registration.', - 'reg_confirm_restrict_domain_placeholder' => 'No restriction set', + 'reg_settings' => 'Roʻyxatdan oʻtish', + 'reg_enable' => 'Ro‘yxatdan o‘tishni yoqing', + 'reg_enable_toggle' => 'Ro‘yxatdan o‘tishni yoqish', + 'reg_enable_desc' => 'Ro\'yxatdan o\'tish yoqilganda, foydalanuvchi o\'zini dastur foydalanuvchisi sifatida ro\'yxatdan o\'tkazishi mumkin bo\'ladi. Roʻyxatdan oʻtgandan soʻng ularga yagona, standart foydalanuvchi roli beriladi.', + 'reg_default_role' => 'Ro\'yxatdan o\'tgandan keyin standart foydalanuvchi roli', + 'reg_enable_external_warning' => 'Tashqi LDAP yoki SAML autentifikatsiyasi faol bo\'lganda yuqoridagi parametr e\'tiborga olinmaydi. Mavjud bo\'lmagan a\'zolar uchun foydalanuvchi hisoblari, agar foydalanilayotgan tashqi tizimga qarshi autentifikatsiya muvaffaqiyatli bo\'lsa, avtomatik yaratiladi.', + 'reg_email_confirmation' => 'Elektron pochtani tasdiqlash', + 'reg_email_confirmation_toggle' => 'Elektron pochta orqali tasdiqlashni talab qiling', + 'reg_confirm_email_desc' => 'Agar domen cheklovi ishlatilsa, elektron pochta orqali tasdiqlash talab qilinadi va bu parametr e\'tiborga olinmaydi.', + 'reg_confirm_restrict_domain' => 'Domenni cheklash', + 'reg_confirm_restrict_domain_desc' => 'Roʻyxatdan oʻtishni cheklamoqchi boʻlgan elektron pochta domenlarining vergul bilan ajratilgan roʻyxatini kiriting. Ilova bilan ishlashga ruxsat berishdan oldin foydalanuvchilarga manzillarini tasdiqlash uchun elektron pochta xabari yuboriladi.
E\'tibor bering, foydalanuvchilar muvaffaqiyatli ro\'yxatdan o\'tgandan so\'ng elektron pochta manzillarini o\'zgartirishi mumkin.', + 'reg_confirm_restrict_domain_placeholder' => 'Cheklov oʻrnatilmagan', // Maintenance settings - 'maint' => 'Maintenance', - 'maint_image_cleanup' => 'Cleanup Images', - 'maint_image_cleanup_desc' => 'Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.', - 'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions', - 'maint_image_cleanup_run' => 'Run Cleanup', - 'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?', - 'maint_image_cleanup_success' => ':count potentially unused images found and deleted!', - 'maint_image_cleanup_nothing_found' => 'No unused images found, Nothing deleted!', - 'maint_send_test_email' => 'Send a Test Email', - 'maint_send_test_email_desc' => 'This sends a test email to your email address specified in your profile.', - 'maint_send_test_email_run' => 'Send test email', - 'maint_send_test_email_success' => 'Email sent to :address', - 'maint_send_test_email_mail_subject' => 'Test Email', - 'maint_send_test_email_mail_greeting' => 'Email delivery seems to work!', - 'maint_send_test_email_mail_text' => 'Congratulations! As you received this email notification, your email settings seem to be configured properly.', - 'maint_recycle_bin_desc' => 'Deleted shelves, books, chapters & pages are sent to the recycle bin so they can be restored or permanently deleted. Older items in the recycle bin may be automatically removed after a while depending on system configuration.', - 'maint_recycle_bin_open' => 'Open Recycle Bin', - 'maint_regen_references' => 'Regenerate References', - 'maint_regen_references_desc' => 'This action will rebuild the cross-item reference index within the database. This is usually handled automatically but this action can be useful to index old content or content added via unofficial methods.', - 'maint_regen_references_success' => 'Reference index has been regenerated!', - 'maint_timeout_command_note' => 'Note: This action can take time to run, which can lead to timeout issues in some web environments. As an alternative, this action be performed using a terminal command.', + 'maint' => 'Xizmat', + 'maint_image_cleanup' => 'Tasvirlarni tozalash', + 'maint_image_cleanup_desc' => 'Qaysi rasm va chizmalardan foydalanilayotganini va qaysi rasmlar ortiqcha ekanligini tekshirish uchun sahifa va tahrir tarkibini skanerlaydi. Buni ishga tushirishdan oldin to\'liq ma\'lumotlar bazasi va rasmning zaxira nusxasini yaratganingizga ishonch hosil qiling.', + 'maint_delete_images_only_in_revisions' => 'Faqat eski sahifa tahrirlarida mavjud bo\'lgan rasmlarni ham o\'chiring', + 'maint_image_cleanup_run' => 'Tozalashni ishga tushiring', + 'maint_image_cleanup_warning' => ':potentsial foydalanilmagan rasmlar soni topildi. Haqiqatan ham bu rasmlarni oʻchirib tashlamoqchimisiz?', + 'maint_image_cleanup_success' => ':topilgan va oʻchirilgan potentsial foydalanilmagan rasmlarni hisoblang!', + 'maint_image_cleanup_nothing_found' => 'Foydalanilmayotgan rasmlar topilmadi, hech narsa o\'chirilmadi!', + 'maint_send_test_email' => 'Test elektron pochta xabarini yuboring', + 'maint_send_test_email_desc' => 'Bu sizning profilingizda ko\'rsatilgan elektron pochta manzilingizga test elektron pochta xabarini yuboradi.', + 'maint_send_test_email_run' => 'Test elektron pochta xabarini yuboring', + 'maint_send_test_email_success' => 'Elektron pochta manzili: manzilga yuborildi', + 'maint_send_test_email_mail_subject' => 'Test elektron pochta', + 'maint_send_test_email_mail_greeting' => 'Elektron pochta orqali yetkazib berish ishlayotganga o‘xshaydi!', + 'maint_send_test_email_mail_text' => 'Tabriklaymiz! Ushbu e-pochta xabarnomasini olganingizdan so\'ng, sizning elektron pochta sozlamalaringiz to\'g\'ri sozlanganga o\'xshaydi.', + 'maint_recycle_bin_desc' => 'O\'chirilgan javonlar, kitoblar, boblar va sahifalar qayta tiklanishi yoki butunlay o\'chirilishi uchun axlat qutisiga yuboriladi. Chiqindi qutisidagi eski narsalar tizim konfiguratsiyasiga qarab bir muncha vaqt o\'tgach avtomatik ravishda olib tashlanishi mumkin.', + 'maint_recycle_bin_open' => 'Chiqindi qutisini oching', + 'maint_regen_references' => 'Ma\'lumotnomalarni qayta tiklash', + 'maint_regen_references_desc' => 'Ushbu harakat ma\'lumotlar bazasida o\'zaro mos yozuvlar indeksini qayta quradi. Bu odatda avtomatik tarzda amalga oshiriladi, ammo bu amal eski tarkibni yoki norasmiy usullar orqali qo\'shilgan tarkibni indekslash uchun foydali bo\'lishi mumkin.', + 'maint_regen_references_success' => 'Malumot indeksi qayta tiklandi!', + 'maint_timeout_command_note' => 'Eslatma: Ushbu amalni bajarish uchun vaqt kerak bo\'lishi mumkin, bu esa ba\'zi veb-muhitlarda vaqt tugashiga olib kelishi mumkin. Shu bilan bir qatorda, bu harakat terminal buyrug\'i yordamida amalga oshiriladi.', // Recycle Bin - 'recycle_bin' => 'Recycle Bin', - 'recycle_bin_desc' => 'Here you can restore items that have been deleted or choose to permanently remove them from the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.', - 'recycle_bin_deleted_item' => 'Deleted Item', - 'recycle_bin_deleted_parent' => 'Parent', - 'recycle_bin_deleted_by' => 'Deleted By', - 'recycle_bin_deleted_at' => 'Deletion Time', - 'recycle_bin_permanently_delete' => 'Permanently Delete', - 'recycle_bin_restore' => 'Restore', - 'recycle_bin_contents_empty' => 'The recycle bin is currently empty', - 'recycle_bin_empty' => 'Empty Recycle Bin', - 'recycle_bin_empty_confirm' => 'This will permanently destroy all items in the recycle bin including content contained within each item. Are you sure you want to empty the recycle bin?', - 'recycle_bin_destroy_confirm' => 'This action will permanently delete this item, along with any child elements listed below, from the system and you will not be able to restore this content. Are you sure you want to permanently delete this item?', - 'recycle_bin_destroy_list' => 'Items to be Destroyed', - 'recycle_bin_restore_list' => 'Items to be Restored', - 'recycle_bin_restore_confirm' => 'This action will restore the deleted item, including any child elements, to their original location. If the original location has since been deleted, and is now in the recycle bin, the parent item will also need to be restored.', - 'recycle_bin_restore_deleted_parent' => 'The parent of this item has also been deleted. These will remain deleted until that parent is also restored.', - 'recycle_bin_restore_parent' => 'Restore Parent', - 'recycle_bin_destroy_notification' => 'Deleted :count total items from the recycle bin.', - 'recycle_bin_restore_notification' => 'Restored :count total items from the recycle bin.', + 'recycle_bin' => 'Chiqindi qutisi', + 'recycle_bin_desc' => 'Bu erda siz o\'chirilgan narsalarni qayta tiklashingiz yoki ularni tizimdan butunlay olib tashlashni tanlashingiz mumkin. Ruxsat filtrlari qo\'llaniladigan tizimdagi o\'xshash harakatlar ro\'yxatidan farqli o\'laroq, bu ro\'yxat filtrlanmagan.', + 'recycle_bin_deleted_item' => 'O\'chirilgan element', + 'recycle_bin_deleted_parent' => 'Ota-ona', + 'recycle_bin_deleted_by' => 'tomonidan oʻchirilgan', + 'recycle_bin_deleted_at' => 'O\'chirish vaqti', + 'recycle_bin_permanently_delete' => 'Doimiy o\'chirish', + 'recycle_bin_restore' => 'Qayta tiklash', + 'recycle_bin_contents_empty' => 'Qayta ishlash qutisi hozir bo\'sh', + 'recycle_bin_empty' => 'Chiqindi qutisini bo\'shatish', + 'recycle_bin_empty_confirm' => 'Bu axlat qutisidagi barcha narsalarni, shu jumladan har bir element ichidagi kontentni butunlay yo\'q qiladi. Chiqindi qutisini bo\'shatishga ishonchingiz komilmi?', + 'recycle_bin_destroy_confirm' => 'Bu amal ushbu elementni va quyida sanab o‘tilgan har qanday yordamchi elementlarni tizimdan butunlay o‘chirib tashlaydi va siz ushbu kontentni qayta tiklay olmaysiz. Haqiqatan ham bu elementni butunlay oʻchirib tashlamoqchimisiz?', + 'recycle_bin_destroy_list' => 'Yo\'q qilinishi kerak bo\'lgan narsalar', + 'recycle_bin_restore_list' => 'Qayta tiklanadigan narsalar', + 'recycle_bin_restore_confirm' => 'Bu amal oʻchirilgan elementni, shu jumladan har qanday yordamchi elementlarni asl joyiga tiklaydi. Agar asl joy o\'chirilgan bo\'lsa va hozir axlat qutisida bo\'lsa, asosiy element ham tiklanishi kerak bo\'ladi.', + 'recycle_bin_restore_deleted_parent' => 'Bu elementning ota-onasi ham oʻchirib tashlangan. Ular ota-ona ham tiklanmaguncha oʻchirib tashlanadi.', + 'recycle_bin_restore_parent' => 'Ota-onani tiklash', + 'recycle_bin_destroy_notification' => 'Oʻchirildi: axlat qutisidan jami elementlarni sanash.', + 'recycle_bin_restore_notification' => 'Qayta tiklandi: axlat qutisidagi jami narsalarni sanash.', // Audit Log - 'audit' => 'Audit Log', - 'audit_desc' => 'This audit log displays a list of activities tracked in the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.', - 'audit_event_filter' => 'Event Filter', - 'audit_event_filter_no_filter' => 'No Filter', - 'audit_deleted_item' => 'Deleted Item', - 'audit_deleted_item_name' => 'Name: :name', - 'audit_table_user' => 'User', - 'audit_table_event' => 'Event', - 'audit_table_related' => 'Related Item or Detail', - 'audit_table_ip' => 'IP Address', - 'audit_table_date' => 'Activity Date', - 'audit_date_from' => 'Date Range From', - 'audit_date_to' => 'Date Range To', + 'audit' => 'Audit jurnali', + 'audit_desc' => 'Ushbu audit jurnali tizimda kuzatilgan harakatlar ro\'yxatini ko\'rsatadi. Ruxsat filtrlari qo\'llaniladigan tizimdagi o\'xshash harakatlar ro\'yxatidan farqli o\'laroq, bu ro\'yxat filtrlanmagan.', + 'audit_event_filter' => 'Voqea filtri', + 'audit_event_filter_no_filter' => 'Filtr yo\'q', + 'audit_deleted_item' => 'O\'chirilgan element', + 'audit_deleted_item_name' => 'Ism: :ism', + 'audit_table_user' => 'Foydalanuvchi', + 'audit_table_event' => 'Tadbir', + 'audit_table_related' => 'Tegishli element yoki tafsilotlar', + 'audit_table_ip' => 'IP manzili', + 'audit_table_date' => 'Faoliyat sanasi', + 'audit_date_from' => 'Sana diapazoni boshlab', + 'audit_date_to' => 'Sana oraligʻi', // Role Settings - 'roles' => 'Roles', - 'role_user_roles' => 'User Roles', - 'roles_index_desc' => 'Roles are used to group users & provide system permission to their members. When a user is a member of multiple roles the privileges granted will stack and the user will inherit all abilities.', - 'roles_x_users_assigned' => ':count user assigned|:count users assigned', - 'roles_x_permissions_provided' => ':count permission|:count permissions', - 'roles_assigned_users' => 'Assigned Users', - 'roles_permissions_provided' => 'Provided Permissions', - 'role_create' => 'Create New Role', - 'role_delete' => 'Delete Role', - 'role_delete_confirm' => 'This will delete the role with the name \':roleName\'.', - 'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.', - 'role_delete_no_migration' => "Don't migrate users", - 'role_delete_sure' => 'Are you sure you want to delete this role?', - 'role_edit' => 'Edit Role', - 'role_details' => 'Role Details', - 'role_name' => 'Role Name', - 'role_desc' => 'Short Description of Role', - 'role_mfa_enforced' => 'Requires Multi-Factor Authentication', - 'role_external_auth_id' => 'External Authentication IDs', - 'role_system' => 'System Permissions', - 'role_manage_users' => 'Manage users', - 'role_manage_roles' => 'Manage roles & role permissions', - 'role_manage_entity_permissions' => 'Manage all book, chapter & page permissions', - 'role_manage_own_entity_permissions' => 'Manage permissions on own book, chapter & pages', - 'role_manage_page_templates' => 'Manage page templates', - 'role_access_api' => 'Access system API', - 'role_manage_settings' => 'Manage app settings', - 'role_export_content' => 'Export content', - 'role_editor_change' => 'Change page editor', - 'role_notifications' => 'Receive & manage notifications', - 'role_asset' => 'Asset Permissions', - 'roles_system_warning' => 'Be aware that access to any of the above three permissions can allow a user to alter their own privileges or the privileges of others in the system. Only assign roles with these permissions to trusted users.', - 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', - 'role_asset_admins' => 'Admins are automatically given access to all content but these options may show or hide UI options.', - 'role_asset_image_view_note' => 'This relates to visibility within the image manager. Actual access of uploaded image files will be dependant upon system image storage option.', - 'role_all' => 'All', - 'role_own' => 'Own', - 'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to', - 'role_save' => 'Save Role', - 'role_users' => 'Users in this role', - 'role_users_none' => 'No users are currently assigned to this role', + 'roles' => 'Rollar', + 'role_user_roles' => 'Foydalanuvchi rollari', + 'roles_index_desc' => 'Rollar foydalanuvchilarni guruhlash va ularning a\'zolariga tizim ruxsatini berish uchun ishlatiladi. Agar foydalanuvchi bir nechta rollarning a\'zosi bo\'lsa, berilgan imtiyozlar to\'planadi va foydalanuvchi barcha qobiliyatlarni meros qilib oladi.', + 'roles_x_users_assigned' => ': tayinlangan foydalanuvchini hisoblash|: tayinlangan foydalanuvchilarni hisoblash', + 'roles_x_permissions_provided' => ':count ruxsati|:ruxsat soni', + 'roles_assigned_users' => 'Belgilangan foydalanuvchilar', + 'roles_permissions_provided' => 'Taqdim etilgan ruxsatnomalar', + 'role_create' => 'Yangi rol yaratish', + 'role_delete' => 'Rolni o\'chirish', + 'role_delete_confirm' => 'Bu \':roleName\' nomli rolni o\'chirib tashlaydi.', + 'role_delete_users_assigned' => 'Bu rolga :userCount foydalanuvchilari tayinlangan. Agar siz ushbu roldan foydalanuvchilarni koʻchirmoqchi boʻlsangiz, quyida yangi rolni tanlang.', + 'role_delete_no_migration' => "Don\\'t migrate users", + 'role_delete_sure' => 'Haqiqatan ham bu rolni oʻchirib tashlamoqchimisiz?', + 'role_edit' => 'Rolni tahrirlash', + 'role_details' => 'Rol tafsilotlari', + 'role_name' => 'Rol nomi', + 'role_desc' => 'Rolning qisqacha tavsifi', + 'role_mfa_enforced' => 'Ko\'p faktorli autentifikatsiyani talab qiladi', + 'role_external_auth_id' => 'Tashqi autentifikatsiya identifikatorlari', + 'role_system' => 'Tizim ruxsatnomalari', + 'role_manage_users' => 'Foydalanuvchilarni boshqarish', + 'role_manage_roles' => 'Rol va rol ruxsatnomalarini boshqaring', + 'role_manage_entity_permissions' => 'Barcha kitob, bob va sahifa ruxsatlarini boshqaring', + 'role_manage_own_entity_permissions' => 'Shaxsiy kitob, bob va sahifalar uchun ruxsatlarni boshqaring', + 'role_manage_page_templates' => 'Sahifa shablonlarini boshqarish', + 'role_access_api' => 'Kirish tizimi API', + 'role_manage_settings' => 'Ilova sozlamalarini boshqaring', + 'role_export_content' => 'Kontentni eksport qilish', + 'role_editor_change' => 'Sahifa muharririni o\'zgartirish', + 'role_notifications' => 'Bildirishnomalarni qabul qilish va boshqarish', + 'role_asset' => 'Obyektga ruxsatlar', + 'roles_system_warning' => 'Shuni yodda tutingki, yuqoridagi uchta ruxsatdan birortasiga kirish foydalanuvchiga o\'z imtiyozlarini yoki tizimdagi boshqalarning imtiyozlarini o\'zgartirishi mumkin. Ishonchli foydalanuvchilarga faqat ushbu ruxsatlarga ega rollarni tayinlang.', + 'role_asset_desc' => 'Bu ruxsatlar tizim ichidagi aktivlarga standart kirishni nazorat qiladi. Kitoblar, boblar va sahifalardagi ruxsatlar bu ruxsatlarni bekor qiladi.', + 'role_asset_admins' => 'Administratorlarga avtomatik ravishda barcha kontentga kirish huquqi beriladi, lekin bu parametrlar UI parametrlarini koʻrsatishi yoki yashirishi mumkin.', + 'role_asset_image_view_note' => 'Bu tasvir menejeridagi ko\'rinishga tegishli. Yuklangan rasm fayllariga haqiqiy kirish tizim tasvirini saqlash opsiyasiga bog\'liq bo\'ladi.', + 'role_all' => 'Hammasi', + 'role_own' => 'Shaxsiy', + 'role_controlled_by_asset' => 'Ular yuklangan obyekt tomonidan nazorat qilinadi', + 'role_save' => 'Rolni saqlash', + 'role_users' => 'Ushbu roldagi foydalanuvchilar', + 'role_users_none' => 'Hozirda bu rolga hech qanday foydalanuvchi tayinlanmagan', // Users - 'users' => 'Users', - 'users_index_desc' => 'Create & manage individual user accounts within the system. User accounts are used for login and attribution of content & activity. Access permissions are primarily role-based but user content ownership, among other factors, may also affect permissions & access.', - 'user_profile' => 'User Profile', - 'users_add_new' => 'Add New User', - 'users_search' => 'Search Users', - 'users_latest_activity' => 'Latest Activity', - 'users_details' => 'User Details', - 'users_details_desc' => 'Set a display name and an email address for this user. The email address will be used for logging into the application.', - 'users_details_desc_no_email' => 'Set a display name for this user so others can recognise them.', - 'users_role' => 'User Roles', - 'users_role_desc' => 'Select which roles this user will be assigned to. If a user is assigned to multiple roles the permissions from those roles will stack and they will receive all abilities of the assigned roles.', - 'users_password' => 'User Password', - 'users_password_desc' => 'Set a password used to log-in to the application. This must be at least 8 characters long.', - 'users_send_invite_text' => 'You can choose to send this user an invitation email which allows them to set their own password otherwise you can set their password yourself.', - 'users_send_invite_option' => 'Send user invite email', - 'users_external_auth_id' => 'External Authentication ID', - 'users_external_auth_id_desc' => 'This is the ID used to match this user when communicating with your external authentication system.', - 'users_password_warning' => 'Only fill the below if you would like to change your password.', - 'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.', - 'users_delete' => 'Delete User', - 'users_delete_named' => 'Delete user :userName', - 'users_delete_warning' => 'This will fully delete this user with the name \':userName\' from the system.', - 'users_delete_confirm' => 'Are you sure you want to delete this user?', - 'users_migrate_ownership' => 'Migrate Ownership', - 'users_migrate_ownership_desc' => 'Select a user here if you want another user to become the owner of all items currently owned by this user.', - 'users_none_selected' => 'No user selected', - 'users_edit' => 'Edit User', - 'users_edit_profile' => 'Edit Profile', - 'users_avatar' => 'User Avatar', - 'users_avatar_desc' => 'Select an image to represent this user. This should be approx 256px square.', - 'users_preferred_language' => 'Preferred Language', - 'users_preferred_language_desc' => 'This option will change the language used for the user-interface of the application. This will not affect any user-created content.', - 'users_social_accounts' => 'Social Accounts', - 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not revoke previously authorized access. Revoke access from your profile settings on the connected social account.', - 'users_social_connect' => 'Connect Account', - 'users_social_disconnect' => 'Disconnect Account', - 'users_social_connected' => ':socialAccount account was successfully attached to your profile.', - 'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.', - 'users_api_tokens' => 'API Tokens', - 'users_api_tokens_none' => 'No API tokens have been created for this user', - 'users_api_tokens_create' => 'Create Token', - 'users_api_tokens_expires' => 'Expires', - 'users_api_tokens_docs' => 'API Documentation', - 'users_mfa' => 'Multi-Factor Authentication', - 'users_mfa_desc' => 'Setup multi-factor authentication as an extra layer of security for your user account.', - 'users_mfa_x_methods' => ':count method configured|:count methods configured', - 'users_mfa_configure' => 'Configure Methods', + 'users' => 'Foydalanuvchilar', + 'users_index_desc' => 'Tizimda individual foydalanuvchi hisoblarini yarating va boshqaring. Foydalanuvchi hisoblari tizimga kirish va kontent va faoliyat atributi uchun ishlatiladi. Kirish ruxsatlari asosan rolga asoslangan, lekin foydalanuvchi kontentiga egalik, boshqa omillar qatori, ruxsat va kirishga ham ta\'sir qilishi mumkin.', + 'user_profile' => 'Foydalanuvchi profili', + 'users_add_new' => 'Yangi foydalanuvchi qo\'shish', + 'users_search' => 'Foydalanuvchilarni qidirish', + 'users_latest_activity' => 'Oxirgi faoliyat', + 'users_details' => 'Foydalanuvchi tafsilotlari', + 'users_details_desc' => 'Ushbu foydalanuvchi uchun ko\'rsatiladigan nom va elektron pochta manzilini o\'rnating. Elektron pochta manzili ilovaga kirish uchun ishlatiladi.', + 'users_details_desc_no_email' => 'Bu foydalanuvchini boshqalar tanib olishi uchun ko‘rsatiladigan nomni o‘rnating.', + 'users_role' => 'Foydalanuvchi rollari', + 'users_role_desc' => 'Ushbu foydalanuvchi qaysi rollarga tayinlanishini tanlang. Agar foydalanuvchi bir nechta rollarga tayinlangan bo\'lsa, bu rollarning ruxsatlari yig\'iladi va ular tayinlangan rollarning barcha qobiliyatlarini oladi.', + 'users_password' => 'Foydalanuvchi paroli', + 'users_password_desc' => 'Ilovaga kirish uchun ishlatiladigan parolni o\'rnating. Bu kamida 8 ta belgidan iborat boʻlishi kerak.', + 'users_send_invite_text' => 'Siz ushbu foydalanuvchiga oʻz parolini oʻrnatishga imkon beruvchi taklif e-pochtasini yuborishni tanlashingiz mumkin, aks holda uning parolini oʻzingiz belgilashingiz mumkin.', + 'users_send_invite_option' => 'Foydalanuvchi taklifnomasini elektron pochta orqali yuboring', + 'users_external_auth_id' => 'Tashqi autentifikatsiya identifikatori', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', + 'users_system_public' => 'Bu foydalanuvchi sizning misolingizga tashrif buyurgan har qanday mehmon foydalanuvchilarini ifodalaydi. U tizimga kirish uchun ishlatilmaydi, lekin avtomatik ravishda tayinlanadi.', + 'users_delete' => 'Foydalanuvchini oʻchirish', + 'users_delete_named' => 'Foydalanuvchini o\'chirish :userName', + 'users_delete_warning' => 'Bu \':userName\' nomli foydalanuvchini tizimdan butunlay o\'chirib tashlaydi.', + 'users_delete_confirm' => 'Bu foydalanuvchini oʻchirib tashlamoqchimisiz?', + 'users_migrate_ownership' => 'Egalikni ko‘chirish', + 'users_migrate_ownership_desc' => 'Agar boshqa foydalanuvchi ushbu foydalanuvchiga tegishli barcha elementlarning egasi boʻlishini istasangiz, bu yerda foydalanuvchini tanlang.', + 'users_none_selected' => 'Hech qanday foydalanuvchi tanlanmagan', + 'users_edit' => 'Foydalanuvchini tahrirlash', + 'users_edit_profile' => 'Profilni tahrirlash', + 'users_avatar' => 'Foydalanuvchi avatar', + 'users_avatar_desc' => 'Ushbu foydalanuvchini ifodalash uchun rasmni tanlang. Bu taxminan 256px kvadrat bo\'lishi kerak.', + 'users_preferred_language' => 'Afzal til', + 'users_preferred_language_desc' => 'Ushbu parametr ilovaning foydalanuvchi interfeysi uchun ishlatiladigan tilni o\'zgartiradi. Bu foydalanuvchi tomonidan yaratilgan kontentga ta\'sir qilmaydi.', + 'users_social_accounts' => 'Ijtimoiy hisoblar', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', + 'users_social_accounts_info' => 'Bu yerda siz tezroq va osonroq kirish uchun boshqa hisoblaringizni ulashingiz mumkin. Bu yerda hisobni uzish avval ruxsat berilgan ruxsatni bekor qilmaydi. Ulangan ijtimoiy hisob qaydnomangizdagi profil sozlamalaringizdan kirishni bekor qiling.', + 'users_social_connect' => 'Hisobni ulash', + 'users_social_disconnect' => 'Hisobni o\'chirish', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', + 'users_social_connected' => ':socialAccount hisobi profilingizga muvaffaqiyatli biriktirildi.', + 'users_social_disconnected' => ':socialAccount hisobi profilingizdan muvaffaqiyatli uzildi.', + 'users_api_tokens' => 'API tokenlari', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', + 'users_api_tokens_none' => 'Bu foydalanuvchi uchun API tokenlari yaratilmagan', + 'users_api_tokens_create' => 'Token yaratish', + 'users_api_tokens_expires' => 'Muddati tugaydi', + 'users_api_tokens_docs' => 'API hujjatlari', + 'users_mfa' => 'Ko\'p faktorli autentifikatsiya', + 'users_mfa_desc' => 'Ko\'p faktorli autentifikatsiyani foydalanuvchi hisobingiz uchun qo\'shimcha xavfsizlik qatlami sifatida o\'rnating.', + 'users_mfa_x_methods' => ':count usuli tuzilgan|:count usullari sozlangan', + 'users_mfa_configure' => 'Usullarni sozlash', // API Tokens - 'user_api_token_create' => 'Create API Token', - 'user_api_token_name' => 'Name', - 'user_api_token_name_desc' => 'Give your token a readable name as a future reminder of its intended purpose.', - 'user_api_token_expiry' => 'Expiry Date', - 'user_api_token_expiry_desc' => 'Set a date at which this token expires. After this date, requests made using this token will no longer work. Leaving this field blank will set an expiry 100 years into the future.', - 'user_api_token_create_secret_message' => 'Immediately after creating this token a "Token ID" & "Token Secret" will be generated and displayed. The secret will only be shown a single time so be sure to copy the value to somewhere safe and secure before proceeding.', - 'user_api_token' => 'API Token', + 'user_api_token_create' => 'API tokenini yarating', + 'user_api_token_name' => 'Ism', + 'user_api_token_name_desc' => 'Belgilangan maqsadni kelajakda eslatish uchun o\'qilishi mumkin bo\'lgan nom bering.', + 'user_api_token_expiry' => 'Quyidagi sanagacha foydalanilsin', + 'user_api_token_expiry_desc' => 'Ushbu tokenning amal qilish muddati tugash sanasini belgilang. Bu sanadan keyin ushbu token yordamida qilingan soʻrovlar ishlamaydi. Bu maydonni boʻsh qoldirish kelajakda 100 yil oʻtib muddatini belgilaydi.', + 'user_api_token_create_secret_message' => 'Ushbu token yaratilgandan so\'ng darhol "Token ID" va "Token Secret" yaratiladi va ko\'rsatiladi. Sir faqat bir marta ko\'rsatiladi, shuning uchun davom etishdan oldin qiymatni xavfsiz va xavfsiz joyga nusxalashni unutmang.', + 'user_api_token' => 'API tokeni', 'user_api_token_id' => 'Token ID', - 'user_api_token_id_desc' => 'This is a non-editable system generated identifier for this token which will need to be provided in API requests.', - 'user_api_token_secret' => 'Token Secret', - 'user_api_token_secret_desc' => 'This is a system generated secret for this token which will need to be provided in API requests. This will only be displayed this one time so copy this value to somewhere safe and secure.', - 'user_api_token_created' => 'Token created :timeAgo', - 'user_api_token_updated' => 'Token updated :timeAgo', - 'user_api_token_delete' => 'Delete Token', - 'user_api_token_delete_warning' => 'This will fully delete this API token with the name \':tokenName\' from the system.', - 'user_api_token_delete_confirm' => 'Are you sure you want to delete this API token?', + 'user_api_token_id_desc' => 'Bu token uchun tahrir qilib boʻlmaydigan tizim tomonidan yaratilgan identifikator boʻlib, API soʻrovlarida taqdim etilishi kerak.', + 'user_api_token_secret' => 'Token siri', + 'user_api_token_secret_desc' => 'Bu API so\'rovlarida taqdim etilishi kerak bo\'lgan ushbu token uchun yaratilgan tizim siridir. Bu faqat bir marta ko\'rsatiladi, shuning uchun bu qiymatni xavfsiz va xavfsiz joyga nusxalang.', + 'user_api_token_created' => 'Token yaratilgan: timeAgo', + 'user_api_token_updated' => 'Token yangilandi: timeAgo', + 'user_api_token_delete' => 'Tokenni oʻchirish', + 'user_api_token_delete_warning' => 'Bu \':tokenName\' nomli ushbu API tokenini tizimdan butunlay oʻchirib tashlaydi.', + 'user_api_token_delete_confirm' => 'Haqiqatan ham ushbu API tokenini oʻchirib tashlamoqchimisiz?', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_index_desc' => 'Webhooks are a way to send data to external URLs when certain actions and events occur within the system which allows event-based integration with external platforms such as messaging or notification systems.', - 'webhooks_x_trigger_events' => ':count trigger event|:count trigger events', - 'webhooks_create' => 'Create New Webhook', - 'webhooks_none_created' => 'No webhooks have yet been created.', - 'webhooks_edit' => 'Edit Webhook', - 'webhooks_save' => 'Save Webhook', - 'webhooks_details' => 'Webhook Details', - 'webhooks_details_desc' => 'Provide a user friendly name and a POST endpoint as a location for the webhook data to be sent to.', - 'webhooks_events' => 'Webhook Events', - 'webhooks_events_desc' => 'Select all the events that should trigger this webhook to be called.', - 'webhooks_events_warning' => 'Keep in mind that these events will be triggered for all selected events, even if custom permissions are applied. Ensure that use of this webhook won\'t expose confidential content.', - 'webhooks_events_all' => 'All system events', - 'webhooks_name' => 'Webhook Name', - 'webhooks_timeout' => 'Webhook Request Timeout (Seconds)', - 'webhooks_endpoint' => 'Webhook Endpoint', - 'webhooks_active' => 'Webhook Active', - 'webhook_events_table_header' => 'Events', - 'webhooks_delete' => 'Delete Webhook', - 'webhooks_delete_warning' => 'This will fully delete this webhook, with the name \':webhookName\', from the system.', - 'webhooks_delete_confirm' => 'Are you sure you want to delete this webhook?', - 'webhooks_format_example' => 'Webhook Format Example', - 'webhooks_format_example_desc' => 'Webhook data is sent as a POST request to the configured endpoint as JSON following the format below. The "related_item" and "url" properties are optional and will depend on the type of event triggered.', - 'webhooks_status' => 'Webhook Status', - 'webhooks_last_called' => 'Last Called:', - 'webhooks_last_errored' => 'Last Errored:', - 'webhooks_last_error_message' => 'Last Error Message:', + 'webhooks' => 'Webhuklar', + 'webhooks_index_desc' => 'Veb-huklar tizim ichida ma\'lum harakatlar va hodisalar sodir bo\'lganda tashqi URL manzillariga ma\'lumotlarni yuborish usuli bo\'lib, xabar almashish yoki bildirishnoma tizimlari kabi tashqi platformalar bilan voqealarga asoslangan integratsiyani ta\'minlaydi.', + 'webhooks_x_trigger_events' => ':count trigger hodisasi|: count trigger voqealari', + 'webhooks_create' => 'Yangi Webhook yaratish', + 'webhooks_none_created' => 'Hali hech qanday vebhuk yaratilmagan.', + 'webhooks_edit' => 'Webhook-ni tahrirlash', + 'webhooks_save' => 'Webhook-ni saqlang', + 'webhooks_details' => 'Webhook tafsilotlari', + 'webhooks_details_desc' => 'Webhook ma\'lumotlari yuboriladigan joy sifatida foydalanuvchiga qulay nom va POST so\'nggi nuqtasini taqdim eting.', + 'webhooks_events' => 'Webhook voqealari', + 'webhooks_events_desc' => 'Ushbu veb-hukni chaqirishi kerak bo\'lgan barcha hodisalarni tanlang.', + 'webhooks_events_warning' => 'Shuni esda tutingki, bu hodisalar, hatto maxsus ruxsatlar qo\'llanilsa ham, tanlangan barcha hodisalar uchun ishga tushadi. Ushbu vebhukdan foydalanish maxfiy kontentni oshkor qilmasligiga ishonch hosil qiling.', + 'webhooks_events_all' => 'Barcha tizim hodisalari', + 'webhooks_name' => 'Webhook nomi', + 'webhooks_timeout' => 'Webhook so\'rovining kutish vaqti (soniyalar)', + 'webhooks_endpoint' => 'Webhook oxirgi nuqtasi', + 'webhooks_active' => 'Webhook faol', + 'webhook_events_table_header' => 'Voqealar', + 'webhooks_delete' => 'Webhook-ni o\'chirish', + 'webhooks_delete_warning' => 'Bu \':webhookName\' nomli ushbu vebhukni tizimdan butunlay o\'chirib tashlaydi.', + 'webhooks_delete_confirm' => 'Haqiqatan ham bu vebhukni oʻchirib tashlamoqchimisiz?', + 'webhooks_format_example' => 'Webhook formatiga misol', + 'webhooks_format_example_desc' => 'Webhook maʼlumotlari POST soʻrovi sifatida sozlangan soʻnggi nuqtaga quyidagi formatga muvofiq JSON sifatida yuboriladi. "Related_item" va "url" xususiyatlari ixtiyoriy va ishga tushirilgan hodisa turiga bog\'liq bo\'ladi.', + 'webhooks_status' => 'Webhook holati', + 'webhooks_last_called' => 'Oxirgi qo\'ng\'iroq:', + 'webhooks_last_errored' => 'Oxirgi xato:', + 'webhooks_last_error_message' => 'Oxirgi xato xabari:', //! If editing translations files directly please ignore this in all @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/uz/validation.php b/lang/uz/validation.php index 2a676c7c4cc..4606a012879 100644 --- a/lang/uz/validation.php +++ b/lang/uz/validation.php @@ -8,107 +8,107 @@ return [ // Standard laravel validation lines - 'accepted' => 'The :attribute must be accepted.', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'alpha' => 'The :attribute may only contain letters.', - 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'backup_codes' => 'The provided code is not valid or has already been used.', - 'before' => 'The :attribute must be a date before :date.', + 'accepted' => ':attribute qabul qilinishi kerak.', + 'active_url' => ':attribute qiymati to‘g‘ri URL emas.', + 'after' => ':attribute qiymati :date sanadan kegingi sana bo‘lishi kerak.', + 'alpha' => ':attribute qiymati faqat harflardan iborat bo‘lishi kerak.', + 'alpha_dash' => ':attribute qiymati faqat harflar, raqamlar chiziqcha va ostki chiziqdan iborat bo‘lishi kerak.', + 'alpha_num' => ':attribute qiymati faqat harflar va raqamlardan iborat bo‘lishi kerak.', + 'array' => ':attribute qiymati massiv bo‘lishi kerak.', + 'backup_codes' => 'Kiritilgan kod to‘g‘ri emas yoki ishlatib bo‘lingan.', + 'before' => ':attribute qiymati :date sanadan oldingi sana bo‘lishi kerak.', 'between' => [ - 'numeric' => 'The :attribute must be between :min and :max.', - 'file' => 'The :attribute must be between :min and :max kilobytes.', - 'string' => 'The :attribute must be between :min and :max characters.', - 'array' => 'The :attribute must have between :min and :max items.', + 'numeric' => ':attribute qiymati :min va :max orasida bo‘lishi kerak.', + 'file' => ':attribute hajmi :min va :max kilobayt orasida bo‘lishi kerak.', + 'string' => ':attribute uzunligi soni :min va :max orasida bo‘lishi kerak.', + 'array' => ':attribute soni :min va :max orasida bo‘lishi kerak.', ], - 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'date' => 'The :attribute is not a valid date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'email' => 'The :attribute must be a valid email address.', - 'ends_with' => 'The :attribute must end with one of the following: :values', - 'file' => 'The :attribute must be provided as a valid file.', - 'filled' => 'The :attribute field is required.', + 'boolean' => ':attribute qiymati faqat «true» yoki «false» bo`lishi kerak.', + 'confirmed' => ':attribute tasdiqlash qiymati mos emas.', + 'date' => ':attribute qiymati sana emas.', + 'date_format' => ':attribute qiymati :format formatdagi sana emas.', + 'different' => ':attribute va :other qiymatlari har xil bo‘lishi kerak.', + 'digits' => ':attribute qiymati :digits raqamlarda iborat bo‘lishi kerak.', + 'digits_between' => ':attribute qiymati :min va :max orasidagi raqamlarda iborat bo‘lishi kerak.', + 'email' => ':attribute qiymati email bo‘lishi kerak.', + 'ends_with' => ':attribute qiymati quyidagilarda biri bo‘lishi kerak: :values ', + 'file' => ':attribute fayl bo‘lishi kerak.', + 'filled' => ':attribute qiymatini kiritish majburiy.', 'gt' => [ - 'numeric' => 'The :attribute must be greater than :value.', - 'file' => 'The :attribute must be greater than :value kilobytes.', - 'string' => 'The :attribute must be greater than :value characters.', - 'array' => 'The :attribute must have more than :value items.', + 'numeric' => ':attribute qiymati :value\'dan katta bo‘lishi kerak.', + 'file' => ':attribute hajmi :value kilobaytdan katta bo‘lishi kerak.', + 'string' => ':attribute uzunligi :value\'dan katta bo‘lishi kerak.', + 'array' => ':attribute soni :value\'dan katta bo‘lishi kerak.', ], 'gte' => [ - 'numeric' => 'The :attribute must be greater than or equal :value.', - 'file' => 'The :attribute must be greater than or equal :value kilobytes.', - 'string' => 'The :attribute must be greater than or equal :value characters.', - 'array' => 'The :attribute must have :value items or more.', + 'numeric' => ':attribute qiymati :value\'dan katta yoki teng bo‘lishi kerak.', + 'file' => ':attribute hajmi :value kilobaytdan katta yoki teng bo‘lishi kerak.', + 'string' => ':attribute uzunligi :value\'dan katta yoki teng bo‘lishi kerak.', + 'array' => ':attribute soni :value\'dan katta yoki teng bo‘lishi kerak.', ], - 'exists' => 'The selected :attribute is invalid.', - 'image' => 'The :attribute must be an image.', - 'image_extension' => 'The :attribute must have a valid & supported image extension.', - 'in' => 'The selected :attribute is invalid.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', - 'ipv4' => 'The :attribute must be a valid IPv4 address.', - 'ipv6' => 'The :attribute must be a valid IPv6 address.', - 'json' => 'The :attribute must be a valid JSON string.', + 'exists' => ':attribute\'ning tanlangan qiymati to‘g‘ri emas.', + 'image' => ':attribute rasm bo‘lishi kerak.', + 'image_extension' => ':attribute rasm bo‘lishi va to‘g‘ri formatda bo‘lishi kerak.', + 'in' => ':attribute qiymati noto‘g‘ri.', + 'integer' => ':attribute qiymati butun son bo‘lishi kerak.', + 'ip' => ':attribute qiymati IP manzil bo‘lishi kerak.', + 'ipv4' => ':attribute qiymati IPv4 manzil bo‘lishi kerak.', + 'ipv6' => ':attribute qiymati IPv6 manzil bo‘lishi kerak.', + 'json' => ':attribute qiymati JSON formatida bo‘lishi kerak.', 'lt' => [ - 'numeric' => 'The :attribute must be less than :value.', - 'file' => 'The :attribute must be less than :value kilobytes.', - 'string' => 'The :attribute must be less than :value characters.', - 'array' => 'The :attribute must have less than :value items.', + 'numeric' => ':attribute qiymati :value\'dan kichik bo‘lishi kerak.', + 'file' => ':attribute hajmi :value kilobaytdan kichik bo‘lishi kerak.', + 'string' => ':attribute uzunligi :value\'dan kichik bo‘lishi kerak.', + 'array' => ':attribute soni :value\'dan kichik bo‘lishi kerak.', ], 'lte' => [ - 'numeric' => 'The :attribute must be less than or equal :value.', - 'file' => 'The :attribute must be less than or equal :value kilobytes.', - 'string' => 'The :attribute must be less than or equal :value characters.', - 'array' => 'The :attribute must not have more than :value items.', + 'numeric' => ':attribute qiymati :value\'dan kichik yoki teng bo‘lishi kerak.', + 'file' => ':attribute hajmi :value kilobaytdan kichik yoki teng bo‘lishi kerak.', + 'string' => ':attribute uzunligi :value\'dan kichik yoki teng bo‘lishi kerak.', + 'array' => ':attribute soni :value\'dan kichik yoki teng bo‘lishi kerak.', ], 'max' => [ - 'numeric' => 'The :attribute may not be greater than :max.', - 'file' => 'The :attribute may not be greater than :max kilobytes.', - 'string' => 'The :attribute may not be greater than :max characters.', - 'array' => 'The :attribute may not have more than :max items.', + 'numeric' => ':attribute qiymati maksimum :value bo‘lishi kerak.', + 'file' => ':attribute hajmi maksimum :value kilobayt bo‘lishi kerak.', + 'string' => ':attribute uzunligi maksimum :value bo‘lishi kerak.', + 'array' => ':attribute soni maksimum :value bo‘lishi kerak.', ], - 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimes' => ':attribute fayl mime turi quyidagilardan biri bo‘lishi kerak: :values.', 'min' => [ - 'numeric' => 'The :attribute must be at least :min.', - 'file' => 'The :attribute must be at least :min kilobytes.', - 'string' => 'The :attribute must be at least :min characters.', - 'array' => 'The :attribute must have at least :min items.', + 'numeric' => ':attribute qiymati minimum :value bo‘lishi kerak.', + 'file' => ':attribute hajmi minimum :value kilobayt bo‘lishi kerak.', + 'string' => ':attribute uzunligi minimum :value bo‘lishi kerak.', + 'array' => ':attribute soni minimum :value bo‘lishi kerak.', ], - 'not_in' => 'The selected :attribute is invalid.', - 'not_regex' => 'The :attribute format is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values is present.', - 'required_without' => 'The :attribute field is required when :values is not present.', - 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', - 'safe_url' => 'The provided link may not be safe.', + 'not_in' => 'selected :attribute qiymati noto‘g‘ri.', + 'not_regex' => ':attribute formati noto‘g‘ri.', + 'numeric' => ':attribute qiymati raqam bo‘lishi kerak.', + 'regex' => ':attribute formati noto‘g‘ri.', + 'required' => ':attribute\'ni kiritish majburiy.', + 'required_if' => ':other qiymati :value bo‘lganda :attribute\'ni kiritish majburiy.', + 'required_with' => ':values kiritilgan holatlarda :attribute\'ni kiritish majburiy.', + 'required_with_all' => ':values kiritilgan holatlarda :attribute\'ni kiritish majburiy.', + 'required_without' => ':values kiritilmagan holatlarda :attribute\'ni kiritish majburiy.', + 'required_without_all' => ':values kiritilmagan holatlarda :attribute\'ni kiritish majburiy.', + 'same' => ':attribute va :other qiymatlari teng bo‘lishi shart.', + 'safe_url' => 'Kiritilgan manzil xavsiz emas.', 'size' => [ - 'numeric' => 'The :attribute must be :size.', - 'file' => 'The :attribute must be :size kilobytes.', - 'string' => 'The :attribute must be :size characters.', - 'array' => 'The :attribute must contain :size items.', + 'numeric' => ':attribute qiymati :value bo‘lishi kerak.', + 'file' => ':attribute hajmi :value kilobayt bo‘lishi kerak.', + 'string' => ':attribute uzunligi :value bo‘lishi kerak.', + 'array' => ':attribute soni :value bo‘lishi kerak.', ], - 'string' => 'The :attribute must be a string.', - 'timezone' => 'The :attribute must be a valid zone.', - 'totp' => 'The provided code is not valid or has expired.', - 'unique' => 'The :attribute has already been taken.', - 'url' => 'The :attribute format is invalid.', - 'uploaded' => 'The file could not be uploaded. The server may not accept files of this size.', + 'string' => ':attribute qiymati matn bo‘lishi kerak.', + 'timezone' => ':attribute qiymati to‘g‘ri vaqt zonasi bo‘lishi kerak.', + 'totp' => 'Kiritilgan xavsizlik kodi notpo‘g‘ri yoki eskirgan.', + 'unique' => ':attribute qiymati allaqachon mavjud.', + 'url' => ':attribute URL formatida emas.', + 'uploaded' => 'Faylni yuklashda xatolik. Server bunday hajmdagi faylllarni yuklamasligi mumkin.', // Custom validation lines 'custom' => [ 'password-confirm' => [ - 'required_with' => 'Password confirmation required', + 'required_with' => 'Takroriy parolni to‘ldirish majburiy', ], ], diff --git a/lang/vi/common.php b/lang/vi/common.php index 95cc7e13cca..5215e8ab855 100644 --- a/lang/vi/common.php +++ b/lang/vi/common.php @@ -52,6 +52,7 @@ 'filter_clear' => 'Xóa bộ lọc', 'download' => 'Tải về', 'open_in_tab' => 'Mở trong thẻ mới', + 'open' => 'Open', // Sort Options 'sort_options' => 'Tùy Chọn Sắp Xếp', diff --git a/lang/vi/components.php b/lang/vi/components.php index 3ce775e23c3..802d09d0b66 100644 --- a/lang/vi/components.php +++ b/lang/vi/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => 'Ảnh đã được xóa thành công', 'image_replace' => 'Thay thế hình ảnh', 'image_replace_success' => 'Đã cập nhật thành công tệp hình ảnh', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => 'Sửa Mã', diff --git a/lang/vi/entities.php b/lang/vi/entities.php index 824eaa201f7..b98361fd189 100644 --- a/lang/vi/entities.php +++ b/lang/vi/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => 'Biểu mẫu trang', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => 'Các Thẻ Trang', 'chapter_tags' => 'Các Thẻ Chương', 'book_tags' => 'Các Thẻ Sách', diff --git a/lang/vi/errors.php b/lang/vi/errors.php index 0fcf022d3a6..4fe7f3829d5 100644 --- a/lang/vi/errors.php +++ b/lang/vi/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => 'Không thể lấy ảnh từ :url', 'cannot_create_thumbs' => 'Máy chủ không thể tạo ảnh nhỏ. Vui lòng kiểm tra bạn đã cài đặt tiện ích mở rộng GD PHP.', 'server_upload_limit' => 'Máy chủ không cho phép tải lên kích thước này. Vui lòng thử lại với tệp tin nhỏ hơn.', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => 'Máy chủ không cho phép tải lên kích thước này. Vui lòng thử lại với tệp tin nhỏ hơn.', // Drawing & Images 'image_upload_error' => 'Đã xảy ra lỗi khi đang tải lên ảnh', 'image_upload_type_error' => 'Ảnh đang được tải lên không hợp lệ', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.', // Attachments diff --git a/lang/vi/preferences.php b/lang/vi/preferences.php index c96c2b0dfad..8c5fc52301a 100644 --- a/lang/vi/preferences.php +++ b/lang/vi/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => 'Lối tắt', - 'shortcuts_interface' => 'Giao diện phím tắt', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => 'Tại đây, bạn có thể bật hoặc tắt các phím tắt trên giao diện hệ thống bàn phím, được sử dụng để điều hướng và thực hiện các thao tác.', 'shortcuts_customize_desc' => 'Bạn có thể tùy chỉnh từng phím tắt dưới đây. Chỉ cần nhấn tổ hợp phím mong muốn của bạn sau khi chọn đầu vào cho một phím tắt.', 'shortcuts_toggle_label' => 'Bật phím tắt', @@ -29,5 +29,23 @@ 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/vi/settings.php b/lang/vi/settings.php index 677cc2badc7..4bda6fcee9e 100644 --- a/lang/vi/settings.php +++ b/lang/vi/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => 'Bạn có thể chọn để gửi cho người dùng này một email mời, giúp họ có thể tự đặt mật khẩu cho chính họ. Nếu không bạn có thể đặt mật khẩu cho họ.', 'users_send_invite_option' => 'Gửi email mời người dùng', 'users_external_auth_id' => 'Mã của xác thực ngoài', - 'users_external_auth_id_desc' => 'Đây là mã được sử dụng để xác thực với người dùng này khi giao tiếp với hệ thống xác thực bên ngoài.', - 'users_password_warning' => 'Chỉ điền ô bên dưới nếu bạn muốn thay đổi mật khẩu.', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => 'Người dùng này đại diện cho bất kỳ khách nào thăm trang của bạn. Nó được tự động gán và không thể dùng để đăng nhập.', 'users_delete' => 'Xóa Người dùng', 'users_delete_named' => 'Xóa người dùng :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => 'Ngôn ngữ ưu tiên', 'users_preferred_language_desc' => 'Tùy chọn này sẽ thay đổi ngôn ngư sử dụng cho giao diện người dùng của ứng dụng. Nó sẽ không ảnh hưởng đến bất cứ nội dung nào người dùng tạo ra.', 'users_social_accounts' => 'Tài khoản MXH', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => 'Bạn có thể kết nối đến các tài khoản khác để đăng nhập nhanh chóng và dễ dàng. Ngắt kết nối đến một tài khoản ở đây không thu hồi việc ủy quyền truy cập trước đó. Thu hồi truy cập của các tài khoản kết nối MXH từ trang cài đặt hồ sở của bạn.', 'users_social_connect' => 'Kết nối tài khoản', 'users_social_disconnect' => 'Ngắt kết nối tài khoản', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => 'Tài khoản :socialAccount đã được liên kết với hồ sơ của bạn thành công.', 'users_social_disconnected' => 'Tài khoản :socialAccount đã được ngắt kết nối khỏi hồ sơ của bạn thành công.', 'users_api_tokens' => 'Các Token API', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => 'Khong có Token API nào được tạo cho người dùng này', 'users_api_tokens_create' => 'Tạo Token', 'users_api_tokens_expires' => 'Hết hạn', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/zh_CN/common.php b/lang/zh_CN/common.php index c2103d0e7e8..833d3476254 100644 --- a/lang/zh_CN/common.php +++ b/lang/zh_CN/common.php @@ -52,6 +52,7 @@ 'filter_clear' => '清除过滤器', 'download' => '下载', 'open_in_tab' => '在标签页中打开。', + 'open' => '打开', // Sort Options 'sort_options' => '排序选项', diff --git a/lang/zh_CN/components.php b/lang/zh_CN/components.php index 6ce5a635688..f04a254ec09 100644 --- a/lang/zh_CN/components.php +++ b/lang/zh_CN/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => '图片删除成功', 'image_replace' => '替换图片', 'image_replace_success' => '图片文件更新成功', + 'image_rebuild_thumbs' => '重新生成大小变化', + 'image_rebuild_thumbs_success' => '图像大小变化成功重建!', // Code Editor 'code_editor' => '编辑代码', diff --git a/lang/zh_CN/entities.php b/lang/zh_CN/entities.php index 31cd1bc6e46..a4bd4664a9f 100644 --- a/lang/zh_CN/entities.php +++ b/lang/zh_CN/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => '页面模板', // Editor Sidebar + 'toggle_sidebar' => '切换侧边栏', 'page_tags' => '页面标签', 'chapter_tags' => '章节标签', 'book_tags' => '图书标签', diff --git a/lang/zh_CN/errors.php b/lang/zh_CN/errors.php index f3045fb9755..42e2378d970 100644 --- a/lang/zh_CN/errors.php +++ b/lang/zh_CN/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => '无法从 :url 中获取图片', 'cannot_create_thumbs' => '服务器无法创建缩略图,请检查您是否安装了GD PHP扩展。', 'server_upload_limit' => '服务器不允许上传此大小的文件。 请尝试较小的文件。', + 'server_post_limit' => '服务器无法接收所提供的数据量。请尝试使用较少的数据或较小的文件。', 'uploaded' => '服务器不允许上传此大小的文件。 请尝试较小的文件。', // Drawing & Images 'image_upload_error' => '上传图片时发生错误', 'image_upload_type_error' => '上传的图像类型无效', 'image_upload_replace_type' => '图片文件替换必须为相同的类型', + 'image_upload_memory_limit' => '由于系统资源限制,无法处理图像上传和/或创建缩略图。', + 'image_thumbnail_memory_limit' => '由于系统资源限制,无法创建图像大小变化。', + 'image_gallery_thumbnail_memory_limit' => '由于系统资源限制,无法创建相册缩略图。', 'drawing_data_not_found' => '无法加载绘图数据。绘图文件可能不再存在,或者您可能没有权限访问它。', // Attachments diff --git a/lang/zh_CN/preferences.php b/lang/zh_CN/preferences.php index 36408ca1f47..0b5044137d6 100644 --- a/lang/zh_CN/preferences.php +++ b/lang/zh_CN/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => '偏好设置', + 'my_account' => '我的账户', 'shortcuts' => '快捷键', - 'shortcuts_interface' => '界面键盘快捷键', + 'shortcuts_interface' => '界面快捷方式首选项', 'shortcuts_toggle_desc' => '你可以启用或禁用键盘系统界面快捷键,这些快捷键用于导航和操作。', 'shortcuts_customize_desc' => '您可以自定义下面的每个快捷键。选择快捷方式输入后按下您想使用的按键组合即可。', 'shortcuts_toggle_label' => '启用键盘快捷键', @@ -29,5 +29,23 @@ 'notifications_watched' => '已关注和忽略的项目', 'notifications_watched_desc' => ' 下面是已应用自定义关注选项的项目。要更新您的关注设置,请查看该项目,然后在该项目的侧边栏中找到关注选项。', - 'profile_overview_desc' => ' 管理用户个人资料信息,包括首选语言和验证选项。', + 'auth' => '访问与安全', + 'auth_change_password' => '更改密码', + 'auth_change_password_desc' => '更改用于登录本应用的密码。 长度必须至少为 8 个字符。', + 'auth_change_password_success' => '密码已更新!', + + 'profile' => '个人资料详情', + 'profile_desc' => '管理您的账户细节,这些细节会向其他用户展示,除此之外,还包括用于交流和系统个性化的细节。', + 'profile_view_public' => '查看公开个人资料', + 'profile_name_desc' => '配置您的显示名称,名称将通过您执行的活动和您拥有的内容在系统中对其他用户可见。', + 'profile_email_desc' => '此电子邮件将用于通知,并根据活跃的系统身份验证,用于系统访问。', + 'profile_email_no_permission' => '很抱歉,您没有权限更改电子邮件地址。 如果您想要更改,您需要请管理员为您更改。', + 'profile_avatar_desc' => '选择一张图片,图片将在系统中用于向他人展示您的形象。理想情况下,这张图片应为方形,宽高约为256像素。', + 'profile_admin_options' => '管理员选项', + 'profile_admin_options_desc' => '针对用户账户,您可以在应用的「设置 > 用户」区域找到其他管理员级别选项,例如管理角色分配等。', + + 'delete_account' => '删除账户', + 'delete_my_account' => '删除我的账户', + 'delete_my_account_desc' => '此操作将完全删除您在系统中的用户账户。您将无法恢复此账户或撤销此操作。您创建的内容,如创建的页面和上传的图片,将保留下来。', + 'delete_my_account_warning' => '您确定要删除您的账号吗?', ]; diff --git a/lang/zh_CN/settings.php b/lang/zh_CN/settings.php index 0dcc6d5b505..b6daf33f4b3 100644 --- a/lang/zh_CN/settings.php +++ b/lang/zh_CN/settings.php @@ -193,8 +193,8 @@ 'users_send_invite_text' => '您可以向该用户发送邀请电子邮件,允许他们设置自己的密码,否则,您可以自己设置他们的密码。', 'users_send_invite_option' => '发送邀请用户电子邮件', 'users_external_auth_id' => '外部身份认证ID', - 'users_external_auth_id_desc' => '这是用于与您的外部身份验证系统通信时匹配此用户的ID。', - 'users_password_warning' => '如果您想更改密码,请填写以下内容:', + 'users_external_auth_id_desc' => '当使用外部身份验证系统(例如 SAML2、OIDC 或 LDAP)时,这是将此 BookStack 用户连接到身份验证系统账户的 ID。 如果使用默认的电子邮件身份验证,您可以忽略此字段。', + 'users_password_warning' => '如果您想更改此用户的密码,请填写以下内容:', 'users_system_public' => '此用户代表访问您的App的任何访客。它不能用于登录,而是自动分配。', 'users_delete' => '删除用户', 'users_delete_named' => '删除用户 :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => '语言', 'users_preferred_language_desc' => '此选项将更改用于应用程序用户界面的语言。 这不会影响任何用户创建的内容。', 'users_social_accounts' => '社交账户', + 'users_social_accounts_desc' => '查看此用户已连接的社交账户状态。 除了主要认证系统外,社交账户也可用于系统访问。', 'users_social_accounts_info' => '在这里,您可以绑定您的其他账户,以便更快更轻松地登录。如果您选择解除绑定,之后将不能通过此社交账户登录,请设置社交账户来取消本App的访问权限。', 'users_social_connect' => '绑定账户', 'users_social_disconnect' => '解除绑定账户', + 'users_social_status_connected' => '已连接', + 'users_social_status_disconnected' => '已断开连接', 'users_social_connected' => ':socialAccount 账户已经成功绑定到您的资料。', 'users_social_disconnected' => ':socialAccount 账户已经成功解除绑定。', 'users_api_tokens' => 'API令牌', + 'users_api_tokens_desc' => '创建和管理用于 BookStack REST API 认证的访问令牌。 API 的权限是通过令牌所属的用户管理的。', 'users_api_tokens_none' => '没有创建任何API令牌给此用户', 'users_api_tokens_create' => '创建令牌', 'users_api_tokens_expires' => '过期', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => '挪威语 (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/lang/zh_TW/activities.php b/lang/zh_TW/activities.php index be5136a0eaf..afbaa12fca2 100644 --- a/lang/zh_TW/activities.php +++ b/lang/zh_TW/activities.php @@ -73,7 +73,7 @@ // Settings 'settings_update' => 'updated settings', - 'settings_update_notification' => 'Settings successfully updated', + 'settings_update_notification' => '設定更新成功', 'maintenance_action_run' => 'ran maintenance action', // Webhooks diff --git a/lang/zh_TW/common.php b/lang/zh_TW/common.php index 67ebe0444fd..22bde3f0872 100644 --- a/lang/zh_TW/common.php +++ b/lang/zh_TW/common.php @@ -52,6 +52,7 @@ 'filter_clear' => '清理過濾', 'download' => '下載', 'open_in_tab' => '在新分頁中開啟', + 'open' => 'Open', // Sort Options 'sort_options' => '排序選項', diff --git a/lang/zh_TW/components.php b/lang/zh_TW/components.php index 4f050166439..36f2265d133 100644 --- a/lang/zh_TW/components.php +++ b/lang/zh_TW/components.php @@ -34,6 +34,8 @@ 'image_delete_success' => '圖片刪除成功', 'image_replace' => 'Replace Image', 'image_replace_success' => 'Image file successfully updated', + 'image_rebuild_thumbs' => 'Regenerate Size Variations', + 'image_rebuild_thumbs_success' => 'Image size variations successfully rebuilt!', // Code Editor 'code_editor' => '編輯程式碼', diff --git a/lang/zh_TW/entities.php b/lang/zh_TW/entities.php index 2e6839cd4e8..13d4acefd30 100644 --- a/lang/zh_TW/entities.php +++ b/lang/zh_TW/entities.php @@ -295,6 +295,7 @@ 'pages_is_template' => '頁面模板', // Editor Sidebar + 'toggle_sidebar' => 'Toggle Sidebar', 'page_tags' => '頁面標籤', 'chapter_tags' => '章節標籤', 'book_tags' => '書本標籤', @@ -351,7 +352,7 @@ 'templates_prepend_content' => '前置頁面內容', // Profile View - 'profile_user_for_x' => '來這裡:time了', + 'profile_user_for_x' => '來這裡 :time 了', 'profile_created_content' => '已建立內容', 'profile_not_created_pages' => ':userName 尚未建立任何頁面', 'profile_not_created_chapters' => ':userName 尚未建立任何章節', @@ -408,7 +409,7 @@ // Watch Options 'watch' => 'Watch', - 'watch_title_default' => 'Default Preferences', + 'watch_title_default' => '預設偏好設定', 'watch_desc_default' => 'Revert watching to just your default notification preferences.', 'watch_title_ignore' => 'Ignore', 'watch_desc_ignore' => 'Ignore all notifications, including those from user-level preferences.', diff --git a/lang/zh_TW/errors.php b/lang/zh_TW/errors.php index c69c1d978a3..19ae6dda099 100644 --- a/lang/zh_TW/errors.php +++ b/lang/zh_TW/errors.php @@ -44,12 +44,16 @@ 'cannot_get_image_from_url' => '無法從 :url 取得圖片', 'cannot_create_thumbs' => '伺服器無法建立縮圖。請檢查您是否安裝了 PHP 的 GD 擴充程式。', 'server_upload_limit' => '伺服器不允許上傳這個大的檔案。請嘗試較小的檔案。', + 'server_post_limit' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.', 'uploaded' => '伺服器不允許上傳這個大的檔案。請嘗試較小的檔案。', // Drawing & Images 'image_upload_error' => '上傳圖片時發生錯誤', 'image_upload_type_error' => '上傳圖片類型無效', 'image_upload_replace_type' => 'Image file replacements must be of the same type', + 'image_upload_memory_limit' => 'Failed to handle image upload and/or create thumbnails due to system resource limits.', + 'image_thumbnail_memory_limit' => 'Failed to create image size variations due to system resource limits.', + 'image_gallery_thumbnail_memory_limit' => 'Failed to create gallery thumbnails due to system resource limits.', 'drawing_data_not_found' => '無法載入繪圖資料,繪圖檔案可能不存在,或您可能沒有權限存取它。', // Attachments diff --git a/lang/zh_TW/preferences.php b/lang/zh_TW/preferences.php index a4fd757bfb1..9bed83fd132 100644 --- a/lang/zh_TW/preferences.php +++ b/lang/zh_TW/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'preferences' => 'Preferences', + 'my_account' => 'My Account', 'shortcuts' => '快捷鍵', - 'shortcuts_interface' => '介面鍵盤快捷鍵', + 'shortcuts_interface' => 'UI Shortcut Preferences', 'shortcuts_toggle_desc' => '您可以在此處啟用或停用鍵盤系統介面快捷鍵,這些快捷鍵用於導覽與操作。', 'shortcuts_customize_desc' => '您可以自訂下方的每個快捷鍵。只要在選取快捷鍵輸入後按下您想要使用的按鍵組合即可。', 'shortcuts_toggle_label' => '鍵盤快捷鍵已啟用', @@ -24,10 +24,28 @@ 'notifications_opt_own_page_changes' => 'Notify upon changes to pages I own', 'notifications_opt_own_page_comments' => 'Notify upon comments on pages I own', 'notifications_opt_comment_replies' => 'Notify upon replies to my comments', - 'notifications_save' => 'Save Preferences', + 'notifications_save' => '儲存偏好設定', 'notifications_update_success' => 'Notification preferences have been updated!', 'notifications_watched' => 'Watched & Ignored Items', 'notifications_watched_desc' => ' Below are the items that have custom watch preferences applied. To update your preferences for these, view the item then find the watch options in the sidebar.', - 'profile_overview_desc' => ' Manage your user profile details including preferred language and authentication options.', + 'auth' => 'Access & Security', + 'auth_change_password' => 'Change Password', + 'auth_change_password_desc' => 'Change the password you use to log-in to the application. This must be at least 8 characters long.', + 'auth_change_password_success' => 'Password has been updated!', + + 'profile' => 'Profile Details', + 'profile_desc' => 'Manage the details of your account which represents you to other users, in addition to details that are used for communication and system personalisation.', + 'profile_view_public' => 'View Public Profile', + 'profile_name_desc' => 'Configure your display name which will be visible to other users in the system through the activity you perform, and content you own.', + 'profile_email_desc' => 'This email will be used for notifications and, depending on active system authentication, system access.', + 'profile_email_no_permission' => 'Unfortunately you don\'t have permission to change your email address. If you want to change this, you\'d need to ask an administrator to change this for you.', + 'profile_avatar_desc' => 'Select an image which will be used to represent yourself to others in the system. Ideally this image should be square and about 256px in width and height.', + 'profile_admin_options' => 'Administrator Options', + 'profile_admin_options_desc' => 'Additional administrator-level options, like those to manage role assignments, can be found for your user account in the "Settings > Users" area of the application.', + + 'delete_account' => 'Delete Account', + 'delete_my_account' => 'Delete My Account', + 'delete_my_account_desc' => 'This will fully delete your user account from the system. You will not be able to recover this account or revert this action. Content you\'ve created, such as created pages and uploaded images, will remain.', + 'delete_my_account_warning' => 'Are you sure you want to delete your account?', ]; diff --git a/lang/zh_TW/settings.php b/lang/zh_TW/settings.php index cbedb2381fd..fd1656bee77 100644 --- a/lang/zh_TW/settings.php +++ b/lang/zh_TW/settings.php @@ -48,7 +48,7 @@ 'app_disable_comments_desc' => '在應用程式的所有頁面停用評論。
既有的評論將不會顯示。', // Color settings - 'color_scheme' => 'Application Color Scheme', + 'color_scheme' => '應用程式配色', 'color_scheme_desc' => 'Set the colors to use in the application user interface. Colors can be configured separately for dark and light modes to best fit the theme and ensure legibility.', 'ui_colors_desc' => 'Set the application primary color and default link color. The primary color is mainly used for the header banner, buttons and interface decorations. The default link color is used for text-based links and actions, both within written content and in the application interface.', 'app_color' => '主要顏色', @@ -178,7 +178,7 @@ // Users 'users' => '使用者', - 'users_index_desc' => 'Create & manage individual user accounts within the system. User accounts are used for login and attribution of content & activity. Access permissions are primarily role-based but user content ownership, among other factors, may also affect permissions & access.', + 'users_index_desc' => '在系統中創建和管理使用者帳號。使用者帳號用於紀錄登入與編輯活動;訪問權限則由使用者所歸屬的角色群組決定,但使用者是否具備內容的所有權以及其他因素,都可能會影響到存取權限。', 'user_profile' => '使用者個人資料', 'users_add_new' => '新增使用者', 'users_search' => '搜尋使用者', @@ -193,8 +193,8 @@ 'users_send_invite_text' => '您可以選擇向此使用者傳送邀請電子郵件,讓他們可以設定自己的密碼,您也可以自行設定他們的密碼。', 'users_send_invite_option' => '傳送邀請電子郵件給使用者', 'users_external_auth_id' => '外部身份驗證 ID', - 'users_external_auth_id_desc' => '與外部身份驗證系統通訊時,此 ID 將用於比對使用者。', - 'users_password_warning' => '如果您想更改密碼,請填寫以下內容:', + 'users_external_auth_id_desc' => 'When an external authentication system is in use (such as SAML2, OIDC or LDAP) this is the ID which links this BookStack user to the authentication system account. You can ignore this field if using the default email-based authentication.', + 'users_password_warning' => 'Only fill the below if you would like to change the password for this user.', 'users_system_public' => '此使用者代表造訪您站台的任何訪客使用者。其不能用於登入,而會自動分配。', 'users_delete' => '刪除使用者', 'users_delete_named' => '刪除使用者 :userName', @@ -210,12 +210,16 @@ 'users_preferred_language' => '偏好語言', 'users_preferred_language_desc' => '此選項將會變更用於應用程式使用者介面的語言。不會影響任何使用者建立的內容。', 'users_social_accounts' => '社群網站帳號', + 'users_social_accounts_desc' => 'View the status of the connected social accounts for this user. Social accounts can be used in addition to the primary authentication system for system access.', 'users_social_accounts_info' => '您可以在此處連結您其他的帳號以供快速登入。從此處取消連結帳號並不會撤銷先前已授權的存取。請從您連結的社群網站帳號的個人設定中撤銷存取權。', 'users_social_connect' => '連結帳號', 'users_social_disconnect' => '取消連結帳號', + 'users_social_status_connected' => 'Connected', + 'users_social_status_disconnected' => 'Disconnected', 'users_social_connected' => ':socialAccount 帳號已經成功連結到您的個人資料。', 'users_social_disconnected' => ':socialAccount 帳號已經成功取消連結。', 'users_api_tokens' => 'API 權杖', + 'users_api_tokens_desc' => 'Create and manage the access tokens used to authenticate with the BookStack REST API. Permissions for the API are managed via the user that the token belongs to.', 'users_api_tokens_none' => '尚未為此使用者建立 API 權杖', 'users_api_tokens_create' => '建立權杖', 'users_api_tokens_expires' => '過期', @@ -302,8 +306,9 @@ 'ko' => '한국어', 'lt' => 'Lietuvių Kalba', 'lv' => 'Latviešu Valoda', - 'nl' => 'Nederlands', 'nb' => 'Norsk (Bokmål)', + 'nn' => 'Nynorsk', + 'nl' => 'Nederlands', 'pl' => 'Polski', 'pt' => 'Português', 'pt_BR' => 'Português do Brasil', @@ -314,6 +319,7 @@ 'sv' => 'Svenska', 'tr' => 'Türkçe', 'uk' => 'Українська', + 'uz' => 'O‘zbekcha', 'vi' => 'Tiếng Việt', 'zh_CN' => '简体中文', 'zh_TW' => '繁體中文', diff --git a/package-lock.json b/package-lock.json index 8ad1f232375..1445eba2c22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,13 +51,13 @@ } }, "node_modules/@codemirror/autocomplete": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.9.0.tgz", - "integrity": "sha512-Fbwm0V/Wn3BkEJZRhr0hi5BhCo5a7eBL6LYaliPjOSwCyfOpnjXY59HruSxOUNV+1OYer0Tgx1zRNQttjXyDog==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.10.2.tgz", + "integrity": "sha512-3dCL7b0j2GdtZzWN5j7HDpRAJ26ip07R4NGYz7QYthIYMiX8I4E4TNrYcdTayPJGeVQtd/xe7lWU4XL7THFb/w==", "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.6.0", + "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0" }, "peerDependencies": { @@ -68,14 +68,14 @@ } }, "node_modules/@codemirror/commands": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.2.4.tgz", - "integrity": "sha512-42lmDqVH0ttfilLShReLXsDfASKLXzfyC36bzwcqzox9PlHulMcsUOfHXNo2X2aFMVNUoQ7j+d4q5bnfseYoOA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.3.0.tgz", + "integrity": "sha512-tFfcxRIlOWiQDFhjBSWJ10MxcvbCIsRr6V64SgrcaY0MwNk32cUOcCuNlWo8VjV4qRQCgNgUAnIeo0svkk4R5Q==", "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.2.0", "@codemirror/view": "^6.0.0", - "@lezer/common": "^1.0.0" + "@lezer/common": "^1.1.0" } }, "node_modules/@codemirror/lang-css": { @@ -91,31 +91,31 @@ } }, "node_modules/@codemirror/lang-html": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.5.tgz", - "integrity": "sha512-dUCSxkIw2G+chaUfw3Gfu5kkN83vJQN8gfQDp9iEHsIZluMJA0YJveT12zg/28BJx+uPsbQ6VimKCgx3oJrZxA==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.6.tgz", + "integrity": "sha512-E4C8CVupBksXvgLSme/zv31x91g06eZHSph7NczVxZW+/K+3XgJGWNT//2WLzaKSBoxpAjaOi5ZnPU1SHhjh3A==", "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.2.2", + "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.0" } }, "node_modules/@codemirror/lang-javascript": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.1.9.tgz", - "integrity": "sha512-z3jdkcqOEBT2txn2a87A0jSy6Te3679wg/U8QzMeftFt+4KA6QooMwfdFzJiuC3L6fXKfTXZcDocoaxMYfGz0w==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.1.tgz", + "integrity": "sha512-jlFOXTejVyiQCW3EQwvKH0m99bUYIw40oPmFjSX2VS78yzfe0HELZ+NEo9Yfo1MkGRpGlj3Gnu4rdxV1EnAs5A==", "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", + "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } @@ -130,9 +130,9 @@ } }, "node_modules/@codemirror/lang-markdown": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.2.0.tgz", - "integrity": "sha512-deKegEQVzfBAcLPqsJEa+IxotqPVwWZi90UOEvQbfa01NTAw8jNinrykuYPTULGUj+gha0ZG2HBsn4s5d64Qrg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.2.2.tgz", + "integrity": "sha512-wmwM9Y5n/e4ndU51KcYDaQnb9goYdhXjU71dDW9goOc1VUTIPph6WKAPdJ6BzC0ZFy+UTsDwTXGWSP370RH69Q==", "dependencies": { "@codemirror/autocomplete": "^6.7.1", "@codemirror/lang-html": "^6.0.0", @@ -168,13 +168,13 @@ } }, "node_modules/@codemirror/language": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.9.0.tgz", - "integrity": "sha512-nFu311/0ne/qGuGCL3oKuktBgzVOaxCHZPZv1tLSZkNjPYxxvkjSbzno3MlErG2tgw1Yw1yF8BxMCegeMXqpiw==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.9.1.tgz", + "integrity": "sha512-lWRP3Y9IUdOms6DXuBpoWwjkR7yRmnS0hKYCbSfPz9v6Em1A1UCRujAkDiCrdYfs1Z0Eu4dGtwovNPStIfkgNA==", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", - "@lezer/common": "^1.0.0", + "@lezer/common": "^1.1.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0", "style-mod": "^4.0.0" @@ -189,9 +189,9 @@ } }, "node_modules/@codemirror/lint": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.2.1.tgz", - "integrity": "sha512-y1muai5U/uUPAGRyHMx9mHuHLypPcHWxzlZGknp/U5Mdb5Ol8Q5ZLp67UqyTbNFJJ3unVxZ8iX3g1fMN79S1JQ==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.4.2.tgz", + "integrity": "sha512-wzRkluWb1ptPKdzlsrbwwjYCPLgzU6N88YBAmlZi8WFyuiEduSd05MnJYNogzyc8rPK7pj6m95ptUApc8sHKVA==", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -199,9 +199,9 @@ } }, "node_modules/@codemirror/search": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.3.0.tgz", - "integrity": "sha512-rBhZxzT34CarfhgCZGhaLBScABDN3iqJxixzNuINp9lrb3lzm0nTpR77G1VrxGO3HOGK7j62jcJftQM7eCOIuw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.4.tgz", + "integrity": "sha512-YoTrvjv9e8EbPs58opjZKyJ3ewFrVSUzQ/4WXlULQLSDDr1nGPJ67mMXFNNVYwdFhybzhrzrtqgHmtpJwIF+8g==", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -209,9 +209,9 @@ } }, "node_modules/@codemirror/state": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.1.tgz", - "integrity": "sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.3.1.tgz", + "integrity": "sha512-88e4HhMtKJyw6fKprGaN/yZfiaoGYOi2nM45YCUC6R/kex9sxFWBDGatS1vk4lMgnWmdIIB9tk8Gj1LmL8YfvA==" }, "node_modules/@codemirror/theme-one-dark": { "version": "6.1.2", @@ -225,19 +225,19 @@ } }, "node_modules/@codemirror/view": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.16.0.tgz", - "integrity": "sha512-1Z2HkvkC3KR/oEZVuW9Ivmp8TWLzGEd8T8TA04TTwPvqogfkHBdYSlflytDOqmkUxM2d1ywTg7X2dU5mC+SXvg==", + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.21.3.tgz", + "integrity": "sha512-8l1aSQ6MygzL4Nx7GVYhucSXvW4jQd0F6Zm3v9Dg+6nZEfwzJVqi4C2zHfDljID+73gsQrWp9TgHc81xU15O4A==", "dependencies": { "@codemirror/state": "^6.1.4", - "style-mod": "^4.0.0", + "style-mod": "^4.1.0", "w3c-keyname": "^2.2.4" } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.2.tgz", - "integrity": "sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz", + "integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==", "cpu": [ "arm" ], @@ -251,9 +251,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.2.tgz", - "integrity": "sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz", + "integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==", "cpu": [ "arm64" ], @@ -267,9 +267,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.2.tgz", - "integrity": "sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz", + "integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==", "cpu": [ "x64" ], @@ -283,9 +283,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.2.tgz", - "integrity": "sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz", + "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==", "cpu": [ "arm64" ], @@ -299,9 +299,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.2.tgz", - "integrity": "sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz", + "integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==", "cpu": [ "x64" ], @@ -315,9 +315,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.2.tgz", - "integrity": "sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz", + "integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==", "cpu": [ "arm64" ], @@ -331,9 +331,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.2.tgz", - "integrity": "sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz", + "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==", "cpu": [ "x64" ], @@ -347,9 +347,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.2.tgz", - "integrity": "sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz", + "integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==", "cpu": [ "arm" ], @@ -363,9 +363,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.2.tgz", - "integrity": "sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz", + "integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==", "cpu": [ "arm64" ], @@ -379,9 +379,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.2.tgz", - "integrity": "sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz", + "integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==", "cpu": [ "ia32" ], @@ -395,9 +395,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.2.tgz", - "integrity": "sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz", + "integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==", "cpu": [ "loong64" ], @@ -411,9 +411,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.2.tgz", - "integrity": "sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz", + "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==", "cpu": [ "mips64el" ], @@ -427,9 +427,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.2.tgz", - "integrity": "sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz", + "integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==", "cpu": [ "ppc64" ], @@ -443,9 +443,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.2.tgz", - "integrity": "sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz", + "integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==", "cpu": [ "riscv64" ], @@ -459,9 +459,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.2.tgz", - "integrity": "sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz", + "integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==", "cpu": [ "s390x" ], @@ -475,9 +475,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.2.tgz", - "integrity": "sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz", + "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==", "cpu": [ "x64" ], @@ -491,9 +491,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.2.tgz", - "integrity": "sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz", + "integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==", "cpu": [ "x64" ], @@ -507,9 +507,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.2.tgz", - "integrity": "sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz", + "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==", "cpu": [ "x64" ], @@ -523,9 +523,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.2.tgz", - "integrity": "sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz", + "integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==", "cpu": [ "x64" ], @@ -539,9 +539,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.2.tgz", - "integrity": "sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz", + "integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==", "cpu": [ "arm64" ], @@ -555,9 +555,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.2.tgz", - "integrity": "sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz", + "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==", "cpu": [ "ia32" ], @@ -571,9 +571,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.2.tgz", - "integrity": "sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz", + "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==", "cpu": [ "x64" ], @@ -602,9 +602,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -634,21 +634,21 @@ } }, "node_modules/@eslint/js": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", - "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -670,29 +670,29 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "node_modules/@lezer/common": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.2.tgz", - "integrity": "sha512-SVgiGtMnMnW3ActR8SXgsDhw7a0w0ChHSYAyAUxxrOiJ1OqYWEKk/xJd84tTSPo1mo6DXLObAJALNnd0Hrv7Ng==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.1.0.tgz", + "integrity": "sha512-XPIN3cYDXsoJI/oDWoR2tD++juVrhgIago9xyKhZ7IhGlzdDM9QgC8D8saKNCz5pindGcznFr2HBSsEQSWnSjw==" }, "node_modules/@lezer/css": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.1.1.tgz", - "integrity": "sha512-mSjx+unLLapEqdOYDejnGBokB5+AiJKZVclmud0MKQOKx3DLJ5b5VTCstgDDknR6iIV4gVrN6euzsCnj0A2gQA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.1.3.tgz", + "integrity": "sha512-SjSM4pkQnQdJDVc80LYzEaMiNy9txsFbI7HsMgeVF28NdLaAdHNtQ+kB/QqDUzRBV/75NTXjJ/R5IdC8QQGxMg==", "dependencies": { "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "node_modules/@lezer/generator": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@lezer/generator/-/generator-1.4.2.tgz", - "integrity": "sha512-6fRwiGnx6Sv2I25YKeC5Mw9LtIA3Yq4FmVdRk0NP+M8tCsLUHSJd4KzrEzYqW3SKqOR/ZRlGiw+HAXMRygyCZA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@lezer/generator/-/generator-1.5.1.tgz", + "integrity": "sha512-vodJv2JPwsFsiBBHE463yBhvUI9TmhIu5duF/8MH304xNS6FyWH/vTyG61pjhERm5f+VBP94co0eiN+afWcvXw==", "dev": true, "dependencies": { "@lezer/common": "^1.0.2", @@ -711,9 +711,9 @@ } }, "node_modules/@lezer/html": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.4.tgz", - "integrity": "sha512-HdJYMVZcT4YsMo7lW3ipL4NoyS2T67kMPuSVS5TgLGqmaCjEU/D6xv7zsa1ktvTK5lwk7zzF1e3eU6gBZIPm5g==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.6.tgz", + "integrity": "sha512-Kk9HJARZTc0bAnMQUqbtuhFVsB4AnteR2BFUWfZV7L/x1H0aAKz6YabrfJ2gk/BEgjh9L3hg5O4y2IDZRBdzuQ==", "dependencies": { "@lezer/common": "^1.0.0", "@lezer/highlight": "^1.0.0", @@ -721,35 +721,35 @@ } }, "node_modules/@lezer/javascript": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.2.tgz", - "integrity": "sha512-77qdAD4zanmImPiAu4ibrMUzRc79UHoccdPa+Ey5iwS891TAkhnMAodUe17T7zV7tnF7e9HXM0pfmjoGEhrppg==", + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.8.tgz", + "integrity": "sha512-QRmw/5xrcyRLyWr3JT3KCzn2XZr5NYNqQMGsqnYy+FghbQn9DZPuj6JDkE6uSXvfMLpdapu8KBIaeoJFaR4QVw==", "dependencies": { "@lezer/highlight": "^1.1.3", "@lezer/lr": "^1.3.0" } }, "node_modules/@lezer/json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.0.tgz", - "integrity": "sha512-zbAuUY09RBzCoCA3lJ1+ypKw5WSNvLqGMtasdW6HvVOqZoCpPr8eWrsGnOVWGKGn8Rh21FnrKRVlJXrGAVUqRw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.1.tgz", + "integrity": "sha512-nkVC27qiEZEjySbi6gQRuMwa2sDu2PtfjSgz0A4QF81QyRGm3kb2YRzLcOPcTEtmcwvrX/cej7mlhbwViA4WJw==", "dependencies": { "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "node_modules/@lezer/lr": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.3.tgz", - "integrity": "sha512-JPQe3mwJlzEVqy67iQiiGozhcngbO8QBgpqZM6oL1Wj/dXckrEexpBLeFkq0edtW5IqnPRFxA24BHJni8Js69w==", + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.13.tgz", + "integrity": "sha512-RLAbau/4uSzKgIKj96mI5WUtG1qtiR0Frn0Ei9zhPj8YOkHM+1Bb8SgdVvmR/aWJCFIzjo2KFnDiRZ75Xf5NdQ==", "dependencies": { "@lezer/common": "^1.0.0" } }, "node_modules/@lezer/markdown": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.0.2.tgz", - "integrity": "sha512-8CY0OoZ6V5EzPjSPeJ4KLVbtXdLBd8V6sRCooN5kHnO28ytreEGTyrtU/zUwo/XLRzGr/e1g44KlzKi3yWGB5A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.1.0.tgz", + "integrity": "sha512-JYOI6Lkqbl83semCANkO3CKbKc0pONwinyagBufWBm+k4yhIcqfCF8B8fpEpvJLmIy7CAfwiq7dQ/PzUZA340g==", "dependencies": { "@lezer/common": "^1.0.0", "@lezer/highlight": "^1.0.0" @@ -765,9 +765,9 @@ } }, "node_modules/@lezer/xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-jMDXrV953sDAUEMI25VNrI9dz94Ai96FfeglytFINhhwQ867HKlCE2jt3AwZTCT7M528WxdDWv/Ty8e9wizwmQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.2.tgz", + "integrity": "sha512-dlngsWceOtQBMuBPw5wtHpaxdPJ71aVntqjbpGkFtWsp4WtQmCnuTjQGocviymydN6M18fhj6UQX3oiEtSuY7w==", "dependencies": { "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" @@ -867,24 +867,27 @@ } }, "node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { - "node": ">=6" + "node": ">=8" } }, "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==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { @@ -919,15 +922,15 @@ } }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -938,16 +941,16 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", - "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -957,14 +960,14 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -975,14 +978,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -992,6 +995,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -1042,13 +1066,14 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1073,17 +1098,19 @@ } }, "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==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/chokidar": { @@ -1142,6 +1169,27 @@ "wrap-ansi": "^5.1.0" } }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/codemirror": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", @@ -1157,18 +1205,21 @@ } }, "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/concat-map": { @@ -1184,24 +1235,22 @@ "dev": true }, "node_modules/crelt": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz", - "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" }, "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4.8" + "node": ">= 8" } }, "node_modules/debug": { @@ -1236,12 +1285,27 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -1291,18 +1355,19 @@ } }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -1317,19 +1382,23 @@ "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -1379,9 +1448,9 @@ } }, "node_modules/esbuild": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.2.tgz", - "integrity": "sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz", + "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==", "dev": true, "hasInstallScript": true, "bin": { @@ -1391,50 +1460,53 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.19.2", - "@esbuild/android-arm64": "0.19.2", - "@esbuild/android-x64": "0.19.2", - "@esbuild/darwin-arm64": "0.19.2", - "@esbuild/darwin-x64": "0.19.2", - "@esbuild/freebsd-arm64": "0.19.2", - "@esbuild/freebsd-x64": "0.19.2", - "@esbuild/linux-arm": "0.19.2", - "@esbuild/linux-arm64": "0.19.2", - "@esbuild/linux-ia32": "0.19.2", - "@esbuild/linux-loong64": "0.19.2", - "@esbuild/linux-mips64el": "0.19.2", - "@esbuild/linux-ppc64": "0.19.2", - "@esbuild/linux-riscv64": "0.19.2", - "@esbuild/linux-s390x": "0.19.2", - "@esbuild/linux-x64": "0.19.2", - "@esbuild/netbsd-x64": "0.19.2", - "@esbuild/openbsd-x64": "0.19.2", - "@esbuild/sunos-x64": "0.19.2", - "@esbuild/win32-arm64": "0.19.2", - "@esbuild/win32-ia32": "0.19.2", - "@esbuild/win32-x64": "0.19.2" + "@esbuild/android-arm": "0.19.5", + "@esbuild/android-arm64": "0.19.5", + "@esbuild/android-x64": "0.19.5", + "@esbuild/darwin-arm64": "0.19.5", + "@esbuild/darwin-x64": "0.19.5", + "@esbuild/freebsd-arm64": "0.19.5", + "@esbuild/freebsd-x64": "0.19.5", + "@esbuild/linux-arm": "0.19.5", + "@esbuild/linux-arm64": "0.19.5", + "@esbuild/linux-ia32": "0.19.5", + "@esbuild/linux-loong64": "0.19.5", + "@esbuild/linux-mips64el": "0.19.5", + "@esbuild/linux-ppc64": "0.19.5", + "@esbuild/linux-riscv64": "0.19.5", + "@esbuild/linux-s390x": "0.19.5", + "@esbuild/linux-x64": "0.19.5", + "@esbuild/netbsd-x64": "0.19.5", + "@esbuild/openbsd-x64": "0.19.5", + "@esbuild/sunos-x64": "0.19.5", + "@esbuild/win32-arm64": "0.19.5", + "@esbuild/win32-ia32": "0.19.5", + "@esbuild/win32-x64": "0.19.5" } }, "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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "^8.47.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/js": "8.51.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", @@ -1497,24 +1569,15 @@ "eslint-plugin-import": "^2.25.2" } }, - "node_modules/eslint-config-airbnb-base/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -1604,15 +1667,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -1641,289 +1695,57 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/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==", + "node_modules/eslint/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==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/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==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10" } }, - "node_modules/eslint/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==", - "dev": true - }, - "node_modules/eslint/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==", + "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==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/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==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/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==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "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==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" + "node": ">=4.0" } }, "node_modules/estraverse": { @@ -1996,34 +1818,39 @@ } }, "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/for-each": { @@ -2042,9 +1869,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -2056,21 +1883,24 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -2161,9 +1991,9 @@ } }, "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2215,13 +2045,10 @@ "dev": true }, "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { "node": ">= 0.4.0" } @@ -2236,12 +2063,12 @@ } }, "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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-property-descriptors": { @@ -2316,9 +2143,9 @@ } }, "node_modules/immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", "dev": true }, "node_modules/import-fresh": { @@ -2609,16 +2436,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -2639,6 +2462,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2657,6 +2486,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -2687,6 +2522,15 @@ "json5": "lib/cli.js" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2748,16 +2592,18 @@ } }, "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash.debounce": { @@ -2779,9 +2625,9 @@ "dev": true }, "node_modules/markdown-it": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", - "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", + "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", "dependencies": { "argparse": "^2.0.1", "entities": "~3.0.1", @@ -2863,6 +2709,15 @@ "validate-npm-package-license": "^3.0.1" } }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2897,10 +2752,148 @@ "node": ">= 4" } }, + "node_modules/npm-run-all/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/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==", + "dev": true + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/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==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm-run-all/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2934,28 +2927,28 @@ } }, "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -2965,26 +2958,26 @@ } }, "node_modules/object.groupby": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", - "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "es-abstract": "^1.21.2", + "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1" } }, "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -3026,30 +3019,33 @@ "dev": true }, "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==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -3087,12 +3083,12 @@ } }, "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-is-absolute": { @@ -3105,12 +3101,12 @@ } }, "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-parse": { @@ -3229,14 +3225,14 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -3261,12 +3257,12 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz", - "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-core-module": "^2.12.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -3334,6 +3330,24 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -3349,9 +3363,9 @@ } }, "node_modules/sass": { - "version": "1.66.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz", - "integrity": "sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==", + "version": "1.69.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.4.tgz", + "integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -3366,12 +3380,12 @@ } }, "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" } }, "node_modules/set-blocking": { @@ -3380,25 +3394,54 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shell-quote": { @@ -3473,9 +3516,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", "dev": true }, "node_modules/string-width": { @@ -3492,15 +3535,36 @@ "node": ">=6" } }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/string.prototype.padend": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", - "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", + "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -3510,14 +3574,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -3527,43 +3591,43 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/strip-bom": { @@ -3588,20 +3652,20 @@ } }, "node_modules/style-mod": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.3.tgz", - "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz", + "integrity": "sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==" }, "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==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -3670,6 +3734,57 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", @@ -3724,20 +3839,23 @@ } }, "node_modules/w3c-keyname": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", - "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==" + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/which-boxed-primitive": { @@ -3757,23 +3875,22 @@ } }, "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3796,6 +3913,54 @@ "node": ">=6" } }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/wrap-ansi/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==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3857,6 +4022,67 @@ "decamelize": "^1.2.0" } }, + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/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==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/public/dist/app.js b/public/dist/app.js index ebf34ef7270..3ef6883c341 100644 --- a/public/dist/app.js +++ b/public/dist/app.js @@ -1,33 +1,33 @@ -var Lu=Object.create;var _t=Object.defineProperty;var Iu=Object.getOwnPropertyDescriptor;var $u=Object.getOwnPropertyNames;var Mu=Object.getPrototypeOf,Fu=Object.prototype.hasOwnProperty;var qu=(n,e,t)=>e in n?_t(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Bu=(n,e)=>()=>(n&&(e=n(n=0)),e);var _=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),St=(n,e)=>{for(var t in e)_t(n,t,{get:e[t],enumerable:!0})},Vo=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of $u(e))!Fu.call(n,r)&&r!==t&&_t(n,r,{get:()=>e[r],enumerable:!(i=Iu(e,r))||i.enumerable});return n};var Wo=(n,e,t)=>(t=n!=null?Lu(Mu(n)):{},Vo(e||!n||!n.__esModule?_t(t,"default",{value:n,enumerable:!0}):t,n)),Pu=n=>Vo(_t({},"__esModule",{value:!0}),n);var se=(n,e,t)=>(qu(n,typeof e!="symbol"?e+"":e,t),t),Ou=(n,e,t)=>{if(!e.has(n))throw TypeError("Cannot "+t)};var re=(n,e,t)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,t)};var T=(n,e,t)=>(Ou(n,e,"access private method"),t);var $s=_((Db,qh)=>{qh.exports={Aacute:"\xC1",aacute:"\xE1",Abreve:"\u0102",abreve:"\u0103",ac:"\u223E",acd:"\u223F",acE:"\u223E\u0333",Acirc:"\xC2",acirc:"\xE2",acute:"\xB4",Acy:"\u0410",acy:"\u0430",AElig:"\xC6",aelig:"\xE6",af:"\u2061",Afr:"\u{1D504}",afr:"\u{1D51E}",Agrave:"\xC0",agrave:"\xE0",alefsym:"\u2135",aleph:"\u2135",Alpha:"\u0391",alpha:"\u03B1",Amacr:"\u0100",amacr:"\u0101",amalg:"\u2A3F",amp:"&",AMP:"&",andand:"\u2A55",And:"\u2A53",and:"\u2227",andd:"\u2A5C",andslope:"\u2A58",andv:"\u2A5A",ang:"\u2220",ange:"\u29A4",angle:"\u2220",angmsdaa:"\u29A8",angmsdab:"\u29A9",angmsdac:"\u29AA",angmsdad:"\u29AB",angmsdae:"\u29AC",angmsdaf:"\u29AD",angmsdag:"\u29AE",angmsdah:"\u29AF",angmsd:"\u2221",angrt:"\u221F",angrtvb:"\u22BE",angrtvbd:"\u299D",angsph:"\u2222",angst:"\xC5",angzarr:"\u237C",Aogon:"\u0104",aogon:"\u0105",Aopf:"\u{1D538}",aopf:"\u{1D552}",apacir:"\u2A6F",ap:"\u2248",apE:"\u2A70",ape:"\u224A",apid:"\u224B",apos:"'",ApplyFunction:"\u2061",approx:"\u2248",approxeq:"\u224A",Aring:"\xC5",aring:"\xE5",Ascr:"\u{1D49C}",ascr:"\u{1D4B6}",Assign:"\u2254",ast:"*",asymp:"\u2248",asympeq:"\u224D",Atilde:"\xC3",atilde:"\xE3",Auml:"\xC4",auml:"\xE4",awconint:"\u2233",awint:"\u2A11",backcong:"\u224C",backepsilon:"\u03F6",backprime:"\u2035",backsim:"\u223D",backsimeq:"\u22CD",Backslash:"\u2216",Barv:"\u2AE7",barvee:"\u22BD",barwed:"\u2305",Barwed:"\u2306",barwedge:"\u2305",bbrk:"\u23B5",bbrktbrk:"\u23B6",bcong:"\u224C",Bcy:"\u0411",bcy:"\u0431",bdquo:"\u201E",becaus:"\u2235",because:"\u2235",Because:"\u2235",bemptyv:"\u29B0",bepsi:"\u03F6",bernou:"\u212C",Bernoullis:"\u212C",Beta:"\u0392",beta:"\u03B2",beth:"\u2136",between:"\u226C",Bfr:"\u{1D505}",bfr:"\u{1D51F}",bigcap:"\u22C2",bigcirc:"\u25EF",bigcup:"\u22C3",bigodot:"\u2A00",bigoplus:"\u2A01",bigotimes:"\u2A02",bigsqcup:"\u2A06",bigstar:"\u2605",bigtriangledown:"\u25BD",bigtriangleup:"\u25B3",biguplus:"\u2A04",bigvee:"\u22C1",bigwedge:"\u22C0",bkarow:"\u290D",blacklozenge:"\u29EB",blacksquare:"\u25AA",blacktriangle:"\u25B4",blacktriangledown:"\u25BE",blacktriangleleft:"\u25C2",blacktriangleright:"\u25B8",blank:"\u2423",blk12:"\u2592",blk14:"\u2591",blk34:"\u2593",block:"\u2588",bne:"=\u20E5",bnequiv:"\u2261\u20E5",bNot:"\u2AED",bnot:"\u2310",Bopf:"\u{1D539}",bopf:"\u{1D553}",bot:"\u22A5",bottom:"\u22A5",bowtie:"\u22C8",boxbox:"\u29C9",boxdl:"\u2510",boxdL:"\u2555",boxDl:"\u2556",boxDL:"\u2557",boxdr:"\u250C",boxdR:"\u2552",boxDr:"\u2553",boxDR:"\u2554",boxh:"\u2500",boxH:"\u2550",boxhd:"\u252C",boxHd:"\u2564",boxhD:"\u2565",boxHD:"\u2566",boxhu:"\u2534",boxHu:"\u2567",boxhU:"\u2568",boxHU:"\u2569",boxminus:"\u229F",boxplus:"\u229E",boxtimes:"\u22A0",boxul:"\u2518",boxuL:"\u255B",boxUl:"\u255C",boxUL:"\u255D",boxur:"\u2514",boxuR:"\u2558",boxUr:"\u2559",boxUR:"\u255A",boxv:"\u2502",boxV:"\u2551",boxvh:"\u253C",boxvH:"\u256A",boxVh:"\u256B",boxVH:"\u256C",boxvl:"\u2524",boxvL:"\u2561",boxVl:"\u2562",boxVL:"\u2563",boxvr:"\u251C",boxvR:"\u255E",boxVr:"\u255F",boxVR:"\u2560",bprime:"\u2035",breve:"\u02D8",Breve:"\u02D8",brvbar:"\xA6",bscr:"\u{1D4B7}",Bscr:"\u212C",bsemi:"\u204F",bsim:"\u223D",bsime:"\u22CD",bsolb:"\u29C5",bsol:"\\",bsolhsub:"\u27C8",bull:"\u2022",bullet:"\u2022",bump:"\u224E",bumpE:"\u2AAE",bumpe:"\u224F",Bumpeq:"\u224E",bumpeq:"\u224F",Cacute:"\u0106",cacute:"\u0107",capand:"\u2A44",capbrcup:"\u2A49",capcap:"\u2A4B",cap:"\u2229",Cap:"\u22D2",capcup:"\u2A47",capdot:"\u2A40",CapitalDifferentialD:"\u2145",caps:"\u2229\uFE00",caret:"\u2041",caron:"\u02C7",Cayleys:"\u212D",ccaps:"\u2A4D",Ccaron:"\u010C",ccaron:"\u010D",Ccedil:"\xC7",ccedil:"\xE7",Ccirc:"\u0108",ccirc:"\u0109",Cconint:"\u2230",ccups:"\u2A4C",ccupssm:"\u2A50",Cdot:"\u010A",cdot:"\u010B",cedil:"\xB8",Cedilla:"\xB8",cemptyv:"\u29B2",cent:"\xA2",centerdot:"\xB7",CenterDot:"\xB7",cfr:"\u{1D520}",Cfr:"\u212D",CHcy:"\u0427",chcy:"\u0447",check:"\u2713",checkmark:"\u2713",Chi:"\u03A7",chi:"\u03C7",circ:"\u02C6",circeq:"\u2257",circlearrowleft:"\u21BA",circlearrowright:"\u21BB",circledast:"\u229B",circledcirc:"\u229A",circleddash:"\u229D",CircleDot:"\u2299",circledR:"\xAE",circledS:"\u24C8",CircleMinus:"\u2296",CirclePlus:"\u2295",CircleTimes:"\u2297",cir:"\u25CB",cirE:"\u29C3",cire:"\u2257",cirfnint:"\u2A10",cirmid:"\u2AEF",cirscir:"\u29C2",ClockwiseContourIntegral:"\u2232",CloseCurlyDoubleQuote:"\u201D",CloseCurlyQuote:"\u2019",clubs:"\u2663",clubsuit:"\u2663",colon:":",Colon:"\u2237",Colone:"\u2A74",colone:"\u2254",coloneq:"\u2254",comma:",",commat:"@",comp:"\u2201",compfn:"\u2218",complement:"\u2201",complexes:"\u2102",cong:"\u2245",congdot:"\u2A6D",Congruent:"\u2261",conint:"\u222E",Conint:"\u222F",ContourIntegral:"\u222E",copf:"\u{1D554}",Copf:"\u2102",coprod:"\u2210",Coproduct:"\u2210",copy:"\xA9",COPY:"\xA9",copysr:"\u2117",CounterClockwiseContourIntegral:"\u2233",crarr:"\u21B5",cross:"\u2717",Cross:"\u2A2F",Cscr:"\u{1D49E}",cscr:"\u{1D4B8}",csub:"\u2ACF",csube:"\u2AD1",csup:"\u2AD0",csupe:"\u2AD2",ctdot:"\u22EF",cudarrl:"\u2938",cudarrr:"\u2935",cuepr:"\u22DE",cuesc:"\u22DF",cularr:"\u21B6",cularrp:"\u293D",cupbrcap:"\u2A48",cupcap:"\u2A46",CupCap:"\u224D",cup:"\u222A",Cup:"\u22D3",cupcup:"\u2A4A",cupdot:"\u228D",cupor:"\u2A45",cups:"\u222A\uFE00",curarr:"\u21B7",curarrm:"\u293C",curlyeqprec:"\u22DE",curlyeqsucc:"\u22DF",curlyvee:"\u22CE",curlywedge:"\u22CF",curren:"\xA4",curvearrowleft:"\u21B6",curvearrowright:"\u21B7",cuvee:"\u22CE",cuwed:"\u22CF",cwconint:"\u2232",cwint:"\u2231",cylcty:"\u232D",dagger:"\u2020",Dagger:"\u2021",daleth:"\u2138",darr:"\u2193",Darr:"\u21A1",dArr:"\u21D3",dash:"\u2010",Dashv:"\u2AE4",dashv:"\u22A3",dbkarow:"\u290F",dblac:"\u02DD",Dcaron:"\u010E",dcaron:"\u010F",Dcy:"\u0414",dcy:"\u0434",ddagger:"\u2021",ddarr:"\u21CA",DD:"\u2145",dd:"\u2146",DDotrahd:"\u2911",ddotseq:"\u2A77",deg:"\xB0",Del:"\u2207",Delta:"\u0394",delta:"\u03B4",demptyv:"\u29B1",dfisht:"\u297F",Dfr:"\u{1D507}",dfr:"\u{1D521}",dHar:"\u2965",dharl:"\u21C3",dharr:"\u21C2",DiacriticalAcute:"\xB4",DiacriticalDot:"\u02D9",DiacriticalDoubleAcute:"\u02DD",DiacriticalGrave:"`",DiacriticalTilde:"\u02DC",diam:"\u22C4",diamond:"\u22C4",Diamond:"\u22C4",diamondsuit:"\u2666",diams:"\u2666",die:"\xA8",DifferentialD:"\u2146",digamma:"\u03DD",disin:"\u22F2",div:"\xF7",divide:"\xF7",divideontimes:"\u22C7",divonx:"\u22C7",DJcy:"\u0402",djcy:"\u0452",dlcorn:"\u231E",dlcrop:"\u230D",dollar:"$",Dopf:"\u{1D53B}",dopf:"\u{1D555}",Dot:"\xA8",dot:"\u02D9",DotDot:"\u20DC",doteq:"\u2250",doteqdot:"\u2251",DotEqual:"\u2250",dotminus:"\u2238",dotplus:"\u2214",dotsquare:"\u22A1",doublebarwedge:"\u2306",DoubleContourIntegral:"\u222F",DoubleDot:"\xA8",DoubleDownArrow:"\u21D3",DoubleLeftArrow:"\u21D0",DoubleLeftRightArrow:"\u21D4",DoubleLeftTee:"\u2AE4",DoubleLongLeftArrow:"\u27F8",DoubleLongLeftRightArrow:"\u27FA",DoubleLongRightArrow:"\u27F9",DoubleRightArrow:"\u21D2",DoubleRightTee:"\u22A8",DoubleUpArrow:"\u21D1",DoubleUpDownArrow:"\u21D5",DoubleVerticalBar:"\u2225",DownArrowBar:"\u2913",downarrow:"\u2193",DownArrow:"\u2193",Downarrow:"\u21D3",DownArrowUpArrow:"\u21F5",DownBreve:"\u0311",downdownarrows:"\u21CA",downharpoonleft:"\u21C3",downharpoonright:"\u21C2",DownLeftRightVector:"\u2950",DownLeftTeeVector:"\u295E",DownLeftVectorBar:"\u2956",DownLeftVector:"\u21BD",DownRightTeeVector:"\u295F",DownRightVectorBar:"\u2957",DownRightVector:"\u21C1",DownTeeArrow:"\u21A7",DownTee:"\u22A4",drbkarow:"\u2910",drcorn:"\u231F",drcrop:"\u230C",Dscr:"\u{1D49F}",dscr:"\u{1D4B9}",DScy:"\u0405",dscy:"\u0455",dsol:"\u29F6",Dstrok:"\u0110",dstrok:"\u0111",dtdot:"\u22F1",dtri:"\u25BF",dtrif:"\u25BE",duarr:"\u21F5",duhar:"\u296F",dwangle:"\u29A6",DZcy:"\u040F",dzcy:"\u045F",dzigrarr:"\u27FF",Eacute:"\xC9",eacute:"\xE9",easter:"\u2A6E",Ecaron:"\u011A",ecaron:"\u011B",Ecirc:"\xCA",ecirc:"\xEA",ecir:"\u2256",ecolon:"\u2255",Ecy:"\u042D",ecy:"\u044D",eDDot:"\u2A77",Edot:"\u0116",edot:"\u0117",eDot:"\u2251",ee:"\u2147",efDot:"\u2252",Efr:"\u{1D508}",efr:"\u{1D522}",eg:"\u2A9A",Egrave:"\xC8",egrave:"\xE8",egs:"\u2A96",egsdot:"\u2A98",el:"\u2A99",Element:"\u2208",elinters:"\u23E7",ell:"\u2113",els:"\u2A95",elsdot:"\u2A97",Emacr:"\u0112",emacr:"\u0113",empty:"\u2205",emptyset:"\u2205",EmptySmallSquare:"\u25FB",emptyv:"\u2205",EmptyVerySmallSquare:"\u25AB",emsp13:"\u2004",emsp14:"\u2005",emsp:"\u2003",ENG:"\u014A",eng:"\u014B",ensp:"\u2002",Eogon:"\u0118",eogon:"\u0119",Eopf:"\u{1D53C}",eopf:"\u{1D556}",epar:"\u22D5",eparsl:"\u29E3",eplus:"\u2A71",epsi:"\u03B5",Epsilon:"\u0395",epsilon:"\u03B5",epsiv:"\u03F5",eqcirc:"\u2256",eqcolon:"\u2255",eqsim:"\u2242",eqslantgtr:"\u2A96",eqslantless:"\u2A95",Equal:"\u2A75",equals:"=",EqualTilde:"\u2242",equest:"\u225F",Equilibrium:"\u21CC",equiv:"\u2261",equivDD:"\u2A78",eqvparsl:"\u29E5",erarr:"\u2971",erDot:"\u2253",escr:"\u212F",Escr:"\u2130",esdot:"\u2250",Esim:"\u2A73",esim:"\u2242",Eta:"\u0397",eta:"\u03B7",ETH:"\xD0",eth:"\xF0",Euml:"\xCB",euml:"\xEB",euro:"\u20AC",excl:"!",exist:"\u2203",Exists:"\u2203",expectation:"\u2130",exponentiale:"\u2147",ExponentialE:"\u2147",fallingdotseq:"\u2252",Fcy:"\u0424",fcy:"\u0444",female:"\u2640",ffilig:"\uFB03",fflig:"\uFB00",ffllig:"\uFB04",Ffr:"\u{1D509}",ffr:"\u{1D523}",filig:"\uFB01",FilledSmallSquare:"\u25FC",FilledVerySmallSquare:"\u25AA",fjlig:"fj",flat:"\u266D",fllig:"\uFB02",fltns:"\u25B1",fnof:"\u0192",Fopf:"\u{1D53D}",fopf:"\u{1D557}",forall:"\u2200",ForAll:"\u2200",fork:"\u22D4",forkv:"\u2AD9",Fouriertrf:"\u2131",fpartint:"\u2A0D",frac12:"\xBD",frac13:"\u2153",frac14:"\xBC",frac15:"\u2155",frac16:"\u2159",frac18:"\u215B",frac23:"\u2154",frac25:"\u2156",frac34:"\xBE",frac35:"\u2157",frac38:"\u215C",frac45:"\u2158",frac56:"\u215A",frac58:"\u215D",frac78:"\u215E",frasl:"\u2044",frown:"\u2322",fscr:"\u{1D4BB}",Fscr:"\u2131",gacute:"\u01F5",Gamma:"\u0393",gamma:"\u03B3",Gammad:"\u03DC",gammad:"\u03DD",gap:"\u2A86",Gbreve:"\u011E",gbreve:"\u011F",Gcedil:"\u0122",Gcirc:"\u011C",gcirc:"\u011D",Gcy:"\u0413",gcy:"\u0433",Gdot:"\u0120",gdot:"\u0121",ge:"\u2265",gE:"\u2267",gEl:"\u2A8C",gel:"\u22DB",geq:"\u2265",geqq:"\u2267",geqslant:"\u2A7E",gescc:"\u2AA9",ges:"\u2A7E",gesdot:"\u2A80",gesdoto:"\u2A82",gesdotol:"\u2A84",gesl:"\u22DB\uFE00",gesles:"\u2A94",Gfr:"\u{1D50A}",gfr:"\u{1D524}",gg:"\u226B",Gg:"\u22D9",ggg:"\u22D9",gimel:"\u2137",GJcy:"\u0403",gjcy:"\u0453",gla:"\u2AA5",gl:"\u2277",glE:"\u2A92",glj:"\u2AA4",gnap:"\u2A8A",gnapprox:"\u2A8A",gne:"\u2A88",gnE:"\u2269",gneq:"\u2A88",gneqq:"\u2269",gnsim:"\u22E7",Gopf:"\u{1D53E}",gopf:"\u{1D558}",grave:"`",GreaterEqual:"\u2265",GreaterEqualLess:"\u22DB",GreaterFullEqual:"\u2267",GreaterGreater:"\u2AA2",GreaterLess:"\u2277",GreaterSlantEqual:"\u2A7E",GreaterTilde:"\u2273",Gscr:"\u{1D4A2}",gscr:"\u210A",gsim:"\u2273",gsime:"\u2A8E",gsiml:"\u2A90",gtcc:"\u2AA7",gtcir:"\u2A7A",gt:">",GT:">",Gt:"\u226B",gtdot:"\u22D7",gtlPar:"\u2995",gtquest:"\u2A7C",gtrapprox:"\u2A86",gtrarr:"\u2978",gtrdot:"\u22D7",gtreqless:"\u22DB",gtreqqless:"\u2A8C",gtrless:"\u2277",gtrsim:"\u2273",gvertneqq:"\u2269\uFE00",gvnE:"\u2269\uFE00",Hacek:"\u02C7",hairsp:"\u200A",half:"\xBD",hamilt:"\u210B",HARDcy:"\u042A",hardcy:"\u044A",harrcir:"\u2948",harr:"\u2194",hArr:"\u21D4",harrw:"\u21AD",Hat:"^",hbar:"\u210F",Hcirc:"\u0124",hcirc:"\u0125",hearts:"\u2665",heartsuit:"\u2665",hellip:"\u2026",hercon:"\u22B9",hfr:"\u{1D525}",Hfr:"\u210C",HilbertSpace:"\u210B",hksearow:"\u2925",hkswarow:"\u2926",hoarr:"\u21FF",homtht:"\u223B",hookleftarrow:"\u21A9",hookrightarrow:"\u21AA",hopf:"\u{1D559}",Hopf:"\u210D",horbar:"\u2015",HorizontalLine:"\u2500",hscr:"\u{1D4BD}",Hscr:"\u210B",hslash:"\u210F",Hstrok:"\u0126",hstrok:"\u0127",HumpDownHump:"\u224E",HumpEqual:"\u224F",hybull:"\u2043",hyphen:"\u2010",Iacute:"\xCD",iacute:"\xED",ic:"\u2063",Icirc:"\xCE",icirc:"\xEE",Icy:"\u0418",icy:"\u0438",Idot:"\u0130",IEcy:"\u0415",iecy:"\u0435",iexcl:"\xA1",iff:"\u21D4",ifr:"\u{1D526}",Ifr:"\u2111",Igrave:"\xCC",igrave:"\xEC",ii:"\u2148",iiiint:"\u2A0C",iiint:"\u222D",iinfin:"\u29DC",iiota:"\u2129",IJlig:"\u0132",ijlig:"\u0133",Imacr:"\u012A",imacr:"\u012B",image:"\u2111",ImaginaryI:"\u2148",imagline:"\u2110",imagpart:"\u2111",imath:"\u0131",Im:"\u2111",imof:"\u22B7",imped:"\u01B5",Implies:"\u21D2",incare:"\u2105",in:"\u2208",infin:"\u221E",infintie:"\u29DD",inodot:"\u0131",intcal:"\u22BA",int:"\u222B",Int:"\u222C",integers:"\u2124",Integral:"\u222B",intercal:"\u22BA",Intersection:"\u22C2",intlarhk:"\u2A17",intprod:"\u2A3C",InvisibleComma:"\u2063",InvisibleTimes:"\u2062",IOcy:"\u0401",iocy:"\u0451",Iogon:"\u012E",iogon:"\u012F",Iopf:"\u{1D540}",iopf:"\u{1D55A}",Iota:"\u0399",iota:"\u03B9",iprod:"\u2A3C",iquest:"\xBF",iscr:"\u{1D4BE}",Iscr:"\u2110",isin:"\u2208",isindot:"\u22F5",isinE:"\u22F9",isins:"\u22F4",isinsv:"\u22F3",isinv:"\u2208",it:"\u2062",Itilde:"\u0128",itilde:"\u0129",Iukcy:"\u0406",iukcy:"\u0456",Iuml:"\xCF",iuml:"\xEF",Jcirc:"\u0134",jcirc:"\u0135",Jcy:"\u0419",jcy:"\u0439",Jfr:"\u{1D50D}",jfr:"\u{1D527}",jmath:"\u0237",Jopf:"\u{1D541}",jopf:"\u{1D55B}",Jscr:"\u{1D4A5}",jscr:"\u{1D4BF}",Jsercy:"\u0408",jsercy:"\u0458",Jukcy:"\u0404",jukcy:"\u0454",Kappa:"\u039A",kappa:"\u03BA",kappav:"\u03F0",Kcedil:"\u0136",kcedil:"\u0137",Kcy:"\u041A",kcy:"\u043A",Kfr:"\u{1D50E}",kfr:"\u{1D528}",kgreen:"\u0138",KHcy:"\u0425",khcy:"\u0445",KJcy:"\u040C",kjcy:"\u045C",Kopf:"\u{1D542}",kopf:"\u{1D55C}",Kscr:"\u{1D4A6}",kscr:"\u{1D4C0}",lAarr:"\u21DA",Lacute:"\u0139",lacute:"\u013A",laemptyv:"\u29B4",lagran:"\u2112",Lambda:"\u039B",lambda:"\u03BB",lang:"\u27E8",Lang:"\u27EA",langd:"\u2991",langle:"\u27E8",lap:"\u2A85",Laplacetrf:"\u2112",laquo:"\xAB",larrb:"\u21E4",larrbfs:"\u291F",larr:"\u2190",Larr:"\u219E",lArr:"\u21D0",larrfs:"\u291D",larrhk:"\u21A9",larrlp:"\u21AB",larrpl:"\u2939",larrsim:"\u2973",larrtl:"\u21A2",latail:"\u2919",lAtail:"\u291B",lat:"\u2AAB",late:"\u2AAD",lates:"\u2AAD\uFE00",lbarr:"\u290C",lBarr:"\u290E",lbbrk:"\u2772",lbrace:"{",lbrack:"[",lbrke:"\u298B",lbrksld:"\u298F",lbrkslu:"\u298D",Lcaron:"\u013D",lcaron:"\u013E",Lcedil:"\u013B",lcedil:"\u013C",lceil:"\u2308",lcub:"{",Lcy:"\u041B",lcy:"\u043B",ldca:"\u2936",ldquo:"\u201C",ldquor:"\u201E",ldrdhar:"\u2967",ldrushar:"\u294B",ldsh:"\u21B2",le:"\u2264",lE:"\u2266",LeftAngleBracket:"\u27E8",LeftArrowBar:"\u21E4",leftarrow:"\u2190",LeftArrow:"\u2190",Leftarrow:"\u21D0",LeftArrowRightArrow:"\u21C6",leftarrowtail:"\u21A2",LeftCeiling:"\u2308",LeftDoubleBracket:"\u27E6",LeftDownTeeVector:"\u2961",LeftDownVectorBar:"\u2959",LeftDownVector:"\u21C3",LeftFloor:"\u230A",leftharpoondown:"\u21BD",leftharpoonup:"\u21BC",leftleftarrows:"\u21C7",leftrightarrow:"\u2194",LeftRightArrow:"\u2194",Leftrightarrow:"\u21D4",leftrightarrows:"\u21C6",leftrightharpoons:"\u21CB",leftrightsquigarrow:"\u21AD",LeftRightVector:"\u294E",LeftTeeArrow:"\u21A4",LeftTee:"\u22A3",LeftTeeVector:"\u295A",leftthreetimes:"\u22CB",LeftTriangleBar:"\u29CF",LeftTriangle:"\u22B2",LeftTriangleEqual:"\u22B4",LeftUpDownVector:"\u2951",LeftUpTeeVector:"\u2960",LeftUpVectorBar:"\u2958",LeftUpVector:"\u21BF",LeftVectorBar:"\u2952",LeftVector:"\u21BC",lEg:"\u2A8B",leg:"\u22DA",leq:"\u2264",leqq:"\u2266",leqslant:"\u2A7D",lescc:"\u2AA8",les:"\u2A7D",lesdot:"\u2A7F",lesdoto:"\u2A81",lesdotor:"\u2A83",lesg:"\u22DA\uFE00",lesges:"\u2A93",lessapprox:"\u2A85",lessdot:"\u22D6",lesseqgtr:"\u22DA",lesseqqgtr:"\u2A8B",LessEqualGreater:"\u22DA",LessFullEqual:"\u2266",LessGreater:"\u2276",lessgtr:"\u2276",LessLess:"\u2AA1",lesssim:"\u2272",LessSlantEqual:"\u2A7D",LessTilde:"\u2272",lfisht:"\u297C",lfloor:"\u230A",Lfr:"\u{1D50F}",lfr:"\u{1D529}",lg:"\u2276",lgE:"\u2A91",lHar:"\u2962",lhard:"\u21BD",lharu:"\u21BC",lharul:"\u296A",lhblk:"\u2584",LJcy:"\u0409",ljcy:"\u0459",llarr:"\u21C7",ll:"\u226A",Ll:"\u22D8",llcorner:"\u231E",Lleftarrow:"\u21DA",llhard:"\u296B",lltri:"\u25FA",Lmidot:"\u013F",lmidot:"\u0140",lmoustache:"\u23B0",lmoust:"\u23B0",lnap:"\u2A89",lnapprox:"\u2A89",lne:"\u2A87",lnE:"\u2268",lneq:"\u2A87",lneqq:"\u2268",lnsim:"\u22E6",loang:"\u27EC",loarr:"\u21FD",lobrk:"\u27E6",longleftarrow:"\u27F5",LongLeftArrow:"\u27F5",Longleftarrow:"\u27F8",longleftrightarrow:"\u27F7",LongLeftRightArrow:"\u27F7",Longleftrightarrow:"\u27FA",longmapsto:"\u27FC",longrightarrow:"\u27F6",LongRightArrow:"\u27F6",Longrightarrow:"\u27F9",looparrowleft:"\u21AB",looparrowright:"\u21AC",lopar:"\u2985",Lopf:"\u{1D543}",lopf:"\u{1D55D}",loplus:"\u2A2D",lotimes:"\u2A34",lowast:"\u2217",lowbar:"_",LowerLeftArrow:"\u2199",LowerRightArrow:"\u2198",loz:"\u25CA",lozenge:"\u25CA",lozf:"\u29EB",lpar:"(",lparlt:"\u2993",lrarr:"\u21C6",lrcorner:"\u231F",lrhar:"\u21CB",lrhard:"\u296D",lrm:"\u200E",lrtri:"\u22BF",lsaquo:"\u2039",lscr:"\u{1D4C1}",Lscr:"\u2112",lsh:"\u21B0",Lsh:"\u21B0",lsim:"\u2272",lsime:"\u2A8D",lsimg:"\u2A8F",lsqb:"[",lsquo:"\u2018",lsquor:"\u201A",Lstrok:"\u0141",lstrok:"\u0142",ltcc:"\u2AA6",ltcir:"\u2A79",lt:"<",LT:"<",Lt:"\u226A",ltdot:"\u22D6",lthree:"\u22CB",ltimes:"\u22C9",ltlarr:"\u2976",ltquest:"\u2A7B",ltri:"\u25C3",ltrie:"\u22B4",ltrif:"\u25C2",ltrPar:"\u2996",lurdshar:"\u294A",luruhar:"\u2966",lvertneqq:"\u2268\uFE00",lvnE:"\u2268\uFE00",macr:"\xAF",male:"\u2642",malt:"\u2720",maltese:"\u2720",Map:"\u2905",map:"\u21A6",mapsto:"\u21A6",mapstodown:"\u21A7",mapstoleft:"\u21A4",mapstoup:"\u21A5",marker:"\u25AE",mcomma:"\u2A29",Mcy:"\u041C",mcy:"\u043C",mdash:"\u2014",mDDot:"\u223A",measuredangle:"\u2221",MediumSpace:"\u205F",Mellintrf:"\u2133",Mfr:"\u{1D510}",mfr:"\u{1D52A}",mho:"\u2127",micro:"\xB5",midast:"*",midcir:"\u2AF0",mid:"\u2223",middot:"\xB7",minusb:"\u229F",minus:"\u2212",minusd:"\u2238",minusdu:"\u2A2A",MinusPlus:"\u2213",mlcp:"\u2ADB",mldr:"\u2026",mnplus:"\u2213",models:"\u22A7",Mopf:"\u{1D544}",mopf:"\u{1D55E}",mp:"\u2213",mscr:"\u{1D4C2}",Mscr:"\u2133",mstpos:"\u223E",Mu:"\u039C",mu:"\u03BC",multimap:"\u22B8",mumap:"\u22B8",nabla:"\u2207",Nacute:"\u0143",nacute:"\u0144",nang:"\u2220\u20D2",nap:"\u2249",napE:"\u2A70\u0338",napid:"\u224B\u0338",napos:"\u0149",napprox:"\u2249",natural:"\u266E",naturals:"\u2115",natur:"\u266E",nbsp:"\xA0",nbump:"\u224E\u0338",nbumpe:"\u224F\u0338",ncap:"\u2A43",Ncaron:"\u0147",ncaron:"\u0148",Ncedil:"\u0145",ncedil:"\u0146",ncong:"\u2247",ncongdot:"\u2A6D\u0338",ncup:"\u2A42",Ncy:"\u041D",ncy:"\u043D",ndash:"\u2013",nearhk:"\u2924",nearr:"\u2197",neArr:"\u21D7",nearrow:"\u2197",ne:"\u2260",nedot:"\u2250\u0338",NegativeMediumSpace:"\u200B",NegativeThickSpace:"\u200B",NegativeThinSpace:"\u200B",NegativeVeryThinSpace:"\u200B",nequiv:"\u2262",nesear:"\u2928",nesim:"\u2242\u0338",NestedGreaterGreater:"\u226B",NestedLessLess:"\u226A",NewLine:` -`,nexist:"\u2204",nexists:"\u2204",Nfr:"\u{1D511}",nfr:"\u{1D52B}",ngE:"\u2267\u0338",nge:"\u2271",ngeq:"\u2271",ngeqq:"\u2267\u0338",ngeqslant:"\u2A7E\u0338",nges:"\u2A7E\u0338",nGg:"\u22D9\u0338",ngsim:"\u2275",nGt:"\u226B\u20D2",ngt:"\u226F",ngtr:"\u226F",nGtv:"\u226B\u0338",nharr:"\u21AE",nhArr:"\u21CE",nhpar:"\u2AF2",ni:"\u220B",nis:"\u22FC",nisd:"\u22FA",niv:"\u220B",NJcy:"\u040A",njcy:"\u045A",nlarr:"\u219A",nlArr:"\u21CD",nldr:"\u2025",nlE:"\u2266\u0338",nle:"\u2270",nleftarrow:"\u219A",nLeftarrow:"\u21CD",nleftrightarrow:"\u21AE",nLeftrightarrow:"\u21CE",nleq:"\u2270",nleqq:"\u2266\u0338",nleqslant:"\u2A7D\u0338",nles:"\u2A7D\u0338",nless:"\u226E",nLl:"\u22D8\u0338",nlsim:"\u2274",nLt:"\u226A\u20D2",nlt:"\u226E",nltri:"\u22EA",nltrie:"\u22EC",nLtv:"\u226A\u0338",nmid:"\u2224",NoBreak:"\u2060",NonBreakingSpace:"\xA0",nopf:"\u{1D55F}",Nopf:"\u2115",Not:"\u2AEC",not:"\xAC",NotCongruent:"\u2262",NotCupCap:"\u226D",NotDoubleVerticalBar:"\u2226",NotElement:"\u2209",NotEqual:"\u2260",NotEqualTilde:"\u2242\u0338",NotExists:"\u2204",NotGreater:"\u226F",NotGreaterEqual:"\u2271",NotGreaterFullEqual:"\u2267\u0338",NotGreaterGreater:"\u226B\u0338",NotGreaterLess:"\u2279",NotGreaterSlantEqual:"\u2A7E\u0338",NotGreaterTilde:"\u2275",NotHumpDownHump:"\u224E\u0338",NotHumpEqual:"\u224F\u0338",notin:"\u2209",notindot:"\u22F5\u0338",notinE:"\u22F9\u0338",notinva:"\u2209",notinvb:"\u22F7",notinvc:"\u22F6",NotLeftTriangleBar:"\u29CF\u0338",NotLeftTriangle:"\u22EA",NotLeftTriangleEqual:"\u22EC",NotLess:"\u226E",NotLessEqual:"\u2270",NotLessGreater:"\u2278",NotLessLess:"\u226A\u0338",NotLessSlantEqual:"\u2A7D\u0338",NotLessTilde:"\u2274",NotNestedGreaterGreater:"\u2AA2\u0338",NotNestedLessLess:"\u2AA1\u0338",notni:"\u220C",notniva:"\u220C",notnivb:"\u22FE",notnivc:"\u22FD",NotPrecedes:"\u2280",NotPrecedesEqual:"\u2AAF\u0338",NotPrecedesSlantEqual:"\u22E0",NotReverseElement:"\u220C",NotRightTriangleBar:"\u29D0\u0338",NotRightTriangle:"\u22EB",NotRightTriangleEqual:"\u22ED",NotSquareSubset:"\u228F\u0338",NotSquareSubsetEqual:"\u22E2",NotSquareSuperset:"\u2290\u0338",NotSquareSupersetEqual:"\u22E3",NotSubset:"\u2282\u20D2",NotSubsetEqual:"\u2288",NotSucceeds:"\u2281",NotSucceedsEqual:"\u2AB0\u0338",NotSucceedsSlantEqual:"\u22E1",NotSucceedsTilde:"\u227F\u0338",NotSuperset:"\u2283\u20D2",NotSupersetEqual:"\u2289",NotTilde:"\u2241",NotTildeEqual:"\u2244",NotTildeFullEqual:"\u2247",NotTildeTilde:"\u2249",NotVerticalBar:"\u2224",nparallel:"\u2226",npar:"\u2226",nparsl:"\u2AFD\u20E5",npart:"\u2202\u0338",npolint:"\u2A14",npr:"\u2280",nprcue:"\u22E0",nprec:"\u2280",npreceq:"\u2AAF\u0338",npre:"\u2AAF\u0338",nrarrc:"\u2933\u0338",nrarr:"\u219B",nrArr:"\u21CF",nrarrw:"\u219D\u0338",nrightarrow:"\u219B",nRightarrow:"\u21CF",nrtri:"\u22EB",nrtrie:"\u22ED",nsc:"\u2281",nsccue:"\u22E1",nsce:"\u2AB0\u0338",Nscr:"\u{1D4A9}",nscr:"\u{1D4C3}",nshortmid:"\u2224",nshortparallel:"\u2226",nsim:"\u2241",nsime:"\u2244",nsimeq:"\u2244",nsmid:"\u2224",nspar:"\u2226",nsqsube:"\u22E2",nsqsupe:"\u22E3",nsub:"\u2284",nsubE:"\u2AC5\u0338",nsube:"\u2288",nsubset:"\u2282\u20D2",nsubseteq:"\u2288",nsubseteqq:"\u2AC5\u0338",nsucc:"\u2281",nsucceq:"\u2AB0\u0338",nsup:"\u2285",nsupE:"\u2AC6\u0338",nsupe:"\u2289",nsupset:"\u2283\u20D2",nsupseteq:"\u2289",nsupseteqq:"\u2AC6\u0338",ntgl:"\u2279",Ntilde:"\xD1",ntilde:"\xF1",ntlg:"\u2278",ntriangleleft:"\u22EA",ntrianglelefteq:"\u22EC",ntriangleright:"\u22EB",ntrianglerighteq:"\u22ED",Nu:"\u039D",nu:"\u03BD",num:"#",numero:"\u2116",numsp:"\u2007",nvap:"\u224D\u20D2",nvdash:"\u22AC",nvDash:"\u22AD",nVdash:"\u22AE",nVDash:"\u22AF",nvge:"\u2265\u20D2",nvgt:">\u20D2",nvHarr:"\u2904",nvinfin:"\u29DE",nvlArr:"\u2902",nvle:"\u2264\u20D2",nvlt:"<\u20D2",nvltrie:"\u22B4\u20D2",nvrArr:"\u2903",nvrtrie:"\u22B5\u20D2",nvsim:"\u223C\u20D2",nwarhk:"\u2923",nwarr:"\u2196",nwArr:"\u21D6",nwarrow:"\u2196",nwnear:"\u2927",Oacute:"\xD3",oacute:"\xF3",oast:"\u229B",Ocirc:"\xD4",ocirc:"\xF4",ocir:"\u229A",Ocy:"\u041E",ocy:"\u043E",odash:"\u229D",Odblac:"\u0150",odblac:"\u0151",odiv:"\u2A38",odot:"\u2299",odsold:"\u29BC",OElig:"\u0152",oelig:"\u0153",ofcir:"\u29BF",Ofr:"\u{1D512}",ofr:"\u{1D52C}",ogon:"\u02DB",Ograve:"\xD2",ograve:"\xF2",ogt:"\u29C1",ohbar:"\u29B5",ohm:"\u03A9",oint:"\u222E",olarr:"\u21BA",olcir:"\u29BE",olcross:"\u29BB",oline:"\u203E",olt:"\u29C0",Omacr:"\u014C",omacr:"\u014D",Omega:"\u03A9",omega:"\u03C9",Omicron:"\u039F",omicron:"\u03BF",omid:"\u29B6",ominus:"\u2296",Oopf:"\u{1D546}",oopf:"\u{1D560}",opar:"\u29B7",OpenCurlyDoubleQuote:"\u201C",OpenCurlyQuote:"\u2018",operp:"\u29B9",oplus:"\u2295",orarr:"\u21BB",Or:"\u2A54",or:"\u2228",ord:"\u2A5D",order:"\u2134",orderof:"\u2134",ordf:"\xAA",ordm:"\xBA",origof:"\u22B6",oror:"\u2A56",orslope:"\u2A57",orv:"\u2A5B",oS:"\u24C8",Oscr:"\u{1D4AA}",oscr:"\u2134",Oslash:"\xD8",oslash:"\xF8",osol:"\u2298",Otilde:"\xD5",otilde:"\xF5",otimesas:"\u2A36",Otimes:"\u2A37",otimes:"\u2297",Ouml:"\xD6",ouml:"\xF6",ovbar:"\u233D",OverBar:"\u203E",OverBrace:"\u23DE",OverBracket:"\u23B4",OverParenthesis:"\u23DC",para:"\xB6",parallel:"\u2225",par:"\u2225",parsim:"\u2AF3",parsl:"\u2AFD",part:"\u2202",PartialD:"\u2202",Pcy:"\u041F",pcy:"\u043F",percnt:"%",period:".",permil:"\u2030",perp:"\u22A5",pertenk:"\u2031",Pfr:"\u{1D513}",pfr:"\u{1D52D}",Phi:"\u03A6",phi:"\u03C6",phiv:"\u03D5",phmmat:"\u2133",phone:"\u260E",Pi:"\u03A0",pi:"\u03C0",pitchfork:"\u22D4",piv:"\u03D6",planck:"\u210F",planckh:"\u210E",plankv:"\u210F",plusacir:"\u2A23",plusb:"\u229E",pluscir:"\u2A22",plus:"+",plusdo:"\u2214",plusdu:"\u2A25",pluse:"\u2A72",PlusMinus:"\xB1",plusmn:"\xB1",plussim:"\u2A26",plustwo:"\u2A27",pm:"\xB1",Poincareplane:"\u210C",pointint:"\u2A15",popf:"\u{1D561}",Popf:"\u2119",pound:"\xA3",prap:"\u2AB7",Pr:"\u2ABB",pr:"\u227A",prcue:"\u227C",precapprox:"\u2AB7",prec:"\u227A",preccurlyeq:"\u227C",Precedes:"\u227A",PrecedesEqual:"\u2AAF",PrecedesSlantEqual:"\u227C",PrecedesTilde:"\u227E",preceq:"\u2AAF",precnapprox:"\u2AB9",precneqq:"\u2AB5",precnsim:"\u22E8",pre:"\u2AAF",prE:"\u2AB3",precsim:"\u227E",prime:"\u2032",Prime:"\u2033",primes:"\u2119",prnap:"\u2AB9",prnE:"\u2AB5",prnsim:"\u22E8",prod:"\u220F",Product:"\u220F",profalar:"\u232E",profline:"\u2312",profsurf:"\u2313",prop:"\u221D",Proportional:"\u221D",Proportion:"\u2237",propto:"\u221D",prsim:"\u227E",prurel:"\u22B0",Pscr:"\u{1D4AB}",pscr:"\u{1D4C5}",Psi:"\u03A8",psi:"\u03C8",puncsp:"\u2008",Qfr:"\u{1D514}",qfr:"\u{1D52E}",qint:"\u2A0C",qopf:"\u{1D562}",Qopf:"\u211A",qprime:"\u2057",Qscr:"\u{1D4AC}",qscr:"\u{1D4C6}",quaternions:"\u210D",quatint:"\u2A16",quest:"?",questeq:"\u225F",quot:'"',QUOT:'"',rAarr:"\u21DB",race:"\u223D\u0331",Racute:"\u0154",racute:"\u0155",radic:"\u221A",raemptyv:"\u29B3",rang:"\u27E9",Rang:"\u27EB",rangd:"\u2992",range:"\u29A5",rangle:"\u27E9",raquo:"\xBB",rarrap:"\u2975",rarrb:"\u21E5",rarrbfs:"\u2920",rarrc:"\u2933",rarr:"\u2192",Rarr:"\u21A0",rArr:"\u21D2",rarrfs:"\u291E",rarrhk:"\u21AA",rarrlp:"\u21AC",rarrpl:"\u2945",rarrsim:"\u2974",Rarrtl:"\u2916",rarrtl:"\u21A3",rarrw:"\u219D",ratail:"\u291A",rAtail:"\u291C",ratio:"\u2236",rationals:"\u211A",rbarr:"\u290D",rBarr:"\u290F",RBarr:"\u2910",rbbrk:"\u2773",rbrace:"}",rbrack:"]",rbrke:"\u298C",rbrksld:"\u298E",rbrkslu:"\u2990",Rcaron:"\u0158",rcaron:"\u0159",Rcedil:"\u0156",rcedil:"\u0157",rceil:"\u2309",rcub:"}",Rcy:"\u0420",rcy:"\u0440",rdca:"\u2937",rdldhar:"\u2969",rdquo:"\u201D",rdquor:"\u201D",rdsh:"\u21B3",real:"\u211C",realine:"\u211B",realpart:"\u211C",reals:"\u211D",Re:"\u211C",rect:"\u25AD",reg:"\xAE",REG:"\xAE",ReverseElement:"\u220B",ReverseEquilibrium:"\u21CB",ReverseUpEquilibrium:"\u296F",rfisht:"\u297D",rfloor:"\u230B",rfr:"\u{1D52F}",Rfr:"\u211C",rHar:"\u2964",rhard:"\u21C1",rharu:"\u21C0",rharul:"\u296C",Rho:"\u03A1",rho:"\u03C1",rhov:"\u03F1",RightAngleBracket:"\u27E9",RightArrowBar:"\u21E5",rightarrow:"\u2192",RightArrow:"\u2192",Rightarrow:"\u21D2",RightArrowLeftArrow:"\u21C4",rightarrowtail:"\u21A3",RightCeiling:"\u2309",RightDoubleBracket:"\u27E7",RightDownTeeVector:"\u295D",RightDownVectorBar:"\u2955",RightDownVector:"\u21C2",RightFloor:"\u230B",rightharpoondown:"\u21C1",rightharpoonup:"\u21C0",rightleftarrows:"\u21C4",rightleftharpoons:"\u21CC",rightrightarrows:"\u21C9",rightsquigarrow:"\u219D",RightTeeArrow:"\u21A6",RightTee:"\u22A2",RightTeeVector:"\u295B",rightthreetimes:"\u22CC",RightTriangleBar:"\u29D0",RightTriangle:"\u22B3",RightTriangleEqual:"\u22B5",RightUpDownVector:"\u294F",RightUpTeeVector:"\u295C",RightUpVectorBar:"\u2954",RightUpVector:"\u21BE",RightVectorBar:"\u2953",RightVector:"\u21C0",ring:"\u02DA",risingdotseq:"\u2253",rlarr:"\u21C4",rlhar:"\u21CC",rlm:"\u200F",rmoustache:"\u23B1",rmoust:"\u23B1",rnmid:"\u2AEE",roang:"\u27ED",roarr:"\u21FE",robrk:"\u27E7",ropar:"\u2986",ropf:"\u{1D563}",Ropf:"\u211D",roplus:"\u2A2E",rotimes:"\u2A35",RoundImplies:"\u2970",rpar:")",rpargt:"\u2994",rppolint:"\u2A12",rrarr:"\u21C9",Rrightarrow:"\u21DB",rsaquo:"\u203A",rscr:"\u{1D4C7}",Rscr:"\u211B",rsh:"\u21B1",Rsh:"\u21B1",rsqb:"]",rsquo:"\u2019",rsquor:"\u2019",rthree:"\u22CC",rtimes:"\u22CA",rtri:"\u25B9",rtrie:"\u22B5",rtrif:"\u25B8",rtriltri:"\u29CE",RuleDelayed:"\u29F4",ruluhar:"\u2968",rx:"\u211E",Sacute:"\u015A",sacute:"\u015B",sbquo:"\u201A",scap:"\u2AB8",Scaron:"\u0160",scaron:"\u0161",Sc:"\u2ABC",sc:"\u227B",sccue:"\u227D",sce:"\u2AB0",scE:"\u2AB4",Scedil:"\u015E",scedil:"\u015F",Scirc:"\u015C",scirc:"\u015D",scnap:"\u2ABA",scnE:"\u2AB6",scnsim:"\u22E9",scpolint:"\u2A13",scsim:"\u227F",Scy:"\u0421",scy:"\u0441",sdotb:"\u22A1",sdot:"\u22C5",sdote:"\u2A66",searhk:"\u2925",searr:"\u2198",seArr:"\u21D8",searrow:"\u2198",sect:"\xA7",semi:";",seswar:"\u2929",setminus:"\u2216",setmn:"\u2216",sext:"\u2736",Sfr:"\u{1D516}",sfr:"\u{1D530}",sfrown:"\u2322",sharp:"\u266F",SHCHcy:"\u0429",shchcy:"\u0449",SHcy:"\u0428",shcy:"\u0448",ShortDownArrow:"\u2193",ShortLeftArrow:"\u2190",shortmid:"\u2223",shortparallel:"\u2225",ShortRightArrow:"\u2192",ShortUpArrow:"\u2191",shy:"\xAD",Sigma:"\u03A3",sigma:"\u03C3",sigmaf:"\u03C2",sigmav:"\u03C2",sim:"\u223C",simdot:"\u2A6A",sime:"\u2243",simeq:"\u2243",simg:"\u2A9E",simgE:"\u2AA0",siml:"\u2A9D",simlE:"\u2A9F",simne:"\u2246",simplus:"\u2A24",simrarr:"\u2972",slarr:"\u2190",SmallCircle:"\u2218",smallsetminus:"\u2216",smashp:"\u2A33",smeparsl:"\u29E4",smid:"\u2223",smile:"\u2323",smt:"\u2AAA",smte:"\u2AAC",smtes:"\u2AAC\uFE00",SOFTcy:"\u042C",softcy:"\u044C",solbar:"\u233F",solb:"\u29C4",sol:"/",Sopf:"\u{1D54A}",sopf:"\u{1D564}",spades:"\u2660",spadesuit:"\u2660",spar:"\u2225",sqcap:"\u2293",sqcaps:"\u2293\uFE00",sqcup:"\u2294",sqcups:"\u2294\uFE00",Sqrt:"\u221A",sqsub:"\u228F",sqsube:"\u2291",sqsubset:"\u228F",sqsubseteq:"\u2291",sqsup:"\u2290",sqsupe:"\u2292",sqsupset:"\u2290",sqsupseteq:"\u2292",square:"\u25A1",Square:"\u25A1",SquareIntersection:"\u2293",SquareSubset:"\u228F",SquareSubsetEqual:"\u2291",SquareSuperset:"\u2290",SquareSupersetEqual:"\u2292",SquareUnion:"\u2294",squarf:"\u25AA",squ:"\u25A1",squf:"\u25AA",srarr:"\u2192",Sscr:"\u{1D4AE}",sscr:"\u{1D4C8}",ssetmn:"\u2216",ssmile:"\u2323",sstarf:"\u22C6",Star:"\u22C6",star:"\u2606",starf:"\u2605",straightepsilon:"\u03F5",straightphi:"\u03D5",strns:"\xAF",sub:"\u2282",Sub:"\u22D0",subdot:"\u2ABD",subE:"\u2AC5",sube:"\u2286",subedot:"\u2AC3",submult:"\u2AC1",subnE:"\u2ACB",subne:"\u228A",subplus:"\u2ABF",subrarr:"\u2979",subset:"\u2282",Subset:"\u22D0",subseteq:"\u2286",subseteqq:"\u2AC5",SubsetEqual:"\u2286",subsetneq:"\u228A",subsetneqq:"\u2ACB",subsim:"\u2AC7",subsub:"\u2AD5",subsup:"\u2AD3",succapprox:"\u2AB8",succ:"\u227B",succcurlyeq:"\u227D",Succeeds:"\u227B",SucceedsEqual:"\u2AB0",SucceedsSlantEqual:"\u227D",SucceedsTilde:"\u227F",succeq:"\u2AB0",succnapprox:"\u2ABA",succneqq:"\u2AB6",succnsim:"\u22E9",succsim:"\u227F",SuchThat:"\u220B",sum:"\u2211",Sum:"\u2211",sung:"\u266A",sup1:"\xB9",sup2:"\xB2",sup3:"\xB3",sup:"\u2283",Sup:"\u22D1",supdot:"\u2ABE",supdsub:"\u2AD8",supE:"\u2AC6",supe:"\u2287",supedot:"\u2AC4",Superset:"\u2283",SupersetEqual:"\u2287",suphsol:"\u27C9",suphsub:"\u2AD7",suplarr:"\u297B",supmult:"\u2AC2",supnE:"\u2ACC",supne:"\u228B",supplus:"\u2AC0",supset:"\u2283",Supset:"\u22D1",supseteq:"\u2287",supseteqq:"\u2AC6",supsetneq:"\u228B",supsetneqq:"\u2ACC",supsim:"\u2AC8",supsub:"\u2AD4",supsup:"\u2AD6",swarhk:"\u2926",swarr:"\u2199",swArr:"\u21D9",swarrow:"\u2199",swnwar:"\u292A",szlig:"\xDF",Tab:" ",target:"\u2316",Tau:"\u03A4",tau:"\u03C4",tbrk:"\u23B4",Tcaron:"\u0164",tcaron:"\u0165",Tcedil:"\u0162",tcedil:"\u0163",Tcy:"\u0422",tcy:"\u0442",tdot:"\u20DB",telrec:"\u2315",Tfr:"\u{1D517}",tfr:"\u{1D531}",there4:"\u2234",therefore:"\u2234",Therefore:"\u2234",Theta:"\u0398",theta:"\u03B8",thetasym:"\u03D1",thetav:"\u03D1",thickapprox:"\u2248",thicksim:"\u223C",ThickSpace:"\u205F\u200A",ThinSpace:"\u2009",thinsp:"\u2009",thkap:"\u2248",thksim:"\u223C",THORN:"\xDE",thorn:"\xFE",tilde:"\u02DC",Tilde:"\u223C",TildeEqual:"\u2243",TildeFullEqual:"\u2245",TildeTilde:"\u2248",timesbar:"\u2A31",timesb:"\u22A0",times:"\xD7",timesd:"\u2A30",tint:"\u222D",toea:"\u2928",topbot:"\u2336",topcir:"\u2AF1",top:"\u22A4",Topf:"\u{1D54B}",topf:"\u{1D565}",topfork:"\u2ADA",tosa:"\u2929",tprime:"\u2034",trade:"\u2122",TRADE:"\u2122",triangle:"\u25B5",triangledown:"\u25BF",triangleleft:"\u25C3",trianglelefteq:"\u22B4",triangleq:"\u225C",triangleright:"\u25B9",trianglerighteq:"\u22B5",tridot:"\u25EC",trie:"\u225C",triminus:"\u2A3A",TripleDot:"\u20DB",triplus:"\u2A39",trisb:"\u29CD",tritime:"\u2A3B",trpezium:"\u23E2",Tscr:"\u{1D4AF}",tscr:"\u{1D4C9}",TScy:"\u0426",tscy:"\u0446",TSHcy:"\u040B",tshcy:"\u045B",Tstrok:"\u0166",tstrok:"\u0167",twixt:"\u226C",twoheadleftarrow:"\u219E",twoheadrightarrow:"\u21A0",Uacute:"\xDA",uacute:"\xFA",uarr:"\u2191",Uarr:"\u219F",uArr:"\u21D1",Uarrocir:"\u2949",Ubrcy:"\u040E",ubrcy:"\u045E",Ubreve:"\u016C",ubreve:"\u016D",Ucirc:"\xDB",ucirc:"\xFB",Ucy:"\u0423",ucy:"\u0443",udarr:"\u21C5",Udblac:"\u0170",udblac:"\u0171",udhar:"\u296E",ufisht:"\u297E",Ufr:"\u{1D518}",ufr:"\u{1D532}",Ugrave:"\xD9",ugrave:"\xF9",uHar:"\u2963",uharl:"\u21BF",uharr:"\u21BE",uhblk:"\u2580",ulcorn:"\u231C",ulcorner:"\u231C",ulcrop:"\u230F",ultri:"\u25F8",Umacr:"\u016A",umacr:"\u016B",uml:"\xA8",UnderBar:"_",UnderBrace:"\u23DF",UnderBracket:"\u23B5",UnderParenthesis:"\u23DD",Union:"\u22C3",UnionPlus:"\u228E",Uogon:"\u0172",uogon:"\u0173",Uopf:"\u{1D54C}",uopf:"\u{1D566}",UpArrowBar:"\u2912",uparrow:"\u2191",UpArrow:"\u2191",Uparrow:"\u21D1",UpArrowDownArrow:"\u21C5",updownarrow:"\u2195",UpDownArrow:"\u2195",Updownarrow:"\u21D5",UpEquilibrium:"\u296E",upharpoonleft:"\u21BF",upharpoonright:"\u21BE",uplus:"\u228E",UpperLeftArrow:"\u2196",UpperRightArrow:"\u2197",upsi:"\u03C5",Upsi:"\u03D2",upsih:"\u03D2",Upsilon:"\u03A5",upsilon:"\u03C5",UpTeeArrow:"\u21A5",UpTee:"\u22A5",upuparrows:"\u21C8",urcorn:"\u231D",urcorner:"\u231D",urcrop:"\u230E",Uring:"\u016E",uring:"\u016F",urtri:"\u25F9",Uscr:"\u{1D4B0}",uscr:"\u{1D4CA}",utdot:"\u22F0",Utilde:"\u0168",utilde:"\u0169",utri:"\u25B5",utrif:"\u25B4",uuarr:"\u21C8",Uuml:"\xDC",uuml:"\xFC",uwangle:"\u29A7",vangrt:"\u299C",varepsilon:"\u03F5",varkappa:"\u03F0",varnothing:"\u2205",varphi:"\u03D5",varpi:"\u03D6",varpropto:"\u221D",varr:"\u2195",vArr:"\u21D5",varrho:"\u03F1",varsigma:"\u03C2",varsubsetneq:"\u228A\uFE00",varsubsetneqq:"\u2ACB\uFE00",varsupsetneq:"\u228B\uFE00",varsupsetneqq:"\u2ACC\uFE00",vartheta:"\u03D1",vartriangleleft:"\u22B2",vartriangleright:"\u22B3",vBar:"\u2AE8",Vbar:"\u2AEB",vBarv:"\u2AE9",Vcy:"\u0412",vcy:"\u0432",vdash:"\u22A2",vDash:"\u22A8",Vdash:"\u22A9",VDash:"\u22AB",Vdashl:"\u2AE6",veebar:"\u22BB",vee:"\u2228",Vee:"\u22C1",veeeq:"\u225A",vellip:"\u22EE",verbar:"|",Verbar:"\u2016",vert:"|",Vert:"\u2016",VerticalBar:"\u2223",VerticalLine:"|",VerticalSeparator:"\u2758",VerticalTilde:"\u2240",VeryThinSpace:"\u200A",Vfr:"\u{1D519}",vfr:"\u{1D533}",vltri:"\u22B2",vnsub:"\u2282\u20D2",vnsup:"\u2283\u20D2",Vopf:"\u{1D54D}",vopf:"\u{1D567}",vprop:"\u221D",vrtri:"\u22B3",Vscr:"\u{1D4B1}",vscr:"\u{1D4CB}",vsubnE:"\u2ACB\uFE00",vsubne:"\u228A\uFE00",vsupnE:"\u2ACC\uFE00",vsupne:"\u228B\uFE00",Vvdash:"\u22AA",vzigzag:"\u299A",Wcirc:"\u0174",wcirc:"\u0175",wedbar:"\u2A5F",wedge:"\u2227",Wedge:"\u22C0",wedgeq:"\u2259",weierp:"\u2118",Wfr:"\u{1D51A}",wfr:"\u{1D534}",Wopf:"\u{1D54E}",wopf:"\u{1D568}",wp:"\u2118",wr:"\u2240",wreath:"\u2240",Wscr:"\u{1D4B2}",wscr:"\u{1D4CC}",xcap:"\u22C2",xcirc:"\u25EF",xcup:"\u22C3",xdtri:"\u25BD",Xfr:"\u{1D51B}",xfr:"\u{1D535}",xharr:"\u27F7",xhArr:"\u27FA",Xi:"\u039E",xi:"\u03BE",xlarr:"\u27F5",xlArr:"\u27F8",xmap:"\u27FC",xnis:"\u22FB",xodot:"\u2A00",Xopf:"\u{1D54F}",xopf:"\u{1D569}",xoplus:"\u2A01",xotime:"\u2A02",xrarr:"\u27F6",xrArr:"\u27F9",Xscr:"\u{1D4B3}",xscr:"\u{1D4CD}",xsqcup:"\u2A06",xuplus:"\u2A04",xutri:"\u25B3",xvee:"\u22C1",xwedge:"\u22C0",Yacute:"\xDD",yacute:"\xFD",YAcy:"\u042F",yacy:"\u044F",Ycirc:"\u0176",ycirc:"\u0177",Ycy:"\u042B",ycy:"\u044B",yen:"\xA5",Yfr:"\u{1D51C}",yfr:"\u{1D536}",YIcy:"\u0407",yicy:"\u0457",Yopf:"\u{1D550}",yopf:"\u{1D56A}",Yscr:"\u{1D4B4}",yscr:"\u{1D4CE}",YUcy:"\u042E",yucy:"\u044E",yuml:"\xFF",Yuml:"\u0178",Zacute:"\u0179",zacute:"\u017A",Zcaron:"\u017D",zcaron:"\u017E",Zcy:"\u0417",zcy:"\u0437",Zdot:"\u017B",zdot:"\u017C",zeetrf:"\u2128",ZeroWidthSpace:"\u200B",Zeta:"\u0396",zeta:"\u03B6",zfr:"\u{1D537}",Zfr:"\u2128",ZHcy:"\u0416",zhcy:"\u0436",zigrarr:"\u21DD",zopf:"\u{1D56B}",Zopf:"\u2124",Zscr:"\u{1D4B5}",zscr:"\u{1D4CF}",zwj:"\u200D",zwnj:"\u200C"}});var Wr=_((Tb,Ms)=>{"use strict";Ms.exports=$s()});var oi=_((Lb,Fs)=>{Fs.exports=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/});var Ps=_((Ib,Bs)=>{"use strict";var qs={};function Bh(n){var e,t,i=qs[n];if(i)return i;for(i=qs[n]=[],e=0;e<128;e++)t=String.fromCharCode(e),/^[0-9a-z]$/i.test(t)?i.push(t):i.push("%"+("0"+e.toString(16).toUpperCase()).slice(-2));for(e=0;e"u"&&(t=!0),a=Bh(e),i=0,r=n.length;i=55296&&o<=57343){if(o>=55296&&o<=56319&&i+1=56320&&s<=57343)){l+=encodeURIComponent(n[i]+n[i+1]),i++;continue}l+="%EF%BF%BD";continue}l+=encodeURIComponent(n[i])}return l}si.defaultChars=";/?:@&=+$,-_.!~*'()#";si.componentChars="-_.!~*'()";Bs.exports=si});var Ns=_(($b,Rs)=>{"use strict";var Os={};function Ph(n){var e,t,i=Os[n];if(i)return i;for(i=Os[n]=[],e=0;e<128;e++)t=String.fromCharCode(e),i.push(t);for(e=0;e=55296&&u<=57343?h+="\uFFFD\uFFFD\uFFFD":h+=String.fromCharCode(u),r+=6;continue}if((s&248)===240&&r+91114111?h+="\uFFFD\uFFFD\uFFFD\uFFFD":(u-=65536,h+=String.fromCharCode(55296+(u>>10),56320+(u&1023))),r+=9;continue}h+="\uFFFD"}return h})}ai.defaultChars=";/?:@&=+$,#";ai.componentChars="";Rs.exports=ai});var Hs=_((Mb,zs)=>{"use strict";zs.exports=function(e){var t="";return t+=e.protocol||"",t+=e.slashes?"//":"",t+=e.auth?e.auth+"@":"",e.hostname&&e.hostname.indexOf(":")!==-1?t+="["+e.hostname+"]":t+=e.hostname||"",t+=e.port?":"+e.port:"",t+=e.pathname||"",t+=e.search||"",t+=e.hash||"",t}});var Zs=_((Fb,Ks)=>{"use strict";function li(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var Oh=/^([a-z0-9.+-]+:)/i,Rh=/:[0-9]*$/,Nh=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,zh=["<",">",'"',"`"," ","\r",` -`," "],Hh=["{","}","|","\\","^","`"].concat(zh),Uh=["'"].concat(Hh),Us=["%","/","?",";","#"].concat(Uh),js=["/","?","#"],jh=255,Vs=/^[+a-z0-9A-Z_-]{0,63}$/,Vh=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Ws={javascript:!0,"javascript:":!0},Gs={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function Wh(n,e){if(n&&n instanceof li)return n;var t=new li;return t.parse(n,e),t}li.prototype.parse=function(n,e){var t,i,r,o,s,a=n;if(a=a.trim(),!e&&n.split("#").length===1){var l=Nh.exec(a);if(l)return this.pathname=l[1],l[2]&&(this.search=l[2]),this}var c=Oh.exec(a);if(c&&(c=c[0],r=c.toLowerCase(),this.protocol=c,a=a.substr(c.length)),(e||c||a.match(/^\/\/[^@\/]+@[^@\/]+/))&&(s=a.substr(0,2)==="//",s&&!(c&&Ws[c])&&(a=a.substr(2),this.slashes=!0)),!Ws[c]&&(s||c&&!Gs[c])){var u=-1;for(t=0;t127?v+="x":v+=y[b];if(!v.match(Vs)){var w=m.slice(0,t),E=m.slice(t+1),x=y.match(Vh);x&&(w.push(x[1]),E.unshift(x[2])),E.length&&(a=E.join(".")+a),this.hostname=w.join(".");break}}}}this.hostname.length>jh&&(this.hostname=""),f&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}var S=a.indexOf("#");S!==-1&&(this.hash=a.substr(S),a=a.slice(0,S));var D=a.indexOf("?");return D!==-1&&(this.search=a.substr(D),a=a.slice(0,D)),a&&(this.pathname=a),Gs[r]&&this.hostname&&!this.pathname&&(this.pathname=""),this};li.prototype.parseHost=function(n){var e=Rh.exec(n);e&&(e=e[0],e!==":"&&(this.port=e.substr(1)),n=n.substr(0,n.length-e.length)),n&&(this.hostname=n)};Ks.exports=Wh});var Gr=_((qb,Kt)=>{"use strict";Kt.exports.encode=Ps();Kt.exports.decode=Ns();Kt.exports.format=Hs();Kt.exports.parse=Zs()});var Kr=_((Bb,Xs)=>{Xs.exports=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/});var Zr=_((Pb,Ys)=>{Ys.exports=/[\0-\x1F\x7F-\x9F]/});var Qs=_((Ob,Js)=>{Js.exports=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/});var Xr=_((Rb,ea)=>{ea.exports=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/});var ta=_(gt=>{"use strict";gt.Any=Kr();gt.Cc=Zr();gt.Cf=Qs();gt.P=oi();gt.Z=Xr()});var R=_(J=>{"use strict";function Gh(n){return Object.prototype.toString.call(n)}function Kh(n){return Gh(n)==="[object String]"}var Zh=Object.prototype.hasOwnProperty;function ia(n,e){return Zh.call(n,e)}function Xh(n){var e=Array.prototype.slice.call(arguments,1);return e.forEach(function(t){if(t){if(typeof t!="object")throw new TypeError(t+"must be object");Object.keys(t).forEach(function(i){n[i]=t[i]})}}),n}function Yh(n,e,t){return[].concat(n.slice(0,e),t,n.slice(e+1))}function ra(n){return!(n>=55296&&n<=57343||n>=64976&&n<=65007||(n&65535)===65535||(n&65535)===65534||n>=0&&n<=8||n===11||n>=14&&n<=31||n>=127&&n<=159||n>1114111)}function oa(n){if(n>65535){n-=65536;var e=55296+(n>>10),t=56320+(n&1023);return String.fromCharCode(e,t)}return String.fromCharCode(n)}var sa=/\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g,Jh=/&([a-z#][a-z0-9]{1,31});/gi,Qh=new RegExp(sa.source+"|"+Jh.source,"gi"),ed=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i,na=Wr();function td(n,e){var t=0;return ia(na,e)?na[e]:e.charCodeAt(0)===35&&ed.test(e)&&(t=e[1].toLowerCase()==="x"?parseInt(e.slice(2),16):parseInt(e.slice(1),10),ra(t))?oa(t):n}function nd(n){return n.indexOf("\\")<0?n:n.replace(sa,"$1")}function id(n){return n.indexOf("\\")<0&&n.indexOf("&")<0?n:n.replace(Qh,function(e,t,i){return t||td(e,i)})}var rd=/[&<>"]/,od=/[&<>"]/g,sd={"&":"&","<":"<",">":">",'"':"""};function ad(n){return sd[n]}function ld(n){return rd.test(n)?n.replace(od,ad):n}var cd=/[.?*+^$[\]\\(){}|-]/g;function ud(n){return n.replace(cd,"\\$&")}function hd(n){switch(n){case 9:case 32:return!0}return!1}function dd(n){if(n>=8192&&n<=8202)return!0;switch(n){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1}var pd=oi();function fd(n){return pd.test(n)}function md(n){switch(n){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}}function gd(n){return n=n.trim().replace(/\s+/g," "),"\u1E9E".toLowerCase()==="\u1E7E"&&(n=n.replace(/ẞ/g,"\xDF")),n.toLowerCase().toUpperCase()}J.lib={};J.lib.mdurl=Gr();J.lib.ucmicro=ta();J.assign=Xh;J.isString=Kh;J.has=ia;J.unescapeMd=nd;J.unescapeAll=id;J.isValidEntityCode=ra;J.fromCodePoint=oa;J.escapeHtml=ld;J.arrayReplaceAt=Yh;J.isSpace=hd;J.isWhiteSpace=dd;J.isMdAsciiPunct=md;J.isPunctChar=fd;J.escapeRE=ud;J.normalizeReference=gd});var la=_((Hb,aa)=>{"use strict";aa.exports=function(e,t,i){var r,o,s,a,l=-1,c=e.posMax,u=e.pos;for(e.pos=t+1,r=1;e.pos{"use strict";var ca=R().unescapeAll;ua.exports=function(e,t,i){var r,o,s=0,a=t,l={ok:!1,pos:0,lines:0,str:""};if(e.charCodeAt(t)===60){for(t++;t32))return l;if(r===41){if(o===0)break;o--}t++}return a===t||o!==0||(l.str=ca(e.slice(a,t)),l.lines=s,l.pos=t,l.ok=!0),l}});var pa=_((jb,da)=>{"use strict";var bd=R().unescapeAll;da.exports=function(e,t,i){var r,o,s=0,a=t,l={ok:!1,pos:0,lines:0,str:""};if(t>=i||(o=e.charCodeAt(t),o!==34&&o!==39&&o!==40))return l;for(t++,o===40&&(o=41);t{"use strict";ci.parseLinkLabel=la();ci.parseLinkDestination=ha();ci.parseLinkTitle=pa()});var ga=_((Wb,ma)=>{"use strict";var vd=R().assign,wd=R().unescapeAll,Je=R().escapeHtml,De={};De.code_inline=function(n,e,t,i,r){var o=n[e];return""+Je(n[e].content)+""};De.code_block=function(n,e,t,i,r){var o=n[e];return""+Je(n[e].content)+` -`};De.fence=function(n,e,t,i,r){var o=n[e],s=o.info?wd(o.info).trim():"",a="",l="",c,u,h,d,p;return s&&(h=s.split(/(\s+)/g),a=h[0],l=h.slice(2).join("")),t.highlight?c=t.highlight(o.content,a,l)||Je(o.content):c=Je(o.content),c.indexOf(""+c+` +var Lu=Object.create;var _e=Object.defineProperty;var Tu=Object.getOwnPropertyDescriptor;var $u=Object.getOwnPropertyNames;var Iu=Object.getPrototypeOf,Mu=Object.prototype.hasOwnProperty;var Fu=(n,t,e)=>t in n?_e(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var qu=(n,t)=>()=>(n&&(t=n(n=0)),t);var _=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),Se=(n,t)=>{for(var e in t)_e(n,e,{get:t[e],enumerable:!0})},Vo=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of $u(t))!Mu.call(n,r)&&r!==e&&_e(n,r,{get:()=>t[r],enumerable:!(i=Tu(t,r))||i.enumerable});return n};var Wo=(n,t,e)=>(e=n!=null?Lu(Iu(n)):{},Vo(t||!n||!n.__esModule?_e(e,"default",{value:n,enumerable:!0}):e,n)),Bu=n=>Vo(_e({},"__esModule",{value:!0}),n);var at=(n,t,e)=>(Fu(n,typeof t!="symbol"?t+"":t,e),e),Pu=(n,t,e)=>{if(!t.has(n))throw TypeError("Cannot "+e)};var ot=(n,t,e)=>{if(t.has(n))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(n):t.set(n,e)};var L=(n,t,e)=>(Pu(n,t,"access private method"),e);var Is=_((Db,Fh)=>{Fh.exports={Aacute:"\xC1",aacute:"\xE1",Abreve:"\u0102",abreve:"\u0103",ac:"\u223E",acd:"\u223F",acE:"\u223E\u0333",Acirc:"\xC2",acirc:"\xE2",acute:"\xB4",Acy:"\u0410",acy:"\u0430",AElig:"\xC6",aelig:"\xE6",af:"\u2061",Afr:"\u{1D504}",afr:"\u{1D51E}",Agrave:"\xC0",agrave:"\xE0",alefsym:"\u2135",aleph:"\u2135",Alpha:"\u0391",alpha:"\u03B1",Amacr:"\u0100",amacr:"\u0101",amalg:"\u2A3F",amp:"&",AMP:"&",andand:"\u2A55",And:"\u2A53",and:"\u2227",andd:"\u2A5C",andslope:"\u2A58",andv:"\u2A5A",ang:"\u2220",ange:"\u29A4",angle:"\u2220",angmsdaa:"\u29A8",angmsdab:"\u29A9",angmsdac:"\u29AA",angmsdad:"\u29AB",angmsdae:"\u29AC",angmsdaf:"\u29AD",angmsdag:"\u29AE",angmsdah:"\u29AF",angmsd:"\u2221",angrt:"\u221F",angrtvb:"\u22BE",angrtvbd:"\u299D",angsph:"\u2222",angst:"\xC5",angzarr:"\u237C",Aogon:"\u0104",aogon:"\u0105",Aopf:"\u{1D538}",aopf:"\u{1D552}",apacir:"\u2A6F",ap:"\u2248",apE:"\u2A70",ape:"\u224A",apid:"\u224B",apos:"'",ApplyFunction:"\u2061",approx:"\u2248",approxeq:"\u224A",Aring:"\xC5",aring:"\xE5",Ascr:"\u{1D49C}",ascr:"\u{1D4B6}",Assign:"\u2254",ast:"*",asymp:"\u2248",asympeq:"\u224D",Atilde:"\xC3",atilde:"\xE3",Auml:"\xC4",auml:"\xE4",awconint:"\u2233",awint:"\u2A11",backcong:"\u224C",backepsilon:"\u03F6",backprime:"\u2035",backsim:"\u223D",backsimeq:"\u22CD",Backslash:"\u2216",Barv:"\u2AE7",barvee:"\u22BD",barwed:"\u2305",Barwed:"\u2306",barwedge:"\u2305",bbrk:"\u23B5",bbrktbrk:"\u23B6",bcong:"\u224C",Bcy:"\u0411",bcy:"\u0431",bdquo:"\u201E",becaus:"\u2235",because:"\u2235",Because:"\u2235",bemptyv:"\u29B0",bepsi:"\u03F6",bernou:"\u212C",Bernoullis:"\u212C",Beta:"\u0392",beta:"\u03B2",beth:"\u2136",between:"\u226C",Bfr:"\u{1D505}",bfr:"\u{1D51F}",bigcap:"\u22C2",bigcirc:"\u25EF",bigcup:"\u22C3",bigodot:"\u2A00",bigoplus:"\u2A01",bigotimes:"\u2A02",bigsqcup:"\u2A06",bigstar:"\u2605",bigtriangledown:"\u25BD",bigtriangleup:"\u25B3",biguplus:"\u2A04",bigvee:"\u22C1",bigwedge:"\u22C0",bkarow:"\u290D",blacklozenge:"\u29EB",blacksquare:"\u25AA",blacktriangle:"\u25B4",blacktriangledown:"\u25BE",blacktriangleleft:"\u25C2",blacktriangleright:"\u25B8",blank:"\u2423",blk12:"\u2592",blk14:"\u2591",blk34:"\u2593",block:"\u2588",bne:"=\u20E5",bnequiv:"\u2261\u20E5",bNot:"\u2AED",bnot:"\u2310",Bopf:"\u{1D539}",bopf:"\u{1D553}",bot:"\u22A5",bottom:"\u22A5",bowtie:"\u22C8",boxbox:"\u29C9",boxdl:"\u2510",boxdL:"\u2555",boxDl:"\u2556",boxDL:"\u2557",boxdr:"\u250C",boxdR:"\u2552",boxDr:"\u2553",boxDR:"\u2554",boxh:"\u2500",boxH:"\u2550",boxhd:"\u252C",boxHd:"\u2564",boxhD:"\u2565",boxHD:"\u2566",boxhu:"\u2534",boxHu:"\u2567",boxhU:"\u2568",boxHU:"\u2569",boxminus:"\u229F",boxplus:"\u229E",boxtimes:"\u22A0",boxul:"\u2518",boxuL:"\u255B",boxUl:"\u255C",boxUL:"\u255D",boxur:"\u2514",boxuR:"\u2558",boxUr:"\u2559",boxUR:"\u255A",boxv:"\u2502",boxV:"\u2551",boxvh:"\u253C",boxvH:"\u256A",boxVh:"\u256B",boxVH:"\u256C",boxvl:"\u2524",boxvL:"\u2561",boxVl:"\u2562",boxVL:"\u2563",boxvr:"\u251C",boxvR:"\u255E",boxVr:"\u255F",boxVR:"\u2560",bprime:"\u2035",breve:"\u02D8",Breve:"\u02D8",brvbar:"\xA6",bscr:"\u{1D4B7}",Bscr:"\u212C",bsemi:"\u204F",bsim:"\u223D",bsime:"\u22CD",bsolb:"\u29C5",bsol:"\\",bsolhsub:"\u27C8",bull:"\u2022",bullet:"\u2022",bump:"\u224E",bumpE:"\u2AAE",bumpe:"\u224F",Bumpeq:"\u224E",bumpeq:"\u224F",Cacute:"\u0106",cacute:"\u0107",capand:"\u2A44",capbrcup:"\u2A49",capcap:"\u2A4B",cap:"\u2229",Cap:"\u22D2",capcup:"\u2A47",capdot:"\u2A40",CapitalDifferentialD:"\u2145",caps:"\u2229\uFE00",caret:"\u2041",caron:"\u02C7",Cayleys:"\u212D",ccaps:"\u2A4D",Ccaron:"\u010C",ccaron:"\u010D",Ccedil:"\xC7",ccedil:"\xE7",Ccirc:"\u0108",ccirc:"\u0109",Cconint:"\u2230",ccups:"\u2A4C",ccupssm:"\u2A50",Cdot:"\u010A",cdot:"\u010B",cedil:"\xB8",Cedilla:"\xB8",cemptyv:"\u29B2",cent:"\xA2",centerdot:"\xB7",CenterDot:"\xB7",cfr:"\u{1D520}",Cfr:"\u212D",CHcy:"\u0427",chcy:"\u0447",check:"\u2713",checkmark:"\u2713",Chi:"\u03A7",chi:"\u03C7",circ:"\u02C6",circeq:"\u2257",circlearrowleft:"\u21BA",circlearrowright:"\u21BB",circledast:"\u229B",circledcirc:"\u229A",circleddash:"\u229D",CircleDot:"\u2299",circledR:"\xAE",circledS:"\u24C8",CircleMinus:"\u2296",CirclePlus:"\u2295",CircleTimes:"\u2297",cir:"\u25CB",cirE:"\u29C3",cire:"\u2257",cirfnint:"\u2A10",cirmid:"\u2AEF",cirscir:"\u29C2",ClockwiseContourIntegral:"\u2232",CloseCurlyDoubleQuote:"\u201D",CloseCurlyQuote:"\u2019",clubs:"\u2663",clubsuit:"\u2663",colon:":",Colon:"\u2237",Colone:"\u2A74",colone:"\u2254",coloneq:"\u2254",comma:",",commat:"@",comp:"\u2201",compfn:"\u2218",complement:"\u2201",complexes:"\u2102",cong:"\u2245",congdot:"\u2A6D",Congruent:"\u2261",conint:"\u222E",Conint:"\u222F",ContourIntegral:"\u222E",copf:"\u{1D554}",Copf:"\u2102",coprod:"\u2210",Coproduct:"\u2210",copy:"\xA9",COPY:"\xA9",copysr:"\u2117",CounterClockwiseContourIntegral:"\u2233",crarr:"\u21B5",cross:"\u2717",Cross:"\u2A2F",Cscr:"\u{1D49E}",cscr:"\u{1D4B8}",csub:"\u2ACF",csube:"\u2AD1",csup:"\u2AD0",csupe:"\u2AD2",ctdot:"\u22EF",cudarrl:"\u2938",cudarrr:"\u2935",cuepr:"\u22DE",cuesc:"\u22DF",cularr:"\u21B6",cularrp:"\u293D",cupbrcap:"\u2A48",cupcap:"\u2A46",CupCap:"\u224D",cup:"\u222A",Cup:"\u22D3",cupcup:"\u2A4A",cupdot:"\u228D",cupor:"\u2A45",cups:"\u222A\uFE00",curarr:"\u21B7",curarrm:"\u293C",curlyeqprec:"\u22DE",curlyeqsucc:"\u22DF",curlyvee:"\u22CE",curlywedge:"\u22CF",curren:"\xA4",curvearrowleft:"\u21B6",curvearrowright:"\u21B7",cuvee:"\u22CE",cuwed:"\u22CF",cwconint:"\u2232",cwint:"\u2231",cylcty:"\u232D",dagger:"\u2020",Dagger:"\u2021",daleth:"\u2138",darr:"\u2193",Darr:"\u21A1",dArr:"\u21D3",dash:"\u2010",Dashv:"\u2AE4",dashv:"\u22A3",dbkarow:"\u290F",dblac:"\u02DD",Dcaron:"\u010E",dcaron:"\u010F",Dcy:"\u0414",dcy:"\u0434",ddagger:"\u2021",ddarr:"\u21CA",DD:"\u2145",dd:"\u2146",DDotrahd:"\u2911",ddotseq:"\u2A77",deg:"\xB0",Del:"\u2207",Delta:"\u0394",delta:"\u03B4",demptyv:"\u29B1",dfisht:"\u297F",Dfr:"\u{1D507}",dfr:"\u{1D521}",dHar:"\u2965",dharl:"\u21C3",dharr:"\u21C2",DiacriticalAcute:"\xB4",DiacriticalDot:"\u02D9",DiacriticalDoubleAcute:"\u02DD",DiacriticalGrave:"`",DiacriticalTilde:"\u02DC",diam:"\u22C4",diamond:"\u22C4",Diamond:"\u22C4",diamondsuit:"\u2666",diams:"\u2666",die:"\xA8",DifferentialD:"\u2146",digamma:"\u03DD",disin:"\u22F2",div:"\xF7",divide:"\xF7",divideontimes:"\u22C7",divonx:"\u22C7",DJcy:"\u0402",djcy:"\u0452",dlcorn:"\u231E",dlcrop:"\u230D",dollar:"$",Dopf:"\u{1D53B}",dopf:"\u{1D555}",Dot:"\xA8",dot:"\u02D9",DotDot:"\u20DC",doteq:"\u2250",doteqdot:"\u2251",DotEqual:"\u2250",dotminus:"\u2238",dotplus:"\u2214",dotsquare:"\u22A1",doublebarwedge:"\u2306",DoubleContourIntegral:"\u222F",DoubleDot:"\xA8",DoubleDownArrow:"\u21D3",DoubleLeftArrow:"\u21D0",DoubleLeftRightArrow:"\u21D4",DoubleLeftTee:"\u2AE4",DoubleLongLeftArrow:"\u27F8",DoubleLongLeftRightArrow:"\u27FA",DoubleLongRightArrow:"\u27F9",DoubleRightArrow:"\u21D2",DoubleRightTee:"\u22A8",DoubleUpArrow:"\u21D1",DoubleUpDownArrow:"\u21D5",DoubleVerticalBar:"\u2225",DownArrowBar:"\u2913",downarrow:"\u2193",DownArrow:"\u2193",Downarrow:"\u21D3",DownArrowUpArrow:"\u21F5",DownBreve:"\u0311",downdownarrows:"\u21CA",downharpoonleft:"\u21C3",downharpoonright:"\u21C2",DownLeftRightVector:"\u2950",DownLeftTeeVector:"\u295E",DownLeftVectorBar:"\u2956",DownLeftVector:"\u21BD",DownRightTeeVector:"\u295F",DownRightVectorBar:"\u2957",DownRightVector:"\u21C1",DownTeeArrow:"\u21A7",DownTee:"\u22A4",drbkarow:"\u2910",drcorn:"\u231F",drcrop:"\u230C",Dscr:"\u{1D49F}",dscr:"\u{1D4B9}",DScy:"\u0405",dscy:"\u0455",dsol:"\u29F6",Dstrok:"\u0110",dstrok:"\u0111",dtdot:"\u22F1",dtri:"\u25BF",dtrif:"\u25BE",duarr:"\u21F5",duhar:"\u296F",dwangle:"\u29A6",DZcy:"\u040F",dzcy:"\u045F",dzigrarr:"\u27FF",Eacute:"\xC9",eacute:"\xE9",easter:"\u2A6E",Ecaron:"\u011A",ecaron:"\u011B",Ecirc:"\xCA",ecirc:"\xEA",ecir:"\u2256",ecolon:"\u2255",Ecy:"\u042D",ecy:"\u044D",eDDot:"\u2A77",Edot:"\u0116",edot:"\u0117",eDot:"\u2251",ee:"\u2147",efDot:"\u2252",Efr:"\u{1D508}",efr:"\u{1D522}",eg:"\u2A9A",Egrave:"\xC8",egrave:"\xE8",egs:"\u2A96",egsdot:"\u2A98",el:"\u2A99",Element:"\u2208",elinters:"\u23E7",ell:"\u2113",els:"\u2A95",elsdot:"\u2A97",Emacr:"\u0112",emacr:"\u0113",empty:"\u2205",emptyset:"\u2205",EmptySmallSquare:"\u25FB",emptyv:"\u2205",EmptyVerySmallSquare:"\u25AB",emsp13:"\u2004",emsp14:"\u2005",emsp:"\u2003",ENG:"\u014A",eng:"\u014B",ensp:"\u2002",Eogon:"\u0118",eogon:"\u0119",Eopf:"\u{1D53C}",eopf:"\u{1D556}",epar:"\u22D5",eparsl:"\u29E3",eplus:"\u2A71",epsi:"\u03B5",Epsilon:"\u0395",epsilon:"\u03B5",epsiv:"\u03F5",eqcirc:"\u2256",eqcolon:"\u2255",eqsim:"\u2242",eqslantgtr:"\u2A96",eqslantless:"\u2A95",Equal:"\u2A75",equals:"=",EqualTilde:"\u2242",equest:"\u225F",Equilibrium:"\u21CC",equiv:"\u2261",equivDD:"\u2A78",eqvparsl:"\u29E5",erarr:"\u2971",erDot:"\u2253",escr:"\u212F",Escr:"\u2130",esdot:"\u2250",Esim:"\u2A73",esim:"\u2242",Eta:"\u0397",eta:"\u03B7",ETH:"\xD0",eth:"\xF0",Euml:"\xCB",euml:"\xEB",euro:"\u20AC",excl:"!",exist:"\u2203",Exists:"\u2203",expectation:"\u2130",exponentiale:"\u2147",ExponentialE:"\u2147",fallingdotseq:"\u2252",Fcy:"\u0424",fcy:"\u0444",female:"\u2640",ffilig:"\uFB03",fflig:"\uFB00",ffllig:"\uFB04",Ffr:"\u{1D509}",ffr:"\u{1D523}",filig:"\uFB01",FilledSmallSquare:"\u25FC",FilledVerySmallSquare:"\u25AA",fjlig:"fj",flat:"\u266D",fllig:"\uFB02",fltns:"\u25B1",fnof:"\u0192",Fopf:"\u{1D53D}",fopf:"\u{1D557}",forall:"\u2200",ForAll:"\u2200",fork:"\u22D4",forkv:"\u2AD9",Fouriertrf:"\u2131",fpartint:"\u2A0D",frac12:"\xBD",frac13:"\u2153",frac14:"\xBC",frac15:"\u2155",frac16:"\u2159",frac18:"\u215B",frac23:"\u2154",frac25:"\u2156",frac34:"\xBE",frac35:"\u2157",frac38:"\u215C",frac45:"\u2158",frac56:"\u215A",frac58:"\u215D",frac78:"\u215E",frasl:"\u2044",frown:"\u2322",fscr:"\u{1D4BB}",Fscr:"\u2131",gacute:"\u01F5",Gamma:"\u0393",gamma:"\u03B3",Gammad:"\u03DC",gammad:"\u03DD",gap:"\u2A86",Gbreve:"\u011E",gbreve:"\u011F",Gcedil:"\u0122",Gcirc:"\u011C",gcirc:"\u011D",Gcy:"\u0413",gcy:"\u0433",Gdot:"\u0120",gdot:"\u0121",ge:"\u2265",gE:"\u2267",gEl:"\u2A8C",gel:"\u22DB",geq:"\u2265",geqq:"\u2267",geqslant:"\u2A7E",gescc:"\u2AA9",ges:"\u2A7E",gesdot:"\u2A80",gesdoto:"\u2A82",gesdotol:"\u2A84",gesl:"\u22DB\uFE00",gesles:"\u2A94",Gfr:"\u{1D50A}",gfr:"\u{1D524}",gg:"\u226B",Gg:"\u22D9",ggg:"\u22D9",gimel:"\u2137",GJcy:"\u0403",gjcy:"\u0453",gla:"\u2AA5",gl:"\u2277",glE:"\u2A92",glj:"\u2AA4",gnap:"\u2A8A",gnapprox:"\u2A8A",gne:"\u2A88",gnE:"\u2269",gneq:"\u2A88",gneqq:"\u2269",gnsim:"\u22E7",Gopf:"\u{1D53E}",gopf:"\u{1D558}",grave:"`",GreaterEqual:"\u2265",GreaterEqualLess:"\u22DB",GreaterFullEqual:"\u2267",GreaterGreater:"\u2AA2",GreaterLess:"\u2277",GreaterSlantEqual:"\u2A7E",GreaterTilde:"\u2273",Gscr:"\u{1D4A2}",gscr:"\u210A",gsim:"\u2273",gsime:"\u2A8E",gsiml:"\u2A90",gtcc:"\u2AA7",gtcir:"\u2A7A",gt:">",GT:">",Gt:"\u226B",gtdot:"\u22D7",gtlPar:"\u2995",gtquest:"\u2A7C",gtrapprox:"\u2A86",gtrarr:"\u2978",gtrdot:"\u22D7",gtreqless:"\u22DB",gtreqqless:"\u2A8C",gtrless:"\u2277",gtrsim:"\u2273",gvertneqq:"\u2269\uFE00",gvnE:"\u2269\uFE00",Hacek:"\u02C7",hairsp:"\u200A",half:"\xBD",hamilt:"\u210B",HARDcy:"\u042A",hardcy:"\u044A",harrcir:"\u2948",harr:"\u2194",hArr:"\u21D4",harrw:"\u21AD",Hat:"^",hbar:"\u210F",Hcirc:"\u0124",hcirc:"\u0125",hearts:"\u2665",heartsuit:"\u2665",hellip:"\u2026",hercon:"\u22B9",hfr:"\u{1D525}",Hfr:"\u210C",HilbertSpace:"\u210B",hksearow:"\u2925",hkswarow:"\u2926",hoarr:"\u21FF",homtht:"\u223B",hookleftarrow:"\u21A9",hookrightarrow:"\u21AA",hopf:"\u{1D559}",Hopf:"\u210D",horbar:"\u2015",HorizontalLine:"\u2500",hscr:"\u{1D4BD}",Hscr:"\u210B",hslash:"\u210F",Hstrok:"\u0126",hstrok:"\u0127",HumpDownHump:"\u224E",HumpEqual:"\u224F",hybull:"\u2043",hyphen:"\u2010",Iacute:"\xCD",iacute:"\xED",ic:"\u2063",Icirc:"\xCE",icirc:"\xEE",Icy:"\u0418",icy:"\u0438",Idot:"\u0130",IEcy:"\u0415",iecy:"\u0435",iexcl:"\xA1",iff:"\u21D4",ifr:"\u{1D526}",Ifr:"\u2111",Igrave:"\xCC",igrave:"\xEC",ii:"\u2148",iiiint:"\u2A0C",iiint:"\u222D",iinfin:"\u29DC",iiota:"\u2129",IJlig:"\u0132",ijlig:"\u0133",Imacr:"\u012A",imacr:"\u012B",image:"\u2111",ImaginaryI:"\u2148",imagline:"\u2110",imagpart:"\u2111",imath:"\u0131",Im:"\u2111",imof:"\u22B7",imped:"\u01B5",Implies:"\u21D2",incare:"\u2105",in:"\u2208",infin:"\u221E",infintie:"\u29DD",inodot:"\u0131",intcal:"\u22BA",int:"\u222B",Int:"\u222C",integers:"\u2124",Integral:"\u222B",intercal:"\u22BA",Intersection:"\u22C2",intlarhk:"\u2A17",intprod:"\u2A3C",InvisibleComma:"\u2063",InvisibleTimes:"\u2062",IOcy:"\u0401",iocy:"\u0451",Iogon:"\u012E",iogon:"\u012F",Iopf:"\u{1D540}",iopf:"\u{1D55A}",Iota:"\u0399",iota:"\u03B9",iprod:"\u2A3C",iquest:"\xBF",iscr:"\u{1D4BE}",Iscr:"\u2110",isin:"\u2208",isindot:"\u22F5",isinE:"\u22F9",isins:"\u22F4",isinsv:"\u22F3",isinv:"\u2208",it:"\u2062",Itilde:"\u0128",itilde:"\u0129",Iukcy:"\u0406",iukcy:"\u0456",Iuml:"\xCF",iuml:"\xEF",Jcirc:"\u0134",jcirc:"\u0135",Jcy:"\u0419",jcy:"\u0439",Jfr:"\u{1D50D}",jfr:"\u{1D527}",jmath:"\u0237",Jopf:"\u{1D541}",jopf:"\u{1D55B}",Jscr:"\u{1D4A5}",jscr:"\u{1D4BF}",Jsercy:"\u0408",jsercy:"\u0458",Jukcy:"\u0404",jukcy:"\u0454",Kappa:"\u039A",kappa:"\u03BA",kappav:"\u03F0",Kcedil:"\u0136",kcedil:"\u0137",Kcy:"\u041A",kcy:"\u043A",Kfr:"\u{1D50E}",kfr:"\u{1D528}",kgreen:"\u0138",KHcy:"\u0425",khcy:"\u0445",KJcy:"\u040C",kjcy:"\u045C",Kopf:"\u{1D542}",kopf:"\u{1D55C}",Kscr:"\u{1D4A6}",kscr:"\u{1D4C0}",lAarr:"\u21DA",Lacute:"\u0139",lacute:"\u013A",laemptyv:"\u29B4",lagran:"\u2112",Lambda:"\u039B",lambda:"\u03BB",lang:"\u27E8",Lang:"\u27EA",langd:"\u2991",langle:"\u27E8",lap:"\u2A85",Laplacetrf:"\u2112",laquo:"\xAB",larrb:"\u21E4",larrbfs:"\u291F",larr:"\u2190",Larr:"\u219E",lArr:"\u21D0",larrfs:"\u291D",larrhk:"\u21A9",larrlp:"\u21AB",larrpl:"\u2939",larrsim:"\u2973",larrtl:"\u21A2",latail:"\u2919",lAtail:"\u291B",lat:"\u2AAB",late:"\u2AAD",lates:"\u2AAD\uFE00",lbarr:"\u290C",lBarr:"\u290E",lbbrk:"\u2772",lbrace:"{",lbrack:"[",lbrke:"\u298B",lbrksld:"\u298F",lbrkslu:"\u298D",Lcaron:"\u013D",lcaron:"\u013E",Lcedil:"\u013B",lcedil:"\u013C",lceil:"\u2308",lcub:"{",Lcy:"\u041B",lcy:"\u043B",ldca:"\u2936",ldquo:"\u201C",ldquor:"\u201E",ldrdhar:"\u2967",ldrushar:"\u294B",ldsh:"\u21B2",le:"\u2264",lE:"\u2266",LeftAngleBracket:"\u27E8",LeftArrowBar:"\u21E4",leftarrow:"\u2190",LeftArrow:"\u2190",Leftarrow:"\u21D0",LeftArrowRightArrow:"\u21C6",leftarrowtail:"\u21A2",LeftCeiling:"\u2308",LeftDoubleBracket:"\u27E6",LeftDownTeeVector:"\u2961",LeftDownVectorBar:"\u2959",LeftDownVector:"\u21C3",LeftFloor:"\u230A",leftharpoondown:"\u21BD",leftharpoonup:"\u21BC",leftleftarrows:"\u21C7",leftrightarrow:"\u2194",LeftRightArrow:"\u2194",Leftrightarrow:"\u21D4",leftrightarrows:"\u21C6",leftrightharpoons:"\u21CB",leftrightsquigarrow:"\u21AD",LeftRightVector:"\u294E",LeftTeeArrow:"\u21A4",LeftTee:"\u22A3",LeftTeeVector:"\u295A",leftthreetimes:"\u22CB",LeftTriangleBar:"\u29CF",LeftTriangle:"\u22B2",LeftTriangleEqual:"\u22B4",LeftUpDownVector:"\u2951",LeftUpTeeVector:"\u2960",LeftUpVectorBar:"\u2958",LeftUpVector:"\u21BF",LeftVectorBar:"\u2952",LeftVector:"\u21BC",lEg:"\u2A8B",leg:"\u22DA",leq:"\u2264",leqq:"\u2266",leqslant:"\u2A7D",lescc:"\u2AA8",les:"\u2A7D",lesdot:"\u2A7F",lesdoto:"\u2A81",lesdotor:"\u2A83",lesg:"\u22DA\uFE00",lesges:"\u2A93",lessapprox:"\u2A85",lessdot:"\u22D6",lesseqgtr:"\u22DA",lesseqqgtr:"\u2A8B",LessEqualGreater:"\u22DA",LessFullEqual:"\u2266",LessGreater:"\u2276",lessgtr:"\u2276",LessLess:"\u2AA1",lesssim:"\u2272",LessSlantEqual:"\u2A7D",LessTilde:"\u2272",lfisht:"\u297C",lfloor:"\u230A",Lfr:"\u{1D50F}",lfr:"\u{1D529}",lg:"\u2276",lgE:"\u2A91",lHar:"\u2962",lhard:"\u21BD",lharu:"\u21BC",lharul:"\u296A",lhblk:"\u2584",LJcy:"\u0409",ljcy:"\u0459",llarr:"\u21C7",ll:"\u226A",Ll:"\u22D8",llcorner:"\u231E",Lleftarrow:"\u21DA",llhard:"\u296B",lltri:"\u25FA",Lmidot:"\u013F",lmidot:"\u0140",lmoustache:"\u23B0",lmoust:"\u23B0",lnap:"\u2A89",lnapprox:"\u2A89",lne:"\u2A87",lnE:"\u2268",lneq:"\u2A87",lneqq:"\u2268",lnsim:"\u22E6",loang:"\u27EC",loarr:"\u21FD",lobrk:"\u27E6",longleftarrow:"\u27F5",LongLeftArrow:"\u27F5",Longleftarrow:"\u27F8",longleftrightarrow:"\u27F7",LongLeftRightArrow:"\u27F7",Longleftrightarrow:"\u27FA",longmapsto:"\u27FC",longrightarrow:"\u27F6",LongRightArrow:"\u27F6",Longrightarrow:"\u27F9",looparrowleft:"\u21AB",looparrowright:"\u21AC",lopar:"\u2985",Lopf:"\u{1D543}",lopf:"\u{1D55D}",loplus:"\u2A2D",lotimes:"\u2A34",lowast:"\u2217",lowbar:"_",LowerLeftArrow:"\u2199",LowerRightArrow:"\u2198",loz:"\u25CA",lozenge:"\u25CA",lozf:"\u29EB",lpar:"(",lparlt:"\u2993",lrarr:"\u21C6",lrcorner:"\u231F",lrhar:"\u21CB",lrhard:"\u296D",lrm:"\u200E",lrtri:"\u22BF",lsaquo:"\u2039",lscr:"\u{1D4C1}",Lscr:"\u2112",lsh:"\u21B0",Lsh:"\u21B0",lsim:"\u2272",lsime:"\u2A8D",lsimg:"\u2A8F",lsqb:"[",lsquo:"\u2018",lsquor:"\u201A",Lstrok:"\u0141",lstrok:"\u0142",ltcc:"\u2AA6",ltcir:"\u2A79",lt:"<",LT:"<",Lt:"\u226A",ltdot:"\u22D6",lthree:"\u22CB",ltimes:"\u22C9",ltlarr:"\u2976",ltquest:"\u2A7B",ltri:"\u25C3",ltrie:"\u22B4",ltrif:"\u25C2",ltrPar:"\u2996",lurdshar:"\u294A",luruhar:"\u2966",lvertneqq:"\u2268\uFE00",lvnE:"\u2268\uFE00",macr:"\xAF",male:"\u2642",malt:"\u2720",maltese:"\u2720",Map:"\u2905",map:"\u21A6",mapsto:"\u21A6",mapstodown:"\u21A7",mapstoleft:"\u21A4",mapstoup:"\u21A5",marker:"\u25AE",mcomma:"\u2A29",Mcy:"\u041C",mcy:"\u043C",mdash:"\u2014",mDDot:"\u223A",measuredangle:"\u2221",MediumSpace:"\u205F",Mellintrf:"\u2133",Mfr:"\u{1D510}",mfr:"\u{1D52A}",mho:"\u2127",micro:"\xB5",midast:"*",midcir:"\u2AF0",mid:"\u2223",middot:"\xB7",minusb:"\u229F",minus:"\u2212",minusd:"\u2238",minusdu:"\u2A2A",MinusPlus:"\u2213",mlcp:"\u2ADB",mldr:"\u2026",mnplus:"\u2213",models:"\u22A7",Mopf:"\u{1D544}",mopf:"\u{1D55E}",mp:"\u2213",mscr:"\u{1D4C2}",Mscr:"\u2133",mstpos:"\u223E",Mu:"\u039C",mu:"\u03BC",multimap:"\u22B8",mumap:"\u22B8",nabla:"\u2207",Nacute:"\u0143",nacute:"\u0144",nang:"\u2220\u20D2",nap:"\u2249",napE:"\u2A70\u0338",napid:"\u224B\u0338",napos:"\u0149",napprox:"\u2249",natural:"\u266E",naturals:"\u2115",natur:"\u266E",nbsp:"\xA0",nbump:"\u224E\u0338",nbumpe:"\u224F\u0338",ncap:"\u2A43",Ncaron:"\u0147",ncaron:"\u0148",Ncedil:"\u0145",ncedil:"\u0146",ncong:"\u2247",ncongdot:"\u2A6D\u0338",ncup:"\u2A42",Ncy:"\u041D",ncy:"\u043D",ndash:"\u2013",nearhk:"\u2924",nearr:"\u2197",neArr:"\u21D7",nearrow:"\u2197",ne:"\u2260",nedot:"\u2250\u0338",NegativeMediumSpace:"\u200B",NegativeThickSpace:"\u200B",NegativeThinSpace:"\u200B",NegativeVeryThinSpace:"\u200B",nequiv:"\u2262",nesear:"\u2928",nesim:"\u2242\u0338",NestedGreaterGreater:"\u226B",NestedLessLess:"\u226A",NewLine:` +`,nexist:"\u2204",nexists:"\u2204",Nfr:"\u{1D511}",nfr:"\u{1D52B}",ngE:"\u2267\u0338",nge:"\u2271",ngeq:"\u2271",ngeqq:"\u2267\u0338",ngeqslant:"\u2A7E\u0338",nges:"\u2A7E\u0338",nGg:"\u22D9\u0338",ngsim:"\u2275",nGt:"\u226B\u20D2",ngt:"\u226F",ngtr:"\u226F",nGtv:"\u226B\u0338",nharr:"\u21AE",nhArr:"\u21CE",nhpar:"\u2AF2",ni:"\u220B",nis:"\u22FC",nisd:"\u22FA",niv:"\u220B",NJcy:"\u040A",njcy:"\u045A",nlarr:"\u219A",nlArr:"\u21CD",nldr:"\u2025",nlE:"\u2266\u0338",nle:"\u2270",nleftarrow:"\u219A",nLeftarrow:"\u21CD",nleftrightarrow:"\u21AE",nLeftrightarrow:"\u21CE",nleq:"\u2270",nleqq:"\u2266\u0338",nleqslant:"\u2A7D\u0338",nles:"\u2A7D\u0338",nless:"\u226E",nLl:"\u22D8\u0338",nlsim:"\u2274",nLt:"\u226A\u20D2",nlt:"\u226E",nltri:"\u22EA",nltrie:"\u22EC",nLtv:"\u226A\u0338",nmid:"\u2224",NoBreak:"\u2060",NonBreakingSpace:"\xA0",nopf:"\u{1D55F}",Nopf:"\u2115",Not:"\u2AEC",not:"\xAC",NotCongruent:"\u2262",NotCupCap:"\u226D",NotDoubleVerticalBar:"\u2226",NotElement:"\u2209",NotEqual:"\u2260",NotEqualTilde:"\u2242\u0338",NotExists:"\u2204",NotGreater:"\u226F",NotGreaterEqual:"\u2271",NotGreaterFullEqual:"\u2267\u0338",NotGreaterGreater:"\u226B\u0338",NotGreaterLess:"\u2279",NotGreaterSlantEqual:"\u2A7E\u0338",NotGreaterTilde:"\u2275",NotHumpDownHump:"\u224E\u0338",NotHumpEqual:"\u224F\u0338",notin:"\u2209",notindot:"\u22F5\u0338",notinE:"\u22F9\u0338",notinva:"\u2209",notinvb:"\u22F7",notinvc:"\u22F6",NotLeftTriangleBar:"\u29CF\u0338",NotLeftTriangle:"\u22EA",NotLeftTriangleEqual:"\u22EC",NotLess:"\u226E",NotLessEqual:"\u2270",NotLessGreater:"\u2278",NotLessLess:"\u226A\u0338",NotLessSlantEqual:"\u2A7D\u0338",NotLessTilde:"\u2274",NotNestedGreaterGreater:"\u2AA2\u0338",NotNestedLessLess:"\u2AA1\u0338",notni:"\u220C",notniva:"\u220C",notnivb:"\u22FE",notnivc:"\u22FD",NotPrecedes:"\u2280",NotPrecedesEqual:"\u2AAF\u0338",NotPrecedesSlantEqual:"\u22E0",NotReverseElement:"\u220C",NotRightTriangleBar:"\u29D0\u0338",NotRightTriangle:"\u22EB",NotRightTriangleEqual:"\u22ED",NotSquareSubset:"\u228F\u0338",NotSquareSubsetEqual:"\u22E2",NotSquareSuperset:"\u2290\u0338",NotSquareSupersetEqual:"\u22E3",NotSubset:"\u2282\u20D2",NotSubsetEqual:"\u2288",NotSucceeds:"\u2281",NotSucceedsEqual:"\u2AB0\u0338",NotSucceedsSlantEqual:"\u22E1",NotSucceedsTilde:"\u227F\u0338",NotSuperset:"\u2283\u20D2",NotSupersetEqual:"\u2289",NotTilde:"\u2241",NotTildeEqual:"\u2244",NotTildeFullEqual:"\u2247",NotTildeTilde:"\u2249",NotVerticalBar:"\u2224",nparallel:"\u2226",npar:"\u2226",nparsl:"\u2AFD\u20E5",npart:"\u2202\u0338",npolint:"\u2A14",npr:"\u2280",nprcue:"\u22E0",nprec:"\u2280",npreceq:"\u2AAF\u0338",npre:"\u2AAF\u0338",nrarrc:"\u2933\u0338",nrarr:"\u219B",nrArr:"\u21CF",nrarrw:"\u219D\u0338",nrightarrow:"\u219B",nRightarrow:"\u21CF",nrtri:"\u22EB",nrtrie:"\u22ED",nsc:"\u2281",nsccue:"\u22E1",nsce:"\u2AB0\u0338",Nscr:"\u{1D4A9}",nscr:"\u{1D4C3}",nshortmid:"\u2224",nshortparallel:"\u2226",nsim:"\u2241",nsime:"\u2244",nsimeq:"\u2244",nsmid:"\u2224",nspar:"\u2226",nsqsube:"\u22E2",nsqsupe:"\u22E3",nsub:"\u2284",nsubE:"\u2AC5\u0338",nsube:"\u2288",nsubset:"\u2282\u20D2",nsubseteq:"\u2288",nsubseteqq:"\u2AC5\u0338",nsucc:"\u2281",nsucceq:"\u2AB0\u0338",nsup:"\u2285",nsupE:"\u2AC6\u0338",nsupe:"\u2289",nsupset:"\u2283\u20D2",nsupseteq:"\u2289",nsupseteqq:"\u2AC6\u0338",ntgl:"\u2279",Ntilde:"\xD1",ntilde:"\xF1",ntlg:"\u2278",ntriangleleft:"\u22EA",ntrianglelefteq:"\u22EC",ntriangleright:"\u22EB",ntrianglerighteq:"\u22ED",Nu:"\u039D",nu:"\u03BD",num:"#",numero:"\u2116",numsp:"\u2007",nvap:"\u224D\u20D2",nvdash:"\u22AC",nvDash:"\u22AD",nVdash:"\u22AE",nVDash:"\u22AF",nvge:"\u2265\u20D2",nvgt:">\u20D2",nvHarr:"\u2904",nvinfin:"\u29DE",nvlArr:"\u2902",nvle:"\u2264\u20D2",nvlt:"<\u20D2",nvltrie:"\u22B4\u20D2",nvrArr:"\u2903",nvrtrie:"\u22B5\u20D2",nvsim:"\u223C\u20D2",nwarhk:"\u2923",nwarr:"\u2196",nwArr:"\u21D6",nwarrow:"\u2196",nwnear:"\u2927",Oacute:"\xD3",oacute:"\xF3",oast:"\u229B",Ocirc:"\xD4",ocirc:"\xF4",ocir:"\u229A",Ocy:"\u041E",ocy:"\u043E",odash:"\u229D",Odblac:"\u0150",odblac:"\u0151",odiv:"\u2A38",odot:"\u2299",odsold:"\u29BC",OElig:"\u0152",oelig:"\u0153",ofcir:"\u29BF",Ofr:"\u{1D512}",ofr:"\u{1D52C}",ogon:"\u02DB",Ograve:"\xD2",ograve:"\xF2",ogt:"\u29C1",ohbar:"\u29B5",ohm:"\u03A9",oint:"\u222E",olarr:"\u21BA",olcir:"\u29BE",olcross:"\u29BB",oline:"\u203E",olt:"\u29C0",Omacr:"\u014C",omacr:"\u014D",Omega:"\u03A9",omega:"\u03C9",Omicron:"\u039F",omicron:"\u03BF",omid:"\u29B6",ominus:"\u2296",Oopf:"\u{1D546}",oopf:"\u{1D560}",opar:"\u29B7",OpenCurlyDoubleQuote:"\u201C",OpenCurlyQuote:"\u2018",operp:"\u29B9",oplus:"\u2295",orarr:"\u21BB",Or:"\u2A54",or:"\u2228",ord:"\u2A5D",order:"\u2134",orderof:"\u2134",ordf:"\xAA",ordm:"\xBA",origof:"\u22B6",oror:"\u2A56",orslope:"\u2A57",orv:"\u2A5B",oS:"\u24C8",Oscr:"\u{1D4AA}",oscr:"\u2134",Oslash:"\xD8",oslash:"\xF8",osol:"\u2298",Otilde:"\xD5",otilde:"\xF5",otimesas:"\u2A36",Otimes:"\u2A37",otimes:"\u2297",Ouml:"\xD6",ouml:"\xF6",ovbar:"\u233D",OverBar:"\u203E",OverBrace:"\u23DE",OverBracket:"\u23B4",OverParenthesis:"\u23DC",para:"\xB6",parallel:"\u2225",par:"\u2225",parsim:"\u2AF3",parsl:"\u2AFD",part:"\u2202",PartialD:"\u2202",Pcy:"\u041F",pcy:"\u043F",percnt:"%",period:".",permil:"\u2030",perp:"\u22A5",pertenk:"\u2031",Pfr:"\u{1D513}",pfr:"\u{1D52D}",Phi:"\u03A6",phi:"\u03C6",phiv:"\u03D5",phmmat:"\u2133",phone:"\u260E",Pi:"\u03A0",pi:"\u03C0",pitchfork:"\u22D4",piv:"\u03D6",planck:"\u210F",planckh:"\u210E",plankv:"\u210F",plusacir:"\u2A23",plusb:"\u229E",pluscir:"\u2A22",plus:"+",plusdo:"\u2214",plusdu:"\u2A25",pluse:"\u2A72",PlusMinus:"\xB1",plusmn:"\xB1",plussim:"\u2A26",plustwo:"\u2A27",pm:"\xB1",Poincareplane:"\u210C",pointint:"\u2A15",popf:"\u{1D561}",Popf:"\u2119",pound:"\xA3",prap:"\u2AB7",Pr:"\u2ABB",pr:"\u227A",prcue:"\u227C",precapprox:"\u2AB7",prec:"\u227A",preccurlyeq:"\u227C",Precedes:"\u227A",PrecedesEqual:"\u2AAF",PrecedesSlantEqual:"\u227C",PrecedesTilde:"\u227E",preceq:"\u2AAF",precnapprox:"\u2AB9",precneqq:"\u2AB5",precnsim:"\u22E8",pre:"\u2AAF",prE:"\u2AB3",precsim:"\u227E",prime:"\u2032",Prime:"\u2033",primes:"\u2119",prnap:"\u2AB9",prnE:"\u2AB5",prnsim:"\u22E8",prod:"\u220F",Product:"\u220F",profalar:"\u232E",profline:"\u2312",profsurf:"\u2313",prop:"\u221D",Proportional:"\u221D",Proportion:"\u2237",propto:"\u221D",prsim:"\u227E",prurel:"\u22B0",Pscr:"\u{1D4AB}",pscr:"\u{1D4C5}",Psi:"\u03A8",psi:"\u03C8",puncsp:"\u2008",Qfr:"\u{1D514}",qfr:"\u{1D52E}",qint:"\u2A0C",qopf:"\u{1D562}",Qopf:"\u211A",qprime:"\u2057",Qscr:"\u{1D4AC}",qscr:"\u{1D4C6}",quaternions:"\u210D",quatint:"\u2A16",quest:"?",questeq:"\u225F",quot:'"',QUOT:'"',rAarr:"\u21DB",race:"\u223D\u0331",Racute:"\u0154",racute:"\u0155",radic:"\u221A",raemptyv:"\u29B3",rang:"\u27E9",Rang:"\u27EB",rangd:"\u2992",range:"\u29A5",rangle:"\u27E9",raquo:"\xBB",rarrap:"\u2975",rarrb:"\u21E5",rarrbfs:"\u2920",rarrc:"\u2933",rarr:"\u2192",Rarr:"\u21A0",rArr:"\u21D2",rarrfs:"\u291E",rarrhk:"\u21AA",rarrlp:"\u21AC",rarrpl:"\u2945",rarrsim:"\u2974",Rarrtl:"\u2916",rarrtl:"\u21A3",rarrw:"\u219D",ratail:"\u291A",rAtail:"\u291C",ratio:"\u2236",rationals:"\u211A",rbarr:"\u290D",rBarr:"\u290F",RBarr:"\u2910",rbbrk:"\u2773",rbrace:"}",rbrack:"]",rbrke:"\u298C",rbrksld:"\u298E",rbrkslu:"\u2990",Rcaron:"\u0158",rcaron:"\u0159",Rcedil:"\u0156",rcedil:"\u0157",rceil:"\u2309",rcub:"}",Rcy:"\u0420",rcy:"\u0440",rdca:"\u2937",rdldhar:"\u2969",rdquo:"\u201D",rdquor:"\u201D",rdsh:"\u21B3",real:"\u211C",realine:"\u211B",realpart:"\u211C",reals:"\u211D",Re:"\u211C",rect:"\u25AD",reg:"\xAE",REG:"\xAE",ReverseElement:"\u220B",ReverseEquilibrium:"\u21CB",ReverseUpEquilibrium:"\u296F",rfisht:"\u297D",rfloor:"\u230B",rfr:"\u{1D52F}",Rfr:"\u211C",rHar:"\u2964",rhard:"\u21C1",rharu:"\u21C0",rharul:"\u296C",Rho:"\u03A1",rho:"\u03C1",rhov:"\u03F1",RightAngleBracket:"\u27E9",RightArrowBar:"\u21E5",rightarrow:"\u2192",RightArrow:"\u2192",Rightarrow:"\u21D2",RightArrowLeftArrow:"\u21C4",rightarrowtail:"\u21A3",RightCeiling:"\u2309",RightDoubleBracket:"\u27E7",RightDownTeeVector:"\u295D",RightDownVectorBar:"\u2955",RightDownVector:"\u21C2",RightFloor:"\u230B",rightharpoondown:"\u21C1",rightharpoonup:"\u21C0",rightleftarrows:"\u21C4",rightleftharpoons:"\u21CC",rightrightarrows:"\u21C9",rightsquigarrow:"\u219D",RightTeeArrow:"\u21A6",RightTee:"\u22A2",RightTeeVector:"\u295B",rightthreetimes:"\u22CC",RightTriangleBar:"\u29D0",RightTriangle:"\u22B3",RightTriangleEqual:"\u22B5",RightUpDownVector:"\u294F",RightUpTeeVector:"\u295C",RightUpVectorBar:"\u2954",RightUpVector:"\u21BE",RightVectorBar:"\u2953",RightVector:"\u21C0",ring:"\u02DA",risingdotseq:"\u2253",rlarr:"\u21C4",rlhar:"\u21CC",rlm:"\u200F",rmoustache:"\u23B1",rmoust:"\u23B1",rnmid:"\u2AEE",roang:"\u27ED",roarr:"\u21FE",robrk:"\u27E7",ropar:"\u2986",ropf:"\u{1D563}",Ropf:"\u211D",roplus:"\u2A2E",rotimes:"\u2A35",RoundImplies:"\u2970",rpar:")",rpargt:"\u2994",rppolint:"\u2A12",rrarr:"\u21C9",Rrightarrow:"\u21DB",rsaquo:"\u203A",rscr:"\u{1D4C7}",Rscr:"\u211B",rsh:"\u21B1",Rsh:"\u21B1",rsqb:"]",rsquo:"\u2019",rsquor:"\u2019",rthree:"\u22CC",rtimes:"\u22CA",rtri:"\u25B9",rtrie:"\u22B5",rtrif:"\u25B8",rtriltri:"\u29CE",RuleDelayed:"\u29F4",ruluhar:"\u2968",rx:"\u211E",Sacute:"\u015A",sacute:"\u015B",sbquo:"\u201A",scap:"\u2AB8",Scaron:"\u0160",scaron:"\u0161",Sc:"\u2ABC",sc:"\u227B",sccue:"\u227D",sce:"\u2AB0",scE:"\u2AB4",Scedil:"\u015E",scedil:"\u015F",Scirc:"\u015C",scirc:"\u015D",scnap:"\u2ABA",scnE:"\u2AB6",scnsim:"\u22E9",scpolint:"\u2A13",scsim:"\u227F",Scy:"\u0421",scy:"\u0441",sdotb:"\u22A1",sdot:"\u22C5",sdote:"\u2A66",searhk:"\u2925",searr:"\u2198",seArr:"\u21D8",searrow:"\u2198",sect:"\xA7",semi:";",seswar:"\u2929",setminus:"\u2216",setmn:"\u2216",sext:"\u2736",Sfr:"\u{1D516}",sfr:"\u{1D530}",sfrown:"\u2322",sharp:"\u266F",SHCHcy:"\u0429",shchcy:"\u0449",SHcy:"\u0428",shcy:"\u0448",ShortDownArrow:"\u2193",ShortLeftArrow:"\u2190",shortmid:"\u2223",shortparallel:"\u2225",ShortRightArrow:"\u2192",ShortUpArrow:"\u2191",shy:"\xAD",Sigma:"\u03A3",sigma:"\u03C3",sigmaf:"\u03C2",sigmav:"\u03C2",sim:"\u223C",simdot:"\u2A6A",sime:"\u2243",simeq:"\u2243",simg:"\u2A9E",simgE:"\u2AA0",siml:"\u2A9D",simlE:"\u2A9F",simne:"\u2246",simplus:"\u2A24",simrarr:"\u2972",slarr:"\u2190",SmallCircle:"\u2218",smallsetminus:"\u2216",smashp:"\u2A33",smeparsl:"\u29E4",smid:"\u2223",smile:"\u2323",smt:"\u2AAA",smte:"\u2AAC",smtes:"\u2AAC\uFE00",SOFTcy:"\u042C",softcy:"\u044C",solbar:"\u233F",solb:"\u29C4",sol:"/",Sopf:"\u{1D54A}",sopf:"\u{1D564}",spades:"\u2660",spadesuit:"\u2660",spar:"\u2225",sqcap:"\u2293",sqcaps:"\u2293\uFE00",sqcup:"\u2294",sqcups:"\u2294\uFE00",Sqrt:"\u221A",sqsub:"\u228F",sqsube:"\u2291",sqsubset:"\u228F",sqsubseteq:"\u2291",sqsup:"\u2290",sqsupe:"\u2292",sqsupset:"\u2290",sqsupseteq:"\u2292",square:"\u25A1",Square:"\u25A1",SquareIntersection:"\u2293",SquareSubset:"\u228F",SquareSubsetEqual:"\u2291",SquareSuperset:"\u2290",SquareSupersetEqual:"\u2292",SquareUnion:"\u2294",squarf:"\u25AA",squ:"\u25A1",squf:"\u25AA",srarr:"\u2192",Sscr:"\u{1D4AE}",sscr:"\u{1D4C8}",ssetmn:"\u2216",ssmile:"\u2323",sstarf:"\u22C6",Star:"\u22C6",star:"\u2606",starf:"\u2605",straightepsilon:"\u03F5",straightphi:"\u03D5",strns:"\xAF",sub:"\u2282",Sub:"\u22D0",subdot:"\u2ABD",subE:"\u2AC5",sube:"\u2286",subedot:"\u2AC3",submult:"\u2AC1",subnE:"\u2ACB",subne:"\u228A",subplus:"\u2ABF",subrarr:"\u2979",subset:"\u2282",Subset:"\u22D0",subseteq:"\u2286",subseteqq:"\u2AC5",SubsetEqual:"\u2286",subsetneq:"\u228A",subsetneqq:"\u2ACB",subsim:"\u2AC7",subsub:"\u2AD5",subsup:"\u2AD3",succapprox:"\u2AB8",succ:"\u227B",succcurlyeq:"\u227D",Succeeds:"\u227B",SucceedsEqual:"\u2AB0",SucceedsSlantEqual:"\u227D",SucceedsTilde:"\u227F",succeq:"\u2AB0",succnapprox:"\u2ABA",succneqq:"\u2AB6",succnsim:"\u22E9",succsim:"\u227F",SuchThat:"\u220B",sum:"\u2211",Sum:"\u2211",sung:"\u266A",sup1:"\xB9",sup2:"\xB2",sup3:"\xB3",sup:"\u2283",Sup:"\u22D1",supdot:"\u2ABE",supdsub:"\u2AD8",supE:"\u2AC6",supe:"\u2287",supedot:"\u2AC4",Superset:"\u2283",SupersetEqual:"\u2287",suphsol:"\u27C9",suphsub:"\u2AD7",suplarr:"\u297B",supmult:"\u2AC2",supnE:"\u2ACC",supne:"\u228B",supplus:"\u2AC0",supset:"\u2283",Supset:"\u22D1",supseteq:"\u2287",supseteqq:"\u2AC6",supsetneq:"\u228B",supsetneqq:"\u2ACC",supsim:"\u2AC8",supsub:"\u2AD4",supsup:"\u2AD6",swarhk:"\u2926",swarr:"\u2199",swArr:"\u21D9",swarrow:"\u2199",swnwar:"\u292A",szlig:"\xDF",Tab:" ",target:"\u2316",Tau:"\u03A4",tau:"\u03C4",tbrk:"\u23B4",Tcaron:"\u0164",tcaron:"\u0165",Tcedil:"\u0162",tcedil:"\u0163",Tcy:"\u0422",tcy:"\u0442",tdot:"\u20DB",telrec:"\u2315",Tfr:"\u{1D517}",tfr:"\u{1D531}",there4:"\u2234",therefore:"\u2234",Therefore:"\u2234",Theta:"\u0398",theta:"\u03B8",thetasym:"\u03D1",thetav:"\u03D1",thickapprox:"\u2248",thicksim:"\u223C",ThickSpace:"\u205F\u200A",ThinSpace:"\u2009",thinsp:"\u2009",thkap:"\u2248",thksim:"\u223C",THORN:"\xDE",thorn:"\xFE",tilde:"\u02DC",Tilde:"\u223C",TildeEqual:"\u2243",TildeFullEqual:"\u2245",TildeTilde:"\u2248",timesbar:"\u2A31",timesb:"\u22A0",times:"\xD7",timesd:"\u2A30",tint:"\u222D",toea:"\u2928",topbot:"\u2336",topcir:"\u2AF1",top:"\u22A4",Topf:"\u{1D54B}",topf:"\u{1D565}",topfork:"\u2ADA",tosa:"\u2929",tprime:"\u2034",trade:"\u2122",TRADE:"\u2122",triangle:"\u25B5",triangledown:"\u25BF",triangleleft:"\u25C3",trianglelefteq:"\u22B4",triangleq:"\u225C",triangleright:"\u25B9",trianglerighteq:"\u22B5",tridot:"\u25EC",trie:"\u225C",triminus:"\u2A3A",TripleDot:"\u20DB",triplus:"\u2A39",trisb:"\u29CD",tritime:"\u2A3B",trpezium:"\u23E2",Tscr:"\u{1D4AF}",tscr:"\u{1D4C9}",TScy:"\u0426",tscy:"\u0446",TSHcy:"\u040B",tshcy:"\u045B",Tstrok:"\u0166",tstrok:"\u0167",twixt:"\u226C",twoheadleftarrow:"\u219E",twoheadrightarrow:"\u21A0",Uacute:"\xDA",uacute:"\xFA",uarr:"\u2191",Uarr:"\u219F",uArr:"\u21D1",Uarrocir:"\u2949",Ubrcy:"\u040E",ubrcy:"\u045E",Ubreve:"\u016C",ubreve:"\u016D",Ucirc:"\xDB",ucirc:"\xFB",Ucy:"\u0423",ucy:"\u0443",udarr:"\u21C5",Udblac:"\u0170",udblac:"\u0171",udhar:"\u296E",ufisht:"\u297E",Ufr:"\u{1D518}",ufr:"\u{1D532}",Ugrave:"\xD9",ugrave:"\xF9",uHar:"\u2963",uharl:"\u21BF",uharr:"\u21BE",uhblk:"\u2580",ulcorn:"\u231C",ulcorner:"\u231C",ulcrop:"\u230F",ultri:"\u25F8",Umacr:"\u016A",umacr:"\u016B",uml:"\xA8",UnderBar:"_",UnderBrace:"\u23DF",UnderBracket:"\u23B5",UnderParenthesis:"\u23DD",Union:"\u22C3",UnionPlus:"\u228E",Uogon:"\u0172",uogon:"\u0173",Uopf:"\u{1D54C}",uopf:"\u{1D566}",UpArrowBar:"\u2912",uparrow:"\u2191",UpArrow:"\u2191",Uparrow:"\u21D1",UpArrowDownArrow:"\u21C5",updownarrow:"\u2195",UpDownArrow:"\u2195",Updownarrow:"\u21D5",UpEquilibrium:"\u296E",upharpoonleft:"\u21BF",upharpoonright:"\u21BE",uplus:"\u228E",UpperLeftArrow:"\u2196",UpperRightArrow:"\u2197",upsi:"\u03C5",Upsi:"\u03D2",upsih:"\u03D2",Upsilon:"\u03A5",upsilon:"\u03C5",UpTeeArrow:"\u21A5",UpTee:"\u22A5",upuparrows:"\u21C8",urcorn:"\u231D",urcorner:"\u231D",urcrop:"\u230E",Uring:"\u016E",uring:"\u016F",urtri:"\u25F9",Uscr:"\u{1D4B0}",uscr:"\u{1D4CA}",utdot:"\u22F0",Utilde:"\u0168",utilde:"\u0169",utri:"\u25B5",utrif:"\u25B4",uuarr:"\u21C8",Uuml:"\xDC",uuml:"\xFC",uwangle:"\u29A7",vangrt:"\u299C",varepsilon:"\u03F5",varkappa:"\u03F0",varnothing:"\u2205",varphi:"\u03D5",varpi:"\u03D6",varpropto:"\u221D",varr:"\u2195",vArr:"\u21D5",varrho:"\u03F1",varsigma:"\u03C2",varsubsetneq:"\u228A\uFE00",varsubsetneqq:"\u2ACB\uFE00",varsupsetneq:"\u228B\uFE00",varsupsetneqq:"\u2ACC\uFE00",vartheta:"\u03D1",vartriangleleft:"\u22B2",vartriangleright:"\u22B3",vBar:"\u2AE8",Vbar:"\u2AEB",vBarv:"\u2AE9",Vcy:"\u0412",vcy:"\u0432",vdash:"\u22A2",vDash:"\u22A8",Vdash:"\u22A9",VDash:"\u22AB",Vdashl:"\u2AE6",veebar:"\u22BB",vee:"\u2228",Vee:"\u22C1",veeeq:"\u225A",vellip:"\u22EE",verbar:"|",Verbar:"\u2016",vert:"|",Vert:"\u2016",VerticalBar:"\u2223",VerticalLine:"|",VerticalSeparator:"\u2758",VerticalTilde:"\u2240",VeryThinSpace:"\u200A",Vfr:"\u{1D519}",vfr:"\u{1D533}",vltri:"\u22B2",vnsub:"\u2282\u20D2",vnsup:"\u2283\u20D2",Vopf:"\u{1D54D}",vopf:"\u{1D567}",vprop:"\u221D",vrtri:"\u22B3",Vscr:"\u{1D4B1}",vscr:"\u{1D4CB}",vsubnE:"\u2ACB\uFE00",vsubne:"\u228A\uFE00",vsupnE:"\u2ACC\uFE00",vsupne:"\u228B\uFE00",Vvdash:"\u22AA",vzigzag:"\u299A",Wcirc:"\u0174",wcirc:"\u0175",wedbar:"\u2A5F",wedge:"\u2227",Wedge:"\u22C0",wedgeq:"\u2259",weierp:"\u2118",Wfr:"\u{1D51A}",wfr:"\u{1D534}",Wopf:"\u{1D54E}",wopf:"\u{1D568}",wp:"\u2118",wr:"\u2240",wreath:"\u2240",Wscr:"\u{1D4B2}",wscr:"\u{1D4CC}",xcap:"\u22C2",xcirc:"\u25EF",xcup:"\u22C3",xdtri:"\u25BD",Xfr:"\u{1D51B}",xfr:"\u{1D535}",xharr:"\u27F7",xhArr:"\u27FA",Xi:"\u039E",xi:"\u03BE",xlarr:"\u27F5",xlArr:"\u27F8",xmap:"\u27FC",xnis:"\u22FB",xodot:"\u2A00",Xopf:"\u{1D54F}",xopf:"\u{1D569}",xoplus:"\u2A01",xotime:"\u2A02",xrarr:"\u27F6",xrArr:"\u27F9",Xscr:"\u{1D4B3}",xscr:"\u{1D4CD}",xsqcup:"\u2A06",xuplus:"\u2A04",xutri:"\u25B3",xvee:"\u22C1",xwedge:"\u22C0",Yacute:"\xDD",yacute:"\xFD",YAcy:"\u042F",yacy:"\u044F",Ycirc:"\u0176",ycirc:"\u0177",Ycy:"\u042B",ycy:"\u044B",yen:"\xA5",Yfr:"\u{1D51C}",yfr:"\u{1D536}",YIcy:"\u0407",yicy:"\u0457",Yopf:"\u{1D550}",yopf:"\u{1D56A}",Yscr:"\u{1D4B4}",yscr:"\u{1D4CE}",YUcy:"\u042E",yucy:"\u044E",yuml:"\xFF",Yuml:"\u0178",Zacute:"\u0179",zacute:"\u017A",Zcaron:"\u017D",zcaron:"\u017E",Zcy:"\u0417",zcy:"\u0437",Zdot:"\u017B",zdot:"\u017C",zeetrf:"\u2128",ZeroWidthSpace:"\u200B",Zeta:"\u0396",zeta:"\u03B6",zfr:"\u{1D537}",Zfr:"\u2128",ZHcy:"\u0416",zhcy:"\u0436",zigrarr:"\u21DD",zopf:"\u{1D56B}",Zopf:"\u2124",Zscr:"\u{1D4B5}",zscr:"\u{1D4CF}",zwj:"\u200D",zwnj:"\u200C"}});var Wr=_((Lb,Ms)=>{"use strict";Ms.exports=Is()});var oi=_((Tb,Fs)=>{Fs.exports=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/});var Ps=_(($b,Bs)=>{"use strict";var qs={};function qh(n){var t,e,i=qs[n];if(i)return i;for(i=qs[n]=[],t=0;t<128;t++)e=String.fromCharCode(t),/^[0-9a-z]$/i.test(e)?i.push(e):i.push("%"+("0"+t.toString(16).toUpperCase()).slice(-2));for(t=0;t"u"&&(e=!0),a=qh(t),i=0,r=n.length;i=55296&&o<=57343){if(o>=55296&&o<=56319&&i+1=56320&&s<=57343)){l+=encodeURIComponent(n[i]+n[i+1]),i++;continue}l+="%EF%BF%BD";continue}l+=encodeURIComponent(n[i])}return l}si.defaultChars=";/?:@&=+$,-_.!~*'()#";si.componentChars="-_.!~*'()";Bs.exports=si});var Ns=_((Ib,Rs)=>{"use strict";var Os={};function Bh(n){var t,e,i=Os[n];if(i)return i;for(i=Os[n]=[],t=0;t<128;t++)e=String.fromCharCode(t),i.push(e);for(t=0;t=55296&&u<=57343?h+="\uFFFD\uFFFD\uFFFD":h+=String.fromCharCode(u),r+=6;continue}if((s&248)===240&&r+91114111?h+="\uFFFD\uFFFD\uFFFD\uFFFD":(u-=65536,h+=String.fromCharCode(55296+(u>>10),56320+(u&1023))),r+=9;continue}h+="\uFFFD"}return h})}ai.defaultChars=";/?:@&=+$,#";ai.componentChars="";Rs.exports=ai});var Hs=_((Mb,zs)=>{"use strict";zs.exports=function(t){var e="";return e+=t.protocol||"",e+=t.slashes?"//":"",e+=t.auth?t.auth+"@":"",t.hostname&&t.hostname.indexOf(":")!==-1?e+="["+t.hostname+"]":e+=t.hostname||"",e+=t.port?":"+t.port:"",e+=t.pathname||"",e+=t.search||"",e+=t.hash||"",e}});var Zs=_((Fb,Ks)=>{"use strict";function li(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var Ph=/^([a-z0-9.+-]+:)/i,Oh=/:[0-9]*$/,Rh=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,Nh=["<",">",'"',"`"," ","\r",` +`," "],zh=["{","}","|","\\","^","`"].concat(Nh),Hh=["'"].concat(zh),Us=["%","/","?",";","#"].concat(Hh),js=["/","?","#"],Uh=255,Vs=/^[+a-z0-9A-Z_-]{0,63}$/,jh=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Ws={javascript:!0,"javascript:":!0},Gs={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function Vh(n,t){if(n&&n instanceof li)return n;var e=new li;return e.parse(n,t),e}li.prototype.parse=function(n,t){var e,i,r,o,s,a=n;if(a=a.trim(),!t&&n.split("#").length===1){var l=Rh.exec(a);if(l)return this.pathname=l[1],l[2]&&(this.search=l[2]),this}var c=Ph.exec(a);if(c&&(c=c[0],r=c.toLowerCase(),this.protocol=c,a=a.substr(c.length)),(t||c||a.match(/^\/\/[^@\/]+@[^@\/]+/))&&(s=a.substr(0,2)==="//",s&&!(c&&Ws[c])&&(a=a.substr(2),this.slashes=!0)),!Ws[c]&&(s||c&&!Gs[c])){var u=-1;for(e=0;e127?v+="x":v+=w[b];if(!v.match(Vs)){var x=m.slice(0,e),E=m.slice(e+1),y=w.match(jh);y&&(x.push(y[1]),E.unshift(y[2])),E.length&&(a=E.join(".")+a),this.hostname=x.join(".");break}}}}this.hostname.length>Uh&&(this.hostname=""),p&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}var S=a.indexOf("#");S!==-1&&(this.hash=a.substr(S),a=a.slice(0,S));var D=a.indexOf("?");return D!==-1&&(this.search=a.substr(D),a=a.slice(0,D)),a&&(this.pathname=a),Gs[r]&&this.hostname&&!this.pathname&&(this.pathname=""),this};li.prototype.parseHost=function(n){var t=Oh.exec(n);t&&(t=t[0],t!==":"&&(this.port=t.substr(1)),n=n.substr(0,n.length-t.length)),n&&(this.hostname=n)};Ks.exports=Vh});var Gr=_((qb,Ke)=>{"use strict";Ke.exports.encode=Ps();Ke.exports.decode=Ns();Ke.exports.format=Hs();Ke.exports.parse=Zs()});var Kr=_((Bb,Xs)=>{Xs.exports=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/});var Zr=_((Pb,Ys)=>{Ys.exports=/[\0-\x1F\x7F-\x9F]/});var Qs=_((Ob,Js)=>{Js.exports=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/});var Xr=_((Rb,ta)=>{ta.exports=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/});var ea=_(ge=>{"use strict";ge.Any=Kr();ge.Cc=Zr();ge.Cf=Qs();ge.P=oi();ge.Z=Xr()});var N=_(Q=>{"use strict";function Wh(n){return Object.prototype.toString.call(n)}function Gh(n){return Wh(n)==="[object String]"}var Kh=Object.prototype.hasOwnProperty;function ia(n,t){return Kh.call(n,t)}function Zh(n){var t=Array.prototype.slice.call(arguments,1);return t.forEach(function(e){if(e){if(typeof e!="object")throw new TypeError(e+"must be object");Object.keys(e).forEach(function(i){n[i]=e[i]})}}),n}function Xh(n,t,e){return[].concat(n.slice(0,t),e,n.slice(t+1))}function ra(n){return!(n>=55296&&n<=57343||n>=64976&&n<=65007||(n&65535)===65535||(n&65535)===65534||n>=0&&n<=8||n===11||n>=14&&n<=31||n>=127&&n<=159||n>1114111)}function oa(n){if(n>65535){n-=65536;var t=55296+(n>>10),e=56320+(n&1023);return String.fromCharCode(t,e)}return String.fromCharCode(n)}var sa=/\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g,Yh=/&([a-z#][a-z0-9]{1,31});/gi,Jh=new RegExp(sa.source+"|"+Yh.source,"gi"),Qh=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i,na=Wr();function td(n,t){var e;return ia(na,t)?na[t]:t.charCodeAt(0)===35&&Qh.test(t)&&(e=t[1].toLowerCase()==="x"?parseInt(t.slice(2),16):parseInt(t.slice(1),10),ra(e))?oa(e):n}function ed(n){return n.indexOf("\\")<0?n:n.replace(sa,"$1")}function nd(n){return n.indexOf("\\")<0&&n.indexOf("&")<0?n:n.replace(Jh,function(t,e,i){return e||td(t,i)})}var id=/[&<>"]/,rd=/[&<>"]/g,od={"&":"&","<":"<",">":">",'"':"""};function sd(n){return od[n]}function ad(n){return id.test(n)?n.replace(rd,sd):n}var ld=/[.?*+^$[\]\\(){}|-]/g;function cd(n){return n.replace(ld,"\\$&")}function ud(n){switch(n){case 9:case 32:return!0}return!1}function hd(n){if(n>=8192&&n<=8202)return!0;switch(n){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1}var dd=oi();function pd(n){return dd.test(n)}function fd(n){switch(n){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}}function md(n){return n=n.trim().replace(/\s+/g," "),"\u1E9E".toLowerCase()==="\u1E7E"&&(n=n.replace(/ẞ/g,"\xDF")),n.toLowerCase().toUpperCase()}Q.lib={};Q.lib.mdurl=Gr();Q.lib.ucmicro=ea();Q.assign=Zh;Q.isString=Gh;Q.has=ia;Q.unescapeMd=ed;Q.unescapeAll=nd;Q.isValidEntityCode=ra;Q.fromCodePoint=oa;Q.escapeHtml=ad;Q.arrayReplaceAt=Xh;Q.isSpace=ud;Q.isWhiteSpace=hd;Q.isMdAsciiPunct=fd;Q.isPunctChar=pd;Q.escapeRE=cd;Q.normalizeReference=md});var la=_((Hb,aa)=>{"use strict";aa.exports=function(t,e,i){var r,o,s,a,l=-1,c=t.posMax,u=t.pos;for(t.pos=e+1,r=1;t.pos{"use strict";var ca=N().unescapeAll;ua.exports=function(t,e,i){var r,o,s=e,a={ok:!1,pos:0,lines:0,str:""};if(t.charCodeAt(s)===60){for(s++;s32))return a;if(r===41){if(o===0)break;o--}s++}return e===s||o!==0||(a.str=ca(t.slice(e,s)),a.pos=s,a.ok=!0),a}});var pa=_((jb,da)=>{"use strict";var gd=N().unescapeAll;da.exports=function(t,e,i){var r,o,s=0,a=e,l={ok:!1,pos:0,lines:0,str:""};if(a>=i||(o=t.charCodeAt(a),o!==34&&o!==39&&o!==40))return l;for(a++,o===40&&(o=41);a{"use strict";ci.parseLinkLabel=la();ci.parseLinkDestination=ha();ci.parseLinkTitle=pa()});var ga=_((Wb,ma)=>{"use strict";var bd=N().assign,vd=N().unescapeAll,Jt=N().escapeHtml,Dt={};Dt.code_inline=function(n,t,e,i,r){var o=n[t];return""+Jt(o.content)+""};Dt.code_block=function(n,t,e,i,r){var o=n[t];return""+Jt(n[t].content)+` +`};Dt.fence=function(n,t,e,i,r){var o=n[t],s=o.info?vd(o.info).trim():"",a="",l="",c,u,h,d,f;return s&&(h=s.split(/(\s+)/g),a=h[0],l=h.slice(2).join("")),e.highlight?c=e.highlight(o.content,a,l)||Jt(o.content):c=Jt(o.content),c.indexOf(""+c+` `):"
"+c+`
-`};De.image=function(n,e,t,i,r){var o=n[e];return o.attrs[o.attrIndex("alt")][1]=r.renderInlineAsText(o.children,t,i),r.renderToken(n,e,t)};De.hardbreak=function(n,e,t){return t.xhtmlOut?`
+`};Dt.image=function(n,t,e,i,r){var o=n[t];return o.attrs[o.attrIndex("alt")][1]=r.renderInlineAsText(o.children,e,i),r.renderToken(n,t,e)};Dt.hardbreak=function(n,t,e){return e.xhtmlOut?`
`:`
-`};De.softbreak=function(n,e,t){return t.breaks?t.xhtmlOut?`
+`};Dt.softbreak=function(n,t,e){return e.breaks?e.xhtmlOut?`
`:`
`:` -`};De.text=function(n,e){return Je(n[e].content)};De.html_block=function(n,e){return n[e].content};De.html_inline=function(n,e){return n[e].content};function bt(){this.rules=vd({},De)}bt.prototype.renderAttrs=function(e){var t,i,r;if(!e.attrs)return"";for(r="",t=0,i=e.attrs.length;t -`:">",o)};bt.prototype.renderInline=function(n,e,t){for(var i,r="",o=this.rules,s=0,a=n.length;s{"use strict";function Ce(){this.__rules__=[],this.__cache__=null}Ce.prototype.__find__=function(n){for(var e=0;e{"use strict";var yd=/\r\n?|\n/g,xd=/\0/g;va.exports=function(e){var t;t=e.src.replace(yd,` -`),t=t.replace(xd,"\uFFFD"),e.src=t}});var xa=_((Zb,ya)=>{"use strict";ya.exports=function(e){var t;e.inlineMode?(t=new e.Token("inline","",0),t.content=e.src,t.map=[0,1],t.children=[],e.tokens.push(t)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}});var Ca=_((Xb,ka)=>{"use strict";ka.exports=function(e){var t=e.tokens,i,r,o;for(r=0,o=t.length;r{"use strict";var kd=R().arrayReplaceAt;function Cd(n){return/^\s]/i.test(n)}function Ed(n){return/^<\/a\s*>/i.test(n)}Ea.exports=function(e){var t,i,r,o,s,a,l,c,u,h,d,p,f,m,y,v,b=e.tokens,k;if(e.md.options.linkify){for(i=0,r=b.length;i=0;t--){if(a=o[t],a.type==="link_close"){for(t--;o[t].level!==a.level&&o[t].type!=="link_open";)t--;continue}if(a.type==="html_inline"&&(Cd(a.content)&&f>0&&f--,Ed(a.content)&&f++),!(f>0)&&a.type==="text"&&e.md.linkify.test(a.content)){for(u=a.content,k=e.md.linkify.match(u),l=[],p=a.level,d=0,k.length>0&&k[0].index===0&&t>0&&o[t-1].type==="text_special"&&(k=k.slice(1)),c=0;cd&&(s=new e.Token("text","",0),s.content=u.slice(d,h),s.level=p,l.push(s)),s=new e.Token("link_open","a",1),s.attrs=[["href",y]],s.level=p++,s.markup="linkify",s.info="auto",l.push(s),s=new e.Token("text","",0),s.content=v,s.level=p,l.push(s),s=new e.Token("link_close","a",-1),s.level=--p,s.markup="linkify",s.info="auto",l.push(s),d=k[c].lastIndex);d{"use strict";var Sa=/\+-|\.\.|\?\?\?\?|!!!!|,,|--/,_d=/\((c|tm|r)\)/i,Sd=/\((c|tm|r)\)/ig,Ad={c:"\xA9",r:"\xAE",tm:"\u2122"};function Dd(n,e){return Ad[e.toLowerCase()]}function Td(n){var e,t,i=0;for(e=n.length-1;e>=0;e--)t=n[e],t.type==="text"&&!i&&(t.content=t.content.replace(Sd,Dd)),t.type==="link_open"&&t.info==="auto"&&i--,t.type==="link_close"&&t.info==="auto"&&i++}function Ld(n){var e,t,i=0;for(e=n.length-1;e>=0;e--)t=n[e],t.type==="text"&&!i&&Sa.test(t.content)&&(t.content=t.content.replace(/\+-/g,"\xB1").replace(/\.{2,}/g,"\u2026").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/mg,"$1\u2014").replace(/(^|\s)--(?=\s|$)/mg,"$1\u2013").replace(/(^|[^-\s])--(?=[^-\s]|$)/mg,"$1\u2013")),t.type==="link_open"&&t.info==="auto"&&i--,t.type==="link_close"&&t.info==="auto"&&i++}Aa.exports=function(e){var t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)e.tokens[t].type==="inline"&&(_d.test(e.tokens[t].content)&&Td(e.tokens[t].children),Sa.test(e.tokens[t].content)&&Ld(e.tokens[t].children))}});var qa=_((Qb,Fa)=>{"use strict";var Ta=R().isWhiteSpace,La=R().isPunctChar,Ia=R().isMdAsciiPunct,Id=/['"]/,$a=/['"]/g,Ma="\u2019";function hi(n,e,t){return n.slice(0,e)+t+n.slice(e+1)}function $d(n,e){var t,i,r,o,s,a,l,c,u,h,d,p,f,m,y,v,b,k,w,E,x;for(w=[],t=0;t=0&&!(w[b].level<=l);b--);if(w.length=b+1,i.type==="text"){r=i.content,s=0,a=r.length;e:for(;s=0)u=r.charCodeAt(o.index-1);else for(b=t-1;b>=0&&!(n[b].type==="softbreak"||n[b].type==="hardbreak");b--)if(n[b].content){u=n[b].content.charCodeAt(n[b].content.length-1);break}if(h=32,s=48&&u<=57&&(v=y=!1),y&&v&&(y=d,v=p),!y&&!v){k&&(i.content=hi(i.content,o.index,Ma));continue}if(v){for(b=w.length-1;b>=0&&(c=w[b],!(w[b].level=0;t--)e.tokens[t].type!=="inline"||!Id.test(e.tokens[t].content)||$d(e.tokens[t].children,e)}});var Pa=_((ev,Ba)=>{"use strict";Ba.exports=function(e){var t,i,r,o,s,a,l=e.tokens;for(t=0,i=l.length;t{"use strict";function vt(n,e,t){this.type=n,this.tag=e,this.attrs=null,this.map=null,this.nesting=t,this.level=0,this.children=null,this.content="",this.markup="",this.info="",this.meta=null,this.block=!1,this.hidden=!1}vt.prototype.attrIndex=function(e){var t,i,r;if(!this.attrs)return-1;for(t=this.attrs,i=0,r=t.length;i=0&&(i=this.attrs[t][1]),i};vt.prototype.attrJoin=function(e,t){var i=this.attrIndex(e);i<0?this.attrPush([e,t]):this.attrs[i][1]=this.attrs[i][1]+" "+t};Oa.exports=vt});var za=_((nv,Na)=>{"use strict";var Md=di();function Ra(n,e,t){this.src=n,this.env=t,this.tokens=[],this.inlineMode=!1,this.md=e}Ra.prototype.Token=Md;Na.exports=Ra});var Ua=_((iv,Ha)=>{"use strict";var Fd=ui(),Yr=[["normalize",wa()],["block",xa()],["inline",Ca()],["linkify",_a()],["replacements",Da()],["smartquotes",qa()],["text_join",Pa()]];function Jr(){this.ruler=new Fd;for(var n=0;n{"use strict";var Qr=R().isSpace;function eo(n,e){var t=n.bMarks[e]+n.tShift[e],i=n.eMarks[e];return n.src.slice(t,i)}function ja(n){var e=[],t=0,i=n.length,r,o=!1,s=0,a="";for(r=n.charCodeAt(t);ti||(u=t+1,e.sCount[u]=4||(a=e.bMarks[u]+e.tShift[u],a>=e.eMarks[u])||(E=e.src.charCodeAt(a++),E!==124&&E!==45&&E!==58)||a>=e.eMarks[u]||(x=e.src.charCodeAt(a++),x!==124&&x!==45&&x!==58&&!Qr(x))||E===45&&Qr(x))return!1;for(;a=4||(h=ja(s),h.length&&h[0]===""&&h.shift(),h.length&&h[h.length-1]===""&&h.pop(),d=h.length,d===0||d!==f.length))return!1;if(r)return!0;for(b=e.parentType,e.parentType="table",w=e.md.block.ruler.getRules("blockquote"),p=e.push("table_open","table",1),p.map=y=[t,0],p=e.push("thead_open","thead",1),p.map=[t,t+1],p=e.push("tr_open","tr",1),p.map=[t,t+1],l=0;l=4)break;for(h=ja(s),h.length&&h[0]===""&&h.shift(),h.length&&h[h.length-1]===""&&h.pop(),u===t+2&&(p=e.push("tbody_open","tbody",1),p.map=v=[t+2,0]),p=e.push("tr_open","tr",1),p.map=[u,u+1],l=0;l{"use strict";Ga.exports=function(e,t,i){var r,o,s;if(e.sCount[t]-e.blkIndent<4)return!1;for(o=r=t+1;r=4){r++,o=r;continue}break}return e.line=o,s=e.push("code_block","code",0),s.content=e.getLines(t,o,4+e.blkIndent,!1)+` -`,s.map=[t,e.line],!0}});var Xa=_((sv,Za)=>{"use strict";Za.exports=function(e,t,i,r){var o,s,a,l,c,u,h,d=!1,p=e.bMarks[t]+e.tShift[t],f=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||p+3>f||(o=e.src.charCodeAt(p),o!==126&&o!==96)||(c=p,p=e.skipChars(p,o),s=p-c,s<3)||(h=e.src.slice(c,p),a=e.src.slice(p,f),o===96&&a.indexOf(String.fromCharCode(o))>=0))return!1;if(r)return!0;for(l=t;l++,!(l>=i||(p=c=e.bMarks[l]+e.tShift[l],f=e.eMarks[l],p=4)&&(p=e.skipChars(p,o),!(p-c{"use strict";var Ya=R().isSpace;Ja.exports=function(e,t,i,r){var o,s,a,l,c,u,h,d,p,f,m,y,v,b,k,w,E,x,S,D,q=e.lineMax,L=e.bMarks[t]+e.tShift[t],I=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||e.src.charCodeAt(L++)!==62)return!1;if(r)return!0;for(l=p=e.sCount[t]+1,e.src.charCodeAt(L)===32?(L++,l++,p++,o=!1,w=!0):e.src.charCodeAt(L)===9?(w=!0,(e.bsCount[t]+p)%4===3?(L++,l++,p++,o=!1):o=!0):w=!1,f=[e.bMarks[t]],e.bMarks[t]=L;L=I,b=[e.sCount[t]],e.sCount[t]=p-l,k=[e.tShift[t]],e.tShift[t]=L-e.bMarks[t],x=e.md.block.ruler.getRules("blockquote"),v=e.parentType,e.parentType="blockquote",d=t+1;d=I));d++){if(e.src.charCodeAt(L++)===62&&!D){for(l=p=e.sCount[d]+1,e.src.charCodeAt(L)===32?(L++,l++,p++,o=!1,w=!0):e.src.charCodeAt(L)===9?(w=!0,(e.bsCount[d]+p)%4===3?(L++,l++,p++,o=!1):o=!0):w=!1,f.push(e.bMarks[d]),e.bMarks[d]=L;L=I,m.push(e.bsCount[d]),e.bsCount[d]=e.sCount[d]+1+(w?1:0),b.push(e.sCount[d]),e.sCount[d]=p-l,k.push(e.tShift[d]),e.tShift[d]=L-e.bMarks[d];continue}if(u)break;for(E=!1,a=0,c=x.length;a",S.map=h=[t,0],e.md.block.tokenize(e,t,d),S=e.push("blockquote_close","blockquote",-1),S.markup=">",e.lineMax=q,e.parentType=v,h[1]=e.line,a=0;a{"use strict";var qd=R().isSpace;el.exports=function(e,t,i,r){var o,s,a,l,c=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||(o=e.src.charCodeAt(c++),o!==42&&o!==45&&o!==95))return!1;for(s=1;c{"use strict";var rl=R().isSpace;function nl(n,e){var t,i,r,o;return i=n.bMarks[e]+n.tShift[e],r=n.eMarks[e],t=n.src.charCodeAt(i++),t!==42&&t!==45&&t!==43||i=o||(t=n.src.charCodeAt(r++),t<48||t>57))return-1;for(;;){if(r>=o)return-1;if(t=n.src.charCodeAt(r++),t>=48&&t<=57){if(r-i>=10)return-1;continue}if(t===41||t===46)break;return-1}return r=4||e.listIndent>=0&&e.sCount[t]-e.listIndent>=4&&e.sCount[t]=e.blkIndent&&(Oe=!0),(I=il(e,t))>=0){if(h=!0,N=e.bMarks[t]+e.tShift[t],v=Number(e.src.slice(N,I-1)),Oe&&v!==1)return!1}else if((I=nl(e,t))>=0)h=!1;else return!1;if(Oe&&e.skipSpaces(I)>=e.eMarks[t])return!1;if(y=e.src.charCodeAt(I-1),r)return!0;for(m=e.tokens.length,h?(V=e.push("ordered_list_open","ol",1),v!==1&&(V.attrs=[["start",v]])):V=e.push("bullet_list_open","ul",1),V.map=f=[t,0],V.markup=String.fromCharCode(y),k=t,H=!1,ge=e.md.block.ruler.getRules("list"),x=e.parentType,e.parentType="list";k=b?c=1:c=w-u,c>4&&(c=1),l=u+c,V=e.push("list_item_open","li",1),V.markup=String.fromCharCode(y),V.map=d=[t,0],h&&(V.info=e.src.slice(N,I-1)),q=e.tight,D=e.tShift[t],S=e.sCount[t],E=e.listIndent,e.listIndent=e.blkIndent,e.blkIndent=l,e.tight=!0,e.tShift[t]=s-e.bMarks[t],e.sCount[t]=w,s>=b&&e.isEmpty(t+1)?e.line=Math.min(e.line+2,i):e.md.block.tokenize(e,t,i,!0),(!e.tight||H)&&(Re=!1),H=e.line-t>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=E,e.tShift[t]=D,e.sCount[t]=S,e.tight=q,V=e.push("list_item_close","li",-1),V.markup=String.fromCharCode(y),k=t=e.line,d[1]=k,s=e.bMarks[t],k>=i||e.sCount[k]=4)break;for(ee=!1,a=0,p=ge.length;a{"use strict";var Pd=R().normalizeReference,pi=R().isSpace;al.exports=function(e,t,i,r){var o,s,a,l,c,u,h,d,p,f,m,y,v,b,k,w,E=0,x=e.bMarks[t]+e.tShift[t],S=e.eMarks[t],D=t+1;if(e.sCount[t]-e.blkIndent>=4||e.src.charCodeAt(x)!==91)return!1;for(;++x3)&&!(e.sCount[D]<0)){for(b=!1,u=0,h=k.length;u"u"&&(e.env.references={}),typeof e.env.references[d]>"u"&&(e.env.references[d]={title:w,href:c}),e.parentType=f,e.line=t+E+1),!0)}});var ul=_((hv,cl)=>{"use strict";cl.exports=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","source","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"]});var no=_((dv,to)=>{"use strict";var Od="[a-zA-Z_:][a-zA-Z0-9:._-]*",Rd="[^\"'=<>`\\x00-\\x20]+",Nd="'[^']*'",zd='"[^"]*"',Hd="(?:"+Rd+"|"+Nd+"|"+zd+")",Ud="(?:\\s+"+Od+"(?:\\s*=\\s*"+Hd+")?)",hl="<[A-Za-z][A-Za-z0-9\\-]*"+Ud+"*\\s*\\/?>",dl="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",jd="|",Vd="<[?][\\s\\S]*?[?]>",Wd="]*>",Gd="",Kd=new RegExp("^(?:"+hl+"|"+dl+"|"+jd+"|"+Vd+"|"+Wd+"|"+Gd+")"),Zd=new RegExp("^(?:"+hl+"|"+dl+")");to.exports.HTML_TAG_RE=Kd;to.exports.HTML_OPEN_CLOSE_TAG_RE=Zd});var fl=_((pv,pl)=>{"use strict";var Xd=ul(),Yd=no().HTML_OPEN_CLOSE_TAG_RE,wt=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(Yd.source+"\\s*$"),/^$/,!1]];pl.exports=function(e,t,i,r){var o,s,a,l,c=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||!e.md.options.html||e.src.charCodeAt(c)!==60)return!1;for(l=e.src.slice(c,u),o=0;o{"use strict";var ml=R().isSpace;gl.exports=function(e,t,i,r){var o,s,a,l,c=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||(o=e.src.charCodeAt(c),o!==35||c>=u))return!1;for(s=1,o=e.src.charCodeAt(++c);o===35&&c6||cc&&ml(e.src.charCodeAt(a-1))&&(u=a),e.line=t+1,l=e.push("heading_open","h"+String(s),1),l.markup="########".slice(0,s),l.map=[t,e.line],l=e.push("inline","",0),l.content=e.src.slice(c,u).trim(),l.map=[t,e.line],l.children=[],l=e.push("heading_close","h"+String(s),-1),l.markup="########".slice(0,s)),!0)}});var wl=_((mv,vl)=>{"use strict";vl.exports=function(e,t,i){var r,o,s,a,l,c,u,h,d,p=t+1,f,m=e.md.block.ruler.getRules("paragraph");if(e.sCount[t]-e.blkIndent>=4)return!1;for(f=e.parentType,e.parentType="paragraph";p3)){if(e.sCount[p]>=e.blkIndent&&(c=e.bMarks[p]+e.tShift[p],u=e.eMarks[p],c=u)))){h=d===61?1:2;break}if(!(e.sCount[p]<0)){for(o=!1,s=0,a=m.length;s{"use strict";yl.exports=function(e,t){var i,r,o,s,a,l,c=t+1,u=e.md.block.ruler.getRules("paragraph"),h=e.lineMax;for(l=e.parentType,e.parentType="paragraph";c3)&&!(e.sCount[c]<0)){for(r=!1,o=0,s=u.length;o{"use strict";var kl=di(),fi=R().isSpace;function Te(n,e,t,i){var r,o,s,a,l,c,u,h;for(this.src=n,this.md=e,this.env=t,this.tokens=i,this.bMarks=[],this.eMarks=[],this.tShift=[],this.sCount=[],this.bsCount=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.ddIndent=-1,this.listIndent=-1,this.parentType="root",this.level=0,this.result="",o=this.src,h=!1,s=a=c=u=0,l=o.length;a0&&this.level++,this.tokens.push(i),i};Te.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]};Te.prototype.skipEmptyLines=function(e){for(var t=this.lineMax;et;)if(!fi(this.src.charCodeAt(--e)))return e+1;return e};Te.prototype.skipChars=function(e,t){for(var i=this.src.length;ei;)if(t!==this.src.charCodeAt(--e))return e+1;return e};Te.prototype.getLines=function(e,t,i,r){var o,s,a,l,c,u,h,d=e;if(e>=t)return"";for(u=new Array(t-e),o=0;di?u[o]=new Array(s-i+1).join(" ")+this.src.slice(l,c):u[o]=this.src.slice(l,c)}return u.join("")};Te.prototype.Token=kl;Cl.exports=Te});var Sl=_((vv,_l)=>{"use strict";var Jd=ui(),mi=[["table",Wa(),["paragraph","reference"]],["code",Ka()],["fence",Xa(),["paragraph","reference","blockquote","list"]],["blockquote",Qa(),["paragraph","reference","blockquote","list"]],["hr",tl(),["paragraph","reference","blockquote","list"]],["list",sl(),["paragraph","reference","blockquote"]],["reference",ll()],["html_block",fl(),["paragraph","reference","blockquote"]],["heading",bl(),["paragraph","reference","blockquote"]],["lheading",wl()],["paragraph",xl()]];function gi(){this.ruler=new Jd;for(var n=0;n=t||n.sCount[a]=c){n.line=t;break}for(r=0;r{"use strict";function Qd(n){switch(n){case 10:case 33:case 35:case 36:case 37:case 38:case 42:case 43:case 45:case 58:case 60:case 61:case 62:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 125:case 126:return!0;default:return!1}}Al.exports=function(e,t){for(var i=e.pos;i{"use strict";var ep=/(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;Tl.exports=function(e,t){var i,r,o,s,a,l,c,u;return!e.md.options.linkify||e.linkLevel>0||(i=e.pos,r=e.posMax,i+3>r)||e.src.charCodeAt(i)!==58||e.src.charCodeAt(i+1)!==47||e.src.charCodeAt(i+2)!==47||(o=e.pending.match(ep),!o)||(s=o[1],a=e.md.linkify.matchAtStart(e.src.slice(i-s.length)),!a)||(l=a.url,l=l.replace(/\*+$/,""),c=e.md.normalizeLink(l),!e.md.validateLink(c))?!1:(t||(e.pending=e.pending.slice(0,-s.length),u=e.push("link_open","a",1),u.attrs=[["href",c]],u.markup="linkify",u.info="auto",u=e.push("text","",0),u.content=e.md.normalizeLinkText(l),u=e.push("link_close","a",-1),u.markup="linkify",u.info="auto"),e.pos+=l.length-s.length,!0)}});var $l=_((xv,Il)=>{"use strict";var tp=R().isSpace;Il.exports=function(e,t){var i,r,o,s=e.pos;if(e.src.charCodeAt(s)!==10)return!1;if(i=e.pending.length-1,r=e.posMax,!t)if(i>=0&&e.pending.charCodeAt(i)===32)if(i>=1&&e.pending.charCodeAt(i-1)===32){for(o=i-1;o>=1&&e.pending.charCodeAt(o-1)===32;)o--;e.pending=e.pending.slice(0,o),e.push("hardbreak","br",0)}else e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0);else e.push("softbreak","br",0);for(s++;s{"use strict";var np=R().isSpace,ro=[];for(io=0;io<256;io++)ro.push(0);var io;"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(n){ro[n.charCodeAt(0)]=1});Ml.exports=function(e,t){var i,r,o,s,a,l=e.pos,c=e.posMax;if(e.src.charCodeAt(l)!==92||(l++,l>=c))return!1;if(i=e.src.charCodeAt(l),i===10){for(t||e.push("hardbreak","br",0),l++;l=55296&&i<=56319&&l+1=56320&&r<=57343&&(s+=e.src[l+1],l++)),o="\\"+s,t||(a=e.push("text_special","",0),i<256&&ro[i]!==0?a.content=s:a.content=o,a.markup=o,a.info="escape"),e.pos=l+1,!0}});var Bl=_((Cv,ql)=>{"use strict";ql.exports=function(e,t){var i,r,o,s,a,l,c,u,h=e.pos,d=e.src.charCodeAt(h);if(d!==96)return!1;for(i=h,h++,r=e.posMax;h{"use strict";oo.exports.tokenize=function(e,t){var i,r,o,s,a,l=e.pos,c=e.src.charCodeAt(l);if(t||c!==126||(r=e.scanDelims(e.pos,!0),s=r.length,a=String.fromCharCode(c),s<2))return!1;for(s%2&&(o=e.push("text","",0),o.content=a,s--),i=0;i{"use strict";ao.exports.tokenize=function(e,t){var i,r,o,s=e.pos,a=e.src.charCodeAt(s);if(t||a!==95&&a!==42)return!1;for(r=e.scanDelims(e.pos,a===42),i=0;i=0;t--)i=e[t],!(i.marker!==95&&i.marker!==42)&&i.end!==-1&&(r=e[i.end],a=t>0&&e[t-1].end===i.end+1&&e[t-1].marker===i.marker&&e[t-1].token===i.token-1&&e[i.end+1].token===r.token+1,s=String.fromCharCode(i.marker),o=n.tokens[i.token],o.type=a?"strong_open":"em_open",o.tag=a?"strong":"em",o.nesting=1,o.markup=a?s+s:s,o.content="",o=n.tokens[r.token],o.type=a?"strong_close":"em_close",o.tag=a?"strong":"em",o.nesting=-1,o.markup=a?s+s:s,o.content="",a&&(n.tokens[e[t-1].token].content="",n.tokens[e[i.end+1].token].content="",t--))}ao.exports.postProcess=function(e){var t,i=e.tokens_meta,r=e.tokens_meta.length;for(Ol(e,e.delimiters),t=0;t{"use strict";var ip=R().normalizeReference,co=R().isSpace;Rl.exports=function(e,t){var i,r,o,s,a,l,c,u,h,d="",p="",f=e.pos,m=e.posMax,y=e.pos,v=!0;if(e.src.charCodeAt(e.pos)!==91||(a=e.pos+1,s=e.md.helpers.parseLinkLabel(e,e.pos,!0),s<0))return!1;if(l=s+1,l=m)return!1;if(y=l,c=e.md.helpers.parseLinkDestination(e.src,l,e.posMax),c.ok){for(d=e.md.normalizeLink(c.str),e.md.validateLink(d)?l=c.pos:d="",y=l;l=m||e.src.charCodeAt(l)!==41)&&(v=!0),l++}if(v){if(typeof e.env.references>"u")return!1;if(l=0?o=e.src.slice(y,l++):l=s+1):l=s+1,o||(o=e.src.slice(a,s)),u=e.env.references[ip(o)],!u)return e.pos=f,!1;d=u.href,p=u.title}return t||(e.pos=a,e.posMax=s,h=e.push("link_open","a",1),h.attrs=i=[["href",d]],p&&i.push(["title",p]),e.linkLevel++,e.md.inline.tokenize(e),e.linkLevel--,h=e.push("link_close","a",-1)),e.pos=l,e.posMax=m,!0}});var Hl=_((Av,zl)=>{"use strict";var rp=R().normalizeReference,uo=R().isSpace;zl.exports=function(e,t){var i,r,o,s,a,l,c,u,h,d,p,f,m,y="",v=e.pos,b=e.posMax;if(e.src.charCodeAt(e.pos)!==33||e.src.charCodeAt(e.pos+1)!==91||(l=e.pos+2,a=e.md.helpers.parseLinkLabel(e,e.pos+1,!1),a<0))return!1;if(c=a+1,c=b)return!1;for(m=c,h=e.md.helpers.parseLinkDestination(e.src,c,e.posMax),h.ok&&(y=e.md.normalizeLink(h.str),e.md.validateLink(y)?c=h.pos:y=""),m=c;c=b||e.src.charCodeAt(c)!==41)return e.pos=v,!1;c++}else{if(typeof e.env.references>"u")return!1;if(c=0?s=e.src.slice(m,c++):c=a+1):c=a+1,s||(s=e.src.slice(l,a)),u=e.env.references[rp(s)],!u)return e.pos=v,!1;y=u.href,d=u.title}return t||(o=e.src.slice(l,a),e.md.inline.parse(o,e.md,e.env,f=[]),p=e.push("image","img",0),p.attrs=i=[["src",y],["alt",""]],p.children=f,p.content=o,d&&i.push(["title",d])),e.pos=c,e.posMax=b,!0}});var jl=_((Dv,Ul)=>{"use strict";var op=/^([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/,sp=/^([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)$/;Ul.exports=function(e,t){var i,r,o,s,a,l,c=e.pos;if(e.src.charCodeAt(c)!==60)return!1;for(a=e.pos,l=e.posMax;;){if(++c>=l||(s=e.src.charCodeAt(c),s===60))return!1;if(s===62)break}return i=e.src.slice(a+1,c),sp.test(i)?(r=e.md.normalizeLink(i),e.md.validateLink(r)?(t||(o=e.push("link_open","a",1),o.attrs=[["href",r]],o.markup="autolink",o.info="auto",o=e.push("text","",0),o.content=e.md.normalizeLinkText(i),o=e.push("link_close","a",-1),o.markup="autolink",o.info="auto"),e.pos+=i.length+2,!0):!1):op.test(i)?(r=e.md.normalizeLink("mailto:"+i),e.md.validateLink(r)?(t||(o=e.push("link_open","a",1),o.attrs=[["href",r]],o.markup="autolink",o.info="auto",o=e.push("text","",0),o.content=e.md.normalizeLinkText(i),o=e.push("link_close","a",-1),o.markup="autolink",o.info="auto"),e.pos+=i.length+2,!0):!1):!1}});var Wl=_((Tv,Vl)=>{"use strict";var ap=no().HTML_TAG_RE;function lp(n){return/^\s]/i.test(n)}function cp(n){return/^<\/a\s*>/i.test(n)}function up(n){var e=n|32;return e>=97&&e<=122}Vl.exports=function(e,t){var i,r,o,s,a=e.pos;return!e.md.options.html||(o=e.posMax,e.src.charCodeAt(a)!==60||a+2>=o)||(i=e.src.charCodeAt(a+1),i!==33&&i!==63&&i!==47&&!up(i))||(r=e.src.slice(a).match(ap),!r)?!1:(t||(s=e.push("html_inline","",0),s.content=e.src.slice(a,a+r[0].length),lp(s.content)&&e.linkLevel++,cp(s.content)&&e.linkLevel--),e.pos+=r[0].length,!0)}});var Xl=_((Lv,Zl)=>{"use strict";var Gl=Wr(),hp=R().has,dp=R().isValidEntityCode,Kl=R().fromCodePoint,pp=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,fp=/^&([a-z][a-z0-9]{1,31});/i;Zl.exports=function(e,t){var i,r,o,s,a=e.pos,l=e.posMax;if(e.src.charCodeAt(a)!==38||a+1>=l)return!1;if(i=e.src.charCodeAt(a+1),i===35){if(o=e.src.slice(a).match(pp),o)return t||(r=o[1][0].toLowerCase()==="x"?parseInt(o[1].slice(1),16):parseInt(o[1],10),s=e.push("text_special","",0),s.content=dp(r)?Kl(r):Kl(65533),s.markup=o[0],s.info="entity"),e.pos+=o[0].length,!0}else if(o=e.src.slice(a).match(fp),o&&hp(Gl,o[1]))return t||(s=e.push("text_special","",0),s.content=Gl[o[1]],s.markup=o[0],s.info="entity"),e.pos+=o[0].length,!0;return!1}});var Ql=_((Iv,Jl)=>{"use strict";function Yl(n,e){var t,i,r,o,s,a,l,c,u={},h=e.length;if(h){var d=0,p=-2,f=[];for(t=0;ts;i-=f[i]+1)if(o=e[i],o.marker===r.marker&&o.open&&o.end<0&&(l=!1,(o.close||r.open)&&(o.length+r.length)%3===0&&(o.length%3!==0||r.length%3!==0)&&(l=!0),!l)){c=i>0&&!e[i-1].open?f[i-1]+1:0,f[t]=t-i+c,f[i]=c,r.open=!1,o.end=t,o.close=!1,a=-1,p=-2;break}a!==-1&&(u[r.marker][(r.open?3:0)+(r.length||0)%3]=a)}}}Jl.exports=function(e){var t,i=e.tokens_meta,r=e.tokens_meta.length;for(Yl(e,e.delimiters),t=0;t{"use strict";ec.exports=function(e){var t,i,r=0,o=e.tokens,s=e.tokens.length;for(t=i=0;t0&&r++,o[t].type==="text"&&t+1{"use strict";var ho=di(),nc=R().isWhiteSpace,ic=R().isPunctChar,rc=R().isMdAsciiPunct;function Zt(n,e,t,i){this.src=n,this.env=t,this.md=e,this.tokens=i,this.tokens_meta=Array(i.length),this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache={},this.delimiters=[],this._prev_delimiters=[],this.backticks={},this.backticksScanned=!1,this.linkLevel=0}Zt.prototype.pushPending=function(){var n=new ho("text","",0);return n.content=this.pending,n.level=this.pendingLevel,this.tokens.push(n),this.pending="",n};Zt.prototype.push=function(n,e,t){this.pending&&this.pushPending();var i=new ho(n,e,t),r=null;return t<0&&(this.level--,this.delimiters=this._prev_delimiters.pop()),i.level=this.level,t>0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],r={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(i),this.tokens_meta.push(r),i};Zt.prototype.scanDelims=function(n,e){var t=n,i,r,o,s,a,l,c,u,h,d=!0,p=!0,f=this.posMax,m=this.src.charCodeAt(n);for(i=n>0?this.src.charCodeAt(n-1):32;t{"use strict";var ac=ui(),po=[["text",Dl()],["linkify",Ll()],["newline",$l()],["escape",Fl()],["backticks",Bl()],["strikethrough",so().tokenize],["emphasis",lo().tokenize],["link",Nl()],["image",Hl()],["autolink",jl()],["html_inline",Wl()],["entity",Xl()]],fo=[["balance_pairs",Ql()],["strikethrough",so().postProcess],["emphasis",lo().postProcess],["fragments_join",tc()]];function Xt(){var n;for(this.ruler=new ac,n=0;n=o)break;continue}n.pending+=n.src[n.pos++]}n.pending&&n.pushPending()};Xt.prototype.parse=function(n,e,t,i){var r,o,s,a=new this.State(n,e,t,i);for(this.tokenize(a),o=this.ruler2.getRules(""),s=o.length,r=0;r{"use strict";uc.exports=function(n){var e={};n=n||{},e.src_Any=Kr().source,e.src_Cc=Zr().source,e.src_Z=Xr().source,e.src_P=oi().source,e.src_ZPCc=[e.src_Z,e.src_P,e.src_Cc].join("|"),e.src_ZCc=[e.src_Z,e.src_Cc].join("|");var t="[><\uFF5C]";return e.src_pseudo_letter="(?:(?!"+t+"|"+e.src_ZPCc+")"+e.src_Any+")",e.src_ip4="(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",e.src_auth="(?:(?:(?!"+e.src_ZCc+"|[@/\\[\\]()]).)+@)?",e.src_port="(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?",e.src_host_terminator="(?=$|"+t+"|"+e.src_ZPCc+")(?!"+(n["---"]?"-(?!--)|":"-|")+"_|:\\d|\\.-|\\.(?!$|"+e.src_ZPCc+"))",e.src_path="(?:[/?#](?:(?!"+e.src_ZCc+"|"+t+`|[()[\\]{}.,"'?!\\-;]).|\\[(?:(?!`+e.src_ZCc+"|\\]).)*\\]|\\((?:(?!"+e.src_ZCc+"|[)]).)*\\)|\\{(?:(?!"+e.src_ZCc+'|[}]).)*\\}|\\"(?:(?!'+e.src_ZCc+`|["]).)+\\"|\\'(?:(?!`+e.src_ZCc+"|[']).)+\\'|\\'(?="+e.src_pseudo_letter+"|[-])|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!"+e.src_ZCc+"|[.]|$)|"+(n["---"]?"\\-(?!--(?:[^-]|$))(?:-*)|":"\\-+|")+",(?!"+e.src_ZCc+"|$)|;(?!"+e.src_ZCc+"|$)|\\!+(?!"+e.src_ZCc+"|[!]|$)|\\?(?!"+e.src_ZCc+"|[?]|$))+|\\/)?",e.src_email_name='[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*',e.src_xn="xn--[a-z0-9\\-]{1,59}",e.src_domain_root="(?:"+e.src_xn+"|"+e.src_pseudo_letter+"{1,63})",e.src_domain="(?:"+e.src_xn+"|(?:"+e.src_pseudo_letter+")|(?:"+e.src_pseudo_letter+"(?:-|"+e.src_pseudo_letter+"){0,61}"+e.src_pseudo_letter+"))",e.src_host="(?:(?:(?:(?:"+e.src_domain+")\\.)*"+e.src_domain+"))",e.tpl_host_fuzzy="(?:"+e.src_ip4+"|(?:(?:(?:"+e.src_domain+")\\.)+(?:%TLDS%)))",e.tpl_host_no_ip_fuzzy="(?:(?:(?:"+e.src_domain+")\\.)+(?:%TLDS%))",e.src_host_strict=e.src_host+e.src_host_terminator,e.tpl_host_fuzzy_strict=e.tpl_host_fuzzy+e.src_host_terminator,e.src_host_port_strict=e.src_host+e.src_port+e.src_host_terminator,e.tpl_host_port_fuzzy_strict=e.tpl_host_fuzzy+e.src_port+e.src_host_terminator,e.tpl_host_port_no_ip_fuzzy_strict=e.tpl_host_no_ip_fuzzy+e.src_port+e.src_host_terminator,e.tpl_host_fuzzy_test="localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:"+e.src_ZPCc+"|>|$))",e.tpl_email_fuzzy="(^|"+t+'|"|\\(|'+e.src_ZCc+")("+e.src_email_name+"@"+e.tpl_host_fuzzy_strict+")",e.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+e.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+e.tpl_host_port_fuzzy_strict+e.src_path+")",e.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+e.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+e.tpl_host_port_no_ip_fuzzy_strict+e.src_path+")",e}});var gc=_((Bv,mc)=>{"use strict";function mo(n){var e=Array.prototype.slice.call(arguments,1);return e.forEach(function(t){t&&Object.keys(t).forEach(function(i){n[i]=t[i]})}),n}function vi(n){return Object.prototype.toString.call(n)}function mp(n){return vi(n)==="[object String]"}function gp(n){return vi(n)==="[object Object]"}function bp(n){return vi(n)==="[object RegExp]"}function dc(n){return vi(n)==="[object Function]"}function vp(n){return n.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}var fc={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};function wp(n){return Object.keys(n||{}).reduce(function(e,t){return e||fc.hasOwnProperty(t)},!1)}var yp={"http:":{validate:function(n,e,t){var i=n.slice(e);return t.re.http||(t.re.http=new RegExp("^\\/\\/"+t.re.src_auth+t.re.src_host_port_strict+t.re.src_path,"i")),t.re.http.test(i)?i.match(t.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(n,e,t){var i=n.slice(e);return t.re.no_http||(t.re.no_http=new RegExp("^"+t.re.src_auth+"(?:localhost|(?:(?:"+t.re.src_domain+")\\.)+"+t.re.src_domain_root+")"+t.re.src_port+t.re.src_host_terminator+t.re.src_path,"i")),t.re.no_http.test(i)?e>=3&&n[e-3]===":"||e>=3&&n[e-3]==="/"?0:i.match(t.re.no_http)[0].length:0}},"mailto:":{validate:function(n,e,t){var i=n.slice(e);return t.re.mailto||(t.re.mailto=new RegExp("^"+t.re.src_email_name+"@"+t.re.src_host_strict,"i")),t.re.mailto.test(i)?i.match(t.re.mailto)[0].length:0}}},xp="a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]",kp="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|");function Cp(n){n.__index__=-1,n.__text_cache__=""}function Ep(n){return function(e,t){var i=e.slice(t);return n.test(i)?i.match(n)[0].length:0}}function pc(){return function(n,e){e.normalize(n)}}function bi(n){var e=n.re=hc()(n.__opts__),t=n.__tlds__.slice();n.onCompile(),n.__tlds_replaced__||t.push(xp),t.push(e.src_xn),e.src_tlds=t.join("|");function i(a){return a.replace("%TLDS%",e.src_tlds)}e.email_fuzzy=RegExp(i(e.tpl_email_fuzzy),"i"),e.link_fuzzy=RegExp(i(e.tpl_link_fuzzy),"i"),e.link_no_ip_fuzzy=RegExp(i(e.tpl_link_no_ip_fuzzy),"i"),e.host_fuzzy_test=RegExp(i(e.tpl_host_fuzzy_test),"i");var r=[];n.__compiled__={};function o(a,l){throw new Error('(LinkifyIt) Invalid schema "'+a+'": '+l)}Object.keys(n.__schemas__).forEach(function(a){var l=n.__schemas__[a];if(l!==null){var c={validate:null,link:null};if(n.__compiled__[a]=c,gp(l)){bp(l.validate)?c.validate=Ep(l.validate):dc(l.validate)?c.validate=l.validate:o(a,l),dc(l.normalize)?c.normalize=l.normalize:l.normalize?o(a,l):c.normalize=pc();return}if(mp(l)){r.push(a);return}o(a,l)}}),r.forEach(function(a){n.__compiled__[n.__schemas__[a]]&&(n.__compiled__[a].validate=n.__compiled__[n.__schemas__[a]].validate,n.__compiled__[a].normalize=n.__compiled__[n.__schemas__[a]].normalize)}),n.__compiled__[""]={validate:null,normalize:pc()};var s=Object.keys(n.__compiled__).filter(function(a){return a.length>0&&n.__compiled__[a]}).map(vp).join("|");n.re.schema_test=RegExp("(^|(?!_)(?:[><\uFF5C]|"+e.src_ZPCc+"))("+s+")","i"),n.re.schema_search=RegExp("(^|(?!_)(?:[><\uFF5C]|"+e.src_ZPCc+"))("+s+")","ig"),n.re.schema_at_start=RegExp("^"+n.re.schema_search.source,"i"),n.re.pretest=RegExp("("+n.re.schema_test.source+")|("+n.re.host_fuzzy_test.source+")|@","i"),Cp(n)}function _p(n,e){var t=n.__index__,i=n.__last_index__,r=n.__text_cache__.slice(t,i);this.schema=n.__schema__.toLowerCase(),this.index=t+e,this.lastIndex=i+e,this.raw=r,this.text=r,this.url=r}function go(n,e){var t=new _p(n,e);return n.__compiled__[t.schema].normalize(t,n),t}function me(n,e){if(!(this instanceof me))return new me(n,e);e||wp(n)&&(e=n,n={}),this.__opts__=mo({},fc,e),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=mo({},yp,n),this.__compiled__={},this.__tlds__=kp,this.__tlds_replaced__=!1,this.re={},bi(this)}me.prototype.add=function(e,t){return this.__schemas__[e]=t,bi(this),this};me.prototype.set=function(e){return this.__opts__=mo(this.__opts__,e),this};me.prototype.test=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return!1;var t,i,r,o,s,a,l,c,u;if(this.re.schema_test.test(e)){for(l=this.re.schema_search,l.lastIndex=0;(t=l.exec(e))!==null;)if(o=this.testSchemaAt(e,t[2],l.lastIndex),o){this.__schema__=t[2],this.__index__=t.index+t[1].length,this.__last_index__=t.index+t[0].length+o;break}}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(c=e.search(this.re.host_fuzzy_test),c>=0&&(this.__index__<0||c=0&&(r=e.match(this.re.email_fuzzy))!==null&&(s=r.index+r[1].length,a=r.index+r[0].length,(this.__index__<0||sthis.__last_index__)&&(this.__schema__="mailto:",this.__index__=s,this.__last_index__=a))),this.__index__>=0};me.prototype.pretest=function(e){return this.re.pretest.test(e)};me.prototype.testSchemaAt=function(e,t,i){return this.__compiled__[t.toLowerCase()]?this.__compiled__[t.toLowerCase()].validate(e,i,this):0};me.prototype.match=function(e){var t=0,i=[];this.__index__>=0&&this.__text_cache__===e&&(i.push(go(this,t)),t=this.__last_index__);for(var r=t?e.slice(t):e;this.test(r);)i.push(go(this,t)),r=r.slice(this.__last_index__),t+=this.__last_index__;return i.length?i:null};me.prototype.matchAtStart=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return null;var t=this.re.schema_at_start.exec(e);if(!t)return null;var i=this.testSchemaAt(e,t[2],t[0].length);return i?(this.__schema__=t[2],this.__index__=t.index+t[1].length,this.__last_index__=t.index+t[0].length+i,go(this,0)):null};me.prototype.tlds=function(e,t){return e=Array.isArray(e)?e:[e],t?(this.__tlds__=this.__tlds__.concat(e).sort().filter(function(i,r,o){return i!==o[r-1]}).reverse(),bi(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,bi(this),this)};me.prototype.normalize=function(e){e.schema||(e.url="http://"+e.url),e.schema==="mailto:"&&!/^mailto:/i.test(e.url)&&(e.url="mailto:"+e.url)};me.prototype.onCompile=function(){};mc.exports=me});var Ec={};St(Ec,{decode:()=>yo,default:()=>Mp,encode:()=>xo,toASCII:()=>Cc,toUnicode:()=>kc,ucs2decode:()=>wo,ucs2encode:()=>yc});function Ve(n){throw new RangeError(Tp[n])}function Lp(n,e){let t=[],i=n.length;for(;i--;)t[i]=e(n[i]);return t}function wc(n,e){let t=n.split("@"),i="";t.length>1&&(i=t[0]+"@",n=t[1]),n=n.replace(Dp,".");let r=n.split("."),o=Lp(r,e).join(".");return i+o}function wo(n){let e=[],t=0,i=n.length;for(;t=55296&&r<=56319&&t{"use strict";vc="-",Sp=/^xn--/,Ap=/[^\0-\x7F]/,Dp=/[\x2E\u3002\uFF0E\uFF61]/g,Tp={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},bo=36-1,Le=Math.floor,vo=String.fromCharCode;yc=n=>String.fromCodePoint(...n),Ip=function(n){return n>=48&&n<58?26+(n-48):n>=65&&n<91?n-65:n>=97&&n<123?n-97:36},bc=function(n,e){return n+22+75*(n<26)-((e!=0)<<5)},xc=function(n,e,t){let i=0;for(n=t?Le(n/700):n>>1,n+=Le(n/e);n>bo*26>>1;i+=36)n=Le(n/bo);return Le(i+(bo+1)*n/(n+38))},yo=function(n){let e=[],t=n.length,i=0,r=128,o=72,s=n.lastIndexOf(vc);s<0&&(s=0);for(let a=0;a=128&&Ve("not-basic"),e.push(n.charCodeAt(a));for(let a=s>0?s+1:0;a=t&&Ve("invalid-input");let d=Ip(n.charCodeAt(a++));d>=36&&Ve("invalid-input"),d>Le((2147483647-i)/u)&&Ve("overflow"),i+=d*u;let p=h<=o?1:h>=o+26?26:h-o;if(dLe(2147483647/f)&&Ve("overflow"),u*=f}let c=e.length+1;o=xc(i-l,c,l==0),Le(i/c)>2147483647-r&&Ve("overflow"),r+=Le(i/c),i%=c,e.splice(i++,0,r)}return String.fromCodePoint(...e)},xo=function(n){let e=[];n=wo(n);let t=n.length,i=128,r=0,o=72;for(let l of n)l<128&&e.push(vo(l));let s=e.length,a=s;for(s&&e.push(vc);a=i&&uLe((2147483647-r)/c)&&Ve("overflow"),r+=(l-i)*c,i=l;for(let u of n)if(u2147483647&&Ve("overflow"),u===i){let h=r;for(let d=36;;d+=36){let p=d<=o?1:d>=o+26?26:d-o;if(h{"use strict";Sc.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201C\u201D\u2018\u2019",highlight:null,maxNesting:100},components:{core:{},block:{},inline:{}}}});var Tc=_((Ov,Dc)=>{"use strict";Dc.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201C\u201D\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline","text_join"]},block:{rules:["paragraph"]},inline:{rules:["text"],rules2:["balance_pairs","fragments_join"]}}}});var Ic=_((Rv,Lc)=>{"use strict";Lc.exports={options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201C\u201D\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline","text_join"]},block:{rules:["blockquote","code","fence","heading","hr","html_block","lheading","list","reference","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","html_inline","image","link","newline","text"],rules2:["balance_pairs","emphasis","fragments_join"]}}}});var qc=_((Nv,Fc)=>{"use strict";var Yt=R(),Fp=fa(),qp=ga(),Bp=Ua(),Pp=Sl(),Op=cc(),Rp=gc(),Qe=Gr(),$c=(_c(),Pu(Ec)),Np={default:Ac(),zero:Tc(),commonmark:Ic()},zp=/^(vbscript|javascript|file|data):/,Hp=/^data:image\/(gif|png|jpeg|webp);/;function Up(n){var e=n.trim().toLowerCase();return zp.test(e)?!!Hp.test(e):!0}var Mc=["http:","https:","mailto:"];function jp(n){var e=Qe.parse(n,!0);if(e.hostname&&(!e.protocol||Mc.indexOf(e.protocol)>=0))try{e.hostname=$c.toASCII(e.hostname)}catch{}return Qe.encode(Qe.format(e))}function Vp(n){var e=Qe.parse(n,!0);if(e.hostname&&(!e.protocol||Mc.indexOf(e.protocol)>=0))try{e.hostname=$c.toUnicode(e.hostname)}catch{}return Qe.decode(Qe.format(e),Qe.decode.defaultChars+"%")}function be(n,e){if(!(this instanceof be))return new be(n,e);e||Yt.isString(n)||(e=n||{},n="default"),this.inline=new Op,this.block=new Pp,this.core=new Bp,this.renderer=new qp,this.linkify=new Rp,this.validateLink=Up,this.normalizeLink=jp,this.normalizeLinkText=Vp,this.utils=Yt,this.helpers=Yt.assign({},Fp),this.options={},this.configure(n),e&&this.set(e)}be.prototype.set=function(n){return Yt.assign(this.options,n),this};be.prototype.configure=function(n){var e=this,t;if(Yt.isString(n)&&(t=n,n=Np[t],!n))throw new Error('Wrong `markdown-it` preset "'+t+'", check name');if(!n)throw new Error("Wrong `markdown-it` preset, can't be empty");return n.options&&e.set(n.options),n.components&&Object.keys(n.components).forEach(function(i){n.components[i].rules&&e[i].ruler.enableOnly(n.components[i].rules),n.components[i].rules2&&e[i].ruler2.enableOnly(n.components[i].rules2)}),this};be.prototype.enable=function(n,e){var t=[];Array.isArray(n)||(n=[n]),["core","block","inline"].forEach(function(r){t=t.concat(this[r].ruler.enable(n,!0))},this),t=t.concat(this.inline.ruler2.enable(n,!0));var i=n.filter(function(r){return t.indexOf(r)<0});if(i.length&&!e)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+i);return this};be.prototype.disable=function(n,e){var t=[];Array.isArray(n)||(n=[n]),["core","block","inline"].forEach(function(r){t=t.concat(this[r].ruler.disable(n,!0))},this),t=t.concat(this.inline.ruler2.disable(n,!0));var i=n.filter(function(r){return t.indexOf(r)<0});if(i.length&&!e)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+i);return this};be.prototype.use=function(n){var e=[this].concat(Array.prototype.slice.call(arguments,1));return n.apply(n,e),this};be.prototype.parse=function(n,e){if(typeof n!="string")throw new Error("Input data should be a String");var t=new this.core.State(n,this,e);return this.core.process(t),t.tokens};be.prototype.render=function(n,e){return e=e||{},this.renderer.render(this.parse(n,e),this.options,e)};be.prototype.parseInline=function(n,e){var t=new this.core.State(n,this,e);return t.inlineMode=!0,this.core.process(t),t.tokens};be.prototype.renderInline=function(n,e){return e=e||{},this.renderer.render(this.parseInline(n,e),this.options,e)};Fc.exports=be});var Pc=_((zv,Bc)=>{"use strict";Bc.exports=qc()});var Hc=_((Hv,zc)=>{var ko=!0,Rc=!1,Nc=!1;zc.exports=function(n,e){e&&(ko=!e.enabled,Rc=!!e.label,Nc=!!e.labelAfter),n.core.ruler.after("inline","github-task-lists",function(t){for(var i=t.tokens,r=2;r=0;i--)if(n[i].level===t)return i;return-1}function Gp(n,e){return Qp(n[e])&&ef(n[e-1])&&tf(n[e-2])&&nf(n[e])}function Kp(n,e){if(n.children.unshift(Zp(n,e)),n.children[1].content=n.children[1].content.slice(3),n.content=n.content.slice(3),Rc)if(Nc){n.children.pop();var t="task-item-"+Math.ceil(Math.random()*(1e4*1e3)-1e3);n.children[0].content=n.children[0].content.slice(0,-1)+' id="'+t+'">',n.children.push(Jp(n.content,t,e))}else n.children.unshift(Xp(e)),n.children.push(Yp(e))}function Zp(n,e){var t=new e("html_inline","",0),i=ko?' disabled="" ':"";return n.content.indexOf("[ ] ")===0?t.content='':(n.content.indexOf("[x] ")===0||n.content.indexOf("[X] ")===0)&&(t.content=''),t}function Xp(n){var e=new n("html_inline","",0);return e.content="",e}function Jp(n,e,t){var i=new t("html_inline","",0);return i.content='",i.attrs=[{for:e}],i}function Qp(n){return n.type==="inline"}function ef(n){return n.type==="paragraph_open"}function tf(n){return n.type==="list_item_open"}function nf(n){return n.content.indexOf("[ ] ")===0||n.content.indexOf("[x] ")===0||n.content.indexOf("[X] ")===0}});var dr={};St(dr,{emit:()=>ur,emitPublic:()=>zu,error:()=>hr,listen:()=>Nu,showResponseError:()=>ju,showValidationErrors:()=>Uu,success:()=>Hu});var on={},Ru=[];function ur(n,e){Ru.push({name:n,data:e});let t=on[n]||[];for(let i of t)i(e)}function Nu(n,e){typeof on[n]>"u"&&(on[n]=[]),on[n].push(e)}function zu(n,e,t){let i=new CustomEvent(e,{detail:t,bubbles:!0});n.dispatchEvent(i)}function Hu(n){ur("success",n)}function hr(n){ur("error",n)}function Uu(n){if(n.status&&n.status===422&&n.data){let e=Object.values(n.data).flat().join(` -`);hr(e)}}function ju(n){n.status&&n.status>=400&&n.data&&n.data.message&&hr(n.data.message)}var pr={};St(pr,{HttpError:()=>sn,createXMLHttpRequest:()=>Wu,delete:()=>Yu,get:()=>Gu,patch:()=>Xu,post:()=>Ku,put:()=>Zu});async function Vu(n){if(n.status===204)return null;let t=(n.headers.get("Content-Type")||"").split(";")[0].split("/").pop();return t==="javascript"||t==="json"?n.json():n.text()}var sn=class extends Error{constructor(e,t){super(e.statusText),this.data=t,this.headers=e.headers,this.redirected=e.redirected,this.status=e.status,this.statusText=e.statusText,this.url=e.url,this.original=e}};function Wu(n,e,t={}){let i=document.querySelector("meta[name=token]").getAttribute("content"),r=new XMLHttpRequest;for(let[o,s]of Object.entries(t))r.addEventListener(o,s.bind(r));return r.open(n,e),r.withCredentials=!0,r.setRequestHeader("X-CSRF-TOKEN",i),r}async function Go(n,e={}){let t=n;if(t.startsWith("http")||(t=window.baseUrl(t)),e.params){let l=new URL(t);for(let c of Object.keys(e.params)){let u=e.params[c];typeof u<"u"&&u!==null&&l.searchParams.set(c,u)}t=l.toString()}let i=document.querySelector("meta[name=token]").getAttribute("content"),r={...e,credentials:"same-origin"};r.headers={...r.headers||{},baseURL:window.baseUrl(""),"X-CSRF-TOKEN":i};let o=await fetch(t,r),s=await Vu(o),a={data:s,headers:o.headers,redirected:o.redirected,status:o.status,statusText:o.statusText,url:o.url,original:o};if(!o.ok)throw new sn(o,s);return a}async function an(n,e,t=null){let i={method:n,body:t};return typeof t=="object"&&!(t instanceof FormData)&&(i.headers={"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},i.body=JSON.stringify(t)),t instanceof FormData&&n!=="post"&&(t.append("_method",n),i.method="post"),Go(e,i)}async function Gu(n,e={}){return Go(n,{method:"GET",params:e})}async function Ku(n,e=null){return an("POST",n,e)}async function Zu(n,e=null){return an("PUT",n,e)}async function Xu(n,e=null){return an("PATCH",n,e)}async function Yu(n,e=null){return an("DELETE",n,e)}var fr=class{constructor(){this.store=new Map,this.parseTranslations()}parseTranslations(){let e=document.querySelectorAll('meta[name="translation"]');for(let t of e){let i=t.getAttribute("key"),r=t.getAttribute("value");this.store.set(i,r)}}get(e,t){let i=this.getTransText(e);return this.performReplacements(i,t)}getPlural(e,t,i){let r=this.getTransText(e);return this.parsePlural(r,t,i)}parsePlural(e,t,i){let r=e.split("|"),o=/^{([0-9]+)}/,s=/^\[([0-9]+),([0-9*]+)]/,a=null;for(let l of r){let c=l.match(o);if(c!==null&&Number(c[1])===t){a=l.replace(o,"").trim();break}let u=l.match(s);if(u!==null&&Number(u[1])<=t&&(u[2]==="*"||Number(u[2])>=t)){a=l.replace(s,"").trim();break}}return a===null&&r.length>1&&(a=t===1?r[0]:r[1]),a===null&&(a=r[0]),this.performReplacements(a,i)}getTransText(e){let t=this.store.get(e);return t===void 0&&console.warn(`Translation with key "${e}" does not exist`),t}performReplacements(e,t){if(!t)return e;let i=e.match(/:(\S+)/g);if(i===null)return e;let r=e;return i.forEach(o=>{let s=o.substring(1);typeof t[s]>"u"||(r=r.replace(o,t[s]))}),r}},Ko=fr;var wr={};St(wr,{first:()=>th,firstOnElement:()=>ih,get:()=>nh,init:()=>br,register:()=>vr});function mr(n){let e=i=>i.slice(0,1).toUpperCase()+i.slice(1),t=n.split("-");return t[0]+t.slice(1).map(e).join("")}function Zo(n){return n.replace(/[A-Z]/g,(e,t)=>(t>0?"-":"")+e.toLowerCase())}var At={},Xo={},gr=new WeakMap;function Ju(n,e){let t={},i={},r=`${n}@`,o=`[refs*="${r}"]`,s=[...e.querySelectorAll(o)];e.matches(o)&&s.push(e);for(let a of s){let l=a.getAttribute("refs").split(" ").filter(c=>c.startsWith(r)).map(c=>c.replace(r,"")).map(mr);for(let c of l)t[c]=a,typeof i[c]>"u"&&(i[c]=[]),i[c].push(a)}return{refs:t,manyRefs:i}}function Qu(n,e){let t={},i=`option:${n}:`;for(let{name:r,value:o}of e.attributes)if(r.startsWith(i)){let s=r.replace(i,"");t[mr(s)]=o||""}return t}function eh(n,e){let t=Xo[n];if(t===void 0)return;let i;try{i=new t,i.$name=n,i.$el=e;let o=Ju(n,e);i.$refs=o.refs,i.$manyRefs=o.manyRefs,i.$opts=Qu(n,e),i.setup()}catch(o){console.error("Failed to create component",o,n,e)}typeof At[n]>"u"&&(At[n]=[]),At[n].push(i);let r=gr.get(e)||{};r[n]=i,gr.set(e,r)}function br(n=document){let e=n.querySelectorAll("[component],[components]");for(let t of e){let i=`${t.getAttribute("component")||""} ${t.getAttribute("components")}`.toLowerCase().split(" ").filter(Boolean);for(let r of i)eh(r,t)}}function vr(n){let e=Object.keys(n);for(let t of e)Xo[Zo(t)]=n[t]}function th(n){return(At[n]||[null])[0]}function nh(n){return At[n]||[]}function ih(n,e){return(gr.get(n)||{})[e]||null}var Uo={};St(Uo,{AddRemoveRows:()=>cn,AjaxDeleteRow:()=>un,AjaxForm:()=>hn,Attachments:()=>dn,AttachmentsList:()=>pn,AutoSubmit:()=>mn,AutoSuggest:()=>fn,BackToTop:()=>gn,BookSort:()=>Fn,ChapterContents:()=>Bn,CodeEditor:()=>Pn,CodeHighlighter:()=>On,CodeTextarea:()=>Rn,Collapsible:()=>Nn,ConfirmDialog:()=>zn,CustomCheckbox:()=>Hn,DetailsHighlighter:()=>Un,Dropdown:()=>jn,DropdownSearch:()=>Vn,Dropzone:()=>Wn,EditorToolbox:()=>Gn,EntityPermissions:()=>Kn,EntitySearch:()=>Zn,EntitySelector:()=>Xn,EntitySelectorPopup:()=>Yn,EventEmitSelect:()=>Jn,ExpandToggle:()=>Qn,GlobalSearch:()=>ei,HeaderMobileToggle:()=>ti,ImageManager:()=>ni,ImagePicker:()=>ii,ListSortControl:()=>ri,MarkdownEditor:()=>Mi,NewUserPassword:()=>Fi,Notification:()=>qi,OptionalInput:()=>Bi,PageComment:()=>Pi,PageComments:()=>Oi,PageDisplay:()=>Ri,PageEditor:()=>Ni,PagePicker:()=>Hi,PermissionsTable:()=>Ui,Pointer:()=>ji,Popup:()=>Vi,SettingAppColorScheme:()=>Wi,SettingColorPicker:()=>Gi,SettingHomepageControl:()=>Ki,ShelfSort:()=>Zi,ShortcutInput:()=>Yi,Shortcuts:()=>Xi,SortableList:()=>Ji,SubmitOnChange:()=>Qi,Tabs:()=>er,TagManager:()=>tr,TemplateManager:()=>nr,ToggleSwitch:()=>ir,TriLayout:()=>rr,UserSelect:()=>or,WebhookEvents:()=>sr,WysiwygEditor:()=>cr});function Ee(n,e={},t=[]){let i=document.createElement(n);for(let[r,o]of Object.entries(e))o===null?i.removeAttribute(r):i.setAttribute(r,o);for(let r of t)typeof r=="string"?i.append(document.createTextNode(r)):i.append(r);return i}function yr(n,e){let t=document.querySelectorAll(n);for(let i of t)e(i)}function ln(n,e,t){for(let i of e)n.addEventListener(i,t)}function O(n,e){Array.isArray(n)||(n=[n]);for(let t of n)t.addEventListener("click",e),t.addEventListener("keydown",i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),e(i))})}function Yo(n,e,t){Array.isArray(e)||(e=[e]);let i=r=>{r.key===n&&t(r)};e.forEach(r=>r.addEventListener("keydown",i))}function st(n,e){Yo("Enter",n,e)}function Jo(n,e){Yo("Escape",n,e)}function K(n,e,t,i){n.addEventListener(t,r=>{let o=r.target.closest(e);o&&i.call(o,r,o)})}function Qo(n,e){let t=document.querySelectorAll(n);e=e.toLowerCase();for(let i of t)if(i.textContent.toLowerCase().includes(e))return i;return null}function Dt(n){n.innerHTML='
'}function at(){let n=document.createElement("div");return n.classList.add("loading-container"),n.innerHTML="
",n}function Tt(n){let e=n.querySelectorAll(".loading-container");for(let t of e)t.remove()}function _e(n){let e=document.createElement("div");return e.innerHTML=n,window.$components.init(e),e.children[0]}function Ne(n,e,t){let i;return function(...o){let s=this,a=function(){i=null,t||n.apply(s,o)},l=t&&!i;clearTimeout(i),i=setTimeout(a,e),l&&n.apply(s,o)}}function kr(n){if(!n)return;n.scrollIntoView({behavior:"smooth"});let e=getComputedStyle(document.body).getPropertyValue("--color-primary-light"),t=window.getComputedStyle(n).getPropertyValue("background-color");n.style.backgroundColor=e,setTimeout(()=>{n.classList.add("selectFade"),n.style.backgroundColor=t},10),setTimeout(()=>{n.classList.remove("selectFade"),n.style.backgroundColor=""},3e3)}function es(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function ts(){let n=()=>((1+Math.random())*65536|0).toString(16).substring(1);return`${n()+n()}-${n()}-${n()}-${n()}-${n()}${n()}${n()}`}function ns(n){return new Promise(e=>{setTimeout(e,n)})}var g=class{constructor(){se(this,"$name","");se(this,"$el",null);se(this,"$refs",{});se(this,"$manyRefs",{});se(this,"$opts",{})}setup(){}$emit(e,t={}){t.from=this;let i=this.$name,r=new CustomEvent(`${i}-${e}`,{bubbles:!0,detail:t});this.$el.dispatchEvent(r)}};var cn=class extends g{setup(){this.modelRow=this.$refs.model,this.addButton=this.$refs.add,this.removeSelector=this.$opts.removeSelector,this.rowSelector=this.$opts.rowSelector,this.setupListeners()}setupListeners(){this.addButton.addEventListener("click",this.add.bind(this)),K(this.$el,this.removeSelector,"click",e=>{e.target.closest(this.rowSelector).remove()})}add(){let e=this.modelRow.cloneNode(!0);e.classList.remove("hidden"),this.setClonedInputNames(e),this.modelRow.parentNode.insertBefore(e,this.modelRow),window.$components.init(e)}setClonedInputNames(e){let t=ts(),i=e.querySelectorAll('[name*="randrowid"]');for(let r of i)r.name=r.name.split("randrowid").join(t)}};var un=class extends g{setup(){this.row=this.$el,this.url=this.$opts.url,this.deleteButtons=this.$manyRefs.delete,O(this.deleteButtons,this.runDelete.bind(this))}runDelete(){this.row.style.opacity="0.7",this.row.style.pointerEvents="none",window.$http.delete(this.url).then(e=>{typeof e.data=="object"&&e.data.message&&window.$events.emit("success",e.data.message),this.row.remove()}).catch(()=>{this.row.style.opacity=null,this.row.style.pointerEvents=null})}};var hn=class extends g{setup(){this.container=this.$el,this.responseContainer=this.container,this.url=this.$opts.url,this.method=this.$opts.method||"post",this.successMessage=this.$opts.successMessage,this.submitButtons=this.$manyRefs.submit||[],this.$opts.responseContainer&&(this.responseContainer=this.container.closest(this.$opts.responseContainer)),this.setupListeners()}setupListeners(){if(this.container.tagName==="FORM"){this.container.addEventListener("submit",this.submitRealForm.bind(this));return}st(this.container,e=>{this.submitFakeForm(),e.preventDefault()}),this.submitButtons.forEach(e=>O(e,this.submitFakeForm.bind(this)))}submitFakeForm(){let e=new FormData,t=this.container.querySelectorAll("[name]");for(let i of t)e.append(i.getAttribute("name"),i.value);this.submit(e)}submitRealForm(e){e.preventDefault();let t=new FormData(this.container);this.submit(t)}async submit(e){this.responseContainer.style.opacity="0.7",this.responseContainer.style.pointerEvents="none";try{let t=await window.$http[this.method.toLowerCase()](this.url,e);this.$emit("success",{formData:e}),this.responseContainer.innerHTML=t.data,this.successMessage&&window.$events.emit("success",this.successMessage)}catch(t){this.responseContainer.innerHTML=t.data}window.$components.init(this.responseContainer),this.responseContainer.style.opacity=null,this.responseContainer.style.pointerEvents=null}};var dn=class extends g{setup(){this.container=this.$el,this.pageId=this.$opts.pageId,this.editContainer=this.$refs.editContainer,this.listContainer=this.$refs.listContainer,this.linksContainer=this.$refs.linksContainer,this.listPanel=this.$refs.listPanel,this.attachLinkButton=this.$refs.attachLinkButton,this.setupListeners()}setupListeners(){let e=this.reloadList.bind(this);this.container.addEventListener("dropzone-upload-success",e),this.container.addEventListener("ajax-form-success",e),this.container.addEventListener("sortable-list-sort",t=>{this.updateOrder(t.detail.ids)}),this.container.addEventListener("event-emit-select-edit",t=>{this.startEdit(t.detail.id)}),this.container.addEventListener("event-emit-select-edit-back",()=>{this.stopEdit()}),this.container.addEventListener("event-emit-select-insert",t=>{let i=t.target.closest("[data-drag-content]").getAttribute("data-drag-content"),r=JSON.parse(i);window.$events.emit("editor::insert",{html:r["text/html"],markdown:r["text/plain"]})}),this.attachLinkButton.addEventListener("click",()=>{this.showSection("links")})}showSection(e){let t={links:this.linksContainer,edit:this.editContainer,list:this.listContainer};for(let[i,r]of Object.entries(t))r.toggleAttribute("hidden",i!==e)}reloadList(){this.stopEdit(),window.$http.get(`/attachments/get/page/${this.pageId}`).then(e=>{this.listPanel.innerHTML=e.data,window.$components.init(this.listPanel)})}updateOrder(e){window.$http.put(`/attachments/sort/page/${this.pageId}`,{order:e}).then(t=>{window.$events.emit("success",t.data.message)})}async startEdit(e){this.showSection("edit"),Dt(this.editContainer);let t=await window.$http.get(`/attachments/edit/${e}`);this.editContainer.innerHTML=t.data,window.$components.init(this.editContainer)}stopEdit(){this.showSection("list")}};var pn=class extends g{setup(){this.container=this.$el,this.setupListeners()}setupListeners(){let e=t=>t.key==="Control"||t.key==="Meta";window.addEventListener("keydown",t=>{e(t)&&this.addOpenQueryToLinks()},{passive:!0}),window.addEventListener("keyup",t=>{e(t)&&this.removeOpenQueryFromLinks()},{passive:!0})}addOpenQueryToLinks(){let e=this.container.querySelectorAll("a.attachment-file");for(let t of e)t.href.split("?")[1]!=="open=true"&&(t.href+="?open=true",t.setAttribute("target","_blank"))}removeOpenQueryFromLinks(){let e=this.container.querySelectorAll("a.attachment-file");for(let t of e)t.href=t.href.split("?")[0],t.removeAttribute("target")}};var Lt,Cr,It,Er,ze=class{constructor(e,t=null,i=null){re(this,Lt);re(this,It);this.containers=[e],this.onEscape=t,this.onEnter=i,e.addEventListener("keydown",T(this,Lt,Cr).bind(this))}shareHandlingToEl(e){this.containers.push(e),e.addEventListener("keydown",T(this,Lt,Cr).bind(this))}focusNext(){let e=T(this,It,Er).call(this),i=e.indexOf(document.activeElement)+1;i>=e.length&&(i=0),e[i].focus()}focusPrevious(){let e=T(this,It,Er).call(this),i=e.indexOf(document.activeElement)-1;i<0&&(i=e.length-1),e[i].focus()}};Lt=new WeakSet,Cr=function(e){e.target.matches("input")&&(e.key==="ArrowRight"||e.key==="ArrowLeft")||(e.key==="ArrowDown"||e.key==="ArrowRight"?(this.focusNext(),e.preventDefault()):e.key==="ArrowUp"||e.key==="ArrowLeft"?(this.focusPrevious(),e.preventDefault()):e.key==="Escape"?this.onEscape?this.onEscape(e):document.activeElement&&document.activeElement.blur():e.key==="Enter"&&this.onEnter&&this.onEnter(e))},It=new WeakSet,Er=function(){let e=[],t='[tabindex]:not([tabindex="-1"]),[href],button:not([tabindex="-1"],[disabled]),input:not([type=hidden])';for(let i of this.containers)e.push(...i.querySelectorAll(t));return e};var _r={},fn=class extends g{setup(){this.parent=this.$el.parentElement,this.container=this.$el,this.type=this.$opts.type,this.url=this.$opts.url,this.input=this.$refs.input,this.list=this.$refs.list,this.lastPopulated=0,this.setupListeners()}setupListeners(){new ze(this.list,()=>{this.input.focus(),setTimeout(()=>this.hideSuggestions(),1)},t=>{t.preventDefault(),this.selectSuggestion(t.target.textContent)}).shareHandlingToEl(this.input),K(this.list,".text-item","click",(t,i)=>{this.selectSuggestion(i.textContent)}),this.input.addEventListener("input",this.requestSuggestions.bind(this)),this.input.addEventListener("focus",this.requestSuggestions.bind(this)),this.input.addEventListener("blur",this.hideSuggestionsIfFocusedLost.bind(this)),this.input.addEventListener("keydown",t=>{t.key==="Tab"&&this.hideSuggestions()})}selectSuggestion(e){this.input.value=e,this.lastPopulated=Date.now(),this.input.focus(),this.input.dispatchEvent(new Event("input",{bubbles:!0})),this.input.dispatchEvent(new Event("change",{bubbles:!0})),this.hideSuggestions()}async requestSuggestions(){if(Date.now()-this.lastPopulated<50)return;let e=this.getNameFilterIfNeeded(),t=this.input.value.toLowerCase(),r=(await this.loadSuggestions(t,e)).filter(o=>t===""||o.toLowerCase().startsWith(t)).slice(0,10);this.displaySuggestions(r)}getNameFilterIfNeeded(){return this.type!=="value"?null:this.parent.querySelector("input").value}async loadSuggestions(e,t=null){e=e.slice(0,4);let i={search:e,name:t},r=`${this.url}:${JSON.stringify(i)}`;if(_r[r])return _r[r];let o=await window.$http.get(this.url,i);return _r[r]=o.data,o.data}displaySuggestions(e){if(e.length===0){this.hideSuggestions();return}this.list.innerHTML=e.map(t=>`
  • ${es(t)}
  • `).join(""),this.list.style.display="block";for(let t of this.list.querySelectorAll(".text-item"))t.addEventListener("blur",this.hideSuggestionsIfFocusedLost.bind(this))}hideSuggestions(){this.list.style.display="none"}hideSuggestionsIfFocusedLost(e){this.container.contains(e.relatedTarget)||this.hideSuggestions()}};var mn=class extends g{setup(){this.form=this.$el,this.form.submit()}};var gn=class extends g{setup(){if(this.button=this.$el,this.targetElem=document.getElementById("header"),this.showing=!1,this.breakPoint=1200,document.body.classList.contains("flexbox")){this.button.style.display="none";return}this.button.addEventListener("click",this.scrollToTop.bind(this)),window.addEventListener("scroll",this.onPageScroll.bind(this))}onPageScroll(){let e=document.documentElement.scrollTop||document.body.scrollTop||0;!this.showing&&e>this.breakPoint?(this.button.style.display="block",this.showing=!0,setTimeout(()=>{this.button.style.opacity=.4},1)):this.showing&&e{this.button.style.display="none"},500))}scrollToTop(){let e=this.targetElem.getBoundingClientRect().top,t=document.documentElement.scrollTop?document.documentElement:document.body,i=300,r=Date.now(),o=this.targetElem.getBoundingClientRect().top;function s(){let a=1-(Date.now()-r)/i,l=Math.abs(a*o);a>0?(t.scrollTop=l,requestAnimationFrame(s.bind(this))):t.scrollTop=e}requestAnimationFrame(s.bind(this))}};function is(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);e&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),t.push.apply(t,i)}return t}function Ae(n){for(var e=1;e=0)&&(t[r]=n[r]);return t}function sh(n,e){if(n==null)return{};var t=oh(n,e),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);for(r=0;r=0)&&Object.prototype.propertyIsEnumerable.call(n,i)&&(t[i]=n[i])}return t}function ah(n){return lh(n)||ch(n)||uh(n)||hh()}function lh(n){if(Array.isArray(n))return Br(n)}function ch(n){if(typeof Symbol<"u"&&n[Symbol.iterator]!=null||n["@@iterator"]!=null)return Array.from(n)}function uh(n,e){if(n){if(typeof n=="string")return Br(n,e);var t=Object.prototype.toString.call(n).slice(8,-1);if(t==="Object"&&n.constructor&&(t=n.constructor.name),t==="Map"||t==="Set")return Array.from(n);if(t==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return Br(n,e)}}function Br(n,e){(e==null||e>n.length)&&(e=n.length);for(var t=0,i=new Array(e);t"&&(e=e.substring(1)),n)try{if(n.matches)return n.matches(e);if(n.msMatchesSelector)return n.msMatchesSelector(e);if(n.webkitMatchesSelector)return n.webkitMatchesSelector(e)}catch{return!1}return!1}}function ph(n){return n.host&&n!==document&&n.host.nodeType?n.host:n.parentNode}function xe(n,e,t,i){if(n){t=t||document;do{if(e!=null&&(e[0]===">"?n.parentNode===t&&Dn(n,e):Dn(n,e))||i&&n===t)return n;if(n===t)break}while(n=ph(n))}return null}var os=/\s+/g;function X(n,e,t){if(n&&e)if(n.classList)n.classList[t?"add":"remove"](e);else{var i=(" "+n.className+" ").replace(os," ").replace(" "+e+" "," ");n.className=(i+(t?" "+e:"")).replace(os," ")}}function A(n,e,t){var i=n&&n.style;if(i){if(t===void 0)return document.defaultView&&document.defaultView.getComputedStyle?t=document.defaultView.getComputedStyle(n,""):n.currentStyle&&(t=n.currentStyle),e===void 0?t:t[e];!(e in i)&&e.indexOf("webkit")===-1&&(e="-webkit-"+e),i[e]=t+(typeof t=="string"?"":"px")}}function Xe(n,e){var t="";if(typeof n=="string")t=n;else do{var i=A(n,"transform");i&&i!=="none"&&(t=i+" "+t)}while(!e&&(n=n.parentNode));var r=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return r&&new r(t)}function bs(n,e,t){if(n){var i=n.getElementsByTagName(e),r=0,o=i.length;if(t)for(;r=o:s=r<=o,!s)return i;if(i===Se())break;i=je(i,!1)}return!1}function pt(n,e,t,i){for(var r=0,o=0,s=n.children;o2&&arguments[2]!==void 0?arguments[2]:{},r=i.evt,o=sh(i,yh);Vt.pluginEvent.bind($)(e,t,Ae({dragEl:C,parentEl:G,ghostEl:F,rootEl:U,nextEl:Ze,lastDownEl:En,cloneEl:W,cloneHidden:Ue,dragStarted:Bt,putSortable:Q,activeSortable:$.active,originalEvent:r,oldIndex:dt,oldDraggableIndex:zt,newIndex:fe,newDraggableIndex:He,hideGhostForTarget:Cs,unhideGhostForTarget:Es,cloneNowHidden:function(){Ue=!0},cloneNowShown:function(){Ue=!1},dispatchSortableEvent:function(a){oe({sortable:t,name:a,originalEvent:r})}},o))};function oe(n){qt(Ae({putSortable:Q,cloneEl:W,targetEl:C,rootEl:U,oldIndex:dt,oldDraggableIndex:zt,newIndex:fe,newDraggableIndex:He},n))}var C,G,F,U,Ze,En,W,Ue,dt,fe,zt,He,bn,Q,ht=!1,Tn=!1,Ln=[],Ge,we,Tr,Lr,cs,us,Bt,ct,Ht,Ut=!1,vn=!1,_n,te,Ir=[],Pr=!1,In=[],Mn=typeof document<"u",wn=fs,hs=jt||Me?"cssFloat":"float",xh=Mn&&!ms&&!fs&&"draggable"in document.createElement("div"),ys=function(){if(Mn){if(Me)return!1;var n=document.createElement("x");return n.style.cssText="pointer-events:auto",n.style.pointerEvents==="auto"}}(),xs=function(e,t){var i=A(e),r=parseInt(i.width)-parseInt(i.paddingLeft)-parseInt(i.paddingRight)-parseInt(i.borderLeftWidth)-parseInt(i.borderRightWidth),o=pt(e,0,t),s=pt(e,1,t),a=o&&A(o),l=s&&A(s),c=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+j(o).width,u=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+j(s).width;if(i.display==="flex")return i.flexDirection==="column"||i.flexDirection==="column-reverse"?"vertical":"horizontal";if(i.display==="grid")return i.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(o&&a.float&&a.float!=="none"){var h=a.float==="left"?"left":"right";return s&&(l.clear==="both"||l.clear===h)?"vertical":"horizontal"}return o&&(a.display==="block"||a.display==="flex"||a.display==="table"||a.display==="grid"||c>=r&&i[hs]==="none"||s&&i[hs]==="none"&&c+u>r)?"vertical":"horizontal"},kh=function(e,t,i){var r=i?e.left:e.top,o=i?e.right:e.bottom,s=i?e.width:e.height,a=i?t.left:t.top,l=i?t.right:t.bottom,c=i?t.width:t.height;return r===a||o===l||r+s/2===a+c/2},Ch=function(e,t){var i;return Ln.some(function(r){var o=r[ne].options.emptyInsertThreshold;if(!(!o||zr(r))){var s=j(r),a=e>=s.left-o&&e<=s.right+o,l=t>=s.top-o&&t<=s.bottom+o;if(a&&l)return i=r}}),i},ks=function(e){function t(o,s){return function(a,l,c,u){var h=a.options.group.name&&l.options.group.name&&a.options.group.name===l.options.group.name;if(o==null&&(s||h))return!0;if(o==null||o===!1)return!1;if(s&&o==="clone")return o;if(typeof o=="function")return t(o(a,l,c,u),s)(a,l,c,u);var d=(s?a:l).options.group.name;return o===!0||typeof o=="string"&&o===d||o.join&&o.indexOf(d)>-1}}var i={},r=e.group;(!r||Cn(r)!="object")&&(r={name:r}),i.name=r.name,i.checkPull=t(r.pull,!0),i.checkPut=t(r.put),i.revertClone=r.revertClone,e.group=i},Cs=function(){!ys&&F&&A(F,"display","none")},Es=function(){!ys&&F&&A(F,"display","")};Mn&&!ms&&document.addEventListener("click",function(n){if(Tn)return n.preventDefault(),n.stopPropagation&&n.stopPropagation(),n.stopImmediatePropagation&&n.stopImmediatePropagation(),Tn=!1,!1},!0);var Ke=function(e){if(C){e=e.touches?e.touches[0]:e;var t=Ch(e.clientX,e.clientY);if(t){var i={};for(var r in e)e.hasOwnProperty(r)&&(i[r]=e[r]);i.target=i.rootEl=t,i.preventDefault=void 0,i.stopPropagation=void 0,t[ne]._onDragOver(i)}}},Eh=function(e){C&&C.parentNode[ne]._isOutsideThisEl(e.target)};function $(n,e){if(!(n&&n.nodeType&&n.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(n));this.el=n,this.options=e=ke({},e),n[ne]=this;var t={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(n.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return xs(n,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(s,a){s.setData("Text",a.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:$.supportPointer!==!1&&"PointerEvent"in window&&!Rt,emptyInsertThreshold:5};Vt.initializePlugins(this,n,t);for(var i in t)!(i in e)&&(e[i]=t[i]);ks(e);for(var r in this)r.charAt(0)==="_"&&typeof this[r]=="function"&&(this[r]=this[r].bind(this));this.nativeDraggable=e.forceFallback?!1:xh,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?P(n,"pointerdown",this._onTapStart):(P(n,"mousedown",this._onTapStart),P(n,"touchstart",this._onTapStart)),this.nativeDraggable&&(P(n,"dragover",this),P(n,"dragenter",this)),Ln.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),ke(this,bh())}$.prototype={constructor:$,_isOutsideThisEl:function(e){!this.el.contains(e)&&e!==this.el&&(ct=null)},_getDirection:function(e,t){return typeof this.options.direction=="function"?this.options.direction.call(this,e,t,C):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,i=this.el,r=this.options,o=r.preventOnFilter,s=e.type,a=e.touches&&e.touches[0]||e.pointerType&&e.pointerType==="touch"&&e,l=(a||e).target,c=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,u=r.filter;if($h(i),!C&&!(/mousedown|pointerdown/.test(s)&&e.button!==0||r.disabled)&&!c.isContentEditable&&!(!this.nativeDraggable&&Rt&&l&&l.tagName.toUpperCase()==="SELECT")&&(l=xe(l,r.draggable,i,!1),!(l&&l.animated)&&En!==l)){if(dt=Y(l),zt=Y(l,r.draggable),typeof u=="function"){if(u.call(this,e,l,this)){oe({sortable:t,rootEl:c,name:"filter",targetEl:l,toEl:i,fromEl:i}),ae("filter",t,{evt:e}),o&&e.cancelable&&e.preventDefault();return}}else if(u&&(u=u.split(",").some(function(h){if(h=xe(c,h.trim(),i,!1),h)return oe({sortable:t,rootEl:h,name:"filter",targetEl:l,fromEl:i,toEl:i}),ae("filter",t,{evt:e}),!0}),u)){o&&e.cancelable&&e.preventDefault();return}r.handle&&!xe(c,r.handle,i,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(e,t,i){var r=this,o=r.el,s=r.options,a=o.ownerDocument,l;if(i&&!C&&i.parentNode===o){var c=j(i);if(U=o,C=i,G=C.parentNode,Ze=C.nextSibling,En=i,bn=s.group,$.dragged=C,Ge={target:C,clientX:(t||e).clientX,clientY:(t||e).clientY},cs=Ge.clientX-c.left,us=Ge.clientY-c.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,C.style["will-change"]="all",l=function(){if(ae("delayEnded",r,{evt:e}),$.eventCanceled){r._onDrop();return}r._disableDelayedDragEvents(),!rs&&r.nativeDraggable&&(C.draggable=!0),r._triggerDragStart(e,t),oe({sortable:r,name:"choose",originalEvent:e}),X(C,s.chosenClass,!0)},s.ignore.split(",").forEach(function(u){bs(C,u.trim(),$r)}),P(a,"dragover",Ke),P(a,"mousemove",Ke),P(a,"touchmove",Ke),P(a,"mouseup",r._onDrop),P(a,"touchend",r._onDrop),P(a,"touchcancel",r._onDrop),rs&&this.nativeDraggable&&(this.options.touchStartThreshold=4,C.draggable=!0),ae("delayStart",this,{evt:e}),s.delay&&(!s.delayOnTouchOnly||t)&&(!this.nativeDraggable||!(jt||Me))){if($.eventCanceled){this._onDrop();return}P(a,"mouseup",r._disableDelayedDrag),P(a,"touchend",r._disableDelayedDrag),P(a,"touchcancel",r._disableDelayedDrag),P(a,"mousemove",r._delayedDragTouchMoveHandler),P(a,"touchmove",r._delayedDragTouchMoveHandler),s.supportPointer&&P(a,"pointermove",r._delayedDragTouchMoveHandler),r._dragStartTimer=setTimeout(l,s.delay)}else l()}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){C&&$r(C),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;B(e,"mouseup",this._disableDelayedDrag),B(e,"touchend",this._disableDelayedDrag),B(e,"touchcancel",this._disableDelayedDrag),B(e,"mousemove",this._delayedDragTouchMoveHandler),B(e,"touchmove",this._delayedDragTouchMoveHandler),B(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||e.pointerType=="touch"&&e,!this.nativeDraggable||t?this.options.supportPointer?P(document,"pointermove",this._onTouchMove):t?P(document,"touchmove",this._onTouchMove):P(document,"mousemove",this._onTouchMove):(P(C,"dragend",this),P(U,"dragstart",this._onDragStart));try{document.selection?Sn(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(e,t){if(ht=!1,U&&C){ae("dragStarted",this,{evt:t}),this.nativeDraggable&&P(document,"dragover",Eh);var i=this.options;!e&&X(C,i.dragClass,!1),X(C,i.ghostClass,!0),$.active=this,e&&this._appendGhost(),oe({sortable:this,name:"start",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(we){this._lastX=we.clientX,this._lastY=we.clientY,Cs();for(var e=document.elementFromPoint(we.clientX,we.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(we.clientX,we.clientY),e!==t);)t=e;if(C.parentNode[ne]._isOutsideThisEl(e),t)do{if(t[ne]){var i=void 0;if(i=t[ne]._onDragOver({clientX:we.clientX,clientY:we.clientY,target:e,rootEl:t}),i&&!this.options.dragoverBubble)break}e=t}while(t=t.parentNode);Es()}},_onTouchMove:function(e){if(Ge){var t=this.options,i=t.fallbackTolerance,r=t.fallbackOffset,o=e.touches?e.touches[0]:e,s=F&&Xe(F,!0),a=F&&s&&s.a,l=F&&s&&s.d,c=wn&&te&&as(te),u=(o.clientX-Ge.clientX+r.x)/(a||1)+(c?c[0]-Ir[0]:0)/(a||1),h=(o.clientY-Ge.clientY+r.y)/(l||1)+(c?c[1]-Ir[1]:0)/(l||1);if(!$.active&&!ht){if(i&&Math.max(Math.abs(o.clientX-this._lastX),Math.abs(o.clientY-this._lastY))=0&&(oe({rootEl:G,name:"add",toEl:G,fromEl:U,originalEvent:e}),oe({sortable:this,name:"remove",toEl:G,originalEvent:e}),oe({rootEl:G,name:"sort",toEl:G,fromEl:U,originalEvent:e}),oe({sortable:this,name:"sort",toEl:G,originalEvent:e})),Q&&Q.save()):fe!==dt&&fe>=0&&(oe({sortable:this,name:"update",toEl:G,originalEvent:e}),oe({sortable:this,name:"sort",toEl:G,originalEvent:e})),$.active&&((fe==null||fe===-1)&&(fe=dt,He=zt),oe({sortable:this,name:"end",toEl:G,originalEvent:e}),this.save()))),this._nulling()},_nulling:function(){ae("nulling",this),U=C=G=F=Ze=W=En=Ue=Ge=we=Bt=fe=He=dt=zt=ct=Ht=Q=bn=$.dragged=$.ghost=$.clone=$.active=null,In.forEach(function(e){e.checked=!0}),In.length=Tr=Lr=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragenter":case"dragover":C&&(this._onDragOver(e),_h(e));break;case"selectstart":e.preventDefault();break}},toArray:function(){for(var e=[],t,i=this.el.children,r=0,o=i.length,s=this.options;ri.right+r||n.clientX<=i.right&&n.clientY>i.bottom&&n.clientX>=i.left:n.clientX>i.right&&n.clientY>i.top||n.clientX<=i.right&&n.clientY>i.bottom+r}function Th(n,e,t,i,r,o,s,a){var l=i?n.clientY:n.clientX,c=i?t.height:t.width,u=i?t.top:t.left,h=i?t.bottom:t.right,d=!1;if(!s){if(a&&_nu+c*o/2:lh-_n)return-Ht}else if(l>u+c*(1-r)/2&&lh-c*o/2)?l>u+c/2?1:-1:0}function Lh(n){return Y(C)1&&(M.forEach(function(a){o.addAnimationState({target:a,rect:le?j(a):s}),Ar(a),a.fromRect=s,i.removeAnimationState(a)}),le=!1,Fh(!this.options.removeCloneOnHide,r))},dragOverCompleted:function(t){var i=t.sortable,r=t.isOwner,o=t.insertion,s=t.activeSortable,a=t.parentEl,l=t.putSortable,c=this.options;if(o){if(r&&s._hideClone(),Mt=!1,c.animation&&M.length>1&&(le||!r&&!s.options.sort&&!l)){var u=j(z,!1,!0,!0);M.forEach(function(d){d!==z&&(ls(d,u),a.appendChild(d))}),le=!0}if(!r)if(le||kn(),M.length>1){var h=xn;s._showClone(i),s.options.animation&&!xn&&h&&pe.forEach(function(d){s.addAnimationState({target:d,rect:Ft}),d.fromRect=Ft,d.thisAnimationDuration=null})}else s._showClone(i)}},dragOverAnimationCapture:function(t){var i=t.dragRect,r=t.isOwner,o=t.activeSortable;if(M.forEach(function(a){a.thisAnimationDuration=null}),o.options.animation&&!r&&o.multiDrag.isMultiDrag){Ft=ke({},i);var s=Xe(z,!0);Ft.top-=s.f,Ft.left-=s.e}},dragOverAnimationComplete:function(){le&&(le=!1,kn())},drop:function(t){var i=t.originalEvent,r=t.rootEl,o=t.parentEl,s=t.sortable,a=t.dispatchSortableEvent,l=t.oldIndex,c=t.putSortable,u=c||this.sortable;if(i){var h=this.options,d=o.children;if(!ut)if(h.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),X(z,h.selectedClass,!~M.indexOf(z)),~M.indexOf(z))M.splice(M.indexOf(z),1),$t=null,qt({sortable:s,rootEl:r,name:"deselect",targetEl:z,originalEvent:i});else{if(M.push(z),qt({sortable:s,rootEl:r,name:"select",targetEl:z,originalEvent:i}),i.shiftKey&&$t&&s.el.contains($t)){var p=Y($t),f=Y(z);if(~p&&~f&&p!==f){var m,y;for(f>p?(y=p,m=f):(y=f,m=p+1);y1){var v=j(z),b=Y(z,":not(."+this.options.selectedClass+")");if(!Mt&&h.animation&&(z.thisAnimationDuration=null),u.captureAnimationState(),!Mt&&(h.animation&&(z.fromRect=v,M.forEach(function(w){if(w.thisAnimationDuration=null,w!==z){var E=le?j(w):v;w.fromRect=E,u.addAnimationState({target:w,rect:E})}})),kn(),M.forEach(function(w){d[b]?o.insertBefore(w,d[b]):o.appendChild(w),b++}),l===Y(z))){var k=!1;M.forEach(function(w){if(w.sortableIndex!==Y(w)){k=!0;return}}),k&&a("update")}M.forEach(function(w){Ar(w)}),u.animateAll()}ye=u}(r===o||c&&c.lastPutMode!=="clone")&&pe.forEach(function(w){w.parentNode&&w.parentNode.removeChild(w)})}},nullingGlobal:function(){this.isMultiDrag=ut=!1,pe.length=0},destroyGlobal:function(){this._deselectMultiDrag(),B(document,"pointerup",this._deselectMultiDrag),B(document,"mouseup",this._deselectMultiDrag),B(document,"touchend",this._deselectMultiDrag),B(document,"keydown",this._checkKeyDown),B(document,"keyup",this._checkKeyUp)},_deselectMultiDrag:function(t){if(!(typeof ut<"u"&&ut)&&ye===this.sortable&&!(t&&xe(t.target,this.options.draggable,this.sortable.el,!1))&&!(t&&t.button!==0))for(;M.length;){var i=M[0];X(i,this.options.selectedClass,!1),M.shift(),qt({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:i,originalEvent:t})}},_checkKeyDown:function(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},ke(n,{pluginName:"multiDrag",utils:{select:function(t){var i=t.parentNode[ne];!i||!i.options.multiDrag||~M.indexOf(t)||(ye&&ye!==i&&(ye.multiDrag._deselectMultiDrag(),ye=i),X(t,i.options.selectedClass,!0),M.push(t))},deselect:function(t){var i=t.parentNode[ne],r=M.indexOf(t);!i||!i.options.multiDrag||!~r||(X(t,i.options.selectedClass,!1),M.splice(r,1))}},eventProperties:function(){var t=this,i=[],r=[];return M.forEach(function(o){i.push({multiDragElement:o,index:o.sortableIndex});var s;le&&o!==z?s=-1:le?s=Y(o,":not(."+t.options.selectedClass+")"):s=Y(o),r.push({multiDragElement:o,index:s})}),{items:ah(M),clones:[].concat(pe),oldIndicies:i,newIndicies:r}},optionListeners:{multiDragKey:function(t){return t=t.toLowerCase(),t==="ctrl"?t="Control":t.length>1&&(t=t.charAt(0).toUpperCase()+t.substr(1)),t}}})}function Fh(n,e){M.forEach(function(t,i){var r=e.children[t.sortableIndex+(n?Number(i):0)];r?e.insertBefore(t,r):e.appendChild(t)})}function ps(n,e){pe.forEach(function(t,i){var r=e.children[t.sortableIndex+(n?Number(i):0)];r?e.insertBefore(t,r):e.appendChild(t)})}function kn(){M.forEach(function(n){n!==z&&n.parentNode&&n.parentNode.removeChild(n)})}$.mount(new Mh);$.mount(jr,Ur);var Ye=$;var As={name(n,e){let t=n.getAttribute("data-name").trim().toLowerCase(),i=e.getAttribute("data-name").trim().toLowerCase();return t.localeCompare(i)},created(n,e){let t=Number(n.getAttribute("data-created"));return Number(e.getAttribute("data-created"))-t},updated(n,e){let t=Number(n.getAttribute("data-updated"));return Number(e.getAttribute("data-updated"))-t},chaptersFirst(n,e){let t=n.getAttribute("data-type"),i=e.getAttribute("data-type");return t===i?0:t==="chapter"?-1:1},chaptersLast(n,e){let t=n.getAttribute("data-type"),i=e.getAttribute("data-type");return t===i?0:t==="chapter"?1:-1}},Ds={up:{active(n,e){return!(n.previousElementSibling===null&&!e)},run(n,e){(n.previousElementSibling||e).insertAdjacentElement("beforebegin",n)}},down:{active(n,e){return!(n.nextElementSibling===null&&!e)},run(n,e){(n.nextElementSibling||e).insertAdjacentElement("afterend",n)}},next_book:{active(n,e,t){return t.nextElementSibling!==null},run(n,e,t){t.nextElementSibling.querySelector("ul").prepend(n)}},prev_book:{active(n,e,t){return t.previousElementSibling!==null},run(n,e,t){t.previousElementSibling.querySelector("ul").appendChild(n)}},next_chapter:{active(n,e){return n.dataset.type==="page"&&this.getNextChapter(n,e)},run(n,e){this.getNextChapter(n,e).querySelector("ul").prepend(n)},getNextChapter(n,e){let t=e||n,i=Array.from(t.parentElement.children),r=i.indexOf(t);return i.slice(r+1).find(o=>o.dataset.type==="chapter")}},prev_chapter:{active(n,e){return n.dataset.type==="page"&&this.getPrevChapter(n,e)},run(n,e){this.getPrevChapter(n,e).querySelector("ul").append(n)},getPrevChapter(n,e){let t=e||n,i=Array.from(t.parentElement.children),r=i.indexOf(t);return i.slice(0,r).reverse().find(o=>o.dataset.type==="chapter")}},book_end:{active(n,e){return e||e===null&&n.nextElementSibling},run(n,e,t){t.querySelector("ul").append(n)}},book_start:{active(n,e){return e||e===null&&n.previousElementSibling},run(n,e,t){t.querySelector("ul").prepend(n)}},before_chapter:{active(n,e){return e},run(n,e){e.insertAdjacentElement("beforebegin",n)}},after_chapter:{active(n,e){return e},run(n,e){e.insertAdjacentElement("afterend",n)}}},Fn=class extends g{setup(){this.container=this.$el,this.sortContainer=this.$refs.sortContainer,this.input=this.$refs.input,Ye.mount(new Ss);let e=this.container.querySelector(".sort-box");this.setupBookSortable(e),this.setupSortPresets(),this.setupMoveActions(),window.$events.listen("entity-select-change",this.bookSelect.bind(this))}setupMoveActions(){this.container.addEventListener("click",e=>{if(e.target.matches("[data-move]")){let t=e.target.getAttribute("data-move"),i=e.target.closest("[data-id]");this.runSortAction(i,t)}}),this.updateMoveActionStateForAll()}setupSortPresets(){let e="",t=!1,i=["name","created","updated"];this.sortContainer.addEventListener("click",r=>{let o=r.target.closest(".sort-box-options [data-sort]");if(!o)return;r.preventDefault();let s=o.closest(".sort-box").querySelectorAll("ul"),a=o.getAttribute("data-sort");t=e===a?!t:!1;let l=As[a];t&&i.includes(a)&&(l=function(u,h){return 0-As[a](u,h)});for(let c of s)Array.from(c.children).filter(h=>h.matches("li")).sort(l).forEach(h=>{c.appendChild(h)});e=a,this.updateMapInput()})}bookSelect(e){if(this.container.querySelector(`[data-type="book"][data-id="${e.id}"]`)!==null)return;let i=`${e.link}/sort-item`;window.$http.get(i).then(r=>{let o=_e(r.data);this.sortContainer.append(o),this.setupBookSortable(o),this.updateMoveActionStateForAll(),o.querySelector("summary").focus()})}setupBookSortable(e){let t=Array.from(e.querySelectorAll(".sort-list, .sortable-page-sublist")),i={name:"book",pull:["book","chapter"],put:["book","chapter"]},r={name:"chapter",pull:["book","chapter"],put(o,s,a){return a.getAttribute("data-type")==="page"}};for(let o of t)Ye.create(o,{group:o.classList.contains("sort-list")?i:r,animation:150,fallbackOnBody:!0,swapThreshold:.65,onSort:()=>{this.ensureNoNestedChapters(),this.updateMapInput(),this.updateMoveActionStateForAll()},dragClass:"bg-white",ghostClass:"primary-background-light",multiDrag:!0,multiDragKey:"Control",selectedClass:"sortable-selected"})}ensureNoNestedChapters(){let e=this.container.querySelectorAll('[data-type="chapter"] [data-type="chapter"]');for(let t of e)t.parentElement.closest('[data-type="chapter"]').insertAdjacentElement("afterend",t)}updateMapInput(){let e=this.buildEntityMap();this.input.value=JSON.stringify(e)}buildEntityMap(){let e=[],t=this.container.querySelectorAll(".sort-list");for(let i of t){let r=i.closest('[data-type="book"]').getAttribute("data-id"),o=Array.from(i.children).filter(s=>s.matches('[data-type="page"], [data-type="chapter"]'));for(let s=0;s{for(let s of r)n.style[s]=null;n.style.transition=null,n.removeEventListener("transitionend",o),qn.delete(n),i&&i()};setTimeout(()=>{n.style.transition=`all ease-in-out ${t}ms`;for(let s of r)n.style[s]=e[s][1];n.addEventListener("transitionend",o),qn.set(n,o)},15)}function Gt(n){qn.has(n)&&qn.get(n)()}function Ts(n,e=400,t=null){Gt(n),n.style.display="block",Wt(n,{opacity:["0","1"]},e,()=>{t&&t()})}function Ls(n,e=400,t=null){Gt(n),Wt(n,{opacity:["1","0"]},e,()=>{n.style.display="none",t&&t()})}function ft(n,e=400){Gt(n);let t=n.getBoundingClientRect().height,i=getComputedStyle(n),r=i.getPropertyValue("padding-top"),o=i.getPropertyValue("padding-bottom"),s={maxHeight:[`${t}px`,"0px"],overflow:["hidden","hidden"],paddingTop:[r,"0px"],paddingBottom:[o,"0px"]};Wt(n,s,e,()=>{n.style.display="none"})}function mt(n,e=400){Gt(n),n.style.display="block";let t=n.getBoundingClientRect().height,i=getComputedStyle(n),r=i.getPropertyValue("padding-top"),o=i.getPropertyValue("padding-bottom"),s={maxHeight:["0px",`${t}px`],overflow:["hidden","hidden"],paddingTop:["0px",r],paddingBottom:["0px",o]};Wt(n,s,e)}function Is(n,e=400){let t=n.getBoundingClientRect().height,i=getComputedStyle(n),r=i.getPropertyValue("padding-top"),o=i.getPropertyValue("padding-bottom");return()=>{Gt(n);let s=n.getBoundingClientRect().height,a=getComputedStyle(n),l=a.getPropertyValue("padding-top"),c=a.getPropertyValue("padding-bottom"),u={height:[`${t}px`,`${s}px`],overflow:["hidden","hidden"],paddingTop:[r,l],paddingBottom:[o,c]};Wt(n,u,e)}}var Bn=class extends g{setup(){this.list=this.$refs.list,this.toggle=this.$refs.toggle,this.isOpen=this.toggle.classList.contains("open"),this.toggle.addEventListener("click",this.click.bind(this))}open(){this.toggle.classList.add("open"),this.toggle.setAttribute("aria-expanded","true"),mt(this.list,180),this.isOpen=!0}close(){this.toggle.classList.remove("open"),this.toggle.setAttribute("aria-expanded","false"),ft(this.list,180),this.isOpen=!1}click(e){e.preventDefault(),this.isOpen?this.close():this.open()}};var Pn=class extends g{constructor(){super(...arguments);se(this,"editor",null);se(this,"saveCallback",null);se(this,"cancelCallback",null);se(this,"history",{});se(this,"historyKey","code_history")}setup(){this.container=this.$refs.container,this.popup=this.$el,this.editorInput=this.$refs.editor,this.languageButtons=this.$manyRefs.languageButton,this.languageOptionsContainer=this.$refs.languageOptionsContainer,this.saveButton=this.$refs.saveButton,this.languageInput=this.$refs.languageInput,this.historyDropDown=this.$refs.historyDropDown,this.historyList=this.$refs.historyList,this.favourites=new Set(this.$opts.favourites.split(",")),this.setupListeners(),this.setupFavourites()}setupListeners(){this.container.addEventListener("keydown",t=>{t.ctrlKey&&t.key==="Enter"&&this.save()}),O(this.languageButtons,t=>{let i=t.target.dataset.lang;this.languageInput.value=i,this.languageInputChange(i)}),st(this.languageInput,()=>this.save()),this.languageInput.addEventListener("input",()=>this.languageInputChange(this.languageInput.value)),O(this.saveButton,()=>this.save()),K(this.historyList,"button","click",(t,i)=>{t.preventDefault();let r=i.dataset.time;this.editor&&this.editor.setContent(this.history[r])})}setupFavourites(){for(let t of this.languageButtons)this.setupFavouritesForButton(t);this.sortLanguageList()}setupFavouritesForButton(t){let i=t.dataset.lang,r=this.favourites.has(i);t.setAttribute("data-favourite",r?"true":"false"),K(t.parentElement,".lang-option-favorite-toggle","click",()=>{r=!r,r?this.favourites.add(i):this.favourites.delete(i),t.setAttribute("data-favourite",r?"true":"false"),window.$http.patch("/preferences/update-code-language-favourite",{language:i,active:r}),this.sortLanguageList(),r&&t.scrollIntoView({block:"center",behavior:"smooth"})})}sortLanguageList(){let t=this.languageButtons.sort((i,r)=>{let o=i.dataset.favourite==="true",s=r.dataset.favourite==="true";return o&&!s?-1:s&&!o||i.dataset.lang>r.dataset.lang?1:-1}).map(i=>i.parentElement);for(let i of t)this.languageOptionsContainer.append(i)}save(){this.saveCallback&&this.saveCallback(this.editor.getContent(),this.languageInput.value),this.hide()}async open(t,i,r,o){this.languageInput.value=i,this.saveCallback=r,this.cancelCallback=o,await this.show(),this.languageInputChange(i),this.editor.setContent(t)}async show(){let t=await window.importVersioned("code");this.editor||(this.editor=t.popupEditor(this.editorInput,this.languageInput.value)),this.loadHistory(),this.getPopup().show(()=>{this.editor.focus()},()=>{this.addHistory(),this.cancelCallback&&this.cancelCallback()})}hide(){this.getPopup().hide(),this.addHistory()}getPopup(){return window.$components.firstOnElement(this.popup,"popup")}async updateEditorMode(t){this.editor.setMode(t,this.editor.getContent())}languageInputChange(t){this.updateEditorMode(t);let i=t.toLowerCase();for(let r of this.languageButtons){let o=r.dataset.lang.toLowerCase().trim(),s=i===o;r.classList.toggle("active",s),s&&r.scrollIntoView({block:"center",behavior:"smooth"})}}loadHistory(){this.history=JSON.parse(window.sessionStorage.getItem(this.historyKey)||"{}");let t=Object.keys(this.history).reverse();this.historyDropDown.classList.toggle("hidden",t.length===0),this.historyList.innerHTML=t.map(i=>{let r=new Date(parseInt(i,10)).toLocaleTimeString();return`
  • `}).join("")}addHistory(){if(!this.editor)return;let t=this.editor.getContent();if(!t)return;let i=Object.keys(this.history).pop();if(this.history[i]===t)return;this.history[String(Date.now())]=t;let r=JSON.stringify(this.history);window.sessionStorage.setItem(this.historyKey,r)}};var On=class extends g{setup(){let e=this.$el;e.querySelectorAll("pre").length>0&&window.importVersioned("code").then(i=>{i.highlightWithin(e)})}};var Rn=class extends g{async setup(){let{mode:e}=this.$opts;(await window.importVersioned("code")).inlineEditor(this.$el,e)}};var Nn=class extends g{setup(){this.container=this.$el,this.trigger=this.$refs.trigger,this.content=this.$refs.content,this.trigger&&(this.trigger.addEventListener("click",this.toggle.bind(this)),this.openIfContainsError())}open(){this.container.classList.add("open"),this.trigger.setAttribute("aria-expanded","true"),mt(this.content,300)}close(){this.container.classList.remove("open"),this.trigger.setAttribute("aria-expanded","false"),ft(this.content,300)}toggle(){this.container.classList.contains("open")?this.close():this.open()}openIfContainsError(){this.content.querySelector(".text-neg.text-small")&&this.open()}};var zn=class extends g{setup(){this.container=this.$el,this.confirmButton=this.$refs.confirm,this.res=null,O(this.confirmButton,()=>{this.sendResult(!0),this.getPopup().hide()})}show(){return this.getPopup().show(null,()=>{this.sendResult(!1)}),new Promise(e=>{this.res=e})}getPopup(){return window.$components.firstOnElement(this.container,"popup")}sendResult(e){this.res&&(this.res(e),this.res=null)}};var Hn=class extends g{setup(){this.container=this.$el,this.checkbox=this.container.querySelector("input[type=checkbox]"),this.display=this.container.querySelector('[role="checkbox"]'),this.checkbox.addEventListener("change",this.stateChange.bind(this)),this.container.addEventListener("keydown",this.onKeyDown.bind(this))}onKeyDown(e){(e.key===" "||e.key==="Enter")&&(e.preventDefault(),this.toggle())}toggle(){this.checkbox.checked=!this.checkbox.checked,this.checkbox.dispatchEvent(new Event("change")),this.stateChange()}stateChange(){let e=this.checkbox.checked?"true":"false";this.display.setAttribute("aria-checked",e)}};var Un=class extends g{setup(){this.container=this.$el,this.dealtWith=!1,this.container.addEventListener("toggle",this.onToggle.bind(this))}onToggle(){this.dealtWith||(this.container.querySelector("pre")&&window.importVersioned("code").then(e=>{e.highlightWithin(this.container)}),this.dealtWith=!0)}};var jn=class extends g{setup(){this.container=this.$el,this.menu=this.$refs.menu,this.toggle=this.$refs.toggle,this.moveMenu=this.$opts.moveMenu,this.bubbleEscapes=this.$opts.bubbleEscapes==="true",this.direction=document.dir==="rtl"?"right":"left",this.body=document.body,this.showing=!1,this.hide=this.hide.bind(this),this.setupListeners()}show(e=null){this.hideAll(),this.menu.style.display="block",this.menu.classList.add("anim","menuIn"),this.toggle.setAttribute("aria-expanded","true");let t=this.menu.getBoundingClientRect(),i=0,r=this.toggle.getBoundingClientRect().height,o=t.bottom>window.innerHeight;this.moveMenu&&(this.body.appendChild(this.menu),this.menu.style.position="fixed",this.menu.style.width=`${t.width}px`,this.menu.style.left=`${t.left}px`,o?i=window.innerHeight-t.top-r/2:i=t.top),o?(this.menu.style.top="initial",this.menu.style.bottom=`${i}px`):(this.menu.style.top=`${i}px`,this.menu.style.bottom="initial"),this.menu.addEventListener("mouseleave",this.hide),window.addEventListener("click",l=>{this.menu.contains(l.target)||this.hide()});let s=this.menu.querySelector("input");s!==null&&s.focus(),this.showing=!0;let a=new Event("show");this.container.dispatchEvent(a),e&&e.stopPropagation()}hideAll(){for(let e of window.$components.get("dropdown"))e.hide()}hide(){this.menu.style.display="none",this.menu.classList.remove("anim","menuIn"),this.toggle.setAttribute("aria-expanded","false"),this.menu.style.top="",this.menu.style.bottom="",this.moveMenu&&(this.menu.style.position="",this.menu.style[this.direction]="",this.menu.style.width="",this.menu.style.left="",this.container.appendChild(this.menu)),this.showing=!1}setupListeners(){let e=new ze(this.container,t=>{this.hide(),this.toggle.focus(),this.bubbleEscapes||t.stopPropagation()},t=>{t.target.nodeName==="INPUT"&&(t.preventDefault(),t.stopPropagation()),this.hide()});this.moveMenu&&e.shareHandlingToEl(this.menu),this.container.addEventListener("click",t=>{Array.from(this.menu.querySelectorAll("a")).includes(t.target)&&this.hide()}),O(this.toggle,t=>{t.stopPropagation(),t.preventDefault(),this.show(t),t instanceof KeyboardEvent&&e.focusNext()})}};var Vn=class extends g{setup(){this.elem=this.$el,this.searchInput=this.$refs.searchInput,this.loadingElem=this.$refs.loading,this.listContainerElem=this.$refs.listContainer,this.localSearchSelector=this.$opts.localSearchSelector,this.url=this.$opts.url,this.elem.addEventListener("show",this.onShow.bind(this)),this.searchInput.addEventListener("input",this.onSearch.bind(this)),this.runAjaxSearch=Ne(this.runAjaxSearch,300,!1)}onShow(){this.loadList()}onSearch(){let e=this.searchInput.value.toLowerCase().trim();this.localSearchSelector?this.runLocalSearch(e):(this.toggleLoading(!0),this.listContainerElem.innerHTML="",this.runAjaxSearch(e))}runAjaxSearch(e){this.loadList(e)}runLocalSearch(e){let t=this.listContainerElem.querySelectorAll(this.localSearchSelector);for(let i of t){let r=!e||i.textContent.toLowerCase().includes(e);i.style.display=r?"flex":"none",i.classList.toggle("hidden",!r)}}async loadList(e=""){this.listContainerElem.innerHTML="",this.toggleLoading(!0);try{let t=await window.$http.get(this.getAjaxUrl(e)),i=Is(this.listContainerElem,80);this.listContainerElem.innerHTML=t.data,i()}catch(t){console.error(t)}this.toggleLoading(!1),this.localSearchSelector&&this.onSearch()}getAjaxUrl(e=null){if(!e)return this.url;let t=this.url.includes("?")?"&":"?";return`${this.url}${t}search=${encodeURIComponent(e)}`}toggleLoading(e=!1){this.loadingElem.style.display=e?"block":"none"}};var Fe=class{constructor(e){this.data=e}hasItems(){return!!this.data&&!!this.data.types&&this.data.types.length>0}containsTabularData(){let e=this.data.getData("text/rtf");return e&&e.includes("\\trowd")}getImages(){let{types:e}=this.data,t=[];for(let r of e)if(r.includes("image")){let o=this.data.getData(r);t.push(o.getAsFile())}let i=this.getFiles().filter(r=>r.type.includes("image"));return t.push(...i),t}getFiles(){let{files:e}=this.data;return[...e]}};async function Vr(n){if(window.isSecureContext&&navigator.clipboard){await navigator.clipboard.writeText(n);return}let e=document.createElement("textarea");e.style="position: absolute; left: -1000px; top: -1000px;",e.value=n,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e)}var Wn=class extends g{setup(){this.container=this.$el,this.statusArea=this.$refs.statusArea,this.dropTarget=this.$refs.dropTarget,this.selectButtons=this.$manyRefs.selectButton||[],this.isActive=!0,this.url=this.$opts.url,this.method=(this.$opts.method||"post").toUpperCase(),this.successMessage=this.$opts.successMessage,this.errorMessage=this.$opts.errorMessage,this.uploadLimitMb=Number(this.$opts.uploadLimit),this.uploadLimitMessage=this.$opts.uploadLimitMessage,this.zoneText=this.$opts.zoneText,this.fileAcceptTypes=this.$opts.fileAccept,this.allowMultiple=this.$opts.allowMultiple==="true",this.setupListeners()}toggleActive(e){this.isActive=e}setupListeners(){O(this.selectButtons,this.manualSelectHandler.bind(this)),this.setupDropTargetHandlers()}setupDropTargetHandlers(){let e=0,t=()=>{this.hideOverlay(),e=0};this.dropTarget.addEventListener("dragenter",i=>{i.preventDefault(),e+=1,e===1&&this.isActive&&this.showOverlay()}),this.dropTarget.addEventListener("dragover",i=>{i.preventDefault()}),this.dropTarget.addEventListener("dragend",t),this.dropTarget.addEventListener("dragleave",()=>{e-=1,e===0&&t()}),this.dropTarget.addEventListener("drop",i=>{if(i.preventDefault(),t(),!this.isActive)return;let o=new Fe(i.dataTransfer).getFiles();for(let s of o)this.createUploadFromFile(s)})}manualSelectHandler(){let e=Ee("input",{type:"file",style:"left: -400px; visibility: hidden; position: fixed;",accept:this.fileAcceptTypes,multiple:this.allowMultiple?"":null});this.container.append(e),e.click(),e.addEventListener("change",()=>{for(let t of e.files)this.createUploadFromFile(t);e.remove()})}showOverlay(){if(!this.dropTarget.querySelector(".dropzone-overlay")){let t=Ee("div",{class:"dropzone-overlay"},[this.zoneText]);this.dropTarget.append(t)}}hideOverlay(){let e=this.dropTarget.querySelector(".dropzone-overlay");e&&e.remove()}createUploadFromFile(e){let{dom:t,status:i,progress:r,dismiss:o}=this.createDomForFile(e);this.statusArea.append(t);let s=this,a={file:e,dom:t,updateProgress(l){r.textContent=`${l}%`,r.style.width=`${l}%`},markError(l){i.setAttribute("data-status","error"),i.textContent=l,Tt(t),this.updateProgress(100)},markSuccess(l){i.setAttribute("data-status","success"),i.textContent=l,Tt(t),setTimeout(o,2400),s.$emit("upload-success",{name:e.name})}};return e.size>this.uploadLimitMb*1e6?(a.markError(this.uploadLimitMessage),a):(this.startXhrForUpload(a),a)}startXhrForUpload(e){let t=new FormData;t.append("file",e.file,e.file.name),this.method!=="POST"&&t.append("_method",this.method);let i=this,r=window.$http.createXMLHttpRequest("POST",this.url,{error(){e.markError(i.errorMessage)},readystatechange(){if(this.readyState===XMLHttpRequest.DONE&&this.status===200)e.markSuccess(i.successMessage);else if(this.readyState===XMLHttpRequest.DONE&&this.status>=400){let o=this.responseText,s=o.startsWith("{")?JSON.parse(o):{message:o},a=s?.message||s?.error||o;e.markError(a)}}});r.upload.addEventListener("progress",o=>{let s=Math.min(Math.ceil(o.loaded/o.total*100),100);e.updateProgress(s)}),r.setRequestHeader("Accept","application/json"),r.send(t)}createDomForFile(e){let t=Ee("img",{src:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.224 7.373a.924.924 0 0 0-.92.925l-.006 7.404c0 .509.412.925.921.925h5.557a.928.928 0 0 0 .926-.925v-5.553l-2.777-2.776Zm3.239 3.239V8.067l2.545 2.545z' style='fill:%23000;fill-opacity:.75'/%3E%3C/svg%3E"}),i=Ee("div",{class:"dropzone-file-item-status"},[]),r=Ee("div",{class:"dropzone-file-item-progress"}),o=Ee("div",{class:"dropzone-file-item-image-wrap"},[t]),s=Ee("div",{class:"dropzone-file-item"},[o,Ee("div",{class:"dropzone-file-item-text-wrap"},[Ee("div",{class:"dropzone-file-item-label"},[e.name]),at(),i]),r]);e.type.startsWith("image/")&&(t.src=URL.createObjectURL(e));let a=()=>{s.classList.add("dismiss"),s.addEventListener("animationend",()=>{s.remove()})};return s.addEventListener("click",a),{dom:s,progress:r,status:i,dismiss:a}}};var Gn=class extends g{setup(){this.container=this.$el,this.buttons=this.$manyRefs.tabButton,this.contentElements=this.$manyRefs.tabContent,this.toggleButton=this.$refs.toggle,this.setupListeners(),this.setActiveTab(this.contentElements[0].dataset.tabContent)}setupListeners(){this.toggleButton.addEventListener("click",()=>this.toggle()),this.container.addEventListener("click",e=>{let t=e.target.closest("button");if(this.buttons.includes(t)){let i=t.dataset.tab;this.setActiveTab(i,!0)}})}toggle(){this.container.classList.toggle("open");let e=this.container.classList.contains("open")?"true":"false";this.toggleButton.setAttribute("aria-expanded",e)}setActiveTab(e,t=!1){for(let i of this.buttons)i.classList.remove("active"),i.dataset.tab===e&&i.classList.add("active");for(let i of this.contentElements)i.style.display="none",i.dataset.tabContent===e&&(i.style.display="block");t&&!this.container.classList.contains("open")&&this.toggle()}};var Kn=class extends g{setup(){this.container=this.$el,this.entityType=this.$opts.entityType,this.everyoneInheritToggle=this.$refs.everyoneInherit,this.roleSelect=this.$refs.roleSelect,this.roleContainer=this.$refs.roleContainer,this.setupListeners()}setupListeners(){this.everyoneInheritToggle.addEventListener("change",e=>{let t=e.target.checked,i=document.querySelectorAll('input[name^="permissions[0]["]');for(let r of i)r.disabled=t,r.checked=!1}),this.container.addEventListener("click",e=>{let t=e.target.closest("button");t&&t.dataset.roleId&&this.removeRowOnButtonClick(t)}),this.roleSelect.addEventListener("change",()=>{let e=this.roleSelect.value;e&&this.addRoleRow(e)})}async addRoleRow(e){this.roleSelect.disabled=!0;let t=this.roleSelect.querySelector(`option[value="${e}"]`);t&&t.remove();let i=await window.$http.get(`/permissions/form-row/${this.entityType}/${e}`),r=_e(i.data);this.roleContainer.append(r),this.roleSelect.disabled=!1}removeRowOnButtonClick(e){let t=e.closest(".item-list-row"),{roleId:i}=e.dataset,{roleName:r}=e.dataset,o=document.createElement("option");o.value=i,o.textContent=r,this.roleSelect.append(o),t.remove()}};var Zn=class extends g{setup(){this.entityId=this.$opts.entityId,this.entityType=this.$opts.entityType,this.contentView=this.$refs.contentView,this.searchView=this.$refs.searchView,this.searchResults=this.$refs.searchResults,this.searchInput=this.$refs.searchInput,this.searchForm=this.$refs.searchForm,this.clearButton=this.$refs.clearButton,this.loadingBlock=this.$refs.loadingBlock,this.setupListeners()}setupListeners(){this.searchInput.addEventListener("change",this.runSearch.bind(this)),this.searchForm.addEventListener("submit",e=>{e.preventDefault(),this.runSearch()}),O(this.clearButton,this.clearSearch.bind(this))}runSearch(){let e=this.searchInput.value.trim();if(e.length===0){this.clearSearch();return}this.searchView.classList.remove("hidden"),this.contentView.classList.add("hidden"),this.loadingBlock.classList.remove("hidden");let t=window.baseUrl(`/search/${this.entityType}/${this.entityId}`);window.$http.get(t,{term:e}).then(i=>{this.searchResults.innerHTML=i.data}).catch(console.error).then(()=>{this.loadingBlock.classList.add("hidden")})}clearSearch(){this.searchView.classList.add("hidden"),this.contentView.classList.remove("hidden"),this.loadingBlock.classList.add("hidden"),this.searchInput.value=""}};var Xn=class extends g{setup(){this.elem=this.$el,this.entityTypes=this.$opts.entityTypes||"page,book,chapter",this.entityPermission=this.$opts.entityPermission||"view",this.input=this.$refs.input,this.searchInput=this.$refs.search,this.loading=this.$refs.loading,this.resultsContainer=this.$refs.results,this.search="",this.lastClick=0,this.selectedItemData=null,this.setupListeners(),this.showLoading(),this.initialLoad()}setupListeners(){this.elem.addEventListener("click",this.onClick.bind(this));let e=0;this.searchInput.addEventListener("input",()=>{e=Date.now(),this.showLoading(),setTimeout(()=>{Date.now()-e<199||this.searchEntities(this.searchInput.value)},200)}),this.searchInput.addEventListener("keydown",t=>{t.keyCode===13&&t.preventDefault()}),K(this.$el,"[data-entity-type]","keydown",t=>{if(t.ctrlKey&&t.code==="Enter"){let i=this.$el.closest("form");if(i){i.submit(),t.preventDefault();return}}t.code==="ArrowDown"&&this.focusAdjacent(!0),t.code==="ArrowUp"&&this.focusAdjacent(!1)}),this.searchInput.addEventListener("keydown",t=>{t.code==="ArrowDown"&&this.focusAdjacent(!0)})}focusAdjacent(e=!0){let t=Array.from(this.resultsContainer.querySelectorAll("[data-entity-type]")),i=t.indexOf(document.activeElement),r=t[i+(e?1:-1)]||t[0];r&&r.focus()}reset(){this.searchInput.value="",this.showLoading(),this.initialLoad()}focusSearch(){this.searchInput.focus()}showLoading(){this.loading.style.display="block",this.resultsContainer.style.display="none"}hideLoading(){this.loading.style.display="none",this.resultsContainer.style.display="block"}initialLoad(){window.$http.get(this.searchUrl()).then(e=>{this.resultsContainer.innerHTML=e.data,this.hideLoading()})}searchUrl(){return`/search/entity-selector?types=${encodeURIComponent(this.entityTypes)}&permission=${encodeURIComponent(this.entityPermission)}`}searchEntities(e){this.input.value="";let t=`${this.searchUrl()}&term=${encodeURIComponent(e)}`;window.$http.get(t).then(i=>{this.resultsContainer.innerHTML=i.data,this.hideLoading()})}isDoubleClick(){let e=Date.now(),t=e-this.lastClick<300;return this.lastClick=e,t}onClick(e){let t=e.target.closest("[data-entity-type]");t&&(e.preventDefault(),e.stopPropagation(),this.selectItem(t))}selectItem(e){let t=this.isDoubleClick(),i=e.getAttribute("data-entity-type"),r=e.getAttribute("data-entity-id"),o=!e.classList.contains("selected")||t;this.unselectAll(),this.input.value=o?`${i}:${r}`:"";let s=e.getAttribute("href"),a=e.querySelector(".entity-list-item-name").textContent,l={id:Number(r),name:a,link:s};o?(e.classList.add("selected"),this.selectedItemData=l):window.$events.emit("entity-select-change",null),!(!t&&!o)&&(t&&this.confirmSelection(l),o&&window.$events.emit("entity-select-change",l))}confirmSelection(e){window.$events.emit("entity-select-confirm",e)}unselectAll(){let e=this.elem.querySelectorAll(".selected");for(let t of e)t.classList.remove("selected","primary-background");this.selectedItemData=null}};var Yn=class extends g{setup(){this.container=this.$el,this.selectButton=this.$refs.select,this.selectorEl=this.$refs.selector,this.callback=null,this.selection=null,this.selectButton.addEventListener("click",this.onSelectButtonClick.bind(this)),window.$events.listen("entity-select-change",this.onSelectionChange.bind(this)),window.$events.listen("entity-select-confirm",this.handleConfirmedSelection.bind(this))}show(e){this.callback=e,this.getPopup().show(),this.getSelector().focusSearch()}hide(){this.getPopup().hide()}getPopup(){return window.$components.firstOnElement(this.container,"popup")}getSelector(){return window.$components.firstOnElement(this.selectorEl,"entity-selector")}onSelectButtonClick(){this.handleConfirmedSelection(this.selection)}onSelectionChange(e){this.selection=e,e===null?this.selectButton.setAttribute("disabled","true"):this.selectButton.removeAttribute("disabled")}handleConfirmedSelection(e){this.hide(),this.getSelector().reset(),this.callback&&e&&this.callback(e)}};var Jn=class extends g{setup(){this.container=this.$el,this.name=this.$opts.name,O(this.$el,()=>{this.$emit(this.name,this.$opts)})}};var Qn=class extends g{setup(){this.targetSelector=this.$opts.targetSelector,this.isOpen=this.$opts.isOpen==="true",this.updateEndpoint=this.$opts.updateEndpoint,this.$el.addEventListener("click",this.click.bind(this))}open(e){mt(e,200)}close(e){ft(e,200)}click(e){e.preventDefault();let t=document.querySelectorAll(this.targetSelector);for(let i of t)(this.isOpen?this.close:this.open)(i);this.isOpen=!this.isOpen,this.updateSystemAjax(this.isOpen)}updateSystemAjax(e){window.$http.patch(this.updateEndpoint,{expand:e?"true":"false"})}};var ei=class extends g{setup(){this.container=this.$el,this.input=this.$refs.input,this.suggestions=this.$refs.suggestions,this.suggestionResultsWrap=this.$refs.suggestionResults,this.loadingWrap=this.$refs.loading,this.button=this.$refs.button,this.setupListeners()}setupListeners(){let e=Ne(this.updateSuggestions.bind(this),200,!1);this.input.addEventListener("input",()=>{let{value:t}=this.input;t.length>0?(this.loadingWrap.style.display="block",this.suggestionResultsWrap.style.opacity="0.5",e(t)):this.hideSuggestions()}),this.input.addEventListener("dblclick",()=>{this.input.setAttribute("autocomplete","on"),this.button.focus(),this.input.focus()}),new ze(this.container,()=>{this.hideSuggestions()})}async updateSuggestions(e){let{data:t}=await window.$http.get("/search/suggest",{term:e});if(!this.input.value)return;let i=_e(t);this.suggestionResultsWrap.innerHTML="",this.suggestionResultsWrap.style.opacity="1",this.loadingWrap.style.display="none",this.suggestionResultsWrap.append(i),this.container.classList.contains("search-active")||this.showSuggestions()}showSuggestions(){this.container.classList.add("search-active"),window.requestAnimationFrame(()=>{this.suggestions.classList.add("search-suggestions-animation")})}hideSuggestions(){this.container.classList.remove("search-active"),this.suggestions.classList.remove("search-suggestions-animation"),this.suggestionResultsWrap.innerHTML=""}};var ti=class extends g{setup(){this.elem=this.$el,this.toggleButton=this.$refs.toggle,this.menu=this.$refs.menu,this.open=!1,this.toggleButton.addEventListener("click",this.onToggle.bind(this)),this.onWindowClick=this.onWindowClick.bind(this),this.onKeyDown=this.onKeyDown.bind(this)}onToggle(e){this.open=!this.open,this.menu.classList.toggle("show",this.open),this.toggleButton.setAttribute("aria-expanded",this.open?"true":"false"),this.open?(this.elem.addEventListener("keydown",this.onKeyDown),window.addEventListener("click",this.onWindowClick)):(this.elem.removeEventListener("keydown",this.onKeyDown),window.removeEventListener("click",this.onWindowClick)),e.stopPropagation()}onKeyDown(e){e.code==="Escape"&&this.onToggle(e)}onWindowClick(e){this.onToggle(e)}};var ni=class extends g{setup(){this.uploadedTo=this.$opts.uploadedTo,this.container=this.$el,this.popupEl=this.$refs.popup,this.searchForm=this.$refs.searchForm,this.searchInput=this.$refs.searchInput,this.cancelSearch=this.$refs.cancelSearch,this.listContainer=this.$refs.listContainer,this.filterTabs=this.$manyRefs.filterTabs,this.selectButton=this.$refs.selectButton,this.uploadButton=this.$refs.uploadButton,this.uploadHint=this.$refs.uploadHint,this.formContainer=this.$refs.formContainer,this.formContainerPlaceholder=this.$refs.formContainerPlaceholder,this.dropzoneContainer=this.$refs.dropzoneContainer,this.loadMore=this.$refs.loadMore,this.type="gallery",this.lastSelected={},this.lastSelectedTime=0,this.callback=null,this.resetState=()=>{this.hasData=!1,this.page=1,this.filter="all"},this.resetState(),this.setupListeners()}setupListeners(){O(this.filterTabs,i=>{this.resetAll(),this.filter=i.target.dataset.filter,this.setActiveFilterTab(this.filter),this.loadGallery()}),this.searchForm.addEventListener("submit",i=>{this.resetListView(),this.loadGallery(),this.cancelSearch.toggleAttribute("hidden",!this.searchInput.value),i.preventDefault()}),O(this.cancelSearch,()=>{this.resetListView(),this.resetSearchView(),this.loadGallery()}),K(this.container,".load-more button","click",this.runLoadMore.bind(this)),this.listContainer.addEventListener("event-emit-select-image",this.onImageSelectEvent.bind(this)),this.listContainer.addEventListener("error",i=>{i.target.src=window.baseUrl("loading_error.png")},!0),O(this.selectButton,()=>{this.callback&&this.callback(this.lastSelected),this.hide()}),K(this.formContainer,"#image-manager-delete","click",()=>{this.lastSelected&&this.loadImageEditForm(this.lastSelected.id,!0)}),this.formContainer.addEventListener("ajax-form-success",()=>{this.refreshGallery(),this.resetEditForm()}),this.container.addEventListener("dropzone-upload-success",this.refreshGallery.bind(this));let e=this.listContainer.parentElement,t=[];e.addEventListener("wheel",i=>{if(!(Math.ceil(e.scrollHeight-e.scrollTop)===e.clientHeight)||i.deltaY<1)return;let s=Date.now()-1e3;t.push(Date.now()),t=t.filter(a=>a>=s),t.length>5&&this.canLoadMore()&&this.runLoadMore()})}show(e,t="gallery"){this.resetAll(),this.callback=e,this.type=t,this.getPopup().show();let i=t!=="gallery";this.dropzoneContainer.classList.toggle("hidden",i),this.uploadButton.classList.toggle("hidden",i),this.uploadHint.classList.toggle("hidden",i),window.$components.firstOnElement(this.container,"dropzone").toggleActive(!i),this.hasData||(this.loadGallery(),this.hasData=!0)}hide(){this.getPopup().hide()}getPopup(){return window.$components.firstOnElement(this.popupEl,"popup")}async loadGallery(){let e={page:this.page,search:this.searchInput.value||null,uploaded_to:this.uploadedTo,filter_type:this.filter==="all"?null:this.filter},{data:t}=await window.$http.get(`images/${this.type}`,e);e.page===1&&(this.listContainer.innerHTML=""),this.addReturnedHtmlElementsToList(t),Tt(this.listContainer)}addReturnedHtmlElementsToList(e){let t=document.createElement("div");t.innerHTML=e;let i=t.querySelector(".load-more");i&&(i.remove(),this.loadMore.innerHTML=i.innerHTML),this.loadMore.toggleAttribute("hidden",!i),window.$components.init(t);for(let r of[...t.children])this.listContainer.appendChild(r)}setActiveFilterTab(e){for(let t of this.filterTabs){let i=t.dataset.filter===e;t.setAttribute("aria-selected",i?"true":"false")}}resetAll(){this.resetState(),this.resetListView(),this.resetSearchView(),this.resetEditForm(),this.setActiveFilterTab("all"),this.selectButton.classList.add("hidden")}resetSearchView(){this.searchInput.value="",this.cancelSearch.toggleAttribute("hidden",!0)}resetEditForm(){this.formContainer.innerHTML="",this.formContainerPlaceholder.removeAttribute("hidden")}resetListView(){Dt(this.listContainer),this.page=1}refreshGallery(){this.resetListView(),this.loadGallery()}onImageSelectEvent(e){let t=JSON.parse(e.detail.data),i=t&&t.id===this.lastSelected.id&&Date.now()-this.lastSelectedTime<400,r=e.target.classList.contains("selected");[...this.listContainer.querySelectorAll(".selected")].forEach(o=>{o.classList.remove("selected")}),r?this.resetEditForm():(e.target.classList.add("selected"),this.loadImageEditForm(t.id)),this.selectButton.classList.toggle("hidden",r),i&&this.callback&&(this.callback(t),this.hide()),this.lastSelected=t,this.lastSelectedTime=Date.now()}async loadImageEditForm(e,t=!1){t||(this.formContainer.innerHTML="");let i=t?{delete:!0}:{},{data:r}=await window.$http.get(`/images/edit/${e}`,i);this.formContainer.innerHTML=r,this.formContainerPlaceholder.setAttribute("hidden",""),window.$components.init(this.formContainer)}runLoadMore(){Dt(this.loadMore),this.page+=1,this.loadGallery()}canLoadMore(){return this.loadMore.querySelector("button")&&!this.loadMore.hasAttribute("hidden")}};var ii=class extends g{setup(){this.imageElem=this.$refs.image,this.imageInput=this.$refs.imageInput,this.resetInput=this.$refs.resetInput,this.removeInput=this.$refs.removeInput,this.resetButton=this.$refs.resetButton,this.removeButton=this.$refs.removeButton||null,this.defaultImage=this.$opts.defaultImage,this.setupListeners()}setupListeners(){this.resetButton.addEventListener("click",this.reset.bind(this)),this.removeButton&&this.removeButton.addEventListener("click",this.removeImage.bind(this)),this.imageInput.addEventListener("change",this.fileInputChange.bind(this))}fileInputChange(){this.resetInput.setAttribute("disabled","disabled"),this.removeInput&&this.removeInput.setAttribute("disabled","disabled");for(let e of this.imageInput.files)this.imageElem.src=window.URL.createObjectURL(e);this.imageElem.classList.remove("none")}reset(){this.imageInput.value="",this.imageElem.src=this.defaultImage,this.resetInput.removeAttribute("disabled"),this.removeInput&&this.removeInput.setAttribute("disabled","disabled"),this.imageElem.classList.remove("none")}removeImage(){this.imageInput.value="",this.imageElem.classList.add("none"),this.removeInput.removeAttribute("disabled"),this.resetInput.setAttribute("disabled","disabled")}};var ri=class extends g{setup(){this.elem=this.$el,this.menu=this.$refs.menu,this.sortInput=this.$refs.sort,this.orderInput=this.$refs.order,this.form=this.$refs.form,this.setupListeners()}setupListeners(){this.menu.addEventListener("click",e=>{e.target.closest("[data-sort-value]")!==null&&this.sortOptionClick(e)}),this.elem.addEventListener("click",e=>{e.target.closest("[data-sort-dir]")!==null&&this.sortDirectionClick(e)})}sortOptionClick(e){let t=e.target.closest("[data-sort-value]");this.sortInput.value=t.getAttribute("data-sort-value"),e.preventDefault(),this.form.submit()}sortDirectionClick(e){let t=this.orderInput.value;this.orderInput.value=t==="asc"?"desc":"asc",e.preventDefault(),this.form.submit()}};var Uc=Wo(Pc()),jc=Wo(Hc()),wi=class{constructor(){this.renderer=new Uc.default({html:!0}),this.renderer.use(jc.default,{label:!0})}getRenderer(){return this.renderer}render(e){return this.renderer.render(e)}};function rf(n,e){return document.createElement(n,e)}function of(n,e,t){return document.createElementNS(n,e,t)}function sf(){return et(document.createDocumentFragment())}function af(n){return document.createTextNode(n)}function lf(n){return document.createComment(n)}function cf(n,e,t){if(qe(n)){let i=n;for(;i&&qe(i);)i=et(i).parent;n=i??n}qe(e)&&(e=et(e,n)),t&&qe(t)&&(t=et(t).firstChildNode),n.insertBefore(e,t)}function uf(n,e){n.removeChild(e)}function hf(n,e){qe(e)&&(e=et(e,n)),n.appendChild(e)}function Vc(n){if(qe(n)){for(;n&&qe(n);)n=et(n).parent;return n??null}return n.parentNode}function df(n){var e;if(qe(n)){let t=et(n),i=Vc(t);if(i&&t.lastChildNode){let r=Array.from(i.childNodes),o=r.indexOf(t.lastChildNode);return(e=r[o+1])!==null&&e!==void 0?e:null}return null}return n.nextSibling}function pf(n){return n.tagName}function ff(n,e){n.textContent=e}function mf(n){return n.textContent}function gf(n){return n.nodeType===1}function bf(n){return n.nodeType===3}function vf(n){return n.nodeType===8}function qe(n){return n.nodeType===11}function et(n,e){var t,i,r;let o=n;return(t=o.parent)!==null&&t!==void 0||(o.parent=e??null),(i=o.firstChildNode)!==null&&i!==void 0||(o.firstChildNode=n.firstChild),(r=o.lastChildNode)!==null&&r!==void 0||(o.lastChildNode=n.lastChild),o}var yi={createElement:rf,createElementNS:of,createTextNode:af,createDocumentFragment:sf,createComment:lf,insertBefore:cf,removeChild:uf,appendChild:hf,parentNode:Vc,nextSibling:df,tagName:pf,setTextContent:ff,getTextContent:mf,isElement:gf,isText:bf,isComment:vf,isDocumentFragment:qe};function Be(n,e,t,i,r){let o=e===void 0?void 0:e.key;return{sel:n,data:e,children:t,text:i,elm:r,key:o}}var Wc=Array.isArray;function Gc(n){return typeof n=="string"||typeof n=="number"||n instanceof String||n instanceof Number}function Co(n){return n===void 0}function ce(n){return n!==void 0}var Eo=Be("",{},[],void 0,void 0);function Jt(n,e){var t,i;let r=n.key===e.key,o=((t=n.data)===null||t===void 0?void 0:t.is)===((i=e.data)===null||i===void 0?void 0:i.is),s=n.sel===e.sel,a=!n.sel&&n.sel===e.sel?typeof n.text==typeof e.text:!0;return s&&r&&o&&a}function yf(){throw new Error("The document fragment is not supported on this platform.")}function xf(n,e){return n.isElement(e)}function kf(n,e){return n.isDocumentFragment(e)}function Cf(n,e,t){var i;let r={};for(let o=e;o<=t;++o){let s=(i=n[o])===null||i===void 0?void 0:i.key;s!==void 0&&(r[s]=o)}return r}var Ef=["create","update","remove","destroy","pre","post"];function _o(n,e,t){let i={create:[],update:[],remove:[],destroy:[],pre:[],post:[]},r=e!==void 0?e:yi;for(let f of Ef)for(let m of n){let y=m[f];y!==void 0&&i[f].push(y)}function o(f){let m=f.id?"#"+f.id:"",y=f.getAttribute("class"),v=y?"."+y.split(" ").join("."):"";return Be(r.tagName(f).toLowerCase()+m+v,{},[],void 0,f)}function s(f){return Be(void 0,{},[],void 0,f)}function a(f,m){return function(){if(--m===0){let v=r.parentNode(f);r.removeChild(v,f)}}}function l(f,m){var y,v,b,k;let w,E=f.data;if(E!==void 0){let D=(y=E.hook)===null||y===void 0?void 0:y.init;ce(D)&&(D(f),E=f.data)}let x=f.children,S=f.sel;if(S==="!")Co(f.text)&&(f.text=""),f.elm=r.createComment(f.text);else if(S!==void 0){let D=S.indexOf("#"),q=S.indexOf(".",D),L=D>0?D:S.length,I=q>0?q:S.length,H=D!==-1||q!==-1?S.slice(0,Math.min(L,I)):S,N=f.elm=ce(E)&&ce(w=E.ns)?r.createElementNS(w,H,E):r.createElement(H,E);for(L0&&N.setAttribute("class",S.slice(I+1).replace(/\./g," ")),w=0;w0&&(u.attrs=l),Object.keys(c).length>0&&(u.dataset=c),a[0]==="s"&&a[1]==="v"&&a[2]==="g"&&(a.length===3||a[3]==="."||a[3]==="#")&&So(u,h,a),Be(a,u,h,void 0,n)}else return t.isText(n)?(i=t.getTextContent(n),Be(void 0,void 0,void 0,i,n)):t.isComment(n)?(i=t.getTextContent(n),Be("!",{},[],i,n)):Be("",{},[],void 0,n)}var _f="http://www.w3.org/1999/xlink",Sf="http://www.w3.org/XML/1998/namespace";function Kc(n,e){let t,i=e.elm,r=n.data.attrs,o=e.data.attrs;if(!(!r&&!o)&&r!==o){r=r||{},o=o||{};for(t in o){let s=o[t];r[t]!==s&&(s===!0?i.setAttribute(t,""):s===!1?i.removeAttribute(t):t.charCodeAt(0)!==120?i.setAttribute(t,s):t.charCodeAt(3)===58?i.setAttributeNS(Sf,t,s):t.charCodeAt(5)===58?i.setAttributeNS(_f,t,s):i.setAttribute(t,s))}for(t in r)t in o||i.removeAttribute(t)}}var Ao={create:Kc,update:Kc};var xi;function Af(){return xi||(xi=_o([Ao]),xi)}function Zc(n,e){let t=document.createElement("div");t.innerHTML=e,Af()(Qt(n),Qt(t))}var ki=class{constructor(e){this.editor=e,this.container=e.config.displayEl,this.doc=null,this.lastDisplayClick=0,this.container.contentDocument.readyState==="complete"?this.onLoad():this.container.addEventListener("load",this.onLoad.bind(this)),this.updateVisibility(e.settings.get("showPreview")),e.settings.onChange("showPreview",t=>this.updateVisibility(t))}updateVisibility(e){let t=this.container.closest(".markdown-editor-wrap");t.style.display=e?null:"none"}onLoad(){this.doc=this.container.contentDocument,this.loadStylesIntoDisplay(),this.doc.body.className="page-content",this.doc.addEventListener("click",this.onDisplayClick.bind(this))}onDisplayClick(e){let t=Date.now()-this.lastDisplayClick<300,i=e.target.closest("a");if(i!==null){e.preventDefault(),window.open(i.getAttribute("href"));return}let r=e.target.closest("[drawio-diagram]");if(r!==null&&t){this.editor.actions.editDrawing(r);return}this.lastDisplayClick=Date.now()}loadStylesIntoDisplay(){this.doc.documentElement.classList.add("markdown-editor-display"),document.documentElement.classList.contains("dark-mode")&&(this.doc.documentElement.style.backgroundColor="#222",this.doc.documentElement.classList.add("dark-mode")),this.doc.head.innerHTML="";let e=document.head.querySelectorAll("style,link[rel=stylesheet]");for(let t of e){let i=t.cloneNode(!0);this.doc.head.appendChild(i)}}patchWithHtml(e){let{body:t}=this.doc;if(t.children.length===0){let r=document.createElement("div");this.doc.body.append(r)}let i=t.children[0];Zc(i,e)}scrollToIndex(e){let t=this.doc.body?.children[0]?.children;if(t&&t.length<=e)return;(e===-1?t[t.length-1]:t[e]).scrollIntoView({block:"start",inline:"nearest",behavior:"smooth"})}};function Ci(n){return new Promise((e,t)=>{n.oncomplete=n.onsuccess=()=>e(n.result),n.onabort=n.onerror=()=>t(n.error)})}function Df(n,e){let t=indexedDB.open(n);t.onupgradeneeded=()=>t.result.createObjectStore(e);let i=Ci(t);return(r,o)=>i.then(s=>o(s.transaction(e,r).objectStore(e)))}var Do;function To(){return Do||(Do=Df("keyval-store","keyval")),Do}function Lo(n,e=To()){return e("readonly",t=>Ci(t.get(n)))}function Io(n,e,t=To()){return t("readwrite",i=>(i.put(e,n),Ci(i.transaction)))}function $o(n,e=To()){return e("readwrite",t=>(t.delete(n),Ci(t.transaction)))}var Ie=null,qo,Ei,Mo,Fo="last-drawing-save";function Bo(n){Ie.contentWindow.postMessage(JSON.stringify(n),qo)}function Lf(n){Io(Fo,n.data),Mo&&Mo(n.data).then(()=>{$o(Fo)})}function If(n){Bo({action:"export",format:"xmlpng",xml:n.xml,spin:"Updating drawing"})}function $f(){Ei&&Ei().then(n=>{Bo({action:"load",autosave:1,xml:n})})}function Mf(){let n={};window.$events.emitPublic(Ie,"editor-drawio::configure",{config:n}),Bo({action:"configure",config:n})}function Xc(){window.removeEventListener("message",Yc),Ie&&document.body.removeChild(Ie)}function Yc(n){if(!n.data||n.data.length<1||n.origin!==qo)return;let e=JSON.parse(n.data);e.event==="init"?$f():e.event==="exit"?Xc():e.event==="save"?If(e):e.event==="export"?Lf(e):e.event==="configure"&&Mf()}async function Ff(){let n=await Lo(Fo),e=document.getElementById("unsaved-drawing-dialog");e||console.error("Missing expected unsaved-drawing dialog"),n&&await window.$components.firstOnElement(e,"confirm-dialog").show()&&(Ei=async()=>n)}async function en(n,e,t){Ei=e,Mo=t,await Ff(),Ie=document.createElement("iframe"),Ie.setAttribute("frameborder","0"),window.addEventListener("message",Yc),Ie.setAttribute("src",n),Ie.setAttribute("class","fullscreen"),Ie.style.backgroundColor="#FFFFFF",document.body.appendChild(Ie),qo=new URL(n).origin}async function Po(n,e){let t={image:n,uploaded_to:e};return(await window.$http.post(window.baseUrl("/images/drawio"),t)).data}function tt(){Xc()}async function _i(n){try{return`data:image/png;base64,${(await window.$http.get(window.baseUrl(`/images/drawio/base64/${n}`))).data.content}`}catch(e){throw e instanceof window.$http.HttpError&&window.$events.showResponseError(e),tt(),e}}var tn,Oo,xt,Si,kt,Ai,Pe,nt,We,yt,ie,ue,nn,Ro,rn,No,Ct,Di,he,ve,Li,Qc,Ti=class{constructor(e){re(this,tn);re(this,xt);re(this,kt);re(this,Pe);re(this,We);re(this,ie);re(this,nn);re(this,rn);re(this,Ct);re(this,he);re(this,Li);this.editor=e,this.lastContent={html:"",markdown:""}}updateAndRender(){let e=T(this,xt,Si).call(this);this.editor.config.inputEl.value=e;let t=this.editor.markdown.render(e);window.$events.emit("editor-html-change",""),window.$events.emit("editor-markdown-change",""),this.lastContent.html=t,this.lastContent.markdown=e,this.editor.display.patchWithHtml(t)}getContent(){return this.lastContent}showImageInsert(){window.$components.first("image-manager").show(t=>{let i=t.thumbs.display||t.url,o=`[![${T(this,We,yt).call(this)||t.name}](${i})](${t.url})`;T(this,Pe,nt).call(this,o,o.length)},"gallery")}insertImage(){let e=`![${T(this,We,yt).call(this)}](http://)`;T(this,Pe,nt).call(this,e,e.length-1)}insertLink(){let e=T(this,We,yt).call(this),t=`[${e}]()`,i=e===""?-3:-1;T(this,Pe,nt).call(this,t,t.length+i)}showImageManager(){let e=T(this,ie,ue).call(this);window.$components.first("image-manager").show(i=>{T(this,tn,Oo).call(this,i,e)},"drawio")}showLinkSelector(){let e=T(this,ie,ue).call(this);window.$components.first("entity-selector-popup").show(i=>{let o=`[${T(this,We,yt).call(this,e)||i.name}](${i.link})`;T(this,Pe,nt).call(this,o,o.length,e)})}startDrawing(){let e=this.editor.config.drawioUrl;if(!e)return;let t=T(this,ie,ue).call(this);en(e,()=>Promise.resolve(""),async i=>{let r={image:i,uploaded_to:Number(this.editor.config.pageId)};try{let o=await window.$http.post("/images/drawio",r);T(this,tn,Oo).call(this,o.data,t),tt()}catch(o){throw this.handleDrawingUploadError(o),new Error(`Failed to save image with error: ${o}`)}})}editDrawing(e){let{drawioUrl:t}=this.editor.config;if(!t)return;let i=T(this,ie,ue).call(this),r=e.getAttribute("drawio-diagram");en(t,()=>_i(r),async o=>{let s={image:o,uploaded_to:Number(this.editor.config.pageId)};try{let a=await window.$http.post("/images/drawio",s),l=`
    `,c=T(this,xt,Si).call(this).split(` +`};Dt.text=function(n,t){return Jt(n[t].content)};Dt.html_block=function(n,t){return n[t].content};Dt.html_inline=function(n,t){return n[t].content};function be(){this.rules=bd({},Dt)}be.prototype.renderAttrs=function(t){var e,i,r;if(!t.attrs)return"";for(r="",e=0,i=t.attrs.length;e +`:">",o)};be.prototype.renderInline=function(n,t,e){for(var i,r="",o=this.rules,s=0,a=n.length;s{"use strict";function Ct(){this.__rules__=[],this.__cache__=null}Ct.prototype.__find__=function(n){for(var t=0;t{"use strict";var wd=/\r\n?|\n/g,yd=/\0/g;va.exports=function(t){var e;e=t.src.replace(wd,` +`),e=e.replace(yd,"\uFFFD"),t.src=e}});var xa=_((Zb,ya)=>{"use strict";ya.exports=function(t){var e;t.inlineMode?(e=new t.Token("inline","",0),e.content=t.src,e.map=[0,1],e.children=[],t.tokens.push(e)):t.md.block.parse(t.src,t.md,t.env,t.tokens)}});var Ca=_((Xb,ka)=>{"use strict";ka.exports=function(t){var e=t.tokens,i,r,o;for(r=0,o=e.length;r{"use strict";var xd=N().arrayReplaceAt;function kd(n){return/^\s]/i.test(n)}function Cd(n){return/^<\/a\s*>/i.test(n)}Ea.exports=function(t){var e,i,r,o,s,a,l,c,u,h,d,f,p,m,w,v,b=t.tokens,k;if(t.md.options.linkify){for(i=0,r=b.length;i=0;e--){if(a=o[e],a.type==="link_close"){for(e--;o[e].level!==a.level&&o[e].type!=="link_open";)e--;continue}if(a.type==="html_inline"&&(kd(a.content)&&p>0&&p--,Cd(a.content)&&p++),!(p>0)&&a.type==="text"&&t.md.linkify.test(a.content)){for(u=a.content,k=t.md.linkify.match(u),l=[],f=a.level,d=0,k.length>0&&k[0].index===0&&e>0&&o[e-1].type==="text_special"&&(k=k.slice(1)),c=0;cd&&(s=new t.Token("text","",0),s.content=u.slice(d,h),s.level=f,l.push(s)),s=new t.Token("link_open","a",1),s.attrs=[["href",w]],s.level=f++,s.markup="linkify",s.info="auto",l.push(s),s=new t.Token("text","",0),s.content=v,s.level=f,l.push(s),s=new t.Token("link_close","a",-1),s.level=--f,s.markup="linkify",s.info="auto",l.push(s),d=k[c].lastIndex);d{"use strict";var Sa=/\+-|\.\.|\?\?\?\?|!!!!|,,|--/,Ed=/\((c|tm|r)\)/i,_d=/\((c|tm|r)\)/ig,Sd={c:"\xA9",r:"\xAE",tm:"\u2122"};function Ad(n,t){return Sd[t.toLowerCase()]}function Dd(n){var t,e,i=0;for(t=n.length-1;t>=0;t--)e=n[t],e.type==="text"&&!i&&(e.content=e.content.replace(_d,Ad)),e.type==="link_open"&&e.info==="auto"&&i--,e.type==="link_close"&&e.info==="auto"&&i++}function Ld(n){var t,e,i=0;for(t=n.length-1;t>=0;t--)e=n[t],e.type==="text"&&!i&&Sa.test(e.content)&&(e.content=e.content.replace(/\+-/g,"\xB1").replace(/\.{2,}/g,"\u2026").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/mg,"$1\u2014").replace(/(^|\s)--(?=\s|$)/mg,"$1\u2013").replace(/(^|[^-\s])--(?=[^-\s]|$)/mg,"$1\u2013")),e.type==="link_open"&&e.info==="auto"&&i--,e.type==="link_close"&&e.info==="auto"&&i++}Aa.exports=function(t){var e;if(t.md.options.typographer)for(e=t.tokens.length-1;e>=0;e--)t.tokens[e].type==="inline"&&(Ed.test(t.tokens[e].content)&&Dd(t.tokens[e].children),Sa.test(t.tokens[e].content)&&Ld(t.tokens[e].children))}});var qa=_((Qb,Fa)=>{"use strict";var La=N().isWhiteSpace,Ta=N().isPunctChar,$a=N().isMdAsciiPunct,Td=/['"]/,Ia=/['"]/g,Ma="\u2019";function hi(n,t,e){return n.slice(0,t)+e+n.slice(t+1)}function $d(n,t){var e,i,r,o,s,a,l,c,u,h,d,f,p,m,w,v,b,k,x,E,y;for(x=[],e=0;e=0&&!(x[b].level<=l);b--);if(x.length=b+1,i.type==="text"){r=i.content,s=0,a=r.length;t:for(;s=0)u=r.charCodeAt(o.index-1);else for(b=e-1;b>=0&&!(n[b].type==="softbreak"||n[b].type==="hardbreak");b--)if(n[b].content){u=n[b].content.charCodeAt(n[b].content.length-1);break}if(h=32,s=48&&u<=57&&(v=w=!1),w&&v&&(w=d,v=f),!w&&!v){k&&(i.content=hi(i.content,o.index,Ma));continue}if(v){for(b=x.length-1;b>=0&&(c=x[b],!(x[b].level=0;e--)t.tokens[e].type!=="inline"||!Td.test(t.tokens[e].content)||$d(t.tokens[e].children,t)}});var Pa=_((tv,Ba)=>{"use strict";Ba.exports=function(t){var e,i,r,o,s,a,l=t.tokens;for(e=0,i=l.length;e{"use strict";function ve(n,t,e){this.type=n,this.tag=t,this.attrs=null,this.map=null,this.nesting=e,this.level=0,this.children=null,this.content="",this.markup="",this.info="",this.meta=null,this.block=!1,this.hidden=!1}ve.prototype.attrIndex=function(t){var e,i,r;if(!this.attrs)return-1;for(e=this.attrs,i=0,r=e.length;i=0&&(i=this.attrs[e][1]),i};ve.prototype.attrJoin=function(t,e){var i=this.attrIndex(t);i<0?this.attrPush([t,e]):this.attrs[i][1]=this.attrs[i][1]+" "+e};Oa.exports=ve});var za=_((nv,Na)=>{"use strict";var Id=di();function Ra(n,t,e){this.src=n,this.env=e,this.tokens=[],this.inlineMode=!1,this.md=t}Ra.prototype.Token=Id;Na.exports=Ra});var Ua=_((iv,Ha)=>{"use strict";var Md=ui(),Yr=[["normalize",wa()],["block",xa()],["inline",Ca()],["linkify",_a()],["replacements",Da()],["smartquotes",qa()],["text_join",Pa()]];function Jr(){this.ruler=new Md;for(var n=0;n{"use strict";var Qr=N().isSpace;function to(n,t){var e=n.bMarks[t]+n.tShift[t],i=n.eMarks[t];return n.src.slice(e,i)}function ja(n){var t=[],e=0,i=n.length,r,o=!1,s=0,a="";for(r=n.charCodeAt(e);ei||(u=e+1,t.sCount[u]=4||(a=t.bMarks[u]+t.tShift[u],a>=t.eMarks[u])||(E=t.src.charCodeAt(a++),E!==124&&E!==45&&E!==58)||a>=t.eMarks[u]||(y=t.src.charCodeAt(a++),y!==124&&y!==45&&y!==58&&!Qr(y))||E===45&&Qr(y))return!1;for(;a=4||(h=ja(s),h.length&&h[0]===""&&h.shift(),h.length&&h[h.length-1]===""&&h.pop(),d=h.length,d===0||d!==p.length))return!1;if(r)return!0;for(b=t.parentType,t.parentType="table",x=t.md.block.ruler.getRules("blockquote"),f=t.push("table_open","table",1),f.map=w=[e,0],f=t.push("thead_open","thead",1),f.map=[e,e+1],f=t.push("tr_open","tr",1),f.map=[e,e+1],l=0;l=4)break;for(h=ja(s),h.length&&h[0]===""&&h.shift(),h.length&&h[h.length-1]===""&&h.pop(),u===e+2&&(f=t.push("tbody_open","tbody",1),f.map=v=[e+2,0]),f=t.push("tr_open","tr",1),f.map=[u,u+1],l=0;l{"use strict";Ga.exports=function(t,e,i){var r,o,s;if(t.sCount[e]-t.blkIndent<4)return!1;for(o=r=e+1;r=4){r++,o=r;continue}break}return t.line=o,s=t.push("code_block","code",0),s.content=t.getLines(e,o,4+t.blkIndent,!1)+` +`,s.map=[e,t.line],!0}});var Xa=_((sv,Za)=>{"use strict";Za.exports=function(t,e,i,r){var o,s,a,l,c,u,h,d=!1,f=t.bMarks[e]+t.tShift[e],p=t.eMarks[e];if(t.sCount[e]-t.blkIndent>=4||f+3>p||(o=t.src.charCodeAt(f),o!==126&&o!==96)||(c=f,f=t.skipChars(f,o),s=f-c,s<3)||(h=t.src.slice(c,f),a=t.src.slice(f,p),o===96&&a.indexOf(String.fromCharCode(o))>=0))return!1;if(r)return!0;for(l=e;l++,!(l>=i||(f=c=t.bMarks[l]+t.tShift[l],p=t.eMarks[l],f=4)&&(f=t.skipChars(f,o),!(f-c{"use strict";var Fd=N().isSpace;Ya.exports=function(t,e,i,r){var o,s,a,l,c,u,h,d,f,p,m,w,v,b,k,x,E,y,S,D,M=t.lineMax,T=t.bMarks[e]+t.tShift[e],P=t.eMarks[e];if(t.sCount[e]-t.blkIndent>=4||t.src.charCodeAt(T)!==62)return!1;if(r)return!0;for(p=[],m=[],b=[],k=[],y=t.md.block.ruler.getRules("blockquote"),v=t.parentType,t.parentType="blockquote",d=e;d=P));d++){if(t.src.charCodeAt(T++)===62&&!D){for(l=t.sCount[d]+1,t.src.charCodeAt(T)===32?(T++,l++,o=!1,x=!0):t.src.charCodeAt(T)===9?(x=!0,(t.bsCount[d]+l)%4===3?(T++,l++,o=!1):o=!0):x=!1,f=l,p.push(t.bMarks[d]),t.bMarks[d]=T;T=P,m.push(t.bsCount[d]),t.bsCount[d]=t.sCount[d]+1+(x?1:0),b.push(t.sCount[d]),t.sCount[d]=f-l,k.push(t.tShift[d]),t.tShift[d]=T-t.bMarks[d];continue}if(u)break;for(E=!1,a=0,c=y.length;a",S.map=h=[e,0],t.md.block.tokenize(t,e,d),S=t.push("blockquote_close","blockquote",-1),S.markup=">",t.lineMax=M,t.parentType=v,h[1]=t.line,a=0;a{"use strict";var qd=N().isSpace;Qa.exports=function(t,e,i,r){var o,s,a,l,c=t.bMarks[e]+t.tShift[e],u=t.eMarks[e];if(t.sCount[e]-t.blkIndent>=4||(o=t.src.charCodeAt(c++),o!==42&&o!==45&&o!==95))return!1;for(s=1;c{"use strict";var il=N().isSpace;function el(n,t){var e,i,r,o;return i=n.bMarks[t]+n.tShift[t],r=n.eMarks[t],e=n.src.charCodeAt(i++),e!==42&&e!==45&&e!==43||i=o||(e=n.src.charCodeAt(r++),e<48||e>57))return-1;for(;;){if(r>=o)return-1;if(e=n.src.charCodeAt(r++),e>=48&&e<=57){if(r-i>=10)return-1;continue}if(e===41||e===46)break;return-1}return r=4||t.listIndent>=0&&t.sCount[$]-t.listIndent>=4&&t.sCount[$]=t.blkIndent&&(Ot=!0),(T=nl(t,$))>=0){if(h=!0,H=t.bMarks[$]+t.tShift[$],v=Number(t.src.slice(H,T-1)),Ot&&v!==1)return!1}else if((T=el(t,$))>=0)h=!1;else return!1;if(Ot&&t.skipSpaces(T)>=t.eMarks[$])return!1;if(r)return!0;for(w=t.src.charCodeAt(T-1),m=t.tokens.length,h?(W=t.push("ordered_list_open","ol",1),v!==1&&(W.attrs=[["start",v]])):W=t.push("bullet_list_open","ul",1),W.map=p=[$,0],W.markup=String.fromCharCode(w),P=!1,et=t.md.block.ruler.getRules("list"),E=t.parentType,t.parentType="list";$=b?c=1:c=k-u,c>4&&(c=1),l=u+c,W=t.push("list_item_open","li",1),W.markup=String.fromCharCode(w),W.map=d=[$,0],h&&(W.info=t.src.slice(H,T-1)),D=t.tight,S=t.tShift[$],y=t.sCount[$],x=t.listIndent,t.listIndent=t.blkIndent,t.blkIndent=l,t.tight=!0,t.tShift[$]=s-t.bMarks[$],t.sCount[$]=k,s>=b&&t.isEmpty($+1)?t.line=Math.min(t.line+2,i):t.md.block.tokenize(t,$,i,!0),(!t.tight||P)&&(Rt=!1),P=t.line-$>1&&t.isEmpty(t.line-1),t.blkIndent=t.listIndent,t.listIndent=x,t.tShift[$]=S,t.sCount[$]=y,t.tight=D,W=t.push("list_item_close","li",-1),W.markup=String.fromCharCode(w),$=t.line,d[1]=$,$>=i||t.sCount[$]=4)break;for(U=!1,a=0,f=et.length;a{"use strict";var Pd=N().normalizeReference,pi=N().isSpace;sl.exports=function(t,e,i,r){var o,s,a,l,c,u,h,d,f,p,m,w,v,b,k,x,E=0,y=t.bMarks[e]+t.tShift[e],S=t.eMarks[e],D=e+1;if(t.sCount[e]-t.blkIndent>=4||t.src.charCodeAt(y)!==91)return!1;for(;++y3)&&!(t.sCount[D]<0)){for(b=!1,u=0,h=k.length;u"u"&&(t.env.references={}),typeof t.env.references[d]>"u"&&(t.env.references[d]={title:x,href:c}),t.parentType=p,t.line=e+E+1),!0)}});var cl=_((hv,ll)=>{"use strict";ll.exports=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","source","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"]});var no=_((dv,eo)=>{"use strict";var Od="[a-zA-Z_:][a-zA-Z0-9:._-]*",Rd="[^\"'=<>`\\x00-\\x20]+",Nd="'[^']*'",zd='"[^"]*"',Hd="(?:"+Rd+"|"+Nd+"|"+zd+")",Ud="(?:\\s+"+Od+"(?:\\s*=\\s*"+Hd+")?)",ul="<[A-Za-z][A-Za-z0-9\\-]*"+Ud+"*\\s*\\/?>",hl="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",jd="|",Vd="<[?][\\s\\S]*?[?]>",Wd="]*>",Gd="",Kd=new RegExp("^(?:"+ul+"|"+hl+"|"+jd+"|"+Vd+"|"+Wd+"|"+Gd+")"),Zd=new RegExp("^(?:"+ul+"|"+hl+")");eo.exports.HTML_TAG_RE=Kd;eo.exports.HTML_OPEN_CLOSE_TAG_RE=Zd});var pl=_((pv,dl)=>{"use strict";var Xd=cl(),Yd=no().HTML_OPEN_CLOSE_TAG_RE,we=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(Yd.source+"\\s*$"),/^$/,!1]];dl.exports=function(t,e,i,r){var o,s,a,l,c=t.bMarks[e]+t.tShift[e],u=t.eMarks[e];if(t.sCount[e]-t.blkIndent>=4||!t.md.options.html||t.src.charCodeAt(c)!==60)return!1;for(l=t.src.slice(c,u),o=0;o{"use strict";var fl=N().isSpace;ml.exports=function(t,e,i,r){var o,s,a,l,c=t.bMarks[e]+t.tShift[e],u=t.eMarks[e];if(t.sCount[e]-t.blkIndent>=4||(o=t.src.charCodeAt(c),o!==35||c>=u))return!1;for(s=1,o=t.src.charCodeAt(++c);o===35&&c6||cc&&fl(t.src.charCodeAt(a-1))&&(u=a),t.line=e+1,l=t.push("heading_open","h"+String(s),1),l.markup="########".slice(0,s),l.map=[e,t.line],l=t.push("inline","",0),l.content=t.src.slice(c,u).trim(),l.map=[e,t.line],l.children=[],l=t.push("heading_close","h"+String(s),-1),l.markup="########".slice(0,s)),!0)}});var vl=_((mv,bl)=>{"use strict";bl.exports=function(t,e,i){var r,o,s,a,l,c,u,h,d,f=e+1,p,m=t.md.block.ruler.getRules("paragraph");if(t.sCount[e]-t.blkIndent>=4)return!1;for(p=t.parentType,t.parentType="paragraph";f3)){if(t.sCount[f]>=t.blkIndent&&(c=t.bMarks[f]+t.tShift[f],u=t.eMarks[f],c=u)))){h=d===61?1:2;break}if(!(t.sCount[f]<0)){for(o=!1,s=0,a=m.length;s{"use strict";wl.exports=function(t,e,i){var r,o,s,a,l,c,u=e+1,h=t.md.block.ruler.getRules("paragraph");for(c=t.parentType,t.parentType="paragraph";u3)&&!(t.sCount[u]<0)){for(o=!1,s=0,a=h.length;s{"use strict";var xl=di(),fi=N().isSpace;function Lt(n,t,e,i){var r,o,s,a,l,c,u,h;for(this.src=n,this.md=t,this.env=e,this.tokens=i,this.bMarks=[],this.eMarks=[],this.tShift=[],this.sCount=[],this.bsCount=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.ddIndent=-1,this.listIndent=-1,this.parentType="root",this.level=0,this.result="",o=this.src,h=!1,s=a=c=u=0,l=o.length;a0&&this.level++,this.tokens.push(i),i};Lt.prototype.isEmpty=function(t){return this.bMarks[t]+this.tShift[t]>=this.eMarks[t]};Lt.prototype.skipEmptyLines=function(t){for(var e=this.lineMax;te;)if(!fi(this.src.charCodeAt(--t)))return t+1;return t};Lt.prototype.skipChars=function(t,e){for(var i=this.src.length;ti;)if(e!==this.src.charCodeAt(--t))return t+1;return t};Lt.prototype.getLines=function(t,e,i,r){var o,s,a,l,c,u,h,d=t;if(t>=e)return"";for(u=new Array(e-t),o=0;di?u[o]=new Array(s-i+1).join(" ")+this.src.slice(l,c):u[o]=this.src.slice(l,c)}return u.join("")};Lt.prototype.Token=xl;kl.exports=Lt});var _l=_((vv,El)=>{"use strict";var Jd=ui(),mi=[["table",Wa(),["paragraph","reference"]],["code",Ka()],["fence",Xa(),["paragraph","reference","blockquote","list"]],["blockquote",Ja(),["paragraph","reference","blockquote","list"]],["hr",tl(),["paragraph","reference","blockquote","list"]],["list",ol(),["paragraph","reference","blockquote"]],["reference",al()],["html_block",pl(),["paragraph","reference","blockquote"]],["heading",gl(),["paragraph","reference","blockquote"]],["lheading",vl()],["paragraph",yl()]];function gi(){this.ruler=new Jd;for(var n=0;n=e||n.sCount[l]=u){n.line=e;break}for(o=n.line,r=0;r=n.line)throw new Error("block rule didn't increment state.line");break}if(!i)throw new Error("none of the block rules matched");n.tight=!c,n.isEmpty(n.line-1)&&(c=!0),l=n.line,l{"use strict";function Qd(n){switch(n){case 10:case 33:case 35:case 36:case 37:case 38:case 42:case 43:case 45:case 58:case 60:case 61:case 62:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 125:case 126:return!0;default:return!1}}Sl.exports=function(t,e){for(var i=t.pos;i{"use strict";var tp=/(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;Dl.exports=function(t,e){var i,r,o,s,a,l,c,u;return!t.md.options.linkify||t.linkLevel>0||(i=t.pos,r=t.posMax,i+3>r)||t.src.charCodeAt(i)!==58||t.src.charCodeAt(i+1)!==47||t.src.charCodeAt(i+2)!==47||(o=t.pending.match(tp),!o)||(s=o[1],a=t.md.linkify.matchAtStart(t.src.slice(i-s.length)),!a)||(l=a.url,l.length<=s.length)||(l=l.replace(/\*+$/,""),c=t.md.normalizeLink(l),!t.md.validateLink(c))?!1:(e||(t.pending=t.pending.slice(0,-s.length),u=t.push("link_open","a",1),u.attrs=[["href",c]],u.markup="linkify",u.info="auto",u=t.push("text","",0),u.content=t.md.normalizeLinkText(l),u=t.push("link_close","a",-1),u.markup="linkify",u.info="auto"),t.pos+=l.length-s.length,!0)}});var $l=_((xv,Tl)=>{"use strict";var ep=N().isSpace;Tl.exports=function(t,e){var i,r,o,s=t.pos;if(t.src.charCodeAt(s)!==10)return!1;if(i=t.pending.length-1,r=t.posMax,!e)if(i>=0&&t.pending.charCodeAt(i)===32)if(i>=1&&t.pending.charCodeAt(i-1)===32){for(o=i-1;o>=1&&t.pending.charCodeAt(o-1)===32;)o--;t.pending=t.pending.slice(0,o),t.push("hardbreak","br",0)}else t.pending=t.pending.slice(0,-1),t.push("softbreak","br",0);else t.push("softbreak","br",0);for(s++;s{"use strict";var np=N().isSpace,ro=[];for(io=0;io<256;io++)ro.push(0);var io;"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(n){ro[n.charCodeAt(0)]=1});Il.exports=function(t,e){var i,r,o,s,a,l=t.pos,c=t.posMax;if(t.src.charCodeAt(l)!==92||(l++,l>=c))return!1;if(i=t.src.charCodeAt(l),i===10){for(e||t.push("hardbreak","br",0),l++;l=55296&&i<=56319&&l+1=56320&&r<=57343&&(s+=t.src[l+1],l++)),o="\\"+s,e||(a=t.push("text_special","",0),i<256&&ro[i]!==0?a.content=s:a.content=o,a.markup=o,a.info="escape"),t.pos=l+1,!0}});var ql=_((Cv,Fl)=>{"use strict";Fl.exports=function(t,e){var i,r,o,s,a,l,c,u,h=t.pos,d=t.src.charCodeAt(h);if(d!==96)return!1;for(i=h,h++,r=t.posMax;h{"use strict";oo.exports.tokenize=function(t,e){var i,r,o,s,a,l=t.pos,c=t.src.charCodeAt(l);if(e||c!==126||(r=t.scanDelims(t.pos,!0),s=r.length,a=String.fromCharCode(c),s<2))return!1;for(s%2&&(o=t.push("text","",0),o.content=a,s--),i=0;i{"use strict";ao.exports.tokenize=function(t,e){var i,r,o,s=t.pos,a=t.src.charCodeAt(s);if(e||a!==95&&a!==42)return!1;for(r=t.scanDelims(t.pos,a===42),i=0;i=0;e--)i=t[e],!(i.marker!==95&&i.marker!==42)&&i.end!==-1&&(r=t[i.end],a=e>0&&t[e-1].end===i.end+1&&t[e-1].marker===i.marker&&t[e-1].token===i.token-1&&t[i.end+1].token===r.token+1,s=String.fromCharCode(i.marker),o=n.tokens[i.token],o.type=a?"strong_open":"em_open",o.tag=a?"strong":"em",o.nesting=1,o.markup=a?s+s:s,o.content="",o=n.tokens[r.token],o.type=a?"strong_close":"em_close",o.tag=a?"strong":"em",o.nesting=-1,o.markup=a?s+s:s,o.content="",a&&(n.tokens[t[e-1].token].content="",n.tokens[t[i.end+1].token].content="",e--))}ao.exports.postProcess=function(t){var e,i=t.tokens_meta,r=t.tokens_meta.length;for(Pl(t,t.delimiters),e=0;e{"use strict";var ip=N().normalizeReference,co=N().isSpace;Ol.exports=function(t,e){var i,r,o,s,a,l,c,u,h,d="",f="",p=t.pos,m=t.posMax,w=t.pos,v=!0;if(t.src.charCodeAt(t.pos)!==91||(a=t.pos+1,s=t.md.helpers.parseLinkLabel(t,t.pos,!0),s<0))return!1;if(l=s+1,l=m)return!1;if(w=l,c=t.md.helpers.parseLinkDestination(t.src,l,t.posMax),c.ok){for(d=t.md.normalizeLink(c.str),t.md.validateLink(d)?l=c.pos:d="",w=l;l=m||t.src.charCodeAt(l)!==41)&&(v=!0),l++}if(v){if(typeof t.env.references>"u")return!1;if(l=0?o=t.src.slice(w,l++):l=s+1):l=s+1,o||(o=t.src.slice(a,s)),u=t.env.references[ip(o)],!u)return t.pos=p,!1;d=u.href,f=u.title}return e||(t.pos=a,t.posMax=s,h=t.push("link_open","a",1),h.attrs=i=[["href",d]],f&&i.push(["title",f]),t.linkLevel++,t.md.inline.tokenize(t),t.linkLevel--,h=t.push("link_close","a",-1)),t.pos=l,t.posMax=m,!0}});var zl=_((Av,Nl)=>{"use strict";var rp=N().normalizeReference,uo=N().isSpace;Nl.exports=function(t,e){var i,r,o,s,a,l,c,u,h,d,f,p,m,w="",v=t.pos,b=t.posMax;if(t.src.charCodeAt(t.pos)!==33||t.src.charCodeAt(t.pos+1)!==91||(l=t.pos+2,a=t.md.helpers.parseLinkLabel(t,t.pos+1,!1),a<0))return!1;if(c=a+1,c=b)return!1;for(m=c,h=t.md.helpers.parseLinkDestination(t.src,c,t.posMax),h.ok&&(w=t.md.normalizeLink(h.str),t.md.validateLink(w)?c=h.pos:w=""),m=c;c=b||t.src.charCodeAt(c)!==41)return t.pos=v,!1;c++}else{if(typeof t.env.references>"u")return!1;if(c=0?s=t.src.slice(m,c++):c=a+1):c=a+1,s||(s=t.src.slice(l,a)),u=t.env.references[rp(s)],!u)return t.pos=v,!1;w=u.href,d=u.title}return e||(o=t.src.slice(l,a),t.md.inline.parse(o,t.md,t.env,p=[]),f=t.push("image","img",0),f.attrs=i=[["src",w],["alt",""]],f.children=p,f.content=o,d&&i.push(["title",d])),t.pos=c,t.posMax=b,!0}});var Ul=_((Dv,Hl)=>{"use strict";var op=/^([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/,sp=/^([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)$/;Hl.exports=function(t,e){var i,r,o,s,a,l,c=t.pos;if(t.src.charCodeAt(c)!==60)return!1;for(a=t.pos,l=t.posMax;;){if(++c>=l||(s=t.src.charCodeAt(c),s===60))return!1;if(s===62)break}return i=t.src.slice(a+1,c),sp.test(i)?(r=t.md.normalizeLink(i),t.md.validateLink(r)?(e||(o=t.push("link_open","a",1),o.attrs=[["href",r]],o.markup="autolink",o.info="auto",o=t.push("text","",0),o.content=t.md.normalizeLinkText(i),o=t.push("link_close","a",-1),o.markup="autolink",o.info="auto"),t.pos+=i.length+2,!0):!1):op.test(i)?(r=t.md.normalizeLink("mailto:"+i),t.md.validateLink(r)?(e||(o=t.push("link_open","a",1),o.attrs=[["href",r]],o.markup="autolink",o.info="auto",o=t.push("text","",0),o.content=t.md.normalizeLinkText(i),o=t.push("link_close","a",-1),o.markup="autolink",o.info="auto"),t.pos+=i.length+2,!0):!1):!1}});var Vl=_((Lv,jl)=>{"use strict";var ap=no().HTML_TAG_RE;function lp(n){return/^\s]/i.test(n)}function cp(n){return/^<\/a\s*>/i.test(n)}function up(n){var t=n|32;return t>=97&&t<=122}jl.exports=function(t,e){var i,r,o,s,a=t.pos;return!t.md.options.html||(o=t.posMax,t.src.charCodeAt(a)!==60||a+2>=o)||(i=t.src.charCodeAt(a+1),i!==33&&i!==63&&i!==47&&!up(i))||(r=t.src.slice(a).match(ap),!r)?!1:(e||(s=t.push("html_inline","",0),s.content=r[0],lp(s.content)&&t.linkLevel++,cp(s.content)&&t.linkLevel--),t.pos+=r[0].length,!0)}});var Zl=_((Tv,Kl)=>{"use strict";var Wl=Wr(),hp=N().has,dp=N().isValidEntityCode,Gl=N().fromCodePoint,pp=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,fp=/^&([a-z][a-z0-9]{1,31});/i;Kl.exports=function(t,e){var i,r,o,s,a=t.pos,l=t.posMax;if(t.src.charCodeAt(a)!==38||a+1>=l)return!1;if(i=t.src.charCodeAt(a+1),i===35){if(o=t.src.slice(a).match(pp),o)return e||(r=o[1][0].toLowerCase()==="x"?parseInt(o[1].slice(1),16):parseInt(o[1],10),s=t.push("text_special","",0),s.content=dp(r)?Gl(r):Gl(65533),s.markup=o[0],s.info="entity"),t.pos+=o[0].length,!0}else if(o=t.src.slice(a).match(fp),o&&hp(Wl,o[1]))return e||(s=t.push("text_special","",0),s.content=Wl[o[1]],s.markup=o[0],s.info="entity"),t.pos+=o[0].length,!0;return!1}});var Jl=_(($v,Yl)=>{"use strict";function Xl(n){var t,e,i,r,o,s,a,l,c={},u=n.length;if(u){var h=0,d=-2,f=[];for(t=0;to;e-=f[e]+1)if(r=n[e],r.marker===i.marker&&r.open&&r.end<0&&(a=!1,(r.close||i.open)&&(r.length+i.length)%3===0&&(r.length%3!==0||i.length%3!==0)&&(a=!0),!a)){l=e>0&&!n[e-1].open?f[e-1]+1:0,f[t]=t-e+l,f[e]=l,i.open=!1,r.end=t,r.close=!1,s=-1,d=-2;break}s!==-1&&(c[i.marker][(i.open?3:0)+(i.length||0)%3]=s)}}}Yl.exports=function(t){var e,i=t.tokens_meta,r=t.tokens_meta.length;for(Xl(t.delimiters),e=0;e{"use strict";Ql.exports=function(t){var e,i,r=0,o=t.tokens,s=t.tokens.length;for(e=i=0;e0&&r++,o[e].type==="text"&&e+1{"use strict";var ho=di(),ec=N().isWhiteSpace,nc=N().isPunctChar,ic=N().isMdAsciiPunct;function Ze(n,t,e,i){this.src=n,this.env=e,this.md=t,this.tokens=i,this.tokens_meta=Array(i.length),this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache={},this.delimiters=[],this._prev_delimiters=[],this.backticks={},this.backticksScanned=!1,this.linkLevel=0}Ze.prototype.pushPending=function(){var n=new ho("text","",0);return n.content=this.pending,n.level=this.pendingLevel,this.tokens.push(n),this.pending="",n};Ze.prototype.push=function(n,t,e){this.pending&&this.pushPending();var i=new ho(n,t,e),r=null;return e<0&&(this.level--,this.delimiters=this._prev_delimiters.pop()),i.level=this.level,e>0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],r={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(i),this.tokens_meta.push(r),i};Ze.prototype.scanDelims=function(n,t){var e=n,i,r,o,s,a,l,c,u,h,d=!0,f=!0,p=this.posMax,m=this.src.charCodeAt(n);for(i=n>0?this.src.charCodeAt(n-1):32;e{"use strict";var sc=ui(),po=[["text",Al()],["linkify",Ll()],["newline",$l()],["escape",Ml()],["backticks",ql()],["strikethrough",so().tokenize],["emphasis",lo().tokenize],["link",Rl()],["image",zl()],["autolink",Ul()],["html_inline",Vl()],["entity",Zl()]],fo=[["balance_pairs",Jl()],["strikethrough",so().postProcess],["emphasis",lo().postProcess],["fragments_join",tc()]];function Xe(){var n;for(this.ruler=new sc,n=0;n=n.pos)throw new Error("inline rule didn't increment state.pos");break}}else n.pos=n.posMax;t||n.pos++,a[i]=n.pos};Xe.prototype.tokenize=function(n){for(var t,e,i,r=this.ruler.getRules(""),o=r.length,s=n.posMax,a=n.md.options.maxNesting;n.pos=n.pos)throw new Error("inline rule didn't increment state.pos");break}}if(t){if(n.pos>=s)break;continue}n.pending+=n.src[n.pos++]}n.pending&&n.pushPending()};Xe.prototype.parse=function(n,t,e,i){var r,o,s,a=new this.State(n,t,e,i);for(this.tokenize(a),o=this.ruler2.getRules(""),s=o.length,r=0;r{"use strict";cc.exports=function(n){var t={};n=n||{},t.src_Any=Kr().source,t.src_Cc=Zr().source,t.src_Z=Xr().source,t.src_P=oi().source,t.src_ZPCc=[t.src_Z,t.src_P,t.src_Cc].join("|"),t.src_ZCc=[t.src_Z,t.src_Cc].join("|");var e="[><\uFF5C]";return t.src_pseudo_letter="(?:(?!"+e+"|"+t.src_ZPCc+")"+t.src_Any+")",t.src_ip4="(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",t.src_auth="(?:(?:(?!"+t.src_ZCc+"|[@/\\[\\]()]).)+@)?",t.src_port="(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?",t.src_host_terminator="(?=$|"+e+"|"+t.src_ZPCc+")(?!"+(n["---"]?"-(?!--)|":"-|")+"_|:\\d|\\.-|\\.(?!$|"+t.src_ZPCc+"))",t.src_path="(?:[/?#](?:(?!"+t.src_ZCc+"|"+e+`|[()[\\]{}.,"'?!\\-;]).|\\[(?:(?!`+t.src_ZCc+"|\\]).)*\\]|\\((?:(?!"+t.src_ZCc+"|[)]).)*\\)|\\{(?:(?!"+t.src_ZCc+'|[}]).)*\\}|\\"(?:(?!'+t.src_ZCc+`|["]).)+\\"|\\'(?:(?!`+t.src_ZCc+"|[']).)+\\'|\\'(?="+t.src_pseudo_letter+"|[-])|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!"+t.src_ZCc+"|[.]|$)|"+(n["---"]?"\\-(?!--(?:[^-]|$))(?:-*)|":"\\-+|")+",(?!"+t.src_ZCc+"|$)|;(?!"+t.src_ZCc+"|$)|\\!+(?!"+t.src_ZCc+"|[!]|$)|\\?(?!"+t.src_ZCc+"|[?]|$))+|\\/)?",t.src_email_name='[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*',t.src_xn="xn--[a-z0-9\\-]{1,59}",t.src_domain_root="(?:"+t.src_xn+"|"+t.src_pseudo_letter+"{1,63})",t.src_domain="(?:"+t.src_xn+"|(?:"+t.src_pseudo_letter+")|(?:"+t.src_pseudo_letter+"(?:-|"+t.src_pseudo_letter+"){0,61}"+t.src_pseudo_letter+"))",t.src_host="(?:(?:(?:(?:"+t.src_domain+")\\.)*"+t.src_domain+"))",t.tpl_host_fuzzy="(?:"+t.src_ip4+"|(?:(?:(?:"+t.src_domain+")\\.)+(?:%TLDS%)))",t.tpl_host_no_ip_fuzzy="(?:(?:(?:"+t.src_domain+")\\.)+(?:%TLDS%))",t.src_host_strict=t.src_host+t.src_host_terminator,t.tpl_host_fuzzy_strict=t.tpl_host_fuzzy+t.src_host_terminator,t.src_host_port_strict=t.src_host+t.src_port+t.src_host_terminator,t.tpl_host_port_fuzzy_strict=t.tpl_host_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_port_no_ip_fuzzy_strict=t.tpl_host_no_ip_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_fuzzy_test="localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:"+t.src_ZPCc+"|>|$))",t.tpl_email_fuzzy="(^|"+e+'|"|\\(|'+t.src_ZCc+")("+t.src_email_name+"@"+t.tpl_host_fuzzy_strict+")",t.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+t.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+t.tpl_host_port_fuzzy_strict+t.src_path+")",t.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+t.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+")",t}});var mc=_((Bv,fc)=>{"use strict";function mo(n){var t=Array.prototype.slice.call(arguments,1);return t.forEach(function(e){e&&Object.keys(e).forEach(function(i){n[i]=e[i]})}),n}function vi(n){return Object.prototype.toString.call(n)}function mp(n){return vi(n)==="[object String]"}function gp(n){return vi(n)==="[object Object]"}function bp(n){return vi(n)==="[object RegExp]"}function hc(n){return vi(n)==="[object Function]"}function vp(n){return n.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}var pc={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};function wp(n){return Object.keys(n||{}).reduce(function(t,e){return t||pc.hasOwnProperty(e)},!1)}var yp={"http:":{validate:function(n,t,e){var i=n.slice(t);return e.re.http||(e.re.http=new RegExp("^\\/\\/"+e.re.src_auth+e.re.src_host_port_strict+e.re.src_path,"i")),e.re.http.test(i)?i.match(e.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(n,t,e){var i=n.slice(t);return e.re.no_http||(e.re.no_http=new RegExp("^"+e.re.src_auth+"(?:localhost|(?:(?:"+e.re.src_domain+")\\.)+"+e.re.src_domain_root+")"+e.re.src_port+e.re.src_host_terminator+e.re.src_path,"i")),e.re.no_http.test(i)?t>=3&&n[t-3]===":"||t>=3&&n[t-3]==="/"?0:i.match(e.re.no_http)[0].length:0}},"mailto:":{validate:function(n,t,e){var i=n.slice(t);return e.re.mailto||(e.re.mailto=new RegExp("^"+e.re.src_email_name+"@"+e.re.src_host_strict,"i")),e.re.mailto.test(i)?i.match(e.re.mailto)[0].length:0}}},xp="a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]",kp="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|");function Cp(n){n.__index__=-1,n.__text_cache__=""}function Ep(n){return function(t,e){var i=t.slice(e);return n.test(i)?i.match(n)[0].length:0}}function dc(){return function(n,t){t.normalize(n)}}function bi(n){var t=n.re=uc()(n.__opts__),e=n.__tlds__.slice();n.onCompile(),n.__tlds_replaced__||e.push(xp),e.push(t.src_xn),t.src_tlds=e.join("|");function i(a){return a.replace("%TLDS%",t.src_tlds)}t.email_fuzzy=RegExp(i(t.tpl_email_fuzzy),"i"),t.link_fuzzy=RegExp(i(t.tpl_link_fuzzy),"i"),t.link_no_ip_fuzzy=RegExp(i(t.tpl_link_no_ip_fuzzy),"i"),t.host_fuzzy_test=RegExp(i(t.tpl_host_fuzzy_test),"i");var r=[];n.__compiled__={};function o(a,l){throw new Error('(LinkifyIt) Invalid schema "'+a+'": '+l)}Object.keys(n.__schemas__).forEach(function(a){var l=n.__schemas__[a];if(l!==null){var c={validate:null,link:null};if(n.__compiled__[a]=c,gp(l)){bp(l.validate)?c.validate=Ep(l.validate):hc(l.validate)?c.validate=l.validate:o(a,l),hc(l.normalize)?c.normalize=l.normalize:l.normalize?o(a,l):c.normalize=dc();return}if(mp(l)){r.push(a);return}o(a,l)}}),r.forEach(function(a){n.__compiled__[n.__schemas__[a]]&&(n.__compiled__[a].validate=n.__compiled__[n.__schemas__[a]].validate,n.__compiled__[a].normalize=n.__compiled__[n.__schemas__[a]].normalize)}),n.__compiled__[""]={validate:null,normalize:dc()};var s=Object.keys(n.__compiled__).filter(function(a){return a.length>0&&n.__compiled__[a]}).map(vp).join("|");n.re.schema_test=RegExp("(^|(?!_)(?:[><\uFF5C]|"+t.src_ZPCc+"))("+s+")","i"),n.re.schema_search=RegExp("(^|(?!_)(?:[><\uFF5C]|"+t.src_ZPCc+"))("+s+")","ig"),n.re.schema_at_start=RegExp("^"+n.re.schema_search.source,"i"),n.re.pretest=RegExp("("+n.re.schema_test.source+")|("+n.re.host_fuzzy_test.source+")|@","i"),Cp(n)}function _p(n,t){var e=n.__index__,i=n.__last_index__,r=n.__text_cache__.slice(e,i);this.schema=n.__schema__.toLowerCase(),this.index=e+t,this.lastIndex=i+t,this.raw=r,this.text=r,this.url=r}function go(n,t){var e=new _p(n,t);return n.__compiled__[e.schema].normalize(e,n),e}function gt(n,t){if(!(this instanceof gt))return new gt(n,t);t||wp(n)&&(t=n,n={}),this.__opts__=mo({},pc,t),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=mo({},yp,n),this.__compiled__={},this.__tlds__=kp,this.__tlds_replaced__=!1,this.re={},bi(this)}gt.prototype.add=function(t,e){return this.__schemas__[t]=e,bi(this),this};gt.prototype.set=function(t){return this.__opts__=mo(this.__opts__,t),this};gt.prototype.test=function(t){if(this.__text_cache__=t,this.__index__=-1,!t.length)return!1;var e,i,r,o,s,a,l,c,u;if(this.re.schema_test.test(t)){for(l=this.re.schema_search,l.lastIndex=0;(e=l.exec(t))!==null;)if(o=this.testSchemaAt(t,e[2],l.lastIndex),o){this.__schema__=e[2],this.__index__=e.index+e[1].length,this.__last_index__=e.index+e[0].length+o;break}}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(c=t.search(this.re.host_fuzzy_test),c>=0&&(this.__index__<0||c=0&&(r=t.match(this.re.email_fuzzy))!==null&&(s=r.index+r[1].length,a=r.index+r[0].length,(this.__index__<0||sthis.__last_index__)&&(this.__schema__="mailto:",this.__index__=s,this.__last_index__=a))),this.__index__>=0};gt.prototype.pretest=function(t){return this.re.pretest.test(t)};gt.prototype.testSchemaAt=function(t,e,i){return this.__compiled__[e.toLowerCase()]?this.__compiled__[e.toLowerCase()].validate(t,i,this):0};gt.prototype.match=function(t){var e=0,i=[];this.__index__>=0&&this.__text_cache__===t&&(i.push(go(this,e)),e=this.__last_index__);for(var r=e?t.slice(e):t;this.test(r);)i.push(go(this,e)),r=r.slice(this.__last_index__),e+=this.__last_index__;return i.length?i:null};gt.prototype.matchAtStart=function(t){if(this.__text_cache__=t,this.__index__=-1,!t.length)return null;var e=this.re.schema_at_start.exec(t);if(!e)return null;var i=this.testSchemaAt(t,e[2],e[0].length);return i?(this.__schema__=e[2],this.__index__=e.index+e[1].length,this.__last_index__=e.index+e[0].length+i,go(this,0)):null};gt.prototype.tlds=function(t,e){return t=Array.isArray(t)?t:[t],e?(this.__tlds__=this.__tlds__.concat(t).sort().filter(function(i,r,o){return i!==o[r-1]}).reverse(),bi(this),this):(this.__tlds__=t.slice(),this.__tlds_replaced__=!0,bi(this),this)};gt.prototype.normalize=function(t){t.schema||(t.url="http://"+t.url),t.schema==="mailto:"&&!/^mailto:/i.test(t.url)&&(t.url="mailto:"+t.url)};gt.prototype.onCompile=function(){};fc.exports=gt});var Cc={};Se(Cc,{decode:()=>yo,default:()=>Mp,encode:()=>xo,toASCII:()=>kc,toUnicode:()=>xc,ucs2decode:()=>wo,ucs2encode:()=>wc});function Vt(n){throw new RangeError(Lp[n])}function Tp(n,t){let e=[],i=n.length;for(;i--;)e[i]=t(n[i]);return e}function vc(n,t){let e=n.split("@"),i="";e.length>1&&(i=e[0]+"@",n=e[1]),n=n.replace(Dp,".");let r=n.split("."),o=Tp(r,t).join(".");return i+o}function wo(n){let t=[],e=0,i=n.length;for(;e=55296&&r<=56319&&e{"use strict";bc="-",Sp=/^xn--/,Ap=/[^\0-\x7F]/,Dp=/[\x2E\u3002\uFF0E\uFF61]/g,Lp={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},bo=36-1,Tt=Math.floor,vo=String.fromCharCode;wc=n=>String.fromCodePoint(...n),$p=function(n){return n>=48&&n<58?26+(n-48):n>=65&&n<91?n-65:n>=97&&n<123?n-97:36},gc=function(n,t){return n+22+75*(n<26)-((t!=0)<<5)},yc=function(n,t,e){let i=0;for(n=e?Tt(n/700):n>>1,n+=Tt(n/t);n>bo*26>>1;i+=36)n=Tt(n/bo);return Tt(i+(bo+1)*n/(n+38))},yo=function(n){let t=[],e=n.length,i=0,r=128,o=72,s=n.lastIndexOf(bc);s<0&&(s=0);for(let a=0;a=128&&Vt("not-basic"),t.push(n.charCodeAt(a));for(let a=s>0?s+1:0;a=e&&Vt("invalid-input");let d=$p(n.charCodeAt(a++));d>=36&&Vt("invalid-input"),d>Tt((2147483647-i)/u)&&Vt("overflow"),i+=d*u;let f=h<=o?1:h>=o+26?26:h-o;if(dTt(2147483647/p)&&Vt("overflow"),u*=p}let c=t.length+1;o=yc(i-l,c,l==0),Tt(i/c)>2147483647-r&&Vt("overflow"),r+=Tt(i/c),i%=c,t.splice(i++,0,r)}return String.fromCodePoint(...t)},xo=function(n){let t=[];n=wo(n);let e=n.length,i=128,r=0,o=72;for(let l of n)l<128&&t.push(vo(l));let s=t.length,a=s;for(s&&t.push(bc);a=i&&uTt((2147483647-r)/c)&&Vt("overflow"),r+=(l-i)*c,i=l;for(let u of n)if(u2147483647&&Vt("overflow"),u===i){let h=r;for(let d=36;;d+=36){let f=d<=o?1:d>=o+26?26:d-o;if(h{"use strict";_c.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201C\u201D\u2018\u2019",highlight:null,maxNesting:100},components:{core:{},block:{},inline:{}}}});var Dc=_((Ov,Ac)=>{"use strict";Ac.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201C\u201D\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline","text_join"]},block:{rules:["paragraph"]},inline:{rules:["text"],rules2:["balance_pairs","fragments_join"]}}}});var Tc=_((Rv,Lc)=>{"use strict";Lc.exports={options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201C\u201D\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline","text_join"]},block:{rules:["blockquote","code","fence","heading","hr","html_block","lheading","list","reference","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","html_inline","image","link","newline","text"],rules2:["balance_pairs","emphasis","fragments_join"]}}}});var Fc=_((Nv,Mc)=>{"use strict";var Ye=N(),Fp=fa(),qp=ga(),Bp=Ua(),Pp=_l(),Op=lc(),Rp=mc(),Qt=Gr(),$c=(Ec(),Bu(Cc)),Np={default:Sc(),zero:Dc(),commonmark:Tc()},zp=/^(vbscript|javascript|file|data):/,Hp=/^data:image\/(gif|png|jpeg|webp);/;function Up(n){var t=n.trim().toLowerCase();return zp.test(t)?!!Hp.test(t):!0}var Ic=["http:","https:","mailto:"];function jp(n){var t=Qt.parse(n,!0);if(t.hostname&&(!t.protocol||Ic.indexOf(t.protocol)>=0))try{t.hostname=$c.toASCII(t.hostname)}catch{}return Qt.encode(Qt.format(t))}function Vp(n){var t=Qt.parse(n,!0);if(t.hostname&&(!t.protocol||Ic.indexOf(t.protocol)>=0))try{t.hostname=$c.toUnicode(t.hostname)}catch{}return Qt.decode(Qt.format(t),Qt.decode.defaultChars+"%")}function bt(n,t){if(!(this instanceof bt))return new bt(n,t);t||Ye.isString(n)||(t=n||{},n="default"),this.inline=new Op,this.block=new Pp,this.core=new Bp,this.renderer=new qp,this.linkify=new Rp,this.validateLink=Up,this.normalizeLink=jp,this.normalizeLinkText=Vp,this.utils=Ye,this.helpers=Ye.assign({},Fp),this.options={},this.configure(n),t&&this.set(t)}bt.prototype.set=function(n){return Ye.assign(this.options,n),this};bt.prototype.configure=function(n){var t=this,e;if(Ye.isString(n)&&(e=n,n=Np[e],!n))throw new Error('Wrong `markdown-it` preset "'+e+'", check name');if(!n)throw new Error("Wrong `markdown-it` preset, can't be empty");return n.options&&t.set(n.options),n.components&&Object.keys(n.components).forEach(function(i){n.components[i].rules&&t[i].ruler.enableOnly(n.components[i].rules),n.components[i].rules2&&t[i].ruler2.enableOnly(n.components[i].rules2)}),this};bt.prototype.enable=function(n,t){var e=[];Array.isArray(n)||(n=[n]),["core","block","inline"].forEach(function(r){e=e.concat(this[r].ruler.enable(n,!0))},this),e=e.concat(this.inline.ruler2.enable(n,!0));var i=n.filter(function(r){return e.indexOf(r)<0});if(i.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+i);return this};bt.prototype.disable=function(n,t){var e=[];Array.isArray(n)||(n=[n]),["core","block","inline"].forEach(function(r){e=e.concat(this[r].ruler.disable(n,!0))},this),e=e.concat(this.inline.ruler2.disable(n,!0));var i=n.filter(function(r){return e.indexOf(r)<0});if(i.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+i);return this};bt.prototype.use=function(n){var t=[this].concat(Array.prototype.slice.call(arguments,1));return n.apply(n,t),this};bt.prototype.parse=function(n,t){if(typeof n!="string")throw new Error("Input data should be a String");var e=new this.core.State(n,this,t);return this.core.process(e),e.tokens};bt.prototype.render=function(n,t){return t=t||{},this.renderer.render(this.parse(n,t),this.options,t)};bt.prototype.parseInline=function(n,t){var e=new this.core.State(n,this,t);return e.inlineMode=!0,this.core.process(e),e.tokens};bt.prototype.renderInline=function(n,t){return t=t||{},this.renderer.render(this.parseInline(n,t),this.options,t)};Mc.exports=bt});var Bc=_((zv,qc)=>{"use strict";qc.exports=Fc()});var zc=_((Hv,Nc)=>{var ko=!0,Oc=!1,Rc=!1;Nc.exports=function(n,t){t&&(ko=!t.enabled,Oc=!!t.label,Rc=!!t.labelAfter),n.core.ruler.after("inline","github-task-lists",function(e){for(var i=e.tokens,r=2;r=0;i--)if(n[i].level===e)return i;return-1}function Gp(n,t){return Qp(n[t])&&tf(n[t-1])&&ef(n[t-2])&&nf(n[t])}function Kp(n,t){if(n.children.unshift(Zp(n,t)),n.children[1].content=n.children[1].content.slice(3),n.content=n.content.slice(3),Oc)if(Rc){n.children.pop();var e="task-item-"+Math.ceil(Math.random()*(1e4*1e3)-1e3);n.children[0].content=n.children[0].content.slice(0,-1)+' id="'+e+'">',n.children.push(Jp(n.content,e,t))}else n.children.unshift(Xp(t)),n.children.push(Yp(t))}function Zp(n,t){var e=new t("html_inline","",0),i=ko?' disabled="" ':"";return n.content.indexOf("[ ] ")===0?e.content='':(n.content.indexOf("[x] ")===0||n.content.indexOf("[X] ")===0)&&(e.content=''),e}function Xp(n){var t=new n("html_inline","",0);return t.content="",t}function Jp(n,t,e){var i=new e("html_inline","",0);return i.content='",i.attrs=[{for:t}],i}function Qp(n){return n.type==="inline"}function tf(n){return n.type==="paragraph_open"}function ef(n){return n.type==="list_item_open"}function nf(n){return n.content.indexOf("[ ] ")===0||n.content.indexOf("[x] ")===0||n.content.indexOf("[X] ")===0}});var dr={};Se(dr,{emit:()=>ur,emitPublic:()=>Nu,error:()=>hr,listen:()=>Ru,showResponseError:()=>Uu,showValidationErrors:()=>Hu,success:()=>zu});var on={},Ou=[];function ur(n,t){Ou.push({name:n,data:t});let e=on[n]||[];for(let i of e)i(t)}function Ru(n,t){typeof on[n]>"u"&&(on[n]=[]),on[n].push(t)}function Nu(n,t,e){let i=new CustomEvent(t,{detail:e,bubbles:!0});n.dispatchEvent(i)}function zu(n){ur("success",n)}function hr(n){ur("error",n)}function Hu(n){if(n.status&&n.status===422&&n.data){let t=Object.values(n.data).flat().join(` +`);hr(t)}}function Uu(n){n.status&&n.status>=400&&n.data&&n.data.message&&hr(n.data.message)}var pr={};Se(pr,{HttpError:()=>sn,createXMLHttpRequest:()=>Vu,delete:()=>Xu,get:()=>Wu,patch:()=>Zu,post:()=>Gu,put:()=>Ku});async function ju(n){if(n.status===204)return null;let e=(n.headers.get("Content-Type")||"").split(";")[0].split("/").pop();return e==="javascript"||e==="json"?n.json():n.text()}var sn=class extends Error{constructor(t,e){super(t.statusText),this.data=e,this.headers=t.headers,this.redirected=t.redirected,this.status=t.status,this.statusText=t.statusText,this.url=t.url,this.original=t}};function Vu(n,t,e={}){let i=document.querySelector("meta[name=token]").getAttribute("content"),r=new XMLHttpRequest;for(let[o,s]of Object.entries(e))r.addEventListener(o,s.bind(r));return r.open(n,t),r.withCredentials=!0,r.setRequestHeader("X-CSRF-TOKEN",i),r}async function Go(n,t={}){let e=n;if(e.startsWith("http")||(e=window.baseUrl(e)),t.params){let l=new URL(e);for(let c of Object.keys(t.params)){let u=t.params[c];typeof u<"u"&&u!==null&&l.searchParams.set(c,u)}e=l.toString()}let i=document.querySelector("meta[name=token]").getAttribute("content"),r={...t,credentials:"same-origin"};r.headers={...r.headers||{},baseURL:window.baseUrl(""),"X-CSRF-TOKEN":i};let o=await fetch(e,r),s=await ju(o),a={data:s,headers:o.headers,redirected:o.redirected,status:o.status,statusText:o.statusText,url:o.url,original:o};if(!o.ok)throw new sn(o,s);return a}async function an(n,t,e=null){let i={method:n,body:e};return typeof e=="object"&&!(e instanceof FormData)&&(i.headers={"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},i.body=JSON.stringify(e)),e instanceof FormData&&n!=="post"&&(e.append("_method",n),i.method="post"),Go(t,i)}async function Wu(n,t={}){return Go(n,{method:"GET",params:t})}async function Gu(n,t=null){return an("POST",n,t)}async function Ku(n,t=null){return an("PUT",n,t)}async function Zu(n,t=null){return an("PATCH",n,t)}async function Xu(n,t=null){return an("DELETE",n,t)}var fr=class{constructor(){this.store=new Map,this.parseTranslations()}parseTranslations(){let t=document.querySelectorAll('meta[name="translation"]');for(let e of t){let i=e.getAttribute("key"),r=e.getAttribute("value");this.store.set(i,r)}}get(t,e){let i=this.getTransText(t);return this.performReplacements(i,e)}getPlural(t,e,i){let r=this.getTransText(t);return this.parsePlural(r,e,i)}parsePlural(t,e,i){let r=t.split("|"),o=/^{([0-9]+)}/,s=/^\[([0-9]+),([0-9*]+)]/,a=null;for(let l of r){let c=l.match(o);if(c!==null&&Number(c[1])===e){a=l.replace(o,"").trim();break}let u=l.match(s);if(u!==null&&Number(u[1])<=e&&(u[2]==="*"||Number(u[2])>=e)){a=l.replace(s,"").trim();break}}return a===null&&r.length>1&&(a=e===1?r[0]:r[1]),a===null&&(a=r[0]),this.performReplacements(a,i)}getTransText(t){let e=this.store.get(t);return e===void 0&&console.warn(`Translation with key "${t}" does not exist`),e}performReplacements(t,e){if(!e)return t;let i=t.match(/:(\S+)/g);if(i===null)return t;let r=t;return i.forEach(o=>{let s=o.substring(1);typeof e[s]>"u"||(r=r.replace(o,e[s]))}),r}},Ko=fr;var wr={};Se(wr,{first:()=>th,firstOnElement:()=>nh,get:()=>eh,init:()=>br,register:()=>vr});function mr(n){let t=i=>i.slice(0,1).toUpperCase()+i.slice(1),e=n.split("-");return e[0]+e.slice(1).map(t).join("")}function Zo(n){return n.replace(/[A-Z]/g,(t,e)=>(e>0?"-":"")+t.toLowerCase())}var Ae={},Xo={},gr=new WeakMap;function Yu(n,t){let e={},i={},r=`${n}@`,o=`[refs*="${r}"]`,s=[...t.querySelectorAll(o)];t.matches(o)&&s.push(t);for(let a of s){let l=a.getAttribute("refs").split(" ").filter(c=>c.startsWith(r)).map(c=>c.replace(r,"")).map(mr);for(let c of l)e[c]=a,typeof i[c]>"u"&&(i[c]=[]),i[c].push(a)}return{refs:e,manyRefs:i}}function Ju(n,t){let e={},i=`option:${n}:`;for(let{name:r,value:o}of t.attributes)if(r.startsWith(i)){let s=r.replace(i,"");e[mr(s)]=o||""}return e}function Qu(n,t){let e=Xo[n];if(e===void 0)return;let i;try{i=new e,i.$name=n,i.$el=t;let o=Yu(n,t);i.$refs=o.refs,i.$manyRefs=o.manyRefs,i.$opts=Ju(n,t),i.setup()}catch(o){console.error("Failed to create component",o,n,t)}typeof Ae[n]>"u"&&(Ae[n]=[]),Ae[n].push(i);let r=gr.get(t)||{};r[n]=i,gr.set(t,r)}function br(n=document){let t=n.querySelectorAll("[component],[components]");for(let e of t){let i=`${e.getAttribute("component")||""} ${e.getAttribute("components")}`.toLowerCase().split(" ").filter(Boolean);for(let r of i)Qu(r,e)}}function vr(n){let t=Object.keys(n);for(let e of t)Xo[Zo(e)]=n[e]}function th(n){return(Ae[n]||[null])[0]}function eh(n){return Ae[n]||[]}function nh(n,t){return(gr.get(n)||{})[t]||null}var Uo={};Se(Uo,{AddRemoveRows:()=>cn,AjaxDeleteRow:()=>un,AjaxForm:()=>hn,Attachments:()=>dn,AttachmentsList:()=>pn,AutoSubmit:()=>mn,AutoSuggest:()=>fn,BackToTop:()=>gn,BookSort:()=>Fn,ChapterContents:()=>Bn,CodeEditor:()=>Pn,CodeHighlighter:()=>On,CodeTextarea:()=>Rn,Collapsible:()=>Nn,ConfirmDialog:()=>zn,CustomCheckbox:()=>Hn,DetailsHighlighter:()=>Un,Dropdown:()=>jn,DropdownSearch:()=>Vn,Dropzone:()=>Wn,EditorToolbox:()=>Gn,EntityPermissions:()=>Kn,EntitySearch:()=>Zn,EntitySelector:()=>Xn,EntitySelectorPopup:()=>Yn,EventEmitSelect:()=>Jn,ExpandToggle:()=>Qn,GlobalSearch:()=>ti,HeaderMobileToggle:()=>ei,ImageManager:()=>ni,ImagePicker:()=>ii,ListSortControl:()=>ri,MarkdownEditor:()=>Mi,NewUserPassword:()=>Fi,Notification:()=>qi,OptionalInput:()=>Bi,PageComment:()=>Pi,PageComments:()=>Oi,PageDisplay:()=>Ri,PageEditor:()=>Ni,PagePicker:()=>Hi,PermissionsTable:()=>Ui,Pointer:()=>ji,Popup:()=>Vi,SettingAppColorScheme:()=>Wi,SettingColorPicker:()=>Gi,SettingHomepageControl:()=>Ki,ShelfSort:()=>Zi,ShortcutInput:()=>Yi,Shortcuts:()=>Xi,SortableList:()=>Ji,SubmitOnChange:()=>Qi,Tabs:()=>tr,TagManager:()=>er,TemplateManager:()=>nr,ToggleSwitch:()=>ir,TriLayout:()=>rr,UserSelect:()=>or,WebhookEvents:()=>sr,WysiwygEditor:()=>cr});function Et(n,t={},e=[]){let i=document.createElement(n);for(let[r,o]of Object.entries(t))o===null?i.removeAttribute(r):i.setAttribute(r,o);for(let r of e)typeof r=="string"?i.append(document.createTextNode(r)):i.append(r);return i}function yr(n,t){let e=document.querySelectorAll(n);for(let i of e)t(i)}function ln(n,t,e){for(let i of t)n.addEventListener(i,e)}function R(n,t){Array.isArray(n)||(n=[n]);for(let e of n)e.addEventListener("click",t),e.addEventListener("keydown",i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),t(i))})}function Yo(n,t,e){Array.isArray(t)||(t=[t]);let i=r=>{r.key===n&&e(r)};t.forEach(r=>r.addEventListener("keydown",i))}function se(n,t){Yo("Enter",n,t)}function Jo(n,t){Yo("Escape",n,t)}function K(n,t,e,i){n.addEventListener(e,r=>{let o=r.target.closest(t);o&&i.call(o,r,o)})}function Qo(n,t){let e=document.querySelectorAll(n);t=t.toLowerCase();for(let i of e)if(i.textContent.toLowerCase().includes(t))return i;return null}function De(n){n.innerHTML='
    '}function ae(){let n=document.createElement("div");return n.classList.add("loading-container"),n.innerHTML="
    ",n}function Le(n){let t=n.querySelectorAll(".loading-container");for(let e of t)e.remove()}function _t(n){let t=document.createElement("div");return t.innerHTML=n,window.$components.init(t),t.children[0]}function Nt(n,t,e){let i;return function(...o){let s=this,a=function(){i=null,e||n.apply(s,o)},l=e&&!i;clearTimeout(i),i=setTimeout(a,t),l&&n.apply(s,o)}}function kr(n){if(!n)return;let t=n.closest("details");t&&!t.open&&(t.open=!0),n.scrollIntoView({behavior:"smooth"});let e=getComputedStyle(document.body).getPropertyValue("--color-link");n.style.outline=`2px dashed ${e}`,n.style.outlineOffset="5px",n.style.transition=null,setTimeout(()=>{n.style.transition="outline linear 3s",n.style.outline="2px dashed rgba(0, 0, 0, 0)";let i=()=>{n.removeEventListener("transitionend",i),n.style.transition=null,n.style.outline=null,n.style.outlineOffset=null};n.addEventListener("transitionend",i)},1e3)}function ts(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function es(){let n=()=>((1+Math.random())*65536|0).toString(16).substring(1);return`${n()+n()}-${n()}-${n()}-${n()}-${n()}${n()}${n()}`}function ns(n){return new Promise(t=>{setTimeout(t,n)})}var g=class{constructor(){at(this,"$name","");at(this,"$el",null);at(this,"$refs",{});at(this,"$manyRefs",{});at(this,"$opts",{})}setup(){}$emit(t,e={}){e.from=this;let i=this.$name,r=new CustomEvent(`${i}-${t}`,{bubbles:!0,detail:e});this.$el.dispatchEvent(r)}};var cn=class extends g{setup(){this.modelRow=this.$refs.model,this.addButton=this.$refs.add,this.removeSelector=this.$opts.removeSelector,this.rowSelector=this.$opts.rowSelector,this.setupListeners()}setupListeners(){this.addButton.addEventListener("click",this.add.bind(this)),K(this.$el,this.removeSelector,"click",t=>{t.target.closest(this.rowSelector).remove()})}add(){let t=this.modelRow.cloneNode(!0);t.classList.remove("hidden"),this.setClonedInputNames(t),this.modelRow.parentNode.insertBefore(t,this.modelRow),window.$components.init(t)}setClonedInputNames(t){let e=es(),i=t.querySelectorAll('[name*="randrowid"]');for(let r of i)r.name=r.name.split("randrowid").join(e)}};var un=class extends g{setup(){this.row=this.$el,this.url=this.$opts.url,this.deleteButtons=this.$manyRefs.delete,R(this.deleteButtons,this.runDelete.bind(this))}runDelete(){this.row.style.opacity="0.7",this.row.style.pointerEvents="none",window.$http.delete(this.url).then(t=>{typeof t.data=="object"&&t.data.message&&window.$events.emit("success",t.data.message),this.row.remove()}).catch(()=>{this.row.style.opacity=null,this.row.style.pointerEvents=null})}};var hn=class extends g{setup(){this.container=this.$el,this.responseContainer=this.container,this.url=this.$opts.url,this.method=this.$opts.method||"post",this.successMessage=this.$opts.successMessage,this.submitButtons=this.$manyRefs.submit||[],this.$opts.responseContainer&&(this.responseContainer=this.container.closest(this.$opts.responseContainer)),this.setupListeners()}setupListeners(){if(this.container.tagName==="FORM"){this.container.addEventListener("submit",this.submitRealForm.bind(this));return}se(this.container,t=>{this.submitFakeForm(),t.preventDefault()}),this.submitButtons.forEach(t=>R(t,this.submitFakeForm.bind(this)))}submitFakeForm(){let t=new FormData,e=this.container.querySelectorAll("[name]");for(let i of e)t.append(i.getAttribute("name"),i.value);this.submit(t)}submitRealForm(t){t.preventDefault();let e=new FormData(this.container);this.submit(e)}async submit(t){this.responseContainer.style.opacity="0.7",this.responseContainer.style.pointerEvents="none";try{let e=await window.$http[this.method.toLowerCase()](this.url,t);this.$emit("success",{formData:t}),this.responseContainer.innerHTML=e.data,this.successMessage&&window.$events.emit("success",this.successMessage)}catch(e){this.responseContainer.innerHTML=e.data}window.$components.init(this.responseContainer),this.responseContainer.style.opacity=null,this.responseContainer.style.pointerEvents=null}};var dn=class extends g{setup(){this.container=this.$el,this.pageId=this.$opts.pageId,this.editContainer=this.$refs.editContainer,this.listContainer=this.$refs.listContainer,this.linksContainer=this.$refs.linksContainer,this.listPanel=this.$refs.listPanel,this.attachLinkButton=this.$refs.attachLinkButton,this.setupListeners()}setupListeners(){let t=this.reloadList.bind(this);this.container.addEventListener("dropzone-upload-success",t),this.container.addEventListener("ajax-form-success",t),this.container.addEventListener("sortable-list-sort",e=>{this.updateOrder(e.detail.ids)}),this.container.addEventListener("event-emit-select-edit",e=>{this.startEdit(e.detail.id)}),this.container.addEventListener("event-emit-select-edit-back",()=>{this.stopEdit()}),this.container.addEventListener("event-emit-select-insert",e=>{let i=e.target.closest("[data-drag-content]").getAttribute("data-drag-content"),r=JSON.parse(i);window.$events.emit("editor::insert",{html:r["text/html"],markdown:r["text/plain"]})}),this.attachLinkButton.addEventListener("click",()=>{this.showSection("links")})}showSection(t){let e={links:this.linksContainer,edit:this.editContainer,list:this.listContainer};for(let[i,r]of Object.entries(e))r.toggleAttribute("hidden",i!==t)}reloadList(){this.stopEdit(),window.$http.get(`/attachments/get/page/${this.pageId}`).then(t=>{this.listPanel.innerHTML=t.data,window.$components.init(this.listPanel)})}updateOrder(t){window.$http.put(`/attachments/sort/page/${this.pageId}`,{order:t}).then(e=>{window.$events.emit("success",e.data.message)})}async startEdit(t){this.showSection("edit"),De(this.editContainer);let e=await window.$http.get(`/attachments/edit/${t}`);this.editContainer.innerHTML=e.data,window.$components.init(this.editContainer)}stopEdit(){this.showSection("list")}};var pn=class extends g{setup(){this.container=this.$el,this.setupListeners()}setupListeners(){let t=e=>e.key==="Control"||e.key==="Meta";window.addEventListener("keydown",e=>{t(e)&&this.addOpenQueryToLinks()},{passive:!0}),window.addEventListener("keyup",e=>{t(e)&&this.removeOpenQueryFromLinks()},{passive:!0})}addOpenQueryToLinks(){let t=this.container.querySelectorAll("a.attachment-file");for(let e of t)e.href.split("?")[1]!=="open=true"&&(e.href+="?open=true",e.setAttribute("target","_blank"))}removeOpenQueryFromLinks(){let t=this.container.querySelectorAll("a.attachment-file");for(let e of t)e.href=e.href.split("?")[0],e.removeAttribute("target")}};var Te,Cr,$e,Er,zt=class{constructor(t,e=null,i=null){ot(this,Te);ot(this,$e);this.containers=[t],this.onEscape=e,this.onEnter=i,t.addEventListener("keydown",L(this,Te,Cr).bind(this))}shareHandlingToEl(t){this.containers.push(t),t.addEventListener("keydown",L(this,Te,Cr).bind(this))}focusNext(){let t=L(this,$e,Er).call(this),i=t.indexOf(document.activeElement)+1;i>=t.length&&(i=0),t[i].focus()}focusPrevious(){let t=L(this,$e,Er).call(this),i=t.indexOf(document.activeElement)-1;i<0&&(i=t.length-1),t[i].focus()}};Te=new WeakSet,Cr=function(t){t.target.matches("input")&&(t.key==="ArrowRight"||t.key==="ArrowLeft")||(t.key==="ArrowDown"||t.key==="ArrowRight"?(this.focusNext(),t.preventDefault()):t.key==="ArrowUp"||t.key==="ArrowLeft"?(this.focusPrevious(),t.preventDefault()):t.key==="Escape"?this.onEscape?this.onEscape(t):document.activeElement&&document.activeElement.blur():t.key==="Enter"&&this.onEnter&&this.onEnter(t))},$e=new WeakSet,Er=function(){let t=[],e='[tabindex]:not([tabindex="-1"]),[href],button:not([tabindex="-1"],[disabled]),input:not([type=hidden])';for(let i of this.containers)t.push(...i.querySelectorAll(e));return t};var _r={},fn=class extends g{setup(){this.parent=this.$el.parentElement,this.container=this.$el,this.type=this.$opts.type,this.url=this.$opts.url,this.input=this.$refs.input,this.list=this.$refs.list,this.lastPopulated=0,this.setupListeners()}setupListeners(){new zt(this.list,()=>{this.input.focus(),setTimeout(()=>this.hideSuggestions(),1)},e=>{e.preventDefault();let i=e.target.textContent;i&&this.selectSuggestion(i)}).shareHandlingToEl(this.input),K(this.list,".text-item","click",(e,i)=>{this.selectSuggestion(i.textContent)}),this.input.addEventListener("input",this.requestSuggestions.bind(this)),this.input.addEventListener("focus",this.requestSuggestions.bind(this)),this.input.addEventListener("blur",this.hideSuggestionsIfFocusedLost.bind(this)),this.input.addEventListener("keydown",e=>{e.key==="Tab"&&this.hideSuggestions()})}selectSuggestion(t){this.input.value=t,this.lastPopulated=Date.now(),this.input.focus(),this.input.dispatchEvent(new Event("input",{bubbles:!0})),this.input.dispatchEvent(new Event("change",{bubbles:!0})),this.hideSuggestions()}async requestSuggestions(){if(Date.now()-this.lastPopulated<50)return;let t=this.getNameFilterIfNeeded(),e=this.input.value.toLowerCase(),r=(await this.loadSuggestions(e,t)).filter(o=>e===""||o.toLowerCase().startsWith(e)).slice(0,10);this.displaySuggestions(r)}getNameFilterIfNeeded(){return this.type!=="value"?null:this.parent.querySelector("input").value}async loadSuggestions(t,e=null){t=t.slice(0,4);let i={search:t,name:e},r=`${this.url}:${JSON.stringify(i)}`;if(_r[r])return _r[r];let o=await window.$http.get(this.url,i);return _r[r]=o.data,o.data}displaySuggestions(t){if(t.length===0){this.hideSuggestions();return}this.list.innerHTML=t.map(e=>`
  • ${ts(e)}
  • `).join(""),this.list.style.display="block";for(let e of this.list.querySelectorAll(".text-item"))e.addEventListener("blur",this.hideSuggestionsIfFocusedLost.bind(this))}hideSuggestions(){this.list.style.display="none"}hideSuggestionsIfFocusedLost(t){this.container.contains(t.relatedTarget)||this.hideSuggestions()}};var mn=class extends g{setup(){this.form=this.$el,this.form.submit()}};var gn=class extends g{setup(){if(this.button=this.$el,this.targetElem=document.getElementById("header"),this.showing=!1,this.breakPoint=1200,document.body.classList.contains("flexbox")){this.button.style.display="none";return}this.button.addEventListener("click",this.scrollToTop.bind(this)),window.addEventListener("scroll",this.onPageScroll.bind(this))}onPageScroll(){let t=document.documentElement.scrollTop||document.body.scrollTop||0;!this.showing&&t>this.breakPoint?(this.button.style.display="block",this.showing=!0,setTimeout(()=>{this.button.style.opacity=.4},1)):this.showing&&t{this.button.style.display="none"},500))}scrollToTop(){let t=this.targetElem.getBoundingClientRect().top,e=document.documentElement.scrollTop?document.documentElement:document.body,i=300,r=Date.now(),o=this.targetElem.getBoundingClientRect().top;function s(){let a=1-(Date.now()-r)/i,l=Math.abs(a*o);a>0?(e.scrollTop=l,requestAnimationFrame(s.bind(this))):e.scrollTop=t}requestAnimationFrame(s.bind(this))}};function is(n,t){var e=Object.keys(n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),e.push.apply(e,i)}return e}function At(n){for(var t=1;t=0)&&(e[r]=n[r]);return e}function oh(n,t){if(n==null)return{};var e=rh(n,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);for(r=0;r=0)&&Object.prototype.propertyIsEnumerable.call(n,i)&&(e[i]=n[i])}return e}function sh(n){return ah(n)||lh(n)||ch(n)||uh()}function ah(n){if(Array.isArray(n))return Br(n)}function lh(n){if(typeof Symbol<"u"&&n[Symbol.iterator]!=null||n["@@iterator"]!=null)return Array.from(n)}function ch(n,t){if(n){if(typeof n=="string")return Br(n,t);var e=Object.prototype.toString.call(n).slice(8,-1);if(e==="Object"&&n.constructor&&(e=n.constructor.name),e==="Map"||e==="Set")return Array.from(n);if(e==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return Br(n,t)}}function Br(n,t){(t==null||t>n.length)&&(t=n.length);for(var e=0,i=new Array(t);e"&&(t=t.substring(1)),n)try{if(n.matches)return n.matches(t);if(n.msMatchesSelector)return n.msMatchesSelector(t);if(n.webkitMatchesSelector)return n.webkitMatchesSelector(t)}catch{return!1}return!1}}function dh(n){return n.host&&n!==document&&n.host.nodeType?n.host:n.parentNode}function xt(n,t,e,i){if(n){e=e||document;do{if(t!=null&&(t[0]===">"?n.parentNode===e&&Dn(n,t):Dn(n,t))||i&&n===e)return n;if(n===e)break}while(n=dh(n))}return null}var os=/\s+/g;function Y(n,t,e){if(n&&t)if(n.classList)n.classList[e?"add":"remove"](t);else{var i=(" "+n.className+" ").replace(os," ").replace(" "+t+" "," ");n.className=(i+(e?" "+t:"")).replace(os," ")}}function A(n,t,e){var i=n&&n.style;if(i){if(e===void 0)return document.defaultView&&document.defaultView.getComputedStyle?e=document.defaultView.getComputedStyle(n,""):n.currentStyle&&(e=n.currentStyle),t===void 0?e:e[t];!(t in i)&&t.indexOf("webkit")===-1&&(t="-webkit-"+t),i[t]=e+(typeof e=="string"?"":"px")}}function Xt(n,t){var e="";if(typeof n=="string")e=n;else do{var i=A(n,"transform");i&&i!=="none"&&(e=i+" "+e)}while(!t&&(n=n.parentNode));var r=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return r&&new r(e)}function bs(n,t,e){if(n){var i=n.getElementsByTagName(t),r=0,o=i.length;if(e)for(;r=o:s=r<=o,!s)return i;if(i===St())break;i=jt(i,!1)}return!1}function pe(n,t,e,i){for(var r=0,o=0,s=n.children;o2&&arguments[2]!==void 0?arguments[2]:{},r=i.evt,o=oh(i,wh);Ve.pluginEvent.bind(I)(t,e,At({dragEl:C,parentEl:Z,ghostEl:q,rootEl:j,nextEl:Zt,lastDownEl:En,cloneEl:G,cloneHidden:Ut,dragStarted:Be,putSortable:tt,activeSortable:I.active,originalEvent:r,oldIndex:de,oldDraggableIndex:ze,newIndex:mt,newDraggableIndex:Ht,hideGhostForTarget:Cs,unhideGhostForTarget:Es,cloneNowHidden:function(){Ut=!0},cloneNowShown:function(){Ut=!1},dispatchSortableEvent:function(a){st({sortable:e,name:a,originalEvent:r})}},o))};function st(n){qe(At({putSortable:tt,cloneEl:G,targetEl:C,rootEl:j,oldIndex:de,oldDraggableIndex:ze,newIndex:mt,newDraggableIndex:Ht},n))}var C,Z,q,j,Zt,En,G,Ut,de,mt,ze,Ht,bn,tt,he=!1,Ln=!1,Tn=[],Gt,wt,Lr,Tr,cs,us,Be,ce,He,Ue=!1,vn=!1,_n,nt,$r=[],Pr=!1,$n=[],Mn=typeof document<"u",wn=fs,hs=je||Mt?"cssFloat":"float",yh=Mn&&!ms&&!fs&&"draggable"in document.createElement("div"),ys=function(){if(Mn){if(Mt)return!1;var n=document.createElement("x");return n.style.cssText="pointer-events:auto",n.style.pointerEvents==="auto"}}(),xs=function(t,e){var i=A(t),r=parseInt(i.width)-parseInt(i.paddingLeft)-parseInt(i.paddingRight)-parseInt(i.borderLeftWidth)-parseInt(i.borderRightWidth),o=pe(t,0,e),s=pe(t,1,e),a=o&&A(o),l=s&&A(s),c=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+V(o).width,u=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+V(s).width;if(i.display==="flex")return i.flexDirection==="column"||i.flexDirection==="column-reverse"?"vertical":"horizontal";if(i.display==="grid")return i.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(o&&a.float&&a.float!=="none"){var h=a.float==="left"?"left":"right";return s&&(l.clear==="both"||l.clear===h)?"vertical":"horizontal"}return o&&(a.display==="block"||a.display==="flex"||a.display==="table"||a.display==="grid"||c>=r&&i[hs]==="none"||s&&i[hs]==="none"&&c+u>r)?"vertical":"horizontal"},xh=function(t,e,i){var r=i?t.left:t.top,o=i?t.right:t.bottom,s=i?t.width:t.height,a=i?e.left:e.top,l=i?e.right:e.bottom,c=i?e.width:e.height;return r===a||o===l||r+s/2===a+c/2},kh=function(t,e){var i;return Tn.some(function(r){var o=r[it].options.emptyInsertThreshold;if(!(!o||zr(r))){var s=V(r),a=t>=s.left-o&&t<=s.right+o,l=e>=s.top-o&&e<=s.bottom+o;if(a&&l)return i=r}}),i},ks=function(t){function e(o,s){return function(a,l,c,u){var h=a.options.group.name&&l.options.group.name&&a.options.group.name===l.options.group.name;if(o==null&&(s||h))return!0;if(o==null||o===!1)return!1;if(s&&o==="clone")return o;if(typeof o=="function")return e(o(a,l,c,u),s)(a,l,c,u);var d=(s?a:l).options.group.name;return o===!0||typeof o=="string"&&o===d||o.join&&o.indexOf(d)>-1}}var i={},r=t.group;(!r||Cn(r)!="object")&&(r={name:r}),i.name=r.name,i.checkPull=e(r.pull,!0),i.checkPut=e(r.put),i.revertClone=r.revertClone,t.group=i},Cs=function(){!ys&&q&&A(q,"display","none")},Es=function(){!ys&&q&&A(q,"display","")};Mn&&!ms&&document.addEventListener("click",function(n){if(Ln)return n.preventDefault(),n.stopPropagation&&n.stopPropagation(),n.stopImmediatePropagation&&n.stopImmediatePropagation(),Ln=!1,!1},!0);var Kt=function(t){if(C){t=t.touches?t.touches[0]:t;var e=kh(t.clientX,t.clientY);if(e){var i={};for(var r in t)t.hasOwnProperty(r)&&(i[r]=t[r]);i.target=i.rootEl=e,i.preventDefault=void 0,i.stopPropagation=void 0,e[it]._onDragOver(i)}}},Ch=function(t){C&&C.parentNode[it]._isOutsideThisEl(t.target)};function I(n,t){if(!(n&&n.nodeType&&n.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(n));this.el=n,this.options=t=kt({},t),n[it]=this;var e={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(n.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return xs(n,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(s,a){s.setData("Text",a.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:I.supportPointer!==!1&&"PointerEvent"in window&&!Re,emptyInsertThreshold:5};Ve.initializePlugins(this,n,e);for(var i in e)!(i in t)&&(t[i]=e[i]);ks(t);for(var r in this)r.charAt(0)==="_"&&typeof this[r]=="function"&&(this[r]=this[r].bind(this));this.nativeDraggable=t.forceFallback?!1:yh,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?O(n,"pointerdown",this._onTapStart):(O(n,"mousedown",this._onTapStart),O(n,"touchstart",this._onTapStart)),this.nativeDraggable&&(O(n,"dragover",this),O(n,"dragenter",this)),Tn.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),kt(this,gh())}I.prototype={constructor:I,_isOutsideThisEl:function(t){!this.el.contains(t)&&t!==this.el&&(ce=null)},_getDirection:function(t,e){return typeof this.options.direction=="function"?this.options.direction.call(this,t,e,C):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,i=this.el,r=this.options,o=r.preventOnFilter,s=t.type,a=t.touches&&t.touches[0]||t.pointerType&&t.pointerType==="touch"&&t,l=(a||t).target,c=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||l,u=r.filter;if($h(i),!C&&!(/mousedown|pointerdown/.test(s)&&t.button!==0||r.disabled)&&!c.isContentEditable&&!(!this.nativeDraggable&&Re&&l&&l.tagName.toUpperCase()==="SELECT")&&(l=xt(l,r.draggable,i,!1),!(l&&l.animated)&&En!==l)){if(de=J(l),ze=J(l,r.draggable),typeof u=="function"){if(u.call(this,t,l,this)){st({sortable:e,rootEl:c,name:"filter",targetEl:l,toEl:i,fromEl:i}),lt("filter",e,{evt:t}),o&&t.cancelable&&t.preventDefault();return}}else if(u&&(u=u.split(",").some(function(h){if(h=xt(c,h.trim(),i,!1),h)return st({sortable:e,rootEl:h,name:"filter",targetEl:l,fromEl:i,toEl:i}),lt("filter",e,{evt:t}),!0}),u)){o&&t.cancelable&&t.preventDefault();return}r.handle&&!xt(c,r.handle,i,!1)||this._prepareDragStart(t,a,l)}}},_prepareDragStart:function(t,e,i){var r=this,o=r.el,s=r.options,a=o.ownerDocument,l;if(i&&!C&&i.parentNode===o){var c=V(i);if(j=o,C=i,Z=C.parentNode,Zt=C.nextSibling,En=i,bn=s.group,I.dragged=C,Gt={target:C,clientX:(e||t).clientX,clientY:(e||t).clientY},cs=Gt.clientX-c.left,us=Gt.clientY-c.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,C.style["will-change"]="all",l=function(){if(lt("delayEnded",r,{evt:t}),I.eventCanceled){r._onDrop();return}r._disableDelayedDragEvents(),!rs&&r.nativeDraggable&&(C.draggable=!0),r._triggerDragStart(t,e),st({sortable:r,name:"choose",originalEvent:t}),Y(C,s.chosenClass,!0)},s.ignore.split(",").forEach(function(u){bs(C,u.trim(),Ir)}),O(a,"dragover",Kt),O(a,"mousemove",Kt),O(a,"touchmove",Kt),O(a,"mouseup",r._onDrop),O(a,"touchend",r._onDrop),O(a,"touchcancel",r._onDrop),rs&&this.nativeDraggable&&(this.options.touchStartThreshold=4,C.draggable=!0),lt("delayStart",this,{evt:t}),s.delay&&(!s.delayOnTouchOnly||e)&&(!this.nativeDraggable||!(je||Mt))){if(I.eventCanceled){this._onDrop();return}O(a,"mouseup",r._disableDelayedDrag),O(a,"touchend",r._disableDelayedDrag),O(a,"touchcancel",r._disableDelayedDrag),O(a,"mousemove",r._delayedDragTouchMoveHandler),O(a,"touchmove",r._delayedDragTouchMoveHandler),s.supportPointer&&O(a,"pointermove",r._delayedDragTouchMoveHandler),r._dragStartTimer=setTimeout(l,s.delay)}else l()}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){C&&Ir(C),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;B(t,"mouseup",this._disableDelayedDrag),B(t,"touchend",this._disableDelayedDrag),B(t,"touchcancel",this._disableDelayedDrag),B(t,"mousemove",this._delayedDragTouchMoveHandler),B(t,"touchmove",this._delayedDragTouchMoveHandler),B(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||t.pointerType=="touch"&&t,!this.nativeDraggable||e?this.options.supportPointer?O(document,"pointermove",this._onTouchMove):e?O(document,"touchmove",this._onTouchMove):O(document,"mousemove",this._onTouchMove):(O(C,"dragend",this),O(j,"dragstart",this._onDragStart));try{document.selection?Sn(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(t,e){if(he=!1,j&&C){lt("dragStarted",this,{evt:e}),this.nativeDraggable&&O(document,"dragover",Ch);var i=this.options;!t&&Y(C,i.dragClass,!1),Y(C,i.ghostClass,!0),I.active=this,t&&this._appendGhost(),st({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(wt){this._lastX=wt.clientX,this._lastY=wt.clientY,Cs();for(var t=document.elementFromPoint(wt.clientX,wt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(wt.clientX,wt.clientY),t!==e);)e=t;if(C.parentNode[it]._isOutsideThisEl(t),e)do{if(e[it]){var i=void 0;if(i=e[it]._onDragOver({clientX:wt.clientX,clientY:wt.clientY,target:t,rootEl:e}),i&&!this.options.dragoverBubble)break}t=e}while(e=e.parentNode);Es()}},_onTouchMove:function(t){if(Gt){var e=this.options,i=e.fallbackTolerance,r=e.fallbackOffset,o=t.touches?t.touches[0]:t,s=q&&Xt(q,!0),a=q&&s&&s.a,l=q&&s&&s.d,c=wn&&nt&&as(nt),u=(o.clientX-Gt.clientX+r.x)/(a||1)+(c?c[0]-$r[0]:0)/(a||1),h=(o.clientY-Gt.clientY+r.y)/(l||1)+(c?c[1]-$r[1]:0)/(l||1);if(!I.active&&!he){if(i&&Math.max(Math.abs(o.clientX-this._lastX),Math.abs(o.clientY-this._lastY))=0&&(st({rootEl:Z,name:"add",toEl:Z,fromEl:j,originalEvent:t}),st({sortable:this,name:"remove",toEl:Z,originalEvent:t}),st({rootEl:Z,name:"sort",toEl:Z,fromEl:j,originalEvent:t}),st({sortable:this,name:"sort",toEl:Z,originalEvent:t})),tt&&tt.save()):mt!==de&&mt>=0&&(st({sortable:this,name:"update",toEl:Z,originalEvent:t}),st({sortable:this,name:"sort",toEl:Z,originalEvent:t})),I.active&&((mt==null||mt===-1)&&(mt=de,Ht=ze),st({sortable:this,name:"end",toEl:Z,originalEvent:t}),this.save()))),this._nulling()},_nulling:function(){lt("nulling",this),j=C=Z=q=Zt=G=En=Ut=Gt=wt=Be=mt=Ht=de=ze=ce=He=tt=bn=I.dragged=I.ghost=I.clone=I.active=null,$n.forEach(function(t){t.checked=!0}),$n.length=Lr=Tr=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":C&&(this._onDragOver(t),Eh(t));break;case"selectstart":t.preventDefault();break}},toArray:function(){for(var t=[],e,i=this.el.children,r=0,o=i.length,s=this.options;ri.right+r||n.clientX<=i.right&&n.clientY>i.bottom&&n.clientX>=i.left:n.clientX>i.right&&n.clientY>i.top||n.clientX<=i.right&&n.clientY>i.bottom+r}function Dh(n,t,e,i,r,o,s,a){var l=i?n.clientY:n.clientX,c=i?e.height:e.width,u=i?e.top:e.left,h=i?e.bottom:e.right,d=!1;if(!s){if(a&&_nu+c*o/2:lh-_n)return-He}else if(l>u+c*(1-r)/2&&lh-c*o/2)?l>u+c/2?1:-1:0}function Lh(n){return J(C)1&&(F.forEach(function(a){o.addAnimationState({target:a,rect:ct?V(a):s}),Ar(a),a.fromRect=s,i.removeAnimationState(a)}),ct=!1,Mh(!this.options.removeCloneOnHide,r))},dragOverCompleted:function(e){var i=e.sortable,r=e.isOwner,o=e.insertion,s=e.activeSortable,a=e.parentEl,l=e.putSortable,c=this.options;if(o){if(r&&s._hideClone(),Me=!1,c.animation&&F.length>1&&(ct||!r&&!s.options.sort&&!l)){var u=V(z,!1,!0,!0);F.forEach(function(d){d!==z&&(ls(d,u),a.appendChild(d))}),ct=!0}if(!r)if(ct||kn(),F.length>1){var h=xn;s._showClone(i),s.options.animation&&!xn&&h&&ft.forEach(function(d){s.addAnimationState({target:d,rect:Fe}),d.fromRect=Fe,d.thisAnimationDuration=null})}else s._showClone(i)}},dragOverAnimationCapture:function(e){var i=e.dragRect,r=e.isOwner,o=e.activeSortable;if(F.forEach(function(a){a.thisAnimationDuration=null}),o.options.animation&&!r&&o.multiDrag.isMultiDrag){Fe=kt({},i);var s=Xt(z,!0);Fe.top-=s.f,Fe.left-=s.e}},dragOverAnimationComplete:function(){ct&&(ct=!1,kn())},drop:function(e){var i=e.originalEvent,r=e.rootEl,o=e.parentEl,s=e.sortable,a=e.dispatchSortableEvent,l=e.oldIndex,c=e.putSortable,u=c||this.sortable;if(i){var h=this.options,d=o.children;if(!ue)if(h.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),Y(z,h.selectedClass,!~F.indexOf(z)),~F.indexOf(z))F.splice(F.indexOf(z),1),Ie=null,qe({sortable:s,rootEl:r,name:"deselect",targetEl:z,originalEvent:i});else{if(F.push(z),qe({sortable:s,rootEl:r,name:"select",targetEl:z,originalEvent:i}),i.shiftKey&&Ie&&s.el.contains(Ie)){var f=J(Ie),p=J(z);if(~f&&~p&&f!==p){var m,w;for(p>f?(w=f,m=p):(w=p,m=f+1);w1){var v=V(z),b=J(z,":not(."+this.options.selectedClass+")");if(!Me&&h.animation&&(z.thisAnimationDuration=null),u.captureAnimationState(),!Me&&(h.animation&&(z.fromRect=v,F.forEach(function(x){if(x.thisAnimationDuration=null,x!==z){var E=ct?V(x):v;x.fromRect=E,u.addAnimationState({target:x,rect:E})}})),kn(),F.forEach(function(x){d[b]?o.insertBefore(x,d[b]):o.appendChild(x),b++}),l===J(z))){var k=!1;F.forEach(function(x){if(x.sortableIndex!==J(x)){k=!0;return}}),k&&a("update")}F.forEach(function(x){Ar(x)}),u.animateAll()}yt=u}(r===o||c&&c.lastPutMode!=="clone")&&ft.forEach(function(x){x.parentNode&&x.parentNode.removeChild(x)})}},nullingGlobal:function(){this.isMultiDrag=ue=!1,ft.length=0},destroyGlobal:function(){this._deselectMultiDrag(),B(document,"pointerup",this._deselectMultiDrag),B(document,"mouseup",this._deselectMultiDrag),B(document,"touchend",this._deselectMultiDrag),B(document,"keydown",this._checkKeyDown),B(document,"keyup",this._checkKeyUp)},_deselectMultiDrag:function(e){if(!(typeof ue<"u"&&ue)&&yt===this.sortable&&!(e&&xt(e.target,this.options.draggable,this.sortable.el,!1))&&!(e&&e.button!==0))for(;F.length;){var i=F[0];Y(i,this.options.selectedClass,!1),F.shift(),qe({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:i,originalEvent:e})}},_checkKeyDown:function(e){e.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(e){e.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},kt(n,{pluginName:"multiDrag",utils:{select:function(e){var i=e.parentNode[it];!i||!i.options.multiDrag||~F.indexOf(e)||(yt&&yt!==i&&(yt.multiDrag._deselectMultiDrag(),yt=i),Y(e,i.options.selectedClass,!0),F.push(e))},deselect:function(e){var i=e.parentNode[it],r=F.indexOf(e);!i||!i.options.multiDrag||!~r||(Y(e,i.options.selectedClass,!1),F.splice(r,1))}},eventProperties:function(){var e=this,i=[],r=[];return F.forEach(function(o){i.push({multiDragElement:o,index:o.sortableIndex});var s;ct&&o!==z?s=-1:ct?s=J(o,":not(."+e.options.selectedClass+")"):s=J(o),r.push({multiDragElement:o,index:s})}),{items:sh(F),clones:[].concat(ft),oldIndicies:i,newIndicies:r}},optionListeners:{multiDragKey:function(e){return e=e.toLowerCase(),e==="ctrl"?e="Control":e.length>1&&(e=e.charAt(0).toUpperCase()+e.substr(1)),e}}})}function Mh(n,t){F.forEach(function(e,i){var r=t.children[e.sortableIndex+(n?Number(i):0)];r?t.insertBefore(e,r):t.appendChild(e)})}function ps(n,t){ft.forEach(function(e,i){var r=t.children[e.sortableIndex+(n?Number(i):0)];r?t.insertBefore(e,r):t.appendChild(e)})}function kn(){F.forEach(function(n){n!==z&&n.parentNode&&n.parentNode.removeChild(n)})}I.mount(new Ih);I.mount(jr,Ur);var Yt=I;var As={name(n,t){let e=n.getAttribute("data-name").trim().toLowerCase(),i=t.getAttribute("data-name").trim().toLowerCase();return e.localeCompare(i)},created(n,t){let e=Number(n.getAttribute("data-created"));return Number(t.getAttribute("data-created"))-e},updated(n,t){let e=Number(n.getAttribute("data-updated"));return Number(t.getAttribute("data-updated"))-e},chaptersFirst(n,t){let e=n.getAttribute("data-type"),i=t.getAttribute("data-type");return e===i?0:e==="chapter"?-1:1},chaptersLast(n,t){let e=n.getAttribute("data-type"),i=t.getAttribute("data-type");return e===i?0:e==="chapter"?1:-1}},Ds={up:{active(n,t){return!(n.previousElementSibling===null&&!t)},run(n,t){(n.previousElementSibling||t).insertAdjacentElement("beforebegin",n)}},down:{active(n,t){return!(n.nextElementSibling===null&&!t)},run(n,t){(n.nextElementSibling||t).insertAdjacentElement("afterend",n)}},next_book:{active(n,t,e){return e.nextElementSibling!==null},run(n,t,e){e.nextElementSibling.querySelector("ul").prepend(n)}},prev_book:{active(n,t,e){return e.previousElementSibling!==null},run(n,t,e){e.previousElementSibling.querySelector("ul").appendChild(n)}},next_chapter:{active(n,t){return n.dataset.type==="page"&&this.getNextChapter(n,t)},run(n,t){this.getNextChapter(n,t).querySelector("ul").prepend(n)},getNextChapter(n,t){let e=t||n,i=Array.from(e.parentElement.children),r=i.indexOf(e);return i.slice(r+1).find(o=>o.dataset.type==="chapter")}},prev_chapter:{active(n,t){return n.dataset.type==="page"&&this.getPrevChapter(n,t)},run(n,t){this.getPrevChapter(n,t).querySelector("ul").append(n)},getPrevChapter(n,t){let e=t||n,i=Array.from(e.parentElement.children),r=i.indexOf(e);return i.slice(0,r).reverse().find(o=>o.dataset.type==="chapter")}},book_end:{active(n,t){return t||t===null&&n.nextElementSibling},run(n,t,e){e.querySelector("ul").append(n)}},book_start:{active(n,t){return t||t===null&&n.previousElementSibling},run(n,t,e){e.querySelector("ul").prepend(n)}},before_chapter:{active(n,t){return t},run(n,t){t.insertAdjacentElement("beforebegin",n)}},after_chapter:{active(n,t){return t},run(n,t){t.insertAdjacentElement("afterend",n)}}},Fn=class extends g{setup(){this.container=this.$el,this.sortContainer=this.$refs.sortContainer,this.input=this.$refs.input,Yt.mount(new Ss);let t=this.container.querySelector(".sort-box");this.setupBookSortable(t),this.setupSortPresets(),this.setupMoveActions(),window.$events.listen("entity-select-change",this.bookSelect.bind(this))}setupMoveActions(){this.container.addEventListener("click",t=>{if(t.target.matches("[data-move]")){let e=t.target.getAttribute("data-move"),i=t.target.closest("[data-id]");this.runSortAction(i,e)}}),this.updateMoveActionStateForAll()}setupSortPresets(){let t="",e=!1,i=["name","created","updated"];this.sortContainer.addEventListener("click",r=>{let o=r.target.closest(".sort-box-options [data-sort]");if(!o)return;r.preventDefault();let s=o.closest(".sort-box").querySelectorAll("ul"),a=o.getAttribute("data-sort");e=t===a?!e:!1;let l=As[a];e&&i.includes(a)&&(l=function(u,h){return 0-As[a](u,h)});for(let c of s)Array.from(c.children).filter(h=>h.matches("li")).sort(l).forEach(h=>{c.appendChild(h)});t=a,this.updateMapInput()})}bookSelect(t){if(this.container.querySelector(`[data-type="book"][data-id="${t.id}"]`)!==null)return;let i=`${t.link}/sort-item`;window.$http.get(i).then(r=>{let o=_t(r.data);this.sortContainer.append(o),this.setupBookSortable(o),this.updateMoveActionStateForAll(),o.querySelector("summary").focus()})}setupBookSortable(t){let e=Array.from(t.querySelectorAll(".sort-list, .sortable-page-sublist")),i={name:"book",pull:["book","chapter"],put:["book","chapter"]},r={name:"chapter",pull:["book","chapter"],put(o,s,a){return a.getAttribute("data-type")==="page"}};for(let o of e)Yt.create(o,{group:o.classList.contains("sort-list")?i:r,animation:150,fallbackOnBody:!0,swapThreshold:.65,onSort:()=>{this.ensureNoNestedChapters(),this.updateMapInput(),this.updateMoveActionStateForAll()},dragClass:"bg-white",ghostClass:"primary-background-light",multiDrag:!0,multiDragKey:"Control",selectedClass:"sortable-selected"})}ensureNoNestedChapters(){let t=this.container.querySelectorAll('[data-type="chapter"] [data-type="chapter"]');for(let e of t)e.parentElement.closest('[data-type="chapter"]').insertAdjacentElement("afterend",e)}updateMapInput(){let t=this.buildEntityMap();this.input.value=JSON.stringify(t)}buildEntityMap(){let t=[],e=this.container.querySelectorAll(".sort-list");for(let i of e){let r=i.closest('[data-type="book"]').getAttribute("data-id"),o=Array.from(i.children).filter(s=>s.matches('[data-type="page"], [data-type="chapter"]'));for(let s=0;s{for(let s of r)n.style[s]=null;n.style.transition=null,n.removeEventListener("transitionend",o),qn.delete(n),i&&i()};setTimeout(()=>{n.style.transition=`all ease-in-out ${e}ms`;for(let s of r)n.style[s]=t[s][1];n.addEventListener("transitionend",o),qn.set(n,o)},15)}function Ge(n){qn.has(n)&&qn.get(n)()}function Ls(n,t=400,e=null){Ge(n),n.style.display="block",We(n,{opacity:["0","1"]},t,()=>{e&&e()})}function Ts(n,t=400,e=null){Ge(n),We(n,{opacity:["1","0"]},t,()=>{n.style.display="none",e&&e()})}function fe(n,t=400){Ge(n);let e=n.getBoundingClientRect().height,i=getComputedStyle(n),r=i.getPropertyValue("padding-top"),o=i.getPropertyValue("padding-bottom"),s={maxHeight:[`${e}px`,"0px"],overflow:["hidden","hidden"],paddingTop:[r,"0px"],paddingBottom:[o,"0px"]};We(n,s,t,()=>{n.style.display="none"})}function me(n,t=400){Ge(n),n.style.display="block";let e=n.getBoundingClientRect().height,i=getComputedStyle(n),r=i.getPropertyValue("padding-top"),o=i.getPropertyValue("padding-bottom"),s={maxHeight:["0px",`${e}px`],overflow:["hidden","hidden"],paddingTop:["0px",r],paddingBottom:["0px",o]};We(n,s,t)}function $s(n,t=400){let e=n.getBoundingClientRect().height,i=getComputedStyle(n),r=i.getPropertyValue("padding-top"),o=i.getPropertyValue("padding-bottom");return()=>{Ge(n);let s=n.getBoundingClientRect().height,a=getComputedStyle(n),l=a.getPropertyValue("padding-top"),c=a.getPropertyValue("padding-bottom"),u={height:[`${e}px`,`${s}px`],overflow:["hidden","hidden"],paddingTop:[r,l],paddingBottom:[o,c]};We(n,u,t)}}var Bn=class extends g{setup(){this.list=this.$refs.list,this.toggle=this.$refs.toggle,this.isOpen=this.toggle.classList.contains("open"),this.toggle.addEventListener("click",this.click.bind(this))}open(){this.toggle.classList.add("open"),this.toggle.setAttribute("aria-expanded","true"),me(this.list,180),this.isOpen=!0}close(){this.toggle.classList.remove("open"),this.toggle.setAttribute("aria-expanded","false"),fe(this.list,180),this.isOpen=!1}click(t){t.preventDefault(),this.isOpen?this.close():this.open()}};var Pn=class extends g{constructor(){super(...arguments);at(this,"editor",null);at(this,"saveCallback",null);at(this,"cancelCallback",null);at(this,"history",{});at(this,"historyKey","code_history")}setup(){this.container=this.$refs.container,this.popup=this.$el,this.editorInput=this.$refs.editor,this.languageButtons=this.$manyRefs.languageButton,this.languageOptionsContainer=this.$refs.languageOptionsContainer,this.saveButton=this.$refs.saveButton,this.languageInput=this.$refs.languageInput,this.historyDropDown=this.$refs.historyDropDown,this.historyList=this.$refs.historyList,this.favourites=new Set(this.$opts.favourites.split(",")),this.setupListeners(),this.setupFavourites()}setupListeners(){this.container.addEventListener("keydown",e=>{e.ctrlKey&&e.key==="Enter"&&this.save()}),R(this.languageButtons,e=>{let i=e.target.dataset.lang;this.languageInput.value=i,this.languageInputChange(i)}),se(this.languageInput,()=>this.save()),this.languageInput.addEventListener("input",()=>this.languageInputChange(this.languageInput.value)),R(this.saveButton,()=>this.save()),K(this.historyList,"button","click",(e,i)=>{e.preventDefault();let r=i.dataset.time;this.editor&&this.editor.setContent(this.history[r])})}setupFavourites(){for(let e of this.languageButtons)this.setupFavouritesForButton(e);this.sortLanguageList()}setupFavouritesForButton(e){let i=e.dataset.lang,r=this.favourites.has(i);e.setAttribute("data-favourite",r?"true":"false"),K(e.parentElement,".lang-option-favorite-toggle","click",()=>{r=!r,r?this.favourites.add(i):this.favourites.delete(i),e.setAttribute("data-favourite",r?"true":"false"),window.$http.patch("/preferences/update-code-language-favourite",{language:i,active:r}),this.sortLanguageList(),r&&e.scrollIntoView({block:"center",behavior:"smooth"})})}sortLanguageList(){let e=this.languageButtons.sort((i,r)=>{let o=i.dataset.favourite==="true",s=r.dataset.favourite==="true";return o&&!s?-1:s&&!o||i.dataset.lang>r.dataset.lang?1:-1}).map(i=>i.parentElement);for(let i of e)this.languageOptionsContainer.append(i)}save(){this.saveCallback&&this.saveCallback(this.editor.getContent(),this.languageInput.value),this.hide()}async open(e,i,r,o){this.languageInput.value=i,this.saveCallback=r,this.cancelCallback=o,await this.show(),this.languageInputChange(i),this.editor.setContent(e)}async show(){let e=await window.importVersioned("code");this.editor||(this.editor=e.popupEditor(this.editorInput,this.languageInput.value)),this.loadHistory(),this.getPopup().show(()=>{this.editor.focus()},()=>{this.addHistory(),this.cancelCallback&&this.cancelCallback()})}hide(){this.getPopup().hide(),this.addHistory()}getPopup(){return window.$components.firstOnElement(this.popup,"popup")}async updateEditorMode(e){this.editor.setMode(e,this.editor.getContent())}languageInputChange(e){this.updateEditorMode(e);let i=e.toLowerCase();for(let r of this.languageButtons){let o=r.dataset.lang.toLowerCase().trim(),s=i===o;r.classList.toggle("active",s),s&&r.scrollIntoView({block:"center",behavior:"smooth"})}}loadHistory(){this.history=JSON.parse(window.sessionStorage.getItem(this.historyKey)||"{}");let e=Object.keys(this.history).reverse();this.historyDropDown.classList.toggle("hidden",e.length===0),this.historyList.innerHTML=e.map(i=>{let r=new Date(parseInt(i,10)).toLocaleTimeString();return`
  • `}).join("")}addHistory(){if(!this.editor)return;let e=this.editor.getContent();if(!e)return;let i=Object.keys(this.history).pop();if(this.history[i]===e)return;this.history[String(Date.now())]=e;let r=JSON.stringify(this.history);window.sessionStorage.setItem(this.historyKey,r)}};var On=class extends g{setup(){let t=this.$el;t.querySelectorAll("pre").length>0&&window.importVersioned("code").then(i=>{i.highlightWithin(t)})}};var Rn=class extends g{async setup(){let{mode:t}=this.$opts;(await window.importVersioned("code")).inlineEditor(this.$el,t)}};var Nn=class extends g{setup(){this.container=this.$el,this.trigger=this.$refs.trigger,this.content=this.$refs.content,this.trigger&&(this.trigger.addEventListener("click",this.toggle.bind(this)),this.openIfContainsError())}open(){this.container.classList.add("open"),this.trigger.setAttribute("aria-expanded","true"),me(this.content,300)}close(){this.container.classList.remove("open"),this.trigger.setAttribute("aria-expanded","false"),fe(this.content,300)}toggle(){this.container.classList.contains("open")?this.close():this.open()}openIfContainsError(){this.content.querySelector(".text-neg.text-small")&&this.open()}};var zn=class extends g{setup(){this.container=this.$el,this.confirmButton=this.$refs.confirm,this.res=null,R(this.confirmButton,()=>{this.sendResult(!0),this.getPopup().hide()})}show(){return this.getPopup().show(null,()=>{this.sendResult(!1)}),new Promise(t=>{this.res=t})}getPopup(){return window.$components.firstOnElement(this.container,"popup")}sendResult(t){this.res&&(this.res(t),this.res=null)}};var Hn=class extends g{setup(){this.container=this.$el,this.checkbox=this.container.querySelector("input[type=checkbox]"),this.display=this.container.querySelector('[role="checkbox"]'),this.checkbox.addEventListener("change",this.stateChange.bind(this)),this.container.addEventListener("keydown",this.onKeyDown.bind(this))}onKeyDown(t){(t.key===" "||t.key==="Enter")&&(t.preventDefault(),this.toggle())}toggle(){this.checkbox.checked=!this.checkbox.checked,this.checkbox.dispatchEvent(new Event("change")),this.stateChange()}stateChange(){let t=this.checkbox.checked?"true":"false";this.display.setAttribute("aria-checked",t)}};var Un=class extends g{setup(){this.container=this.$el,this.dealtWith=!1,this.container.addEventListener("toggle",this.onToggle.bind(this))}onToggle(){this.dealtWith||(this.container.querySelector("pre")&&window.importVersioned("code").then(t=>{t.highlightWithin(this.container)}),this.dealtWith=!0)}};var jn=class extends g{setup(){this.container=this.$el,this.menu=this.$refs.menu,this.toggle=this.$refs.toggle,this.moveMenu=this.$opts.moveMenu,this.bubbleEscapes=this.$opts.bubbleEscapes==="true",this.direction=document.dir==="rtl"?"right":"left",this.body=document.body,this.showing=!1,this.hide=this.hide.bind(this),this.setupListeners()}show(t=null){this.hideAll(),this.menu.style.display="block",this.menu.classList.add("anim","menuIn"),this.toggle.setAttribute("aria-expanded","true");let e=this.menu.getBoundingClientRect(),i=0,r=this.toggle.getBoundingClientRect().height,o=e.bottom>window.innerHeight,s=this.container.getBoundingClientRect();if(this.moveMenu&&(this.body.appendChild(this.menu),this.menu.style.position="fixed",this.menu.style.width=`${e.width}px`,this.menu.style.left=`${e.left}px`,o?i=window.innerHeight-e.top-r/2:i=e.top),o){this.menu.style.top="initial",this.menu.style.bottom=`${i}px`;let c=window.innerHeight-40-(window.innerHeight-s.bottom);this.menu.style.maxHeight=`${Math.floor(c)}px`}else{this.menu.style.top=`${i}px`,this.menu.style.bottom="initial";let c=window.innerHeight-40-s.top;this.menu.style.maxHeight=`${Math.floor(c)}px`}this.menu.addEventListener("mouseleave",this.hide),window.addEventListener("click",c=>{this.menu.contains(c.target)||this.hide()});let a=this.menu.querySelector("input");a!==null&&a.focus(),this.showing=!0;let l=new Event("show");this.container.dispatchEvent(l),t&&t.stopPropagation()}hideAll(){for(let t of window.$components.get("dropdown"))t.hide()}hide(){this.menu.style.display="none",this.menu.classList.remove("anim","menuIn"),this.toggle.setAttribute("aria-expanded","false"),this.menu.style.top="",this.menu.style.bottom="",this.menu.style.maxHeight="",this.moveMenu&&(this.menu.style.position="",this.menu.style[this.direction]="",this.menu.style.width="",this.menu.style.left="",this.container.appendChild(this.menu)),this.showing=!1}setupListeners(){let t=new zt(this.container,e=>{this.hide(),this.toggle.focus(),this.bubbleEscapes||e.stopPropagation()},e=>{e.target.nodeName==="INPUT"&&(e.preventDefault(),e.stopPropagation()),this.hide()});this.moveMenu&&t.shareHandlingToEl(this.menu),this.container.addEventListener("click",e=>{Array.from(this.menu.querySelectorAll("a")).includes(e.target)&&this.hide()}),R(this.toggle,e=>{e.stopPropagation(),e.preventDefault(),this.show(e),e instanceof KeyboardEvent&&t.focusNext()})}};var Vn=class extends g{setup(){this.elem=this.$el,this.searchInput=this.$refs.searchInput,this.loadingElem=this.$refs.loading,this.listContainerElem=this.$refs.listContainer,this.localSearchSelector=this.$opts.localSearchSelector,this.url=this.$opts.url,this.elem.addEventListener("show",this.onShow.bind(this)),this.searchInput.addEventListener("input",this.onSearch.bind(this)),this.runAjaxSearch=Nt(this.runAjaxSearch,300,!1)}onShow(){this.loadList()}onSearch(){let t=this.searchInput.value.toLowerCase().trim();this.localSearchSelector?this.runLocalSearch(t):(this.toggleLoading(!0),this.listContainerElem.innerHTML="",this.runAjaxSearch(t))}runAjaxSearch(t){this.loadList(t)}runLocalSearch(t){let e=this.listContainerElem.querySelectorAll(this.localSearchSelector);for(let i of e){let r=!t||i.textContent.toLowerCase().includes(t);i.style.display=r?"flex":"none",i.classList.toggle("hidden",!r)}}async loadList(t=""){this.listContainerElem.innerHTML="",this.toggleLoading(!0);try{let e=await window.$http.get(this.getAjaxUrl(t)),i=$s(this.listContainerElem,80);this.listContainerElem.innerHTML=e.data,i()}catch(e){console.error(e)}this.toggleLoading(!1),this.localSearchSelector&&this.onSearch()}getAjaxUrl(t=null){if(!t)return this.url;let e=this.url.includes("?")?"&":"?";return`${this.url}${e}search=${encodeURIComponent(t)}`}toggleLoading(t=!1){this.loadingElem.style.display=t?"block":"none"}};var Ft=class{constructor(t){this.data=t}hasItems(){return!!this.data&&!!this.data.types&&this.data.types.length>0}containsTabularData(){let t=this.data.getData("text/rtf");return t&&t.includes("\\trowd")}getImages(){let{types:t}=this.data,e=[];for(let r of t)if(r.includes("image")){let o=this.data.getData(r);e.push(o.getAsFile())}let i=this.getFiles().filter(r=>r.type.includes("image"));return e.push(...i),e}getFiles(){let{files:t}=this.data;return[...t]}};async function Vr(n){if(window.isSecureContext&&navigator.clipboard){await navigator.clipboard.writeText(n);return}let t=document.createElement("textarea");t.style="position: absolute; left: -1000px; top: -1000px;",t.value=n,document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}var Wn=class extends g{setup(){this.container=this.$el,this.statusArea=this.$refs.statusArea,this.dropTarget=this.$refs.dropTarget,this.selectButtons=this.$manyRefs.selectButton||[],this.isActive=!0,this.url=this.$opts.url,this.method=(this.$opts.method||"post").toUpperCase(),this.successMessage=this.$opts.successMessage,this.errorMessage=this.$opts.errorMessage,this.uploadLimitMb=Number(this.$opts.uploadLimit),this.uploadLimitMessage=this.$opts.uploadLimitMessage,this.zoneText=this.$opts.zoneText,this.fileAcceptTypes=this.$opts.fileAccept,this.allowMultiple=this.$opts.allowMultiple==="true",this.setupListeners()}toggleActive(t){this.isActive=t}setupListeners(){R(this.selectButtons,this.manualSelectHandler.bind(this)),this.setupDropTargetHandlers()}setupDropTargetHandlers(){let t=0,e=()=>{this.hideOverlay(),t=0};this.dropTarget.addEventListener("dragenter",i=>{i.preventDefault(),t+=1,t===1&&this.isActive&&this.showOverlay()}),this.dropTarget.addEventListener("dragover",i=>{i.preventDefault()}),this.dropTarget.addEventListener("dragend",e),this.dropTarget.addEventListener("dragleave",()=>{t-=1,t===0&&e()}),this.dropTarget.addEventListener("drop",i=>{if(i.preventDefault(),e(),!this.isActive)return;let o=new Ft(i.dataTransfer).getFiles();for(let s of o)this.createUploadFromFile(s)})}manualSelectHandler(){let t=Et("input",{type:"file",style:"left: -400px; visibility: hidden; position: fixed;",accept:this.fileAcceptTypes,multiple:this.allowMultiple?"":null});this.container.append(t),t.click(),t.addEventListener("change",()=>{for(let e of t.files)this.createUploadFromFile(e);t.remove()})}showOverlay(){if(!this.dropTarget.querySelector(".dropzone-overlay")){let e=Et("div",{class:"dropzone-overlay"},[this.zoneText]);this.dropTarget.append(e)}}hideOverlay(){let t=this.dropTarget.querySelector(".dropzone-overlay");t&&t.remove()}createUploadFromFile(t){let{dom:e,status:i,progress:r,dismiss:o}=this.createDomForFile(t);this.statusArea.append(e);let s=this,a={file:t,dom:e,updateProgress(l){r.textContent=`${l}%`,r.style.width=`${l}%`},markError(l){i.setAttribute("data-status","error"),i.textContent=l,Le(e),this.updateProgress(100)},markSuccess(l){i.setAttribute("data-status","success"),i.textContent=l,Le(e),setTimeout(o,2400),s.$emit("upload-success",{name:t.name})}};return t.size>this.uploadLimitMb*1e6?(a.markError(this.uploadLimitMessage),a):(this.startXhrForUpload(a),a)}startXhrForUpload(t){let e=new FormData;e.append("file",t.file,t.file.name),this.method!=="POST"&&e.append("_method",this.method);let i=this,r=window.$http.createXMLHttpRequest("POST",this.url,{error(){t.markError(i.errorMessage)},readystatechange(){if(this.readyState===XMLHttpRequest.DONE&&this.status===200)t.markSuccess(i.successMessage);else if(this.readyState===XMLHttpRequest.DONE&&this.status>=400){let o=this.responseText,s=o.startsWith("{")?JSON.parse(o):{message:o},a=s?.message||s?.error||o;t.markError(a)}}});r.upload.addEventListener("progress",o=>{let s=Math.min(Math.ceil(o.loaded/o.total*100),100);t.updateProgress(s)}),r.setRequestHeader("Accept","application/json"),r.send(e)}createDomForFile(t){let e=Et("img",{src:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.224 7.373a.924.924 0 0 0-.92.925l-.006 7.404c0 .509.412.925.921.925h5.557a.928.928 0 0 0 .926-.925v-5.553l-2.777-2.776Zm3.239 3.239V8.067l2.545 2.545z' style='fill:%23000;fill-opacity:.75'/%3E%3C/svg%3E"}),i=Et("div",{class:"dropzone-file-item-status"},[]),r=Et("div",{class:"dropzone-file-item-progress"}),o=Et("div",{class:"dropzone-file-item-image-wrap"},[e]),s=Et("div",{class:"dropzone-file-item"},[o,Et("div",{class:"dropzone-file-item-text-wrap"},[Et("div",{class:"dropzone-file-item-label"},[t.name]),ae(),i]),r]);t.type.startsWith("image/")&&(e.src=URL.createObjectURL(t));let a=()=>{s.classList.add("dismiss"),s.addEventListener("animationend",()=>{s.remove()})};return s.addEventListener("click",a),{dom:s,progress:r,status:i,dismiss:a}}};var Gn=class extends g{setup(){this.container=this.$el,this.buttons=this.$manyRefs.tabButton,this.contentElements=this.$manyRefs.tabContent,this.toggleButton=this.$refs.toggle,this.editorWrapEl=this.container.closest(".page-editor"),this.setupListeners(),this.setActiveTab(this.contentElements[0].dataset.tabContent)}setupListeners(){this.toggleButton.addEventListener("click",()=>this.toggle()),this.container.addEventListener("click",t=>{let e=t.target.closest("button");if(this.buttons.includes(e)){let i=e.dataset.tab;this.setActiveTab(i,!0)}})}toggle(){this.container.classList.toggle("open");let t=this.container.classList.contains("open");this.toggleButton.setAttribute("aria-expanded",t?"true":"false"),this.editorWrapEl.classList.toggle("toolbox-open",t)}setActiveTab(t,e=!1){for(let i of this.buttons)i.classList.remove("active"),i.dataset.tab===t&&i.classList.add("active");for(let i of this.contentElements)i.style.display="none",i.dataset.tabContent===t&&(i.style.display="block");e&&!this.container.classList.contains("open")&&this.toggle()}};var Kn=class extends g{setup(){this.container=this.$el,this.entityType=this.$opts.entityType,this.everyoneInheritToggle=this.$refs.everyoneInherit,this.roleSelect=this.$refs.roleSelect,this.roleContainer=this.$refs.roleContainer,this.setupListeners()}setupListeners(){this.everyoneInheritToggle.addEventListener("change",t=>{let e=t.target.checked,i=document.querySelectorAll('input[name^="permissions[0]["]');for(let r of i)r.disabled=e,r.checked=!1}),this.container.addEventListener("click",t=>{let e=t.target.closest("button");e&&e.dataset.roleId&&this.removeRowOnButtonClick(e)}),this.roleSelect.addEventListener("change",()=>{let t=this.roleSelect.value;t&&this.addRoleRow(t)})}async addRoleRow(t){this.roleSelect.disabled=!0;let e=this.roleSelect.querySelector(`option[value="${t}"]`);e&&e.remove();let i=await window.$http.get(`/permissions/form-row/${this.entityType}/${t}`),r=_t(i.data);this.roleContainer.append(r),this.roleSelect.disabled=!1}removeRowOnButtonClick(t){let e=t.closest(".item-list-row"),{roleId:i}=t.dataset,{roleName:r}=t.dataset,o=document.createElement("option");o.value=i,o.textContent=r,this.roleSelect.append(o),e.remove()}};var Zn=class extends g{setup(){this.entityId=this.$opts.entityId,this.entityType=this.$opts.entityType,this.contentView=this.$refs.contentView,this.searchView=this.$refs.searchView,this.searchResults=this.$refs.searchResults,this.searchInput=this.$refs.searchInput,this.searchForm=this.$refs.searchForm,this.clearButton=this.$refs.clearButton,this.loadingBlock=this.$refs.loadingBlock,this.setupListeners()}setupListeners(){this.searchInput.addEventListener("change",this.runSearch.bind(this)),this.searchForm.addEventListener("submit",t=>{t.preventDefault(),this.runSearch()}),R(this.clearButton,this.clearSearch.bind(this))}runSearch(){let t=this.searchInput.value.trim();if(t.length===0){this.clearSearch();return}this.searchView.classList.remove("hidden"),this.contentView.classList.add("hidden"),this.loadingBlock.classList.remove("hidden");let e=window.baseUrl(`/search/${this.entityType}/${this.entityId}`);window.$http.get(e,{term:t}).then(i=>{this.searchResults.innerHTML=i.data}).catch(console.error).then(()=>{this.loadingBlock.classList.add("hidden")})}clearSearch(){this.searchView.classList.add("hidden"),this.contentView.classList.remove("hidden"),this.loadingBlock.classList.add("hidden"),this.searchInput.value=""}};var Xn=class extends g{setup(){this.elem=this.$el,this.entityTypes=this.$opts.entityTypes||"page,book,chapter",this.entityPermission=this.$opts.entityPermission||"view",this.input=this.$refs.input,this.searchInput=this.$refs.search,this.loading=this.$refs.loading,this.resultsContainer=this.$refs.results,this.search="",this.lastClick=0,this.selectedItemData=null,this.setupListeners(),this.showLoading(),this.initialLoad()}setupListeners(){this.elem.addEventListener("click",this.onClick.bind(this));let t=0;this.searchInput.addEventListener("input",()=>{t=Date.now(),this.showLoading(),setTimeout(()=>{Date.now()-t<199||this.searchEntities(this.searchInput.value)},200)}),this.searchInput.addEventListener("keydown",e=>{e.keyCode===13&&e.preventDefault()}),K(this.$el,"[data-entity-type]","keydown",e=>{if(e.ctrlKey&&e.code==="Enter"){let i=this.$el.closest("form");if(i){i.submit(),e.preventDefault();return}}e.code==="ArrowDown"&&this.focusAdjacent(!0),e.code==="ArrowUp"&&this.focusAdjacent(!1)}),this.searchInput.addEventListener("keydown",e=>{e.code==="ArrowDown"&&this.focusAdjacent(!0)})}focusAdjacent(t=!0){let e=Array.from(this.resultsContainer.querySelectorAll("[data-entity-type]")),i=e.indexOf(document.activeElement),r=e[i+(t?1:-1)]||e[0];r&&r.focus()}reset(){this.searchInput.value="",this.showLoading(),this.initialLoad()}focusSearch(){this.searchInput.focus()}searchText(t){this.searchInput.value=t,this.searchEntities(t)}showLoading(){this.loading.style.display="block",this.resultsContainer.style.display="none"}hideLoading(){this.loading.style.display="none",this.resultsContainer.style.display="block"}initialLoad(){window.$http.get(this.searchUrl()).then(t=>{this.resultsContainer.innerHTML=t.data,this.hideLoading()})}searchUrl(){return`/search/entity-selector?types=${encodeURIComponent(this.entityTypes)}&permission=${encodeURIComponent(this.entityPermission)}`}searchEntities(t){this.input.value="";let e=`${this.searchUrl()}&term=${encodeURIComponent(t)}`;window.$http.get(e).then(i=>{this.resultsContainer.innerHTML=i.data,this.hideLoading()})}isDoubleClick(){let t=Date.now(),e=t-this.lastClick<300;return this.lastClick=t,e}onClick(t){let e=t.target.closest("[data-entity-type]");e&&(t.preventDefault(),t.stopPropagation(),this.selectItem(e))}selectItem(t){let e=this.isDoubleClick(),i=t.getAttribute("data-entity-type"),r=t.getAttribute("data-entity-id"),o=!t.classList.contains("selected")||e;this.unselectAll(),this.input.value=o?`${i}:${r}`:"";let s=t.getAttribute("href"),a=t.querySelector(".entity-list-item-name").textContent,l={id:Number(r),name:a,link:s};o?(t.classList.add("selected"),this.selectedItemData=l):window.$events.emit("entity-select-change",null),!(!e&&!o)&&(e&&this.confirmSelection(l),o&&window.$events.emit("entity-select-change",l))}confirmSelection(t){window.$events.emit("entity-select-confirm",t)}unselectAll(){let t=this.elem.querySelectorAll(".selected");for(let e of t)e.classList.remove("selected","primary-background");this.selectedItemData=null}};var Yn=class extends g{setup(){this.container=this.$el,this.selectButton=this.$refs.select,this.selectorEl=this.$refs.selector,this.callback=null,this.selection=null,this.selectButton.addEventListener("click",this.onSelectButtonClick.bind(this)),window.$events.listen("entity-select-change",this.onSelectionChange.bind(this)),window.$events.listen("entity-select-confirm",this.handleConfirmedSelection.bind(this))}show(t,e=""){this.callback=t,this.getPopup().show(),e&&this.getSelector().searchText(e),this.getSelector().focusSearch()}hide(){this.getPopup().hide()}getPopup(){return window.$components.firstOnElement(this.container,"popup")}getSelector(){return window.$components.firstOnElement(this.selectorEl,"entity-selector")}onSelectButtonClick(){this.handleConfirmedSelection(this.selection)}onSelectionChange(t){this.selection=t,t===null?this.selectButton.setAttribute("disabled","true"):this.selectButton.removeAttribute("disabled")}handleConfirmedSelection(t){this.hide(),this.getSelector().reset(),this.callback&&t&&this.callback(t)}};var Jn=class extends g{setup(){this.container=this.$el,this.name=this.$opts.name,R(this.$el,()=>{this.$emit(this.name,this.$opts)})}};var Qn=class extends g{setup(){this.targetSelector=this.$opts.targetSelector,this.isOpen=this.$opts.isOpen==="true",this.updateEndpoint=this.$opts.updateEndpoint,this.$el.addEventListener("click",this.click.bind(this))}open(t){me(t,200)}close(t){fe(t,200)}click(t){t.preventDefault();let e=document.querySelectorAll(this.targetSelector);for(let i of e)(this.isOpen?this.close:this.open)(i);this.isOpen=!this.isOpen,this.updateSystemAjax(this.isOpen)}updateSystemAjax(t){window.$http.patch(this.updateEndpoint,{expand:t?"true":"false"})}};var ti=class extends g{setup(){this.container=this.$el,this.input=this.$refs.input,this.suggestions=this.$refs.suggestions,this.suggestionResultsWrap=this.$refs.suggestionResults,this.loadingWrap=this.$refs.loading,this.button=this.$refs.button,this.setupListeners()}setupListeners(){let t=Nt(this.updateSuggestions.bind(this),200,!1);this.input.addEventListener("input",()=>{let{value:e}=this.input;e.length>0?(this.loadingWrap.style.display="block",this.suggestionResultsWrap.style.opacity="0.5",t(e)):this.hideSuggestions()}),this.input.addEventListener("dblclick",()=>{this.input.setAttribute("autocomplete","on"),this.button.focus(),this.input.focus()}),new zt(this.container,()=>{this.hideSuggestions()})}async updateSuggestions(t){let{data:e}=await window.$http.get("/search/suggest",{term:t});if(!this.input.value)return;let i=_t(e);this.suggestionResultsWrap.innerHTML="",this.suggestionResultsWrap.style.opacity="1",this.loadingWrap.style.display="none",this.suggestionResultsWrap.append(i),this.container.classList.contains("search-active")||this.showSuggestions()}showSuggestions(){this.container.classList.add("search-active"),window.requestAnimationFrame(()=>{this.suggestions.classList.add("search-suggestions-animation")})}hideSuggestions(){this.container.classList.remove("search-active"),this.suggestions.classList.remove("search-suggestions-animation"),this.suggestionResultsWrap.innerHTML=""}};var ei=class extends g{setup(){this.elem=this.$el,this.toggleButton=this.$refs.toggle,this.menu=this.$refs.menu,this.open=!1,this.toggleButton.addEventListener("click",this.onToggle.bind(this)),this.onWindowClick=this.onWindowClick.bind(this),this.onKeyDown=this.onKeyDown.bind(this)}onToggle(t){this.open=!this.open,this.menu.classList.toggle("show",this.open),this.toggleButton.setAttribute("aria-expanded",this.open?"true":"false"),this.open?(this.elem.addEventListener("keydown",this.onKeyDown),window.addEventListener("click",this.onWindowClick)):(this.elem.removeEventListener("keydown",this.onKeyDown),window.removeEventListener("click",this.onWindowClick)),t.stopPropagation()}onKeyDown(t){t.code==="Escape"&&this.onToggle(t)}onWindowClick(t){this.onToggle(t)}};var ni=class extends g{setup(){this.uploadedTo=this.$opts.uploadedTo,this.container=this.$el,this.popupEl=this.$refs.popup,this.searchForm=this.$refs.searchForm,this.searchInput=this.$refs.searchInput,this.cancelSearch=this.$refs.cancelSearch,this.listContainer=this.$refs.listContainer,this.filterTabs=this.$manyRefs.filterTabs,this.selectButton=this.$refs.selectButton,this.uploadButton=this.$refs.uploadButton,this.uploadHint=this.$refs.uploadHint,this.formContainer=this.$refs.formContainer,this.formContainerPlaceholder=this.$refs.formContainerPlaceholder,this.dropzoneContainer=this.$refs.dropzoneContainer,this.loadMore=this.$refs.loadMore,this.type="gallery",this.lastSelected={},this.lastSelectedTime=0,this.callback=null,this.resetState=()=>{this.hasData=!1,this.page=1,this.filter="all"},this.resetState(),this.setupListeners()}setupListeners(){R(this.filterTabs,i=>{this.resetAll(),this.filter=i.target.dataset.filter,this.setActiveFilterTab(this.filter),this.loadGallery()}),this.searchForm.addEventListener("submit",i=>{this.resetListView(),this.loadGallery(),this.cancelSearch.toggleAttribute("hidden",!this.searchInput.value),i.preventDefault()}),R(this.cancelSearch,()=>{this.resetListView(),this.resetSearchView(),this.loadGallery()}),K(this.container,".load-more button","click",this.runLoadMore.bind(this)),this.listContainer.addEventListener("event-emit-select-image",this.onImageSelectEvent.bind(this)),this.listContainer.addEventListener("error",i=>{i.target.src=window.baseUrl("loading_error.png")},!0),R(this.selectButton,()=>{this.callback&&this.callback(this.lastSelected),this.hide()}),K(this.formContainer,"#image-manager-delete","click",()=>{this.lastSelected&&this.loadImageEditForm(this.lastSelected.id,!0)}),K(this.formContainer,"#image-manager-rebuild-thumbs","click",async(i,r)=>{r.disabled=!0,this.lastSelected&&await this.rebuildThumbnails(this.lastSelected.id),r.disabled=!1}),this.formContainer.addEventListener("ajax-form-success",()=>{this.refreshGallery(),this.resetEditForm()}),this.container.addEventListener("dropzone-upload-success",this.refreshGallery.bind(this));let t=this.listContainer.parentElement,e=[];t.addEventListener("wheel",i=>{if(!(Math.ceil(t.scrollHeight-t.scrollTop)===t.clientHeight)||i.deltaY<1)return;let s=Date.now()-1e3;e.push(Date.now()),e=e.filter(a=>a>=s),e.length>5&&this.canLoadMore()&&this.runLoadMore()})}show(t,e="gallery"){this.resetAll(),this.callback=t,this.type=e,this.getPopup().show();let i=e!=="gallery";this.dropzoneContainer.classList.toggle("hidden",i),this.uploadButton.classList.toggle("hidden",i),this.uploadHint.classList.toggle("hidden",i),window.$components.firstOnElement(this.container,"dropzone").toggleActive(!i),this.hasData||(this.loadGallery(),this.hasData=!0)}hide(){this.getPopup().hide()}getPopup(){return window.$components.firstOnElement(this.popupEl,"popup")}async loadGallery(){let t={page:this.page,search:this.searchInput.value||null,uploaded_to:this.uploadedTo,filter_type:this.filter==="all"?null:this.filter},{data:e}=await window.$http.get(`images/${this.type}`,t);t.page===1&&(this.listContainer.innerHTML=""),this.addReturnedHtmlElementsToList(e),Le(this.listContainer)}addReturnedHtmlElementsToList(t){let e=document.createElement("div");e.innerHTML=t;let i=e.querySelector(".load-more");i&&(i.remove(),this.loadMore.innerHTML=i.innerHTML),this.loadMore.toggleAttribute("hidden",!i),window.$components.init(e);for(let r of[...e.children])this.listContainer.appendChild(r)}setActiveFilterTab(t){for(let e of this.filterTabs){let i=e.dataset.filter===t;e.setAttribute("aria-selected",i?"true":"false")}}resetAll(){this.resetState(),this.resetListView(),this.resetSearchView(),this.resetEditForm(),this.setActiveFilterTab("all"),this.selectButton.classList.add("hidden")}resetSearchView(){this.searchInput.value="",this.cancelSearch.toggleAttribute("hidden",!0)}resetEditForm(){this.formContainer.innerHTML="",this.formContainerPlaceholder.removeAttribute("hidden")}resetListView(){De(this.listContainer),this.page=1}refreshGallery(){this.resetListView(),this.loadGallery()}async onImageSelectEvent(t){let e=JSON.parse(t.detail.data),i=e&&e.id===this.lastSelected.id&&Date.now()-this.lastSelectedTime<400,r=t.target.classList.contains("selected");[...this.listContainer.querySelectorAll(".selected")].forEach(o=>{o.classList.remove("selected")}),!r&&!i?(t.target.classList.add("selected"),e=await this.loadImageEditForm(e.id)):i?i&&(e=this.lastSelected):this.resetEditForm(),this.selectButton.classList.toggle("hidden",r),i&&this.callback&&(this.callback(e),this.hide()),this.lastSelected=e,this.lastSelectedTime=Date.now()}async loadImageEditForm(t,e=!1){e||(this.formContainer.innerHTML="");let i=e?{delete:!0}:{},{data:r}=await window.$http.get(`/images/edit/${t}`,i);this.formContainer.innerHTML=r,this.formContainerPlaceholder.setAttribute("hidden",""),window.$components.init(this.formContainer);let o=this.formContainer.querySelector("#image-manager-form-image-data");return JSON.parse(o.text)}runLoadMore(){De(this.loadMore),this.page+=1,this.loadGallery()}canLoadMore(){return this.loadMore.querySelector("button")&&!this.loadMore.hasAttribute("hidden")}async rebuildThumbnails(t){try{let e=await window.$http.put(`/images/${t}/rebuild-thumbnails`);window.$events.success(e.data),this.refreshGallery()}catch(e){window.$events.showResponseError(e)}}};var ii=class extends g{setup(){this.imageElem=this.$refs.image,this.imageInput=this.$refs.imageInput,this.resetInput=this.$refs.resetInput,this.removeInput=this.$refs.removeInput,this.resetButton=this.$refs.resetButton,this.removeButton=this.$refs.removeButton||null,this.defaultImage=this.$opts.defaultImage,this.setupListeners()}setupListeners(){this.resetButton.addEventListener("click",this.reset.bind(this)),this.removeButton&&this.removeButton.addEventListener("click",this.removeImage.bind(this)),this.imageInput.addEventListener("change",this.fileInputChange.bind(this))}fileInputChange(){this.resetInput.setAttribute("disabled","disabled"),this.removeInput&&this.removeInput.setAttribute("disabled","disabled");for(let t of this.imageInput.files)this.imageElem.src=window.URL.createObjectURL(t);this.imageElem.classList.remove("none")}reset(){this.imageInput.value="",this.imageElem.src=this.defaultImage,this.resetInput.removeAttribute("disabled"),this.removeInput&&this.removeInput.setAttribute("disabled","disabled"),this.imageElem.classList.remove("none")}removeImage(){this.imageInput.value="",this.imageElem.classList.add("none"),this.removeInput.removeAttribute("disabled"),this.resetInput.setAttribute("disabled","disabled")}};var ri=class extends g{setup(){this.elem=this.$el,this.menu=this.$refs.menu,this.sortInput=this.$refs.sort,this.orderInput=this.$refs.order,this.form=this.$refs.form,this.setupListeners()}setupListeners(){this.menu.addEventListener("click",t=>{t.target.closest("[data-sort-value]")!==null&&this.sortOptionClick(t)}),this.elem.addEventListener("click",t=>{t.target.closest("[data-sort-dir]")!==null&&this.sortDirectionClick(t)})}sortOptionClick(t){let e=t.target.closest("[data-sort-value]");this.sortInput.value=e.getAttribute("data-sort-value"),t.preventDefault(),this.form.submit()}sortDirectionClick(t){let e=this.orderInput.value;this.orderInput.value=e==="asc"?"desc":"asc",t.preventDefault(),this.form.submit()}};var Hc=Wo(Bc()),Uc=Wo(zc()),wi=class{constructor(){this.renderer=new Hc.default({html:!0}),this.renderer.use(Uc.default,{label:!0})}getRenderer(){return this.renderer}render(t){return this.renderer.render(t)}};function rf(n,t){return document.createElement(n,t)}function of(n,t,e){return document.createElementNS(n,t,e)}function sf(){return te(document.createDocumentFragment())}function af(n){return document.createTextNode(n)}function lf(n){return document.createComment(n)}function cf(n,t,e){if(qt(n)){let i=n;for(;i&&qt(i);)i=te(i).parent;n=i??n}qt(t)&&(t=te(t,n)),e&&qt(e)&&(e=te(e).firstChildNode),n.insertBefore(t,e)}function uf(n,t){n.removeChild(t)}function hf(n,t){qt(t)&&(t=te(t,n)),n.appendChild(t)}function jc(n){if(qt(n)){for(;n&&qt(n);)n=te(n).parent;return n??null}return n.parentNode}function df(n){var t;if(qt(n)){let e=te(n),i=jc(e);if(i&&e.lastChildNode){let r=Array.from(i.childNodes),o=r.indexOf(e.lastChildNode);return(t=r[o+1])!==null&&t!==void 0?t:null}return null}return n.nextSibling}function pf(n){return n.tagName}function ff(n,t){n.textContent=t}function mf(n){return n.textContent}function gf(n){return n.nodeType===1}function bf(n){return n.nodeType===3}function vf(n){return n.nodeType===8}function qt(n){return n.nodeType===11}function te(n,t){var e,i,r;let o=n;return(e=o.parent)!==null&&e!==void 0||(o.parent=t??null),(i=o.firstChildNode)!==null&&i!==void 0||(o.firstChildNode=n.firstChild),(r=o.lastChildNode)!==null&&r!==void 0||(o.lastChildNode=n.lastChild),o}var yi={createElement:rf,createElementNS:of,createTextNode:af,createDocumentFragment:sf,createComment:lf,insertBefore:cf,removeChild:uf,appendChild:hf,parentNode:jc,nextSibling:df,tagName:pf,setTextContent:ff,getTextContent:mf,isElement:gf,isText:bf,isComment:vf,isDocumentFragment:qt};function Bt(n,t,e,i,r){let o=t===void 0?void 0:t.key;return{sel:n,data:t,children:e,text:i,elm:r,key:o}}var Vc=Array.isArray;function Wc(n){return typeof n=="string"||typeof n=="number"||n instanceof String||n instanceof Number}function Co(n){return n===void 0}function ut(n){return n!==void 0}var Eo=Bt("",{},[],void 0,void 0);function Je(n,t){var e,i;let r=n.key===t.key,o=((e=n.data)===null||e===void 0?void 0:e.is)===((i=t.data)===null||i===void 0?void 0:i.is),s=n.sel===t.sel,a=!n.sel&&n.sel===t.sel?typeof n.text==typeof t.text:!0;return s&&r&&o&&a}function yf(){throw new Error("The document fragment is not supported on this platform.")}function xf(n,t){return n.isElement(t)}function kf(n,t){return n.isDocumentFragment(t)}function Cf(n,t,e){var i;let r={};for(let o=t;o<=e;++o){let s=(i=n[o])===null||i===void 0?void 0:i.key;s!==void 0&&(r[s]=o)}return r}var Ef=["create","update","remove","destroy","pre","post"];function _o(n,t,e){let i={create:[],update:[],remove:[],destroy:[],pre:[],post:[]},r=t!==void 0?t:yi;for(let p of Ef)for(let m of n){let w=m[p];w!==void 0&&i[p].push(w)}function o(p){let m=p.id?"#"+p.id:"",w=p.getAttribute("class"),v=w?"."+w.split(" ").join("."):"";return Bt(r.tagName(p).toLowerCase()+m+v,{},[],void 0,p)}function s(p){return Bt(void 0,{},[],void 0,p)}function a(p,m){return function(){if(--m===0){let v=r.parentNode(p);r.removeChild(v,p)}}}function l(p,m){var w,v,b,k;let x,E=p.data;if(E!==void 0){let D=(w=E.hook)===null||w===void 0?void 0:w.init;ut(D)&&(D(p),E=p.data)}let y=p.children,S=p.sel;if(S==="!")Co(p.text)&&(p.text=""),p.elm=r.createComment(p.text);else if(S!==void 0){let D=S.indexOf("#"),M=S.indexOf(".",D),T=D>0?D:S.length,P=M>0?M:S.length,H=D!==-1||M!==-1?S.slice(0,Math.min(T,P)):S,U=p.elm=ut(E)&&ut(x=E.ns)?r.createElementNS(x,H,E):r.createElement(H,E);for(T0&&U.setAttribute("class",S.slice(P+1).replace(/\./g," ")),x=0;x0&&(u.attrs=l),Object.keys(c).length>0&&(u.dataset=c),a[0]==="s"&&a[1]==="v"&&a[2]==="g"&&(a.length===3||a[3]==="."||a[3]==="#")&&So(u,h,a),Bt(a,u,h,void 0,n)}else return e.isText(n)?(i=e.getTextContent(n),Bt(void 0,void 0,void 0,i,n)):e.isComment(n)?(i=e.getTextContent(n),Bt("!",{},[],i,n)):Bt("",{},[],void 0,n)}var _f="http://www.w3.org/1999/xlink",Sf="http://www.w3.org/XML/1998/namespace";function Gc(n,t){let e,i=t.elm,r=n.data.attrs,o=t.data.attrs;if(!(!r&&!o)&&r!==o){r=r||{},o=o||{};for(e in o){let s=o[e];r[e]!==s&&(s===!0?i.setAttribute(e,""):s===!1?i.removeAttribute(e):e.charCodeAt(0)!==120?i.setAttribute(e,s):e.charCodeAt(3)===58?i.setAttributeNS(Sf,e,s):e.charCodeAt(5)===58?i.setAttributeNS(_f,e,s):i.setAttribute(e,s))}for(e in r)e in o||i.removeAttribute(e)}}var Ao={create:Gc,update:Gc};var xi;function Af(){return xi||(xi=_o([Ao]),xi)}function Kc(n,t){let e=document.createElement("div");e.innerHTML=t,Af()(Qe(n),Qe(e))}var ki=class{constructor(t){this.editor=t,this.container=t.config.displayEl,this.doc=null,this.lastDisplayClick=0,this.container.contentDocument.readyState==="complete"?this.onLoad():this.container.addEventListener("load",this.onLoad.bind(this)),this.updateVisibility(t.settings.get("showPreview")),t.settings.onChange("showPreview",e=>this.updateVisibility(e))}updateVisibility(t){let e=this.container.closest(".markdown-editor-wrap");e.style.display=t?null:"none"}onLoad(){this.doc=this.container.contentDocument,this.loadStylesIntoDisplay(),this.doc.body.className="page-content",this.doc.addEventListener("click",this.onDisplayClick.bind(this))}onDisplayClick(t){let e=Date.now()-this.lastDisplayClick<300,i=t.target.closest("a");if(i!==null){t.preventDefault(),window.open(i.getAttribute("href"));return}let r=t.target.closest("[drawio-diagram]");if(r!==null&&e){this.editor.actions.editDrawing(r);return}this.lastDisplayClick=Date.now()}loadStylesIntoDisplay(){this.doc.documentElement.classList.add("markdown-editor-display"),document.documentElement.classList.contains("dark-mode")&&(this.doc.documentElement.style.backgroundColor="#222",this.doc.documentElement.classList.add("dark-mode")),this.doc.head.innerHTML="";let t=document.head.querySelectorAll("style,link[rel=stylesheet]");for(let e of t){let i=e.cloneNode(!0);this.doc.head.appendChild(i)}}patchWithHtml(t){let{body:e}=this.doc;if(e.children.length===0){let r=document.createElement("div");this.doc.body.append(r)}let i=e.children[0];Kc(i,t)}scrollToIndex(t){let e=this.doc.body?.children[0]?.children;if(e&&e.length<=t)return;(t===-1?e[e.length-1]:e[t]).scrollIntoView({block:"start",inline:"nearest",behavior:"smooth"})}};function Ci(n){return new Promise((t,e)=>{n.oncomplete=n.onsuccess=()=>t(n.result),n.onabort=n.onerror=()=>e(n.error)})}function Df(n,t){let e=indexedDB.open(n);e.onupgradeneeded=()=>e.result.createObjectStore(t);let i=Ci(e);return(r,o)=>i.then(s=>o(s.transaction(t,r).objectStore(t)))}var Do;function Lo(){return Do||(Do=Df("keyval-store","keyval")),Do}function To(n,t=Lo()){return t("readonly",e=>Ci(e.get(n)))}function $o(n,t,e=Lo()){return e("readwrite",i=>(i.put(t,n),Ci(i.transaction)))}function Io(n,t=Lo()){return t("readwrite",e=>(e.delete(n),Ci(e.transaction)))}var $t=null,qo,Ei,Mo,Fo="last-drawing-save";function Bo(n){$t.contentWindow.postMessage(JSON.stringify(n),qo)}function Tf(n){$o(Fo,n.data),Mo&&Mo(n.data).then(()=>{Io(Fo)})}function $f(n){Bo({action:"export",format:"xmlpng",xml:n.xml,spin:"Updating drawing"})}function If(){Ei&&Ei().then(n=>{Bo({action:"load",autosave:1,xml:n})})}function Mf(){let n={};window.$events.emitPublic($t,"editor-drawio::configure",{config:n}),Bo({action:"configure",config:n})}function Zc(){window.removeEventListener("message",Xc),$t&&document.body.removeChild($t)}function Xc(n){if(!n.data||n.data.length<1||n.origin!==qo)return;let t=JSON.parse(n.data);t.event==="init"?If():t.event==="exit"?Zc():t.event==="save"?$f(t):t.event==="export"?Tf(t):t.event==="configure"&&Mf()}async function Ff(){let n=await To(Fo),t=document.getElementById("unsaved-drawing-dialog");t||console.error("Missing expected unsaved-drawing dialog"),n&&await window.$components.firstOnElement(t,"confirm-dialog").show()&&(Ei=async()=>n)}async function tn(n,t,e){Ei=t,Mo=e,await Ff(),$t=document.createElement("iframe"),$t.setAttribute("frameborder","0"),window.addEventListener("message",Xc),$t.setAttribute("src",n),$t.setAttribute("class","fullscreen"),$t.style.backgroundColor="#FFFFFF",document.body.appendChild($t),qo=new URL(n).origin}async function Po(n,t){let e={image:n,uploaded_to:t};return(await window.$http.post(window.baseUrl("/images/drawio"),e)).data}function ee(){Zc()}async function _i(n){try{return`data:image/png;base64,${(await window.$http.get(window.baseUrl(`/images/drawio/base64/${n}`))).data.content}`}catch(t){throw t instanceof window.$http.HttpError&&window.$events.showResponseError(t),ee(),t}}var en,Oo,xe,Si,ke,Ai,Pt,ne,Wt,ye,rt,ht,nn,Ro,rn,No,Ce,Di,dt,vt,Ti,Jc,Li=class{constructor(t){ot(this,en);ot(this,xe);ot(this,ke);ot(this,Pt);ot(this,Wt);ot(this,rt);ot(this,nn);ot(this,rn);ot(this,Ce);ot(this,dt);ot(this,Ti);this.editor=t,this.lastContent={html:"",markdown:""}}updateAndRender(){let t=L(this,xe,Si).call(this);this.editor.config.inputEl.value=t;let e=this.editor.markdown.render(t);window.$events.emit("editor-html-change",""),window.$events.emit("editor-markdown-change",""),this.lastContent.html=e,this.lastContent.markdown=t,this.editor.display.patchWithHtml(e)}getContent(){return this.lastContent}showImageInsert(){window.$components.first("image-manager").show(e=>{let i=e.thumbs?.display||e.url,o=`[![${L(this,Wt,ye).call(this)||e.name}](${i})](${e.url})`;L(this,Pt,ne).call(this,o,o.length)},"gallery")}insertImage(){let t=`![${L(this,Wt,ye).call(this)}](http://)`;L(this,Pt,ne).call(this,t,t.length-1)}insertLink(){let t=L(this,Wt,ye).call(this),e=`[${t}]()`,i=t===""?-3:-1;L(this,Pt,ne).call(this,e,e.length+i)}showImageManager(){let t=L(this,rt,ht).call(this);window.$components.first("image-manager").show(i=>{L(this,en,Oo).call(this,i,t)},"drawio")}showLinkSelector(){let t=L(this,rt,ht).call(this),e=window.$components.first("entity-selector-popup"),i=L(this,Wt,ye).call(this,t);e.show(r=>{let s=`[${i||r.name}](${r.link})`;L(this,Pt,ne).call(this,s,s.length,t)},i)}startDrawing(){let t=this.editor.config.drawioUrl;if(!t)return;let e=L(this,rt,ht).call(this);tn(t,()=>Promise.resolve(""),async i=>{let r={image:i,uploaded_to:Number(this.editor.config.pageId)};try{let o=await window.$http.post("/images/drawio",r);L(this,en,Oo).call(this,o.data,e),ee()}catch(o){throw this.handleDrawingUploadError(o),new Error(`Failed to save image with error: ${o}`)}})}editDrawing(t){let{drawioUrl:e}=this.editor.config;if(!e)return;let i=L(this,rt,ht).call(this),r=t.getAttribute("drawio-diagram");tn(e,()=>_i(r),async o=>{let s={image:o,uploaded_to:Number(this.editor.config.pageId)};try{let a=await window.$http.post("/images/drawio",s),l=`
    `,c=L(this,xe,Si).call(this).split(` `).map(u=>u.indexOf(`drawio-diagram="${r}"`)!==-1?l:u).join(` -`);T(this,kt,Ai).call(this,c,i),tt()}catch(a){throw this.handleDrawingUploadError(a),new Error(`Failed to save image with error: ${a}`)}})}handleDrawingUploadError(e){e.status===413?window.$events.emit("error",this.editor.config.text.serverUploadLimit):window.$events.emit("error",this.editor.config.text.imageUploadError),console.error(e)}fullScreen(){let{container:e}=this.editor.config,t=e.classList.contains("fullscreen");e.classList.toggle("fullscreen",!t),document.body.classList.toggle("markdown-fullscreen",!t)}scrollToText(e){if(!e)return;let t=this.editor.cm.state.doc,i=1,r=-1;for(let s of t.iterLines()){if(s.includes(e)){r=i;break}i+=1}if(r===-1)return;let o=t.line(r);T(this,Li,Qc).call(this,o.from,o.to,!0),this.focus()}focus(){this.editor.cm.hasFocus||this.editor.cm.focus()}insertContent(e){T(this,Pe,nt).call(this,e,e.length)}prependContent(e){e=T(this,nn,Ro).call(this,e);let i=T(this,ie,ue).call(this).from+e.length+1;T(this,he,ve).call(this,0,0,`${e} -`,i),this.focus()}appendContent(e){e=T(this,nn,Ro).call(this,e),T(this,he,ve).call(this,this.editor.cm.state.doc.length,` -${e}`),this.focus()}replaceContent(e){T(this,kt,Ai).call(this,e)}replaceLineStart(e){let t=T(this,ie,ue).call(this),i=this.editor.cm.state.doc.lineAt(t.from),r=i.text,o=r.split(" ")[0];if(o===e){let c=r.replace(`${e} `,""),u=t.from+(c.length-r.length);T(this,he,ve).call(this,i.from,i.to,c,u);return}let s=r;/^[#>`]/.test(o)?s=r.replace(o,e).trim():e!==""&&(s=`${e} ${r}`);let l=t.from+(s.length-r.length);T(this,he,ve).call(this,i.from,i.to,s,l)}wrapSelection(e,t){let i=T(this,ie,ue).call(this),r=T(this,We,yt).call(this,i);if(!r){T(this,Ct,Di).call(this,e,t);return}let o=r,s;r.startsWith(e)&&r.endsWith(t)?(o=r.slice(e.length,r.length-t.length),s=i.extend(i.from,i.to-(e.length+t.length))):(o=`${e}${r}${t}`,s=i.extend(i.from,i.to+(e.length+t.length))),T(this,he,ve).call(this,i.from,i.to,o,s.anchor,s.head)}replaceLineStartForOrderedList(){let e=T(this,ie,ue).call(this),t=this.editor.cm.state.doc.lineAt(e.from),r=this.editor.cm.state.doc.line(t.number-1).text.match(/^(\s*)(\d)([).])\s/)||[],o=(Number(r[2])||0)+1,s=r[1]||"",a=r[3]||".",l=`${s}${o}${a}`;return this.replaceLineStart(l)}cycleCalloutTypeAtSelection(){let e=T(this,ie,ue).call(this),t=this.editor.cm.state.doc.lineAt(e.from),i=["info","success","warning","danger"],r=i.join("|"),s=new RegExp(`class="((${r})\\s+callout|callout\\s+(${r}))"`,"i").exec(t.text),a=(s?s[2]||s[3]:"").toLowerCase();if(a===i[i.length-1])T(this,Ct,Di).call(this,`

    `,"

    ");else if(a==="")T(this,Ct,Di).call(this,'

    ',"

    ");else{let l=i.indexOf(a)+1,c=i[l],u=t.text.replace(s[0],s[0].replace(a,c)),h=u.length-t.text.length;T(this,he,ve).call(this,t.from,t.to,u,e.anchor+h,e.head+h)}}syncDisplayPosition(e){let t=e.target;if(Math.abs(t.scrollHeight-t.clientHeight-t.scrollTop)<1){this.editor.display.scrollToIndex(-1);return}let r=this.editor.cm.lineBlockAtHeight(t.scrollTop),o=this.editor.cm.state.sliceDoc(0,r.from),l=new DOMParser().parseFromString(this.editor.markdown.render(o),"text/html").documentElement.querySelectorAll("body > *");this.editor.display.scrollToIndex(l.length)}async insertTemplate(e,t,i){let r=this.editor.cm.posAtCoords({x:t,y:i},!1),{data:o}=await window.$http.get(`/templates/${e}`),s=o.markdown||o.html;T(this,he,ve).call(this,r,r,s,r)}insertClipboardImages(e,t,i){let r=this.editor.cm.posAtCoords({x:t,y:i},!1);for(let o of e)this.uploadImage(o,r)}async uploadImage(e,t=null){if(e===null||e.type.indexOf("image")!==0)return;let i="png";if(t===null&&(t=T(this,ie,ue).call(this).from),e.name){let c=e.name.match(/\.(.+)$/);c.length>1&&(i=c[1])}let r=`image-${Math.random().toString(16).slice(2)}`,s=`![](${window.baseUrl(`/loading.gif#upload${r}`)})`;T(this,he,ve).call(this,t,t,s,t);let a=`image-${Date.now()}.${i}`,l=new FormData;l.append("file",e,a),l.append("uploaded_to",this.editor.config.pageId);try{let{data:c}=await window.$http.post("/images/gallery",l),u=`[![](${c.thumbs.display})](${c.url})`;T(this,rn,No).call(this,s,u)}catch(c){window.$events.emit("error",this.editor.config.text.imageUploadError),T(this,rn,No).call(this,s,""),console.error(c)}}};tn=new WeakSet,Oo=function(e,t){let i=`
    `;T(this,Pe,nt).call(this,i,i.length,t)},xt=new WeakSet,Si=function(){return this.editor.cm.state.doc.toString()},kt=new WeakSet,Ai=function(e,t=null){t=t||T(this,ie,ue).call(this);let i=this.editor.cm.state.toText(e),r=Math.min(t.from,i.length);T(this,he,ve).call(this,0,this.editor.cm.state.doc.length,e,r),this.focus()},Pe=new WeakSet,nt=function(e,t=0,i=null){i=i||this.editor.cm.state.selection.main;let r=i.from+t;T(this,he,ve).call(this,i.from,i.to,e,r),this.focus()},We=new WeakSet,yt=function(e=null){return e=e||T(this,ie,ue).call(this),this.editor.cm.state.sliceDoc(e.from,e.to)},ie=new WeakSet,ue=function(){return this.editor.cm.state.selection.main},nn=new WeakSet,Ro=function(e){return e.replace(/\r\n|\r/g,` -`)},rn=new WeakSet,No=function(e,t){let i=T(this,xt,Si).call(this).replace(e,t);T(this,kt,Ai).call(this,i)},Ct=new WeakSet,Di=function(e,t){let i=T(this,ie,ue).call(this),r=this.editor.cm.state.doc.lineAt(i.from),o=r.text,s,a=0;o.startsWith(e)&&o.endsWith(t)?(s=o.slice(e.length,o.length-t.length),a=-e.length):(s=`${e}${o}${t}`,a=e.length),T(this,he,ve).call(this,r.from,r.to,s,i.from+a)},he=new WeakSet,ve=function(e,t=null,i=null,r=null,o=null){let s={changes:{from:e,to:t,insert:i}};r&&(s.selection={anchor:r},o&&(s.selection.head=o)),this.editor.cm.dispatch(s)},Li=new WeakSet,Qc=function(e,t,i=!1){this.editor.cm.dispatch({selection:{anchor:e,head:t},scrollIntoView:i})};var Ii=class{constructor(e){this.settingMap={scrollSync:!0,showPreview:!0,editorWidth:50},this.changeListeners={},this.loadFromLocalStorage(),this.applyToInputs(e),this.listenToInputChanges(e)}applyToInputs(e){for(let t of e){let i=t.getAttribute("name").replace("md-","");t.checked=this.settingMap[i]}}listenToInputChanges(e){for(let t of e)t.addEventListener("change",()=>{let i=t.getAttribute("name").replace("md-","");this.set(i,t.checked)})}loadFromLocalStorage(){let e=window.localStorage.getItem("md-editor-settings");if(!e)return;let t=JSON.parse(e);for(let[i,r]of Object.entries(t))r!==null&&this.settingMap[i]!==void 0&&(this.settingMap[i]=r)}set(e,t){this.settingMap[e]=t,window.localStorage.setItem("md-editor-settings",JSON.stringify(this.settingMap));for(let i of this.changeListeners[e]||[])i(t)}get(e){return this.settingMap[e]||null}onChange(e,t){let i=this.changeListeners[e]||[];i.push(t),this.changeListeners[e]=i}};function $i({html:n,markdown:e}){return e||n}function eu(n){window.$events.listen("editor::replace",e=>{let t=$i(e);n.actions.replaceContent(t)}),window.$events.listen("editor::append",e=>{let t=$i(e);n.actions.appendContent(t)}),window.$events.listen("editor::prepend",e=>{let t=$i(e);n.actions.prependContent(t)}),window.$events.listen("editor::insert",e=>{let t=$i(e);n.actions.insertContent(t)}),window.$events.listen("editor::focus",()=>{n.actions.focus()})}function qf(n){let e={};return e["Shift-Mod-i"]=()=>n.actions.insertImage(),e["Mod-s"]=()=>window.$events.emit("editor-save-draft"),e["Mod-Enter"]=()=>window.$events.emit("editor-save-page"),e["Shift-Mod-k"]=()=>n.actions.showLinkSelector(),e["Mod-k"]=()=>n.actions.insertLink(),e["Mod-1"]=()=>n.actions.replaceLineStart("##"),e["Mod-2"]=()=>n.actions.replaceLineStart("###"),e["Mod-3"]=()=>n.actions.replaceLineStart("####"),e["Mod-4"]=()=>n.actions.replaceLineStart("#####"),e["Mod-5"]=()=>n.actions.replaceLineStart(""),e["Mod-d"]=()=>n.actions.replaceLineStart(""),e["Mod-6"]=()=>n.actions.replaceLineStart(">"),e["Mod-q"]=()=>n.actions.replaceLineStart(">"),e["Mod-7"]=()=>n.actions.wrapSelection("\n```\n","\n```"),e["Mod-8"]=()=>n.actions.wrapSelection("`","`"),e["Shift-Mod-e"]=()=>n.actions.wrapSelection("`","`"),e["Mod-9"]=()=>n.actions.cycleCalloutTypeAtSelection(),e["Mod-p"]=()=>n.actions.replaceLineStart("-"),e["Mod-o"]=()=>n.actions.replaceLineStartForOrderedList(),e}function tu(n){let e=qf(n),t=[],i=r=>()=>(r(),!0);for(let[r,o]of Object.entries(e))t.push({key:r,run:i(o),preventDefault:!0});return t}async function nu(n){let e=await window.importVersioned("code");function t(a){a.docChanged&&n.actions.updateAndRender()}let i=Ne(n.actions.syncDisplayPosition.bind(n.actions),100,!1),r=n.settings.get("scrollSync");n.settings.onChange("scrollSync",a=>{r=a});let o={scroll:a=>r&&i(a),drop:a=>{let l=a.dataTransfer.getData("bookstack/template");l&&(a.preventDefault(),n.actions.insertTemplate(l,a.pageX,a.pageY));let u=new Fe(a.dataTransfer).getImages();u.length>0&&(a.stopPropagation(),a.preventDefault(),n.actions.insertClipboardImages(u,a.pageX,a.pageY))},paste:a=>{let l=new Fe(a.clipboardData||a.dataTransfer);if(!l.hasItems()||l.containsTabularData())return;let c=l.getImages();for(let u of c)n.actions.uploadImage(u)}},s=e.markdownEditor(n.config.inputEl,t,o,tu(n));return window.mdEditorView=s,s}async function iu(n){let e={config:n,markdown:new wi,settings:new Ii(n.settingInputs)};return e.actions=new Ti(e),e.display=new ki(e),e.cm=await nu(e),eu(e),e}var Mi=class extends g{setup(){this.elem=this.$el,this.pageId=this.$opts.pageId,this.textDirection=this.$opts.textDirection,this.imageUploadErrorText=this.$opts.imageUploadErrorText,this.serverUploadLimitText=this.$opts.serverUploadLimitText,this.display=this.$refs.display,this.input=this.$refs.input,this.divider=this.$refs.divider,this.displayWrap=this.$refs.displayWrap;let{settingContainer:e}=this.$refs,t=e.querySelectorAll('input[type="checkbox"]');this.editor=null,iu({pageId:this.pageId,container:this.elem,displayEl:this.display,inputEl:this.input,drawioUrl:this.getDrawioUrl(),settingInputs:Array.from(t),text:{serverUploadLimit:this.serverUploadLimitText,imageUploadError:this.imageUploadErrorText}}).then(i=>{this.editor=i,this.setupListeners(),this.emitEditorEvents(),this.scrollToTextIfNeeded(),this.editor.actions.updateAndRender()})}emitEditorEvents(){window.$events.emitPublic(this.elem,"editor-markdown::setup",{markdownIt:this.editor.markdown.getRenderer(),displayEl:this.display,cmEditorView:this.editor.cm})}setupListeners(){this.elem.addEventListener("click",e=>{let t=e.target.closest("button[data-action]");if(t===null)return;let i=t.getAttribute("data-action");if(i==="insertImage"&&this.editor.actions.showImageInsert(),i==="insertLink"&&this.editor.actions.showLinkSelector(),i==="insertDrawing"&&(e.ctrlKey||e.metaKey)){this.editor.actions.showImageManager();return}i==="insertDrawing"&&this.editor.actions.startDrawing(),i==="fullscreen"&&this.editor.actions.fullScreen()}),this.elem.addEventListener("click",e=>{let t=e.target.closest(".editor-toolbar-label");if(!t)return;let i=this.elem.querySelectorAll(".markdown-editor-wrap");for(let r of i)r.classList.remove("active");t.closest(".markdown-editor-wrap").classList.add("active")}),this.handleDividerDrag()}handleDividerDrag(){this.divider.addEventListener("pointerdown",()=>{let t=this.elem.getBoundingClientRect(),i=o=>{let s=o.pageX-t.left,a=Math.min(Math.max(20,Math.floor(s/t.width*100)),80);this.displayWrap.style.flexBasis=`${100-a}%`,this.editor.settings.set("editorWidth",a)},r=()=>{window.removeEventListener("pointermove",i),window.removeEventListener("pointerup",r),this.display.style.pointerEvents=null,document.body.style.userSelect=null};this.display.style.pointerEvents="none",document.body.style.userSelect="none",window.addEventListener("pointermove",i),window.addEventListener("pointerup",r)});let e=this.editor.settings.get("editorWidth");e&&(this.displayWrap.style.flexBasis=`${100-e}%`)}scrollToTextIfNeeded(){let t=new URL(window.location).searchParams.get("content-text");t&&this.editor.actions.scrollToText(t)}getDrawioUrl(){let e=document.querySelector("[drawio-url]");return e&&e.getAttribute("drawio-url")||""}getContent(){return this.editor.actions.getContent()}};var Fi=class extends g{setup(){this.container=this.$el,this.inputContainer=this.$refs.inputContainer,this.inviteOption=this.container.querySelector("input[name=send_invite]"),this.inviteOption&&(this.inviteOption.addEventListener("change",this.inviteOptionChange.bind(this)),this.inviteOptionChange())}inviteOptionChange(){let e=this.inviteOption.value==="true",t=this.container.querySelectorAll("input[type=password]");for(let i of t)i.disabled=e;this.inputContainer.style.display=e?"none":"block"}};var qi=class extends g{setup(){this.container=this.$el,this.type=this.$opts.type,this.textElem=this.container.querySelector("span"),this.autoHide=this.$opts.autoHide==="true",this.initialShow=this.$opts.show==="true",this.container.style.display="grid",window.$events.listen(this.type,e=>{this.show(e)}),this.container.addEventListener("click",this.hide.bind(this)),this.initialShow&&setTimeout(()=>this.show(this.textElem.textContent),100),this.hideCleanup=this.hideCleanup.bind(this)}show(e=""){if(this.container.removeEventListener("transitionend",this.hideCleanup),this.textElem.textContent=e,this.container.style.display="grid",setTimeout(()=>{this.container.classList.add("showing")},1),this.autoHide){let t=e.split(" ").length,i=Math.max(2e3,1e3+250*t);setTimeout(this.hide.bind(this),i)}}hide(){this.container.classList.remove("showing"),this.container.addEventListener("transitionend",this.hideCleanup)}hideCleanup(){this.container.style.display="none",this.container.removeEventListener("transitionend",this.hideCleanup)}};var Bi=class extends g{setup(){this.removeButton=this.$refs.remove,this.showButton=this.$refs.show,this.input=this.$refs.input,this.setupListeners()}setupListeners(){O(this.removeButton,()=>{this.input.value="",this.input.classList.add("hidden"),this.removeButton.classList.add("hidden"),this.showButton.classList.remove("hidden")}),O(this.showButton,()=>{this.input.classList.remove("hidden"),this.removeButton.classList.remove("hidden"),this.showButton.classList.add("hidden")})}};var Pi=class extends g{setup(){this.commentId=this.$opts.commentId,this.commentLocalId=this.$opts.commentLocalId,this.commentParentId=this.$opts.commentParentId,this.deletedText=this.$opts.deletedText,this.updatedText=this.$opts.updatedText,this.container=this.$el,this.contentContainer=this.$refs.contentContainer,this.form=this.$refs.form,this.formCancel=this.$refs.formCancel,this.editButton=this.$refs.editButton,this.deleteButton=this.$refs.deleteButton,this.replyButton=this.$refs.replyButton,this.input=this.$refs.input,this.setupListeners()}setupListeners(){this.replyButton&&this.replyButton.addEventListener("click",()=>this.$emit("reply",{id:this.commentLocalId,element:this.container})),this.editButton&&(this.editButton.addEventListener("click",this.startEdit.bind(this)),this.form.addEventListener("submit",this.update.bind(this)),this.formCancel.addEventListener("click",()=>this.toggleEditMode(!1))),this.deleteButton&&this.deleteButton.addEventListener("click",this.delete.bind(this))}toggleEditMode(e){this.contentContainer.toggleAttribute("hidden",e),this.form.toggleAttribute("hidden",!e)}startEdit(){this.toggleEditMode(!0);let e=this.$refs.input.value.split(` -`).length;this.$refs.input.style.height=`${e*20+40}px`}async update(e){e.preventDefault();let t=this.showLoading();this.form.toggleAttribute("hidden",!0);let i={text:this.input.value,parent_id:this.parentId||null};try{let r=await window.$http.put(`/comment/${this.commentId}`,i),o=_e(r.data);this.container.replaceWith(o),window.$events.success(this.updatedText)}catch(r){console.error(r),window.$events.showValidationErrors(r),this.form.toggleAttribute("hidden",!1),t.remove()}}async delete(){this.showLoading(),await window.$http.delete(`/comment/${this.commentId}`),this.container.closest(".comment-branch").remove(),window.$events.success(this.deletedText),this.$emit("delete")}showLoading(){let e=at();return e.classList.add("px-l"),this.container.append(e),e}};var Oi=class extends g{setup(){this.elem=this.$el,this.pageId=Number(this.$opts.pageId),this.container=this.$refs.commentContainer,this.commentCountBar=this.$refs.commentCountBar,this.commentsTitle=this.$refs.commentsTitle,this.addButtonContainer=this.$refs.addButtonContainer,this.replyToRow=this.$refs.replyToRow,this.formContainer=this.$refs.formContainer,this.form=this.$refs.form,this.formInput=this.$refs.formInput,this.formReplyLink=this.$refs.formReplyLink,this.addCommentButton=this.$refs.addCommentButton,this.hideFormButton=this.$refs.hideFormButton,this.removeReplyToButton=this.$refs.removeReplyToButton,this.createdText=this.$opts.createdText,this.countText=this.$opts.countText,this.parentId=null,this.formReplyText=this.formReplyLink.textContent,this.setupListeners()}setupListeners(){this.removeReplyToButton.addEventListener("click",this.removeReplyTo.bind(this)),this.hideFormButton.addEventListener("click",this.hideForm.bind(this)),this.addCommentButton.addEventListener("click",this.showForm.bind(this)),this.elem.addEventListener("page-comment-delete",()=>{this.updateCount(),this.hideForm()}),this.elem.addEventListener("page-comment-reply",e=>{this.setReply(e.detail.id,e.detail.element)}),this.form&&this.form.addEventListener("submit",this.saveComment.bind(this))}saveComment(e){e.preventDefault(),e.stopPropagation();let t=at();t.classList.add("px-l"),this.form.after(t),this.form.toggleAttribute("hidden",!0);let r={text:this.formInput.value,parent_id:this.parentId||null};window.$http.post(`/comment/${this.pageId}`,r).then(o=>{let s=_e(o.data);this.formContainer.after(s),window.$events.success(this.createdText),this.hideForm(),this.updateCount()}).catch(o=>{this.form.toggleAttribute("hidden",!1),window.$events.showValidationErrors(o)}),this.form.toggleAttribute("hidden",!1),t.remove()}updateCount(){let e=this.getCommentCount();this.commentsTitle.textContent=window.trans_plural(this.countText,e,{count:e})}resetForm(){this.formInput.value="",this.parentId=null,this.replyToRow.toggleAttribute("hidden",!0),this.container.append(this.formContainer)}showForm(){this.formContainer.toggleAttribute("hidden",!1),this.addButtonContainer.toggleAttribute("hidden",!0),this.formContainer.scrollIntoView({behavior:"smooth",block:"nearest"}),setTimeout(()=>{this.formInput.focus()},100)}hideForm(){this.resetForm(),this.formContainer.toggleAttribute("hidden",!0),this.getCommentCount()>0?this.elem.append(this.addButtonContainer):this.commentCountBar.append(this.addButtonContainer),this.addButtonContainer.toggleAttribute("hidden",!1)}getCommentCount(){return this.container.querySelectorAll('[component="page-comment"]').length}setReply(e,t){t.closest(".comment-branch").querySelector(".comment-branch-children").append(this.formContainer),this.showForm(),this.parentId=e,this.replyToRow.toggleAttribute("hidden",!1);let r=this.replyToRow.querySelector("a");r.textContent=this.formReplyText.replace("1234",this.parentId),r.href=`#comment${this.parentId}`}removeReplyTo(){this.parentId=null,this.replyToRow.toggleAttribute("hidden",!0),this.container.append(this.formContainer),this.showForm()}};function Bf(n,e){yr(`#page-navigation a[href="#${n}"]`,t=>{t.closest("li").classList.toggle("current-heading",e)})}function Pf(n){for(let e of n){let t=e.intersectionRatio===1;Bf(e.target.id,t)}}function Of(n){let e={rootMargin:"0px 0px 0px 0px",threshold:1},t=new IntersectionObserver(Pf,e);for(let i of n)t.observe(i)}var Ri=class extends g{setup(){if(this.container=this.$el,this.pageId=this.$opts.pageId,window.importVersioned("code").then(t=>t.highlight()),this.setupNavHighlighting(),this.setupDetailsCodeBlockRefresh(),window.location.hash){let t=window.location.hash.replace(/%20/g," ").substring(1);this.goToText(t)}let e=document.querySelector(".sidebar-page-nav");e&&K(e,"a","click",(t,i)=>{t.preventDefault(),window.$components.first("tri-layout").showContent();let r=i.getAttribute("href").substr(1);this.goToText(r),window.history.pushState(null,null,`#${r}`)})}goToText(e){let t=document.getElementById(e);if(yr(".page-content [data-highlighted]",i=>{i.removeAttribute("data-highlighted"),i.style.backgroundColor=null}),t!==null)kr(t);else{let i=Qo(".page-content > div > *",e);i&&kr(i)}}setupNavHighlighting(){let e=document.querySelector(".sidebar-page-nav"),t=document.querySelector(".page-content").querySelectorAll("h1, h2, h3, h4, h5, h6");t.length>0&&e!==null&&Of(t)}setupDetailsCodeBlockRefresh(){let e=i=>{[...i.target.querySelectorAll(".CodeMirror")].forEach(o=>o.CodeMirror&&o.CodeMirror.refresh())};[...this.container.querySelectorAll("details")].forEach(i=>i.addEventListener("toggle",e))}};function ru(n){let e=new Date(n*1e3),t=e.getHours(),i=e.getMinutes();return`${(t>9?"":"0")+t}:${(i>9?"":"0")+i}`}var Ni=class extends g{setup(){this.draftsEnabled=this.$opts.draftsEnabled==="true",this.editorType=this.$opts.editorType,this.pageId=Number(this.$opts.pageId),this.isNewDraft=this.$opts.pageNewDraft==="true",this.hasDefaultTitle=this.$opts.hasDefaultTitle||!1,this.container=this.$el,this.titleElem=this.$refs.titleContainer.querySelector("input"),this.saveDraftButton=this.$refs.saveDraft,this.discardDraftButton=this.$refs.discardDraft,this.discardDraftWrap=this.$refs.discardDraftWrap,this.deleteDraftButton=this.$refs.deleteDraft,this.deleteDraftWrap=this.$refs.deleteDraftWrap,this.draftDisplay=this.$refs.draftDisplay,this.draftDisplayIcon=this.$refs.draftDisplayIcon,this.changelogInput=this.$refs.changelogInput,this.changelogDisplay=this.$refs.changelogDisplay,this.changeEditorButtons=this.$manyRefs.changeEditor||[],this.switchDialogContainer=this.$refs.switchDialog,this.deleteDraftDialogContainer=this.$refs.deleteDraftDialog,this.draftText=this.$opts.draftText,this.autosaveFailText=this.$opts.autosaveFailText,this.editingPageText=this.$opts.editingPageText,this.draftDiscardedText=this.$opts.draftDiscardedText,this.draftDeleteText=this.$opts.draftDeleteText,this.draftDeleteFailText=this.$opts.draftDeleteFailText,this.setChangelogText=this.$opts.setChangelogText,this.autoSave={interval:null,frequency:3e4,last:0,pendingChange:!1},this.shownWarningsCache=new Set,this.pageId!==0&&this.draftsEnabled&&window.setTimeout(()=>{this.startAutoSave()},1e3),this.draftDisplay.innerHTML=this.draftText,this.setupListeners(),this.setInitialFocus()}setupListeners(){window.$events.listen("editor-save-draft",this.saveDraft.bind(this)),window.$events.listen("editor-save-page",this.savePage.bind(this));let e=()=>{this.autoSave.pendingChange=!0};window.$events.listen("editor-html-change",e),window.$events.listen("editor-markdown-change",e),this.titleElem.addEventListener("input",e);let t=Ne(this.updateChangelogDisplay.bind(this),300,!1);this.changelogInput.addEventListener("input",t),O(this.saveDraftButton,this.saveDraft.bind(this)),O(this.discardDraftButton,this.discardDraft.bind(this)),O(this.deleteDraftButton,this.deleteDraft.bind(this)),O(this.changeEditorButtons,this.changeEditor.bind(this))}setInitialFocus(){if(this.hasDefaultTitle){this.titleElem.select();return}window.setTimeout(()=>{window.$events.emit("editor::focus","")},500)}startAutoSave(){this.autoSave.interval=window.setInterval(this.runAutoSave.bind(this),this.autoSave.frequency)}runAutoSave(){Date.now()-this.autoSave.last{this.draftDisplayIcon.classList.remove("visible")},2e3)}async discardDraft(e=!0){let t;try{t=await window.$http.get(`/ajax/page/${this.pageId}`)}catch(i){console.error(i);return}this.autoSave.interval&&window.clearInterval(this.autoSave.interval),this.draftDisplay.innerText=this.editingPageText,this.discardDraftWrap.toggleAttribute("hidden",!0),window.$events.emit("editor::replace",{html:t.data.html,markdown:t.data.markdown}),this.titleElem.value=t.data.name,window.setTimeout(()=>{this.startAutoSave()},1e3),e&&window.$events.success(this.draftDiscardedText)}async deleteDraft(){if(await window.$components.firstOnElement(this.deleteDraftDialogContainer,"confirm-dialog").show())try{let i=this.discardDraft(!1),r=window.$http.delete(`/page-revisions/user-drafts/${this.pageId}`);await Promise.all([i,r]),window.$events.success(this.draftDeleteText),this.deleteDraftWrap.toggleAttribute("hidden",!0)}catch(i){console.error(i),window.$events.error(this.draftDeleteFailText)}}updateChangelogDisplay(){let e=this.changelogInput.value.trim();e.length===0?e=this.setChangelogText:e.length>16&&(e=`${e.slice(0,16)}...`),this.changelogDisplay.innerText=e}async changeEditor(e){e.preventDefault();let t=e.target.closest("a").href,i=window.$components.firstOnElement(this.switchDialogContainer,"confirm-dialog"),[r,o]=await Promise.all([this.saveDraft(),i.show()]);r&&o&&(window.location=t)}getEditorComponent(){return window.$components.first("markdown-editor")||window.$components.first("wysiwyg-editor")}};function zi(n,e){n.style.display=e?null:"none"}var Hi=class extends g{setup(){this.input=this.$refs.input,this.resetButton=this.$refs.resetButton,this.selectButton=this.$refs.selectButton,this.display=this.$refs.display,this.defaultDisplay=this.$refs.defaultDisplay,this.buttonSep=this.$refs.buttonSeperator,this.value=this.input.value,this.setupListeners()}setupListeners(){this.selectButton.addEventListener("click",this.showPopup.bind(this)),this.display.parentElement.addEventListener("click",this.showPopup.bind(this)),this.resetButton.addEventListener("click",()=>{this.setValue("","")})}showPopup(){window.$components.first("entity-selector-popup").show(t=>{this.setValue(t.id,t.name)})}setValue(e,t){this.value=e,this.input.value=e,this.controlView(t)}controlView(e){let t=this.value&&this.value!==0;if(zi(this.resetButton,t),zi(this.buttonSep,t),zi(this.defaultDisplay,!t),zi(this.display,t),t){let i=this.getAssetIdFromVal();this.display.textContent=`#${i}, ${e}`,this.display.href=window.baseUrl(`/link/${i}`)}}getAssetIdFromVal(){return Number(this.value)}};var Ui=class extends g{setup(){this.container=this.$el,this.cellSelector=this.$opts.cellSelector||"td,th",this.rowSelector=this.$opts.rowSelector||"tr";for(let e of this.$manyRefs.toggleAll||[])e.addEventListener("click",this.toggleAllClick.bind(this));for(let e of this.$manyRefs.toggleRow||[])e.addEventListener("click",this.toggleRowClick.bind(this));for(let e of this.$manyRefs.toggleColumn||[])e.addEventListener("click",this.toggleColumnClick.bind(this))}toggleAllClick(e){e.preventDefault(),this.toggleAllInElement(this.container)}toggleRowClick(e){e.preventDefault(),this.toggleAllInElement(e.target.closest(this.rowSelector))}toggleColumnClick(e){e.preventDefault();let t=e.target.closest(this.cellSelector),i=Array.from(t.parentElement.children).indexOf(t),r=this.container.querySelectorAll(this.rowSelector),o=[];for(let s of r){let a=s.children[i];a&&o.push(...a.querySelectorAll("input[type=checkbox]"))}this.toggleAllInputs(o)}toggleAllInElement(e){let t=e.querySelectorAll("input[type=checkbox]");this.toggleAllInputs(t)}toggleAllInputs(e){let t=e.length>0?e[0].checked:!1;for(let i of e)i.checked=!t,i.dispatchEvent(new Event("change"))}};var ji=class extends g{setup(){this.container=this.$el,this.pointer=this.$refs.pointer,this.linkInput=this.$refs.linkInput,this.linkButton=this.$refs.linkButton,this.includeInput=this.$refs.includeInput,this.includeButton=this.$refs.includeButton,this.sectionModeButton=this.$refs.sectionModeButton,this.modeToggles=this.$manyRefs.modeToggle,this.modeSections=this.$manyRefs.modeSection,this.pageId=this.$opts.pageId,this.showing=!1,this.isSelection=!1,this.setupListeners()}setupListeners(){this.includeButton.addEventListener("click",()=>Vr(this.includeInput.value)),this.linkButton.addEventListener("click",()=>Vr(this.linkInput.value)),O([this.includeInput,this.linkInput],t=>{t.target.select(),t.stopPropagation()}),ln(this.pointer,["click","focus"],t=>{t.stopPropagation()}),ln(document.body,["click","focus"],()=>{!this.showing||this.isSelection||this.hidePointer()}),Jo(this.pointer,this.hidePointer.bind(this));let e=document.querySelector(".page-content");ln(e,["mouseup","keyup"],t=>{t.stopPropagation();let i=t.target.closest('[id^="bkmrk"]');i&&window.getSelection().toString().length>0&&this.showPointerAtTarget(i,t.pageX,!1)}),O(this.sectionModeButton,this.enterSectionSelectMode.bind(this)),O(this.modeToggles,t=>{for(let i of this.modeSections){let r=!i.contains(t.target);i.toggleAttribute("hidden",!r)}this.modeToggles.find(i=>i!==t.target).focus()})}hidePointer(){this.pointer.style.display=null,this.showing=!1}showPointerAtTarget(e,t,i){this.updateForTarget(e),this.pointer.style.display="block";let r=e.getBoundingClientRect(),o=this.pointer.getBoundingClientRect(),a=Math.min(Math.max(t,r.left),r.right)-o.width/2,l=r.top-o.height-16;this.pointer.style.left=`${a}px`,this.pointer.style.top=`${l}px`,this.showing=!0,this.isSelection=!0,setTimeout(()=>{this.isSelection=!1},100);let c=()=>{this.hidePointer(),window.removeEventListener("scroll",c,{passive:!0})};e.parentElement.insertBefore(this.pointer,e),i||window.addEventListener("scroll",c,{passive:!0})}updateForTarget(e){let t=window.baseUrl(`/link/${this.pageId}#${e.id}`),i=`{{@${this.pageId}#${e.id}}}`;this.linkInput.value=t,this.includeInput.value=i;let r=this.pointer.querySelector("#pointer-edit");if(r&&e){let{editHref:o}=r.dataset,s=e.id,a=e.textContent&&e.textContent.substring(0,50);r.href=`${o}?content-id=${s}&content-text=${encodeURIComponent(a)}`}}enterSectionSelectMode(){let e=Array.from(document.querySelectorAll('.page-content [id^="bkmrk"]'));for(let t of e)t.setAttribute("tabindex","0");e[0].focus(),st(e,t=>{this.showPointerAtTarget(t.target,0,!0),this.pointer.focus()})}};var Vi=class extends g{setup(){this.container=this.$el,this.hideButtons=this.$manyRefs.hide||[],this.onkeyup=null,this.onHide=null,this.setupListeners()}setupListeners(){let e=null;this.container.addEventListener("mousedown",t=>{e=t.target}),this.container.addEventListener("click",t=>{t.target===this.container&&e===this.container&&this.hide()}),O(this.hideButtons,()=>this.hide())}hide(e=null){Ls(this.container,120,e),this.onkeyup&&(window.removeEventListener("keyup",this.onkeyup),this.onkeyup=null),this.onHide&&this.onHide()}show(e=null,t=null){Ts(this.container,120,e),this.onkeyup=i=>{i.key==="Escape"&&this.hide()},window.addEventListener("keyup",this.onkeyup),this.onHide=t}};var Wi=class extends g{setup(){this.container=this.$el,this.mode=this.$opts.mode,this.lightContainer=this.$refs.lightContainer,this.darkContainer=this.$refs.darkContainer,this.container.addEventListener("tabs-change",t=>{let r=t.detail.showing==="color-scheme-panel-light"?"light":"dark";this.handleModeChange(r)});let e=t=>{this.updateAppColorsFromInputs(),t.target.name.startsWith("setting-app-color")&&this.updateLightForInput(t.target)};this.container.addEventListener("change",e),this.container.addEventListener("input",e)}handleModeChange(e){this.mode=e;let t=e==="dark";document.documentElement.classList.toggle("dark-mode",t),this.updateAppColorsFromInputs()}updateAppColorsFromInputs(){let t=(this.mode==="dark"?this.darkContainer:this.lightContainer).querySelectorAll('input[type="color"]');for(let i of t){let r=i.name.split("-"),o=r.indexOf("color"),s=r.slice(1,o).join("-");s==="app"&&(s="primary");let a=`--color-${s}`;document.body.style.setProperty(a,i.value)}}updateLightForInput(e){let t=e.name.replace("-color","-color-light"),i=e.value,r=this.hexToRgb(i),o=`rgba(${[r.r,r.g,r.b,"0.15"].join(",")})`,s=this.container.querySelector(`input[name="${t}"][type="hidden"]`);s.value=o}hexToRgb(e){let t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return{r:t?parseInt(t[1],16):0,g:t?parseInt(t[2],16):0,b:t?parseInt(t[3],16):0}}};var Gi=class extends g{setup(){this.colorInput=this.$refs.input,this.resetButton=this.$refs.resetButton,this.defaultButton=this.$refs.defaultButton,this.currentColor=this.$opts.current,this.defaultColor=this.$opts.default,this.resetButton.addEventListener("click",()=>this.setValue(this.currentColor)),this.defaultButton.addEventListener("click",()=>this.setValue(this.defaultColor))}setValue(e){this.colorInput.value=e,this.colorInput.dispatchEvent(new Event("change",{bubbles:!0}))}};var Ki=class extends g{setup(){this.typeControl=this.$refs.typeControl,this.pagePickerContainer=this.$refs.pagePickerContainer,this.typeControl.addEventListener("change",this.controlPagePickerVisibility.bind(this)),this.controlPagePickerVisibility()}controlPagePickerVisibility(){let e=this.typeControl.value==="page";this.pagePickerContainer.style.display=e?"block":"none"}};var Nf={move_up(n){let e=n.parentNode,t=Array.from(e.children).indexOf(n),i=Math.max(t-1,0);e.insertBefore(n,e.children[i]||null)},move_down(n){let e=n.parentNode,t=Array.from(e.children).indexOf(n),i=Math.min(t+2,e.children.length);e.insertBefore(n,e.children[i]||null)},remove(n,e,t){t.appendChild(n)},add(n,e){e.appendChild(n)}},Zi=class extends g{setup(){this.elem=this.$el,this.input=this.$refs.input,this.shelfBookList=this.$refs.shelfBookList,this.allBookList=this.$refs.allBookList,this.bookSearchInput=this.$refs.bookSearch,this.sortButtonContainer=this.$refs.sortButtonContainer,this.lastSort=null,this.initSortable(),this.setupListeners()}initSortable(){let e=this.elem.querySelectorAll(".scroll-box");for(let t of e)new Ye(t,{group:"shelf-books",ghostClass:"primary-background-light",handle:".handle",animation:150,onSort:this.onChange.bind(this)})}setupListeners(){this.elem.addEventListener("click",e=>{let t=e.target.closest(".scroll-box-item button[data-action]");t&&this.sortItemActionClick(t)}),this.bookSearchInput.addEventListener("input",()=>{this.filterBooksByName(this.bookSearchInput.value)}),this.sortButtonContainer.addEventListener("click",e=>{let t=e.target.closest("button[data-sort]");t&&this.sortShelfBooks(t.dataset.sort)})}filterBooksByName(e){this.allBookList.style.height||(this.allBookList.style.height=`${this.allBookList.getBoundingClientRect().height}px`);let t=this.allBookList.children,i=e.trim().toLowerCase();for(let r of t){let o=!e||r.textContent.toLowerCase().includes(i);r.style.display=o?null:"none"}}sortItemActionClick(e){let t=e.closest(".scroll-box-item"),{action:i}=e.dataset,r=Nf[i];r(t,this.shelfBookList,this.allBookList),this.onChange()}onChange(){let e=Array.from(this.shelfBookList.querySelectorAll("[data-id]"));this.input.value=e.map(t=>t.getAttribute("data-id")).join(",")}sortShelfBooks(e){let t=Array.from(this.shelfBookList.children),i=e===this.lastSort;t.sort((r,o)=>{let s=r.dataset[e].toLowerCase(),a=o.dataset[e].toLowerCase();return i?a.localeCompare(s):s.localeCompare(a)});for(let r of t)this.shelfBookList.append(r);this.lastSort=this.lastSort===e?null:e,this.onChange()}};function zf(n){let e={};for(let[t,i]of Object.entries(n))e[i]=t;return e}var Xi=class extends g{setup(){this.container=this.$el,this.mapById=JSON.parse(this.$opts.keyMap),this.mapByShortcut=zf(this.mapById),this.hintsShowing=!1,this.hideHints=this.hideHints.bind(this),this.hintAbortController=null,this.setupListeners()}setupListeners(){window.addEventListener("keydown",e=>{e.target.closest("input, select, textarea, .cm-editor")||this.handleShortcutPress(e)}),window.addEventListener("keydown",e=>{e.key==="?"&&(this.hintsShowing?this.hideHints():this.showHints())})}handleShortcutPress(e){let i=[e.ctrlKey?"Ctrl":"",e.metaKey?"Cmd":"",e.key].filter(o=>!!o).join(" + "),r=this.mapByShortcut[i];r&&this.runShortcut(r)&&e.preventDefault()}runShortcut(e){let t=this.container.querySelector(`[data-shortcut="${e}"]`);return t?t.matches("input, textarea, select")?(t.focus(),!0):t.matches("a, button")?(t.click(),!0):t.matches("div[tabindex]")?(t.click(),t.focus(),!0):(console.error("Shortcut attempted to be ran for element type that does not have handling setup",t),!1):!1}showHints(){let e=document.createElement("div");e.classList.add("shortcut-container"),this.container.append(e);let t=this.container.querySelectorAll("[data-shortcut]"),i=new Set;for(let o of t){let s=o.getAttribute("data-shortcut");if(i.has(s))continue;let a=this.mapById[s];this.showHintLabel(o,a,e),i.add(s)}this.hintAbortController=new AbortController;let r=this.hintAbortController.signal;window.addEventListener("scroll",this.hideHints,{signal:r}),window.addEventListener("focus",this.hideHints,{signal:r}),window.addEventListener("blur",this.hideHints,{signal:r}),window.addEventListener("click",this.hideHints,{signal:r}),this.hintsShowing=!0}showHintLabel(e,t,i){let r=e.getBoundingClientRect(),o=document.createElement("div");o.classList.add("shortcut-hint"),o.textContent=t;let s=document.createElement("div");s.classList.add("shortcut-linkage"),s.style.left=`${r.x}px`,s.style.top=`${r.y}px`,s.style.width=`${r.width}px`,s.style.height=`${r.height}px`,i.append(o,s);let a=o.getBoundingClientRect();o.style.insetInlineStart=`${r.x+r.width-(a.width+6)}px`,o.style.insetBlockStart=`${r.y+(r.height-a.height)/2}px`}hideHints(){this.container.querySelector(".shortcut-container").remove(),this.hintAbortController?.abort(),this.hintsShowing=!1}};var Hf=["Control","Alt","Shift","Meta","Super"," ","+","Tab","Escape"],Yi=class extends g{setup(){this.input=this.$el,this.setupListeners()}setupListeners(){this.listenerRecordKey=this.listenerRecordKey.bind(this),this.input.addEventListener("focus",()=>{this.startListeningForInput()}),this.input.addEventListener("blur",()=>{this.stopListeningForInput()})}startListeningForInput(){this.input.addEventListener("keydown",this.listenerRecordKey)}listenerRecordKey(e){if(Hf.includes(e.key))return;let t=[e.ctrlKey?"Ctrl":"",e.metaKey?"Cmd":"",e.key];this.input.value=t.filter(i=>!!i).join(" + ")}stopListeningForInput(){this.input.removeEventListener("keydown",this.listenerRecordKey)}};var Ji=class extends g{setup(){this.container=this.$el,this.handleSelector=this.$opts.handleSelector;let e=new Ye(this.container,{handle:this.handleSelector,animation:150,onSort:()=>{this.$emit("sort",{ids:e.toArray()})},setData(t,i){let r=i.getAttribute("data-drag-content");if(r){let o=JSON.parse(r);for(let[s,a]of Object.entries(o))t.setData(s,a)}},revertOnSpill:!0,dropBubble:!0,dragoverBubble:!1})}};var Qi=class extends g{setup(){this.filter=this.$opts.filter,this.$el.addEventListener("change",e=>{if(this.filter&&!e.target.matches(this.filter))return;let t=this.$el.closest("form");t&&t.submit()})}};var er=class extends g{setup(){this.container=this.$el,this.tabList=this.container.querySelector('[role="tablist"]'),this.tabs=Array.from(this.tabList.querySelectorAll('[role="tab"]')),this.panels=Array.from(this.container.querySelectorAll(':scope > [role="tabpanel"], :scope > * > [role="tabpanel"]')),this.activeUnder=this.$opts.activeUnder?Number(this.$opts.activeUnder):1e4,this.active=null,this.container.addEventListener("click",e=>{let t=e.target.closest('[role="tab"]');t&&this.tabs.includes(t)&&this.show(t.getAttribute("aria-controls"))}),window.addEventListener("resize",this.updateActiveState.bind(this),{passive:!0}),this.updateActiveState()}show(e){for(let t of this.panels)t.toggleAttribute("hidden",t.id!==e);for(let t of this.tabs){let r=t.getAttribute("aria-controls")===e;t.setAttribute("aria-selected",r?"true":"false")}this.$emit("change",{showing:e})}updateActiveState(){let e=window.innerWidth!t.hasAttribute("hidden"))||this.panels[0];this.show(e.id),this.tabList.toggleAttribute("hidden",!1)}deactivate(){for(let e of this.panels)e.removeAttribute("hidden");for(let e of this.tabs)e.setAttribute("aria-selected","false");this.tabList.toggleAttribute("hidden",!0)}};var tr=class extends g{setup(){this.addRemoveComponentEl=this.$refs.addRemove,this.container=this.$el,this.rowSelector=this.$opts.rowSelector,this.setupListeners()}setupListeners(){this.container.addEventListener("input",e=>{let t=window.$components.firstOnElement(this.addRemoveComponentEl,"add-remove-rows");!this.hasEmptyRows()&&e.target.value&&t.add()})}hasEmptyRows(){return[...this.container.querySelectorAll(this.rowSelector)].find(i=>[...i.querySelectorAll("input")].filter(r=>r.value).length===0)!==void 0}};var nr=class extends g{setup(){this.container=this.$el,this.list=this.$refs.list,this.searchInput=this.$refs.searchInput,this.searchButton=this.$refs.searchButton,this.searchCancel=this.$refs.searchCancel,this.setupListeners()}setupListeners(){K(this.container,"[template-action]","click",this.handleTemplateActionClick.bind(this)),K(this.container,".pagination a","click",this.handlePaginationClick.bind(this)),K(this.container,".template-item-content","click",this.handleTemplateItemClick.bind(this)),K(this.container,".template-item","dragstart",this.handleTemplateItemDragStart.bind(this)),this.searchInput.addEventListener("keypress",e=>{e.key==="Enter"&&(e.preventDefault(),this.performSearch())}),this.searchButton.addEventListener("click",()=>this.performSearch()),this.searchCancel.addEventListener("click",()=>{this.searchInput.value="",this.performSearch()})}handleTemplateItemClick(e,t){let i=t.closest("[template-id]").getAttribute("template-id");this.insertTemplate(i,"replace")}handleTemplateItemDragStart(e,t){let i=t.closest("[template-id]").getAttribute("template-id");e.dataTransfer.setData("bookstack/template",i),e.dataTransfer.setData("text/plain",i)}handleTemplateActionClick(e,t){e.stopPropagation();let i=t.getAttribute("template-action"),r=t.closest("[template-id]").getAttribute("template-id");this.insertTemplate(r,i)}async insertTemplate(e,t="replace"){let i=await window.$http.get(`/templates/${e}`),r=`editor::${t}`;window.$events.emit(r,i.data)}async handlePaginationClick(e,t){e.preventDefault();let i=t.getAttribute("href"),r=await window.$http.get(i);this.list.innerHTML=r.data}async performSearch(){let e=this.searchInput.value,t=await window.$http.get("/templates",{search:e});this.searchCancel.style.display=e?"block":"none",this.list.innerHTML=t.data}};var ir=class extends g{setup(){this.input=this.$el.querySelector("input[type=hidden]"),this.checkbox=this.$el.querySelector("input[type=checkbox]"),this.checkbox.addEventListener("change",this.stateChange.bind(this))}stateChange(){this.input.value=this.checkbox.checked?"true":"false";let e=new Event("change");this.input.dispatchEvent(e)}};var rr=class extends g{setup(){this.container=this.$refs.container,this.tabs=this.$manyRefs.tab,this.lastLayoutType="none",this.onDestroy=null,this.scrollCache={content:0,info:0},this.lastTabShown="content",this.mobileTabClick=this.mobileTabClick.bind(this),this.updateLayout(),window.addEventListener("resize",()=>{this.updateLayout()},{passive:!0})}updateLayout(){let e="tablet";window.innerWidth<=1e3&&(e="mobile"),window.innerWidth>=1400&&(e="desktop"),e!==this.lastLayoutType&&(this.onDestroy&&(this.onDestroy(),this.onDestroy=null),e==="desktop"?this.setupDesktop():e==="mobile"&&this.setupMobile(),this.lastLayoutType=e)}setupMobile(){for(let e of this.tabs)e.addEventListener("click",this.mobileTabClick);this.onDestroy=()=>{for(let e of this.tabs)e.removeEventListener("click",this.mobileTabClick)}}setupDesktop(){}mobileTabClick(e){let{tab:t}=e.target.dataset;this.showTab(t)}showContent(){this.showTab("content",!1)}showTab(e,t=!0){this.scrollCache[this.lastTabShown]=document.documentElement.scrollTop;for(let r of this.tabs){let o=r.dataset.tab===e;r.setAttribute("aria-selected",o?"true":"false")}let i=e==="info";if(this.container.classList.toggle("show-info",i),t){let o=document.querySelector("header").getBoundingClientRect().bottom;document.documentElement.scrollTop=this.scrollCache[e]||o,setTimeout(()=>{document.documentElement.scrollTop=this.scrollCache[e]||o},50)}this.lastTabShown=e}};var or=class extends g{setup(){this.container=this.$el,this.input=this.$refs.input,this.userInfoContainer=this.$refs.userInfo,K(this.container,"a.dropdown-search-item","click",this.selectUser.bind(this))}selectUser(e,t){e.preventDefault(),this.input.value=t.getAttribute("data-id"),this.userInfoContainer.innerHTML=t.innerHTML,this.input.dispatchEvent(new Event("change",{bubbles:!0})),this.hide()}hide(){window.$components.firstOnElement(this.container,"dropdown").hide()}};var sr=class extends g{setup(){this.checkboxes=this.$el.querySelectorAll('input[type="checkbox"]'),this.allCheckbox=this.$el.querySelector('input[type="checkbox"][value="all"]'),this.$el.addEventListener("change",e=>{e.target.checked&&e.target===this.allCheckbox?this.deselectIndividualEvents():e.target.checked&&(this.allCheckbox.checked=!1)})}deselectIndividualEvents(){for(let e of this.checkboxes)e!==this.allCheckbox&&(e.checked=!1)}};function ou(n){for(let e=1;e<5;e++)n.shortcuts.add(`meta+${e}`,"",["FormatBlock",!1,`h${e+1}`]);n.shortcuts.add("meta+5","",["FormatBlock",!1,"p"]),n.shortcuts.add("meta+d","",["FormatBlock",!1,"p"]),n.shortcuts.add("meta+6","",["FormatBlock",!1,"blockquote"]),n.shortcuts.add("meta+q","",["FormatBlock",!1,"blockquote"]),n.shortcuts.add("meta+7","",["codeeditor",!1,"pre"]),n.shortcuts.add("meta+e","",["codeeditor",!1,"pre"]),n.shortcuts.add("meta+8","",["FormatBlock",!1,"code"]),n.shortcuts.add("meta+shift+E","",["FormatBlock",!1,"code"]),n.shortcuts.add("meta+o","","InsertOrderedList"),n.shortcuts.add("meta+p","","InsertUnorderedList"),n.shortcuts.add("meta+S","",()=>{window.$events.emit("editor-save-draft")}),n.shortcuts.add("meta+13","",()=>{window.$events.emit("editor-save-page")}),n.shortcuts.add("meta+9","",()=>{let e=n.selection.getNode(),t=e?e.closest(".callout"):null,i=["info","success","warning","danger"],o=(i.findIndex(a=>t&&t.classList.contains(a))+1)%i.length,s=i[o];n.formatter.apply(`callout${s}`)}),n.shortcuts.add("meta+shift+K","",()=>{window.$components.first("entity-selector-popup").show(t=>{n.selection.isCollapsed()?n.insertContent(n.dom.createHTML("a",{href:t.link},n.dom.encode(t.name))):n.formatter.apply("link",{href:t.link}),n.selection.collapse(!1),n.focus()})})}function su(n){window.$events.listen("editor::replace",({html:e})=>{n.setContent(e)}),window.$events.listen("editor::append",({html:e})=>{let t=n.getContent()+e;n.setContent(t)}),window.$events.listen("editor::prepend",({html:e})=>{let t=e+n.getContent();n.setContent(t)}),window.$events.listen("editor::insert",({html:e})=>{n.insertContent(e)}),window.$events.listen("editor::focus",()=>{n.initialized&&n.focus()})}function Uf(n,e){let t=n.dom.get(encodeURIComponent(e).replace(/!/g,"%21"));t&&(t.scrollIntoView(),n.selection.select(t,!0),n.selection.collapse(!1),n.focus())}function au(n){let t=new URL(window.location).searchParams.get("content-id");t&&Uf(n,t)}var it,ar;function jf(n){return n&&!!(n.textContent||n.innerText)}async function Vf(n,e){if(n===null||n.type.indexOf("image")!==0)throw new Error("Not an image file");let t=n.name||`image-${Date.now()}.png`,i=new FormData;return i.append("file",n,t),i.append("uploaded_to",e),(await window.$http.post(window.baseUrl("/images/gallery"),i)).data}function lu(n,e,t){let i=new Fe(t.clipboardData||t.dataTransfer);if(!i.hasItems()||i.containsTabularData())return;let r=i.getImages();for(let o of r){let s=`image-${Math.random().toString(16).slice(2)}`,a=window.baseUrl("/loading.gif");t.preventDefault(),setTimeout(()=>{n.insertContent(`

    `),Vf(o,e.pageId).then(l=>{let c=l.name.replace(/"/g,""),u=`${c}`,h=n.dom.create("a",{target:"_blank",href:l.url},u);n.dom.replace(h,s)}).catch(l=>{n.dom.remove(s),window.$events.emit("error",e.translations.imageUploadErrorText),console.error(l)})},10)}}function Wf(n){let e=n.selection.getNode();e.nodeName==="IMG"&&(it=n.dom.getParent(e,".mceTemp"),!it&&e.parentNode.nodeName==="A"&&!jf(e.parentNode)&&(it=e.parentNode)),e.hasAttribute("contenteditable")&&e.getAttribute("contenteditable")==="false"&&(ar=e)}function Gf(n,e,t){let{dom:i}=n,r=window.tinymce.dom.RangeUtils.getCaretRangeFromPoint(t.clientX,t.clientY,n.getDoc()),o=t.dataTransfer&&t.dataTransfer.getData("bookstack/template");o&&(t.preventDefault(),window.$http.get(`/templates/${o}`).then(s=>{n.selection.setRng(r),n.undoManager.transact(()=>{n.execCommand("mceInsertContent",!1,s.data.html)})})),i.getParent(r.startContainer,".mceTemp")?t.preventDefault():it&&(t.preventDefault(),n.undoManager.transact(()=>{n.selection.setRng(r),n.selection.setNode(it),i.remove(it)})),!t.isDefaultPrevented()&&ar&&(t.preventDefault(),n.undoManager.transact(()=>{let s=n.selection.getNode(),a=n.selection.getRng(),l=s.closest("body > *");a.startOffset>a.startContainer.length/2?l.after(ar):l.before(ar)})),t.isDefaultPrevented()||lu(n,e,t),it=null}function cu(n,e){n.on("dragstart",()=>Wf(n)),n.on("drop",t=>Gf(n,e,t)),n.on("paste",t=>lu(n,e,t))}function uu(n){return["undo redo","styles","bold italic underline forecolor backcolor formatoverflow","alignleft aligncenter alignright alignjustify","bullist numlist listoverflow",n.textDirection==="rtl"?"ltr rtl":"","link table imagemanager-insert insertoverflow","code about fullscreen"].filter(i=>!!i).join(" | ")}function Kf(n){n.ui.registry.addGroupToolbarButton("formatoverflow",{icon:"more-drawer",tooltip:"More",items:"strikethrough superscript subscript inlinecode removeformat"}),n.ui.registry.addGroupToolbarButton("listoverflow",{icon:"more-drawer",tooltip:"More",items:"tasklist outdent indent"}),n.ui.registry.addGroupToolbarButton("insertoverflow",{icon:"more-drawer",tooltip:"More",items:"customhr codeeditor drawio media details"})}function Zf(n){n.ui.registry.addContextToolbar("linkcontexttoolbar",{predicate(e){return e.closest("a")!==null},position:"node",scope:"node",items:"link unlink openlink"})}function Xf(n){n.ui.registry.addContextToolbar("imagecontexttoolbar",{predicate(e){return e.closest("img")!==null},position:"node",scope:"node",items:"image"})}function hu(n){Kf(n),Zf(n),Xf(n)}var Yf={"table-delete-column":'',"table-delete-row":'',"table-insert-column-after":'',"table-insert-column-before":'',"table-insert-row-above":'',"table-insert-row-after":'',table:'',"table-delete-table":''};function du(n){for(let[e,t]of Object.entries(Yf))n.ui.registry.addIcon(e,t)}function Jf(n){n.serializer.addNodeFilter("br",e=>{for(let t of e)if(t.parent&&t.parent.name==="code"){let i=window.tinymce.html.Node.create("#text");i.value=` -`,t.replace(i)}})}function Qf(n){n.parser.addNodeFilter("div",e=>{for(let t of e){let i=t.attr("id")||"",r=t.attr("class")||"";(i==="pointer"||r.includes("pointer"))&&t.remove()}})}function pu(n){Jf(n),Qf(n)}function fu(n){return n.tagName.toLowerCase()==="code-block"}function gu(n,e,t,i){let r=window.$components.first("code-editor"),o=n.selection.getBookmark();r.open(e,t,(s,a)=>{i(s,a),n.focus(),n.selection.moveToBookmark(o)},()=>{n.focus(),n.selection.moveToBookmark(o)})}function mu(n,e){gu(n,e.getContent(),e.getLanguage(),(t,i)=>{e.setContent(t,i)})}function em(n){let e=n.getDoc(),t=e.defaultView;class i extends t.HTMLElement{constructor(){super();se(this,"editor",null);this.attachShadow({mode:"open"});let s=document.head.querySelectorAll('link[rel="stylesheet"]:not([media="print"]),style'),a=Array.from(s).map(c=>c.cloneNode(!0)),l=document.createElement("div");l.style.pointerEvents="none",l.contentEditable="false",l.classList.add("CodeMirrorContainer"),l.classList.toggle("dark-mode",document.documentElement.classList.contains("dark-mode")),this.shadowRoot.append(...a,l)}getLanguage(){let s=c=>(c.split(" ").filter(h=>h.startsWith("language-"))[0]||"").replace("language-",""),a=this.querySelector("code"),l=this.querySelector("pre");return s(l.className)||a&&s(a.className)||""}setContent(s,a){this.editor&&(this.editor.setContent(s),this.editor.setMode(a,s));let l=this.querySelector("pre");l||(l=e.createElement("pre"),this.append(l)),l.innerHTML="";let c=e.createElement("code");l.append(c),c.innerText=s,c.className=`language-${a}`}getContent(){let s=this.querySelector("code")||this.querySelector("pre"),a=document.createElement("pre");a.innerHTML=s.innerHTML.replace(/\ufeff/g,"");let l=a.querySelectorAll("br");for(let c of l)c.replaceWith(` +`);L(this,ke,Ai).call(this,c,i),ee()}catch(a){throw this.handleDrawingUploadError(a),new Error(`Failed to save image with error: ${a}`)}})}handleDrawingUploadError(t){t.status===413?window.$events.emit("error",this.editor.config.text.serverUploadLimit):window.$events.emit("error",this.editor.config.text.imageUploadError),console.error(t)}fullScreen(){let{container:t}=this.editor.config,e=t.classList.contains("fullscreen");t.classList.toggle("fullscreen",!e),document.body.classList.toggle("markdown-fullscreen",!e)}scrollToText(t){if(!t)return;let e=this.editor.cm.state.doc,i=1,r=-1;for(let s of e.iterLines()){if(s.includes(t)){r=i;break}i+=1}if(r===-1)return;let o=e.line(r);L(this,Ti,Jc).call(this,o.from,o.to,!0),this.focus()}focus(){this.editor.cm.hasFocus||this.editor.cm.focus()}insertContent(t){L(this,Pt,ne).call(this,t,t.length)}prependContent(t){t=L(this,nn,Ro).call(this,t);let i=L(this,rt,ht).call(this).from+t.length+1;L(this,dt,vt).call(this,0,0,`${t} +`,i),this.focus()}appendContent(t){t=L(this,nn,Ro).call(this,t),L(this,dt,vt).call(this,this.editor.cm.state.doc.length,` +${t}`),this.focus()}replaceContent(t){L(this,ke,Ai).call(this,t)}replaceLineStart(t){let e=L(this,rt,ht).call(this),i=this.editor.cm.state.doc.lineAt(e.from),r=i.text,o=r.split(" ")[0];if(o===t){let c=r.replace(`${t} `,""),u=e.from+(c.length-r.length);L(this,dt,vt).call(this,i.from,i.to,c,u);return}let s=r;/^[#>`]/.test(o)?s=r.replace(o,t).trim():t!==""&&(s=`${t} ${r}`);let l=e.from+(s.length-r.length);L(this,dt,vt).call(this,i.from,i.to,s,l)}wrapSelection(t,e){let i=L(this,rt,ht).call(this),r=L(this,Wt,ye).call(this,i);if(!r){L(this,Ce,Di).call(this,t,e);return}let o=r,s;r.startsWith(t)&&r.endsWith(e)?(o=r.slice(t.length,r.length-e.length),s=i.extend(i.from,i.to-(t.length+e.length))):(o=`${t}${r}${e}`,s=i.extend(i.from,i.to+(t.length+e.length))),L(this,dt,vt).call(this,i.from,i.to,o,s.anchor,s.head)}replaceLineStartForOrderedList(){let t=L(this,rt,ht).call(this),e=this.editor.cm.state.doc.lineAt(t.from),r=this.editor.cm.state.doc.line(e.number-1).text.match(/^(\s*)(\d)([).])\s/)||[],o=(Number(r[2])||0)+1,s=r[1]||"",a=r[3]||".",l=`${s}${o}${a}`;return this.replaceLineStart(l)}cycleCalloutTypeAtSelection(){let t=L(this,rt,ht).call(this),e=this.editor.cm.state.doc.lineAt(t.from),i=["info","success","warning","danger"],r=i.join("|"),s=new RegExp(`class="((${r})\\s+callout|callout\\s+(${r}))"`,"i").exec(e.text),a=(s?s[2]||s[3]:"").toLowerCase();if(a===i[i.length-1])L(this,Ce,Di).call(this,`

    `,"

    ");else if(a==="")L(this,Ce,Di).call(this,'

    ',"

    ");else{let l=i.indexOf(a)+1,c=i[l],u=e.text.replace(s[0],s[0].replace(a,c)),h=u.length-e.text.length;L(this,dt,vt).call(this,e.from,e.to,u,t.anchor+h,t.head+h)}}syncDisplayPosition(t){let e=t.target;if(Math.abs(e.scrollHeight-e.clientHeight-e.scrollTop)<1){this.editor.display.scrollToIndex(-1);return}let r=this.editor.cm.lineBlockAtHeight(e.scrollTop),o=this.editor.cm.state.sliceDoc(0,r.from),l=new DOMParser().parseFromString(this.editor.markdown.render(o),"text/html").documentElement.querySelectorAll("body > *");this.editor.display.scrollToIndex(l.length)}async insertTemplate(t,e,i){let r=this.editor.cm.posAtCoords({x:e,y:i},!1),{data:o}=await window.$http.get(`/templates/${t}`),s=o.markdown||o.html;L(this,dt,vt).call(this,r,r,s,r)}insertClipboardImages(t,e,i){let r=this.editor.cm.posAtCoords({x:e,y:i},!1);for(let o of t)this.uploadImage(o,r)}async uploadImage(t,e=null){if(t===null||t.type.indexOf("image")!==0)return;let i="png";if(e===null&&(e=L(this,rt,ht).call(this).from),t.name){let c=t.name.match(/\.(.+)$/);c.length>1&&(i=c[1])}let r=`image-${Math.random().toString(16).slice(2)}`,s=`![](${window.baseUrl(`/loading.gif#upload${r}`)})`;L(this,dt,vt).call(this,e,e,s,e);let a=`image-${Date.now()}.${i}`,l=new FormData;l.append("file",t,a),l.append("uploaded_to",this.editor.config.pageId);try{let{data:c}=await window.$http.post("/images/gallery",l),u=`[![](${c.thumbs.display})](${c.url})`;L(this,rn,No).call(this,s,u)}catch(c){window.$events.error(c?.data?.message||this.editor.config.text.imageUploadError),L(this,rn,No).call(this,s,""),console.error(c)}}};en=new WeakSet,Oo=function(t,e){let i=`
    `;L(this,Pt,ne).call(this,i,i.length,e)},xe=new WeakSet,Si=function(){return this.editor.cm.state.doc.toString()},ke=new WeakSet,Ai=function(t,e=null){e=e||L(this,rt,ht).call(this);let i=this.editor.cm.state.toText(t),r=Math.min(e.from,i.length);L(this,dt,vt).call(this,0,this.editor.cm.state.doc.length,t,r),this.focus()},Pt=new WeakSet,ne=function(t,e=0,i=null){i=i||this.editor.cm.state.selection.main;let r=i.from+e;L(this,dt,vt).call(this,i.from,i.to,t,r),this.focus()},Wt=new WeakSet,ye=function(t=null){return t=t||L(this,rt,ht).call(this),this.editor.cm.state.sliceDoc(t.from,t.to)},rt=new WeakSet,ht=function(){return this.editor.cm.state.selection.main},nn=new WeakSet,Ro=function(t){return t.replace(/\r\n|\r/g,` +`)},rn=new WeakSet,No=function(t,e){let i=L(this,xe,Si).call(this).replace(t,e);L(this,ke,Ai).call(this,i)},Ce=new WeakSet,Di=function(t,e){let i=L(this,rt,ht).call(this),r=this.editor.cm.state.doc.lineAt(i.from),o=r.text,s,a=0;o.startsWith(t)&&o.endsWith(e)?(s=o.slice(t.length,o.length-e.length),a=-t.length):(s=`${t}${o}${e}`,a=t.length),L(this,dt,vt).call(this,r.from,r.to,s,i.from+a)},dt=new WeakSet,vt=function(t,e=null,i=null,r=null,o=null){let s={changes:{from:t,to:e,insert:i}};r&&(s.selection={anchor:r},o&&(s.selection.head=o)),this.editor.cm.dispatch(s)},Ti=new WeakSet,Jc=function(t,e,i=!1){this.editor.cm.dispatch({selection:{anchor:t,head:e},scrollIntoView:i})};var $i=class{constructor(t){this.settingMap={scrollSync:!0,showPreview:!0,editorWidth:50},this.changeListeners={},this.loadFromLocalStorage(),this.applyToInputs(t),this.listenToInputChanges(t)}applyToInputs(t){for(let e of t){let i=e.getAttribute("name").replace("md-","");e.checked=this.settingMap[i]}}listenToInputChanges(t){for(let e of t)e.addEventListener("change",()=>{let i=e.getAttribute("name").replace("md-","");this.set(i,e.checked)})}loadFromLocalStorage(){let t=window.localStorage.getItem("md-editor-settings");if(!t)return;let e=JSON.parse(t);for(let[i,r]of Object.entries(e))r!==null&&this.settingMap[i]!==void 0&&(this.settingMap[i]=r)}set(t,e){this.settingMap[t]=e,window.localStorage.setItem("md-editor-settings",JSON.stringify(this.settingMap));for(let i of this.changeListeners[t]||[])i(e)}get(t){return this.settingMap[t]||null}onChange(t,e){let i=this.changeListeners[t]||[];i.push(e),this.changeListeners[t]=i}};function Ii({html:n,markdown:t}){return t||n}function Qc(n){window.$events.listen("editor::replace",t=>{let e=Ii(t);n.actions.replaceContent(e)}),window.$events.listen("editor::append",t=>{let e=Ii(t);n.actions.appendContent(e)}),window.$events.listen("editor::prepend",t=>{let e=Ii(t);n.actions.prependContent(e)}),window.$events.listen("editor::insert",t=>{let e=Ii(t);n.actions.insertContent(e)}),window.$events.listen("editor::focus",()=>{n.actions.focus()})}function qf(n){let t={};return t["Shift-Mod-i"]=()=>n.actions.insertImage(),t["Mod-s"]=()=>window.$events.emit("editor-save-draft"),t["Mod-Enter"]=()=>window.$events.emit("editor-save-page"),t["Shift-Mod-k"]=()=>n.actions.showLinkSelector(),t["Mod-k"]=()=>n.actions.insertLink(),t["Mod-1"]=()=>n.actions.replaceLineStart("##"),t["Mod-2"]=()=>n.actions.replaceLineStart("###"),t["Mod-3"]=()=>n.actions.replaceLineStart("####"),t["Mod-4"]=()=>n.actions.replaceLineStart("#####"),t["Mod-5"]=()=>n.actions.replaceLineStart(""),t["Mod-d"]=()=>n.actions.replaceLineStart(""),t["Mod-6"]=()=>n.actions.replaceLineStart(">"),t["Mod-q"]=()=>n.actions.replaceLineStart(">"),t["Mod-7"]=()=>n.actions.wrapSelection("\n```\n","\n```"),t["Mod-8"]=()=>n.actions.wrapSelection("`","`"),t["Shift-Mod-e"]=()=>n.actions.wrapSelection("`","`"),t["Mod-9"]=()=>n.actions.cycleCalloutTypeAtSelection(),t["Mod-p"]=()=>n.actions.replaceLineStart("-"),t["Mod-o"]=()=>n.actions.replaceLineStartForOrderedList(),t}function tu(n){let t=qf(n),e=[],i=r=>()=>(r(),!0);for(let[r,o]of Object.entries(t))e.push({key:r,run:i(o),preventDefault:!0});return e}async function eu(n){let t=await window.importVersioned("code");function e(a){a.docChanged&&n.actions.updateAndRender()}let i=Nt(n.actions.syncDisplayPosition.bind(n.actions),100,!1),r=n.settings.get("scrollSync");n.settings.onChange("scrollSync",a=>{r=a});let o={scroll:a=>r&&i(a),drop:a=>{let l=a.dataTransfer.getData("bookstack/template");l&&(a.preventDefault(),n.actions.insertTemplate(l,a.pageX,a.pageY));let u=new Ft(a.dataTransfer).getImages();u.length>0&&(a.stopPropagation(),a.preventDefault(),n.actions.insertClipboardImages(u,a.pageX,a.pageY))},paste:a=>{let l=new Ft(a.clipboardData||a.dataTransfer);if(!l.hasItems()||l.containsTabularData())return;let c=l.getImages();for(let u of c)n.actions.uploadImage(u)}},s=t.markdownEditor(n.config.inputEl,e,o,tu(n));return window.mdEditorView=s,s}async function nu(n){let t={config:n,markdown:new wi,settings:new $i(n.settingInputs)};return t.actions=new Li(t),t.display=new ki(t),t.cm=await eu(t),Qc(t),t}var Mi=class extends g{setup(){this.elem=this.$el,this.pageId=this.$opts.pageId,this.textDirection=this.$opts.textDirection,this.imageUploadErrorText=this.$opts.imageUploadErrorText,this.serverUploadLimitText=this.$opts.serverUploadLimitText,this.display=this.$refs.display,this.input=this.$refs.input,this.divider=this.$refs.divider,this.displayWrap=this.$refs.displayWrap;let{settingContainer:t}=this.$refs,e=t.querySelectorAll('input[type="checkbox"]');this.editor=null,nu({pageId:this.pageId,container:this.elem,displayEl:this.display,inputEl:this.input,drawioUrl:this.getDrawioUrl(),settingInputs:Array.from(e),text:{serverUploadLimit:this.serverUploadLimitText,imageUploadError:this.imageUploadErrorText}}).then(i=>{this.editor=i,this.setupListeners(),this.emitEditorEvents(),this.scrollToTextIfNeeded(),this.editor.actions.updateAndRender()})}emitEditorEvents(){window.$events.emitPublic(this.elem,"editor-markdown::setup",{markdownIt:this.editor.markdown.getRenderer(),displayEl:this.display,cmEditorView:this.editor.cm})}setupListeners(){this.elem.addEventListener("click",t=>{let e=t.target.closest("button[data-action]");if(e===null)return;let i=e.getAttribute("data-action");if(i==="insertImage"&&this.editor.actions.showImageInsert(),i==="insertLink"&&this.editor.actions.showLinkSelector(),i==="insertDrawing"&&(t.ctrlKey||t.metaKey)){this.editor.actions.showImageManager();return}i==="insertDrawing"&&this.editor.actions.startDrawing(),i==="fullscreen"&&this.editor.actions.fullScreen()}),this.elem.addEventListener("click",t=>{let e=t.target.closest(".editor-toolbar-label");if(!e)return;let i=this.elem.querySelectorAll(".markdown-editor-wrap");for(let r of i)r.classList.remove("active");e.closest(".markdown-editor-wrap").classList.add("active")}),this.handleDividerDrag()}handleDividerDrag(){this.divider.addEventListener("pointerdown",()=>{let e=this.elem.getBoundingClientRect(),i=o=>{let s=o.pageX-e.left,a=Math.min(Math.max(20,Math.floor(s/e.width*100)),80);this.displayWrap.style.flexBasis=`${100-a}%`,this.editor.settings.set("editorWidth",a)},r=()=>{window.removeEventListener("pointermove",i),window.removeEventListener("pointerup",r),this.display.style.pointerEvents=null,document.body.style.userSelect=null};this.display.style.pointerEvents="none",document.body.style.userSelect="none",window.addEventListener("pointermove",i),window.addEventListener("pointerup",r)});let t=this.editor.settings.get("editorWidth");t&&(this.displayWrap.style.flexBasis=`${100-t}%`)}scrollToTextIfNeeded(){let e=new URL(window.location).searchParams.get("content-text");e&&this.editor.actions.scrollToText(e)}getDrawioUrl(){let t=document.querySelector("[drawio-url]");return t&&t.getAttribute("drawio-url")||""}getContent(){return this.editor.actions.getContent()}};var Fi=class extends g{setup(){this.container=this.$el,this.inputContainer=this.$refs.inputContainer,this.inviteOption=this.container.querySelector("input[name=send_invite]"),this.inviteOption&&(this.inviteOption.addEventListener("change",this.inviteOptionChange.bind(this)),this.inviteOptionChange())}inviteOptionChange(){let t=this.inviteOption.value==="true",e=this.container.querySelectorAll("input[type=password]");for(let i of e)i.disabled=t;this.inputContainer.style.display=t?"none":"block"}};var qi=class extends g{setup(){this.container=this.$el,this.type=this.$opts.type,this.textElem=this.container.querySelector("span"),this.autoHide=this.$opts.autoHide==="true",this.initialShow=this.$opts.show==="true",this.container.style.display="grid",window.$events.listen(this.type,t=>{this.show(t)}),this.container.addEventListener("click",this.hide.bind(this)),this.initialShow&&setTimeout(()=>this.show(this.textElem.textContent),100),this.hideCleanup=this.hideCleanup.bind(this)}show(t=""){if(this.container.removeEventListener("transitionend",this.hideCleanup),this.textElem.textContent=t,this.container.style.display="grid",setTimeout(()=>{this.container.classList.add("showing")},1),this.autoHide){let e=t.split(" ").length,i=Math.max(2e3,1e3+250*e);setTimeout(this.hide.bind(this),i)}}hide(){this.container.classList.remove("showing"),this.container.addEventListener("transitionend",this.hideCleanup)}hideCleanup(){this.container.style.display="none",this.container.removeEventListener("transitionend",this.hideCleanup)}};var Bi=class extends g{setup(){this.removeButton=this.$refs.remove,this.showButton=this.$refs.show,this.input=this.$refs.input,this.setupListeners()}setupListeners(){R(this.removeButton,()=>{this.input.value="",this.input.classList.add("hidden"),this.removeButton.classList.add("hidden"),this.showButton.classList.remove("hidden")}),R(this.showButton,()=>{this.input.classList.remove("hidden"),this.removeButton.classList.remove("hidden"),this.showButton.classList.add("hidden")})}};var Pi=class extends g{setup(){this.commentId=this.$opts.commentId,this.commentLocalId=this.$opts.commentLocalId,this.commentParentId=this.$opts.commentParentId,this.deletedText=this.$opts.deletedText,this.updatedText=this.$opts.updatedText,this.container=this.$el,this.contentContainer=this.$refs.contentContainer,this.form=this.$refs.form,this.formCancel=this.$refs.formCancel,this.editButton=this.$refs.editButton,this.deleteButton=this.$refs.deleteButton,this.replyButton=this.$refs.replyButton,this.input=this.$refs.input,this.setupListeners()}setupListeners(){this.replyButton&&this.replyButton.addEventListener("click",()=>this.$emit("reply",{id:this.commentLocalId,element:this.container})),this.editButton&&(this.editButton.addEventListener("click",this.startEdit.bind(this)),this.form.addEventListener("submit",this.update.bind(this)),this.formCancel.addEventListener("click",()=>this.toggleEditMode(!1))),this.deleteButton&&this.deleteButton.addEventListener("click",this.delete.bind(this))}toggleEditMode(t){this.contentContainer.toggleAttribute("hidden",t),this.form.toggleAttribute("hidden",!t)}startEdit(){this.toggleEditMode(!0);let t=this.$refs.input.value.split(` +`).length;this.$refs.input.style.height=`${t*20+40}px`}async update(t){t.preventDefault();let e=this.showLoading();this.form.toggleAttribute("hidden",!0);let i={text:this.input.value,parent_id:this.parentId||null};try{let r=await window.$http.put(`/comment/${this.commentId}`,i),o=_t(r.data);this.container.replaceWith(o),window.$events.success(this.updatedText)}catch(r){console.error(r),window.$events.showValidationErrors(r),this.form.toggleAttribute("hidden",!1),e.remove()}}async delete(){this.showLoading(),await window.$http.delete(`/comment/${this.commentId}`),this.container.closest(".comment-branch").remove(),window.$events.success(this.deletedText),this.$emit("delete")}showLoading(){let t=ae();return t.classList.add("px-l"),this.container.append(t),t}};var Oi=class extends g{setup(){this.elem=this.$el,this.pageId=Number(this.$opts.pageId),this.container=this.$refs.commentContainer,this.commentCountBar=this.$refs.commentCountBar,this.commentsTitle=this.$refs.commentsTitle,this.addButtonContainer=this.$refs.addButtonContainer,this.replyToRow=this.$refs.replyToRow,this.formContainer=this.$refs.formContainer,this.form=this.$refs.form,this.formInput=this.$refs.formInput,this.formReplyLink=this.$refs.formReplyLink,this.addCommentButton=this.$refs.addCommentButton,this.hideFormButton=this.$refs.hideFormButton,this.removeReplyToButton=this.$refs.removeReplyToButton,this.createdText=this.$opts.createdText,this.countText=this.$opts.countText,this.parentId=null,this.formReplyText=this.formReplyLink?.textContent||"",this.setupListeners()}setupListeners(){this.elem.addEventListener("page-comment-delete",()=>{this.updateCount(),this.hideForm()}),this.elem.addEventListener("page-comment-reply",t=>{this.setReply(t.detail.id,t.detail.element)}),this.form&&(this.removeReplyToButton.addEventListener("click",this.removeReplyTo.bind(this)),this.hideFormButton.addEventListener("click",this.hideForm.bind(this)),this.addCommentButton.addEventListener("click",this.showForm.bind(this)),this.form.addEventListener("submit",this.saveComment.bind(this)))}saveComment(t){t.preventDefault(),t.stopPropagation();let e=ae();e.classList.add("px-l"),this.form.after(e),this.form.toggleAttribute("hidden",!0);let r={text:this.formInput.value,parent_id:this.parentId||null};window.$http.post(`/comment/${this.pageId}`,r).then(o=>{let s=_t(o.data);this.formContainer.after(s),window.$events.success(this.createdText),this.hideForm(),this.updateCount()}).catch(o=>{this.form.toggleAttribute("hidden",!1),window.$events.showValidationErrors(o)}),this.form.toggleAttribute("hidden",!1),e.remove()}updateCount(){let t=this.getCommentCount();this.commentsTitle.textContent=window.trans_plural(this.countText,t,{count:t})}resetForm(){this.formInput.value="",this.parentId=null,this.replyToRow.toggleAttribute("hidden",!0),this.container.append(this.formContainer)}showForm(){this.formContainer.toggleAttribute("hidden",!1),this.addButtonContainer.toggleAttribute("hidden",!0),this.formContainer.scrollIntoView({behavior:"smooth",block:"nearest"}),setTimeout(()=>{this.formInput.focus()},100)}hideForm(){this.resetForm(),this.formContainer.toggleAttribute("hidden",!0),this.getCommentCount()>0?this.elem.append(this.addButtonContainer):this.commentCountBar.append(this.addButtonContainer),this.addButtonContainer.toggleAttribute("hidden",!1)}getCommentCount(){return this.container.querySelectorAll('[component="page-comment"]').length}setReply(t,e){e.closest(".comment-branch").querySelector(".comment-branch-children").append(this.formContainer),this.showForm(),this.parentId=t,this.replyToRow.toggleAttribute("hidden",!1),this.formReplyLink.textContent=this.formReplyText.replace("1234",this.parentId),this.formReplyLink.href=`#comment${this.parentId}`}removeReplyTo(){this.parentId=null,this.replyToRow.toggleAttribute("hidden",!0),this.container.append(this.formContainer),this.showForm()}};function Bf(n,t){yr(`#page-navigation a[href="#${n}"]`,e=>{e.closest("li").classList.toggle("current-heading",t)})}function Pf(n){for(let t of n){let e=t.intersectionRatio===1;Bf(t.target.id,e)}}function Of(n){let t={rootMargin:"0px 0px 0px 0px",threshold:1},e=new IntersectionObserver(Pf,t);for(let i of n)e.observe(i)}var Ri=class extends g{setup(){if(this.container=this.$el,this.pageId=this.$opts.pageId,window.importVersioned("code").then(e=>e.highlight()),this.setupNavHighlighting(),window.location.hash){let e=window.location.hash.replace(/%20/g," ").substring(1);this.goToText(e)}let t=document.querySelector(".sidebar-page-nav");t&&K(t,"a","click",(e,i)=>{e.preventDefault(),window.$components.first("tri-layout").showContent();let r=i.getAttribute("href").substr(1);this.goToText(r),window.history.pushState(null,null,`#${r}`)})}goToText(t){let e=document.getElementById(t);if(yr(".page-content [data-highlighted]",i=>{i.removeAttribute("data-highlighted"),i.style.backgroundColor=null}),e!==null)kr(e);else{let i=Qo(".page-content > div > *",t);i&&kr(i)}}setupNavHighlighting(){let t=document.querySelector(".sidebar-page-nav"),e=document.querySelector(".page-content").querySelectorAll("h1, h2, h3, h4, h5, h6");e.length>0&&t!==null&&Of(e)}};function iu(n){let t=new Date(n*1e3),e=t.getHours(),i=t.getMinutes();return`${(e>9?"":"0")+e}:${(i>9?"":"0")+i}`}var Ni=class extends g{setup(){this.draftsEnabled=this.$opts.draftsEnabled==="true",this.editorType=this.$opts.editorType,this.pageId=Number(this.$opts.pageId),this.isNewDraft=this.$opts.pageNewDraft==="true",this.hasDefaultTitle=this.$opts.hasDefaultTitle||!1,this.container=this.$el,this.titleElem=this.$refs.titleContainer.querySelector("input"),this.saveDraftButton=this.$refs.saveDraft,this.discardDraftButton=this.$refs.discardDraft,this.discardDraftWrap=this.$refs.discardDraftWrap,this.deleteDraftButton=this.$refs.deleteDraft,this.deleteDraftWrap=this.$refs.deleteDraftWrap,this.draftDisplay=this.$refs.draftDisplay,this.draftDisplayIcon=this.$refs.draftDisplayIcon,this.changelogInput=this.$refs.changelogInput,this.changelogDisplay=this.$refs.changelogDisplay,this.changeEditorButtons=this.$manyRefs.changeEditor||[],this.switchDialogContainer=this.$refs.switchDialog,this.deleteDraftDialogContainer=this.$refs.deleteDraftDialog,this.draftText=this.$opts.draftText,this.autosaveFailText=this.$opts.autosaveFailText,this.editingPageText=this.$opts.editingPageText,this.draftDiscardedText=this.$opts.draftDiscardedText,this.draftDeleteText=this.$opts.draftDeleteText,this.draftDeleteFailText=this.$opts.draftDeleteFailText,this.setChangelogText=this.$opts.setChangelogText,this.autoSave={interval:null,frequency:3e4,last:0,pendingChange:!1},this.shownWarningsCache=new Set,this.pageId!==0&&this.draftsEnabled&&window.setTimeout(()=>{this.startAutoSave()},1e3),this.draftDisplay.innerHTML=this.draftText,this.setupListeners(),this.setInitialFocus()}setupListeners(){window.$events.listen("editor-save-draft",this.saveDraft.bind(this)),window.$events.listen("editor-save-page",this.savePage.bind(this));let t=()=>{this.autoSave.pendingChange=!0};window.$events.listen("editor-html-change",t),window.$events.listen("editor-markdown-change",t),this.titleElem.addEventListener("input",t);let e=Nt(this.updateChangelogDisplay.bind(this),300,!1);this.changelogInput.addEventListener("input",e),R(this.saveDraftButton,this.saveDraft.bind(this)),R(this.discardDraftButton,this.discardDraft.bind(this)),R(this.deleteDraftButton,this.deleteDraft.bind(this)),R(this.changeEditorButtons,this.changeEditor.bind(this))}setInitialFocus(){if(this.hasDefaultTitle){this.titleElem.select();return}window.setTimeout(()=>{window.$events.emit("editor::focus","")},500)}startAutoSave(){this.autoSave.interval=window.setInterval(this.runAutoSave.bind(this),this.autoSave.frequency)}runAutoSave(){Date.now()-this.autoSave.last{this.draftDisplayIcon.classList.remove("visible")},2e3)}async discardDraft(t=!0){let e;try{e=await window.$http.get(`/ajax/page/${this.pageId}`)}catch(i){console.error(i);return}this.autoSave.interval&&window.clearInterval(this.autoSave.interval),this.draftDisplay.innerText=this.editingPageText,this.discardDraftWrap.toggleAttribute("hidden",!0),window.$events.emit("editor::replace",{html:e.data.html,markdown:e.data.markdown}),this.titleElem.value=e.data.name,window.setTimeout(()=>{this.startAutoSave()},1e3),t&&window.$events.success(this.draftDiscardedText)}async deleteDraft(){if(await window.$components.firstOnElement(this.deleteDraftDialogContainer,"confirm-dialog").show())try{let i=this.discardDraft(!1),r=window.$http.delete(`/page-revisions/user-drafts/${this.pageId}`);await Promise.all([i,r]),window.$events.success(this.draftDeleteText),this.deleteDraftWrap.toggleAttribute("hidden",!0)}catch(i){console.error(i),window.$events.error(this.draftDeleteFailText)}}updateChangelogDisplay(){let t=this.changelogInput.value.trim();t.length===0?t=this.setChangelogText:t.length>16&&(t=`${t.slice(0,16)}...`),this.changelogDisplay.innerText=t}async changeEditor(t){t.preventDefault();let e=t.target.closest("a").href,i=window.$components.firstOnElement(this.switchDialogContainer,"confirm-dialog"),[r,o]=await Promise.all([this.saveDraft(),i.show()]);r&&o&&(window.location=e)}getEditorComponent(){return window.$components.first("markdown-editor")||window.$components.first("wysiwyg-editor")}};function zi(n,t){n.style.display=t?null:"none"}var Hi=class extends g{setup(){this.input=this.$refs.input,this.resetButton=this.$refs.resetButton,this.selectButton=this.$refs.selectButton,this.display=this.$refs.display,this.defaultDisplay=this.$refs.defaultDisplay,this.buttonSep=this.$refs.buttonSeperator,this.value=this.input.value,this.setupListeners()}setupListeners(){this.selectButton.addEventListener("click",this.showPopup.bind(this)),this.display.parentElement.addEventListener("click",this.showPopup.bind(this)),this.resetButton.addEventListener("click",()=>{this.setValue("","")})}showPopup(){window.$components.first("entity-selector-popup").show(e=>{this.setValue(e.id,e.name)})}setValue(t,e){this.value=t,this.input.value=t,this.controlView(e)}controlView(t){let e=this.value&&this.value!==0;if(zi(this.resetButton,e),zi(this.buttonSep,e),zi(this.defaultDisplay,!e),zi(this.display,e),e){let i=this.getAssetIdFromVal();this.display.textContent=`#${i}, ${t}`,this.display.href=window.baseUrl(`/link/${i}`)}}getAssetIdFromVal(){return Number(this.value)}};var Ui=class extends g{setup(){this.container=this.$el,this.cellSelector=this.$opts.cellSelector||"td,th",this.rowSelector=this.$opts.rowSelector||"tr";for(let t of this.$manyRefs.toggleAll||[])t.addEventListener("click",this.toggleAllClick.bind(this));for(let t of this.$manyRefs.toggleRow||[])t.addEventListener("click",this.toggleRowClick.bind(this));for(let t of this.$manyRefs.toggleColumn||[])t.addEventListener("click",this.toggleColumnClick.bind(this))}toggleAllClick(t){t.preventDefault(),this.toggleAllInElement(this.container)}toggleRowClick(t){t.preventDefault(),this.toggleAllInElement(t.target.closest(this.rowSelector))}toggleColumnClick(t){t.preventDefault();let e=t.target.closest(this.cellSelector),i=Array.from(e.parentElement.children).indexOf(e),r=this.container.querySelectorAll(this.rowSelector),o=[];for(let s of r){let a=s.children[i];a&&o.push(...a.querySelectorAll("input[type=checkbox]"))}this.toggleAllInputs(o)}toggleAllInElement(t){let e=t.querySelectorAll("input[type=checkbox]");this.toggleAllInputs(e)}toggleAllInputs(t){let e=t.length>0?t[0].checked:!1;for(let i of t)i.checked=!e,i.dispatchEvent(new Event("change"))}};var ji=class extends g{setup(){this.container=this.$el,this.pointer=this.$refs.pointer,this.linkInput=this.$refs.linkInput,this.linkButton=this.$refs.linkButton,this.includeInput=this.$refs.includeInput,this.includeButton=this.$refs.includeButton,this.sectionModeButton=this.$refs.sectionModeButton,this.modeToggles=this.$manyRefs.modeToggle,this.modeSections=this.$manyRefs.modeSection,this.pageId=this.$opts.pageId,this.showing=!1,this.isSelection=!1,this.setupListeners()}setupListeners(){this.includeButton.addEventListener("click",()=>Vr(this.includeInput.value)),this.linkButton.addEventListener("click",()=>Vr(this.linkInput.value)),R([this.includeInput,this.linkInput],e=>{e.target.select(),e.stopPropagation()}),ln(this.pointer,["click","focus"],e=>{e.stopPropagation()}),ln(document.body,["click","focus"],()=>{!this.showing||this.isSelection||this.hidePointer()}),Jo(this.pointer,this.hidePointer.bind(this));let t=document.querySelector(".page-content");ln(t,["mouseup","keyup"],e=>{e.stopPropagation();let i=e.target.closest('[id^="bkmrk"]');i&&window.getSelection().toString().length>0&&this.showPointerAtTarget(i,e.pageX,!1)}),R(this.sectionModeButton,this.enterSectionSelectMode.bind(this)),R(this.modeToggles,e=>{for(let i of this.modeSections){let r=!i.contains(e.target);i.toggleAttribute("hidden",!r)}this.modeToggles.find(i=>i!==e.target).focus()})}hidePointer(){this.pointer.style.display=null,this.showing=!1}showPointerAtTarget(t,e,i){this.updateForTarget(t),this.pointer.style.display="block";let r=t.getBoundingClientRect(),o=this.pointer.getBoundingClientRect(),a=Math.min(Math.max(e,r.left),r.right)-o.width/2,l=r.top-o.height-16;this.pointer.style.left=`${a}px`,this.pointer.style.top=`${l}px`,this.showing=!0,this.isSelection=!0,setTimeout(()=>{this.isSelection=!1},100);let c=()=>{this.hidePointer(),window.removeEventListener("scroll",c,{passive:!0})};t.parentElement.insertBefore(this.pointer,t),i||window.addEventListener("scroll",c,{passive:!0})}updateForTarget(t){let e=window.baseUrl(`/link/${this.pageId}#${t.id}`),i=`{{@${this.pageId}#${t.id}}}`;this.linkInput.value=e,this.includeInput.value=i;let r=this.pointer.querySelector("#pointer-edit");if(r&&t){let{editHref:o}=r.dataset,s=t.id,a=t.textContent&&t.textContent.substring(0,50);r.href=`${o}?content-id=${s}&content-text=${encodeURIComponent(a)}`}}enterSectionSelectMode(){let t=Array.from(document.querySelectorAll('.page-content [id^="bkmrk"]'));for(let e of t)e.setAttribute("tabindex","0");t[0].focus(),se(t,e=>{this.showPointerAtTarget(e.target,0,!0),this.pointer.focus()})}};var Vi=class extends g{setup(){this.container=this.$el,this.hideButtons=this.$manyRefs.hide||[],this.onkeyup=null,this.onHide=null,this.setupListeners()}setupListeners(){let t=null;this.container.addEventListener("mousedown",e=>{t=e.target}),this.container.addEventListener("click",e=>{e.target===this.container&&t===this.container&&this.hide()}),R(this.hideButtons,()=>this.hide())}hide(t=null){Ts(this.container,120,t),this.onkeyup&&(window.removeEventListener("keyup",this.onkeyup),this.onkeyup=null),this.onHide&&this.onHide()}show(t=null,e=null){Ls(this.container,120,t),this.onkeyup=i=>{i.key==="Escape"&&this.hide()},window.addEventListener("keyup",this.onkeyup),this.onHide=e}};var Wi=class extends g{setup(){this.container=this.$el,this.mode=this.$opts.mode,this.lightContainer=this.$refs.lightContainer,this.darkContainer=this.$refs.darkContainer,this.container.addEventListener("tabs-change",e=>{let r=e.detail.showing==="color-scheme-panel-light"?"light":"dark";this.handleModeChange(r)});let t=e=>{this.updateAppColorsFromInputs(),e.target.name.startsWith("setting-app-color")&&this.updateLightForInput(e.target)};this.container.addEventListener("change",t),this.container.addEventListener("input",t)}handleModeChange(t){this.mode=t;let e=t==="dark";document.documentElement.classList.toggle("dark-mode",e),this.updateAppColorsFromInputs()}updateAppColorsFromInputs(){let e=(this.mode==="dark"?this.darkContainer:this.lightContainer).querySelectorAll('input[type="color"]');for(let i of e){let r=i.name.split("-"),o=r.indexOf("color"),s=r.slice(1,o).join("-");s==="app"&&(s="primary");let a=`--color-${s}`;document.body.style.setProperty(a,i.value)}}updateLightForInput(t){let e=t.name.replace("-color","-color-light"),i=t.value,r=this.hexToRgb(i),o=`rgba(${[r.r,r.g,r.b,"0.15"].join(",")})`,s=this.container.querySelector(`input[name="${e}"][type="hidden"]`);s.value=o}hexToRgb(t){let e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return{r:e?parseInt(e[1],16):0,g:e?parseInt(e[2],16):0,b:e?parseInt(e[3],16):0}}};var Gi=class extends g{setup(){this.colorInput=this.$refs.input,this.resetButton=this.$refs.resetButton,this.defaultButton=this.$refs.defaultButton,this.currentColor=this.$opts.current,this.defaultColor=this.$opts.default,this.resetButton.addEventListener("click",()=>this.setValue(this.currentColor)),this.defaultButton.addEventListener("click",()=>this.setValue(this.defaultColor))}setValue(t){this.colorInput.value=t,this.colorInput.dispatchEvent(new Event("change",{bubbles:!0}))}};var Ki=class extends g{setup(){this.typeControl=this.$refs.typeControl,this.pagePickerContainer=this.$refs.pagePickerContainer,this.typeControl.addEventListener("change",this.controlPagePickerVisibility.bind(this)),this.controlPagePickerVisibility()}controlPagePickerVisibility(){let t=this.typeControl.value==="page";this.pagePickerContainer.style.display=t?"block":"none"}};var Nf={move_up(n){let t=n.parentNode,e=Array.from(t.children).indexOf(n),i=Math.max(e-1,0);t.insertBefore(n,t.children[i]||null)},move_down(n){let t=n.parentNode,e=Array.from(t.children).indexOf(n),i=Math.min(e+2,t.children.length);t.insertBefore(n,t.children[i]||null)},remove(n,t,e){e.appendChild(n)},add(n,t){t.appendChild(n)}},Zi=class extends g{setup(){this.elem=this.$el,this.input=this.$refs.input,this.shelfBookList=this.$refs.shelfBookList,this.allBookList=this.$refs.allBookList,this.bookSearchInput=this.$refs.bookSearch,this.sortButtonContainer=this.$refs.sortButtonContainer,this.lastSort=null,this.initSortable(),this.setupListeners()}initSortable(){let t=this.elem.querySelectorAll(".scroll-box");for(let e of t)new Yt(e,{group:"shelf-books",ghostClass:"primary-background-light",handle:".handle",animation:150,onSort:this.onChange.bind(this)})}setupListeners(){this.elem.addEventListener("click",t=>{let e=t.target.closest(".scroll-box-item button[data-action]");e&&this.sortItemActionClick(e)}),this.bookSearchInput.addEventListener("input",()=>{this.filterBooksByName(this.bookSearchInput.value)}),this.sortButtonContainer.addEventListener("click",t=>{let e=t.target.closest("button[data-sort]");e&&this.sortShelfBooks(e.dataset.sort)})}filterBooksByName(t){this.allBookList.style.height||(this.allBookList.style.height=`${this.allBookList.getBoundingClientRect().height}px`);let e=this.allBookList.children,i=t.trim().toLowerCase();for(let r of e){let o=!t||r.textContent.toLowerCase().includes(i);r.style.display=o?null:"none"}}sortItemActionClick(t){let e=t.closest(".scroll-box-item"),{action:i}=t.dataset,r=Nf[i];r(e,this.shelfBookList,this.allBookList),this.onChange()}onChange(){let t=Array.from(this.shelfBookList.querySelectorAll("[data-id]"));this.input.value=t.map(e=>e.getAttribute("data-id")).join(",")}sortShelfBooks(t){let e=Array.from(this.shelfBookList.children),i=t===this.lastSort;e.sort((r,o)=>{let s=r.dataset[t].toLowerCase(),a=o.dataset[t].toLowerCase();return i?a.localeCompare(s):s.localeCompare(a)});for(let r of e)this.shelfBookList.append(r);this.lastSort=this.lastSort===t?null:t,this.onChange()}};function zf(n){let t={};for(let[e,i]of Object.entries(n))t[i]=e;return t}var Xi=class extends g{setup(){this.container=this.$el,this.mapById=JSON.parse(this.$opts.keyMap),this.mapByShortcut=zf(this.mapById),this.hintsShowing=!1,this.hideHints=this.hideHints.bind(this),this.hintAbortController=null,this.setupListeners()}setupListeners(){window.addEventListener("keydown",t=>{if(!t.target.closest("input, select, textarea, .cm-editor")){if(t.key==="?"){this.hintsShowing?this.hideHints():this.showHints();return}this.handleShortcutPress(t)}})}handleShortcutPress(t){let i=[t.ctrlKey?"Ctrl":"",t.metaKey?"Cmd":"",t.key].filter(o=>!!o).join(" + "),r=this.mapByShortcut[i];r&&this.runShortcut(r)&&t.preventDefault()}runShortcut(t){let e=this.container.querySelector(`[data-shortcut="${t}"]`);return e?e.matches("input, textarea, select")?(e.focus(),!0):e.matches("a, button")?(e.click(),!0):e.matches("div[tabindex]")?(e.click(),e.focus(),!0):(console.error("Shortcut attempted to be ran for element type that does not have handling setup",e),!1):!1}showHints(){let t=document.createElement("div");t.classList.add("shortcut-container"),this.container.append(t);let e=this.container.querySelectorAll("[data-shortcut]"),i=new Set;for(let o of e){let s=o.getAttribute("data-shortcut");if(i.has(s))continue;let a=this.mapById[s];this.showHintLabel(o,a,t),i.add(s)}this.hintAbortController=new AbortController;let r=this.hintAbortController.signal;window.addEventListener("scroll",this.hideHints,{signal:r}),window.addEventListener("focus",this.hideHints,{signal:r}),window.addEventListener("blur",this.hideHints,{signal:r}),window.addEventListener("click",this.hideHints,{signal:r}),this.hintsShowing=!0}showHintLabel(t,e,i){let r=t.getBoundingClientRect(),o=document.createElement("div");o.classList.add("shortcut-hint"),o.textContent=e;let s=document.createElement("div");s.classList.add("shortcut-linkage"),s.style.left=`${r.x}px`,s.style.top=`${r.y}px`,s.style.width=`${r.width}px`,s.style.height=`${r.height}px`,i.append(o,s);let a=o.getBoundingClientRect();o.style.insetInlineStart=`${r.x+r.width-(a.width+6)}px`,o.style.insetBlockStart=`${r.y+(r.height-a.height)/2}px`}hideHints(){this.container.querySelector(".shortcut-container").remove(),this.hintAbortController?.abort(),this.hintsShowing=!1}};var Hf=["Control","Alt","Shift","Meta","Super"," ","+","Tab","Escape"],Yi=class extends g{setup(){this.input=this.$el,this.setupListeners()}setupListeners(){this.listenerRecordKey=this.listenerRecordKey.bind(this),this.input.addEventListener("focus",()=>{this.startListeningForInput()}),this.input.addEventListener("blur",()=>{this.stopListeningForInput()})}startListeningForInput(){this.input.addEventListener("keydown",this.listenerRecordKey)}listenerRecordKey(t){if(Hf.includes(t.key))return;let e=[t.ctrlKey?"Ctrl":"",t.metaKey?"Cmd":"",t.key];this.input.value=e.filter(i=>!!i).join(" + ")}stopListeningForInput(){this.input.removeEventListener("keydown",this.listenerRecordKey)}};var Ji=class extends g{setup(){this.container=this.$el,this.handleSelector=this.$opts.handleSelector;let t=new Yt(this.container,{handle:this.handleSelector,animation:150,onSort:()=>{this.$emit("sort",{ids:t.toArray()})},setData(e,i){let r=i.getAttribute("data-drag-content");if(r){let o=JSON.parse(r);for(let[s,a]of Object.entries(o))e.setData(s,a)}},revertOnSpill:!0,dropBubble:!0,dragoverBubble:!1})}};var Qi=class extends g{setup(){this.filter=this.$opts.filter,this.$el.addEventListener("change",t=>{if(this.filter&&!t.target.matches(this.filter))return;let e=this.$el.closest("form");e&&e.submit()})}};var tr=class extends g{setup(){this.container=this.$el,this.tabList=this.container.querySelector('[role="tablist"]'),this.tabs=Array.from(this.tabList.querySelectorAll('[role="tab"]')),this.panels=Array.from(this.container.querySelectorAll(':scope > [role="tabpanel"], :scope > * > [role="tabpanel"]')),this.activeUnder=this.$opts.activeUnder?Number(this.$opts.activeUnder):1e4,this.active=null,this.container.addEventListener("click",t=>{let e=t.target.closest('[role="tab"]');e&&this.tabs.includes(e)&&this.show(e.getAttribute("aria-controls"))}),window.addEventListener("resize",this.updateActiveState.bind(this),{passive:!0}),this.updateActiveState()}show(t){for(let e of this.panels)e.toggleAttribute("hidden",e.id!==t);for(let e of this.tabs){let r=e.getAttribute("aria-controls")===t;e.setAttribute("aria-selected",r?"true":"false")}this.$emit("change",{showing:t})}updateActiveState(){let t=window.innerWidth!e.hasAttribute("hidden"))||this.panels[0];this.show(t.id),this.tabList.toggleAttribute("hidden",!1)}deactivate(){for(let t of this.panels)t.removeAttribute("hidden");for(let t of this.tabs)t.setAttribute("aria-selected","false");this.tabList.toggleAttribute("hidden",!0)}};var er=class extends g{setup(){this.addRemoveComponentEl=this.$refs.addRemove,this.container=this.$el,this.rowSelector=this.$opts.rowSelector,this.setupListeners()}setupListeners(){this.container.addEventListener("input",t=>{let e=window.$components.firstOnElement(this.addRemoveComponentEl,"add-remove-rows");!this.hasEmptyRows()&&t.target.value&&e.add()})}hasEmptyRows(){return[...this.container.querySelectorAll(this.rowSelector)].find(i=>[...i.querySelectorAll("input")].filter(r=>r.value).length===0)!==void 0}};var nr=class extends g{setup(){this.container=this.$el,this.list=this.$refs.list,this.searchInput=this.$refs.searchInput,this.searchButton=this.$refs.searchButton,this.searchCancel=this.$refs.searchCancel,this.setupListeners()}setupListeners(){K(this.container,"[template-action]","click",this.handleTemplateActionClick.bind(this)),K(this.container,".pagination a","click",this.handlePaginationClick.bind(this)),K(this.container,".template-item-content","click",this.handleTemplateItemClick.bind(this)),K(this.container,".template-item","dragstart",this.handleTemplateItemDragStart.bind(this)),this.searchInput.addEventListener("keypress",t=>{t.key==="Enter"&&(t.preventDefault(),this.performSearch())}),this.searchButton.addEventListener("click",()=>this.performSearch()),this.searchCancel.addEventListener("click",()=>{this.searchInput.value="",this.performSearch()})}handleTemplateItemClick(t,e){let i=e.closest("[template-id]").getAttribute("template-id");this.insertTemplate(i,"replace")}handleTemplateItemDragStart(t,e){let i=e.closest("[template-id]").getAttribute("template-id");t.dataTransfer.setData("bookstack/template",i),t.dataTransfer.setData("text/plain",i)}handleTemplateActionClick(t,e){t.stopPropagation();let i=e.getAttribute("template-action"),r=e.closest("[template-id]").getAttribute("template-id");this.insertTemplate(r,i)}async insertTemplate(t,e="replace"){let i=await window.$http.get(`/templates/${t}`),r=`editor::${e}`;window.$events.emit(r,i.data)}async handlePaginationClick(t,e){t.preventDefault();let i=e.getAttribute("href"),r=await window.$http.get(i);this.list.innerHTML=r.data}async performSearch(){let t=this.searchInput.value,e=await window.$http.get("/templates",{search:t});this.searchCancel.style.display=t?"block":"none",this.list.innerHTML=e.data}};var ir=class extends g{setup(){this.input=this.$el.querySelector("input[type=hidden]"),this.checkbox=this.$el.querySelector("input[type=checkbox]"),this.checkbox.addEventListener("change",this.stateChange.bind(this))}stateChange(){this.input.value=this.checkbox.checked?"true":"false";let t=new Event("change");this.input.dispatchEvent(t)}};var rr=class extends g{setup(){this.container=this.$refs.container,this.tabs=this.$manyRefs.tab,this.lastLayoutType="none",this.onDestroy=null,this.scrollCache={content:0,info:0},this.lastTabShown="content",this.mobileTabClick=this.mobileTabClick.bind(this),this.updateLayout(),window.addEventListener("resize",()=>{this.updateLayout()},{passive:!0})}updateLayout(){let t="tablet";window.innerWidth<=1e3&&(t="mobile"),window.innerWidth>=1400&&(t="desktop"),t!==this.lastLayoutType&&(this.onDestroy&&(this.onDestroy(),this.onDestroy=null),t==="desktop"?this.setupDesktop():t==="mobile"&&this.setupMobile(),this.lastLayoutType=t)}setupMobile(){for(let t of this.tabs)t.addEventListener("click",this.mobileTabClick);this.onDestroy=()=>{for(let t of this.tabs)t.removeEventListener("click",this.mobileTabClick)}}setupDesktop(){}mobileTabClick(t){let{tab:e}=t.target.dataset;this.showTab(e)}showContent(){this.showTab("content",!1)}showTab(t,e=!0){this.scrollCache[this.lastTabShown]=document.documentElement.scrollTop;for(let r of this.tabs){let o=r.dataset.tab===t;r.setAttribute("aria-selected",o?"true":"false")}let i=t==="info";if(this.container.classList.toggle("show-info",i),e){let o=document.querySelector("header").getBoundingClientRect().bottom;document.documentElement.scrollTop=this.scrollCache[t]||o,setTimeout(()=>{document.documentElement.scrollTop=this.scrollCache[t]||o},50)}this.lastTabShown=t}};var or=class extends g{setup(){this.container=this.$el,this.input=this.$refs.input,this.userInfoContainer=this.$refs.userInfo,K(this.container,"a.dropdown-search-item","click",this.selectUser.bind(this))}selectUser(t,e){t.preventDefault(),this.input.value=e.getAttribute("data-id"),this.userInfoContainer.innerHTML=e.innerHTML,this.input.dispatchEvent(new Event("change",{bubbles:!0})),this.hide()}hide(){window.$components.firstOnElement(this.container,"dropdown").hide()}};var sr=class extends g{setup(){this.checkboxes=this.$el.querySelectorAll('input[type="checkbox"]'),this.allCheckbox=this.$el.querySelector('input[type="checkbox"][value="all"]'),this.$el.addEventListener("change",t=>{t.target.checked&&t.target===this.allCheckbox?this.deselectIndividualEvents():t.target.checked&&(this.allCheckbox.checked=!1)})}deselectIndividualEvents(){for(let t of this.checkboxes)t!==this.allCheckbox&&(t.checked=!1)}};function ru(n){for(let t=1;t<5;t++)n.shortcuts.add(`meta+${t}`,"",["FormatBlock",!1,`h${t+1}`]);n.shortcuts.add("meta+5","",["FormatBlock",!1,"p"]),n.shortcuts.add("meta+d","",["FormatBlock",!1,"p"]),n.shortcuts.add("meta+6","",["FormatBlock",!1,"blockquote"]),n.shortcuts.add("meta+q","",["FormatBlock",!1,"blockquote"]),n.shortcuts.add("meta+7","",["codeeditor",!1,"pre"]),n.shortcuts.add("meta+e","",["codeeditor",!1,"pre"]),n.shortcuts.add("meta+8","",["FormatBlock",!1,"code"]),n.shortcuts.add("meta+shift+E","",["FormatBlock",!1,"code"]),n.shortcuts.add("meta+o","","InsertOrderedList"),n.shortcuts.add("meta+p","","InsertUnorderedList"),n.shortcuts.add("meta+S","",()=>{window.$events.emit("editor-save-draft")}),n.shortcuts.add("meta+13","",()=>{window.$events.emit("editor-save-page")}),n.shortcuts.add("meta+9","",()=>{let t=n.selection.getNode(),e=t?t.closest(".callout"):null,i=["info","success","warning","danger"],o=(i.findIndex(a=>e&&e.classList.contains(a))+1)%i.length,s=i[o];n.formatter.apply(`callout${s}`)}),n.shortcuts.add("meta+shift+K","",()=>{let t=window.$components.first("entity-selector-popup"),e=n.selection.getContent({format:"text"}).trim();t.show(i=>{n.selection.isCollapsed()?n.insertContent(n.dom.createHTML("a",{href:i.link},n.dom.encode(i.name))):n.formatter.apply("link",{href:i.link}),n.selection.collapse(!1),n.focus()},e)})}function ou(n){window.$events.listen("editor::replace",({html:t})=>{n.setContent(t)}),window.$events.listen("editor::append",({html:t})=>{let e=n.getContent()+t;n.setContent(e)}),window.$events.listen("editor::prepend",({html:t})=>{let e=t+n.getContent();n.setContent(e)}),window.$events.listen("editor::insert",({html:t})=>{n.insertContent(t)}),window.$events.listen("editor::focus",()=>{n.initialized&&n.focus()})}function Uf(n,t){let e=n.dom.get(encodeURIComponent(t).replace(/!/g,"%21"));e&&(e.scrollIntoView(),n.selection.select(e,!0),n.selection.collapse(!1),n.focus())}function su(n){let e=new URL(window.location).searchParams.get("content-id");e&&Uf(n,e)}var ie,ar;function jf(n){return n&&!!(n.textContent||n.innerText)}async function Vf(n,t){if(n===null||n.type.indexOf("image")!==0)throw new Error("Not an image file");let e=n.name||`image-${Date.now()}.png`,i=new FormData;return i.append("file",n,e),i.append("uploaded_to",t),(await window.$http.post(window.baseUrl("/images/gallery"),i)).data}function au(n,t,e){let i=new Ft(e.clipboardData||e.dataTransfer);if(!i.hasItems()||i.containsTabularData())return;let r=i.getImages();for(let o of r){let s=`image-${Math.random().toString(16).slice(2)}`,a=window.baseUrl("/loading.gif");e.preventDefault(),setTimeout(()=>{n.insertContent(`

    `),Vf(o,t.pageId).then(l=>{let c=l.name.replace(/"/g,""),u=`${c}`,h=n.dom.create("a",{target:"_blank",href:l.url},u);n.dom.replace(h,s)}).catch(l=>{n.dom.remove(s),window.$events.error(l?.data?.message||t.translations.imageUploadErrorText),console.error(l)})},10)}}function Wf(n){let t=n.selection.getNode();t.nodeName==="IMG"&&(ie=n.dom.getParent(t,".mceTemp"),!ie&&t.parentNode.nodeName==="A"&&!jf(t.parentNode)&&(ie=t.parentNode)),t.hasAttribute("contenteditable")&&t.getAttribute("contenteditable")==="false"&&(ar=t)}function Gf(n,t,e){let{dom:i}=n,r=window.tinymce.dom.RangeUtils.getCaretRangeFromPoint(e.clientX,e.clientY,n.getDoc()),o=e.dataTransfer&&e.dataTransfer.getData("bookstack/template");o&&(e.preventDefault(),window.$http.get(`/templates/${o}`).then(s=>{n.selection.setRng(r),n.undoManager.transact(()=>{n.execCommand("mceInsertContent",!1,s.data.html)})})),i.getParent(r.startContainer,".mceTemp")?e.preventDefault():ie&&(e.preventDefault(),n.undoManager.transact(()=>{n.selection.setRng(r),n.selection.setNode(ie),i.remove(ie)})),!e.isDefaultPrevented()&&ar&&(e.preventDefault(),n.undoManager.transact(()=>{let s=n.selection.getNode(),a=n.selection.getRng(),l=s.closest("body > *");a.startOffset>a.startContainer.length/2?l.after(ar):l.before(ar)})),e.isDefaultPrevented()||au(n,t,e),ie=null}function lu(n,t){n.on("dragstart",()=>Wf(n)),n.on("drop",e=>Gf(n,t,e)),n.on("paste",e=>au(n,t,e))}function cu(n){return["undo redo","styles","bold italic underline forecolor backcolor formatoverflow","alignleft aligncenter alignright alignjustify","bullist numlist listoverflow",n.textDirection==="rtl"?"ltr rtl":"","link table imagemanager-insert insertoverflow","code about fullscreen"].filter(i=>!!i).join(" | ")}function Kf(n){n.ui.registry.addGroupToolbarButton("formatoverflow",{icon:"more-drawer",tooltip:"More",items:"strikethrough superscript subscript inlinecode removeformat"}),n.ui.registry.addGroupToolbarButton("listoverflow",{icon:"more-drawer",tooltip:"More",items:"tasklist outdent indent"}),n.ui.registry.addGroupToolbarButton("insertoverflow",{icon:"more-drawer",tooltip:"More",items:"customhr codeeditor drawio media details"})}function Zf(n){n.ui.registry.addContextToolbar("linkcontexttoolbar",{predicate(t){return t.closest("a")!==null},position:"node",scope:"node",items:"link unlink openlink"})}function Xf(n){n.ui.registry.addContextToolbar("imagecontexttoolbar",{predicate(t){return t.closest("img")!==null},position:"node",scope:"node",items:"image"})}function uu(n){Kf(n),Zf(n),Xf(n)}var Yf={"table-delete-column":'',"table-delete-row":'',"table-insert-column-after":'',"table-insert-column-before":'',"table-insert-row-above":'',"table-insert-row-after":'',table:'',"table-delete-table":''};function hu(n){for(let[t,e]of Object.entries(Yf))n.ui.registry.addIcon(t,e)}function Jf(n){n.serializer.addNodeFilter("br",t=>{for(let e of t)if(e.parent&&e.parent.name==="code"){let i=window.tinymce.html.Node.create("#text");i.value=` +`,e.replace(i)}})}function Qf(n){n.parser.addNodeFilter("div",t=>{for(let e of t){let i=e.attr("id")||"",r=e.attr("class")||"";(i==="pointer"||r.includes("pointer"))&&e.remove()}})}function du(n){Jf(n),Qf(n)}function pu(n){return n.tagName.toLowerCase()==="code-block"}function mu(n,t,e,i){let r=window.$components.first("code-editor"),o=n.selection.getBookmark();r.open(t,e,(s,a)=>{i(s,a),n.focus(),n.selection.moveToBookmark(o)},()=>{n.focus(),n.selection.moveToBookmark(o)})}function fu(n,t){mu(n,t.getContent(),t.getLanguage(),(e,i)=>{t.setContent(e,i)})}function tm(n){let t=n.getDoc(),e=t.defaultView;class i extends e.HTMLElement{constructor(){super();at(this,"editor",null);this.attachShadow({mode:"open"});let s=document.head.querySelectorAll('link[rel="stylesheet"]:not([media="print"]),style'),a=Array.from(s).map(c=>c.cloneNode(!0)),l=document.createElement("div");l.style.pointerEvents="none",l.contentEditable="false",l.classList.add("CodeMirrorContainer"),l.classList.toggle("dark-mode",document.documentElement.classList.contains("dark-mode")),this.shadowRoot.append(...a,l)}getLanguage(){let s=c=>(c.split(" ").filter(h=>h.startsWith("language-"))[0]||"").replace("language-",""),a=this.querySelector("code"),l=this.querySelector("pre");return s(l.className)||a&&s(a.className)||""}setContent(s,a){this.editor&&(this.editor.setContent(s),this.editor.setMode(a,s));let l=this.querySelector("pre");l||(l=t.createElement("pre"),this.append(l)),l.innerHTML="";let c=t.createElement("code");l.append(c),c.innerText=s,c.className=`language-${a}`}getContent(){let s=this.querySelector("code")||this.querySelector("pre"),a=document.createElement("pre");a.innerHTML=s.innerHTML.replace(/\ufeff/g,"");let l=a.querySelectorAll("br");for(let c of l)c.replaceWith(` `);return a.textContent}connectedCallback(){let s=Date.now();if(this.editor)return;this.cleanChildContent();let a=this.getContent(),c=a.split(` -`).length*19.2+18+24;this.style.height=`${c}px`;let u=this.shadowRoot.querySelector(".CodeMirrorContainer"),h=d=>{this.editor=d.wysiwygView(u,this.shadowRoot,a,this.getLanguage()),setTimeout(()=>{this.style.height=null},12)};window.importVersioned("code").then(d=>{let p=Date.now()-s<20?20:0;setTimeout(()=>h(d),p)})}cleanChildContent(){let s=this.querySelector("pre");if(s)for(let a of s.childNodes)a.nodeName==="#text"&&a.textContent==="\uFEFF"&&a.remove()}}t.customElements.define("code-block",i)}function tm(n){n.ui.registry.addIcon("codeblock",''),n.ui.registry.addButton("codeeditor",{tooltip:"Insert code block",icon:"codeblock",onAction(){n.execCommand("codeeditor")}}),n.ui.registry.addButton("editcodeeditor",{tooltip:"Edit code block",icon:"edit-block",onAction(){n.execCommand("codeeditor")}}),n.addCommand("codeeditor",()=>{let e=n.selection.getNode(),t=e.ownerDocument;if(fu(e))mu(n,e);else{let i=n.selection.getContent({format:"text"});gu(n,i,"",(r,o)=>{let s=t.createElement("pre"),a=t.createElement("code");a.classList.add(`language-${o}`),a.innerText=r,s.append(a),n.insertContent(s.outerHTML)})}}),n.on("dblclick",()=>{let e=n.selection.getNode();fu(e)&&mu(n,e)}),n.on("PreInit",()=>{n.parser.addNodeFilter("pre",e=>{for(let t of e){let i=window.tinymce.html.Node.create("code-block",{contenteditable:"false"}),r=t.getAll("span");for(let o of r)o.unwrap();t.attr("style",null),t.wrap(i)}}),n.parser.addNodeFilter("code-block",e=>{for(let t of e)t.attr("contenteditable","false")}),n.serializer.addNodeFilter("code-block",e=>{for(let t of e)t.unwrap()})}),n.ui.registry.addContextToolbar("codeeditor",{predicate(e){return e.nodeName.toLowerCase()==="code-block"},items:"editcodeeditor",position:"node",scope:"node"}),n.on("PreInit",()=>{em(n)})}function bu(){return tm}var de=null,ot=null,rt={};function zo(n){return n.hasAttribute("drawio-diagram")}function nm(n,e=null){de=n,ot=e,window.$components.first("image-manager").show(i=>{if(e){let r=e.querySelector("img");de.undoManager.transact(()=>{de.dom.setAttrib(r,"src",i.url),de.dom.setAttrib(e,"drawio-diagram",i.id)})}else{let r=`
    `;de.insertContent(r)}},"drawio")}async function im(n){let e=window.baseUrl("/loading.gif"),t=o=>{o.status===413?window.$events.emit("error",rt.translations.serverUploadLimitText):window.$events.emit("error",rt.translations.imageUploadErrorText),console.error(o)};if(ot){tt();let o=ot.querySelector("img");try{let s=await Po(n,rt.pageId);de.undoManager.transact(()=>{de.dom.setAttrib(o,"src",s.url),de.dom.setAttrib(ot,"drawio-diagram",s.id)})}catch(s){throw t(s),new Error(`Failed to save image with error: ${s}`)}return}await ns(5);let i=`drawing-${Math.random().toString(16).slice(2)}`,r=`drawing-wrap-${Math.random().toString(16).slice(2)}`;de.insertContent(`
    `),tt();try{let o=await Po(n,rt.pageId);de.undoManager.transact(()=>{de.dom.setAttrib(i,"src",o.url),de.dom.setAttrib(r,"drawio-diagram",o.id)})}catch(o){throw de.dom.remove(r),t(o),new Error(`Failed to save image with error: ${o}`)}}function rm(){if(!ot)return Promise.resolve("");let n=ot.getAttribute("drawio-diagram");return _i(n)}function vu(n,e=null){de=n,ot=e,en(rt.drawioUrl,rm,im)}function om(n){n.addCommand("drawio",()=>{let e=n.selection.getNode();vu(n,zo(e)?e:null)}),n.ui.registry.addIcon("diagram",``),n.ui.registry.addSplitButton("drawio",{tooltip:"Insert/edit drawing",icon:"diagram",onAction(){n.execCommand("drawio"),window.document.body.dispatchEvent(new Event("mousedown",{bubbles:!0}))},fetch(e){e([{type:"choiceitem",text:"Drawing manager",value:"drawing-manager"}])},onItemAction(e,t){if(t==="drawing-manager"){let i=n.selection.getNode();nm(n,zo(i)?i:null)}}}),n.on("dblclick",()=>{let e=n.selection.getNode();zo(e)&&vu(n,e)}),n.on("SetContent",()=>{let e=n.dom.select("body > div[drawio-diagram]");e.length&&n.undoManager.transact(()=>{for(let t of e)t.setAttribute("contenteditable","false")})})}function wu(n){return rt=n,om}function sm(n){n.addCommand("InsertHorizontalRule",()=>{let e=document.createElement("hr"),t=n.selection.getNode(),{parentNode:i}=t;i.insertBefore(e,t)}),n.ui.registry.addButton("customhr",{icon:"horizontal-rule",tooltip:"Insert horizontal line",onAction(){n.execCommand("InsertHorizontalRule")}})}function yu(){return sm}function am(n){n.ui.registry.addButton("imagemanager-insert",{title:"Insert image",icon:"image",tooltip:"Insert image",onAction(){window.$components.first("image-manager").show(t=>{let i=t.thumbs.display||t.url,r=``;r+=`${t.name}`,r+="",n.execCommand("mceInsertContent",!1,r)},"gallery")}})}function xu(){return am}function lm(n){let e={title:"About the WYSIWYG Editor",url:window.baseUrl("/help/wysiwyg")};n.ui.registry.addButton("about",{icon:"help",tooltip:"About the editor",onAction(){window.tinymce.activeEditor.windowManager.openUrl(e)}})}function ku(){return lm}var Cu=["p","h1","h2","h3","h4","h5","h6","div","blockquote","pre","code-block","details","ul","ol","table","hr"];function lr(n){return n.selection.getNode().closest("details")}function cm(n,e){let t=lr(n);t&&n.undoManager.transact(()=>{let i=t.querySelector("summary");i||(i=document.createElement("summary"),t.prepend(i)),i.textContent=e})}function um(n){return{title:"Edit collapsible block",body:{type:"panel",items:[{type:"input",name:"summary",label:"Toggle label"}]},buttons:[{type:"cancel",text:"Cancel"},{type:"submit",text:"Save",primary:!0}],onSubmit(e){let{summary:t}=e.getData();cm(n,t),e.close()}}}function hm(n){let e=n.querySelector("summary");return e?e.textContent:""}function Eu(n){let e=lr(n);n.windowManager.open(um(n)).setData({summary:hm(e)})}function dm(n){let e=n.selection.getNode().closest("details"),t=n.selection.getBookmark();if(e){let i=e.querySelectorAll("details > *:not(summary, doc-root), doc-root > *");n.undoManager.transact(()=>{for(let r of i)e.parentNode.insertBefore(r,e);e.remove()})}n.focus(),n.selection.moveToBookmark(t)}function Ho(n){n.attr("contenteditable",null);let e=!1;for(let t of n.children())t.name==="doc-root"&&(t.unwrap(),e=!0);e&&Ho(n)}function pm(n){Ho(n),n.attr("contenteditable","false");let e=window.tinymce.html.Node.create("doc-root",{contenteditable:"true"}),t=null;for(let i of n.children()){if(i.name==="summary")continue;Cu.includes(i.name)?(e.append(i),t=null):(t||(t=window.tinymce.html.Node.create("p"),e.append(t)),t.append(i))}n.append(e)}function fm(n){n.parser.addNodeFilter("details",e=>{for(let t of e)pm(t)}),n.serializer.addNodeFilter("details",e=>{for(let t of e)Ho(t),t.attr("open",null)}),n.serializer.addNodeFilter("doc-root",e=>{for(let t of e)t.unwrap()})}function mm(n){n.ui.registry.addIcon("details",''),n.ui.registry.addIcon("togglefold",''),n.ui.registry.addIcon("togglelabel",''),n.ui.registry.addButton("details",{icon:"details",tooltip:"Insert collapsible block",onAction(){n.execCommand("InsertDetailsBlock")}}),n.ui.registry.addButton("removedetails",{icon:"table-delete-table",tooltip:"Unwrap",onAction(){dm(n)}}),n.ui.registry.addButton("editdetials",{icon:"togglelabel",tooltip:"Edit label",onAction(){Eu(n)}}),n.on("dblclick",e=>{!lr(n)||e.target.closest("doc-root")||Eu(n)}),n.ui.registry.addButton("toggledetails",{icon:"togglefold",tooltip:"Toggle open/closed",onAction(){lr(n).toggleAttribute("open"),n.focus()}}),n.addCommand("InsertDetailsBlock",()=>{let e=n.selection.getContent({format:"html"}),t=document.createElement("details"),i=document.createElement("summary"),r=`details-${Date.now()}`;t.setAttribute("data-id",r),t.appendChild(i),e||(e="


    "),t.innerHTML+=e,n.insertContent(t.outerHTML),n.focus();let o=n.dom.select(`[data-id="${r}"]`)[0]||null;if(o){let s=o.querySelector("doc-root > *");s&&s.focus(),o.removeAttribute("data-id")}}),n.ui.registry.addContextToolbar("details",{predicate(e){return e.nodeName.toLowerCase()==="details"},items:"editdetials toggledetails removedetails",position:"node",scope:"node"}),n.on("PreInit",()=>{fm(n)})}function _u(){return mm}function gm(n){let e=n.closest("li");return e&&e.parentNode.nodeName==="UL"&&e.classList.contains("task-list-item")}function bm(n,e,t){let i=e.getBoundingClientRect();n.clientX<=i.right&&n.clientX>=i.left&&n.clientY>=i.top&&n.clientY<=i.bottom||t.undoManager.transact(()=>{e.hasAttribute("checked")?e.removeAttribute("checked"):e.setAttribute("checked","checked")})}function vm(n){n.attr("class","task-list-item");for(let e of n.children())e.name==="input"&&(e.attr("checked")==="checked"&&n.attr("checked","checked"),e.remove())}function wm(n){let e=n.attr("checked")==="checked";n.attr("checked",null);let t={type:"checkbox",disabled:"disabled"};e&&(t.checked="checked");let i=window.tinymce.html.Node.create("input",t);i.shortEnded=!0,n.firstChild?n.insert(i,n.firstChild,!0):n.append(i)}function ym(n){n.ui.registry.addIcon("tasklist",''),n.ui.registry.addToggleButton("tasklist",{tooltip:"Task list",icon:"tasklist",active:!1,onAction(i){i.isActive()?n.execCommand("RemoveList"):n.execCommand("InsertUnorderedList",null,{"list-item-attributes":{class:"task-list-item"},"list-style-type":"tasklist"})},onSetup(i){n.on("NodeChange",r=>{let o=r.parents.find(a=>a.nodeName==="LI"),s=o&&o.classList.contains("task-list-item");i.setActive(!!s)})}});let e=n.ui.registry.getAll().buttons.bullist;e.onSetup=function(r){n.on("NodeChange",o=>{let s=o.parents.find(c=>c.nodeName==="LI"),a=s&&s.classList.contains("task-list-item"),l=s&&s.parentNode.nodeName==="UL";r.setActive(!!(l&&!a))})},e.onAction=function(){gm(n.selection.getNode())&&n.execCommand("InsertOrderedList",null,{"list-item-attributes":{class:null}}),n.execCommand("InsertUnorderedList",null,{"list-item-attributes":{class:null}})};let t=n.ui.registry.getAll().buttons.numlist;t.onAction=function(){n.execCommand("InsertOrderedList",null,{"list-item-attributes":{class:null}})},n.on("PreInit",()=>{n.parser.addNodeFilter("li",i=>{for(let r of i)r.attributes.map.class==="task-list-item"&&vm(r)}),n.serializer.addNodeFilter("li",i=>{for(let r of i)r.attributes.map.class==="task-list-item"&&wm(r)})}),n.on("click",i=>{let r=i.target;r.nodeName==="LI"&&r.classList.contains("task-list-item")&&(bm(i,r,n),i.preventDefault())})}function Su(){return ym}var xm=[{title:"Large Header",format:"h2",preview:"color: blue;"},{title:"Medium Header",format:"h3"},{title:"Small Header",format:"h4"},{title:"Tiny Header",format:"h5"},{title:"Paragraph",format:"p",exact:!0,classes:""},{title:"Blockquote",format:"blockquote"},{title:"Callouts",items:[{title:"Information",format:"calloutinfo"},{title:"Success",format:"calloutsuccess"},{title:"Warning",format:"calloutwarning"},{title:"Danger",format:"calloutdanger"}]}],km={alignleft:{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",classes:"align-left"},aligncenter:{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",classes:"align-center"},alignright:{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",classes:"align-right"},calloutsuccess:{block:"p",exact:!0,attributes:{class:"callout success"}},calloutinfo:{block:"p",exact:!0,attributes:{class:"callout info"}},calloutwarning:{block:"p",exact:!0,attributes:{class:"callout warning"}},calloutdanger:{block:"p",exact:!0,attributes:{class:"callout danger"}}},Cm=["#BFEDD2","","#FBEEB8","","#F8CAC6","","#ECCAFA","","#C2E0F4","","#2DC26B","","#F1C40F","","#E03E2D","","#B96AD9","","#3598DB","","#169179","","#E67E23","","#BA372A","","#843FA1","","#236FA1","","#ECF0F1","","#CED4D9","","#95A5A6","","#7E8C8D","","#34495E","","#000000","","#ffffff",""];function Em(n,e,t){t.filetype==="file"&&window.$components.first("entity-selector-popup").show(r=>{n(r.link,{text:r.name,title:r.name})}),t.filetype==="image"&&window.$components.first("image-manager").show(r=>{n(r.url,{alt:r.name})},"gallery")}function _m(n){let e=["image","table","link","autolink","fullscreen","code","customhr","autosave","lists","codeeditor","media","imagemanager","about","details","tasklist",n.textDirection==="rtl"?"directionality":""];return window.tinymce.PluginManager.add("codeeditor",bu()),window.tinymce.PluginManager.add("customhr",yu()),window.tinymce.PluginManager.add("imagemanager",xu()),window.tinymce.PluginManager.add("about",ku()),window.tinymce.PluginManager.add("details",_u()),window.tinymce.PluginManager.add("tasklist",Su()),n.drawioUrl&&(window.tinymce.PluginManager.add("drawio",wu(n)),e.push("drawio")),e.filter(t=>!!t)}function Sm(){let n=document.head.innerHTML.split(` -`),e=n.findIndex(i=>i.trim()===""),t=n.findIndex(i=>i.trim()==="");return e===-1||t===-1?"":n.slice(e+1,t).join(` -`)}function Am(n){return function(t){function i(){n.darkMode&&t.contentDocument.documentElement.classList.add("dark-mode"),window.$events.emit("editor-html-change","")}t.on("ExecCommand change input NodeChange ObjectResized",i),su(t),cu(t,n),t.on("init",()=>{i(),au(t),window.editor=t,ou(t)}),t.on("PreInit",()=>{pu(t)}),window.$events.emitPublic(n.containerElement,"editor-tinymce::setup",{editor:t}),t.ui.registry.addButton("inlinecode",{tooltip:"Inline code",icon:"sourcecode",onAction(){t.execCommand("mceToggleFormat",!1,"code")}})}}function Dm(n){return` +`).length*19.2+18+24;this.style.height=`${c}px`;let u=this.shadowRoot.querySelector(".CodeMirrorContainer"),h=d=>{this.editor=d.wysiwygView(u,this.shadowRoot,a,this.getLanguage()),setTimeout(()=>{this.style.height=null},12)};window.importVersioned("code").then(d=>{let f=Date.now()-s<20?20:0;setTimeout(()=>h(d),f)})}cleanChildContent(){let s=this.querySelector("pre");if(s)for(let a of s.childNodes)a.nodeName==="#text"&&a.textContent==="\uFEFF"&&a.remove()}}e.customElements.define("code-block",i)}function em(n){n.ui.registry.addIcon("codeblock",''),n.ui.registry.addButton("codeeditor",{tooltip:"Insert code block",icon:"codeblock",onAction(){n.execCommand("codeeditor")}}),n.ui.registry.addButton("editcodeeditor",{tooltip:"Edit code block",icon:"edit-block",onAction(){n.execCommand("codeeditor")}}),n.addCommand("codeeditor",()=>{let t=n.selection.getNode(),e=t.ownerDocument;if(pu(t))fu(n,t);else{let i=n.selection.getContent({format:"text"});mu(n,i,"",(r,o)=>{let s=e.createElement("pre"),a=e.createElement("code");a.classList.add(`language-${o}`),a.innerText=r,s.append(a),n.insertContent(s.outerHTML)})}}),n.on("dblclick",()=>{let t=n.selection.getNode();pu(t)&&fu(n,t)}),n.on("PreInit",()=>{n.parser.addNodeFilter("pre",t=>{for(let e of t){let i=window.tinymce.html.Node.create("code-block",{contenteditable:"false"}),r=e.getAll("span");for(let o of r)o.unwrap();e.attr("style",null),e.wrap(i)}}),n.parser.addNodeFilter("code-block",t=>{for(let e of t)e.attr("contenteditable","false")}),n.serializer.addNodeFilter("code-block",t=>{for(let e of t)e.unwrap()})}),n.ui.registry.addContextToolbar("codeeditor",{predicate(t){return t.nodeName.toLowerCase()==="code-block"},items:"editcodeeditor",position:"node",scope:"node"}),n.on("PreInit",()=>{tm(n)})}function gu(){return em}var pt=null,oe=null,re={};function zo(n){return n.hasAttribute("drawio-diagram")}function nm(n,t=null){pt=n,oe=t,window.$components.first("image-manager").show(i=>{if(t){let r=t.querySelector("img");pt.undoManager.transact(()=>{pt.dom.setAttrib(r,"src",i.url),pt.dom.setAttrib(t,"drawio-diagram",i.id)})}else{let r=`
    `;pt.insertContent(r)}},"drawio")}async function im(n){let t=window.baseUrl("/loading.gif"),e=o=>{o.status===413?window.$events.emit("error",re.translations.serverUploadLimitText):window.$events.emit("error",re.translations.imageUploadErrorText),console.error(o)};if(oe){ee();let o=oe.querySelector("img");try{let s=await Po(n,re.pageId);pt.undoManager.transact(()=>{pt.dom.setAttrib(o,"src",s.url),pt.dom.setAttrib(oe,"drawio-diagram",s.id)})}catch(s){throw e(s),new Error(`Failed to save image with error: ${s}`)}return}await ns(5);let i=`drawing-${Math.random().toString(16).slice(2)}`,r=`drawing-wrap-${Math.random().toString(16).slice(2)}`;pt.insertContent(`
    `),ee();try{let o=await Po(n,re.pageId);pt.undoManager.transact(()=>{pt.dom.setAttrib(i,"src",o.url),pt.dom.setAttrib(r,"drawio-diagram",o.id)})}catch(o){throw pt.dom.remove(r),e(o),new Error(`Failed to save image with error: ${o}`)}}function rm(){if(!oe)return Promise.resolve("");let n=oe.getAttribute("drawio-diagram");return _i(n)}function bu(n,t=null){pt=n,oe=t,tn(re.drawioUrl,rm,im)}function om(n){n.addCommand("drawio",()=>{let t=n.selection.getNode();bu(n,zo(t)?t:null)}),n.ui.registry.addIcon("diagram",``),n.ui.registry.addSplitButton("drawio",{tooltip:"Insert/edit drawing",icon:"diagram",onAction(){n.execCommand("drawio"),window.document.body.dispatchEvent(new Event("mousedown",{bubbles:!0}))},fetch(t){t([{type:"choiceitem",text:"Drawing manager",value:"drawing-manager"}])},onItemAction(t,e){if(e==="drawing-manager"){let i=n.selection.getNode();nm(n,zo(i)?i:null)}}}),n.on("dblclick",()=>{let t=n.selection.getNode();zo(t)&&bu(n,t)}),n.on("SetContent",()=>{let t=n.dom.select("body > div[drawio-diagram]");t.length&&n.undoManager.transact(()=>{for(let e of t)e.setAttribute("contenteditable","false")})})}function vu(n){return re=n,om}function sm(n){n.addCommand("InsertHorizontalRule",()=>{let t=document.createElement("hr"),e=n.selection.getNode(),{parentNode:i}=e;i.insertBefore(t,e)}),n.ui.registry.addButton("customhr",{icon:"horizontal-rule",tooltip:"Insert horizontal line",onAction(){n.execCommand("InsertHorizontalRule")}})}function wu(){return sm}function am(n){n.ui.registry.addButton("imagemanager-insert",{title:"Insert image",icon:"image",tooltip:"Insert image",onAction(){window.$components.first("image-manager").show(e=>{let i=e.thumbs?.display||e.url,r=``;r+=`${e.name}`,r+="",n.execCommand("mceInsertContent",!1,r)},"gallery")}})}function yu(){return am}function lm(n){let t={title:"About the WYSIWYG Editor",url:window.baseUrl("/help/wysiwyg")};n.ui.registry.addButton("about",{icon:"help",tooltip:"About the editor",onAction(){window.tinymce.activeEditor.windowManager.openUrl(t)}})}function xu(){return lm}var ku=["p","h1","h2","h3","h4","h5","h6","div","blockquote","pre","code-block","details","ul","ol","table","hr"];function lr(n){return n.selection.getNode().closest("details")}function cm(n,t){let e=lr(n);e&&n.undoManager.transact(()=>{let i=e.querySelector("summary");i||(i=document.createElement("summary"),e.prepend(i)),i.textContent=t})}function um(n){return{title:"Edit collapsible block",body:{type:"panel",items:[{type:"input",name:"summary",label:"Toggle label"}]},buttons:[{type:"cancel",text:"Cancel"},{type:"submit",text:"Save",primary:!0}],onSubmit(t){let{summary:e}=t.getData();cm(n,e),t.close()}}}function hm(n){let t=n.querySelector("summary");return t?t.textContent:""}function Cu(n){let t=lr(n);n.windowManager.open(um(n)).setData({summary:hm(t)})}function dm(n){let t=n.selection.getNode().closest("details"),e=n.selection.getBookmark();if(t){let i=t.querySelectorAll("details > *:not(summary, doc-root), doc-root > *");n.undoManager.transact(()=>{for(let r of i)t.parentNode.insertBefore(r,t);t.remove()})}n.focus(),n.selection.moveToBookmark(e)}function Ho(n){n.attr("contenteditable",null);let t=!1;for(let e of n.children())e.name==="doc-root"&&(e.unwrap(),t=!0);t&&Ho(n)}function pm(n){Ho(n),n.attr("contenteditable","false");let t=window.tinymce.html.Node.create("doc-root",{contenteditable:"true"}),e=null;for(let i of n.children()){if(i.name==="summary")continue;ku.includes(i.name)?(t.append(i),e=null):(e||(e=window.tinymce.html.Node.create("p"),t.append(e)),e.append(i))}n.append(t)}function fm(n){n.parser.addNodeFilter("details",t=>{for(let e of t)pm(e)}),n.serializer.addNodeFilter("details",t=>{for(let e of t)Ho(e),e.attr("open",null)}),n.serializer.addNodeFilter("doc-root",t=>{for(let e of t)e.unwrap()})}function mm(n){n.ui.registry.addIcon("details",''),n.ui.registry.addIcon("togglefold",''),n.ui.registry.addIcon("togglelabel",''),n.ui.registry.addButton("details",{icon:"details",tooltip:"Insert collapsible block",onAction(){n.execCommand("InsertDetailsBlock")}}),n.ui.registry.addButton("removedetails",{icon:"table-delete-table",tooltip:"Unwrap",onAction(){dm(n)}}),n.ui.registry.addButton("editdetials",{icon:"togglelabel",tooltip:"Edit label",onAction(){Cu(n)}}),n.on("dblclick",t=>{!lr(n)||t.target.closest("doc-root")||Cu(n)}),n.ui.registry.addButton("toggledetails",{icon:"togglefold",tooltip:"Toggle open/closed",onAction(){lr(n).toggleAttribute("open"),n.focus()}}),n.addCommand("InsertDetailsBlock",()=>{let t=n.selection.getContent({format:"html"}),e=document.createElement("details"),i=document.createElement("summary"),r=`details-${Date.now()}`;e.setAttribute("data-id",r),e.appendChild(i),t||(t="


    "),e.innerHTML+=t,n.insertContent(e.outerHTML),n.focus();let o=n.dom.select(`[data-id="${r}"]`)[0]||null;if(o){let s=o.querySelector("doc-root > *");s&&s.focus(),o.removeAttribute("data-id")}}),n.ui.registry.addContextToolbar("details",{predicate(t){return t.nodeName.toLowerCase()==="details"},items:"editdetials toggledetails removedetails",position:"node",scope:"node"}),n.on("PreInit",()=>{fm(n)})}function Eu(){return mm}function gm(n){let t=n.closest("li");return t&&t.parentNode.nodeName==="UL"&&t.classList.contains("task-list-item")}function bm(n,t,e){let i=t.getBoundingClientRect();n.clientX<=i.right&&n.clientX>=i.left&&n.clientY>=i.top&&n.clientY<=i.bottom||e.undoManager.transact(()=>{t.hasAttribute("checked")?t.removeAttribute("checked"):t.setAttribute("checked","checked")})}function vm(n){n.attr("class","task-list-item");for(let t of n.children())t.name==="input"&&(t.attr("checked")==="checked"&&n.attr("checked","checked"),t.remove())}function wm(n){let t=n.attr("checked")==="checked";n.attr("checked",null);let e={type:"checkbox",disabled:"disabled"};t&&(e.checked="checked");let i=window.tinymce.html.Node.create("input",e);i.shortEnded=!0,n.firstChild?n.insert(i,n.firstChild,!0):n.append(i)}function ym(n){n.ui.registry.addIcon("tasklist",''),n.ui.registry.addToggleButton("tasklist",{tooltip:"Task list",icon:"tasklist",active:!1,onAction(i){i.isActive()?n.execCommand("RemoveList"):n.execCommand("InsertUnorderedList",null,{"list-item-attributes":{class:"task-list-item"},"list-style-type":"tasklist"})},onSetup(i){n.on("NodeChange",r=>{let o=r.parents.find(a=>a.nodeName==="LI"),s=o&&o.classList.contains("task-list-item");i.setActive(!!s)})}});let t=n.ui.registry.getAll().buttons.bullist;t.onSetup=function(r){n.on("NodeChange",o=>{let s=o.parents.find(c=>c.nodeName==="LI"),a=s&&s.classList.contains("task-list-item"),l=s&&s.parentNode.nodeName==="UL";r.setActive(!!(l&&!a))})},t.onAction=function(){gm(n.selection.getNode())&&n.execCommand("InsertOrderedList",null,{"list-item-attributes":{class:null}}),n.execCommand("InsertUnorderedList",null,{"list-item-attributes":{class:null}})};let e=n.ui.registry.getAll().buttons.numlist;e.onAction=function(){n.execCommand("InsertOrderedList",null,{"list-item-attributes":{class:null}})},n.on("PreInit",()=>{n.parser.addNodeFilter("li",i=>{for(let r of i)r.attributes.map.class==="task-list-item"&&vm(r)}),n.serializer.addNodeFilter("li",i=>{for(let r of i)r.attributes.map.class==="task-list-item"&&wm(r)})}),n.on("click",i=>{let r=i.target;r.nodeName==="LI"&&r.classList.contains("task-list-item")&&(bm(i,r,n),i.preventDefault())})}function _u(){return ym}var xm=[{title:"Large Header",format:"h2",preview:"color: blue;"},{title:"Medium Header",format:"h3"},{title:"Small Header",format:"h4"},{title:"Tiny Header",format:"h5"},{title:"Paragraph",format:"p",exact:!0,classes:""},{title:"Blockquote",format:"blockquote"},{title:"Callouts",items:[{title:"Information",format:"calloutinfo"},{title:"Success",format:"calloutsuccess"},{title:"Warning",format:"calloutwarning"},{title:"Danger",format:"calloutdanger"}]}],km={alignleft:{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",classes:"align-left"},aligncenter:{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",classes:"align-center"},alignright:{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",classes:"align-right"},calloutsuccess:{block:"p",exact:!0,attributes:{class:"callout success"}},calloutinfo:{block:"p",exact:!0,attributes:{class:"callout info"}},calloutwarning:{block:"p",exact:!0,attributes:{class:"callout warning"}},calloutdanger:{block:"p",exact:!0,attributes:{class:"callout danger"}}},Cm=["#BFEDD2","","#FBEEB8","","#F8CAC6","","#ECCAFA","","#C2E0F4","","#2DC26B","","#F1C40F","","#E03E2D","","#B96AD9","","#3598DB","","#169179","","#E67E23","","#BA372A","","#843FA1","","#236FA1","","#ECF0F1","","#CED4D9","","#95A5A6","","#7E8C8D","","#34495E","","#000000","","#ffffff",""];function Em(n,t,e){if(e.filetype==="file"){let i=window.$components.first("entity-selector-popup"),r=this.selection.getContent({format:"text"}).trim();i.show(o=>{n(o.link,{text:o.name,title:o.name})},r)}e.filetype==="image"&&window.$components.first("image-manager").show(r=>{n(r.url,{alt:r.name})},"gallery")}function _m(n){let t=["image","table","link","autolink","fullscreen","code","customhr","autosave","lists","codeeditor","media","imagemanager","about","details","tasklist",n.textDirection==="rtl"?"directionality":""];return window.tinymce.PluginManager.add("codeeditor",gu()),window.tinymce.PluginManager.add("customhr",wu()),window.tinymce.PluginManager.add("imagemanager",yu()),window.tinymce.PluginManager.add("about",xu()),window.tinymce.PluginManager.add("details",Eu()),window.tinymce.PluginManager.add("tasklist",_u()),n.drawioUrl&&(window.tinymce.PluginManager.add("drawio",vu(n)),t.push("drawio")),t.filter(e=>!!e)}function Sm(){let n=document.head.innerHTML.split(` +`),t=n.findIndex(i=>i.trim()===""),e=n.findIndex(i=>i.trim()==="");return t===-1||e===-1?"":n.slice(t+1,e).join(` +`)}function Am(n){return function(e){function i(){n.darkMode&&e.contentDocument.documentElement.classList.add("dark-mode"),window.$events.emit("editor-html-change","")}e.on("ExecCommand change input NodeChange ObjectResized",i),ou(e),lu(e,n),e.on("init",()=>{i(),su(e),window.editor=e,ru(e)}),e.on("PreInit",()=>{du(e)}),window.$events.emitPublic(n.containerElement,"editor-tinymce::setup",{editor:e}),e.ui.registry.addButton("inlinecode",{tooltip:"Inline code",icon:"sourcecode",onAction(){e.execCommand("mceToggleFormat",!1,"code")}})}}function Dm(n){return` html, body, html.dark-mode { background: ${n.darkMode?"#222":"#fff"}; } @@ -40,7 +40,7 @@ body { margin-right: auto !important; overflow-y: hidden !important; }`.trim().replace(` -`,"")}function Au(n){return window.tinymce.addI18n(n.language,n.translationMap),{width:"100%",height:"100%",selector:"#html-editor",cache_suffix:`?version=${document.querySelector('script[src*="/dist/app.js"]').getAttribute("src").split("?version=")[1]}`,content_css:[window.baseUrl("/dist/styles.css")],branding:!1,skin:n.darkMode?"tinymce-5-dark":"tinymce-5",body_class:"page-content",browser_spellcheck:!0,relative_urls:!1,language:n.language,directionality:n.textDirection,remove_script_host:!1,document_base_url:window.baseUrl("/"),end_container_on_empty_block:!0,remove_trailing_brs:!1,statusbar:!1,menubar:!1,paste_data_images:!1,extended_valid_elements:"pre[*],svg[*],div[drawio-diagram],details[*],summary[*],div[*],li[class|checked|style]",automatic_uploads:!1,custom_elements:"doc-root,code-block",valid_children:["-div[p|h1|h2|h3|h4|h5|h6|blockquote|code-block]","+div[pre|img]","-doc-root[doc-root|#text]","-li[details]","+code-block[pre]","+doc-root[p|h1|h2|h3|h4|h5|h6|blockquote|code-block|div|hr]"].join(","),plugins:_m(n),contextmenu:!1,toolbar:uu(n),content_style:Dm(n),style_formats:xm,style_formats_merge:!1,media_alt_source:!1,media_poster:!1,formats:km,table_style_by_css:!0,table_use_colgroups:!0,file_picker_types:"file image",color_map:Cm,file_picker_callback:Em,paste_preprocess(t,i){let{content:r}=i;r.indexOf('{this.editor=e[0]})}getDrawIoUrl(){let e=document.querySelector("[drawio-url]");return e?e.getAttribute("drawio-url"):""}getContent(){return{html:this.editor.getContent()}}};window.baseUrl=function(e){let t=e,i=document.querySelector('meta[name="base-url"]').getAttribute("content");return i[i.length-1]==="/"&&(i=i.slice(0,i.length-1)),t[0]==="/"&&(t=t.slice(1)),`${i}/${t}`};window.importVersioned=function(e){let t=document.querySelector('link[href*="/dist/styles.css?version="]').href.split("?version=").pop();return import(window.baseUrl(`dist/${e}.js?version=${t}`))};window.$http=pr;window.$events=dr;var Et=new Ko;window.trans=Et.get.bind(Et);window.trans_choice=Et.getPlural.bind(Et);window.trans_plural=Et.parsePlural.bind(Et);vr(Uo);window.$components=wr;br(); +`,"")}function Su(n){return window.tinymce.addI18n(n.language,n.translationMap),{width:"100%",height:"100%",selector:"#html-editor",cache_suffix:`?version=${document.querySelector('script[src*="/dist/app.js"]').getAttribute("src").split("?version=")[1]}`,content_css:[window.baseUrl("/dist/styles.css")],branding:!1,skin:n.darkMode?"tinymce-5-dark":"tinymce-5",body_class:"page-content",browser_spellcheck:!0,relative_urls:!1,language:n.language,directionality:n.textDirection,remove_script_host:!1,document_base_url:window.baseUrl("/"),end_container_on_empty_block:!0,remove_trailing_brs:!1,statusbar:!1,menubar:!1,paste_data_images:!1,extended_valid_elements:"pre[*],svg[*],div[drawio-diagram],details[*],summary[*],div[*],li[class|checked|style]",automatic_uploads:!1,custom_elements:"doc-root,code-block",valid_children:["-div[p|h1|h2|h3|h4|h5|h6|blockquote|code-block]","+div[pre|img]","-doc-root[doc-root|#text]","-li[details]","+code-block[pre]","+doc-root[p|h1|h2|h3|h4|h5|h6|blockquote|code-block|div|hr]"].join(","),plugins:_m(n),contextmenu:!1,toolbar:cu(n),content_style:Dm(n),style_formats:xm,style_formats_merge:!1,media_alt_source:!1,media_poster:!1,formats:km,table_style_by_css:!0,table_use_colgroups:!0,file_picker_types:"file image",color_map:Cm,file_picker_callback:Em,paste_preprocess(e,i){let{content:r}=i;r.indexOf('{this.editor=t[0]})}getDrawIoUrl(){let t=document.querySelector("[drawio-url]");return t?t.getAttribute("drawio-url"):""}getContent(){return{html:this.editor.getContent()}}};window.baseUrl=function(t){let e=t,i=document.querySelector('meta[name="base-url"]').getAttribute("content");return i[i.length-1]==="/"&&(i=i.slice(0,i.length-1)),e[0]==="/"&&(e=e.slice(1)),`${i}/${e}`};window.importVersioned=function(t){let e=document.querySelector('link[href*="/dist/styles.css?version="]').href.split("?version=").pop();return import(window.baseUrl(`dist/${t}.js?version=${e}`))};window.$http=pr;window.$events=dr;var Ee=new Ko;window.trans=Ee.get.bind(Ee);window.trans_choice=Ee.getPlural.bind(Ee);window.trans_plural=Ee.parsePlural.bind(Ee);vr(Uo);window.$components=wr;br(); /*! Bundled license information: sortablejs/modular/sortable.esm.js: diff --git a/public/dist/code.js b/public/dist/code.js index ae8f0254d82..c6e5366056b 100644 --- a/public/dist/code.js +++ b/public/dist/code.js @@ -1,30 +1,30 @@ -var U=class i{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,n){let r=[];return this.decompose(0,e,r,2),n.length&&n.decompose(0,n.length,r,3),this.decompose(t,this.length,r,1),ni.from(r,this.length-(t-e)+n.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){let n=[];return this.decompose(e,t,n,0),ni.from(n,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),n=this.length-this.scanIdentical(e,-1),r=new _t(this),s=new _t(e);for(let O=t,o=t;;){if(r.next(O),s.next(O),O=0,r.lineBreak!=s.lineBreak||r.done!=s.done||r.value!=s.value)return!1;if(o+=r.value.length,r.done||o>=n)return!0}}iter(e=1){return new _t(this,e)}iterRange(e,t=this.length){return new wn(this,e,t)}iterLines(e,t){let n;if(e==null)n=this.iter();else{t==null&&(t=this.lines+1);let r=this.line(e).from;n=this.iterRange(r,Math.max(r,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new kn(n)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?i.empty:e.length<=32?new ve(e):ni.from(ve.split(e,[]))}},ve=class i extends U{constructor(e,t=sd(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,n,r){for(let s=0;;s++){let O=this.text[s],o=r+O.length;if((t?n:o)>=e)return new Jr(r,o,n,O);r=o+1,n++}}decompose(e,t,n,r){let s=e<=0&&t>=this.length?this:new i(rl(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(r&1){let O=n.pop(),o=xn(s.text,O.text.slice(),0,s.length);if(o.length<=32)n.push(new i(o,O.length+s.length));else{let l=o.length>>1;n.push(new i(o.slice(0,l)),new i(o.slice(l)))}}else n.push(s)}replace(e,t,n){if(!(n instanceof i))return super.replace(e,t,n);let r=xn(this.text,xn(n.text,rl(this.text,0,e)),t),s=this.length+n.length-(t-e);return r.length<=32?new i(r,s):ni.from(i.split(r,[]),s)}sliceString(e,t=this.length,n=` -`){let r="";for(let s=0,O=0;s<=t&&Oe&&O&&(r+=n),es&&(r+=o.slice(Math.max(0,e-s),t-s)),s=l+1}return r}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let n=[],r=-1;for(let s of e)n.push(s),r+=s.length+1,n.length==32&&(t.push(new i(n,r)),n=[],r=-1);return r>-1&&t.push(new i(n,r)),t}},ni=class i extends U{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let n of e)this.lines+=n.lines}lineInner(e,t,n,r){for(let s=0;;s++){let O=this.children[s],o=r+O.length,l=n+O.lines-1;if((t?l:o)>=e)return O.lineInner(e,t,n,r);r=o+1,n=l+1}}decompose(e,t,n,r){for(let s=0,O=0;O<=t&&s=O){let a=r&((O<=e?1:0)|(l>=t?2:0));O>=e&&l<=t&&!a?n.push(o):o.decompose(e-O,t-O,n,a)}O=l+1}}replace(e,t,n){if(n.lines=s&&t<=o){let l=O.replace(e-s,t-s,n),a=this.lines-O.lines+l.lines;if(l.lines>5-1&&l.lines>a>>5+1){let h=this.children.slice();return h[r]=l,new i(h,this.length-(t-e)+n.length)}return super.replace(s,o,l)}s=o+1}return super.replace(e,t,n)}sliceString(e,t=this.length,n=` -`){let r="";for(let s=0,O=0;se&&s&&(r+=n),eO&&(r+=o.sliceString(e-O,t-O,n)),O=l+1}return r}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof i))return 0;let n=0,[r,s,O,o]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;r+=t,s+=t){if(r==O||s==o)return n;let l=this.children[r],a=e.children[s];if(l!=a)return n+l.scanIdentical(a,t);n+=l.length+1}}static from(e,t=e.reduce((n,r)=>n+r.length+1,-1)){let n=0;for(let d of e)n+=d.lines;if(n<32){let d=[];for(let p of e)p.flatten(d);return new ve(d,t)}let r=Math.max(32,n>>5),s=r<<1,O=r>>1,o=[],l=0,a=-1,h=[];function c(d){let p;if(d.lines>s&&d instanceof i)for(let m of d.children)c(m);else d.lines>O&&(l>O||!l)?(f(),o.push(d)):d instanceof ve&&l&&(p=h[h.length-1])instanceof ve&&d.lines+p.lines<=32?(l+=d.lines,a+=d.length+1,h[h.length-1]=new ve(p.text.concat(d.text),p.length+1+d.length)):(l+d.lines>r&&f(),l+=d.lines,a+=d.length+1,h.push(d))}function f(){l!=0&&(o.push(h.length==1?h[0]:i.from(h,a)),a=-1,l=h.length=0)}for(let d of e)c(d);return f(),o.length==1?o[0]:new i(o,t)}};U.empty=new ve([""],0);function sd(i){let e=-1;for(let t of i)e+=t.length+1;return e}function xn(i,e,t=0,n=1e9){for(let r=0,s=0,O=!0;s=t&&(l>n&&(o=o.slice(0,n-r)),r0?1:(e instanceof ve?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let n=this.nodes.length-1,r=this.nodes[n],s=this.offsets[n],O=s>>1,o=r instanceof ve?r.text.length:r.children.length;if(O==(t>0?o:0)){if(n==0)return this.done=!0,this.value="",this;t>0&&this.offsets[n-1]++,this.nodes.pop(),this.offsets.pop()}else if((s&1)==(t>0?0:1)){if(this.offsets[n]+=t,e==0)return this.lineBreak=!0,this.value=` -`,this;e--}else if(r instanceof ve){let l=r.text[O+(t<0?-1:0)];if(this.offsets[n]+=t,l.length>Math.max(0,e))return this.value=e==0?l:t>0?l.slice(e):l.slice(0,l.length-e),this;e-=l.length}else{let l=r.children[O+(t<0?-1:0)];e>l.length?(e-=l.length,this.offsets[n]+=t):(t<0&&this.offsets[n]--,this.nodes.push(l),this.offsets.push(t>0?1:(l instanceof ve?l.text.length:l.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},wn=class{constructor(e,t,n){this.value="",this.done=!1,this.cursor=new _t(e,t>n?-1:1),this.pos=t>n?e.length:0,this.from=Math.min(t,n),this.to=Math.max(t,n)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let n=t<0?this.pos-this.from:this.to-this.pos;e>n&&(e=n),n-=e;let{value:r}=this.cursor.next(e);return this.pos+=(r.length+e)*t,this.value=r.length<=n?r:t<0?r.slice(r.length-n):r.slice(0,n),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},kn=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:n,value:r}=this.inner.next(e);return t?(this.done=!0,this.value=""):n?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=r,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(U.prototype[Symbol.iterator]=function(){return this.iter()},_t.prototype[Symbol.iterator]=wn.prototype[Symbol.iterator]=kn.prototype[Symbol.iterator]=function(){return this});var Jr=class{constructor(e,t,n,r){this.from=e,this.to=t,this.number=n,this.text=r}get length(){return this.to-this.from}},ri="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(i=>i?parseInt(i,36):1);for(let i=1;ii)return ri[e-1]<=i;return!1}function sl(i){return i>=127462&&i<=127487}var Ol=8205;function ue(i,e,t=!0,n=!0){return(t?fl:od)(i,e,n)}function fl(i,e,t){if(e==i.length)return e;e&&ul(i.charCodeAt(e))&&dl(i.charCodeAt(e-1))&&e--;let n=si(i,e);for(e+=Vi(n);e=0&&sl(si(i,O));)s++,O-=2;if(s%2==0)break;e+=2}else break}return e}function od(i,e,t){for(;e>0;){let n=fl(i,e-2,t);if(n=56320&&i<57344}function dl(i){return i>=55296&&i<56320}function si(i,e){let t=i.charCodeAt(e);if(!dl(t)||e+1==i.length)return t;let n=i.charCodeAt(e+1);return ul(n)?(t-55296<<10)+(n-56320)+65536:t}function Vi(i){return i<65536?1:2}var Kr=/\r\n?|\n/,ae=function(i){return i[i.Simple=0]="Simple",i[i.TrackDel=1]="TrackDel",i[i.TrackBefore=2]="TrackBefore",i[i.TrackAfter=3]="TrackAfter",i}(ae||(ae={})),lt=class i{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return s+(e-r);s+=o}else{if(n!=ae.Simple&&a>=e&&(n==ae.TrackDel&&re||n==ae.TrackBefore&&re))return null;if(a>e||a==e&&t<0&&!o)return e==r||t<0?s:s+l;s+=l}r=a}if(e>r)throw new RangeError(`Position ${e} is out of range for changeset of length ${r}`);return s}touchesRange(e,t=e){for(let n=0,r=0;n=0&&r<=t&&o>=e)return rt?"cover":!0;r=o}return!1}toString(){let e="";for(let t=0;t=0?":"+r:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new i(e)}static create(e){return new i(e)}},ge=class i extends lt{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return es(this,(t,n,r,s,O)=>e=e.replace(r,r+(n-t),O),!1),e}mapDesc(e,t=!1){return ts(this,e,t,!0)}invert(e){let t=this.sections.slice(),n=[];for(let r=0,s=0;r=0){t[r]=o,t[r+1]=O;let l=r>>1;for(;n.length0&&mt(n,t,s.text),s.forward(h),o+=h}let a=e[O++];for(;o>1].toJSON()))}return e}static of(e,t,n){let r=[],s=[],O=0,o=null;function l(h=!1){if(!h&&!r.length)return;Of||c<0||f>t)throw new RangeError(`Invalid change range ${c} to ${f} (in doc of length ${t})`);let p=d?typeof d=="string"?U.of(d.split(n||Kr)):d:U.empty,m=p.length;if(c==f&&m==0)return;cO&&fe(r,c-O,-1),fe(r,f-c,m),mt(s,r,p),O=f}}return a(e),l(!o),o}static empty(e){return new i(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],n=[];for(let r=0;ro&&typeof O!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(s.length==1)t.push(s[0],0);else{for(;n.length=0&&t<=0&&t==i[r+1]?i[r]+=e:e==0&&i[r]==0?i[r+1]+=t:n?(i[r]+=e,i[r+1]+=t):i.push(e,t)}function mt(i,e,t){if(t.length==0)return;let n=e.length-2>>1;if(n>1])),!(t||O==i.sections.length||i.sections[O+1]<0);)o=i.sections[O++],l=i.sections[O++];e(r,a,s,h,c),r=a,s=h}}}function ts(i,e,t,n=!1){let r=[],s=n?[]:null,O=new At(i),o=new At(e);for(let l=-1;;)if(O.ins==-1&&o.ins==-1){let a=Math.min(O.len,o.len);fe(r,a,-1),O.forward(a),o.forward(a)}else if(o.ins>=0&&(O.ins<0||l==O.i||O.off==0&&(o.len=0&&l=0){let a=0,h=O.len;for(;h;)if(o.ins==-1){let c=Math.min(h,o.len);a+=c,h-=c,o.forward(c)}else if(o.ins==0&&o.lenl||O.ins>=0&&O.len>l)&&(o||n.length>a),s.forward2(l),O.forward(l)}}}}var At=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?U.empty:e[t]}textBit(e){let{inserted:t}=this.set,n=this.i-2>>1;return n>=t.length&&!e?U.empty:t[n].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},ii=class i{constructor(e,t,n){this.from=e,this.to=t,this.flags=n}get anchor(){return this.flags&16?this.to:this.from}get head(){return this.flags&16?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&4?-1:this.flags&8?1:0}get bidiLevel(){let e=this.flags&3;return e==3?null:e}get goalColumn(){let e=this.flags>>5;return e==33554431?void 0:e}map(e,t=-1){let n,r;return this.empty?n=r=e.mapPos(this.from,t):(n=e.mapPos(this.from,1),r=e.mapPos(this.to,-1)),n==this.from&&r==this.to?this:new i(n,r,this.flags)}extend(e,t=e){if(e<=this.anchor&&t>=this.anchor)return Q.range(e,t);let n=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return Q.range(this.anchor,n)}eq(e){return this.anchor==e.anchor&&this.head==e.head}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return Q.range(e.anchor,e.head)}static create(e,t,n){return new i(e,t,n)}},Q=class i{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:i.create(this.ranges.map(n=>n.map(e,t)),this.mainIndex)}eq(e){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let t=0;te.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new i(e.ranges.map(t=>ii.fromJSON(t)),e.main)}static single(e,t=e){return new i([i.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let n=0,r=0;re?4:0)|s)}static normalized(e,t=0){let n=e[t];e.sort((r,s)=>r.from-s.from),t=e.indexOf(n);for(let r=1;rs.head?i.range(l,o):i.range(o,l))}}return new i(e,t)}};function $l(i,e){for(let t of i.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}var hs=0,W=class i{constructor(e,t,n,r,s){this.combine=e,this.compareInput=t,this.compare=n,this.isStatic=r,this.id=hs++,this.default=e([]),this.extensions=typeof s=="function"?s(this):s}static define(e={}){return new i(e.combine||(t=>t),e.compareInput||((t,n)=>t===n),e.compare||(e.combine?(t,n)=>t===n:cs),!!e.static,e.enables)}of(e){return new Oi([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Oi(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Oi(e,this,2,t)}from(e,t){return t||(t=n=>n),this.compute([e],n=>t(n.field(e)))}};function cs(i,e){return i==e||i.length==e.length&&i.every((t,n)=>t===e[n])}var Oi=class{constructor(e,t,n,r){this.dependencies=e,this.facet=t,this.type=n,this.value=r,this.id=hs++}dynamicSlot(e){var t;let n=this.value,r=this.facet.compareInput,s=this.id,O=e[s]>>1,o=this.type==2,l=!1,a=!1,h=[];for(let c of this.dependencies)c=="doc"?l=!0:c=="selection"?a=!0:((t=e[c.id])!==null&&t!==void 0?t:1)&1||h.push(e[c.id]);return{create(c){return c.values[O]=n(c),1},update(c,f){if(l&&f.docChanged||a&&(f.docChanged||f.selection)||is(c,h)){let d=n(c);if(o?!ol(d,c.values[O],r):!r(d,c.values[O]))return c.values[O]=d,1}return 0},reconfigure:(c,f)=>{let d,p=f.config.address[s];if(p!=null){let m=Xn(f,p);if(this.dependencies.every($=>$ instanceof W?f.facet($)===c.facet($):$ instanceof Qe?f.field($,!1)==c.field($,!1):!0)||(o?ol(d=n(c),m,r):r(d=n(c),m)))return c.values[O]=m,0}else d=n(c);return c.values[O]=d,1}}}};function ol(i,e,t){if(i.length!=e.length)return!1;for(let n=0;ni[l.id]),r=t.map(l=>l.type),s=n.filter(l=>!(l&1)),O=i[e.id]>>1;function o(l){let a=[];for(let h=0;hn===r),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(ll).find(n=>n.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:n=>(n.values[t]=this.create(n),1),update:(n,r)=>{let s=n.values[t],O=this.updateF(s,r);return this.compareF(s,O)?0:(n.values[t]=O,1)},reconfigure:(n,r)=>r.config.address[this.id]!=null?(n.values[t]=r.field(this),0):(n.values[t]=this.create(n),1)}}init(e){return[this,ll.of({field:this,create:e})]}get extension(){return this}},Ut={lowest:4,low:3,default:2,high:1,highest:0};function Wi(i){return e=>new vn(e,i)}var He={highest:Wi(Ut.highest),high:Wi(Ut.high),default:Wi(Ut.default),low:Wi(Ut.low),lowest:Wi(Ut.lowest)},vn=class{constructor(e,t){this.inner=e,this.prec=t}},gt=class i{of(e){return new Zi(this,e)}reconfigure(e){return i.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},Zi=class{constructor(e,t){this.compartment=e,this.inner=t}},Tn=class i{constructor(e,t,n,r,s,O){for(this.base=e,this.compartments=t,this.dynamicSlots=n,this.address=r,this.staticValues=s,this.facets=O,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,n){let r=[],s=Object.create(null),O=new Map;for(let f of ad(e,t,O))f instanceof Qe?r.push(f):(s[f.facet.id]||(s[f.facet.id]=[])).push(f);let o=Object.create(null),l=[],a=[];for(let f of r)o[f.id]=a.length<<1,a.push(d=>f.slot(d));let h=n?.config.facets;for(let f in s){let d=s[f],p=d[0].facet,m=h&&h[f]||[];if(d.every($=>$.type==0))if(o[p.id]=l.length<<1|1,cs(m,d))l.push(n.facet(p));else{let $=p.combine(d.map(g=>g.value));l.push(n&&p.compare($,n.facet(p))?n.facet(p):$)}else{for(let $ of d)$.type==0?(o[$.id]=l.length<<1|1,l.push($.value)):(o[$.id]=a.length<<1,a.push(g=>$.dynamicSlot(g)));o[p.id]=a.length<<1,a.push($=>ld($,p,d))}}let c=a.map(f=>f(o));return new i(e,O,c,o,l,s)}};function ad(i,e,t){let n=[[],[],[],[],[]],r=new Map;function s(O,o){let l=r.get(O);if(l!=null){if(l<=o)return;let a=n[l].indexOf(O);a>-1&&n[l].splice(a,1),O instanceof Zi&&t.delete(O.compartment)}if(r.set(O,o),Array.isArray(O))for(let a of O)s(a,o);else if(O instanceof Zi){if(t.has(O.compartment))throw new RangeError("Duplicate use of compartment in extensions");let a=e.get(O.compartment)||O.inner;t.set(O.compartment,a),s(a,o)}else if(O instanceof vn)s(O.inner,O.prec);else if(O instanceof Qe)n[o].push(O),O.provides&&s(O.provides,o);else if(O instanceof Oi)n[o].push(O),O.facet.extensions&&s(O.facet.extensions,Ut.default);else{let a=O.extension;if(!a)throw new Error(`Unrecognized extension value in extension set (${O}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);s(a,o)}}return s(i,Ut.default),n.reduce((O,o)=>O.concat(o))}function Ri(i,e){if(e&1)return 2;let t=e>>1,n=i.status[t];if(n==4)throw new Error("Cyclic dependency between fields and/or facets");if(n&2)return n;i.status[t]=4;let r=i.computeSlot(i,i.config.dynamicSlots[t]);return i.status[t]=2|r}function Xn(i,e){return e&1?i.config.staticValues[e>>1]:i.values[e>>1]}var ml=W.define(),gl=W.define({combine:i=>i.some(e=>e),static:!0}),Ql=W.define({combine:i=>i.length?i[0]:void 0,static:!0}),Sl=W.define(),yl=W.define(),Pl=W.define(),bl=W.define({combine:i=>i.length?i[0]:!1}),be=class{constructor(e,t){this.type=e,this.value=t}static define(){return new ns}},ns=class{of(e){return new be(this,e)}},rs=class{constructor(e){this.map=e}of(e){return new j(this,e)}},j=class i{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new i(this.type,t)}is(e){return this.type==e}static define(e={}){return new rs(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let n=[];for(let r of e){let s=r.map(t);s&&n.push(s)}return n}};j.reconfigure=j.define();j.appendConfig=j.define();var oe=class i{constructor(e,t,n,r,s,O){this.startState=e,this.changes=t,this.selection=n,this.effects=r,this.annotations=s,this.scrollIntoView=O,this._doc=null,this._state=null,n&&$l(n,t.newLength),s.some(o=>o.type==i.time)||(this.annotations=s.concat(i.time.of(Date.now())))}static create(e,t,n,r,s,O){return new i(e,t,n,r,s,O)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(i.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}};oe.time=be.define();oe.userEvent=be.define();oe.addToHistory=be.define();oe.remote=be.define();function hd(i,e){let t=[];for(let n=0,r=0;;){let s,O;if(n=i[n]))s=i[n++],O=i[n++];else if(r=0;r--){let s=n[r](i);s instanceof oe?i=s:Array.isArray(s)&&s.length==1&&s[0]instanceof oe?i=s[0]:i=wl(e,oi(s),!1)}return i}function fd(i){let e=i.startState,t=e.facet(Pl),n=i;for(let r=t.length-1;r>=0;r--){let s=t[r](i);s&&Object.keys(s).length&&(n=xl(n,ss(e,s,i.changes.newLength),!0))}return n==i?i:oe.create(e,i.changes,i.selection,n.effects,n.annotations,n.scrollIntoView)}var ud=[];function oi(i){return i==null?ud:Array.isArray(i)?i:[i]}var Ze=function(i){return i[i.Word=0]="Word",i[i.Space=1]="Space",i[i.Other=2]="Other",i}(Ze||(Ze={})),dd=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Os;try{Os=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function pd(i){if(Os)return Os.test(i);for(let e=0;e"\x80"&&(t.toUpperCase()!=t.toLowerCase()||dd.test(t)))return!0}return!1}function $d(i){return e=>{if(!/\S/.test(e))return Ze.Space;if(pd(e))return Ze.Word;for(let t=0;t-1)return Ze.Word;return Ze.Other}}var E=class i{constructor(e,t,n,r,s,O){this.config=e,this.doc=t,this.selection=n,this.values=r,this.status=e.statusTemplate.slice(),this.computeSlot=s,O&&(O._state=this);for(let o=0;or.set(l,o)),t=null),r.set(O.value.compartment,O.value.extension)):O.is(j.reconfigure)?(t=null,n=O.value):O.is(j.appendConfig)&&(t=null,n=oi(n).concat(O.value));let s;t?s=e.startState.values.slice():(t=Tn.resolve(n,r,this),s=new i(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(o,l)=>l.reconfigure(o,this),null).values),new i(t,e.newDoc,e.newSelection,s,(O,o)=>o.update(O,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:Q.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,n=e(t.ranges[0]),r=this.changes(n.changes),s=[n.range],O=oi(n.effects);for(let o=1;oO.spec.fromJSON(o,l)))}}return i.create({doc:e.doc,selection:Q.fromJSON(e.selection),extensions:t.extensions?r.concat([t.extensions]):r})}static create(e={}){let t=Tn.resolve(e.extensions||[],new Map),n=e.doc instanceof U?e.doc:U.of((e.doc||"").split(t.staticFacet(i.lineSeparator)||Kr)),r=e.selection?e.selection instanceof Q?e.selection:Q.single(e.selection.anchor,e.selection.head):Q.single(0);return $l(r,n.length),t.staticFacet(gl)||(r=r.asSingle()),new i(t,n,r,t.dynamicSlots.map(()=>null),(s,O)=>O.create(s),null)}get tabSize(){return this.facet(i.tabSize)}get lineBreak(){return this.facet(i.lineSeparator)||` -`}get readOnly(){return this.facet(bl)}phrase(e,...t){for(let n of this.facet(i.phrases))if(Object.prototype.hasOwnProperty.call(n,e)){e=n[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(n,r)=>{if(r=="$")return"$";let s=+(r||1);return!s||s>t.length?n:t[s-1]})),e}languageDataAt(e,t,n=-1){let r=[];for(let s of this.facet(ml))for(let O of s(this,t,n))Object.prototype.hasOwnProperty.call(O,e)&&r.push(O[e]);return r}charCategorizer(e){return $d(this.languageDataAt("wordChars",e).join(""))}wordAt(e){let{text:t,from:n,length:r}=this.doc.lineAt(e),s=this.charCategorizer(e),O=e-n,o=e-n;for(;O>0;){let l=ue(t,O,!1);if(s(t.slice(l,O))!=Ze.Word)break;O=l}for(;oi.length?i[0]:4});E.lineSeparator=Ql;E.readOnly=bl;E.phrases=W.define({compare(i,e){let t=Object.keys(i),n=Object.keys(e);return t.length==n.length&&t.every(r=>i[r]==e[r])}});E.languageData=ml;E.changeFilter=Sl;E.transactionFilter=yl;E.transactionExtender=Pl;gt.reconfigure=j.define();function Qt(i,e,t={}){let n={};for(let r of i)for(let s of Object.keys(r)){let O=r[s],o=n[s];if(o===void 0)n[s]=O;else if(!(o===O||O===void 0))if(Object.hasOwnProperty.call(t,s))n[s]=t[s](o,O);else throw new Error("Config merge conflict for field "+s)}for(let r in e)n[r]===void 0&&(n[r]=e[r]);return n}var Ge=class{eq(e){return this==e}range(e,t=e){return Ci.create(e,t,this)}};Ge.prototype.startSide=Ge.prototype.endSide=0;Ge.prototype.point=!1;Ge.prototype.mapMode=ae.TrackDel;var Ci=class i{constructor(e,t,n){this.from=e,this.to=t,this.value=n}static create(e,t,n){return new i(e,t,n)}};function os(i,e){return i.from-e.from||i.value.startSide-e.value.startSide}var ls=class i{constructor(e,t,n,r){this.from=e,this.to=t,this.value=n,this.maxPoint=r}get length(){return this.to[this.to.length-1]}findIndex(e,t,n,r=0){let s=n?this.to:this.from;for(let O=r,o=s.length;;){if(O==o)return O;let l=O+o>>1,a=s[l]-e||(n?this.value[l].endSide:this.value[l].startSide)-t;if(l==O)return a>=0?O:o;a>=0?o=l:O=l+1}}between(e,t,n,r){for(let s=this.findIndex(t,-1e9,!0),O=this.findIndex(n,1e9,!1,s);sd||f==d&&a.startSide>0&&a.endSide<=0)continue;(d-f||a.endSide-a.startSide)<0||(O<0&&(O=f),a.point&&(o=Math.max(o,d-f)),n.push(a),r.push(f-O),s.push(d-O))}return{mapped:n.length?new i(r,s,n,o):null,pos:O}}},L=class i{constructor(e,t,n,r){this.chunkPos=e,this.chunk=t,this.nextLayer=n,this.maxPoint=r}static create(e,t,n,r){return new i(e,t,n,r)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:n=!1,filterFrom:r=0,filterTo:s=this.length}=e,O=e.filter;if(t.length==0&&!O)return this;if(n&&(t=t.slice().sort(os)),this.isEmpty)return t.length?i.of(t):this;let o=new zn(this,null,-1).goto(0),l=0,a=[],h=new jt;for(;o.value||l=0){let c=t[l++];h.addInner(c.from,c.to,c.value)||a.push(c)}else o.rangeIndex==1&&o.chunkIndexthis.chunkEnd(o.chunkIndex)||so.to||s=s&&e<=s+O.length&&O.between(s,e-s,t-s,n)===!1)return}this.nextLayer.between(e,t,n)}}iter(e=0){return qi.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return qi.from(e).goto(t)}static compare(e,t,n,r,s=-1){let O=e.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),o=t.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),l=al(O,o,n),a=new Yt(O,l,s),h=new Yt(o,l,s);n.iterGaps((c,f,d)=>hl(a,c,h,f,d,r)),n.empty&&n.length==0&&hl(a,0,h,0,0,r)}static eq(e,t,n=0,r){r==null&&(r=1e9-1);let s=e.filter(h=>!h.isEmpty&&t.indexOf(h)<0),O=t.filter(h=>!h.isEmpty&&e.indexOf(h)<0);if(s.length!=O.length)return!1;if(!s.length)return!0;let o=al(s,O),l=new Yt(s,o,0).goto(n),a=new Yt(O,o,0).goto(n);for(;;){if(l.to!=a.to||!as(l.active,a.active)||l.point&&(!a.point||!l.point.eq(a.point)))return!1;if(l.to>r)return!0;l.next(),a.next()}}static spans(e,t,n,r,s=-1){let O=new Yt(e,null,s).goto(t),o=t,l=O.openStart;for(;;){let a=Math.min(O.to,n);if(O.point){let h=O.activeForPoint(O.to),c=O.pointFromo&&(r.span(o,a,O.active,l),l=O.openEnd(a));if(O.to>n)return l+(O.point&&O.to>n?1:0);o=O.to,O.next()}}static of(e,t=!1){let n=new jt;for(let r of e instanceof Ci?[e]:t?md(e):e)n.add(r.from,r.to,r.value);return n.finish()}};L.empty=new L([],[],null,-1);function md(i){if(i.length>1)for(let e=i[0],t=1;t0)return i.slice().sort(os);e=n}return i}L.empty.nextLayer=L.empty;var jt=class i{finishChunk(e){this.chunks.push(new ls(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,n){this.addInner(e,t,n)||(this.nextLayer||(this.nextLayer=new i)).add(e,t,n)}addInner(e,t,n){let r=e-this.lastTo||n.startSide-this.last.endSide;if(r<=0&&(e-this.lastFrom||n.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return r<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=n,this.lastFrom=e,this.lastTo=t,this.value.push(n),n.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let n=t.value.length-1;return this.last=t.value[n],this.lastFrom=t.from[n]+e,this.lastTo=t.to[n]+e,!0}finish(){return this.finishInner(L.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=L.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}};function al(i,e,t){let n=new Map;for(let s of i)for(let O=0;O=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=n&&r.push(new zn(O,t,n,s));return r.length==1?r[0]:new i(r)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let n of this.heap)n.goto(e,t);for(let n=this.heap.length>>1;n>=0;n--)Fr(this.heap,n);return this.next(),this}forward(e,t){for(let n of this.heap)n.forward(e,t);for(let n=this.heap.length>>1;n>=0;n--)Fr(this.heap,n);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Fr(this.heap,0)}}};function Fr(i,e){for(let t=i[e];;){let n=(e<<1)+1;if(n>=i.length)break;let r=i[n];if(n+1=0&&(r=i[n+1],n++),t.compare(r)<0)break;i[n]=t,i[e]=r,e=n}}var Yt=class{constructor(e,t,n){this.minPoint=n,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=qi.from(e,t,n)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){Pn(this.active,e),Pn(this.activeTo,e),Pn(this.activeRank,e),this.minActive=cl(this.active,this.activeTo)}addActive(e){let t=0,{value:n,to:r,rank:s}=this.cursor;for(;t-1&&(this.activeTo[r]-this.cursor.from||this.active[r].endSide-this.cursor.startSide)<0){if(this.activeTo[r]>e){this.to=this.activeTo[r],this.endSide=this.active[r].endSide;break}this.removeActive(r),n&&Pn(n,r)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let s=this.cursor.value;if(!s.point)this.addActive(n),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&n[r]=0&&!(this.activeRank[n]e||this.activeTo[n]==e&&this.active[n].endSide>=this.point.endSide)&&t.push(this.active[n]);return t.reverse()}openEnd(e){let t=0;for(let n=this.activeTo.length-1;n>=0&&this.activeTo[n]>e;n--)t++;return t}};function hl(i,e,t,n,r,s){i.goto(e),t.goto(n);let O=n+r,o=n,l=n-e;for(;;){let a=i.to+l-t.to||i.endSide-t.endSide,h=a<0?i.to+l:t.to,c=Math.min(h,O);if(i.point||t.point?i.point&&t.point&&(i.point==t.point||i.point.eq(t.point))&&as(i.activeForPoint(i.to),t.activeForPoint(t.to))||s.comparePoint(o,c,i.point,t.point):c>o&&!as(i.active,t.active)&&s.compareRange(o,c,i.active,t.active),h>O)break;o=h,a<=0&&i.next(),a>=0&&t.next()}}function as(i,e){if(i.length!=e.length)return!1;for(let t=0;t=e;n--)i[n+1]=i[n];i[e]=t}function cl(i,e){let t=-1,n=1e9;for(let r=0;r=e)return r;if(r==i.length)break;s+=i.charCodeAt(r)==9?t-s%t:1,r=ue(i,r)}return n===!0?-1:i.length}var fs="\u037C",kl=typeof Symbol>"u"?"__"+fs:Symbol.for(fs),us=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),vl=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},Ce=class{constructor(e,t){this.rules=[];let{finish:n}=t||{};function r(O){return/^@/.test(O)?[O]:O.split(/,\s*/)}function s(O,o,l,a){let h=[],c=/^@(\w+)\b/.exec(O[0]),f=c&&c[1]=="keyframes";if(c&&o==null)return l.push(O[0]+";");for(let d in o){let p=o[d];if(/&/.test(d))s(d.split(/,\s*/).map(m=>O.map($=>m.replace(/&/,$))).reduce((m,$)=>m.concat($)),p,l);else if(p&&typeof p=="object"){if(!c)throw new RangeError("The value of a property ("+d+") should be a primitive value.");s(r(d),p,h,f)}else p!=null&&h.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(h.length||f)&&l.push((n&&!c&&!a?O.map(n):O).join(", ")+" {"+h.join(" ")+"}")}for(let O in e)s(r(O),e[O],this.rules)}getRules(){return this.rules.join(` -`)}static newName(){let e=vl[kl]||1;return vl[kl]=e+1,fs+e.toString(36)}static mount(e,t){(e[us]||new ds(e)).mount(Array.isArray(t)?t:[t])}},Tl=new Map,ds=class{constructor(e){let t=e.ownerDocument||e,n=t.defaultView;if(!e.head&&e.adoptedStyleSheets&&n.CSSStyleSheet){let r=Tl.get(t);if(r)return e.adoptedStyleSheets=[r.sheet,...e.adoptedStyleSheets],e[us]=r;this.sheet=new n.CSSStyleSheet,e.adoptedStyleSheets=[this.sheet,...e.adoptedStyleSheets],Tl.set(t,this)}else{this.styleTag=t.createElement("style");let r=e.head||e;r.insertBefore(this.styleTag,r.firstChild)}this.modules=[],e[us]=this}mount(e){let t=this.sheet,n=0,r=0;for(let s=0;s-1&&(this.modules.splice(o,1),r--,o=-1),o==-1){if(this.modules.splice(r++,0,O),t)for(let l=0;l",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},Xl=typeof navigator<"u"&&/Chrome\/(\d+)/.exec(navigator.userAgent),fP=typeof navigator<"u"&&/Gecko\/\d+/.test(navigator.userAgent),gd=typeof navigator<"u"&&/Mac/.test(navigator.platform),Qd=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),Sd=gd||Xl&&+Xl[1]<57;for(te=0;te<10;te++)at[48+te]=at[96+te]=String(te);var te;for(te=1;te<=24;te++)at[te+111]="F"+te;var te;for(te=65;te<=90;te++)at[te]=String.fromCharCode(te+32),li[te]=String.fromCharCode(te);var te;for(Rn in at)li.hasOwnProperty(Rn)||(li[Rn]=at[Rn]);var Rn;function zl(i){var e=Sd&&(i.ctrlKey||i.altKey||i.metaKey)||Qd&&i.shiftKey&&i.key&&i.key.length==1||i.key=="Unidentified",t=!e&&i.key||(i.shiftKey?li:at)[i.keyCode]||i.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function Bn(i){let e;return i.nodeType==11?e=i.getSelection?i:i.ownerDocument:e=i,e.getSelection()}function Ss(i,e){return e?i==e||i.contains(e.nodeType!=1?e.parentNode:e):!1}function yd(i){let e=i.activeElement;for(;e&&e.shadowRoot;)e=e.shadowRoot.activeElement;return e}function An(i,e){if(!e.anchorNode)return!1;try{return Ss(i,e.anchorNode)}catch{return!1}}function Ii(i){return i.nodeType==3?Et(i,0,i.nodeValue.length).getClientRects():i.nodeType==1?i.getClientRects():[]}function Dn(i,e,t,n){return t?Wl(i,e,t,n,-1)||Wl(i,e,t,n,1):!1}function Ln(i){for(var e=0;;e++)if(i=i.previousSibling,!i)return e}function Wl(i,e,t,n,r){for(;;){if(i==t&&e==n)return!0;if(e==(r<0?0:bt(i))){if(i.nodeName=="DIV")return!1;let s=i.parentNode;if(!s||s.nodeType!=1)return!1;e=Ln(i)+(r<0?0:1),i=s}else if(i.nodeType==1){if(i=i.childNodes[e+(r<0?-1:0)],i.nodeType==1&&i.contentEditable=="false")return!1;e=r<0?bt(i):0}else return!1}}function bt(i){return i.nodeType==3?i.nodeValue.length:i.childNodes.length}function tO(i,e){let t=e?i.left:i.right;return{left:t,right:t,top:i.top,bottom:i.bottom}}function Pd(i){return{left:0,right:i.innerWidth,top:0,bottom:i.innerHeight}}function bd(i,e,t,n,r,s,O,o){let l=i.ownerDocument,a=l.defaultView||window;for(let h=i,c=!1;h&&!c;)if(h.nodeType==1){let f,d=h==l.body;if(d)f=Pd(a);else{if(/^(fixed|sticky)$/.test(getComputedStyle(h).position)&&(c=!0),h.scrollHeight<=h.clientHeight&&h.scrollWidth<=h.clientWidth){h=h.assignedSlot||h.parentNode;continue}let $=h.getBoundingClientRect();f={left:$.left,right:$.left+h.clientWidth,top:$.top,bottom:$.top+h.clientHeight}}let p=0,m=0;if(r=="nearest")e.top0&&e.bottom>f.bottom+m&&(m=e.bottom-f.bottom+m+O)):e.bottom>f.bottom&&(m=e.bottom-f.bottom+O,t<0&&e.top-m0&&e.right>f.right+p&&(p=e.right-f.right+p+s)):e.right>f.right&&(p=e.right-f.right+s,t<0&&e.leftt.clientHeight||t.scrollWidth>t.clientWidth)return t;t=t.assignedSlot||t.parentNode}else if(t.nodeType==11)t=t.host;else break;return null}var ys=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:n}=e;this.set(t,Math.min(e.anchorOffset,t?bt(t):0),n,Math.min(e.focusOffset,n?bt(n):0))}set(e,t,n,r){this.anchorNode=e,this.anchorOffset=t,this.focusNode=n,this.focusOffset=r}},ai=null;function ca(i){if(i.setActive)return i.setActive();if(ai)return i.focus(ai);let e=[];for(let t=i;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(i.focus(ai==null?{get preventScroll(){return ai={preventScroll:!0},!0}}:void 0),!ai){ai=!1;for(let t=0;tMath.max(1,i.scrollHeight-i.clientHeight-4)}var xe=class i{constructor(e,t,n=!0){this.node=e,this.offset=t,this.precise=n}static before(e,t){return new i(e.parentNode,Ln(e),t)}static after(e,t){return new i(e.parentNode,Ln(e)+1,t)}},iO=[],D=class i{constructor(){this.parent=null,this.dom=null,this.flags=2}get overrideDOMText(){return null}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e){let t=this.posAtStart;for(let n of this.children){if(n==e)return t;t+=n.length+n.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}sync(e,t){if(this.flags&2){let n=this.dom,r=null,s;for(let O of this.children){if(O.flags&7){if(!O.dom&&(s=r?r.nextSibling:n.firstChild)){let o=i.get(s);(!o||!o.parent&&o.canReuseDOM(O))&&O.reuseDOM(s)}O.sync(e,t),O.flags&=-8}if(s=r?r.nextSibling:n.firstChild,t&&!t.written&&t.node==n&&s!=O.dom&&(t.written=!0),O.dom.parentNode==n)for(;s&&s!=O.dom;)s=Vl(s);else n.insertBefore(O.dom,s);r=O.dom}for(s=r?r.nextSibling:n.firstChild,s&&t&&t.node==n&&(t.written=!0);s;)s=Vl(s)}else if(this.flags&1)for(let n of this.children)n.flags&7&&(n.sync(e,t),n.flags&=-8)}reuseDOM(e){}localPosFromDOM(e,t){let n;if(e==this.dom)n=this.dom.childNodes[t];else{let r=bt(e)==0?0:t==0?-1:1;for(;;){let s=e.parentNode;if(s==this.dom)break;r==0&&s.firstChild!=s.lastChild&&(e==s.firstChild?r=-1:r=1),e=s}r<0?n=e:n=e.nextSibling}if(n==this.dom.firstChild)return 0;for(;n&&!i.get(n);)n=n.nextSibling;if(!n)return this.length;for(let r=0,s=0;;r++){let O=this.children[r];if(O.dom==n)return s;s+=O.length+O.breakAfter}}domBoundsAround(e,t,n=0){let r=-1,s=-1,O=-1,o=-1;for(let l=0,a=n,h=n;lt)return c.domBoundsAround(e,t,a);if(f>=e&&r==-1&&(r=l,s=a),a>t&&c.dom.parentNode==this.dom){O=l,o=h;break}h=f,a=f+c.breakAfter}return{from:s,to:o<0?n+this.length:o,startDOM:(r?this.children[r-1].dom.nextSibling:null)||this.dom.firstChild,endDOM:O=0?this.children[O].dom:null}}markDirty(e=!1){this.flags|=2,this.markParentsDirty(e)}markParentsDirty(e){for(let t=this.parent;t;t=t.parent){if(e&&(t.flags|=2),t.flags&1)return;t.flags|=1,e=!1}}setParent(e){this.parent!=e&&(this.parent=e,this.flags&7&&this.markParentsDirty(!0))}setDOM(e){this.dom&&(this.dom.cmView=null),this.dom=e,e.cmView=this}get rootView(){for(let e=this;;){let t=e.parent;if(!t)return e;e=t}}replaceChildren(e,t,n=iO){this.markDirty();for(let r=e;rthis.pos||e==this.pos&&(t>0||this.i==0||this.children[this.i-1].breakAfter))return this.off=e-this.pos,this;let n=this.children[--this.i];this.pos-=n.length+n.breakAfter}}};function da(i,e,t,n,r,s,O,o,l){let{children:a}=i,h=a.length?a[e]:null,c=s.length?s[s.length-1]:null,f=c?c.breakAfter:O;if(!(e==n&&h&&!O&&!f&&s.length<2&&h.merge(t,r,s.length?c:null,t==0,o,l))){if(n0&&(!O&&s.length&&h.merge(t,h.length,s[0],!1,o,0)?h.breakAfter=s.shift().breakAfter:(ts)&&this.lineBreak(),r=O}return this.findPointBefore(n,t),this}readTextNode(e){let t=e.nodeValue;for(let n of this.points)n.node==e&&(n.pos=this.text.length+Math.min(n.offset,t.length));for(let n=0,r=this.lineSeparator?null:/\r\n?|\n/g;;){let s=-1,O=1,o;if(this.lineSeparator?(s=t.indexOf(this.lineSeparator,n),O=this.lineSeparator.length):(o=r.exec(t))&&(s=o.index,O=o[0].length),this.append(t.slice(n,s<0?t.length:s)),s<0)break;if(this.lineBreak(),O>1)for(let l of this.points)l.node==e&&l.pos>this.text.length&&(l.pos-=O-1);n=s+O}}readNode(e){if(e.cmIgnore)return;let t=D.get(e),n=t&&t.overrideDOMText;if(n!=null){this.findPointInside(e,n.length);for(let r=n.iter();!r.next().done;)r.lineBreak?this.lineBreak():this.append(r.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let n of this.points)n.node==e&&e.childNodes[n.offset]==t&&(n.pos=this.text.length)}findPointInside(e,t){for(let n of this.points)(e.nodeType==3?n.node==e:e.contains(n.node))&&(n.pos=this.text.length+Math.min(t,n.offset))}};function Zl(i){return i.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(i.nodeName)}var Fn=class{constructor(e,t){this.node=e,this.offset=t,this.pos=-1}},Xe=typeof navigator<"u"?navigator:{userAgent:"",vendor:"",platform:""},Ps=typeof document<"u"?document:{documentElement:{style:{}}},bs=/Edge\/(\d+)/.exec(Xe.userAgent),$a=/MSIE \d/.test(Xe.userAgent),xs=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(Xe.userAgent),ar=!!($a||xs||bs),Cl=!ar&&/gecko\/(\d+)/i.test(Xe.userAgent),ps=!ar&&/Chrome\/(\d+)/.exec(Xe.userAgent),ql="webkitFontSmoothing"in Ps.documentElement.style,ma=!ar&&/Apple Computer/.test(Xe.vendor),Ul=ma&&(/Mobile\/\w+/.test(Xe.userAgent)||Xe.maxTouchPoints>2),X={mac:Ul||/Mac/.test(Xe.platform),windows:/Win/.test(Xe.platform),linux:/Linux|X11/.test(Xe.platform),ie:ar,ie_version:$a?Ps.documentMode||6:xs?+xs[1]:bs?+bs[1]:0,gecko:Cl,gecko_version:Cl?+(/Firefox\/(\d+)/.exec(Xe.userAgent)||[0,0])[1]:0,chrome:!!ps,chrome_version:ps?+ps[1]:0,ios:Ul,android:/Android\b/.test(Xe.userAgent),webkit:ql,safari:ma,webkit_version:ql?+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]:0,tabSize:Ps.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"},vd=256,ht=class i extends D{constructor(e){super(),this.text=e}get length(){return this.text.length}createDOM(e){this.setDOM(e||document.createTextNode(this.text))}sync(e,t){this.dom||this.createDOM(),this.dom.nodeValue!=this.text&&(t&&t.node==this.dom&&(t.written=!0),this.dom.nodeValue=this.text)}reuseDOM(e){e.nodeType==3&&this.createDOM(e)}merge(e,t,n){return this.flags&8||n&&(!(n instanceof i)||this.length-(t-e)+n.length>vd||n.flags&8)?!1:(this.text=this.text.slice(0,e)+(n?n.text:"")+this.text.slice(t),this.markDirty(),!0)}split(e){let t=new i(this.text.slice(e));return this.text=this.text.slice(0,e),this.markDirty(),t.flags|=this.flags&8,t}localPosFromDOM(e,t){return e==this.dom?t:t?this.text.length:0}domAtPos(e){return new xe(this.dom,e)}domBoundsAround(e,t,n){return{from:n,to:n+this.length,startDOM:this.dom,endDOM:this.dom.nextSibling}}coordsAt(e,t){return Td(this.dom,e,t)}},xt=class i extends D{constructor(e,t=[],n=0){super(),this.mark=e,this.children=t,this.length=n;for(let r of t)r.setParent(this)}setAttrs(e){if(fa(e),this.mark.class&&(e.className=this.mark.class),this.mark.attrs)for(let t in this.mark.attrs)e.setAttribute(t,this.mark.attrs[t]);return e}canReuseDOM(e){return super.canReuseDOM(e)&&!((this.flags|e.flags)&8)}reuseDOM(e){e.nodeName==this.mark.tagName.toUpperCase()&&(this.setDOM(e),this.flags|=6)}sync(e,t){this.dom?this.flags&4&&this.setAttrs(this.dom):this.setDOM(this.setAttrs(document.createElement(this.mark.tagName))),super.sync(e,t)}merge(e,t,n,r,s,O){return n&&(!(n instanceof i&&n.mark.eq(this.mark))||e&&s<=0||te&&t.push(n=e&&(r=s),n=l,s++}let O=this.length-e;return this.length=e,r>-1&&(this.children.length=r,this.markDirty()),new i(this.mark,t,O)}domAtPos(e){return ga(this,e)}coordsAt(e,t){return Sa(this,e,t)}};function Td(i,e,t){let n=i.nodeValue.length;e>n&&(e=n);let r=e,s=e,O=0;e==0&&t<0||e==n&&t>=0?X.chrome||X.gecko||(e?(r--,O=1):s=0)?0:o.length-1];return X.safari&&!O&&l.width==0&&(l=Array.prototype.find.call(o,a=>a.width)||l),O?tO(l,O<0):l||null}var Jn=class i extends D{constructor(e,t,n){super(),this.widget=e,this.length=t,this.side=n,this.prevWidget=null}static create(e,t,n){return new i(e,t,n)}split(e){let t=i.create(this.widget,this.length-e,this.side);return this.length-=e,t}sync(e){(!this.dom||!this.widget.updateDOM(this.dom,e))&&(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(e)),this.dom.contentEditable="false")}getSide(){return this.side}merge(e,t,n,r,s,O){return n&&(!(n instanceof i)||!this.widget.compare(n.widget)||e>0&&s<=0||t0)?xe.before(this.dom):xe.after(this.dom,e==this.length)}domBoundsAround(){return null}coordsAt(e,t){let n=this.widget.coordsAt(this.dom,e,t);if(n)return n;let r=this.dom.getClientRects(),s=null;if(!r.length)return null;let O=this.side?this.side<0:e>0;for(let o=O?r.length-1:0;s=r[o],!(e>0?o==0:o==r.length-1||s.top0?xe.before(this.dom):xe.after(this.dom)}localPosFromDOM(){return 0}domBoundsAround(){return null}coordsAt(e){return this.dom.getBoundingClientRect()}get overrideDOMText(){return U.empty}get isHidden(){return!0}};ht.prototype.children=Jn.prototype.children=Bi.prototype.children=iO;function ga(i,e){let t=i.dom,{children:n}=i,r=0;for(let s=0;rs&&e0;s--){let O=n[s-1];if(O.dom.parentNode==t)return O.domAtPos(O.length)}for(let s=r;s0&&e instanceof xt&&r.length&&(n=r[r.length-1])instanceof xt&&n.mark.eq(e.mark)?Qa(n,e.children[0],t-1):(r.push(e),e.setParent(i)),i.length+=e.length}function Sa(i,e,t){let n=null,r=-1,s=null,O=-1;function o(a,h){for(let c=0,f=0;c=h&&(d.children.length?o(d,h-f):(!s||s.isHidden&&t>0)&&(p>h||f==p&&d.getSide()>0)?(s=d,O=h-f):(f-1?1:0)!=r.length-(t&&r.indexOf(t)>-1?1:0))return!1;for(let s of n)if(s!=t&&(r.indexOf(s)==-1||i[s]!==e[s]))return!1;return!0}function ks(i,e,t){let n=null;if(e)for(let r in e)t&&r in t||i.removeAttribute(n=r);if(t)for(let r in t)e&&e[r]==t[r]||i.setAttribute(n=r,t[r]);return!!n}function zd(i){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new kt(e,t,t,n,e.widget||null,!1)}static replace(e){let t=!!e.block,n,r;if(e.isBlockGap)n=-5e8,r=4e8;else{let{start:s,end:O}=ya(e,t);n=(s?t?-3e8:-1:5e8)-1,r=(O?t?2e8:1:-6e8)+1}return new kt(e,n,r,t,e.widget||null,!0)}static line(e){return new Li(e)}static set(e,t=!1){return L.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};M.none=L.empty;var Di=class i extends M{constructor(e){let{start:t,end:n}=ya(e);super(t?-1:5e8,n?1:-6e8,null,e),this.tagName=e.tagName||"span",this.class=e.class||"",this.attrs=e.attributes||null}eq(e){var t,n;return this==e||e instanceof i&&this.tagName==e.tagName&&(this.class||((t=this.attrs)===null||t===void 0?void 0:t.class))==(e.class||((n=e.attrs)===null||n===void 0?void 0:n.class))&&nO(this.attrs,e.attrs,"class")}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}};Di.prototype.point=!1;var Li=class i extends M{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof i&&this.spec.class==e.spec.class&&nO(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}};Li.prototype.mapMode=ae.TrackBefore;Li.prototype.point=!0;var kt=class i extends M{constructor(e,t,n,r,s,O){super(t,n,s,e),this.block=r,this.isReplace=O,this.mapMode=r?t<=0?ae.TrackBefore:ae.TrackAfter:ae.TrackDel}get type(){return this.startSide=5||this.widget.lineBreaks>0)}eq(e){return e instanceof i&&Wd(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}};kt.prototype.point=!0;function ya(i,e=!1){let{inclusiveStart:t,inclusiveEnd:n}=i;return t==null&&(t=i.inclusive),n==null&&(n=i.inclusive),{start:t??e,end:n??e}}function Wd(i,e){return i==e||!!(i&&e&&i.compare(e))}function vs(i,e,t,n=0){let r=t.length-1;r>=0&&t[r]+n>=i?t[r]=Math.max(t[r],e):t.push(i,e)}var Te=class i extends D{constructor(){super(...arguments),this.children=[],this.length=0,this.prevAttrs=void 0,this.attrs=null,this.breakAfter=0}merge(e,t,n,r,s,O){if(n){if(!(n instanceof i))return!1;this.dom||n.transferDOM(this)}return r&&this.setDeco(n?n.attrs:null),pa(this,e,t,n?n.children:[],s,O),!0}split(e){let t=new i;if(t.breakAfter=this.breakAfter,this.length==0)return t;let{i:n,off:r}=this.childPos(e);r&&(t.append(this.children[n].split(r),0),this.children[n].merge(r,this.children[n].length,null,!1,0,0),n++);for(let s=n;s0&&this.children[n-1].length==0;)this.children[--n].destroy();return this.children.length=n,this.markDirty(),this.length=e,t}transferDOM(e){this.dom&&(this.markDirty(),e.setDOM(this.dom),e.prevAttrs=this.prevAttrs===void 0?this.attrs:this.prevAttrs,this.prevAttrs=void 0,this.dom=null)}setDeco(e){nO(this.attrs,e)||(this.dom&&(this.prevAttrs=this.attrs,this.markDirty()),this.attrs=e)}append(e,t){Qa(this,e,t)}addLineDeco(e){let t=e.spec.attributes,n=e.spec.class;t&&(this.attrs=ws(t,this.attrs||{})),n&&(this.attrs=ws({class:n},this.attrs||{}))}domAtPos(e){return ga(this,e)}reuseDOM(e){e.nodeName=="DIV"&&(this.setDOM(e),this.flags|=6)}sync(e,t){var n;this.dom?this.flags&4&&(fa(this.dom),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0):(this.setDOM(document.createElement("div")),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0),this.prevAttrs!==void 0&&(ks(this.dom,this.prevAttrs,this.attrs),this.dom.classList.add("cm-line"),this.prevAttrs=void 0),super.sync(e,t);let r=this.dom.lastChild;for(;r&&D.get(r)instanceof xt;)r=r.lastChild;if(!r||!this.length||r.nodeName!="BR"&&((n=D.get(r))===null||n===void 0?void 0:n.isEditable)==!1&&(!X.ios||!this.children.some(s=>s instanceof ht))){let s=document.createElement("BR");s.cmIgnore=!0,this.dom.appendChild(s)}}measureTextSize(){if(this.children.length==0||this.length>20)return null;let e=0,t;for(let n of this.children){if(!(n instanceof ht)||/[^ -~]/.test(n.text))return null;let r=Ii(n.dom);if(r.length!=1)return null;e+=r[0].width,t=r[0].height}return e?{lineHeight:this.dom.getBoundingClientRect().height,charWidth:e/this.length,textHeight:t}:null}coordsAt(e,t){let n=Sa(this,e,t);if(!this.children.length&&n&&this.parent){let{heightOracle:r}=this.parent.view.viewState,s=n.bottom-n.top;if(Math.abs(s-r.lineHeight)<2&&r.textHeight=t){if(s instanceof i)return s;if(O>t)break}r=O+s.breakAfter}return null}},Ni=class i extends D{constructor(e,t,n){super(),this.widget=e,this.length=t,this.type=n,this.breakAfter=0,this.prevWidget=null}merge(e,t,n,r,s,O){return n&&(!(n instanceof i)||!this.widget.compare(n.widget)||e>0&&s<=0||t0;){if(this.textOff==this.text.length){let{value:s,lineBreak:O,done:o}=this.cursor.next(this.skip);if(this.skip=0,o)throw new Error("Ran out of text content when drawing inline views");if(O){this.posCovered()||this.getLine(),this.content.length?this.content[this.content.length-1].breakAfter=1:this.breakAtStart=1,this.flushBuffer(),this.curLine=null,this.atCursorPos=!0,e--;continue}else this.text=s,this.textOff=0}let r=Math.min(this.text.length-this.textOff,e,512);this.flushBuffer(t.slice(t.length-n)),this.getLine().append(Vn(new ht(this.text.slice(this.textOff,this.textOff+r)),t),n),this.atCursorPos=!0,this.textOff+=r,e-=r,n=0}}span(e,t,n,r){this.buildText(t-e,n,r),this.pos=t,this.openStart<0&&(this.openStart=r)}point(e,t,n,r,s,O){if(this.disallowBlockEffectsFor[O]&&n instanceof kt){if(n.block)throw new RangeError("Block decorations may not be specified via plugins");if(t>this.doc.lineAt(this.pos).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}let o=t-e;if(n instanceof kt)if(n.block){let{type:l}=n;l==H.WidgetAfter&&!this.posCovered()&&this.getLine(),this.addBlockWidget(new Ni(n.widget||new Kn("div"),o,l))}else{let l=Jn.create(n.widget||new Kn("span"),o,o?0:n.startSide),a=this.atCursorPos&&!l.isEditable&&s<=r.length&&(e0),h=!l.isEditable&&(er.length||n.startSide<=0),c=this.getLine();this.pendingBuffer==2&&!a&&!l.isEditable&&(this.pendingBuffer=0),this.flushBuffer(r),a&&(c.append(Vn(new Bi(1),r),s),s=r.length+Math.max(0,s-r.length)),c.append(Vn(l,r),s),this.atCursorPos=h,this.pendingBuffer=h?er.length?1:2:0,this.pendingBuffer&&(this.bufferMarks=r.slice())}else this.doc.lineAt(this.pos).from==this.pos&&this.getLine().addLineDeco(n);o&&(this.textOff+o<=this.text.length?this.textOff+=o:(this.skip+=o-(this.text.length-this.textOff),this.text="",this.textOff=0),this.pos=t),this.openStart<0&&(this.openStart=s)}static build(e,t,n,r,s){let O=new i(e,t,n,s);return O.openEnd=L.spans(r,t,n,O),O.openStart<0&&(O.openStart=O.openEnd),O.finish(O.openEnd),O}};function Vn(i,e){for(let t of e)i=new xt(t,[i],i.length);return i}var Kn=class extends wt{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}},Pa=W.define(),ba=W.define(),xa=W.define(),wa=W.define(),Ts=W.define(),ka=W.define(),va=W.define(),Ta=W.define({combine:i=>i.some(e=>e)}),Xa=W.define({combine:i=>i.some(e=>e)}),er=class i{constructor(e,t="nearest",n="nearest",r=5,s=5){this.range=e,this.y=t,this.x=n,this.yMargin=r,this.xMargin=s}map(e){return e.empty?this:new i(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin)}},_l=j.define({map:(i,e)=>i.map(e)});function Ke(i,e,t){let n=i.facet(wa);n.length?n[0](e):window.onerror?window.onerror(String(e),t,void 0,void 0,e):t?console.error(t+":",e):console.error(e)}var hr=W.define({combine:i=>i.length?i[0]:!0}),Rd=0,Ui=W.define(),Ee=class i{constructor(e,t,n,r){this.id=e,this.create=t,this.domEventHandlers=n,this.extension=r(this)}static define(e,t){let{eventHandlers:n,provide:r,decorations:s}=t||{};return new i(Rd++,e,n,O=>{let o=[Ui.of(O)];return s&&o.push(Hi.of(l=>{let a=l.plugin(O);return a?s(a):M.none})),r&&o.push(r(O)),o})}static fromClass(e,t){return i.define(n=>new e(n),t)}},Gi=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(n){if(Ke(t.state,n,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.create(e)}catch(t){Ke(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(n){Ke(e.state,n,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},za=W.define(),rO=W.define(),Hi=W.define(),sO=W.define(),Wa=W.define();function Ra(i){let e=0,t=0,n=0,r=0;for(let s of i.state.facet(Wa)){let O=s(i);O&&(O.left!=null&&(e=Math.max(e,O.left)),O.right!=null&&(t=Math.max(t,O.right)),O.top!=null&&(n=Math.max(n,O.top)),O.bottom!=null&&(r=Math.max(r,O.bottom)))}return{left:e,right:t,top:n,bottom:r}}var Yi=W.define(),et=class i{constructor(e,t,n,r){this.fromA=e,this.toA=t,this.fromB=n,this.toB=r}join(e){return new i(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,n=this;for(;t>0;t--){let r=e[t-1];if(!(r.fromA>n.toA)){if(r.toAh)break;s+=2}if(!l)return n;new i(l.fromA,l.toA,l.fromB,l.toB).addToSet(n),O=l.toA,o=l.toB}}},tr=class i{constructor(e,t,n){this.view=e,this.state=t,this.transactions=n,this.flags=0,this.startState=e.state,this.changes=ge.empty(this.startState.doc.length);for(let s of n)this.changes=this.changes.compose(s.changes);let r=[];this.changes.iterChangedRanges((s,O,o,l)=>r.push(new et(s,O,o,l))),this.changedRanges=r}static create(e,t,n){return new i(e,t,n)}get viewportChanged(){return(this.flags&4)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&10)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},K=function(i){return i[i.LTR=0]="LTR",i[i.RTL=1]="RTL",i}(K||(K={})),Xs=K.LTR,Vd=K.RTL;function Va(i){let e=[];for(let t=0;t=t){if(o.level==n)return O;(s<0||(r!=0?r<0?o.fromt:e[s].level>o.level))&&(s=O)}}if(s<0)throw new RangeError("Index out of range");return s}},N=[];function Yd(i,e){let t=i.length,n=e==Xs?1:2,r=e==Xs?2:1;if(!i||n==1&&!Ud.test(i))return Za(t);for(let O=0,o=n,l=n;O=0;f-=3)if(Fe[f+1]==-h){let d=Fe[f+2],p=d&2?n:d&4?d&1?r:n:0;p&&(N[O]=N[Fe[f]]=p),o=f;break}}else{if(Fe.length==189)break;Fe[o++]=O,Fe[o++]=a,Fe[o++]=l}else if((c=N[O])==2||c==1){let f=c==n;l=f?0:1;for(let d=o-3;d>=0;d-=3){let p=Fe[d+2];if(p&2)break;if(f)Fe[d+2]|=2;else{if(p&4)break;Fe[d+2]|=4}}}for(let O=0;Oo;){let h=a,c=N[--a]!=2;for(;a>o&&c==(N[a-1]!=2);)a--;s.push(new yt(a,h,c?2:1))}else s.push(new yt(o,O,0))}else for(let O=0;O0&&t.length&&(t.every(({fromA:o,toA:l})=>lthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0);let n=this.view.inputState.composing<0?null:jd(this.view,e.changes);if(this.hasComposition){this.markedForComposition.clear();let{from:o,to:l}=this.hasComposition;t=new et(o,l,e.changes.mapPos(o,-1),e.changes.mapPos(l,1)).addToSet(t.slice())}this.hasComposition=n?{from:n.range.fromB,to:n.range.toB}:null,(X.ie||X.chrome)&&!n&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let r=this.decorations,s=this.updateDeco(),O=Ed(r,s,e.changes);return t=et.extendWithRanges(t,O),!(this.flags&7)&&t.length==0?!1:(this.updateInner(t,e.startState.doc.length,n),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t,n){this.view.viewState.mustMeasureContent=!0,this.updateChildren(e,t,n);let{observer:r}=this.view;r.ignore(()=>{this.dom.style.height=this.view.viewState.contentHeight+"px",this.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let O=X.chrome||X.ios?{node:r.selectionRange.focusNode,written:!1}:void 0;this.sync(this.view,O),this.flags&=-8,O&&(O.written||r.selectionRange.focusNode!=O.node)&&(this.forceSelection=!0),this.dom.style.height=""}),this.markedForComposition.forEach(O=>O.flags&=-9);let s=[];if(this.view.viewport.from||this.view.viewport.to=0?r[O]:null;if(!o)break;let{fromA:l,toA:a,fromB:h,toB:c}=o,f,d,p,m;if(n&&n.range.fromBh){let y=ji.build(this.view.state.doc,h,n.range.fromB,this.decorations,this.dynamicDecorationMap),w=ji.build(this.view.state.doc,n.range.toB,c,this.decorations,this.dynamicDecorationMap);d=y.breakAtStart,p=y.openStart,m=w.openEnd;let x=this.compositionView(n);w.breakAtStart?x.breakAfter=1:w.content.length&&x.merge(x.length,x.length,w.content[0],!1,w.openStart,0)&&(x.breakAfter=w.content[0].breakAfter,w.content.shift()),y.content.length&&x.merge(0,0,y.content[y.content.length-1],!0,0,y.openEnd)&&y.content.pop(),f=y.content.concat(x).concat(w.content)}else({content:f,breakAtStart:d,openStart:p,openEnd:m}=ji.build(this.view.state.doc,h,c,this.decorations,this.dynamicDecorationMap));let{i:$,off:g}=s.findPos(a,1),{i:b,off:k}=s.findPos(l,-1);da(this,b,k,$,g,f,d,p,m)}n&&this.fixCompositionDOM(n)}compositionView(e){let t=new ht(e.text.nodeValue);t.flags|=8;for(let{deco:r}of e.marks)t=new xt(r,[t],t.length);let n=new Te;return n.append(t,0),n}fixCompositionDOM(e){let t=(s,O)=>{O.flags|=8,this.markedForComposition.add(O);let o=D.get(s);o!=O&&(o&&(o.dom=null),O.setDOM(s))},n=this.childPos(e.range.fromB,1),r=this.children[n.i];t(e.line,r);for(let s=e.marks.length-1;s>=-1;s--)n=r.childPos(n.off,1),r=r.children[n.i],t(s>=0?e.marks[s].node:e.text,r)}updateSelection(e=!1,t=!1){(e||!this.view.observer.selectionRange.focusNode)&&this.view.observer.readSelectionRange();let n=this.view.root.activeElement,r=n==this.dom,s=!r&&An(this.dom,this.view.observer.selectionRange)&&!(n&&this.dom.contains(n));if(!(r||t||s))return;let O=this.forceSelection;this.forceSelection=!1;let o=this.view.state.selection.main,l=this.domAtPos(o.anchor),a=o.empty?l:this.domAtPos(o.head);if(X.gecko&&o.empty&&!this.hasComposition&&Ad(l)){let c=document.createTextNode("");this.view.observer.ignore(()=>l.node.insertBefore(c,l.node.childNodes[l.offset]||null)),l=a=new xe(c,0),O=!0}let h=this.view.observer.selectionRange;(O||!h.focusNode||!Dn(l.node,l.offset,h.anchorNode,h.anchorOffset)||!Dn(a.node,a.offset,h.focusNode,h.focusOffset))&&(this.view.observer.ignore(()=>{X.android&&X.chrome&&this.dom.contains(h.focusNode)&&Md(h.focusNode,this.dom)&&(this.dom.blur(),this.dom.focus({preventScroll:!0}));let c=Bn(this.view.root);if(c)if(o.empty){if(X.gecko){let f=Gd(l.node,l.offset);if(f&&f!=3){let d=Ua(l.node,l.offset,f==1?1:-1);d&&(l=new xe(d,f==1?0:d.nodeValue.length))}}c.collapse(l.node,l.offset),o.bidiLevel!=null&&h.cursorBidiLevel!=null&&(h.cursorBidiLevel=o.bidiLevel)}else if(c.extend){c.collapse(l.node,l.offset);try{c.extend(a.node,a.offset)}catch{}}else{let f=document.createRange();o.anchor>o.head&&([l,a]=[a,l]),f.setEnd(a.node,a.offset),f.setStart(l.node,l.offset),c.removeAllRanges(),c.addRange(f)}s&&this.view.root.activeElement==this.dom&&(this.dom.blur(),n&&n.focus())}),this.view.observer.setSelectionRange(l,a)),this.impreciseAnchor=l.precise?null:new xe(h.anchorNode,h.anchorOffset),this.impreciseHead=a.precise?null:new xe(h.focusNode,h.focusOffset)}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,n=Bn(e.root),{anchorNode:r,anchorOffset:s}=e.observer.selectionRange;if(!n||!t.empty||!t.assoc||!n.modify)return;let O=Te.find(this,t.head);if(!O)return;let o=O.posAtStart;if(t.head==o||t.head==o+O.length)return;let l=this.coordsAt(t.head,-1),a=this.coordsAt(t.head,1);if(!l||!a||l.bottom>a.top)return;let h=this.domAtPos(t.head+t.assoc);n.collapse(h.node,h.offset),n.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let c=e.observer.selectionRange;e.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=t.from&&n.collapse(r,s)}nearest(e){for(let t=e;t;){let n=D.get(t);if(n&&n.rootView==this)return n;t=t.parentNode}return null}posFromDOM(e,t){let n=this.nearest(e);if(!n)throw new RangeError("Trying to find position for a DOM position outside of the document");return n.localPosFromDOM(e,t)+n.posAtStart}domAtPos(e){let{i:t,off:n}=this.childCursor().findPos(e,-1);for(;tO||e==O&&s.type!=H.WidgetBefore&&s.type!=H.WidgetAfter&&(!r||t==2||this.children[r-1].breakAfter||this.children[r-1].type==H.WidgetBefore&&t>-2))return s.coordsAt(e-O,t);n=O}}coordsForChar(e){let{i:t,off:n}=this.childPos(e,1),r=this.children[t];if(!(r instanceof Te))return null;for(;r.children.length;){let{i:o,off:l}=r.childPos(n,1);for(;;o++){if(o==r.children.length)return null;if((r=r.children[o]).length)break}n=l}if(!(r instanceof ht))return null;let s=ue(r.text,n);if(s==n)return null;let O=Et(r.dom,n,s).getClientRects();return!O.length||O[0].top>=O[0].bottom?null:O[0]}measureVisibleLineHeights(e){let t=[],{from:n,to:r}=e,s=this.view.contentDOM.clientWidth,O=s>Math.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,o=-1,l=this.view.textDirection==K.LTR;for(let a=0,h=0;hr)break;if(a>=n){let d=c.dom.getBoundingClientRect();if(t.push(d.height),O){let p=c.dom.lastChild,m=p?Ii(p):[];if(m.length){let $=m[m.length-1],g=l?$.right-d.left:d.right-$.left;g>o&&(o=g,this.minWidth=s,this.minWidthFrom=a,this.minWidthTo=f)}}}a=f+c.breakAfter}return t}textDirectionAt(e){let{i:t}=this.childPos(e,1);return getComputedStyle(this.children[t].dom).direction=="rtl"?K.RTL:K.LTR}measureTextSize(){for(let s of this.children)if(s instanceof Te){let O=s.measureTextSize();if(O)return O}let e=document.createElement("div"),t,n,r;return e.className="cm-line",e.style.width="99999px",e.style.position="absolute",e.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.dom.appendChild(e);let s=Ii(e.firstChild)[0];t=e.getBoundingClientRect().height,n=s?s.width/27:7,r=s?s.height:t,e.remove()}),{lineHeight:t,charWidth:n,textHeight:r}}childCursor(e=this.length){let t=this.children.length;return t&&(e-=this.children[--t].length),new Nn(this.children,e,t)}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let n=0,r=0;;r++){let s=r==t.viewports.length?null:t.viewports[r],O=s?s.from-1:this.length;if(O>n){let o=t.lineBlockAt(O).bottom-t.lineBlockAt(n).top;e.push(M.replace({widget:new nr(o),block:!0,inclusive:!0,isBlockGap:!0}).range(n,O))}if(!s)break;n=s.to+1}return M.set(e)}updateDeco(){let e=this.view.state.facet(Hi).map((t,n)=>(this.dynamicDecorationMap[n]=typeof t=="function")?t(this.view):t);for(let t=e.length;tt.anchor?-1:1),r;if(!n)return;!t.empty&&(r=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(n={left:Math.min(n.left,r.left),top:Math.min(n.top,r.top),right:Math.max(n.right,r.right),bottom:Math.max(n.bottom,r.bottom)});let s=Ra(this.view),O={left:n.left-s.left,top:n.top-s.top,right:n.right+s.right,bottom:n.bottom+s.bottom};bd(this.view.scrollDOM,O,t.head-1)return null;O+=c.text.length}if(o=o.parentNode,!o)return null;let l=D.get(o);if(l){r=s=l.posAtStart+O;break}}return{from:r,to:s,node:t}}function jd(i,e){let t=qa(i);if(!t)return null;let{from:n,to:r,node:s}=t,O=e.mapPos(n,-1),o=e.mapPos(r,1),l=s.nodeValue;if(/[\n\r]/.test(l))return null;if(o-O!=l.length){let f=e.mapPos(n,1),d=e.mapPos(r,-1);if(d-f==l.length)O=f,o=d;else if(i.state.doc.sliceString(o-l.length,o)==l)O=o-l.length;else if(i.state.doc.sliceString(O,O+l.length)==l)o=O+l.length;else return null}let{main:a}=i.state.selection;if(i.state.doc.sliceString(O,o)!=l||O>a.head||o0)n=n.childNodes[r-1],r=bt(n);else break}if(t>=0)for(let n=i,r=e;;){if(n.nodeType==3)return n;if(n.nodeType==1&&r=0)n=n.childNodes[r],r=0;else break}return null}function Gd(i,e){return i.nodeType!=1?0:(e&&i.childNodes[e-1].contentEditable=="false"?1:0)|(e0;){let a=ue(r.text,O,!1);if(n(r.text.slice(a,O))!=l)break;O=a}for(;oi?e.left-i:Math.max(0,i-e.right)}function Dd(i,e){return e.top>i?e.top-i:Math.max(0,i-e.bottom)}function $s(i,e){return i.tope.top+1}function Al(i,e){return ei.bottom?{top:i.top,left:i.left,right:i.right,bottom:e}:i}function Rs(i,e,t){let n,r,s,O,o=!1,l,a,h,c;for(let p=i.firstChild;p;p=p.nextSibling){let m=Ii(p);for(let $=0;$k||O==k&&s>b){n=p,r=g,s=b,O=k;let y=k?t0?$0)}b==0?t>g.bottom&&(!h||h.bottomg.top)&&(a=p,c=g):h&&$s(h,g)?h=jl(h,g.bottom):c&&$s(c,g)&&(c=Al(c,g.top))}}if(h&&h.bottom>=t?(n=l,r=h):c&&c.top<=t&&(n=a,r=c),!n)return{node:i,offset:0};let f=Math.max(r.left,Math.min(r.right,e));if(n.nodeType==3)return Gl(n,f,t);if(o&&n.contentEditable!="false")return Rs(n,f,t);let d=Array.prototype.indexOf.call(i.childNodes,n)+(e>=(r.left+r.right)/2?1:0);return{node:i,offset:d}}function Gl(i,e,t){let n=i.nodeValue.length,r=-1,s=1e9,O=0;for(let o=0;ot?h.top-t:t-h.bottom)-1;if(h.left-1<=e&&h.right+1>=e&&c=(h.left+h.right)/2,d=f;if((X.chrome||X.gecko)&&Et(i,o).getBoundingClientRect().left==h.right&&(d=!f),c<=0)return{node:i,offset:o+(d?1:0)};r=o+(d?1:0),s=c}}}return{node:i,offset:r>-1?r:O>0?i.nodeValue.length:0}}function Ya(i,e,t,n=-1){var r,s;let O=i.contentDOM.getBoundingClientRect(),o=O.top+i.viewState.paddingTop,l,{docHeight:a}=i.viewState,{x:h,y:c}=e,f=c-o;if(f<0)return 0;if(f>a)return i.state.doc.length;for(let y=i.viewState.heightOracle.textHeight/2,w=!1;l=i.elementAtHeight(f),l.type!=H.Text;)for(;f=n>0?l.bottom+y:l.top-y,!(f>=0&&f<=a);){if(w)return t?null:0;w=!0,n=-n}c=o+f;let d=l.from;if(di.viewport.to)return i.viewport.to==i.state.doc.length?i.state.doc.length:t?null:El(i,O,l,h,c);let p=i.dom.ownerDocument,m=i.root.elementFromPoint?i.root:p,$=m.elementFromPoint(h,c);$&&!i.contentDOM.contains($)&&($=null),$||(h=Math.max(O.left+1,Math.min(O.right-1,h)),$=m.elementFromPoint(h,c),$&&!i.contentDOM.contains($)&&($=null));let g,b=-1;if($&&((r=i.docView.nearest($))===null||r===void 0?void 0:r.isEditable)!=!1){if(p.caretPositionFromPoint){let y=p.caretPositionFromPoint(h,c);y&&({offsetNode:g,offset:b}=y)}else if(p.caretRangeFromPoint){let y=p.caretRangeFromPoint(h,c);y&&({startContainer:g,startOffset:b}=y,(!i.contentDOM.contains(g)||X.safari&&Ld(g,b,h)||X.chrome&&Nd(g,b,h))&&(g=void 0))}}if(!g||!i.docView.dom.contains(g)){let y=Te.find(i.docView,d);if(!y)return f>l.top+l.height/2?l.to:l.from;({node:g,offset:b}=Rs(y.dom,h,c))}let k=i.docView.nearest(g);if(!k)return null;if(k.isWidget&&((s=k.dom)===null||s===void 0?void 0:s.nodeType)==1){let y=k.dom.getBoundingClientRect();return e.yi.defaultLineHeight*1.5){let o=i.viewState.heightOracle.textHeight,l=Math.floor((r-t.top-(i.defaultLineHeight-o)*.5)/o);s+=l*i.viewState.heightOracle.lineLength}let O=i.state.sliceDoc(t.from,t.to);return t.from+Wn(O,s,i.state.tabSize)}function Ld(i,e,t){let n;if(i.nodeType!=3||e!=(n=i.nodeValue.length))return!1;for(let r=i.nextSibling;r;r=r.nextSibling)if(r.nodeType!=1||r.nodeName!="BR")return!1;return Et(i,n-1,n).getBoundingClientRect().left>t}function Nd(i,e,t){if(e!=0)return!1;for(let r=i;;){let s=r.parentNode;if(!s||s.nodeType!=1||s.firstChild!=r)return!1;if(s.classList.contains("cm-line"))break;r=s}let n=i.nodeType==1?i.getBoundingClientRect():Et(i,0,Math.max(i.nodeValue.length,1)).getBoundingClientRect();return t-n.left>5}function Vs(i,e){let t=i.lineBlockAt(e);if(Array.isArray(t.type)){for(let n of t.type)if(n.to>e||n.to==e&&(n.to==t.to||n.type==H.Text))return n}return t}function Hd(i,e,t,n){let r=Vs(i,e.head),s=!n||r.type!=H.Text||!(i.lineWrapping||r.widgetLineBreaks)?null:i.coordsAtPos(e.assoc<0&&e.head>r.from?e.head-1:e.head);if(s){let O=i.dom.getBoundingClientRect(),o=i.textDirectionAt(r.from),l=i.posAtCoords({x:t==(o==K.LTR)?O.right-1:O.left+1,y:(s.top+s.bottom)/2});if(l!=null)return Q.cursor(l,t?-1:1)}return Q.cursor(t?r.to:r.from,t?-1:1)}function Ml(i,e,t,n){let r=i.state.doc.lineAt(e.head),s=i.bidiSpans(r),O=i.textDirectionAt(r.from);for(let o=e,l=null;;){let a=_d(r,s,O,o,t),h=Ca;if(!a){if(r.number==(t?i.state.doc.lines:1))return o;h=` -`,r=i.state.doc.line(r.number+(t?1:-1)),s=i.bidiSpans(r),a=Q.cursor(t?r.from:r.to)}if(l){if(!l(h))return o}else{if(!n)return a;l=n(h)}o=a}}function Fd(i,e,t){let n=i.state.charCategorizer(e),r=n(t);return s=>{let O=n(s);return r==Ze.Space&&(r=O),r==O}}function Jd(i,e,t,n){let r=e.head,s=t?1:-1;if(r==(t?i.state.doc.length:0))return Q.cursor(r,e.assoc);let O=e.goalColumn,o,l=i.contentDOM.getBoundingClientRect(),a=i.coordsAtPos(r),h=i.documentTop;if(a)O==null&&(O=a.left-l.left),o=s<0?a.top:a.bottom;else{let d=i.viewState.lineBlockAt(r);O==null&&(O=Math.min(l.right-l.left,i.defaultCharacterWidth*(r-d.from))),o=(s<0?d.top:d.bottom)+h}let c=l.left+O,f=n??i.viewState.heightOracle.textHeight>>1;for(let d=0;;d+=10){let p=o+(f+d)*s,m=Ya(i,{x:c,y:p},!1,s);if(pl.bottom||(s<0?mr))return Q.cursor(m,e.assoc,void 0,O)}}function jn(i,e,t){for(;;){let n=0;for(let r of i)r.between(e-1,e+1,(s,O,o)=>{if(e>s&&er(i)),t.from,e.head>t.from?-1:1);return n==t.from?t:Q.cursor(n,n{this.ignoreDuringComposition(r)||r.type=="keydown"&&this.keydown(e,r)||(this.mustFlushObserver(r)&&e.observer.forceFlush(),this.runCustomHandlers(r.type,e,r)?r.preventDefault():n(e,r))};for(let n in ie){let r=ie[n];e.contentDOM.addEventListener(n,s=>{Il(e,s)&&t(r,s)},qs[n]),this.registeredEvents.push(n)}e.scrollDOM.addEventListener("mousedown",n=>{if(n.target==e.scrollDOM&&n.clientY>e.contentDOM.getBoundingClientRect().bottom&&(t(ie.mousedown,n),!n.defaultPrevented&&n.button==2)){let r=e.contentDOM.style.minHeight;e.contentDOM.style.minHeight="100%",setTimeout(()=>e.contentDOM.style.minHeight=r,200)}}),e.scrollDOM.addEventListener("drop",n=>{n.target==e.scrollDOM&&n.clientY>e.contentDOM.getBoundingClientRect().bottom&&t(ie.drop,n)}),X.chrome&&X.chrome_version==102&&e.scrollDOM.addEventListener("wheel",()=>{this.chromeScrollHack<0?e.contentDOM.style.pointerEvents="none":window.clearTimeout(this.chromeScrollHack),this.chromeScrollHack=setTimeout(()=>{this.chromeScrollHack=-1,e.contentDOM.style.pointerEvents=""},100)},{passive:!0}),this.notifiedFocused=e.hasFocus,X.safari&&e.contentDOM.addEventListener("input",()=>null)}setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}ensureHandlers(e,t){var n;let r;this.customHandlers=[];for(let s of t)if(r=(n=s.update(e).spec)===null||n===void 0?void 0:n.domEventHandlers){this.customHandlers.push({plugin:s.value,handlers:r});for(let O in r)this.registeredEvents.indexOf(O)<0&&O!="scroll"&&(this.registeredEvents.push(O),e.contentDOM.addEventListener(O,o=>{Il(e,o)&&this.runCustomHandlers(O,e,o)&&o.preventDefault()}))}}runCustomHandlers(e,t,n){for(let r of this.customHandlers){let s=r.handlers[e];if(s)try{if(s.call(r.plugin,n,t)||n.defaultPrevented)return!0}catch(O){Ke(t.state,O)}}return!1}runScrollHandlers(e,t){this.lastScrollTop=e.scrollDOM.scrollTop,this.lastScrollLeft=e.scrollDOM.scrollLeft;for(let n of this.customHandlers){let r=n.handlers.scroll;if(r)try{r.call(n.plugin,t,e)}catch(s){Ke(e.state,s)}}}keydown(e,t){if(this.lastKeyCode=t.keyCode,this.lastKeyTime=Date.now(),t.keyCode==9&&Date.now()r.keyCode==t.keyCode))&&!t.ctrlKey||Kd.indexOf(t.key)>-1&&t.ctrlKey&&!t.shiftKey)?(this.pendingIOSKey=n||t,setTimeout(()=>this.flushIOSKey(e),250),!0):!1}flushIOSKey(e){let t=this.pendingIOSKey;return t?(this.pendingIOSKey=void 0,ui(e.contentDOM,t.key,t.keyCode)):!1}ignoreDuringComposition(e){return/^key/.test(e.type)?this.composing>0?!0:X.safari&&!X.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1:!1}mustFlushObserver(e){return e.type=="keydown"&&e.keyCode!=229}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.mouseSelection&&this.mouseSelection.update(e),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}},_a=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],Kd="dthko",Aa=[16,17,18,20,91,92,224,225],Zn=6;function Cn(i){return Math.max(0,i)*.7+8}function ep(i,e){return Math.max(Math.abs(i.clientX-e.clientX),Math.abs(i.clientY-e.clientY))}var Cs=class{constructor(e,t,n,r){this.view=e,this.startEvent=t,this.style=n,this.mustSelect=r,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParent=xd(e.contentDOM),this.atoms=e.state.facet(sO).map(O=>O(e));let s=e.contentDOM.ownerDocument;s.addEventListener("mousemove",this.move=this.move.bind(this)),s.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(E.allowMultipleSelections)&&tp(e,t),this.dragging=np(e,t)&&Ma(t)==1?null:!1}start(e){this.dragging===!1&&(e.preventDefault(),this.select(e))}move(e){var t;if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&ep(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let n=0,r=0,s=((t=this.scrollParent)===null||t===void 0?void 0:t.getBoundingClientRect())||{left:0,top:0,right:this.view.win.innerWidth,bottom:this.view.win.innerHeight},O=Ra(this.view);e.clientX-O.left<=s.left+Zn?n=-Cn(s.left-e.clientX):e.clientX+O.right>=s.right-Zn&&(n=Cn(e.clientX-s.right)),e.clientY-O.top<=s.top+Zn?r=-Cn(s.top-e.clientY):e.clientY+O.bottom>=s.bottom-Zn&&(r=Cn(e.clientY-s.bottom)),this.setScrollSpeed(n,r)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){this.scrollParent?(this.scrollParent.scrollLeft+=this.scrollSpeed.x,this.scrollParent.scrollTop+=this.scrollSpeed.y):this.view.win.scrollBy(this.scrollSpeed.x,this.scrollSpeed.y),this.dragging===!1&&this.select(this.lastEvent)}skipAtoms(e){let t=null;for(let n=0;nthis.select(this.lastEvent),20)}};function tp(i,e){let t=i.state.facet(Pa);return t.length?t[0](e):X.mac?e.metaKey:e.ctrlKey}function ip(i,e){let t=i.state.facet(ba);return t.length?t[0](e):X.mac?!e.altKey:!e.ctrlKey}function np(i,e){let{main:t}=i.state.selection;if(t.empty)return!1;let n=Bn(i.root);if(!n||n.rangeCount==0)return!0;let r=n.getRangeAt(0).getClientRects();for(let s=0;s=e.clientX&&O.top<=e.clientY&&O.bottom>=e.clientY)return!0}return!1}function Il(i,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,n;t!=i.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(n=D.get(t))&&n.ignoreEvent(e))return!1;return!0}var ie=Object.create(null),qs=Object.create(null),ja=X.ie&&X.ie_version<15||X.ios&&X.webkit_version<604;function rp(i){let e=i.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{i.focus(),t.remove(),Ga(i,t.value)},50)}function Ga(i,e){let{state:t}=i,n,r=1,s=t.toText(e),O=s.lines==t.selection.ranges.length;if(Us!=null&&t.selection.ranges.every(l=>l.empty)&&Us==s.toString()){let l=-1;n=t.changeByRange(a=>{let h=t.doc.lineAt(a.from);if(h.from==l)return{range:a};l=h.from;let c=t.toText((O?s.line(r++).text:e)+t.lineBreak);return{changes:{from:h.from,insert:c},range:Q.cursor(a.from+c.length)}})}else O?n=t.changeByRange(l=>{let a=s.line(r++);return{changes:{from:l.from,to:l.to,insert:a.text},range:Q.cursor(l.from+a.length)}}):n=t.replaceSelection(s);i.dispatch(n,{userEvent:"input.paste",scrollIntoView:!0})}ie.keydown=(i,e)=>{i.inputState.setSelectionOrigin("select"),e.keyCode==27&&(i.inputState.lastEscPress=Date.now())};ie.touchstart=(i,e)=>{i.inputState.lastTouchTime=Date.now(),i.inputState.setSelectionOrigin("select.pointer")};ie.touchmove=i=>{i.inputState.setSelectionOrigin("select.pointer")};qs.touchstart=qs.touchmove={passive:!0};ie.mousedown=(i,e)=>{if(i.observer.flush(),i.inputState.lastTouchTime>Date.now()-2e3)return;let t=null;for(let n of i.state.facet(xa))if(t=n(i,e),t)break;if(!t&&e.button==0&&(t=op(i,e)),t){let n=!i.hasFocus;i.inputState.startMouseSelection(new Cs(i,e,t,n)),n&&i.observer.ignore(()=>ca(i.contentDOM)),i.inputState.mouseSelection&&i.inputState.mouseSelection.start(e)}};function Bl(i,e,t,n){if(n==1)return Q.cursor(e,t);if(n==2)return Id(i.state,e,t);{let r=Te.find(i.docView,e),s=i.state.doc.lineAt(r?r.posAtEnd:e),O=r?r.posAtStart:s.from,o=r?r.posAtEnd:s.to;return oi>=e.top&&i<=e.bottom,Dl=(i,e,t)=>Ea(e,t)&&i>=t.left&&i<=t.right;function sp(i,e,t,n){let r=Te.find(i.docView,e);if(!r)return 1;let s=e-r.posAtStart;if(s==0)return 1;if(s==r.length)return-1;let O=r.coordsAt(s,-1);if(O&&Dl(t,n,O))return-1;let o=r.coordsAt(s,1);return o&&Dl(t,n,o)?1:O&&Ea(n,O)?-1:1}function Ll(i,e){let t=i.posAtCoords({x:e.clientX,y:e.clientY},!1);return{pos:t,bias:sp(i,t,e.clientX,e.clientY)}}var Op=X.ie&&X.ie_version<=11,Nl=null,Hl=0,Fl=0;function Ma(i){if(!Op)return i.detail;let e=Nl,t=Fl;return Nl=i,Fl=Date.now(),Hl=!e||t>Date.now()-400&&Math.abs(e.clientX-i.clientX)<2&&Math.abs(e.clientY-i.clientY)<2?(Hl+1)%3:1}function op(i,e){let t=Ll(i,e),n=Ma(e),r=i.state.selection;return{update(s){s.docChanged&&(t.pos=s.changes.mapPos(t.pos),r=r.map(s.changes))},get(s,O,o){let l=Ll(i,s),a,h=Bl(i,l.pos,l.bias,n);if(t.pos!=l.pos&&!O){let c=Bl(i,t.pos,t.bias,n),f=Math.min(c.from,h.from),d=Math.max(c.to,h.to);h=f1&&(a=lp(r,l.pos))?a:o?r.addRange(h):Q.create([h])}}}function lp(i,e){for(let t=0;t=e)return Q.create(i.ranges.slice(0,t).concat(i.ranges.slice(t+1)),i.mainIndex==t?0:i.mainIndex-(i.mainIndex>t?1:0))}return null}ie.dragstart=(i,e)=>{let{selection:{main:t}}=i.state,{mouseSelection:n}=i.inputState;n&&(n.dragging=t),e.dataTransfer&&(e.dataTransfer.setData("Text",i.state.sliceDoc(t.from,t.to)),e.dataTransfer.effectAllowed="copyMove")};function Jl(i,e,t,n){if(!t)return;let r=i.posAtCoords({x:e.clientX,y:e.clientY},!1);e.preventDefault();let{mouseSelection:s}=i.inputState,O=n&&s&&s.dragging&&ip(i,e)?{from:s.dragging.from,to:s.dragging.to}:null,o={from:r,insert:t},l=i.state.changes(O?[O,o]:o);i.focus(),i.dispatch({changes:l,selection:{anchor:l.mapPos(r,-1),head:l.mapPos(r,1)},userEvent:O?"move.drop":"input.drop"})}ie.drop=(i,e)=>{if(!e.dataTransfer)return;if(i.state.readOnly)return e.preventDefault();let t=e.dataTransfer.files;if(t&&t.length){e.preventDefault();let n=Array(t.length),r=0,s=()=>{++r==t.length&&Jl(i,e,n.filter(O=>O!=null).join(i.state.lineBreak),!1)};for(let O=0;O{/[\x00-\x08\x0e-\x1f]{2}/.test(o.result)||(n[O]=o.result),s()},o.readAsText(t[O])}}else Jl(i,e,e.dataTransfer.getData("Text"),!0)};ie.paste=(i,e)=>{if(i.state.readOnly)return e.preventDefault();i.observer.flush();let t=ja?null:e.clipboardData;t?(Ga(i,t.getData("text/plain")||t.getData("text/uri-text")),e.preventDefault()):rp(i)};function ap(i,e){let t=i.dom.parentNode;if(!t)return;let n=t.appendChild(document.createElement("textarea"));n.style.cssText="position: fixed; left: -10000px; top: 10px",n.value=e,n.focus(),n.selectionEnd=e.length,n.selectionStart=0,setTimeout(()=>{n.remove(),i.focus()},50)}function hp(i){let e=[],t=[],n=!1;for(let r of i.selection.ranges)r.empty||(e.push(i.sliceDoc(r.from,r.to)),t.push(r));if(!e.length){let r=-1;for(let{from:s}of i.selection.ranges){let O=i.doc.lineAt(s);O.number>r&&(e.push(O.text),t.push({from:O.from,to:Math.min(i.doc.length,O.to+1)})),r=O.number}n=!0}return{text:e.join(i.lineBreak),ranges:t,linewise:n}}var Us=null;ie.copy=ie.cut=(i,e)=>{let{text:t,ranges:n,linewise:r}=hp(i.state);if(!t&&!r)return;Us=r?t:null;let s=ja?null:e.clipboardData;s?(e.preventDefault(),s.clearData(),s.setData("text/plain",t)):ap(i,t),e.type=="cut"&&!i.state.readOnly&&i.dispatch({changes:n,scrollIntoView:!0,userEvent:"delete.cut"})};var Ia=be.define();function Ba(i,e){let t=[];for(let n of i.facet(va)){let r=n(i,e);r&&t.push(r)}return t?i.update({effects:t,annotations:Ia.of(!0)}):null}function Da(i){setTimeout(()=>{let e=i.hasFocus;if(e!=i.inputState.notifiedFocused){let t=Ba(i.state,e);t?i.dispatch(t):i.update([])}},10)}ie.focus=i=>{i.inputState.lastFocusTime=Date.now(),!i.scrollDOM.scrollTop&&(i.inputState.lastScrollTop||i.inputState.lastScrollLeft)&&(i.scrollDOM.scrollTop=i.inputState.lastScrollTop,i.scrollDOM.scrollLeft=i.inputState.lastScrollLeft),Da(i)};ie.blur=i=>{i.observer.clearSelectionRange(),Da(i)};ie.compositionstart=ie.compositionupdate=i=>{i.inputState.compositionFirstChange==null&&(i.inputState.compositionFirstChange=!0),i.inputState.composing<0&&(i.inputState.composing=0)};ie.compositionend=i=>{i.inputState.composing=-1,i.inputState.compositionEndedAt=Date.now(),i.inputState.compositionPendingKey=!0,i.inputState.compositionPendingChange=i.observer.pendingRecords().length>0,i.inputState.compositionFirstChange=null,X.chrome&&X.android?i.observer.flushSoon():i.inputState.compositionPendingChange?Promise.resolve().then(()=>i.observer.flush()):setTimeout(()=>{i.inputState.composing<0&&i.docView.hasComposition&&i.update([])},50)};ie.contextmenu=i=>{i.inputState.lastContextMenu=Date.now()};ie.beforeinput=(i,e)=>{var t;let n;if(X.chrome&&X.android&&(n=_a.find(r=>r.inputType==e.inputType))&&(i.observer.delayAndroidKey(n.key,n.keyCode),n.key=="Backspace"||n.key=="Delete")){let r=((t=window.visualViewport)===null||t===void 0?void 0:t.height)||0;setTimeout(()=>{var s;(((s=window.visualViewport)===null||s===void 0?void 0:s.height)||0)>r+10&&i.hasFocus&&(i.contentDOM.blur(),i.focus())},100)}};var Kl=["pre-wrap","normal","pre-line","break-spaces"],Ys=class{constructor(e){this.lineWrapping=e,this.doc=U.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30,this.heightChanged=!1}heightForGap(e,t){let n=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(n+=Math.max(0,Math.ceil((t-e-n*this.lineLength*.5)/this.lineLength))),this.lineHeight*n}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/(this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return Kl.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let n=0;n-1,l=Math.round(t)!=Math.round(this.lineHeight)||this.lineWrapping!=o;if(this.lineWrapping=o,this.lineHeight=t,this.charWidth=n,this.textHeight=r,this.lineLength=s,l){this.heightSamples={};for(let a=0;a0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e,t){this.height!=t&&(Math.abs(this.height-t)>Gn&&(e.heightChanged=!0),this.height=t)}replace(e,t,n){return i.of(n)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,n,r){let s=this,O=n.doc;for(let o=r.length-1;o>=0;o--){let{fromA:l,toA:a,fromB:h,toB:c}=r[o],f=s.lineAt(l,B.ByPosNoHeight,n.setDoc(t),0,0),d=f.to>=a?f:s.lineAt(a,B.ByPosNoHeight,n,0,0);for(c+=d.to-a,a=d.to;o>0&&f.from<=r[o-1].toA;)l=r[o-1].fromA,h=r[o-1].fromB,o--,ls*2){let o=e[t-1];o.break?e.splice(--t,1,o.left,null,o.right):e.splice(--t,1,o.left,o.right),n+=1+o.break,r-=o.size}else if(s>r*2){let o=e[n];o.break?e.splice(n,1,o.left,null,o.right):e.splice(n,1,o.left,o.right),n+=2+o.break,s-=o.size}else break;else if(r=s&&O(this.blockAt(0,n,r,s))}updateHeight(e,t=0,n=!1,r){return r&&r.from<=t&&r.more&&this.setHeight(e,r.heights[r.index++]),this.outdated=!1,this}toString(){return`block(${this.length})`}},qe=class i extends rr{constructor(e,t){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0}blockAt(e,t,n,r){return new Je(r,this.length,n,this.height,this.breaks)}replace(e,t,n){let r=n[0];return n.length==1&&(r instanceof i||r instanceof Pt&&r.flags&4)&&Math.abs(this.length-r.length)<10?(r instanceof Pt?r=new i(r.length,this.height):r.height=this.height,this.outdated||(r.outdated=!1),r):ze.of(n)}updateHeight(e,t=0,n=!1,r){return r&&r.from<=t&&r.more?this.setHeight(e,r.heights[r.index++]):(n||this.outdated)&&this.setHeight(e,Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},Pt=class i extends ze{constructor(e){super(e,0)}heightMetrics(e,t){let n=e.doc.lineAt(t).number,r=e.doc.lineAt(t+this.length).number,s=r-n+1,O,o=0;if(e.lineWrapping){let l=Math.min(this.height,e.lineHeight*s);O=l/s,this.length>s+1&&(o=(this.height-l)/(this.length-s-1))}else O=this.height/s;return{firstLine:n,lastLine:r,perLine:O,perChar:o}}blockAt(e,t,n,r){let{firstLine:s,lastLine:O,perLine:o,perChar:l}=this.heightMetrics(t,r);if(t.lineWrapping){let a=r+Math.round(Math.max(0,Math.min(1,(e-n)/this.height))*this.length),h=t.doc.lineAt(a),c=o+h.length*l,f=Math.max(n,e-c/2);return new Je(h.from,h.length,f,c,0)}else{let a=Math.max(0,Math.min(O-s,Math.floor((e-n)/o))),{from:h,length:c}=t.doc.line(s+a);return new Je(h,c,n+o*a,o,0)}}lineAt(e,t,n,r,s){if(t==B.ByHeight)return this.blockAt(e,n,r,s);if(t==B.ByPosNoHeight){let{from:d,to:p}=n.doc.lineAt(e);return new Je(d,p-d,0,0,0)}let{firstLine:O,perLine:o,perChar:l}=this.heightMetrics(n,s),a=n.doc.lineAt(e),h=o+a.length*l,c=a.number-O,f=r+o*c+l*(a.from-s-c);return new Je(a.from,a.length,Math.max(r,Math.min(f,r+this.height-h)),h,0)}forEachLine(e,t,n,r,s,O){e=Math.max(e,s),t=Math.min(t,s+this.length);let{firstLine:o,perLine:l,perChar:a}=this.heightMetrics(n,s);for(let h=e,c=r;h<=t;){let f=n.doc.lineAt(h);if(h==e){let p=f.number-o;c+=l*p+a*(e-s-p)}let d=l+a*f.length;O(new Je(f.from,f.length,c,d,0)),c+=d,h=f.to+1}}replace(e,t,n){let r=this.length-t;if(r>0){let s=n[n.length-1];s instanceof i?n[n.length-1]=new i(s.length+r):n.push(null,new i(r-1))}if(e>0){let s=n[0];s instanceof i?n[0]=new i(e+s.length):n.unshift(new i(e-1),null)}return ze.of(n)}decomposeLeft(e,t){t.push(new i(e-1),null)}decomposeRight(e,t){t.push(null,new i(this.length-e-1))}updateHeight(e,t=0,n=!1,r){let s=t+this.length;if(r&&r.from<=t+this.length&&r.more){let O=[],o=Math.max(t,r.from),l=-1;for(r.from>t&&O.push(new i(r.from-t-1).updateHeight(e,t));o<=s&&r.more;){let h=e.doc.lineAt(o).length;O.length&&O.push(null);let c=r.heights[r.index++];l==-1?l=c:Math.abs(c-l)>=Gn&&(l=-2);let f=new qe(h,c);f.outdated=!1,O.push(f),o+=h+1}o<=s&&O.push(null,new i(s-o).updateHeight(e,o));let a=ze.of(O);return(l<0||Math.abs(a.height-this.height)>=Gn||Math.abs(l-this.heightMetrics(e,t).perLine)>=Gn)&&(e.heightChanged=!0),a}else(n||this.outdated)&&(this.setHeight(e,e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},As=class extends ze{constructor(e,t,n){super(e.length+t+n.length,e.height+n.height,t|(e.outdated||n.outdated?2:0)),this.left=e,this.right=n,this.size=e.size+n.size}get break(){return this.flags&1}blockAt(e,t,n,r){let s=n+this.left.height;return eo))return a;let h=t==B.ByPosNoHeight?B.ByPosNoHeight:B.ByPos;return l?a.join(this.right.lineAt(o,h,n,O,o)):this.left.lineAt(o,h,n,r,s).join(a)}forEachLine(e,t,n,r,s,O){let o=r+this.left.height,l=s+this.left.length+this.break;if(this.break)e=l&&this.right.forEachLine(e,t,n,o,l,O);else{let a=this.lineAt(l,B.ByPos,n,r,s);e=e&&a.from<=t&&O(a),t>a.to&&this.right.forEachLine(a.to+1,t,n,o,l,O)}}replace(e,t,n){let r=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-r,t-r,n));let s=[];e>0&&this.decomposeLeft(e,s);let O=s.length;for(let o of n)s.push(o);if(e>0&&ea(s,O-1),t=n&&t.push(null)),e>n&&this.right.decomposeLeft(e-n,t)}decomposeRight(e,t){let n=this.left.length,r=n+this.break;if(e>=r)return this.right.decomposeRight(e-r,t);e2*t.size||t.size>2*e.size?ze.of(this.break?[e,null,t]:[e,t]):(this.left=e,this.right=t,this.height=e.height+t.height,this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,n=!1,r){let{left:s,right:O}=this,o=t+s.length+this.break,l=null;return r&&r.from<=t+s.length&&r.more?l=s=s.updateHeight(e,t,n,r):s.updateHeight(e,t,n),r&&r.from<=o+O.length&&r.more?l=O=O.updateHeight(e,o,n,r):O.updateHeight(e,o,n),l?this.balanced(s,O):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function ea(i,e){let t,n;i[e]==null&&(t=i[e-1])instanceof Pt&&(n=i[e+1])instanceof Pt&&i.splice(e-1,3,new Pt(t.length+1+n.length))}var cp=5,js=class i{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let n=Math.min(t,this.lineEnd),r=this.nodes[this.nodes.length-1];r instanceof qe?r.length+=n-this.pos:(n>this.pos||!this.isCovered)&&this.nodes.push(new qe(n-this.pos,-1)),this.writtenTo=n,t>n&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,n){if(e=cp)&&this.addLineDeco(r,s,O)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new qe(this.pos-e,-1)),this.writtenTo=this.pos}blankContent(e,t){let n=new Pt(t-e);return this.oracle.doc.lineAt(e).to==t&&(n.flags|=4),n}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof qe)return e;let t=new qe(0,-1);return this.nodes.push(t),t}addBlock(e){var t;this.enterLine();let n=(t=e.deco)===null||t===void 0?void 0:t.type;n==H.WidgetAfter&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,n!=H.WidgetBefore&&(this.covering=e)}addLineDeco(e,t,n){let r=this.ensureLine();r.length+=n,r.collapsed+=n,r.widgetHeight=Math.max(r.widgetHeight,e),r.breaks+=t,this.writtenTo=this.pos=this.pos+n}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof qe)&&!this.isCovered?this.nodes.push(new qe(0,-1)):(this.writtenToh.clientHeight||h.scrollWidth>h.clientWidth)&&c.overflow!="visible"){let f=h.getBoundingClientRect();s=Math.max(s,f.left),O=Math.min(O,f.right),o=Math.max(o,f.top),l=a==i.parentNode?f.bottom:Math.min(l,f.bottom)}a=c.position=="absolute"||c.position=="fixed"?h.offsetParent:h.parentNode}else if(a.nodeType==11)a=a.host;else break;return{left:s-t.left,right:Math.max(s,O)-t.left,top:o-(t.top+e),bottom:Math.max(o,l)-(t.top+e)}}function dp(i,e){let t=i.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}var Ei=class{constructor(e,t,n){this.from=e,this.to=t,this.size=n}static same(e,t){if(e.length!=t.length)return!1;for(let n=0;ntypeof n!="function"&&n.class=="cm-lineWrapping");this.heightOracle=new Ys(t),this.stateDeco=e.facet(Hi).filter(n=>typeof n!="function"),this.heightMap=ze.empty().applyChanges(this.stateDeco,U.empty,this.heightOracle.setDoc(e.doc),[new et(0,0,0,e.doc.length)]),this.viewport=this.getViewport(0,null),this.updateViewportLines(),this.updateForViewport(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=M.set(this.lineGaps.map(n=>n.draw(!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let n=0;n<=1;n++){let r=n?t.head:t.anchor;if(!e.some(({from:s,to:O})=>r>=s&&r<=O)){let{from:s,to:O}=this.lineBlockAt(r);e.push(new ci(s,O))}}this.viewports=e.sort((n,r)=>n.from-r.from),this.scaler=this.heightMap.height<=7e6?ta:new Ms(this.heightOracle,this.heightMap,this.viewports)}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(this.scaler.scale==1?e:_i(e,this.scaler))})}update(e,t=null){this.state=e.state;let n=this.stateDeco;this.stateDeco=this.state.facet(Hi).filter(h=>typeof h!="function");let r=e.changedRanges,s=et.extendWithRanges(r,fp(n,this.stateDeco,e?e.changes:ge.empty(this.state.doc.length))),O=this.heightMap.height,o=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),s),this.heightMap.height!=O&&(e.flags|=2),o?(this.scrollAnchorPos=e.changes.mapPos(o.from,-1),this.scrollAnchorHeight=o.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=this.heightMap.height);let l=s.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.headl.to)||!this.viewportIsAppropriate(l))&&(l=this.getViewport(0,t));let a=!e.changes.empty||e.flags&2||l.from!=this.viewport.from||l.to!=this.viewport.to;this.viewport=l,this.updateForViewport(),a&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&e.selectionSet&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(Xa)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let t=e.contentDOM,n=window.getComputedStyle(t),r=this.heightOracle,s=n.whiteSpace;this.defaultTextDirection=n.direction=="rtl"?K.RTL:K.LTR;let O=this.heightOracle.mustRefreshForWrapping(s),o=t.getBoundingClientRect(),l=O||this.mustMeasureContent||this.contentDOMHeight!=o.height;this.contentDOMHeight=o.height,this.mustMeasureContent=!1;let a=0,h=0,c=parseInt(n.paddingTop)||0,f=parseInt(n.paddingBottom)||0;(this.paddingTop!=c||this.paddingBottom!=f)&&(this.paddingTop=c,this.paddingBottom=f,a|=10),this.editorWidth!=e.scrollDOM.clientWidth&&(r.lineWrapping&&(l=!0),this.editorWidth=e.scrollDOM.clientWidth,a|=8),this.scrollTop!=e.scrollDOM.scrollTop&&(this.scrollAnchorHeight=-1,this.scrollTop=e.scrollDOM.scrollTop),this.scrolledToBottom=ua(e.scrollDOM);let d=(this.printing?dp:up)(t,this.paddingTop),p=d.top-this.pixelViewport.top,m=d.bottom-this.pixelViewport.bottom;this.pixelViewport=d;let $=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if($!=this.inView&&(this.inView=$,$&&(l=!0)),!this.inView&&!this.scrollTarget)return 0;let g=o.width;if((this.contentDOMWidth!=g||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=o.width,this.editorHeight=e.scrollDOM.clientHeight,a|=8),l){let k=e.docView.measureVisibleLineHeights(this.viewport);if(r.mustRefreshForHeights(k)&&(O=!0),O||r.lineWrapping&&Math.abs(g-this.contentDOMWidth)>r.charWidth){let{lineHeight:y,charWidth:w,textHeight:x}=e.docView.measureTextSize();O=y>0&&r.refresh(s,y,w,x,g/w,k),O&&(e.docView.minWidth=0,a|=8)}p>0&&m>0?h=Math.max(p,m):p<0&&m<0&&(h=Math.min(p,m)),r.heightChanged=!1;for(let y of this.viewports){let w=y.from==this.viewport.from?k:e.docView.measureVisibleLineHeights(y);this.heightMap=(O?ze.empty().applyChanges(this.stateDeco,U.empty,this.heightOracle,[new et(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(r,0,O,new _s(y.from,w))}r.heightChanged&&(a|=2)}let b=!this.viewportIsAppropriate(this.viewport,h)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return b&&(this.viewport=this.getViewport(h,this.scrollTarget)),this.updateForViewport(),(a&2||b)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(O?[]:this.lineGaps,e)),a|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),a}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let n=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),r=this.heightMap,s=this.heightOracle,{visibleTop:O,visibleBottom:o}=this,l=new ci(r.lineAt(O-n*1e3,B.ByHeight,s,0,0).from,r.lineAt(o+(1-n)*1e3,B.ByHeight,s,0,0).to);if(t){let{head:a}=t.range;if(al.to){let h=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),c=r.lineAt(a,B.ByPos,s,0,0),f;t.y=="center"?f=(c.top+c.bottom)/2-h/2:t.y=="start"||t.y=="nearest"&&a=o+Math.max(10,Math.min(n,250)))&&r>O-2*1e3&&s>1,O=r<<1;if(this.defaultTextDirection!=K.LTR&&!n)return[];let o=[],l=(a,h,c,f)=>{if(h-aa&&$$.from>=c.from&&$.to<=c.to&&Math.abs($.from-a)$.fromg));if(!m){if(h$.from<=h&&$.to>=h)){let $=t.moveToLineBoundary(Q.cursor(h),!1,!0).head;$>a&&(h=$)}m=new Ei(a,h,this.gapSize(c,a,h,f))}o.push(m)};for(let a of this.viewportLines){if(a.lengtha.from&&l(a.from,f,a,h),dt.draw(this.heightOracle.lineWrapping))))}computeVisibleRanges(){let e=this.stateDeco;this.lineGaps.length&&(e=e.concat(this.lineGapDeco));let t=[];L.spans(e,this.viewport.from,this.viewport.to,{span(r,s){t.push({from:r,to:s})},point(){}},20);let n=t.length!=this.visibleRanges.length||this.visibleRanges.some((r,s)=>r.from!=t[s].from||r.to!=t[s].to);return this.visibleRanges=t,n?4:0}lineBlockAt(e){return e>=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||_i(this.heightMap.lineAt(e,B.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return _i(this.heightMap.lineAt(this.scaler.fromDOM(e),B.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return _i(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},ci=class{constructor(e,t){this.from=e,this.to=t}};function pp(i,e,t){let n=[],r=i,s=0;return L.spans(t,i,e,{span(){},point(O,o){O>r&&(n.push({from:r,to:O}),s+=O-r),r=o}},20),r=1)return e[e.length-1].to;let n=Math.floor(i*t);for(let r=0;;r++){let{from:s,to:O}=e[r],o=O-s;if(n<=o)return s+n;n-=o}}function Un(i,e){let t=0;for(let{from:n,to:r}of i.ranges){if(e<=r){t+=e-n;break}t+=r-n}return t/i.total}function $p(i,e){for(let t of i)if(e(t))return t}var ta={toDOM(i){return i},fromDOM(i){return i},scale:1},Ms=class{constructor(e,t,n){let r=0,s=0,O=0;this.viewports=n.map(({from:o,to:l})=>{let a=t.lineAt(o,B.ByPos,e,0,0).top,h=t.lineAt(l,B.ByPos,e,0,0).bottom;return r+=h-a,{from:o,to:l,top:a,bottom:h,domTop:0,domBottom:0}}),this.scale=(7e6-r)/(t.height-r);for(let o of this.viewports)o.domTop=O+(o.top-s)*this.scale,O=o.domBottom=o.domTop+(o.bottom-o.top),s=o.bottom}toDOM(e){for(let t=0,n=0,r=0;;t++){let s=t_i(r,e)):i._content)}var Yn=W.define({combine:i=>i.join(" ")}),Is=W.define({combine:i=>i.indexOf(!0)>-1}),Bs=Ce.newName(),La=Ce.newName(),Na=Ce.newName(),Ha={"&light":"."+La,"&dark":"."+Na};function Ds(i,e,t){return new Ce(e,{finish(n){return/&/.test(n)?n.replace(/&\w*/,r=>{if(r=="&")return i;if(!t||!t[r])throw new RangeError(`Unsupported selector: ${r}`);return t[r]}):i+" "+n}})}var mp=Ds("."+Bs,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#444"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",insetInlineStart:0,zIndex:200},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",borderRight:"1px solid #ddd"},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top"},".cm-highlightSpace:before":{content:"attr(data-display)",position:"absolute",pointerEvents:"none",color:"#888"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},Ha),Ls=class{constructor(e,t,n,r){this.typeOver=r,this.bounds=null,this.text="";let{impreciseHead:s,impreciseAnchor:O}=e.docView;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=e.docView.domBoundsAround(t,n,0))){let o=s||O?[]:Qp(e),l=new Hn(o,e.state);l.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=l.text,this.newSel=Sp(o,this.bounds.from)}else{let o=e.observer.selectionRange,l=s&&s.node==o.focusNode&&s.offset==o.focusOffset||!Ss(e.contentDOM,o.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(o.focusNode,o.focusOffset),a=O&&O.node==o.anchorNode&&O.offset==o.anchorOffset||!Ss(e.contentDOM,o.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(o.anchorNode,o.anchorOffset);this.newSel=Q.single(a,l)}}};function Fa(i,e){let t,{newSel:n}=e,r=i.state.selection.main,s=i.inputState.lastKeyTime>Date.now()-100?i.inputState.lastKeyCode:-1;if(e.bounds){let{from:O,to:o}=e.bounds,l=r.from,a=null;(s===8||X.android&&e.text.length=r.from&&t.to<=r.to&&(t.from!=r.from||t.to!=r.to)&&r.to-r.from-(t.to-t.from)<=4?t={from:r.from,to:r.to,insert:i.state.doc.slice(r.from,t.from).append(t.insert).append(i.state.doc.slice(t.to,r.to))}:(X.mac||X.android)&&t&&t.from==t.to&&t.from==r.head-1&&/^\. ?$/.test(t.insert.toString())&&i.contentDOM.getAttribute("autocorrect")=="off"?(n&&t.insert.length==2&&(n=Q.single(n.main.anchor-1,n.main.head-1)),t={from:r.from,to:r.to,insert:U.of([" "])}):X.chrome&&t&&t.from==t.to&&t.from==r.head&&t.insert.toString()==` - `&&i.lineWrapping&&(n&&(n=Q.single(n.main.anchor-1,n.main.head-1)),t={from:r.from,to:r.to,insert:U.of([" "])}),t){let O=i.state;if(X.ios&&i.inputState.flushIOSKey(i)||X.android&&(t.from==r.from&&t.to==r.to&&t.insert.length==1&&t.insert.lines==2&&ui(i.contentDOM,"Enter",13)||(t.from==r.from-1&&t.to==r.to&&t.insert.length==0||s==8&&t.insert.lengthh(i,t.from,t.to,o)))return!0;i.inputState.composing>=0&&i.inputState.composing++;let l;if(t.from>=r.from&&t.to<=r.to&&t.to-t.from>=(r.to-r.from)/3&&(!n||n.main.empty&&n.main.from==t.from+t.insert.length)&&i.inputState.composing<0){let h=r.fromt.to?O.sliceDoc(t.to,r.to):"";l=O.replaceSelection(i.state.toText(h+t.insert.sliceString(0,void 0,i.state.lineBreak)+c))}else{let h=O.changes(t),c=n&&n.main.to<=h.newLength?n.main:void 0;if(O.selection.ranges.length>1&&i.inputState.composing>=0&&t.to<=r.to&&t.to>=r.to-10){let f=i.state.sliceDoc(t.from,t.to),d=qa(i)||i.state.doc.lineAt(r.head),p=r.to-t.to,m=r.to-r.from;l=O.changeByRange($=>{if($.from==r.from&&$.to==r.to)return{changes:h,range:c||$.map(h)};let g=$.to-p,b=g-f.length;if($.to-$.from!=m||i.state.sliceDoc(b,g)!=f||d&&$.to>=d.from&&$.from<=d.to)return{range:$};let k=O.changes({from:b,to:g,insert:t.insert}),y=$.to-r.to;return{changes:k,range:c?Q.range(Math.max(0,c.anchor+y),Math.max(0,c.head+y)):$.map(k)}})}else l={changes:h,selection:c&&O.selection.replaceRange(c)}}let a="input.type";return(i.composing||i.inputState.compositionPendingChange&&i.inputState.compositionEndedAt>Date.now()-50)&&(i.inputState.compositionPendingChange=!1,a+=".compose",i.inputState.compositionFirstChange&&(a+=".start",i.inputState.compositionFirstChange=!1)),i.dispatch(l,{scrollIntoView:!0,userEvent:a}),!0}else if(n&&!n.main.eq(r)){let O=!1,o="select";return i.inputState.lastSelectionTime>Date.now()-50&&(i.inputState.lastSelectionOrigin=="select"&&(O=!0),o=i.inputState.lastSelectionOrigin),i.dispatch({selection:n,scrollIntoView:O,userEvent:o}),!0}else return!1}function gp(i,e,t,n){let r=Math.min(i.length,e.length),s=0;for(;s0&&o>0&&i.charCodeAt(O-1)==e.charCodeAt(o-1);)O--,o--;if(n=="end"){let l=Math.max(0,s-Math.min(O,o));t-=O+l-s}if(O=O?s-t:0;s-=l,o=s+(o-O),O=s}else if(o=o?s-t:0;s-=l,O=s+(O-o),o=s}return{from:s,toA:O,toB:o}}function Qp(i){let e=[];if(i.root.activeElement!=i.contentDOM)return e;let{anchorNode:t,anchorOffset:n,focusNode:r,focusOffset:s}=i.observer.selectionRange;return t&&(e.push(new Fn(t,n)),(r!=t||s!=n)&&e.push(new Fn(r,s))),e}function Sp(i,e){if(i.length==0)return null;let t=i[0].pos,n=i.length==2?i[1].pos:t;return t>-1&&n>-1?Q.single(t+e,n+e):null}var yp={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},gs=X.ie&&X.ie_version<=11,Ns=class{constructor(e){this.view=e,this.active=!1,this.selectionRange=new ys,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.resizeContent=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let n of t)this.queue.push(n);(X.ie&&X.ie_version<=11||X.ios&&e.composing)&&t.some(n=>n.type=="childList"&&n.removedNodes.length||n.type=="characterData"&&n.oldValue.length>n.target.nodeValue.length)?this.flushSoon():this.flush()}),gs&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate)this.view.requestMeasure()),this.resizeContent.observe(e.contentDOM)),this.addWindowListeners(this.win=e.win),this.start(),typeof IntersectionObserver=="function"&&(this.intersection=new IntersectionObserver(t=>{this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runScrollHandlers(this.view,e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(){this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500)}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,n)=>t!=e[n]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:n}=this,r=this.selectionRange;if(n.state.facet(hr)?n.root.activeElement!=this.dom:!An(n.dom,r))return;let s=r.anchorNode&&n.docView.nearest(r.anchorNode);if(s&&s.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(X.ie&&X.ie_version<=11||X.android&&X.chrome)&&!n.state.selection.main.empty&&r.focusNode&&Dn(r.focusNode,r.focusOffset,r.anchorNode,r.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=X.safari&&e.root.nodeType==11&&yd(this.dom.ownerDocument)==this.dom&&Pp(this.view)||Bn(e.root);if(!t||this.selectionRange.eq(t))return!1;let n=An(this.dom,t);return n&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let s=this.delayedAndroidKey;s&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=s.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&s.force&&ui(this.dom,s.key,s.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(r)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,n=-1,r=!1;for(let s of e){let O=this.readMutation(s);O&&(O.typeOver&&(r=!0),t==-1?{from:t,to:n}=O:(t=Math.min(O.from,t),n=Math.max(O.to,n)))}return{from:t,to:n,typeOver:r}}readChange(){let{from:e,to:t,typeOver:n}=this.processRecords(),r=this.selectionChanged&&An(this.dom,this.selectionRange);return e<0&&!r?null:(e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1,new Ls(this.view,e,t,n))}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return!1;let n=this.view.state,r=Fa(this.view,t);return this.view.state==n&&this.view.update([]),r}readMutation(e){let t=this.view.docView.nearest(e.target);if(!t||t.ignoreMutation(e))return null;if(t.markDirty(e.type=="attributes"),e.type=="attributes"&&(t.flags|=4),e.type=="childList"){let n=ia(t,e.previousSibling||e.target.previousSibling,-1),r=ia(t,e.nextSibling||e.target.nextSibling,1);return{from:n?t.posAfter(n):t.posAtStart,to:r?t.posBefore(r):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}destroy(){var e,t,n,r;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(n=this.resizeScroll)===null||n===void 0||n.disconnect(),(r=this.resizeContent)===null||r===void 0||r.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey)}};function ia(i,e,t){for(;e;){let n=D.get(e);if(n&&n.parent==i)return n;let r=e.parentNode;e=r!=i.dom?r:t>0?e.nextSibling:e.previousSibling}return null}function Pp(i){let e=null;function t(l){l.preventDefault(),l.stopImmediatePropagation(),e=l.getTargetRanges()[0]}if(i.contentDOM.addEventListener("beforeinput",t,!0),i.dom.ownerDocument.execCommand("indent"),i.contentDOM.removeEventListener("beforeinput",t,!0),!e)return null;let n=e.startContainer,r=e.startOffset,s=e.endContainer,O=e.endOffset,o=i.docView.domAtPos(i.state.selection.main.anchor);return Dn(o.node,o.offset,s,O)&&([n,r,s,O]=[s,O,n,r]),{anchorNode:n,anchorOffset:r,focusNode:s,focusOffset:O}}var v=class i{constructor(e={}){this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.style.cssText="position: fixed; top: -10000px",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),this._dispatch=e.dispatch||(t=>this.update([t])),this.dispatch=this.dispatch.bind(this),this._root=e.root||wd(e.parent)||document,this.viewState=new sr(e.state||E.create(e)),this.plugins=this.state.facet(Ui).map(t=>new Gi(t));for(let t of this.plugins)t.update(this);this.observer=new Ns(this),this.inputState=new Zs(this),this.inputState.ensureHandlers(this,this.plugins),this.docView=new ir(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),e.parent&&e.parent.appendChild(this.dom)}get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return this.inputState.composing>0}get compositionStarted(){return this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}dispatch(...e){let t=e.length==1&&e[0]instanceof oe?e[0]:this.state.update(...e);this._dispatch(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,n=!1,r,s=this.state;for(let f of e){if(f.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=f.state}if(this.destroyed){this.viewState.state=s;return}let O=this.hasFocus,o=0,l=null;e.some(f=>f.annotation(Ia))?(this.inputState.notifiedFocused=O,o=1):O!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=O,l=Ba(s,O),l||(o=1));let a=this.observer.delayedAndroidKey,h=null;if(a?(this.observer.clearDelayedAndroidKey(),h=this.observer.readChange(),(h&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(h=null)):this.observer.clear(),s.facet(E.phrases)!=this.state.facet(E.phrases))return this.setState(s);r=tr.create(this,s,e),r.flags|=o;let c=this.viewState.scrollTarget;try{this.updateState=2;for(let f of e){if(c&&(c=c.map(f.changes)),f.scrollIntoView){let{main:d}=f.state.selection;c=new er(d.empty?d:Q.cursor(d.head,d.head>d.anchor?-1:1))}for(let d of f.effects)d.is(_l)&&(c=d.value)}this.viewState.update(r,c),this.bidiCache=Or.update(this.bidiCache,r.changes),r.empty||(this.updatePlugins(r),this.inputState.update(r)),t=this.docView.update(r),this.state.facet(Yi)!=this.styleModules&&this.mountStyles(),n=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(f=>f.isUserEvent("select.pointer")))}finally{this.updateState=0}if(r.startState.facet(Yn)!=r.state.facet(Yn)&&(this.viewState.mustMeasureContent=!0),(t||n||c||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),!r.empty)for(let f of this.state.facet(Ts))f(r);(l||h)&&Promise.resolve().then(()=>{l&&this.state==l.startState&&this.dispatch(l),h&&!Fa(this,h)&&a.force&&ui(this.contentDOM,a.key,a.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let n of this.plugins)n.destroy(this);this.viewState=new sr(e),this.plugins=e.facet(Ui).map(n=>new Gi(n)),this.pluginMap.clear();for(let n of this.plugins)n.update(this);this.docView=new ir(this),this.inputState.ensureHandlers(this,this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Ui),n=e.state.facet(Ui);if(t!=n){let r=[];for(let s of n){let O=t.indexOf(s);if(O<0)r.push(new Gi(s));else{let o=this.plugins[O];o.mustUpdate=e,r.push(o)}}for(let s of this.plugins)s.mustUpdate!=e&&s.destroy(this);this.plugins=r,this.pluginMap.clear(),this.inputState.ensureHandlers(this,this.plugins)}else for(let r of this.plugins)r.mustUpdate=e;for(let r=0;r-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,n=this.scrollDOM,{scrollTop:r}=n,{scrollAnchorPos:s,scrollAnchorHeight:O}=this.viewState;r!=this.viewState.scrollTop&&(O=-1),this.viewState.scrollAnchorHeight=-1;try{for(let o=0;;o++){if(O<0)if(ua(n))s=-1,O=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(r);s=d.from,O=d.top}this.updateState=1;let l=this.viewState.measure(this);if(!l&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(o>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let a=[];l&4||([this.measureRequests,a]=[a,this.measureRequests]);let h=a.map(d=>{try{return d.read(this)}catch(p){return Ke(this.state,p),na}}),c=tr.create(this,this.state,[]),f=!1;c.flags|=l,t?t.flags|=l:t=c,this.updateState=2,c.empty||(this.updatePlugins(c),this.inputState.update(c),this.updateAttrs(),f=this.docView.update(c));for(let d=0;d1||p<-1){r=n.scrollTop=r+p,O=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let o of this.state.facet(Ts))o(t)}get themeClasses(){return Bs+" "+(this.state.facet(Is)?Na:La)+" "+this.state.facet(Yn)}updateAttrs(){let e=ra(this,za,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",translate:"no",contenteditable:this.state.facet(hr)?"true":"false",class:"cm-content",style:`${X.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),ra(this,rO,t);let n=this.observer.ignore(()=>{let r=ks(this.contentDOM,this.contentAttrs,t),s=ks(this.dom,this.editorAttrs,e);return r||s});return this.editorAttrs=e,this.contentAttrs=t,n}showAnnouncements(e){let t=!0;for(let n of e)for(let r of n.effects)if(r.is(i.announce)){t&&(this.announceDOM.textContent=""),t=!1;let s=this.announceDOM.appendChild(document.createElement("div"));s.textContent=r.value}}mountStyles(){this.styleModules=this.state.facet(Yi),Ce.mount(this.root,this.styleModules.concat(mp).reverse())}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;tn.spec==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,n){return ms(this,e,Ml(this,e,t,n))}moveByGroup(e,t){return ms(this,e,Ml(this,e,t,n=>Fd(this,e.head,n)))}moveToLineBoundary(e,t,n=!0){return Hd(this,e,t,n)}moveVertically(e,t,n){return ms(this,e,Jd(this,e,t,n))}domAtPos(e){return this.docView.domAtPos(e)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){return this.readMeasured(),Ya(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let n=this.docView.coordsAt(e,t);if(!n||n.left==n.right)return n;let r=this.state.doc.lineAt(e),s=this.bidiSpans(r),O=s[yt.find(s,e-r.from,-1,t)];return tO(n,O.dir==K.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Ta)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>bp)return Za(e.length);let t=this.textDirectionAt(e.from);for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t)return r.order;let n=Yd(e.text,t);return this.bidiCache.push(new Or(e.from,e.to,t,n)),n}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||X.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{ca(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){return _l.of(new er(typeof e=="number"?Q.cursor(e):e,t.y,t.x,t.yMargin,t.xMargin))}static domEventHandlers(e){return Ee.define(()=>({}),{eventHandlers:e})}static theme(e,t){let n=Ce.newName(),r=[Yn.of(n),Yi.of(Ds(`.${n}`,e))];return t&&t.dark&&r.push(Is.of(!0)),r}static baseTheme(e){return He.lowest(Yi.of(Ds("."+Bs,e,Ha)))}static findFromDOM(e){var t;let n=e.querySelector(".cm-content"),r=n&&D.get(n)||D.get(e);return((t=r?.rootView)===null||t===void 0?void 0:t.view)||null}};v.styleModule=Yi;v.inputHandler=ka;v.focusChangeEffect=va;v.perLineTextDirection=Ta;v.exceptionSink=wa;v.updateListener=Ts;v.editable=hr;v.mouseSelectionStyle=xa;v.dragMovesSelection=ba;v.clickAddsSelectionRange=Pa;v.decorations=Hi;v.atomicRanges=sO;v.scrollMargins=Wa;v.darkTheme=Is;v.contentAttributes=rO;v.editorAttributes=za;v.lineWrapping=v.contentAttributes.of({class:"cm-lineWrapping"});v.announce=j.define();var bp=4096,na={},Or=class i{constructor(e,t,n,r){this.from=e,this.to=t,this.dir=n,this.order=r}static update(e,t){if(t.empty)return e;let n=[],r=e.length?e[e.length-1].dir:K.LTR;for(let s=Math.max(0,e.length-10);s=0;r--){let s=n[r],O=typeof s=="function"?s(i):s;O&&ws(O,t)}return t}var xp=X.mac?"mac":X.windows?"win":X.linux?"linux":"key";function wp(i,e){let t=i.split(/-(?!$)/),n=t[t.length-1];n=="Space"&&(n=" ");let r,s,O,o;for(let l=0;ln.concat(r),[]))),t}var St=null,Tp=4e3;function Xp(i,e=xp){let t=Object.create(null),n=Object.create(null),r=(O,o)=>{let l=n[O];if(l==null)n[O]=o;else if(l!=o)throw new Error("Key binding "+O+" is used both as a regular binding and as a multi-stroke prefix")},s=(O,o,l,a,h)=>{var c,f;let d=t[O]||(t[O]=Object.create(null)),p=o.split(/ (?!$)/).map(g=>wp(g,e));for(let g=1;g{let y=St={view:k,prefix:b,scope:O};return setTimeout(()=>{St==y&&(St=null)},Tp),!0}]})}let m=p.join(" ");r(m,!1);let $=d[m]||(d[m]={preventDefault:!1,stopPropagation:!1,run:((f=(c=d._any)===null||c===void 0?void 0:c.run)===null||f===void 0?void 0:f.slice())||[]});l&&$.run.push(l),a&&($.preventDefault=!0),h&&($.stopPropagation=!0)};for(let O of i){let o=O.scope?O.scope.split(" "):["editor"];if(O.any)for(let a of o){let h=t[a]||(t[a]=Object.create(null));h._any||(h._any={preventDefault:!1,stopPropagation:!1,run:[]});for(let c in h)h[c].run.push(O.any)}let l=O[e]||O.key;if(l)for(let a of o)s(a,l,O.run,O.preventDefault,O.stopPropagation),O.shift&&s(a,"Shift-"+l,O.shift,O.preventDefault,O.stopPropagation)}return t}function zp(i,e,t,n){let r=zl(e),s=si(r,0),O=Vi(s)==r.length&&r!=" ",o="",l=!1,a=!1,h=!1;St&&St.view==t&&St.scope==n&&(o=St.prefix+" ",Aa.indexOf(e.keyCode)<0&&(a=!0,St=null));let c=new Set,f=$=>{if($){for(let g of $.run)if(!c.has(g)&&(c.add(g),g(t,e)))return $.stopPropagation&&(h=!0),!0;$.preventDefault&&($.stopPropagation&&(h=!0),a=!0)}return!1},d=i[n],p,m;return d&&(f(d[o+_n(r,e,!O)])?l=!0:O&&(e.altKey||e.metaKey||e.ctrlKey)&&!(X.windows&&e.ctrlKey&&e.altKey)&&(p=at[e.keyCode])&&p!=r?(f(d[o+_n(p,e,!0)])||e.shiftKey&&(m=li[e.keyCode])!=r&&m!=p&&f(d[o+_n(m,e,!1)]))&&(l=!0):O&&e.shiftKey&&f(d[o+_n(r,e,!0)])&&(l=!0),!l&&f(d._any)&&(l=!0)),a&&(l=!0),l&&h&&e.stopPropagation(),l}var Fi=class i{constructor(e,t,n,r,s){this.className=e,this.left=t,this.top=n,this.width=r,this.height=s}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,n){if(n.empty){let r=e.coordsAtPos(n.head,n.assoc||1);if(!r)return[];let s=Ja(e);return[new i(t,r.left-s.left,r.top-s.top,null,r.bottom-r.top)]}else return Wp(e,t,n)}};function Ja(i){let e=i.scrollDOM.getBoundingClientRect();return{left:(i.textDirection==K.LTR?e.left:e.right-i.scrollDOM.clientWidth)-i.scrollDOM.scrollLeft,top:e.top-i.scrollDOM.scrollTop}}function Oa(i,e,t){let n=Q.cursor(e);return{from:Math.max(t.from,i.moveToLineBoundary(n,!1,!0).from),to:Math.min(t.to,i.moveToLineBoundary(n,!0,!0).from),type:H.Text}}function Wp(i,e,t){if(t.to<=i.viewport.from||t.from>=i.viewport.to)return[];let n=Math.max(t.from,i.viewport.from),r=Math.min(t.to,i.viewport.to),s=i.textDirection==K.LTR,O=i.contentDOM,o=O.getBoundingClientRect(),l=Ja(i),a=O.querySelector(".cm-line"),h=a&&window.getComputedStyle(a),c=o.left+(h?parseInt(h.paddingLeft)+Math.min(0,parseInt(h.textIndent)):0),f=o.right-(h?parseInt(h.paddingRight):0),d=Vs(i,n),p=Vs(i,r),m=d.type==H.Text?d:null,$=p.type==H.Text?p:null;if(m&&(i.lineWrapping||d.widgetLineBreaks)&&(m=Oa(i,n,m)),$&&(i.lineWrapping||p.widgetLineBreaks)&&($=Oa(i,r,$)),m&&$&&m.from==$.from)return b(k(t.from,t.to,m));{let w=m?k(t.from,null,m):y(d,!1),x=$?k(null,t.to,$):y(p,!0),V=[];return(m||d).to<($||p).from-(m&&$?1:0)||d.widgetLineBreaks>1&&w.bottom+i.defaultLineHeight/2ne&&ye.from=ce)break;re>le&&I(Math.max(ee,le),w==null&&ee<=ne,Math.min(re,ce),x==null&&re>=he,Pe.dir)}if(le=Ne.to+1,le>=ce)break}return q.length==0&&I(ne,w==null,he,x==null,i.textDirection),{top:G,bottom:Z,horizontal:q}}function y(w,x){let V=o.top+(x?w.top:w.bottom);return{top:V,bottom:V,horizontal:[]}}}function Rp(i,e){return i.constructor==e.constructor&&i.eq(e)}var Hs=class{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(En)!=e.state.facet(En)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&e.view.requestMeasure(this.measureReq)}setOrder(e){let t=0,n=e.facet(En);for(;t!Rp(t,this.drawn[n]))){let t=this.dom.firstChild,n=0;for(let r of e)r.update&&t&&r.constructor&&this.drawn[n].constructor&&r.update(t,this.drawn[n])?(t=t.nextSibling,n++):this.dom.insertBefore(r.draw(),t);for(;t;){let r=t.nextSibling;t.remove(),t=r}this.drawn=e}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},En=W.define();function Ka(i){return[Ee.define(e=>new Hs(e,i)),En.of(i)]}var eh=!X.ios,Ji=W.define({combine(i){return Qt(i,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function th(i={}){return[Ji.of(i),Vp,Zp,Cp,Xa.of(!0)]}function ih(i){return i.startState.facet(Ji)!=i.state.facet(Ji)}var Vp=Ka({above:!0,markers(i){let{state:e}=i,t=e.facet(Ji),n=[];for(let r of e.selection.ranges){let s=r==e.selection.main;if(r.empty?!s||eh:t.drawRangeCursor){let O=s?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",o=r.empty?r:Q.cursor(r.head,r.head>r.anchor?-1:1);for(let l of Fi.forRange(i,O,o))n.push(l)}}return n},update(i,e){i.transactions.some(n=>n.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=ih(i);return t&&oa(i.state,e),i.docChanged||i.selectionSet||t},mount(i,e){oa(e.state,i)},class:"cm-cursorLayer"});function oa(i,e){e.style.animationDuration=i.facet(Ji).cursorBlinkRate+"ms"}var Zp=Ka({above:!1,markers(i){return i.state.selection.ranges.map(e=>e.empty?[]:Fi.forRange(i,"cm-selectionBackground",e)).reduce((e,t)=>e.concat(t))},update(i,e){return i.docChanged||i.selectionSet||i.viewportChanged||ih(i)},class:"cm-selectionLayer"}),nh={".cm-line":{"& ::selection":{backgroundColor:"transparent !important"},"&::selection":{backgroundColor:"transparent !important"}}};eh&&(nh[".cm-line"].caretColor="transparent !important");var Cp=He.highest(v.theme(nh)),rh=j.define({map(i,e){return i==null?null:e.mapPos(i)}}),Ai=Qe.define({create(){return null},update(i,e){return i!=null&&(i=e.changes.mapPos(i)),e.effects.reduce((t,n)=>n.is(rh)?n.value:t,i)}}),qp=Ee.fromClass(class{constructor(i){this.view=i,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(i){var e;let t=i.state.field(Ai);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(i.startState.field(Ai)!=t||i.docChanged||i.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let i=this.view.state.field(Ai),e=i!=null&&this.view.coordsAtPos(i);if(!e)return null;let t=this.view.scrollDOM.getBoundingClientRect();return{left:e.left-t.left+this.view.scrollDOM.scrollLeft,top:e.top-t.top+this.view.scrollDOM.scrollTop,height:e.bottom-e.top}}drawCursor(i){this.cursor&&(i?(this.cursor.style.left=i.left+"px",this.cursor.style.top=i.top+"px",this.cursor.style.height=i.height+"px"):this.cursor.style.left="-100000px")}destroy(){this.cursor&&this.cursor.remove()}setDropPos(i){this.view.state.field(Ai)!=i&&this.view.dispatch({effects:rh.of(i)})}},{eventHandlers:{dragover(i){this.setDropPos(this.view.posAtCoords({x:i.clientX,y:i.clientY}))},dragleave(i){(i.target==this.view.contentDOM||!this.view.contentDOM.contains(i.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function sh(){return[Ai,qp]}var mP=/x/.unicode!=null?"gu":"g";function OO(){return Yp}var Up=M.line({class:"cm-activeLine"}),Yp=Ee.fromClass(class{constructor(i){this.decorations=this.getDeco(i)}update(i){(i.docChanged||i.selectionSet)&&(this.decorations=this.getDeco(i.view))}getDeco(i){let e=-1,t=[];for(let n of i.state.selection.ranges){let r=i.lineBlockAt(n.head);r.from>e&&(t.push(Up.range(r.from)),e=r.from)}return M.set(t)}},{decorations:i=>i.decorations});var Fs=2e3;function _p(i,e,t){let n=Math.min(e.line,t.line),r=Math.max(e.line,t.line),s=[];if(e.off>Fs||t.off>Fs||e.col<0||t.col<0){let O=Math.min(e.off,t.off),o=Math.max(e.off,t.off);for(let l=n;l<=r;l++){let a=i.doc.line(l);a.length<=o&&s.push(Q.range(a.from+O,a.to+o))}}else{let O=Math.min(e.col,t.col),o=Math.max(e.col,t.col);for(let l=n;l<=r;l++){let a=i.doc.line(l),h=Wn(a.text,O,i.tabSize,!0);if(h<0)s.push(Q.cursor(a.to));else{let c=Wn(a.text,o,i.tabSize);s.push(Q.range(a.from+h,a.from+c))}}}return s}function Ap(i,e){let t=i.coordsAtPos(i.viewport.from);return t?Math.round(Math.abs((t.left-e)/i.defaultCharacterWidth)):-1}function la(i,e){let t=i.posAtCoords({x:e.clientX,y:e.clientY},!1),n=i.state.doc.lineAt(t),r=t-n.from,s=r>Fs?-1:r==n.length?Ap(i,e.clientX):Gt(n.text,i.state.tabSize,t-n.from);return{line:n.number,col:s,off:r}}function jp(i,e){let t=la(i,e),n=i.state.selection;return t?{update(r){if(r.docChanged){let s=r.changes.mapPos(r.startState.doc.line(t.line).from),O=r.state.doc.lineAt(s);t={line:O.number,col:t.col,off:Math.min(t.off,O.length)},n=n.map(r.changes)}},get(r,s,O){let o=la(i,r);if(!o)return n;let l=_p(i.state,t,o);return l.length?O?Q.create(l.concat(n.ranges)):Q.create(l):n}}:null}function Oh(i){let e=i?.eventFilter||(t=>t.altKey&&t.button==0);return v.mouseSelectionStyle.of((t,n)=>e(n)?jp(t,n):null)}var gP=v.baseTheme({".cm-tooltip":{zIndex:100,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:`${7*2}px`,position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}});var Me=class extends Ge{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};Me.prototype.elementClass="";Me.prototype.toDOM=void 0;Me.prototype.mapMode=ae.TrackBefore;Me.prototype.startSide=Me.prototype.endSide=-1;Me.prototype.point=!0;var Mn=W.define();var In=W.define();var Js=W.define({combine:i=>i.some(e=>e)});function Gp(i){let e=[Ep];return i&&i.fixed===!1&&e.push(Js.of(!0)),e}var Ep=Ee.fromClass(class{constructor(i){this.view=i,this.prevViewport=i.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight+"px",this.gutters=i.state.facet(In).map(e=>new or(i,e));for(let e of this.gutters)this.dom.appendChild(e.dom);this.fixed=!i.state.facet(Js),this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),i.scrollDOM.insertBefore(this.dom,i.contentDOM)}update(i){if(this.updateGutters(i)){let e=this.prevViewport,t=i.view.viewport,n=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(n<(t.to-t.from)*.8)}i.geometryChanged&&(this.dom.style.minHeight=this.view.contentHeight+"px"),this.view.state.facet(Js)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":""),this.prevViewport=i.view.viewport}syncGutters(i){let e=this.dom.nextSibling;i&&this.dom.remove();let t=L.iter(this.view.state.facet(Mn),this.view.viewport.from),n=[],r=this.gutters.map(s=>new eO(s,this.view.viewport,-this.view.documentPadding.top));for(let s of this.view.viewportLineBlocks)if(n.length&&(n=[]),Array.isArray(s.type)){let O=!0;for(let o of s.type)if(o.type==H.Text&&O){Ks(t,n,o.from);for(let l of r)l.line(this.view,o,n);O=!1}else if(o.widget)for(let l of r)l.widget(this.view,o)}else if(s.type==H.Text){Ks(t,n,s.from);for(let O of r)O.line(this.view,s,n)}for(let s of r)s.finish();i&&this.view.scrollDOM.insertBefore(this.dom,e)}updateGutters(i){let e=i.startState.facet(In),t=i.state.facet(In),n=i.docChanged||i.heightChanged||i.viewportChanged||!L.eq(i.startState.facet(Mn),i.state.facet(Mn),i.view.viewport.from,i.view.viewport.to);if(e==t)for(let r of this.gutters)r.update(i)&&(n=!0);else{n=!0;let r=[];for(let s of t){let O=e.indexOf(s);O<0?r.push(new or(this.view,s)):(this.gutters[O].update(i),r.push(this.gutters[O]))}for(let s of this.gutters)s.dom.remove(),r.indexOf(s)<0&&s.destroy();for(let s of r)this.dom.appendChild(s.dom);this.gutters=r}return n}destroy(){for(let i of this.gutters)i.destroy();this.dom.remove()}},{provide:i=>v.scrollMargins.of(e=>{let t=e.plugin(i);return!t||t.gutters.length==0||!t.fixed?null:e.textDirection==K.LTR?{left:t.dom.offsetWidth}:{right:t.dom.offsetWidth}})});function aa(i){return Array.isArray(i)?i:[i]}function Ks(i,e,t){for(;i.value&&i.from<=t;)i.from==t&&e.push(i.value),i.next()}var eO=class{constructor(e,t,n){this.gutter=e,this.height=n,this.i=0,this.cursor=L.iter(e.markers,t.from)}addElement(e,t,n){let{gutter:r}=this,s=t.top-this.height;if(this.i==r.elements.length){let O=new lr(e,t.height,s,n);r.elements.push(O),r.dom.appendChild(O.dom)}else r.elements[this.i].update(e,t.height,s,n);this.height=t.bottom,this.i++}line(e,t,n){let r=[];Ks(this.cursor,r,t.from),n.length&&(r=r.concat(n));let s=this.gutter.config.lineMarker(e,t,r);s&&r.unshift(s);let O=this.gutter;r.length==0&&!O.config.renderEmptyElements||this.addElement(e,t,r)}widget(e,t){let n=this.gutter.config.widgetMarker(e,t.widget,t);n&&this.addElement(e,t,[n])}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}},or=class{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let n in t.domEventHandlers)this.dom.addEventListener(n,r=>{let s=r.target,O;if(s!=this.dom&&this.dom.contains(s)){for(;s.parentNode!=this.dom;)s=s.parentNode;let l=s.getBoundingClientRect();O=(l.top+l.bottom)/2}else O=r.clientY;let o=e.lineBlockAtHeight(O-e.documentTop);t.domEventHandlers[n](e,o,r)&&r.preventDefault()});this.markers=aa(t.markers(e)),t.initialSpacer&&(this.spacer=new lr(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=aa(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let r=this.config.updateSpacer(this.spacer.markers[0],e);r!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[r])}let n=e.view.viewport;return!L.eq(this.markers,t,n.from,n.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},lr=class{constructor(e,t,n,r){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,n,r)}update(e,t,n,r){this.height!=t&&(this.dom.style.height=(this.height=t)+"px"),this.above!=n&&(this.dom.style.marginTop=(this.above=n)?n+"px":""),Mp(this.markers,r)||this.setMarkers(e,r)}setMarkers(e,t){let n="cm-gutterElement",r=this.dom.firstChild;for(let s=0,O=0;;){let o=O,l=ss(o,l,a)||O(o,l,a):O}return n}})}}),Mi=class extends Me{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function Qs(i,e){return i.state.facet(fi).formatNumber(e,i.state)}var Bp=In.compute([fi],i=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(Ip)},lineMarker(e,t,n){return n.some(r=>r.toDOM)?null:new Mi(Qs(e,e.state.doc.lineAt(t.from).number))},widgetMarker:()=>null,lineMarkerChange:e=>e.startState.facet(fi)!=e.state.facet(fi),initialSpacer(e){return new Mi(Qs(e,ha(e.state.doc.lines)))},updateSpacer(e,t){let n=Qs(t.view,ha(t.view.state.doc.lines));return n==e.number?e:new Mi(n)},domEventHandlers:i.facet(fi).domEventHandlers}));function oh(i={}){return[fi.of(i),Gp(),Bp]}function ha(i){let e=9;for(;e{let e=[],t=-1;for(let n of i.selection.ranges){let r=i.doc.lineAt(n.head).from;r>t&&(t=r,e.push(Dp.range(r)))}return L.of(e)});function oO(){return Lp}async function lh(i){if(window.isSecureContext&&navigator.clipboard){await navigator.clipboard.writeText(i);return}let e=document.createElement("textarea");e.style="position: absolute; left: -1000px; top: -1000px;",e.value=i,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e)}var Np=0,we=class{constructor(e,t){this.from=e,this.to=t}},R=class{constructor(e={}){this.id=Np++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")})}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=F.match(e)),t=>{let n=e(t);return n===void 0?null:[this,n]}}};R.closedBy=new R({deserialize:i=>i.split(" ")});R.openedBy=new R({deserialize:i=>i.split(" ")});R.group=new R({deserialize:i=>i.split(" ")});R.contextHash=new R({perNode:!0});R.lookAhead=new R({perNode:!0});R.mounted=new R({perNode:!0});var lO=class{constructor(e,t,n){this.tree=e,this.overlay=t,this.parser=n}},Hp=Object.create(null),F=class i{constructor(e,t,n,r=0){this.name=e,this.props=t,this.id=n,this.flags=r}static define(e){let t=e.props&&e.props.length?Object.create(null):Hp,n=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),r=new i(e.name||"",t,e.id,n);if(e.props){for(let s of e.props)if(Array.isArray(s)||(s=s(r)),s){if(s[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[s[0].id]=s[1]}}return r}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(R.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let n in e)for(let r of n.split(" "))t[r]=e[n];return n=>{for(let r=n.prop(R.group),s=-1;s<(r?r.length:0);s++){let O=t[s<0?n.name:r[s]];if(O)return O}}}};F.none=new F("",Object.create(null),0,8);var ct=class i{constructor(e){this.types=e;for(let t=0;t=r&&(O.type.isAnonymous||t(O)!==!1)){if(O.firstChild())continue;o=!0}for(;o&&n&&!O.type.isAnonymous&&n(O),!O.nextSibling();){if(!O.parent())return;o=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:mO(F.none,this.children,this.positions,0,this.children.length,0,this.length,(t,n,r)=>new i(this.type,t,n,r,this.propValues),e.makeTree||((t,n,r)=>new i(F.none,t,n,r)))}static build(e){return Fp(e)}};C.empty=new C(F.none,[],[],0);var aO=class i{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new i(this.buffer,this.index)}},Mt=class i{constructor(e,t,n){this.buffer=e,this.length=t,this.set=n}get type(){return F.none}toString(){let e=[];for(let t=0;t0));l=O[l+3]);return o}slice(e,t,n){let r=this.buffer,s=new Uint16Array(t-e),O=0;for(let o=e,l=0;o=e&&te;case 1:return t<=e&&n>e;case 2:return n>e;case 4:return!0}}function ph(i,e){let t=i.childBefore(e);for(;t;){let n=t.lastChild;if(!n||n.to!=t.to)break;n.type.isError&&n.from==n.to?(i=t,t=n.prevSibling):t=n}return i}function di(i,e,t,n){for(var r;i.from==i.to||(t<1?i.from>=e:i.from>e)||(t>-1?i.to<=e:i.to0?o.length:-1;e!=a;e+=t){let h=o[e],c=l[e]+O.from;if(dh(r,n,c,c+h.length)){if(h instanceof Mt){if(s&A.ExcludeBuffers)continue;let f=h.findChild(0,h.buffer.length,t,n-c,r);if(f>-1)return new It(new hO(O,h,e,c),null,f)}else if(s&A.IncludeAnonymous||!h.type.isAnonymous||$O(h)){let f;if(!(s&A.IgnoreMounts)&&h.props&&(f=h.prop(R.mounted))&&!f.overlay)return new i(f.tree,c,e,O);let d=new i(h,c,e,O);return s&A.IncludeAnonymous||!d.type.isAnonymous?d:d.nextChild(t<0?h.children.length-1:0,t,n,r)}}}if(s&A.IncludeAnonymous||!O.type.isAnonymous||(O.index>=0?e=O.index+t:e=t<0?-1:O._parent._tree.children.length,O=O._parent,!O))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}enter(e,t,n=0){let r;if(!(n&A.IgnoreOverlays)&&(r=this._tree.prop(R.mounted))&&r.overlay){let s=e-this.from;for(let{from:O,to:o}of r.overlay)if((t>0?O<=s:O=s:o>s))return new i(r.tree,r.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,n)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}cursor(e=0){return new Bt(this,e)}get tree(){return this._tree}toTree(){return this._tree}resolve(e,t=0){return di(this,e,t,!1)}resolveInner(e,t=0){return di(this,e,t,!0)}enterUnfinishedNodesBefore(e){return ph(this,e)}getChild(e,t=null,n=null){let r=ur(this,e,t,n);return r.length?r[0]:null}getChildren(e,t=null,n=null){return ur(this,e,t,n)}toString(){return this._tree.toString()}get node(){return this}matchContext(e){return dr(this,e)}};function ur(i,e,t,n){let r=i.cursor(),s=[];if(!r.firstChild())return s;if(t!=null){for(;!r.type.is(t);)if(!r.nextSibling())return s}for(;;){if(n!=null&&r.type.is(n))return s;if(r.type.is(e)&&s.push(r.node),!r.nextSibling())return n==null?s:[]}}function dr(i,e,t=e.length-1){for(let n=i.parent;t>=0;n=n.parent){if(!n)return!1;if(!n.type.isAnonymous){if(e[t]&&e[t]!=n.name)return!1;t--}}return!0}var hO=class{constructor(e,t,n,r){this.parent=e,this.buffer=t,this.index=n,this.start=r}},It=class i{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,n){this.context=e,this._parent=t,this.index=n,this.type=e.buffer.set.types[e.buffer.buffer[n]]}child(e,t,n){let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.context.start,n);return s<0?null:new i(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}enter(e,t,n=0){if(n&A.ExcludeBuffers)return null;let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return s<0?null:new i(this.context,this,s)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new i(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new i(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}cursor(e=0){return new Bt(this,e)}get tree(){return null}toTree(){let e=[],t=[],{buffer:n}=this.context,r=this.index+4,s=n.buffer[this.index+3];if(s>r){let O=n.buffer[this.index+1];e.push(n.slice(r,s,O)),t.push(0)}return new C(this.type,e,t,this.to-this.from)}resolve(e,t=0){return di(this,e,t,!1)}resolveInner(e,t=0){return di(this,e,t,!0)}enterUnfinishedNodesBefore(e){return ph(this,e)}toString(){return this.context.buffer.childString(this.index)}getChild(e,t=null,n=null){let r=ur(this,e,t,n);return r.length?r[0]:null}getChildren(e,t=null,n=null){return ur(this,e,t,n)}get node(){return this}matchContext(e){return dr(this,e)}},Bt=class{get name(){return this.type.name}constructor(e,t=0){if(this.mode=t,this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,e instanceof it)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let n=e._parent;n;n=n._parent)this.stack.unshift(n.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:n,buffer:r}=this.buffer;return this.type=t||r.set.types[r.buffer[e]],this.from=n+r.buffer[e+1],this.to=n+r.buffer[e+2],!0}yield(e){return e?e instanceof it?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,n){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,n,this.mode));let{buffer:r}=this.buffer,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.buffer.start,n);return s<0?!1:(this.stack.push(this.index),this.yieldBuf(s))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,n=this.mode){return this.buffer?n&A.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,n))}parent(){if(!this.buffer)return this.yieldNode(this.mode&A.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&A.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,n=this.stack.length-1;if(e<0){let r=n<0?0:this.stack[n]+4;if(this.index!=r)return this.yieldBuf(t.findChild(r,this.index,-1,0,4))}else{let r=t.buffer[this.index+3];if(r<(n<0?t.buffer.length:t.buffer[this.stack[n]+3]))return this.yieldBuf(r)}return n<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,n,{buffer:r}=this;if(r){if(e>0){if(this.index-1)for(let s=t+e,O=e<0?-1:n._tree.children.length;s!=O;s+=e){let o=n._tree.children[s];if(this.mode&A.IncludeAnonymous||o instanceof Mt||!o.type.isAnonymous||$O(o))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let O=e;O;O=O._parent)if(O.index==r){if(r==this.index)return O;t=O,n=s+1;break e}r=this.stack[--s]}for(let r=n;r=0;s--){if(s<0)return dr(this.node,e,r);let O=n[t.buffer[this.stack[s]]];if(!O.isAnonymous){if(e[r]&&e[r]!=O.name)return!1;r--}}return!0}};function $O(i){return i.children.some(e=>e instanceof Mt||!e.type.isAnonymous||$O(e))}function Fp(i){var e;let{buffer:t,nodeSet:n,maxBufferLength:r=1024,reused:s=[],minRepeatType:O=n.types.length}=i,o=Array.isArray(t)?new aO(t,t.length):t,l=n.types,a=0,h=0;function c(y,w,x,V,G){let{id:Z,start:q,end:I,size:ne}=o,he=h;for(;ne<0;)if(o.next(),ne==-1){let Pe=s[Z];x.push(Pe),V.push(q-y);return}else if(ne==-3){a=Z;return}else if(ne==-4){h=Z;return}else throw new RangeError(`Unrecognized record size: ${ne}`);let ye=l[Z],le,ce,Ne=q-y;if(I-q<=r&&(ce=m(o.pos-w,G))){let Pe=new Uint16Array(ce.size-ce.skip),ee=o.pos-ce.size,re=Pe.length;for(;o.pos>ee;)re=$(ce.start,Pe,re);le=new Mt(Pe,I-ce.start,n),Ne=ce.start-y}else{let Pe=o.pos-ne;o.next();let ee=[],re=[],qt=Z>=O?Z:-1,ti=0,yn=I;for(;o.pos>Pe;)qt>=0&&o.id==qt&&o.size>=0?(o.end<=yn-r&&(d(ee,re,q,ti,o.end,yn,qt,he),ti=ee.length,yn=o.end),o.next()):c(q,Pe,ee,re,qt);if(qt>=0&&ti>0&&ti-1&&ti>0){let nl=f(ye);le=mO(ye,ee,re,0,ee.length,0,I-q,nl,nl)}else le=p(ye,ee,re,I-q,he-I)}x.push(le),V.push(Ne)}function f(y){return(w,x,V)=>{let G=0,Z=w.length-1,q,I;if(Z>=0&&(q=w[Z])instanceof C){if(!Z&&q.type==y&&q.length==V)return q;(I=q.prop(R.lookAhead))&&(G=x[Z]+q.length+I)}return p(y,w,x,V,G)}}function d(y,w,x,V,G,Z,q,I){let ne=[],he=[];for(;y.length>V;)ne.push(y.pop()),he.push(w.pop()+x-G);y.push(p(n.types[q],ne,he,Z-G,I-Z)),w.push(G-x)}function p(y,w,x,V,G=0,Z){if(a){let q=[R.contextHash,a];Z=Z?[q].concat(Z):[q]}if(G>25){let q=[R.lookAhead,G];Z=Z?[q].concat(Z):[q]}return new C(y,w,x,V,Z)}function m(y,w){let x=o.fork(),V=0,G=0,Z=0,q=x.end-r,I={size:0,start:0,skip:0};e:for(let ne=x.pos-y;x.pos>ne;){let he=x.size;if(x.id==w&&he>=0){I.size=V,I.start=G,I.skip=Z,Z+=4,V+=4,x.next();continue}let ye=x.pos-he;if(he<0||ye=O?4:0,ce=x.start;for(x.next();x.pos>ye;){if(x.size<0)if(x.size==-3)le+=4;else break e;else x.id>=O&&(le+=4);x.next()}G=ce,V+=he,Z+=le}return(w<0||V==y)&&(I.size=V,I.start=G,I.skip=Z),I.size>4?I:void 0}function $(y,w,x){let{id:V,start:G,end:Z,size:q}=o;if(o.next(),q>=0&&V4){let ne=o.pos-(q-4);for(;o.pos>ne;)x=$(y,w,x)}w[--x]=I,w[--x]=Z-y,w[--x]=G-y,w[--x]=V}else q==-3?a=V:q==-4&&(h=V);return x}let g=[],b=[];for(;o.pos>0;)c(i.start||0,i.bufferStart||0,g,b,-1);let k=(e=i.length)!==null&&e!==void 0?e:g.length?b[0]+g[0].length:0;return new C(l[i.topID],g.reverse(),b.reverse(),k)}var hh=new WeakMap;function fr(i,e){if(!i.isAnonymous||e instanceof Mt||e.type!=i)return 1;let t=hh.get(e);if(t==null){t=1;for(let n of e.children){if(n.type!=i||!(n instanceof C)){t=1;break}t+=fr(i,n)}hh.set(e,t)}return t}function mO(i,e,t,n,r,s,O,o,l){let a=0;for(let p=n;p=h)break;x+=V}if(k==y+1){if(x>h){let V=p[y];d(V.children,V.positions,0,V.children.length,m[y]+b);continue}c.push(p[y])}else{let V=m[k-1]+p[k-1].length-w;c.push(mO(i,p,m,y,k,w,V,null,l))}f.push(w+b-s)}}return d(e,t,n,r,0),(o||l)(c,f,O)}var pi=class{constructor(){this.map=new WeakMap}setBuffer(e,t,n){let r=this.map.get(e);r||this.map.set(e,r=new Map),r.set(t,n)}getBuffer(e,t){let n=this.map.get(e);return n&&n.get(t)}set(e,t){e instanceof It?this.setBuffer(e.context.buffer,e.index,t):e instanceof it&&this.map.set(e.tree,t)}get(e){return e instanceof It?this.getBuffer(e.context.buffer,e.index):e instanceof it?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}},ft=class i{constructor(e,t,n,r,s=!1,O=!1){this.from=e,this.to=t,this.tree=n,this.offset=r,this.open=(s?1:0)|(O?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],n=!1){let r=[new i(0,e.length,e,0,!1,n)];for(let s of t)s.to>e.length&&r.push(s);return r}static applyChanges(e,t,n=128){if(!t.length)return e;let r=[],s=1,O=e.length?e[0]:null;for(let o=0,l=0,a=0;;o++){let h=o=n)for(;O&&O.from=f.from||c<=f.to||a){let d=Math.max(f.from,l)-a,p=Math.min(f.to,c)-a;f=d>=p?null:new i(d,p,f.tree,f.offset+a,o>0,!!h)}if(f&&r.push(f),O.to>c)break;O=snew we(r.from,r.to)):[new we(0,0)]:[new we(0,e.length)],this.createParse(e,t||[],n)}parse(e,t,n){let r=this.startParse(e,t,n);for(;;){let s=r.advance();if(s)return s}}},cO=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}};function $i(i){return(e,t,n,r)=>new dO(e,i,t,n,r)}var pr=class{constructor(e,t,n,r,s){this.parser=e,this.parse=t,this.overlay=n,this.target=r,this.ranges=s}},fO=class{constructor(e,t,n,r,s,O,o){this.parser=e,this.predicate=t,this.mounts=n,this.index=r,this.start=s,this.target=O,this.prev=o,this.depth=0,this.ranges=[]}},uO=new R({perNode:!0}),dO=class{constructor(e,t,n,r,s){this.nest=t,this.input=n,this.fragments=r,this.ranges=s,this.inner=[],this.innerDone=0,this.baseTree=null,this.stoppedAt=null,this.baseParse=e}advance(){if(this.baseParse){let n=this.baseParse.advance();if(!n)return null;if(this.baseParse=null,this.baseTree=n,this.startInner(),this.stoppedAt!=null)for(let r of this.inner)r.parse.stopAt(this.stoppedAt)}if(this.innerDone==this.inner.length){let n=this.baseTree;return this.stoppedAt!=null&&(n=new C(n.type,n.children,n.positions,n.length,n.propValues.concat([[uO,this.stoppedAt]]))),n}let e=this.inner[this.innerDone],t=e.parse.advance();if(t){this.innerDone++;let n=Object.assign(Object.create(null),e.target.props);n[R.mounted.id]=new lO(t,e.overlay,e.parser),e.target.props=n}return null}get parsedPos(){if(this.baseParse)return 0;let e=this.input.length;for(let t=this.innerDone;th.frag.from<=r.from&&h.frag.to>=r.to&&h.mount.overlay);if(a)for(let h of a.mount.overlay){let c=h.from+a.pos,f=h.to+a.pos;c>=r.from&&f<=r.to&&!t.ranges.some(d=>d.fromc)&&t.ranges.push({from:c,to:f})}}o=!1}else if(n&&(O=Jp(n.ranges,r.from,r.to)))o=O!=2;else if(!r.type.isAnonymous&&r.fromnew we(c.from-r.from,c.to-r.from)):null,r.tree,h)),s.overlay?h.length&&(n={ranges:h,depth:0,prev:n}):o=!1}}else t&&(l=t.predicate(r))&&(l===!0&&(l=new we(r.from,r.to)),l.fromnew we(h.from-t.start,h.to-t.start)),t.target,a)),t=t.prev}n&&!--n.depth&&(n=n.prev)}}}};function Jp(i,e,t){for(let n of i){if(n.from>=t)break;if(n.to>e)return n.from<=e&&n.to>=t?2:1}return 0}function ch(i,e,t,n,r,s){if(e=e.to);n++);let O=r.children[n],o=O.buffer;function l(a,h,c,f,d){let p=a;for(;o[p+2]+s<=e.from;)p=o[p+3];let m=[],$=[];ch(O,a,p,m,$,f);let g=o[p+1],b=o[p+2],k=g+s==e.from&&b+s==e.to&&o[p]==e.type.id;return m.push(k?e.toTree():l(p+4,o[p+3],O.set.types[o[p]],g,b-g)),$.push(g-f),ch(O,o[p+3],h,m,$,f),new C(c,m,$,d)}r.children[n]=l(0,o.length,F.none,0,O.length);for(let a=0;a<=t;a++)i.childAfter(e.from)}var $r=class{constructor(e,t){this.offset=t,this.done=!1,this.cursor=e.cursor(A.IncludeAnonymous|A.IgnoreMounts)}moveTo(e){let{cursor:t}=this,n=e-this.offset;for(;!this.done&&t.from=e&&t.enter(n,1,A.IgnoreOverlays|A.ExcludeBuffers)||t.next(!1)||(this.done=!0)}hasNode(e){if(this.moveTo(e.from),!this.done&&this.cursor.from+this.offset==e.from&&this.cursor.tree)for(let t=this.cursor.tree;;){if(t==e.tree)return!0;if(t.children.length&&t.positions[0]==0&&t.children[0]instanceof C)t=t.children[0];else break}return!1}},pO=class{constructor(e){var t;if(this.fragments=e,this.curTo=0,this.fragI=0,e.length){let n=this.curFrag=e[0];this.curTo=(t=n.tree.prop(uO))!==null&&t!==void 0?t:n.to,this.inner=new $r(n.tree,-n.offset)}else this.curFrag=this.inner=null}hasNode(e){for(;this.curFrag&&e.from>=this.curTo;)this.nextFrag();return this.curFrag&&this.curFrag.from<=e.from&&this.curTo>=e.to&&this.inner.hasNode(e)}nextFrag(){var e;if(this.fragI++,this.fragI==this.fragments.length)this.curFrag=this.inner=null;else{let t=this.curFrag=this.fragments[this.fragI];this.curTo=(e=t.tree.prop(uO))!==null&&e!==void 0?e:t.to,this.inner=new $r(t.tree,-t.offset)}}findMounts(e,t){var n;let r=[];if(this.inner){this.inner.cursor.moveTo(e,1);for(let s=this.inner.cursor.node;s;s=s.parent){let O=(n=s.tree)===null||n===void 0?void 0:n.prop(R.mounted);if(O&&O.parser==t)for(let o=this.fragI;o=s.to)break;l.tree==this.curFrag.tree&&r.push({frag:l,pos:s.from-l.offset,mount:O})}}}return r}};function fh(i,e){let t=null,n=e;for(let r=1,s=0;r=o)break;l.to<=O||(t||(n=t=e.slice()),l.fromo&&t.splice(s+1,0,new we(o,l.to))):l.to>o?t[s--]=new we(o,l.to):t.splice(s--,1))}}return n}function e$(i,e,t,n){let r=0,s=0,O=!1,o=!1,l=-1e9,a=[];for(;;){let h=r==i.length?1e9:O?i[r].to:i[r].from,c=s==e.length?1e9:o?e[s].to:e[s].from;if(O!=o){let f=Math.max(l,t),d=Math.min(h,c,n);fnew we(f.from+n,f.to+n)),c=e$(e,h,l,a);for(let f=0,d=l;;f++){let p=f==c.length,m=p?a:c[f].from;if(m>d&&t.push(new ft(d,m,r.tree,-O,s.from>=d||s.openStart,s.to<=m||s.openEnd)),p)break;d=c[f].to}}else t.push(new ft(l,a,r.tree,-O,s.from>=O||s.openStart,s.to<=o||s.openEnd))}return t}var t$=0,Ue=class i{constructor(e,t,n){this.set=e,this.base=t,this.modified=n,this.id=t$++}static define(e){if(e?.base)throw new Error("Can not derive from a modified tag");let t=new i([],null,[]);if(t.set.push(t),e)for(let n of e.set)t.set.push(n);return t}static defineModifier(){let e=new Sr;return t=>t.modified.indexOf(e)>-1?t:Sr.get(t.base||t,t.modified.concat(e).sort((n,r)=>n.id-r.id))}},i$=0,Sr=class i{constructor(){this.instances=[],this.id=i$++}static get(e,t){if(!t.length)return e;let n=t[0].instances.find(o=>o.base==e&&n$(t,o.modified));if(n)return n;let r=[],s=new Ue(r,e,t);for(let o of t)o.instances.push(s);let O=r$(t);for(let o of e.set)if(!o.modified.length)for(let l of O)r.push(i.get(o,l));return s}};function n$(i,e){return i.length==e.length&&i.every((t,n)=>t==e[n])}function r$(i){let e=[[]];for(let t=0;tn.length-t.length)}function se(i){let e=Object.create(null);for(let t in i){let n=i[t];Array.isArray(n)||(n=[n]);for(let r of t.split(" "))if(r){let s=[],O=2,o=r;for(let c=0;;){if(o=="..."&&c>0&&c+3==r.length){O=1;break}let f=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(o);if(!f)throw new RangeError("Invalid path: "+r);if(s.push(f[0]=="*"?"":f[0][0]=='"'?JSON.parse(f[0]):f[0]),c+=f[0].length,c==r.length)break;let d=r[c++];if(c==r.length&&d=="!"){O=0;break}if(d!="/")throw new RangeError("Invalid path: "+r);o=r.slice(c)}let l=s.length-1,a=s[l];if(!a)throw new RangeError("Invalid path: "+r);let h=new mi(n,O,l>0?s.slice(0,l):null);e[a]=h.sort(e[a])}}return gh.add(e)}var gh=new R,mi=class{constructor(e,t,n,r){this.tags=e,this.mode=t,this.context=n,this.next=r}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let O=r;for(let o of s)for(let l of o.set){let a=t[l.id];if(a){O=O?O+" "+a:a;break}}return O},scope:n}}function s$(i,e){let t=null;for(let n of i){let r=n.style(e);r&&(t=t?t+" "+r:r)}return t}function Qh(i,e,t,n=0,r=i.length){let s=new QO(n,Array.isArray(e)?e:[e],t);s.highlightRange(i.cursor(),n,r,"",s.highlighters),s.flush(r)}var QO=class{constructor(e,t,n){this.at=e,this.highlighters=t,this.span=n,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,n,r,s){let{type:O,from:o,to:l}=e;if(o>=n||l<=t)return;O.isTop&&(s=this.highlighters.filter(d=>!d.scope||d.scope(O)));let a=r,h=O$(e)||mi.empty,c=s$(s,h.tags);if(c&&(a&&(a+=" "),a+=c,h.mode==1&&(r+=(r?" ":"")+c)),this.startSpan(Math.max(t,o),a),h.opaque)return;let f=e.tree&&e.tree.prop(R.mounted);if(f&&f.overlay){let d=e.node.enter(f.overlay[0].from+o,1),p=this.highlighters.filter($=>!$.scope||$.scope(f.tree.type)),m=e.firstChild();for(let $=0,g=o;;$++){let b=$=k||!e.nextSibling())););if(!b||k>n)break;g=b.to+o,g>t&&(this.highlightRange(d.cursor(),Math.max(t,b.from+o),Math.min(n,g),"",p),this.startSpan(Math.min(n,g),a))}m&&e.parent()}else if(e.firstChild()){f&&(r="");do if(!(e.to<=t)){if(e.from>=n)break;this.highlightRange(e,t,n,r,s),this.startSpan(Math.min(n,e.to),a)}while(e.nextSibling());e.parent()}}};function O$(i){let e=i.type.prop(gh);for(;e&&e.context&&!i.matchContext(e.context);)e=e.next;return e||null}var P=Ue.define,mr=P(),vt=P(),$h=P(vt),mh=P(vt),Tt=P(),gr=P(Tt),gO=P(Tt),st=P(),Dt=P(st),nt=P(),rt=P(),SO=P(),Ki=P(SO),Qr=P(),u={comment:mr,lineComment:P(mr),blockComment:P(mr),docComment:P(mr),name:vt,variableName:P(vt),typeName:$h,tagName:P($h),propertyName:mh,attributeName:P(mh),className:P(vt),labelName:P(vt),namespace:P(vt),macroName:P(vt),literal:Tt,string:gr,docString:P(gr),character:P(gr),attributeValue:P(gr),number:gO,integer:P(gO),float:P(gO),bool:P(Tt),regexp:P(Tt),escape:P(Tt),color:P(Tt),url:P(Tt),keyword:nt,self:P(nt),null:P(nt),atom:P(nt),unit:P(nt),modifier:P(nt),operatorKeyword:P(nt),controlKeyword:P(nt),definitionKeyword:P(nt),moduleKeyword:P(nt),operator:rt,derefOperator:P(rt),arithmeticOperator:P(rt),logicOperator:P(rt),bitwiseOperator:P(rt),compareOperator:P(rt),updateOperator:P(rt),definitionOperator:P(rt),typeOperator:P(rt),controlOperator:P(rt),punctuation:SO,separator:P(SO),bracket:Ki,angleBracket:P(Ki),squareBracket:P(Ki),paren:P(Ki),brace:P(Ki),content:st,heading:Dt,heading1:P(Dt),heading2:P(Dt),heading3:P(Dt),heading4:P(Dt),heading5:P(Dt),heading6:P(Dt),contentSeparator:P(st),list:P(st),quote:P(st),emphasis:P(st),strong:P(st),link:P(st),monospace:P(st),strikethrough:P(st),inserted:P(),deleted:P(),changed:P(),invalid:P(),meta:Qr,documentMeta:P(Qr),annotation:P(Qr),processingInstruction:P(Qr),definition:Ue.defineModifier(),constant:Ue.defineModifier(),function:Ue.defineModifier(),standard:Ue.defineModifier(),local:Ue.defineModifier(),special:Ue.defineModifier()},vP=yO([{tag:u.link,class:"tok-link"},{tag:u.heading,class:"tok-heading"},{tag:u.emphasis,class:"tok-emphasis"},{tag:u.strong,class:"tok-strong"},{tag:u.keyword,class:"tok-keyword"},{tag:u.atom,class:"tok-atom"},{tag:u.bool,class:"tok-bool"},{tag:u.url,class:"tok-url"},{tag:u.labelName,class:"tok-labelName"},{tag:u.inserted,class:"tok-inserted"},{tag:u.deleted,class:"tok-deleted"},{tag:u.literal,class:"tok-literal"},{tag:u.string,class:"tok-string"},{tag:u.number,class:"tok-number"},{tag:[u.regexp,u.escape,u.special(u.string)],class:"tok-string2"},{tag:u.variableName,class:"tok-variableName"},{tag:u.local(u.variableName),class:"tok-variableName tok-local"},{tag:u.definition(u.variableName),class:"tok-variableName tok-definition"},{tag:u.special(u.variableName),class:"tok-variableName2"},{tag:u.definition(u.propertyName),class:"tok-propertyName tok-definition"},{tag:u.typeName,class:"tok-typeName"},{tag:u.namespace,class:"tok-namespace"},{tag:u.className,class:"tok-className"},{tag:u.macroName,class:"tok-macroName"},{tag:u.propertyName,class:"tok-propertyName"},{tag:u.operator,class:"tok-operator"},{tag:u.comment,class:"tok-comment"},{tag:u.meta,class:"tok-meta"},{tag:u.invalid,class:"tok-invalid"},{tag:u.punctuation,class:"tok-punctuation"}]);var PO,dt=new R;function Qi(i){return W.define({combine:i?e=>e.concat(i):void 0})}var xr=new R,de=class{constructor(e,t,n=[],r=""){this.data=e,this.name=r,E.prototype.hasOwnProperty("tree")||Object.defineProperty(E.prototype,"tree",{get(){return _(this)}}),this.parser=t,this.extension=[gi.of(this),E.languageData.of((s,O,o)=>{let l=Sh(s,O,o),a=l.type.prop(dt);if(!a)return[];let h=s.facet(a),c=l.type.prop(xr);if(c){let f=l.resolve(O-l.from,o);for(let d of c)if(d.test(f,s)){let p=s.facet(d.facet);return d.type=="replace"?p:p.concat(h)}}return h})].concat(n)}isActiveAt(e,t,n=-1){return Sh(e,t,n).type.prop(dt)==this.data}findRegions(e){let t=e.facet(gi);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let n=[],r=(s,O)=>{if(s.prop(dt)==this.data){n.push({from:O,to:O+s.length});return}let o=s.prop(R.mounted);if(o){if(o.tree.prop(dt)==this.data){if(o.overlay)for(let l of o.overlay)n.push({from:l.from+O,to:l.to+O});else n.push({from:O,to:O+s.length});return}else if(o.overlay){let l=n.length;if(r(o.tree,o.overlay[0].from+O),n.length>l)return}}for(let l=0;ln.isTop?t:void 0)]}),e.name)}configure(e,t){return new i(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function _(i){let e=i.field(de.state,!1);return e?e.tree:C.empty}var kO=class{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let n=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-n,t-n)}},en=null,Lt=class i{constructor(e,t,n=[],r,s,O,o,l){this.parser=e,this.state=t,this.fragments=n,this.tree=r,this.treeLen=s,this.viewport=O,this.skipped=o,this.scheduleOn=l,this.parse=null,this.tempSkipped=[]}static create(e,t,n){return new i(e,t,[],C.empty,0,n,[],null)}startParse(){return this.parser.startParse(new kO(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=C.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var n;if(typeof e=="number"){let r=Date.now()+e;e=()=>Date.now()>r}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(ft.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=en;en=this;try{return e()}finally{en=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=yh(e,t.from,t.to);return e}changes(e,t){let{fragments:n,tree:r,treeLen:s,viewport:O,skipped:o}=this;if(this.takeTree(),!e.empty){let l=[];if(e.iterChangedRanges((a,h,c,f)=>l.push({fromA:a,toA:h,fromB:c,toB:f})),n=ft.applyChanges(n,l),r=C.empty,s=0,O={from:e.mapPos(O.from,-1),to:e.mapPos(O.to,1)},this.skipped.length){o=[];for(let a of this.skipped){let h=e.mapPos(a.from,1),c=e.mapPos(a.to,-1);he.from&&(this.fragments=yh(this.fragments,r,s),this.skipped.splice(n--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends ut{createParse(t,n,r){let s=r[0].from,O=r[r.length-1].to;return{parsedPos:s,advance(){let l=en;if(l){for(let a of r)l.tempSkipped.push(a);e&&(l.scheduleOn=l.scheduleOn?Promise.all([l.scheduleOn,e]):e)}return this.parsedPos=O,new C(F.none,[],[],O-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return en}};function yh(i,e,t){return ft.applyChanges(i,[{fromA:e,toA:t,fromB:e,toB:t}])}var tn=class i{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),n=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,n)||t.takeTree(),new i(t)}static init(e){let t=Math.min(3e3,e.doc.length),n=Lt.create(e.facet(gi).parser,e,{from:0,to:t});return n.work(20,t)||n.takeTree(),new i(n)}};de.state=Qe.define({create:tn.init,update(i,e){for(let t of e.effects)if(t.is(de.setState))return t.value;return e.startState.facet(gi)!=e.state.facet(gi)?tn.init(e.state):i.apply(e)}});var wh=i=>{let e=setTimeout(()=>i(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(wh=i=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(i,{timeout:500-100})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});var bO=typeof navigator<"u"&&(!((PO=navigator.scheduling)===null||PO===void 0)&&PO.isInputPending)?()=>navigator.scheduling.isInputPending():null,o$=Ee.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(de.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),e.docChanged&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(de.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=wh(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEndr+1e3,l=s.context.work(()=>bO&&bO()||Date.now()>O,r+(o?0:1e5));this.chunkBudget-=Date.now()-t,(l||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:de.setState.of(new tn(s.context))})),this.chunkBudget>0&&!(l&&!o)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>Ke(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),gi=W.define({combine(i){return i.length?i[0]:null},enables:i=>[de.state,o$,v.contentAttributes.compute([i],e=>{let t=e.facet(i);return t&&t.name?{"data-language":t.name}:{}})]}),Oe=class{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}},nn=class i{constructor(e,t,n,r,s,O=void 0){this.name=e,this.alias=t,this.extensions=n,this.filename=r,this.loadFunc=s,this.support=O,this.loading=null}load(){return this.loading||(this.loading=this.loadFunc().then(e=>this.support=e,e=>{throw this.loading=null,e}))}static of(e){let{load:t,support:n}=e;if(!t){if(!n)throw new RangeError("Must pass either 'load' or 'support' to LanguageDescription.of");t=()=>Promise.resolve(n)}return new i(e.name,(e.alias||[]).concat(e.name).map(r=>r.toLowerCase()),e.extensions||[],e.filename,t,n)}static matchFilename(e,t){for(let r of e)if(r.filename&&r.filename.test(t))return r;let n=/\.([^.]+)$/.exec(t);if(n){for(let r of e)if(r.extensions.indexOf(n[1])>-1)return r}return null}static matchLanguageName(e,t,n=!0){t=t.toLowerCase();for(let r of e)if(r.alias.some(s=>s==t))return r;if(n)for(let r of e)for(let s of r.alias){let O=t.indexOf(s);if(O>-1&&(s.length>2||!/\w/.test(t[O-1])&&!/\w/.test(t[O+s.length])))return r}return null}},kh=W.define(),Si=W.define({combine:i=>{if(!i.length)return" ";let e=i[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(i[0]));return e}});function Xt(i){let e=i.facet(Si);return e.charCodeAt(0)==9?i.tabSize*e.length:e.length}function sn(i,e){let t="",n=i.tabSize,r=i.facet(Si)[0];if(r==" "){for(;e>=n;)t+=" ",e-=n;r=" "}for(let s=0;s=e?l$(i,t,e):null}var Nt=class{constructor(e,t={}){this.state=e,this.options=t,this.unit=Xt(e)}lineAt(e,t=1){let n=this.state.doc.lineAt(e),{simulateBreak:r,simulateDoubleBreak:s}=this.options;return r!=null&&r>=n.from&&r<=n.to?s&&r==e?{text:"",from:e}:(t<0?r-1&&(s+=O-this.countColumn(n,n.search(/\S|$/))),s}countColumn(e,t=e.length){return Gt(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:n,from:r}=this.lineAt(e,t),s=this.options.overrideIndentation;if(s){let O=s(r);if(O>-1)return O}return this.countColumn(n,n.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},Se=new R;function l$(i,e,t){return vh(e.resolveInner(t).enterUnfinishedNodesBefore(t),t,i)}function a$(i){return i.pos==i.options.simulateBreak&&i.options.simulateDoubleBreak}function h$(i){let e=i.type.prop(Se);if(e)return e;let t=i.firstChild,n;if(t&&(n=t.type.prop(R.closedBy))){let r=i.lastChild,s=r&&n.indexOf(r.name)>-1;return O=>Th(O,!0,1,void 0,s&&!a$(O)?r.from:void 0)}return i.parent==null?c$:null}function vh(i,e,t){for(;i;i=i.parent){let n=h$(i);if(n)return n(vO.create(t,e,i))}return null}function c$(){return 0}var vO=class i extends Nt{constructor(e,t,n){super(e.state,e.options),this.base=e,this.pos=t,this.node=n}static create(e,t,n){return new i(e,t,n)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let n=e.resolve(t.from);for(;n.parent&&n.parent.from==n.from;)n=n.parent;if(f$(n,e))break;t=this.state.doc.lineAt(n.from)}return this.lineIndent(t.from)}continue(){let e=this.node.parent;return e?vh(e,this.pos,this.base):0}};function f$(i,e){for(let t=e;t;t=t.parent)if(i==t)return!0;return!1}function u$(i){let e=i.node,t=e.childAfter(e.from),n=e.lastChild;if(!t)return null;let r=i.options.simulateBreak,s=i.state.doc.lineAt(t.from),O=r==null||r<=s.from?s.to:Math.min(s.to,r);for(let o=t.to;;){let l=e.childAfter(o);if(!l||l==n)return null;if(!l.type.isSkipped)return l.fromTh(n,e,t,i)}function Th(i,e,t,n,r){let s=i.textAfter,O=s.match(/^\s*/)[0].length,o=n&&s.slice(O,O+n.length)==n||r==i.pos+O,l=e?u$(i):null;return l?o?i.column(l.from):i.column(l.to):i.baseIndent+(o?0:i.unit*t)}var Xh=i=>i.baseIndent;function We({except:i,units:e=1}={}){return t=>{let n=i&&i.test(t.textAfter);return t.baseIndent+(n?0:e*t.unit)}}var zh=W.define(),ke=new R;function zt(i){let e=i.firstChild,t=i.lastChild;return e&&e.too.prop(dt)==O.data:O?o=>o==O:void 0,this.style=yO(e.map(o=>({tag:o.tag,class:o.class||r(Object.assign({},o,{tag:null}))})),{all:s}).style,this.module=n?new Ce(n):null,this.themeType=t.themeType}static define(e,t){return new i(e,t||{})}},TO=W.define(),Wh=W.define({combine(i){return i.length?[i[0]]:null}});function xO(i){let e=i.facet(TO);return e.length?e:i.facet(Wh)}function ZO(i,e){let t=[d$],n;return i instanceof pt&&(i.module&&t.push(v.styleModule.of(i.module)),n=i.themeType),e?.fallback?t.push(Wh.of(i)):n?t.push(TO.computeN([v.darkTheme],r=>r.facet(v.darkTheme)==(n=="dark")?[i]:[])):t.push(TO.of(i)),t}var XO=class{constructor(e){this.markCache=Object.create(null),this.tree=_(e.state),this.decorations=this.buildDeco(e,xO(e.state))}update(e){let t=_(e.state),n=xO(e.state),r=n!=xO(e.startState);t.length{n.add(O,o,this.markCache[l]||(this.markCache[l]=M.mark({class:l})))},r,s);return n.finish()}},d$=He.high(Ee.fromClass(XO,{decorations:i=>i.decorations})),qP=pt.define([{tag:u.meta,color:"#404740"},{tag:u.link,textDecoration:"underline"},{tag:u.heading,textDecoration:"underline",fontWeight:"bold"},{tag:u.emphasis,fontStyle:"italic"},{tag:u.strong,fontWeight:"bold"},{tag:u.strikethrough,textDecoration:"line-through"},{tag:u.keyword,color:"#708"},{tag:[u.atom,u.bool,u.url,u.contentSeparator,u.labelName],color:"#219"},{tag:[u.literal,u.inserted],color:"#164"},{tag:[u.string,u.deleted],color:"#a11"},{tag:[u.regexp,u.escape,u.special(u.string)],color:"#e40"},{tag:u.definition(u.variableName),color:"#00f"},{tag:u.local(u.variableName),color:"#30a"},{tag:[u.typeName,u.namespace],color:"#085"},{tag:u.className,color:"#167"},{tag:[u.special(u.variableName),u.macroName],color:"#256"},{tag:u.definition(u.propertyName),color:"#00c"},{tag:u.comment,color:"#940"},{tag:u.invalid,color:"#f00"}]),p$=v.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),Rh=1e4,Vh="()[]{}",Zh=W.define({combine(i){return Qt(i,{afterCursor:!0,brackets:Vh,maxScanDistance:Rh,renderMatch:g$})}}),$$=M.mark({class:"cm-matchingBracket"}),m$=M.mark({class:"cm-nonmatchingBracket"});function g$(i){let e=[],t=i.matched?$$:m$;return e.push(t.range(i.start.from,i.start.to)),i.end&&e.push(t.range(i.end.from,i.end.to)),e}var Q$=Qe.define({create(){return M.none},update(i,e){if(!e.docChanged&&!e.selection)return i;let t=[],n=e.state.facet(Zh);for(let r of e.state.selection.ranges){if(!r.empty)continue;let s=Ie(e.state,r.head,-1,n)||r.head>0&&Ie(e.state,r.head-1,1,n)||n.afterCursor&&(Ie(e.state,r.head,1,n)||r.headv.decorations.from(i)}),S$=[Q$,p$];function Ch(i={}){return[Zh.of(i),S$]}var On=new R;function zO(i,e,t){let n=i.prop(e<0?R.openedBy:R.closedBy);if(n)return n;if(i.name.length==1){let r=t.indexOf(i.name);if(r>-1&&r%2==(e<0?1:0))return[t[r+e]]}return null}function WO(i){let e=i.type.prop(On);return e?e(i.node):i}function Ie(i,e,t,n={}){let r=n.maxScanDistance||Rh,s=n.brackets||Vh,O=_(i),o=O.resolveInner(e,t);for(let l=o;l;l=l.parent){let a=zO(l.type,t,s);if(a&&l.from0?e>=h.from&&eh.from&&e<=h.to))return y$(i,e,t,l,h,a,s)}}return P$(i,e,t,O,o.type,r,s)}function y$(i,e,t,n,r,s,O){let o=n.parent,l={from:r.from,to:r.to},a=0,h=o?.cursor();if(h&&(t<0?h.childBefore(n.from):h.childAfter(n.to)))do if(t<0?h.to<=n.from:h.from>=n.to){if(a==0&&s.indexOf(h.type.name)>-1&&h.from0)return null;let a={from:t<0?e-1:e,to:t>0?e+1:e},h=i.doc.iterRange(e,t>0?i.doc.length:0),c=0;for(let f=0;!h.next().done&&f<=s;){let d=h.value;t<0&&(f+=d.length);let p=e+f*t;for(let m=t>0?0:d.length-1,$=t>0?d.length:-1;m!=$;m+=t){let g=O.indexOf(d[m]);if(!(g<0||n.resolveInner(p+m,1).type!=r))if(g%2==0==t>0)c++;else{if(c==1)return{start:a,end:{from:p+m,to:p+m+1},matched:g>>1==l>>1};c--}}t>0&&(f+=d.length)}return h.done?{start:a,matched:!1}:null}function Ph(i,e,t,n=0,r=0){e==null&&(e=i.search(/[^\s\u00a0]/),e==-1&&(e=i.length));let s=r;for(let O=n;O=this.string.length}sol(){return this.pos==0}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.post}eatSpace(){let e=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e}skipToEnd(){this.pos=this.string.length}skipTo(e){let t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0}backUp(e){this.pos-=e}column(){return this.lastColumnPosn?O.toLowerCase():O,s=this.string.substr(this.pos,e.length);return r(s)==r(e)?(t!==!1&&(this.pos+=e.length),!0):null}else{let r=this.string.slice(this.pos).match(e);return r&&r.index>0?null:(r&&t!==!1&&(this.pos+=r[0].length),r)}}current(){return this.string.slice(this.start,this.pos)}};function b$(i){return{name:i.name||"",token:i.token,blankLine:i.blankLine||(()=>{}),startState:i.startState||(()=>!0),copyState:i.copyState||x$,indent:i.indent||(()=>null),languageData:i.languageData||{},tokenTable:i.tokenTable||qO}}function x$(i){if(typeof i!="object")return i;let e={};for(let t in i){let n=i[t];e[t]=n instanceof Array?n.slice():n}return e}var bh=new WeakMap,Pr=class i extends de{constructor(e){let t=Qi(e.languageData),n=b$(e),r,s=new class extends ut{createParse(O,o,l){return new RO(r,O,o,l)}};super(t,s,[kh.of((O,o)=>this.getIndent(O,o))],e.name),this.topNode=T$(t),r=this,this.streamParser=n,this.stateAfter=new R({perNode:!0}),this.tokenTable=e.tokenTable?new br(n.tokenTable):v$}static define(e){return new i(e)}getIndent(e,t){let n=_(e.state),r=n.resolve(t);for(;r&&r.type!=this.topNode;)r=r.parent;if(!r)return null;let s,{overrideIndentation:O}=e.options;O&&(s=bh.get(e.state),s!=null&&s1e4)return null;for(;l=n&&t+e.length<=r&&e.prop(i.stateAfter);if(s)return{state:i.streamParser.copyState(s),pos:t+e.length};for(let O=e.children.length-1;O>=0;O--){let o=e.children[O],l=t+e.positions[O],a=o instanceof C&&l=e.length)return e;!r&&e.type==i.topNode&&(r=!0);for(let s=e.children.length-1;s>=0;s--){let O=e.positions[s],o=e.children[s],l;if(Ot&&CO(i,r.tree,0-r.offset,t,O),l;if(o&&(l=qh(i,r.tree,t+r.offset,o.pos+r.offset,!1)))return{state:o.state,tree:l}}return{state:i.streamParser.startState(n?Xt(n):4),tree:C.empty}}var RO=class{constructor(e,t,n,r){this.lang=e,this.input=t,this.fragments=n,this.ranges=r,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=r[r.length-1].to;let s=Lt.get(),O=r[0].from,{state:o,tree:l}=w$(e,n,O,s?.state);this.state=o,this.parsedPos=this.chunkStart=O+l.length;for(let a=0;a=t?this.finish():e&&this.parsedPos>=e.viewport.to?(e.skipUntilInView(this.parsedPos,t),this.finish()):null}stopAt(e){this.stoppedAt=e}lineAfter(e){let t=this.input.chunk(e);if(this.input.lineChunks)t==` +var q=class i{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,n){let r=[];return this.decompose(0,e,r,2),n.length&&n.decompose(0,n.length,r,3),this.decompose(t,this.length,r,1),oi.from(r,this.length-(t-e)+n.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){let n=[];return this.decompose(e,t,n,0),oi.from(n,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),n=this.length-this.scanIdentical(e,-1),r=new Gt(this),s=new Gt(e);for(let o=t,O=t;;){if(r.next(o),s.next(o),o=0,r.lineBreak!=s.lineBreak||r.done!=s.done||r.value!=s.value)return!1;if(O+=r.value.length,r.done||O>=n)return!0}}iter(e=1){return new Gt(this,e)}iterRange(e,t=this.length){return new Xn(this,e,t)}iterLines(e,t){let n;if(e==null)n=this.iter();else{t==null&&(t=this.lines+1);let r=this.line(e).from;n=this.iterRange(r,Math.max(r,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Wn(n)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?i.empty:e.length<=32?new ze(e):oi.from(ze.split(e,[]))}},ze=class i extends q{constructor(e,t=$d(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,n,r){for(let s=0;;s++){let o=this.text[s],O=r+o.length;if((t?n:O)>=e)return new Jr(r,O,n,o);r=O+1,n++}}decompose(e,t,n,r){let s=e<=0&&t>=this.length?this:new i(Ol(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(r&1){let o=n.pop(),O=zn(s.text,o.text.slice(),0,s.length);if(O.length<=32)n.push(new i(O,o.length+s.length));else{let l=O.length>>1;n.push(new i(O.slice(0,l)),new i(O.slice(l)))}}else n.push(s)}replace(e,t,n){if(!(n instanceof i))return super.replace(e,t,n);let r=zn(this.text,zn(n.text,Ol(this.text,0,e)),t),s=this.length+n.length-(t-e);return r.length<=32?new i(r,s):oi.from(i.split(r,[]),s)}sliceString(e,t=this.length,n=` +`){let r="";for(let s=0,o=0;s<=t&&oe&&o&&(r+=n),es&&(r+=O.slice(Math.max(0,e-s),t-s)),s=l+1}return r}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let n=[],r=-1;for(let s of e)n.push(s),r+=s.length+1,n.length==32&&(t.push(new i(n,r)),n=[],r=-1);return r>-1&&t.push(new i(n,r)),t}},oi=class i extends q{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let n of e)this.lines+=n.lines}lineInner(e,t,n,r){for(let s=0;;s++){let o=this.children[s],O=r+o.length,l=n+o.lines-1;if((t?l:O)>=e)return o.lineInner(e,t,n,r);r=O+1,n=l+1}}decompose(e,t,n,r){for(let s=0,o=0;o<=t&&s=o){let a=r&((o<=e?1:0)|(l>=t?2:0));o>=e&&l<=t&&!a?n.push(O):O.decompose(e-o,t-o,n,a)}o=l+1}}replace(e,t,n){if(n.lines=s&&t<=O){let l=o.replace(e-s,t-s,n),a=this.lines-o.lines+l.lines;if(l.lines>5-1&&l.lines>a>>5+1){let h=this.children.slice();return h[r]=l,new i(h,this.length-(t-e)+n.length)}return super.replace(s,O,l)}s=O+1}return super.replace(e,t,n)}sliceString(e,t=this.length,n=` +`){let r="";for(let s=0,o=0;se&&s&&(r+=n),eo&&(r+=O.sliceString(e-o,t-o,n)),o=l+1}return r}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof i))return 0;let n=0,[r,s,o,O]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;r+=t,s+=t){if(r==o||s==O)return n;let l=this.children[r],a=e.children[s];if(l!=a)return n+l.scanIdentical(a,t);n+=l.length+1}}static from(e,t=e.reduce((n,r)=>n+r.length+1,-1)){let n=0;for(let d of e)n+=d.lines;if(n<32){let d=[];for(let p of e)p.flatten(d);return new ze(d,t)}let r=Math.max(32,n>>5),s=r<<1,o=r>>1,O=[],l=0,a=-1,h=[];function c(d){let p;if(d.lines>s&&d instanceof i)for(let m of d.children)c(m);else d.lines>o&&(l>o||!l)?(f(),O.push(d)):d instanceof ze&&l&&(p=h[h.length-1])instanceof ze&&d.lines+p.lines<=32?(l+=d.lines,a+=d.length+1,h[h.length-1]=new ze(p.text.concat(d.text),p.length+1+d.length)):(l+d.lines>r&&f(),l+=d.lines,a+=d.length+1,h.push(d))}function f(){l!=0&&(O.push(h.length==1?h[0]:i.from(h,a)),a=-1,l=h.length=0)}for(let d of e)c(d);return f(),O.length==1?O[0]:new i(O,t)}};q.empty=new ze([""],0);function $d(i){let e=-1;for(let t of i)e+=t.length+1;return e}function zn(i,e,t=0,n=1e9){for(let r=0,s=0,o=!0;s=t&&(l>n&&(O=O.slice(0,n-r)),r0?1:(e instanceof ze?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let n=this.nodes.length-1,r=this.nodes[n],s=this.offsets[n],o=s>>1,O=r instanceof ze?r.text.length:r.children.length;if(o==(t>0?O:0)){if(n==0)return this.done=!0,this.value="",this;t>0&&this.offsets[n-1]++,this.nodes.pop(),this.offsets.pop()}else if((s&1)==(t>0?0:1)){if(this.offsets[n]+=t,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(r instanceof ze){let l=r.text[o+(t<0?-1:0)];if(this.offsets[n]+=t,l.length>Math.max(0,e))return this.value=e==0?l:t>0?l.slice(e):l.slice(0,l.length-e),this;e-=l.length}else{let l=r.children[o+(t<0?-1:0)];e>l.length?(e-=l.length,this.offsets[n]+=t):(t<0&&this.offsets[n]--,this.nodes.push(l),this.offsets.push(t>0?1:(l instanceof ze?l.text.length:l.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},Xn=class{constructor(e,t,n){this.value="",this.done=!1,this.cursor=new Gt(e,t>n?-1:1),this.pos=t>n?e.length:0,this.from=Math.min(t,n),this.to=Math.max(t,n)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let n=t<0?this.pos-this.from:this.to-this.pos;e>n&&(e=n),n-=e;let{value:r}=this.cursor.next(e);return this.pos+=(r.length+e)*t,this.value=r.length<=n?r:t<0?r.slice(r.length-n):r.slice(0,n),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},Wn=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:n,value:r}=this.inner.next(e);return t?(this.done=!0,this.value=""):n?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=r,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(q.prototype[Symbol.iterator]=function(){return this.iter()},Gt.prototype[Symbol.iterator]=Xn.prototype[Symbol.iterator]=Wn.prototype[Symbol.iterator]=function(){return this});var Jr=class{constructor(e,t,n,r){this.from=e,this.to=t,this.number=n,this.text=r}get length(){return this.to-this.from}},Oi="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(i=>i?parseInt(i,36):1);for(let i=1;ii)return Oi[e-1]<=i;return!1}function ll(i){return i>=127462&&i<=127487}var al=8205;function fe(i,e,t=!0,n=!0){return(t?pl:Sd)(i,e,n)}function pl(i,e,t){if(e==i.length)return e;e&&ml(i.charCodeAt(e))&&$l(i.charCodeAt(e-1))&&e--;let n=li(i,e);for(e+=Yi(n);e=0&&ll(li(i,o));)s++,o-=2;if(s%2==0)break;e+=2}else break}return e}function Sd(i,e,t){for(;e>0;){let n=pl(i,e-2,t);if(n=56320&&i<57344}function $l(i){return i>=55296&&i<56320}function li(i,e){let t=i.charCodeAt(e);if(!$l(t)||e+1==i.length)return t;let n=i.charCodeAt(e+1);return ml(n)?(t-55296<<10)+(n-56320)+65536:t}function Yi(i){return i<65536?1:2}var es=/\r\n?|\n/,Oe=function(i){return i[i.Simple=0]="Simple",i[i.TrackDel=1]="TrackDel",i[i.TrackBefore=2]="TrackBefore",i[i.TrackAfter=3]="TrackAfter",i}(Oe||(Oe={})),ht=class i{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return s+(e-r);s+=O}else{if(n!=Oe.Simple&&a>=e&&(n==Oe.TrackDel&&re||n==Oe.TrackBefore&&re))return null;if(a>e||a==e&&t<0&&!O)return e==r||t<0?s:s+l;s+=l}r=a}if(e>r)throw new RangeError(`Position ${e} is out of range for changeset of length ${r}`);return s}touchesRange(e,t=e){for(let n=0,r=0;n=0&&r<=t&&O>=e)return rt?"cover":!0;r=O}return!1}toString(){let e="";for(let t=0;t=0?":"+r:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new i(e)}static create(e){return new i(e)}},$e=class i extends ht{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return ts(this,(t,n,r,s,o)=>e=e.replace(r,r+(n-t),o),!1),e}mapDesc(e,t=!1){return is(this,e,t,!0)}invert(e){let t=this.sections.slice(),n=[];for(let r=0,s=0;r=0){t[r]=O,t[r+1]=o;let l=r>>1;for(;n.length0&&yt(n,t,s.text),s.forward(h),O+=h}let a=e[o++];for(;O>1].toJSON()))}return e}static of(e,t,n){let r=[],s=[],o=0,O=null;function l(h=!1){if(!h&&!r.length)return;of||c<0||f>t)throw new RangeError(`Invalid change range ${c} to ${f} (in doc of length ${t})`);let p=d?typeof d=="string"?q.of(d.split(n||es)):d:q.empty,m=p.length;if(c==f&&m==0)return;co&&ce(r,c-o,-1),ce(r,f-c,m),yt(s,r,p),o=f}}return a(e),l(!O),O}static empty(e){return new i(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],n=[];for(let r=0;rO&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(s.length==1)t.push(s[0],0);else{for(;n.length=0&&t<=0&&t==i[r+1]?i[r]+=e:e==0&&i[r]==0?i[r+1]+=t:n?(i[r]+=e,i[r+1]+=t):i.push(e,t)}function yt(i,e,t){if(t.length==0)return;let n=e.length-2>>1;if(n>1])),!(t||o==i.sections.length||i.sections[o+1]<0);)O=i.sections[o++],l=i.sections[o++];e(r,a,s,h,c),r=a,s=h}}}function is(i,e,t,n=!1){let r=[],s=n?[]:null,o=new It(i),O=new It(e);for(let l=-1;;)if(o.ins==-1&&O.ins==-1){let a=Math.min(o.len,O.len);ce(r,a,-1),o.forward(a),O.forward(a)}else if(O.ins>=0&&(o.ins<0||l==o.i||o.off==0&&(O.len=0&&l=0){let a=0,h=o.len;for(;h;)if(O.ins==-1){let c=Math.min(h,O.len);a+=c,h-=c,O.forward(c)}else if(O.ins==0&&O.lenl||o.ins>=0&&o.len>l)&&(O||n.length>a),s.forward2(l),o.forward(l)}}}}var It=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?q.empty:e[t]}textBit(e){let{inserted:t}=this.set,n=this.i-2>>1;return n>=t.length&&!e?q.empty:t[n].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},si=class i{constructor(e,t,n){this.from=e,this.to=t,this.flags=n}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let n,r;return this.empty?n=r=e.mapPos(this.from,t):(n=e.mapPos(this.from,1),r=e.mapPos(this.to,-1)),n==this.from&&r==this.to?this:new i(n,r,this.flags)}extend(e,t=e){if(e<=this.anchor&&t>=this.anchor)return S.range(e,t);let n=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return S.range(this.anchor,n)}eq(e){return this.anchor==e.anchor&&this.head==e.head}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return S.range(e.anchor,e.head)}static create(e,t,n){return new i(e,t,n)}},S=class i{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:i.create(this.ranges.map(n=>n.map(e,t)),this.mainIndex)}eq(e){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let t=0;te.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new i(e.ranges.map(t=>si.fromJSON(t)),e.main)}static single(e,t=e){return new i([i.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let n=0,r=0;re?8:0)|s)}static normalized(e,t=0){let n=e[t];e.sort((r,s)=>r.from-s.from),t=e.indexOf(n);for(let r=1;rs.head?i.range(l,O):i.range(O,l))}}return new i(e,t)}};function Sl(i,e){for(let t of i.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}var cs=0,W=class i{constructor(e,t,n,r,s){this.combine=e,this.compareInput=t,this.compare=n,this.isStatic=r,this.id=cs++,this.default=e([]),this.extensions=typeof s=="function"?s(this):s}get reader(){return this}static define(e={}){return new i(e.combine||(t=>t),e.compareInput||((t,n)=>t===n),e.compare||(e.combine?(t,n)=>t===n:fs),!!e.static,e.enables)}of(e){return new ai([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new ai(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new ai(e,this,2,t)}from(e,t){return t||(t=n=>n),this.compute([e],n=>t(n.field(e)))}};function fs(i,e){return i==e||i.length==e.length&&i.every((t,n)=>t===e[n])}var ai=class{constructor(e,t,n,r){this.dependencies=e,this.facet=t,this.type=n,this.value=r,this.id=cs++}dynamicSlot(e){var t;let n=this.value,r=this.facet.compareInput,s=this.id,o=e[s]>>1,O=this.type==2,l=!1,a=!1,h=[];for(let c of this.dependencies)c=="doc"?l=!0:c=="selection"?a=!0:((t=e[c.id])!==null&&t!==void 0?t:1)&1||h.push(e[c.id]);return{create(c){return c.values[o]=n(c),1},update(c,f){if(l&&f.docChanged||a&&(f.docChanged||f.selection)||ns(c,h)){let d=n(c);if(O?!hl(d,c.values[o],r):!r(d,c.values[o]))return c.values[o]=d,1}return 0},reconfigure:(c,f)=>{let d,p=f.config.address[s];if(p!=null){let m=Yn(f,p);if(this.dependencies.every($=>$ instanceof W?f.facet($)===c.facet($):$ instanceof ge?f.field($,!1)==c.field($,!1):!0)||(O?hl(d=n(c),m,r):r(d=n(c),m)))return c.values[o]=m,0}else d=n(c);return c.values[o]=d,1}}}};function hl(i,e,t){if(i.length!=e.length)return!1;for(let n=0;ni[l.id]),r=t.map(l=>l.type),s=n.filter(l=>!(l&1)),o=i[e.id]>>1;function O(l){let a=[];for(let h=0;hn===r),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(cl).find(n=>n.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:n=>(n.values[t]=this.create(n),1),update:(n,r)=>{let s=n.values[t],o=this.updateF(s,r);return this.compareF(s,o)?0:(n.values[t]=o,1)},reconfigure:(n,r)=>r.config.address[this.id]!=null?(n.values[t]=r.field(this),0):(n.values[t]=this.create(n),1)}}init(e){return[this,cl.of({field:this,create:e})]}get extension(){return this}},jt={lowest:4,low:3,default:2,high:1,highest:0};function Ri(i){return e=>new Rn(e,i)}var Je={highest:Ri(jt.highest),high:Ri(jt.high),default:Ri(jt.default),low:Ri(jt.low),lowest:Ri(jt.lowest)},Rn=class{constructor(e,t){this.inner=e,this.prec=t}},ct=class i{of(e){return new Vi(this,e)}reconfigure(e){return i.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},Vi=class{constructor(e,t){this.compartment=e,this.inner=t}},Zn=class i{constructor(e,t,n,r,s,o){for(this.base=e,this.compartments=t,this.dynamicSlots=n,this.address=r,this.staticValues=s,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,n){let r=[],s=Object.create(null),o=new Map;for(let f of yd(e,t,o))f instanceof ge?r.push(f):(s[f.facet.id]||(s[f.facet.id]=[])).push(f);let O=Object.create(null),l=[],a=[];for(let f of r)O[f.id]=a.length<<1,a.push(d=>f.slot(d));let h=n?.config.facets;for(let f in s){let d=s[f],p=d[0].facet,m=h&&h[f]||[];if(d.every($=>$.type==0))if(O[p.id]=l.length<<1|1,fs(m,d))l.push(n.facet(p));else{let $=p.combine(d.map(g=>g.value));l.push(n&&p.compare($,n.facet(p))?n.facet(p):$)}else{for(let $ of d)$.type==0?(O[$.id]=l.length<<1|1,l.push($.value)):(O[$.id]=a.length<<1,a.push(g=>$.dynamicSlot(g)));O[p.id]=a.length<<1,a.push($=>Qd($,p,d))}}let c=a.map(f=>f(O));return new i(e,o,c,O,l,s)}};function yd(i,e,t){let n=[[],[],[],[],[]],r=new Map;function s(o,O){let l=r.get(o);if(l!=null){if(l<=O)return;let a=n[l].indexOf(o);a>-1&&n[l].splice(a,1),o instanceof Vi&&t.delete(o.compartment)}if(r.set(o,O),Array.isArray(o))for(let a of o)s(a,O);else if(o instanceof Vi){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let a=e.get(o.compartment)||o.inner;t.set(o.compartment,a),s(a,O)}else if(o instanceof Rn)s(o.inner,o.prec);else if(o instanceof ge)n[O].push(o),o.provides&&s(o.provides,O);else if(o instanceof ai)n[O].push(o),o.facet.extensions&&s(o.facet.extensions,jt.default);else{let a=o.extension;if(!a)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);s(a,O)}}return s(i,jt.default),n.reduce((o,O)=>o.concat(O))}function Zi(i,e){if(e&1)return 2;let t=e>>1,n=i.status[t];if(n==4)throw new Error("Cyclic dependency between fields and/or facets");if(n&2)return n;i.status[t]=4;let r=i.computeSlot(i,i.config.dynamicSlots[t]);return i.status[t]=2|r}function Yn(i,e){return e&1?i.config.staticValues[e>>1]:i.values[e>>1]}var Ql=W.define(),yl=W.define({combine:i=>i.some(e=>e),static:!0}),bl=W.define({combine:i=>i.length?i[0]:void 0,static:!0}),Pl=W.define(),xl=W.define(),wl=W.define(),kl=W.define({combine:i=>i.length?i[0]:!1}),we=class{constructor(e,t){this.type=e,this.value=t}static define(){return new rs}},rs=class{of(e){return new we(this,e)}},ss=class{constructor(e){this.map=e}of(e){return new E(this,e)}},E=class i{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new i(this.type,t)}is(e){return this.type==e}static define(e={}){return new ss(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let n=[];for(let r of e){let s=r.map(t);s&&n.push(s)}return n}};E.reconfigure=E.define();E.appendConfig=E.define();var se=class i{constructor(e,t,n,r,s,o){this.startState=e,this.changes=t,this.selection=n,this.effects=r,this.annotations=s,this.scrollIntoView=o,this._doc=null,this._state=null,n&&Sl(n,t.newLength),s.some(O=>O.type==i.time)||(this.annotations=s.concat(i.time.of(Date.now())))}static create(e,t,n,r,s,o){return new i(e,t,n,r,s,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(i.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}};se.time=we.define();se.userEvent=we.define();se.addToHistory=we.define();se.remote=we.define();function bd(i,e){let t=[];for(let n=0,r=0;;){let s,o;if(n=i[n]))s=i[n++],o=i[n++];else if(r=0;r--){let s=n[r](i);s instanceof se?i=s:Array.isArray(s)&&s.length==1&&s[0]instanceof se?i=s[0]:i=Tl(e,hi(s),!1)}return i}function xd(i){let e=i.startState,t=e.facet(wl),n=i;for(let r=t.length-1;r>=0;r--){let s=t[r](i);s&&Object.keys(s).length&&(n=vl(n,os(e,s,i.changes.newLength),!0))}return n==i?i:se.create(e,i.changes,i.selection,n.effects,n.annotations,n.scrollIntoView)}var wd=[];function hi(i){return i==null?wd:Array.isArray(i)?i:[i]}var qe=function(i){return i[i.Word=0]="Word",i[i.Space=1]="Space",i[i.Other=2]="Other",i}(qe||(qe={})),kd=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Os;try{Os=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function vd(i){if(Os)return Os.test(i);for(let e=0;e"\x80"&&(t.toUpperCase()!=t.toLowerCase()||kd.test(t)))return!0}return!1}function Td(i){return e=>{if(!/\S/.test(e))return qe.Space;if(vd(e))return qe.Word;for(let t=0;t-1)return qe.Word;return qe.Other}}var j=class i{constructor(e,t,n,r,s,o){this.config=e,this.doc=t,this.selection=n,this.values=r,this.status=e.statusTemplate.slice(),this.computeSlot=s,o&&(o._state=this);for(let O=0;Or.set(l,O)),t=null),r.set(o.value.compartment,o.value.extension)):o.is(E.reconfigure)?(t=null,n=o.value):o.is(E.appendConfig)&&(t=null,n=hi(n).concat(o.value));let s;t?s=e.startState.values.slice():(t=Zn.resolve(n,r,this),s=new i(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(O,l)=>l.reconfigure(O,this),null).values),new i(t,e.newDoc,e.newSelection,s,(o,O)=>O.update(o,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:S.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,n=e(t.ranges[0]),r=this.changes(n.changes),s=[n.range],o=hi(n.effects);for(let O=1;Oo.spec.fromJSON(O,l)))}}return i.create({doc:e.doc,selection:S.fromJSON(e.selection),extensions:t.extensions?r.concat([t.extensions]):r})}static create(e={}){let t=Zn.resolve(e.extensions||[],new Map),n=e.doc instanceof q?e.doc:q.of((e.doc||"").split(t.staticFacet(i.lineSeparator)||es)),r=e.selection?e.selection instanceof S?e.selection:S.single(e.selection.anchor,e.selection.head):S.single(0);return Sl(r,n.length),t.staticFacet(yl)||(r=r.asSingle()),new i(t,n,r,t.dynamicSlots.map(()=>null),(s,o)=>o.create(s),null)}get tabSize(){return this.facet(i.tabSize)}get lineBreak(){return this.facet(i.lineSeparator)||` +`}get readOnly(){return this.facet(kl)}phrase(e,...t){for(let n of this.facet(i.phrases))if(Object.prototype.hasOwnProperty.call(n,e)){e=n[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(n,r)=>{if(r=="$")return"$";let s=+(r||1);return!s||s>t.length?n:t[s-1]})),e}languageDataAt(e,t,n=-1){let r=[];for(let s of this.facet(Ql))for(let o of s(this,t,n))Object.prototype.hasOwnProperty.call(o,e)&&r.push(o[e]);return r}charCategorizer(e){return Td(this.languageDataAt("wordChars",e).join(""))}wordAt(e){let{text:t,from:n,length:r}=this.doc.lineAt(e),s=this.charCategorizer(e),o=e-n,O=e-n;for(;o>0;){let l=fe(t,o,!1);if(s(t.slice(l,o))!=qe.Word)break;o=l}for(;Oi.length?i[0]:4});j.lineSeparator=bl;j.readOnly=kl;j.phrases=W.define({compare(i,e){let t=Object.keys(i),n=Object.keys(e);return t.length==n.length&&t.every(r=>i[r]==e[r])}});j.languageData=Ql;j.changeFilter=Pl;j.transactionFilter=xl;j.transactionExtender=wl;ct.reconfigure=E.define();function bt(i,e,t={}){let n={};for(let r of i)for(let s of Object.keys(r)){let o=r[s],O=n[s];if(O===void 0)n[s]=o;else if(!(O===o||o===void 0))if(Object.hasOwnProperty.call(t,s))n[s]=t[s](O,o);else throw new Error("Config merge conflict for field "+s)}for(let r in e)n[r]===void 0&&(n[r]=e[r]);return n}var Me=class{eq(e){return this==e}range(e,t=e){return Ci.create(e,t,this)}};Me.prototype.startSide=Me.prototype.endSide=0;Me.prototype.point=!1;Me.prototype.mapMode=Oe.TrackDel;var Ci=class i{constructor(e,t,n){this.from=e,this.to=t,this.value=n}static create(e,t,n){return new i(e,t,n)}};function ls(i,e){return i.from-e.from||i.value.startSide-e.value.startSide}var as=class i{constructor(e,t,n,r){this.from=e,this.to=t,this.value=n,this.maxPoint=r}get length(){return this.to[this.to.length-1]}findIndex(e,t,n,r=0){let s=n?this.to:this.from;for(let o=r,O=s.length;;){if(o==O)return o;let l=o+O>>1,a=s[l]-e||(n?this.value[l].endSide:this.value[l].startSide)-t;if(l==o)return a>=0?o:O;a>=0?O=l:o=l+1}}between(e,t,n,r){for(let s=this.findIndex(t,-1e9,!0),o=this.findIndex(n,1e9,!1,s);sd||f==d&&a.startSide>0&&a.endSide<=0)continue;(d-f||a.endSide-a.startSide)<0||(o<0&&(o=f),a.point&&(O=Math.max(O,d-f)),n.push(a),r.push(f-o),s.push(d-o))}return{mapped:n.length?new i(r,s,n,O):null,pos:o}}},D=class i{constructor(e,t,n,r){this.chunkPos=e,this.chunk=t,this.nextLayer=n,this.maxPoint=r}static create(e,t,n,r){return new i(e,t,n,r)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:n=!1,filterFrom:r=0,filterTo:s=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(n&&(t=t.slice().sort(ls)),this.isEmpty)return t.length?i.of(t):this;let O=new Vn(this,null,-1).goto(0),l=0,a=[],h=new Mt;for(;O.value||l=0){let c=t[l++];h.addInner(c.from,c.to,c.value)||a.push(c)}else O.rangeIndex==1&&O.chunkIndexthis.chunkEnd(O.chunkIndex)||sO.to||s=s&&e<=s+o.length&&o.between(s,e-s,t-s,n)===!1)return}this.nextLayer.between(e,t,n)}}iter(e=0){return qi.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return qi.from(e).goto(t)}static compare(e,t,n,r,s=-1){let o=e.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),O=t.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),l=fl(o,O,n),a=new Et(o,l,s),h=new Et(O,l,s);n.iterGaps((c,f,d)=>ul(a,c,h,f,d,r)),n.empty&&n.length==0&&ul(a,0,h,0,0,r)}static eq(e,t,n=0,r){r==null&&(r=1e9-1);let s=e.filter(h=>!h.isEmpty&&t.indexOf(h)<0),o=t.filter(h=>!h.isEmpty&&e.indexOf(h)<0);if(s.length!=o.length)return!1;if(!s.length)return!0;let O=fl(s,o),l=new Et(s,O,0).goto(n),a=new Et(o,O,0).goto(n);for(;;){if(l.to!=a.to||!hs(l.active,a.active)||l.point&&(!a.point||!l.point.eq(a.point)))return!1;if(l.to>r)return!0;l.next(),a.next()}}static spans(e,t,n,r,s=-1){let o=new Et(e,null,s).goto(t),O=t,l=o.openStart;for(;;){let a=Math.min(o.to,n);if(o.point){let h=o.activeForPoint(o.to),c=o.pointFromO&&(r.span(O,a,o.active,l),l=o.openEnd(a));if(o.to>n)return l+(o.point&&o.to>n?1:0);O=o.to,o.next()}}static of(e,t=!1){let n=new Mt;for(let r of e instanceof Ci?[e]:t?zd(e):e)n.add(r.from,r.to,r.value);return n.finish()}};D.empty=new D([],[],null,-1);function zd(i){if(i.length>1)for(let e=i[0],t=1;t0)return i.slice().sort(ls);e=n}return i}D.empty.nextLayer=D.empty;var Mt=class i{finishChunk(e){this.chunks.push(new as(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,n){this.addInner(e,t,n)||(this.nextLayer||(this.nextLayer=new i)).add(e,t,n)}addInner(e,t,n){let r=e-this.lastTo||n.startSide-this.last.endSide;if(r<=0&&(e-this.lastFrom||n.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return r<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=n,this.lastFrom=e,this.lastTo=t,this.value.push(n),n.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let n=t.value.length-1;return this.last=t.value[n],this.lastFrom=t.from[n]+e,this.lastTo=t.to[n]+e,!0}finish(){return this.finishInner(D.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=D.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}};function fl(i,e,t){let n=new Map;for(let s of i)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=n&&r.push(new Vn(o,t,n,s));return r.length==1?r[0]:new i(r)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let n of this.heap)n.goto(e,t);for(let n=this.heap.length>>1;n>=0;n--)Kr(this.heap,n);return this.next(),this}forward(e,t){for(let n of this.heap)n.forward(e,t);for(let n=this.heap.length>>1;n>=0;n--)Kr(this.heap,n);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Kr(this.heap,0)}}};function Kr(i,e){for(let t=i[e];;){let n=(e<<1)+1;if(n>=i.length)break;let r=i[n];if(n+1=0&&(r=i[n+1],n++),t.compare(r)<0)break;i[n]=t,i[e]=r,e=n}}var Et=class{constructor(e,t,n){this.minPoint=n,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=qi.from(e,t,n)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){vn(this.active,e),vn(this.activeTo,e),vn(this.activeRank,e),this.minActive=dl(this.active,this.activeTo)}addActive(e){let t=0,{value:n,to:r,rank:s}=this.cursor;for(;t-1&&(this.activeTo[r]-this.cursor.from||this.active[r].endSide-this.cursor.startSide)<0){if(this.activeTo[r]>e){this.to=this.activeTo[r],this.endSide=this.active[r].endSide;break}this.removeActive(r),n&&vn(n,r)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let s=this.cursor.value;if(!s.point)this.addActive(n),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&n[r]=0&&!(this.activeRank[n]e||this.activeTo[n]==e&&this.active[n].endSide>=this.point.endSide)&&t.push(this.active[n]);return t.reverse()}openEnd(e){let t=0;for(let n=this.activeTo.length-1;n>=0&&this.activeTo[n]>e;n--)t++;return t}};function ul(i,e,t,n,r,s){i.goto(e),t.goto(n);let o=n+r,O=n,l=n-e;for(;;){let a=i.to+l-t.to||i.endSide-t.endSide,h=a<0?i.to+l:t.to,c=Math.min(h,o);if(i.point||t.point?i.point&&t.point&&(i.point==t.point||i.point.eq(t.point))&&hs(i.activeForPoint(i.to),t.activeForPoint(t.to))||s.comparePoint(O,c,i.point,t.point):c>O&&!hs(i.active,t.active)&&s.compareRange(O,c,i.active,t.active),h>o)break;O=h,a<=0&&i.next(),a>=0&&t.next()}}function hs(i,e){if(i.length!=e.length)return!1;for(let t=0;t=e;n--)i[n+1]=i[n];i[e]=t}function dl(i,e){let t=-1,n=1e9;for(let r=0;r=e)return r;if(r==i.length)break;s+=i.charCodeAt(r)==9?t-s%t:1,r=fe(i,r)}return n===!0?-1:i.length}var us="\u037C",zl=typeof Symbol>"u"?"__"+us:Symbol.for(us),ds=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Xl=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},Ue=class{constructor(e,t){this.rules=[];let{finish:n}=t||{};function r(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function s(o,O,l,a){let h=[],c=/^@(\w+)\b/.exec(o[0]),f=c&&c[1]=="keyframes";if(c&&O==null)return l.push(o[0]+";");for(let d in O){let p=O[d];if(/&/.test(d))s(d.split(/,\s*/).map(m=>o.map($=>m.replace(/&/,$))).reduce((m,$)=>m.concat($)),p,l);else if(p&&typeof p=="object"){if(!c)throw new RangeError("The value of a property ("+d+") should be a primitive value.");s(r(d),p,h,f)}else p!=null&&h.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(h.length||f)&&l.push((n&&!c&&!a?o.map(n):o).join(", ")+" {"+h.join(" ")+"}")}for(let o in e)s(r(o),e[o],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=Xl[zl]||1;return Xl[zl]=e+1,us+e.toString(36)}static mount(e,t,n){let r=e[ds],s=n&&n.nonce;r?s&&r.setNonce(s):r=new ps(e,s),r.mount(Array.isArray(t)?t:[t])}},Wl=new Map,ps=class{constructor(e,t){let n=e.ownerDocument||e,r=n.defaultView;if(!e.head&&e.adoptedStyleSheets&&r.CSSStyleSheet){let s=Wl.get(n);if(s)return e.adoptedStyleSheets=[s.sheet,...e.adoptedStyleSheets],e[ds]=s;this.sheet=new r.CSSStyleSheet,e.adoptedStyleSheets=[this.sheet,...e.adoptedStyleSheets],Wl.set(n,this)}else{this.styleTag=n.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);let s=e.head||e;s.insertBefore(this.styleTag,s.firstChild)}this.modules=[],e[ds]=this}mount(e){let t=this.sheet,n=0,r=0;for(let s=0;s-1&&(this.modules.splice(O,1),r--,O=-1),O==-1){if(this.modules.splice(r++,0,o),t)for(let l=0;l",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},Xd=typeof navigator<"u"&&/Mac/.test(navigator.platform),Wd=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(ee=0;ee<10;ee++)ft[48+ee]=ft[96+ee]=String(ee);var ee;for(ee=1;ee<=24;ee++)ft[ee+111]="F"+ee;var ee;for(ee=65;ee<=90;ee++)ft[ee]=String.fromCharCode(ee+32),ci[ee]=String.fromCharCode(ee);var ee;for(qn in ft)ci.hasOwnProperty(qn)||(ci[qn]=ft[qn]);var qn;function Rl(i){var e=Xd&&i.metaKey&&i.shiftKey&&!i.ctrlKey&&!i.altKey||Wd&&i.shiftKey&&i.key&&i.key.length==1||i.key=="Unidentified",t=!e&&i.key||(i.shiftKey?ci:ft)[i.keyCode]||i.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function Hn(i){let e;return i.nodeType==11?e=i.getSelection?i:i.ownerDocument:e=i,e.getSelection()}function ys(i,e){return e?i==e||i.contains(e.nodeType!=1?e.parentNode:e):!1}function Rd(i){let e=i.activeElement;for(;e&&e.shadowRoot;)e=e.shadowRoot.activeElement;return e}function Mn(i,e){if(!e.anchorNode)return!1;try{return ys(i,e.anchorNode)}catch{return!1}}function Di(i){return i.nodeType==3?Lt(i,0,i.nodeValue.length).getClientRects():i.nodeType==1?i.getClientRects():[]}function Kn(i,e,t,n){return t?Zl(i,e,t,n,-1)||Zl(i,e,t,n,1):!1}function Bi(i){for(var e=0;;e++)if(i=i.previousSibling,!i)return e}function Zl(i,e,t,n,r){for(;;){if(i==t&&e==n)return!0;if(e==(r<0?0:dt(i))){if(i.nodeName=="DIV")return!1;let s=i.parentNode;if(!s||s.nodeType!=1)return!1;e=Bi(i)+(r<0?0:1),i=s}else if(i.nodeType==1){if(i=i.childNodes[e+(r<0?-1:0)],i.nodeType==1&&i.contentEditable=="false")return!1;e=r<0?dt(i):0}else return!1}}function dt(i){return i.nodeType==3?i.nodeValue.length:i.childNodes.length}function io(i,e){let t=e?i.left:i.right;return{left:t,right:t,top:i.top,bottom:i.bottom}}function Zd(i){return{left:0,right:i.innerWidth,top:0,bottom:i.innerHeight}}function Yd(i,e,t,n,r,s,o,O){let l=i.ownerDocument,a=l.defaultView||window;for(let h=i,c=!1;h&&!c;)if(h.nodeType==1){let f,d=h==l.body,p=1,m=1;if(d)f=Zd(a);else{if(/^(fixed|sticky)$/.test(getComputedStyle(h).position)&&(c=!0),h.scrollHeight<=h.clientHeight&&h.scrollWidth<=h.clientWidth){h=h.assignedSlot||h.parentNode;continue}let Q=h.getBoundingClientRect();p=Q.width/h.offsetWidth,m=Q.height/h.offsetHeight,f={left:Q.left,right:Q.left+h.clientWidth*p,top:Q.top,bottom:Q.top+h.clientHeight*m}}let $=0,g=0;if(r=="nearest")e.top0&&e.bottom>f.bottom+g&&(g=e.bottom-f.bottom+g+o)):e.bottom>f.bottom&&(g=e.bottom-f.bottom+o,t<0&&e.top-g0&&e.right>f.right+$&&($=e.right-f.right+$+s)):e.right>f.right&&($=e.right-f.right+s,t<0&&e.leftt.clientHeight||t.scrollWidth>t.clientWidth)return t;t=t.assignedSlot||t.parentNode}else if(t.nodeType==11)t=t.host;else break;return null}var bs=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:n}=e;this.set(t,Math.min(e.anchorOffset,t?dt(t):0),n,Math.min(e.focusOffset,n?dt(n):0))}set(e,t,n,r){this.anchorNode=e,this.anchorOffset=t,this.focusNode=n,this.focusOffset=r}},fi=null;function pa(i){if(i.setActive)return i.setActive();if(fi)return i.focus(fi);let e=[];for(let t=i;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(i.focus(fi==null?{get preventScroll(){return fi={preventScroll:!0},!0}}:void 0),!fi){fi=!1;for(let t=0;tMath.max(1,i.scrollHeight-i.clientHeight-4)}var Se=class i{constructor(e,t,n=!0){this.node=e,this.offset=t,this.precise=n}static before(e,t){return new i(e.parentNode,Bi(e),t)}static after(e,t){return new i(e.parentNode,Bi(e)+1,t)}},no=[],N=class i{constructor(){this.parent=null,this.dom=null,this.flags=2}get overrideDOMText(){return null}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e){let t=this.posAtStart;for(let n of this.children){if(n==e)return t;t+=n.length+n.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}sync(e,t){if(this.flags&2){let n=this.dom,r=null,s;for(let o of this.children){if(o.flags&7){if(!o.dom&&(s=r?r.nextSibling:n.firstChild)){let O=i.get(s);(!O||!O.parent&&O.canReuseDOM(o))&&o.reuseDOM(s)}o.sync(e,t),o.flags&=-8}if(s=r?r.nextSibling:n.firstChild,t&&!t.written&&t.node==n&&s!=o.dom&&(t.written=!0),o.dom.parentNode==n)for(;s&&s!=o.dom;)s=Vl(s);else n.insertBefore(o.dom,s);r=o.dom}for(s=r?r.nextSibling:n.firstChild,s&&t&&t.node==n&&(t.written=!0);s;)s=Vl(s)}else if(this.flags&1)for(let n of this.children)n.flags&7&&(n.sync(e,t),n.flags&=-8)}reuseDOM(e){}localPosFromDOM(e,t){let n;if(e==this.dom)n=this.dom.childNodes[t];else{let r=dt(e)==0?0:t==0?-1:1;for(;;){let s=e.parentNode;if(s==this.dom)break;r==0&&s.firstChild!=s.lastChild&&(e==s.firstChild?r=-1:r=1),e=s}r<0?n=e:n=e.nextSibling}if(n==this.dom.firstChild)return 0;for(;n&&!i.get(n);)n=n.nextSibling;if(!n)return this.length;for(let r=0,s=0;;r++){let o=this.children[r];if(o.dom==n)return s;s+=o.length+o.breakAfter}}domBoundsAround(e,t,n=0){let r=-1,s=-1,o=-1,O=-1;for(let l=0,a=n,h=n;lt)return c.domBoundsAround(e,t,a);if(f>=e&&r==-1&&(r=l,s=a),a>t&&c.dom.parentNode==this.dom){o=l,O=h;break}h=f,a=f+c.breakAfter}return{from:s,to:O<0?n+this.length:O,startDOM:(r?this.children[r-1].dom.nextSibling:null)||this.dom.firstChild,endDOM:o=0?this.children[o].dom:null}}markDirty(e=!1){this.flags|=2,this.markParentsDirty(e)}markParentsDirty(e){for(let t=this.parent;t;t=t.parent){if(e&&(t.flags|=2),t.flags&1)return;t.flags|=1,e=!1}}setParent(e){this.parent!=e&&(this.parent=e,this.flags&7&&this.markParentsDirty(!0))}setDOM(e){this.dom!=e&&(this.dom&&(this.dom.cmView=null),this.dom=e,e.cmView=this)}get rootView(){for(let e=this;;){let t=e.parent;if(!t)return e;e=t}}replaceChildren(e,t,n=no){this.markDirty();for(let r=e;rthis.pos||e==this.pos&&(t>0||this.i==0||this.children[this.i-1].breakAfter))return this.off=e-this.pos,this;let n=this.children[--this.i];this.pos-=n.length+n.breakAfter}}};function ga(i,e,t,n,r,s,o,O,l){let{children:a}=i,h=a.length?a[e]:null,c=s.length?s[s.length-1]:null,f=c?c.breakAfter:o;if(!(e==n&&h&&!o&&!f&&s.length<2&&h.merge(t,r,s.length?c:null,t==0,O,l))){if(n0&&(!o&&s.length&&h.merge(t,h.length,s[0],!1,O,0)?h.breakAfter=s.shift().breakAfter:(t2),z={mac:Ul||/Mac/.test(Xe.platform),windows:/Win/.test(Xe.platform),linux:/Linux|X11/.test(Xe.platform),ie:fr,ie_version:Qa?Ps.documentMode||6:ws?+ws[1]:xs?+xs[1]:0,gecko:Cl,gecko_version:Cl?+(/Firefox\/(\d+)/.exec(Xe.userAgent)||[0,0])[1]:0,chrome:!!ms,chrome_version:ms?+ms[1]:0,ios:Ul,android:/Android\b/.test(Xe.userAgent),webkit:ql,safari:ya,webkit_version:ql?+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]:0,tabSize:Ps.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"},Ud=256,wt=class i extends N{constructor(e){super(),this.text=e}get length(){return this.text.length}createDOM(e){this.setDOM(e||document.createTextNode(this.text))}sync(e,t){this.dom||this.createDOM(),this.dom.nodeValue!=this.text&&(t&&t.node==this.dom&&(t.written=!0),this.dom.nodeValue=this.text)}reuseDOM(e){e.nodeType==3&&this.createDOM(e)}merge(e,t,n){return this.flags&8||n&&(!(n instanceof i)||this.length-(t-e)+n.length>Ud||n.flags&8)?!1:(this.text=this.text.slice(0,e)+(n?n.text:"")+this.text.slice(t),this.markDirty(),!0)}split(e){let t=new i(this.text.slice(e));return this.text=this.text.slice(0,e),this.markDirty(),t.flags|=this.flags&8,t}localPosFromDOM(e,t){return e==this.dom?t:t?this.text.length:0}domAtPos(e){return new Se(this.dom,e)}domBoundsAround(e,t,n){return{from:n,to:n+this.length,startDOM:this.dom,endDOM:this.dom.nextSibling}}coordsAt(e,t){return _d(this.dom,e,t)}},kt=class i extends N{constructor(e,t=[],n=0){super(),this.mark=e,this.children=t,this.length=n;for(let r of t)r.setParent(this)}setAttrs(e){if(ma(e),this.mark.class&&(e.className=this.mark.class),this.mark.attrs)for(let t in this.mark.attrs)e.setAttribute(t,this.mark.attrs[t]);return e}canReuseDOM(e){return super.canReuseDOM(e)&&!((this.flags|e.flags)&8)}reuseDOM(e){e.nodeName==this.mark.tagName.toUpperCase()&&(this.setDOM(e),this.flags|=6)}sync(e,t){this.dom?this.flags&4&&this.setAttrs(this.dom):this.setDOM(this.setAttrs(document.createElement(this.mark.tagName))),super.sync(e,t)}merge(e,t,n,r,s,o){return n&&(!(n instanceof i&&n.mark.eq(this.mark))||e&&s<=0||te&&t.push(n=e&&(r=s),n=l,s++}let o=this.length-e;return this.length=e,r>-1&&(this.children.length=r,this.markDirty()),new i(this.mark,t,o)}domAtPos(e){return ba(this,e)}coordsAt(e,t){return xa(this,e,t)}};function _d(i,e,t){let n=i.nodeValue.length;e>n&&(e=n);let r=e,s=e,o=0;e==0&&t<0||e==n&&t>=0?z.chrome||z.gecko||(e?(r--,o=1):s=0)?0:O.length-1];return z.safari&&!o&&l.width==0&&(l=Array.prototype.find.call(O,a=>a.width)||l),o?io(l,o<0):l||null}var er=class i extends N{static create(e,t,n){return new i(e,t,n)}constructor(e,t,n){super(),this.widget=e,this.length=t,this.side=n,this.prevWidget=null}split(e){let t=i.create(this.widget,this.length-e,this.side);return this.length-=e,t}sync(e){(!this.dom||!this.widget.updateDOM(this.dom,e))&&(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(e)),this.dom.contentEditable="false")}getSide(){return this.side}merge(e,t,n,r,s,o){return n&&(!(n instanceof i)||!this.widget.compare(n.widget)||e>0&&s<=0||t0)?Se.before(this.dom):Se.after(this.dom,e==this.length)}domBoundsAround(){return null}coordsAt(e,t){let n=this.widget.coordsAt(this.dom,e,t);if(n)return n;let r=this.dom.getClientRects(),s=null;if(!r.length)return null;let o=this.side?this.side<0:e>0;for(let O=o?r.length-1:0;s=r[O],!(e>0?O==0:O==r.length-1||s.top0?Se.before(this.dom):Se.after(this.dom)}localPosFromDOM(){return 0}domBoundsAround(){return null}coordsAt(e){return this.dom.getBoundingClientRect()}get overrideDOMText(){return q.empty}get isHidden(){return!0}};wt.prototype.children=er.prototype.children=Ni.prototype.children=no;function ba(i,e){let t=i.dom,{children:n}=i,r=0;for(let s=0;rs&&e0;s--){let o=n[s-1];if(o.dom.parentNode==t)return o.domAtPos(o.length)}for(let s=r;s0&&e instanceof kt&&r.length&&(n=r[r.length-1])instanceof kt&&n.mark.eq(e.mark)?Pa(n,e.children[0],t-1):(r.push(e),e.setParent(i)),i.length+=e.length}function xa(i,e,t){let n=null,r=-1,s=null,o=-1;function O(a,h){for(let c=0,f=0;c=h&&(d.children.length?O(d,h-f):(!s||s.isHidden&&t>0)&&(p>h||f==p&&d.getSide()>0)?(s=d,o=h-f):(f-1?1:0)!=r.length-(t&&r.indexOf(t)>-1?1:0))return!1;for(let s of n)if(s!=t&&(r.indexOf(s)==-1||i[s]!==e[s]))return!1;return!0}function vs(i,e,t){let n=!1;if(e)for(let r in e)t&&r in t||(n=!0,r=="style"?i.style.cssText="":i.removeAttribute(r));if(t)for(let r in t)e&&e[r]==t[r]||(n=!0,r=="style"?i.style.cssText=t[r]:i.setAttribute(r,t[r]));return n}function jd(i){let e=Object.create(null);for(let t=0;t0&&this.children[n-1].length==0;)this.children[--n].destroy();return this.children.length=n,this.markDirty(),this.length=e,t}transferDOM(e){this.dom&&(this.markDirty(),e.setDOM(this.dom),e.prevAttrs=this.prevAttrs===void 0?this.attrs:this.prevAttrs,this.prevAttrs=void 0,this.dom=null)}setDeco(e){ro(this.attrs,e)||(this.dom&&(this.prevAttrs=this.attrs,this.markDirty()),this.attrs=e)}append(e,t){Pa(this,e,t)}addLineDeco(e){let t=e.spec.attributes,n=e.spec.class;t&&(this.attrs=ks(t,this.attrs||{})),n&&(this.attrs=ks({class:n},this.attrs||{}))}domAtPos(e){return ba(this,e)}reuseDOM(e){e.nodeName=="DIV"&&(this.setDOM(e),this.flags|=6)}sync(e,t){var n;this.dom?this.flags&4&&(ma(this.dom),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0):(this.setDOM(document.createElement("div")),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0),this.prevAttrs!==void 0&&(vs(this.dom,this.prevAttrs,this.attrs),this.dom.classList.add("cm-line"),this.prevAttrs=void 0),super.sync(e,t);let r=this.dom.lastChild;for(;r&&N.get(r)instanceof kt;)r=r.lastChild;if(!r||!this.length||r.nodeName!="BR"&&((n=N.get(r))===null||n===void 0?void 0:n.isEditable)==!1&&(!z.ios||!this.children.some(s=>s instanceof wt))){let s=document.createElement("BR");s.cmIgnore=!0,this.dom.appendChild(s)}}measureTextSize(){if(this.children.length==0||this.length>20)return null;let e=0,t;for(let n of this.children){if(!(n instanceof wt)||/[^ -~]/.test(n.text))return null;let r=Di(n.dom);if(r.length!=1)return null;e+=r[0].width,t=r[0].height}return e?{lineHeight:this.dom.getBoundingClientRect().height,charWidth:e/this.length,textHeight:t}:null}coordsAt(e,t){let n=xa(this,e,t);if(!this.children.length&&n&&this.parent){let{heightOracle:r}=this.parent.view.viewState,s=n.bottom-n.top;if(Math.abs(s-r.lineHeight)<2&&r.textHeight=t){if(s instanceof i)return s;if(o>t)break}r=o+s.breakAfter}return null}},mi=class i extends N{constructor(e,t,n){super(),this.widget=e,this.length=t,this.deco=n,this.breakAfter=0,this.prevWidget=null}merge(e,t,n,r,s,o){return n&&(!(n instanceof i)||!this.widget.compare(n.widget)||e>0&&s<=0||t0}},vt=class{eq(e){return!1}updateDOM(e,t){return!1}compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}get estimatedHeight(){return-1}get lineBreaks(){return 0}ignoreEvent(e){return!0}coordsAt(e,t,n){return null}get isHidden(){return!1}destroy(e){}},Qe=function(i){return i[i.Text=0]="Text",i[i.WidgetBefore=1]="WidgetBefore",i[i.WidgetAfter=2]="WidgetAfter",i[i.WidgetRange=3]="WidgetRange",i}(Qe||(Qe={})),M=class extends Me{constructor(e,t,n,r){super(),this.startSide=e,this.endSide=t,this.widget=n,this.spec=r}get heightRelevant(){return!1}static mark(e){return new Fi(e)}static widget(e){let t=Math.max(-1e4,Math.min(1e4,e.side||0)),n=!!e.block;return t+=n&&!e.inlineOrder?t>0?3e8:-4e8:t>0?1e8:-1e8,new Tt(e,t,t,n,e.widget||null,!1)}static replace(e){let t=!!e.block,n,r;if(e.isBlockGap)n=-5e8,r=4e8;else{let{start:s,end:o}=wa(e,t);n=(s?t?-3e8:-1:5e8)-1,r=(o?t?2e8:1:-6e8)+1}return new Tt(e,n,r,t,e.widget||null,!0)}static line(e){return new Hi(e)}static set(e,t=!1){return D.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};M.none=D.empty;var Fi=class i extends M{constructor(e){let{start:t,end:n}=wa(e);super(t?-1:5e8,n?1:-6e8,null,e),this.tagName=e.tagName||"span",this.class=e.class||"",this.attrs=e.attributes||null}eq(e){var t,n;return this==e||e instanceof i&&this.tagName==e.tagName&&(this.class||((t=this.attrs)===null||t===void 0?void 0:t.class))==(e.class||((n=e.attrs)===null||n===void 0?void 0:n.class))&&ro(this.attrs,e.attrs,"class")}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}};Fi.prototype.point=!1;var Hi=class i extends M{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof i&&this.spec.class==e.spec.class&&ro(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}};Hi.prototype.mapMode=Oe.TrackBefore;Hi.prototype.point=!0;var Tt=class i extends M{constructor(e,t,n,r,s,o){super(t,n,s,e),this.block=r,this.isReplace=o,this.mapMode=r?t<=0?Oe.TrackBefore:Oe.TrackAfter:Oe.TrackDel}get type(){return this.startSide!=this.endSide?Qe.WidgetRange:this.startSide<=0?Qe.WidgetBefore:Qe.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof i&&Ed(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}};Tt.prototype.point=!0;function wa(i,e=!1){let{inclusiveStart:t,inclusiveEnd:n}=i;return t==null&&(t=i.inclusive),n==null&&(n=i.inclusive),{start:t??e,end:n??e}}function Ed(i,e){return i==e||!!(i&&e&&i.compare(e))}function Ts(i,e,t,n=0){let r=t.length-1;r>=0&&t[r]+n>=i?t[r]=Math.max(t[r],e):t.push(i,e)}var Gi=class i{constructor(e,t,n,r){this.doc=e,this.pos=t,this.end=n,this.disallowBlockEffectsFor=r,this.content=[],this.curLine=null,this.breakAtStart=0,this.pendingBuffer=0,this.bufferMarks=[],this.atCursorPos=!0,this.openStart=-1,this.openEnd=-1,this.text="",this.textOff=0,this.cursor=e.iter(),this.skip=t}posCovered(){if(this.content.length==0)return!this.breakAtStart&&this.doc.lineAt(this.pos).from!=this.pos;let e=this.content[this.content.length-1];return!(e.breakAfter||e instanceof mi&&e.deco.endSide<0)}getLine(){return this.curLine||(this.content.push(this.curLine=new le),this.atCursorPos=!0),this.curLine}flushBuffer(e=this.bufferMarks){this.pendingBuffer&&(this.curLine.append(Un(new Ni(-1),e),e.length),this.pendingBuffer=0)}addBlockWidget(e){this.flushBuffer(),this.curLine=null,this.content.push(e)}finish(e){this.pendingBuffer&&e<=this.bufferMarks.length?this.flushBuffer():this.pendingBuffer=0,!this.posCovered()&&!(e&&this.content.length&&this.content[this.content.length-1]instanceof mi)&&this.getLine()}buildText(e,t,n){for(;e>0;){if(this.textOff==this.text.length){let{value:s,lineBreak:o,done:O}=this.cursor.next(this.skip);if(this.skip=0,O)throw new Error("Ran out of text content when drawing inline views");if(o){this.posCovered()||this.getLine(),this.content.length?this.content[this.content.length-1].breakAfter=1:this.breakAtStart=1,this.flushBuffer(),this.curLine=null,this.atCursorPos=!0,e--;continue}else this.text=s,this.textOff=0}let r=Math.min(this.text.length-this.textOff,e,512);this.flushBuffer(t.slice(t.length-n)),this.getLine().append(Un(new wt(this.text.slice(this.textOff,this.textOff+r)),t),n),this.atCursorPos=!0,this.textOff+=r,e-=r,n=0}}span(e,t,n,r){this.buildText(t-e,n,r),this.pos=t,this.openStart<0&&(this.openStart=r)}point(e,t,n,r,s,o){if(this.disallowBlockEffectsFor[o]&&n instanceof Tt){if(n.block)throw new RangeError("Block decorations may not be specified via plugins");if(t>this.doc.lineAt(this.pos).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}let O=t-e;if(n instanceof Tt)if(n.block)n.startSide>0&&!this.posCovered()&&this.getLine(),this.addBlockWidget(new mi(n.widget||new tr("div"),O,n));else{let l=er.create(n.widget||new tr("span"),O,O?0:n.startSide),a=this.atCursorPos&&!l.isEditable&&s<=r.length&&(e0),h=!l.isEditable&&(er.length||n.startSide<=0),c=this.getLine();this.pendingBuffer==2&&!a&&!l.isEditable&&(this.pendingBuffer=0),this.flushBuffer(r),a&&(c.append(Un(new Ni(1),r),s),s=r.length+Math.max(0,s-r.length)),c.append(Un(l,r),s),this.atCursorPos=h,this.pendingBuffer=h?er.length?1:2:0,this.pendingBuffer&&(this.bufferMarks=r.slice())}else this.doc.lineAt(this.pos).from==this.pos&&this.getLine().addLineDeco(n);O&&(this.textOff+O<=this.text.length?this.textOff+=O:(this.skip+=O-(this.text.length-this.textOff),this.text="",this.textOff=0),this.pos=t),this.openStart<0&&(this.openStart=s)}static build(e,t,n,r,s){let o=new i(e,t,n,s);return o.openEnd=D.spans(r,t,n,o),o.openStart<0&&(o.openStart=o.openEnd),o.finish(o.openEnd),o}};function Un(i,e){for(let t of e)i=new kt(t,[i],i.length);return i}var tr=class extends vt{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}},ka=W.define(),va=W.define(),Ta=W.define(),za=W.define(),zs=W.define(),Xa=W.define(),Wa=W.define(),Ra=W.define({combine:i=>i.some(e=>e)}),Za=W.define({combine:i=>i.some(e=>e)}),ir=class i{constructor(e,t="nearest",n="nearest",r=5,s=5){this.range=e,this.y=t,this.x=n,this.yMargin=r,this.xMargin=s}map(e){return e.empty?this:new i(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin)}},Al=E.define({map:(i,e)=>i.map(e)});function ut(i,e,t){let n=i.facet(za);n.length?n[0](e):window.onerror?window.onerror(String(e),t,void 0,void 0,e):t?console.error(t+":",e):console.error(e)}var ur=W.define({combine:i=>i.length?i[0]:!0}),Gd=0,Ui=W.define(),Ae=class i{constructor(e,t,n,r,s){this.id=e,this.create=t,this.domEventHandlers=n,this.domEventObservers=r,this.extension=s(this)}static define(e,t){let{eventHandlers:n,eventObservers:r,provide:s,decorations:o}=t||{};return new i(Gd++,e,n,r,O=>{let l=[Ui.of(O)];return o&&l.push(Ki.of(a=>{let h=a.plugin(O);return h?o(h):M.none})),s&&l.push(s(O)),l})}static fromClass(e,t){return i.define(n=>new e(n),t)}},Ii=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(n){if(ut(t.state,n,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.create(e)}catch(t){ut(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(n){ut(e.state,n,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},Ya=W.define(),so=W.define(),Ki=W.define(),oo=W.define(),Va=W.define();function jl(i,e,t){let n=i.state.facet(Va);if(!n.length)return n;let r=n.map(o=>o instanceof Function?o(i):o),s=[];return D.spans(r,e,t,{point(){},span(o,O,l,a){let h=s;for(let c=l.length-1;c>=0;c--,a--){let f=l[c].spec.bidiIsolate,d;if(f!=null)if(a>0&&h.length&&(d=h[h.length-1]).to==o&&d.direction==f)d.to=O,h=d.inner;else{let p={from:o,to:O,direction:f,inner:[]};h.push(p),h=p.inner}}}}),s}var Ca=W.define();function qa(i){let e=0,t=0,n=0,r=0;for(let s of i.state.facet(Ca)){let o=s(i);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(n=Math.max(n,o.top)),o.bottom!=null&&(r=Math.max(r,o.bottom)))}return{left:e,right:t,top:n,bottom:r}}var _i=W.define(),nt=class i{constructor(e,t,n,r){this.fromA=e,this.toA=t,this.fromB=n,this.toB=r}join(e){return new i(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,n=this;for(;t>0;t--){let r=e[t-1];if(!(r.fromA>n.toA)){if(r.toAh)break;s+=2}if(!l)return n;new i(l.fromA,l.toA,l.fromB,l.toB).addToSet(n),o=l.toA,O=l.toB}}},nr=class i{constructor(e,t,n){this.view=e,this.state=t,this.transactions=n,this.flags=0,this.startState=e.state,this.changes=$e.empty(this.startState.doc.length);for(let s of n)this.changes=this.changes.compose(s.changes);let r=[];this.changes.iterChangedRanges((s,o,O,l)=>r.push(new nt(s,o,O,l))),this.changedRanges=r}static create(e,t,n){return new i(e,t,n)}get viewportChanged(){return(this.flags&4)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&10)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},K=function(i){return i[i.LTR=0]="LTR",i[i.RTL=1]="RTL",i}(K||(K={})),Ji=K.LTR,Ua=K.RTL;function _a(i){let e=[];for(let t=0;t=t){if(O.level==n)return o;(s<0||(r!=0?r<0?O.fromt:e[s].level>O.level))&&(s=o)}}if(s<0)throw new RangeError("Index out of range");return s}};function Aa(i,e){if(i.length!=e.length)return!1;for(let t=0;t=0;m-=3)if(et[m+1]==-d){let $=et[m+2],g=$&2?r:$&4?$&1?s:r:0;g&&(G[c]=G[et[m]]=g),O=m;break}}else{if(et.length==189)break;et[O++]=c,et[O++]=f,et[O++]=l}else if((p=G[c])==2||p==1){let m=p==r;l=m?0:1;for(let $=O-3;$>=0;$-=3){let g=et[$+2];if(g&2)break;if(m)et[$+2]|=2;else{if(g&4)break;et[$+2]|=4}}}}}function Fd(i,e,t,n){for(let r=0,s=n;r<=t.length;r++){let o=r?t[r-1].to:i,O=rl;)p==$&&(p=t[--m].from,$=m?t[m-1].to:i),G[--p]=d;l=h}else s=a,l++}}}function Ws(i,e,t,n,r,s,o){let O=n%2?2:1;if(n%2==r%2)for(let l=e,a=0;ll&&o.push(new it(l,m.from,d));let $=m.direction==Ji!=!(d%2);Rs(i,$?n+1:n,r,m.inner,m.from,m.to,o),l=m.to}p=m.to}else{if(p==t||(h?G[p]!=O:G[p]==O))break;p++}f?Ws(i,l,p,n+1,r,f,o):le;){let h=!0,c=!1;if(!a||l>s[a-1].to){let m=G[l-1];m!=O&&(h=!1,c=m==16)}let f=!h&&O==1?[]:null,d=h?n:n+1,p=l;e:for(;;)if(a&&p==s[a-1].to){if(c)break e;let m=s[--a];if(!h)for(let $=m.from,g=a;;){if($==e)break e;if(g&&s[g-1].to==$)$=s[--g].from;else{if(G[$-1]==O)break e;break}}if(f)f.push(m);else{m.toG.length;)G[G.length]=256;let n=[],r=e==Ji?0:1;return Rs(i,r,r,t,0,i.length,n),n}function ja(i){return[new it(0,i,0)]}var Ea="";function Kd(i,e,t,n,r){var s;let o=n.head-i.from,O=-1;if(o==0){if(!r||!i.length)return null;e[0].level!=t&&(o=e[0].side(!1,t),O=0)}else if(o==i.length){if(r)return null;let f=e[e.length-1];f.level!=t&&(o=f.side(!0,t),O=e.length-1)}O<0&&(O=it.find(e,o,(s=n.bidiLevel)!==null&&s!==void 0?s:-1,n.assoc));let l=e[O];o==l.side(r,t)&&(l=e[O+=r?1:-1],o=l.side(!r,t));let a=r==(l.dir==t),h=fe(i.text,o,a);if(Ea=i.text.slice(Math.min(o,h),Math.max(o,h)),h!=l.side(r,t))return S.cursor(h+i.from,a?-1:1,l.level);let c=O==(r?e.length-1:0)?null:e[O+(r?1:-1)];return!c&&l.level!=t?S.cursor(r?i.to:i.from,r?-1:1,t):c&&c.level0&&n.length&&(n.every(({fromA:a,toA:h})=>hthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0);let r=-1;this.view.inputState.composing>=0&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?r=this.domChanged.newSel.head:!sp(e.changes,this.hasComposition)&&!e.selectionSet&&(r=e.state.selection.main.head));let s=r>-1?ep(this.view,e.changes,r):null;if(this.domChanged=null,this.hasComposition){this.markedForComposition.clear();let{from:a,to:h}=this.hasComposition;n=new nt(a,h,e.changes.mapPos(a,-1),e.changes.mapPos(h,1)).addToSet(n.slice())}this.hasComposition=s?{from:s.range.fromB,to:s.range.toB}:null,(z.ie||z.chrome)&&!s&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,O=this.updateDeco(),l=np(o,O,e.changes);return n=nt.extendWithRanges(n,l),!(this.flags&7)&&n.length==0?!1:(this.updateInner(n,e.startState.doc.length,s),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t,n){this.view.viewState.mustMeasureContent=!0,this.updateChildren(e,t,n);let{observer:r}=this.view;r.ignore(()=>{this.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let o=z.chrome||z.ios?{node:r.selectionRange.focusNode,written:!1}:void 0;this.sync(this.view,o),this.flags&=-8,o&&(o.written||r.selectionRange.focusNode!=o.node)&&(this.forceSelection=!0),this.dom.style.height=""}),this.markedForComposition.forEach(o=>o.flags&=-9);let s=[];if(this.view.viewport.from||this.view.viewport.to=0?r[o]:null;if(!O)break;let{fromA:l,toA:a,fromB:h,toB:c}=O,f,d,p,m;if(n&&n.range.fromBh){let y=Gi.build(this.view.state.doc,h,n.range.fromB,this.decorations,this.dynamicDecorationMap),P=Gi.build(this.view.state.doc,n.range.toB,c,this.decorations,this.dynamicDecorationMap);d=y.breakAtStart,p=y.openStart,m=P.openEnd;let w=this.compositionView(n);P.breakAtStart?w.breakAfter=1:P.content.length&&w.merge(w.length,w.length,P.content[0],!1,P.openStart,0)&&(w.breakAfter=P.content[0].breakAfter,P.content.shift()),y.content.length&&w.merge(0,0,y.content[y.content.length-1],!0,0,y.openEnd)&&y.content.pop(),f=y.content.concat(w).concat(P.content)}else({content:f,breakAtStart:d,openStart:p,openEnd:m}=Gi.build(this.view.state.doc,h,c,this.decorations,this.dynamicDecorationMap));let{i:$,off:g}=s.findPos(a,1),{i:Q,off:k}=s.findPos(l,-1);ga(this,Q,k,$,g,f,d,p,m)}n&&this.fixCompositionDOM(n)}compositionView(e){let t=new wt(e.text.nodeValue);t.flags|=8;for(let{deco:r}of e.marks)t=new kt(r,[t],t.length);let n=new le;return n.append(t,0),n}fixCompositionDOM(e){let t=(s,o)=>{o.flags|=8|(o.children.some(l=>l.flags&7)?1:0),this.markedForComposition.add(o);let O=N.get(s);O&&O!=o&&(O.dom=null),o.setDOM(s)},n=this.childPos(e.range.fromB,1),r=this.children[n.i];t(e.line,r);for(let s=e.marks.length-1;s>=-1;s--)n=r.childPos(n.off,1),r=r.children[n.i],t(s>=0?e.marks[s].node:e.text,r)}updateSelection(e=!1,t=!1){(e||!this.view.observer.selectionRange.focusNode)&&this.view.observer.readSelectionRange();let n=this.view.root.activeElement,r=n==this.dom,s=!r&&Mn(this.dom,this.view.observer.selectionRange)&&!(n&&this.dom.contains(n));if(!(r||t||s))return;let o=this.forceSelection;this.forceSelection=!1;let O=this.view.state.selection.main,l=this.moveToLine(this.domAtPos(O.anchor)),a=O.empty?l:this.moveToLine(this.domAtPos(O.head));if(z.gecko&&O.empty&&!this.hasComposition&&Jd(l)){let c=document.createTextNode("");this.view.observer.ignore(()=>l.node.insertBefore(c,l.node.childNodes[l.offset]||null)),l=a=new Se(c,0),o=!0}let h=this.view.observer.selectionRange;(o||!h.focusNode||!Kn(l.node,l.offset,h.anchorNode,h.anchorOffset)||!Kn(a.node,a.offset,h.focusNode,h.focusOffset))&&(this.view.observer.ignore(()=>{z.android&&z.chrome&&this.dom.contains(h.focusNode)&&rp(h.focusNode,this.dom)&&(this.dom.blur(),this.dom.focus({preventScroll:!0}));let c=Hn(this.view.root);if(c)if(O.empty){if(z.gecko){let f=tp(l.node,l.offset);if(f&&f!=3){let d=Ia(l.node,l.offset,f==1?1:-1);d&&(l=new Se(d.node,d.offset))}}c.collapse(l.node,l.offset),O.bidiLevel!=null&&c.caretBidiLevel!==void 0&&(c.caretBidiLevel=O.bidiLevel)}else if(c.extend){c.collapse(l.node,l.offset);try{c.extend(a.node,a.offset)}catch{}}else{let f=document.createRange();O.anchor>O.head&&([l,a]=[a,l]),f.setEnd(a.node,a.offset),f.setStart(l.node,l.offset),c.removeAllRanges(),c.addRange(f)}s&&this.view.root.activeElement==this.dom&&(this.dom.blur(),n&&n.focus())}),this.view.observer.setSelectionRange(l,a)),this.impreciseAnchor=l.precise?null:new Se(h.anchorNode,h.anchorOffset),this.impreciseHead=a.precise?null:new Se(h.focusNode,h.focusOffset)}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,n=Hn(e.root),{anchorNode:r,anchorOffset:s}=e.observer.selectionRange;if(!n||!t.empty||!t.assoc||!n.modify)return;let o=le.find(this,t.head);if(!o)return;let O=o.posAtStart;if(t.head==O||t.head==O+o.length)return;let l=this.coordsAt(t.head,-1),a=this.coordsAt(t.head,1);if(!l||!a||l.bottom>a.top)return;let h=this.domAtPos(t.head+t.assoc);n.collapse(h.node,h.offset),n.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let c=e.observer.selectionRange;e.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=t.from&&n.collapse(r,s)}moveToLine(e){let t=this.dom,n;if(e.node!=t)return e;for(let r=e.offset;!n&&r=0;r--){let s=N.get(t.childNodes[r]);s instanceof le&&(n=s.domAtPos(s.length))}return n?new Se(n.node,n.offset,!0):e}nearest(e){for(let t=e;t;){let n=N.get(t);if(n&&n.rootView==this)return n;t=t.parentNode}return null}posFromDOM(e,t){let n=this.nearest(e);if(!n)throw new RangeError("Trying to find position for a DOM position outside of the document");return n.localPosFromDOM(e,t)+n.posAtStart}domAtPos(e){let{i:t,off:n}=this.childCursor().findPos(e,-1);for(;t=0;o--){let O=this.children[o],l=s-O.breakAfter,a=l-O.length;if(le||O.covers(1))&&(!n||O instanceof le&&!(n instanceof le&&t>=0))&&(n=O,r=a),s=a}return n?n.coordsAt(e-r,t):null}coordsForChar(e){let{i:t,off:n}=this.childPos(e,1),r=this.children[t];if(!(r instanceof le))return null;for(;r.children.length;){let{i:O,off:l}=r.childPos(n,1);for(;;O++){if(O==r.children.length)return null;if((r=r.children[O]).length)break}n=l}if(!(r instanceof wt))return null;let s=fe(r.text,n);if(s==n)return null;let o=Lt(r.dom,n,s).getClientRects();for(let O=0;OMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,O=-1,l=this.view.textDirection==K.LTR;for(let a=0,h=0;hr)break;if(a>=n){let d=c.dom.getBoundingClientRect();if(t.push(d.height),o){let p=c.dom.lastChild,m=p?Di(p):[];if(m.length){let $=m[m.length-1],g=l?$.right-d.left:d.right-$.left;g>O&&(O=g,this.minWidth=s,this.minWidthFrom=a,this.minWidthTo=f)}}}a=f+c.breakAfter}return t}textDirectionAt(e){let{i:t}=this.childPos(e,1);return getComputedStyle(this.children[t].dom).direction=="rtl"?K.RTL:K.LTR}measureTextSize(){for(let s of this.children)if(s instanceof le){let o=s.measureTextSize();if(o)return o}let e=document.createElement("div"),t,n,r;return e.className="cm-line",e.style.width="99999px",e.style.position="absolute",e.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.dom.appendChild(e);let s=Di(e.firstChild)[0];t=e.getBoundingClientRect().height,n=s?s.width/27:7,r=s?s.height:t,e.remove()}),{lineHeight:t,charWidth:n,textHeight:r}}childCursor(e=this.length){let t=this.children.length;return t&&(e-=this.children[--t].length),new Jn(this.children,e,t)}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let n=0,r=0;;r++){let s=r==t.viewports.length?null:t.viewports[r],o=s?s.from-1:this.length;if(o>n){let O=(t.lineBlockAt(o).bottom-t.lineBlockAt(n).top)/this.view.scaleY;e.push(M.replace({widget:new sr(O),block:!0,inclusive:!0,isBlockGap:!0}).range(n,o))}if(!s)break;n=s.to+1}return M.set(e)}updateDeco(){let e=this.view.state.facet(Ki).map((t,n)=>(this.dynamicDecorationMap[n]=typeof t=="function")?t(this.view):t);for(let t=e.length;tt.anchor?-1:1),r;if(!n)return;!t.empty&&(r=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(n={left:Math.min(n.left,r.left),top:Math.min(n.top,r.top),right:Math.max(n.right,r.right),bottom:Math.max(n.bottom,r.bottom)});let s=qa(this.view),o={left:n.left-s.left,top:n.top-s.top,right:n.right+s.right,bottom:n.bottom+s.bottom};Yd(this.view.scrollDOM,o,t.head0)n=n.childNodes[r-1],r=dt(n);else break}if(t>=0)for(let n=i,r=e;;){if(n.nodeType==3)return{node:n,offset:r};if(n.nodeType==1&&r=0)n=n.childNodes[r],r=0;else break}return null}function tp(i,e){return i.nodeType!=1?0:(e&&i.childNodes[e-1].contentEditable=="false"?1:0)|(e{ne.from&&(t=!0)}),t}function op(i,e,t=1){let n=i.charCategorizer(e),r=i.doc.lineAt(e),s=e-r.from;if(r.length==0)return S.cursor(e);s==0?t=1:s==r.length&&(t=-1);let o=s,O=s;t<0?o=fe(r.text,s,!1):O=fe(r.text,s);let l=n(r.text.slice(o,O));for(;o>0;){let a=fe(r.text,o,!1);if(n(r.text.slice(a,o))!=l)break;o=a}for(;Oi?e.left-i:Math.max(0,i-e.right)}function lp(i,e){return e.top>i?e.top-i:Math.max(0,i-e.bottom)}function $s(i,e){return i.tope.top+1}function El(i,e){return ei.bottom?{top:i.top,left:i.left,right:i.right,bottom:e}:i}function Zs(i,e,t){let n,r,s,o,O=!1,l,a,h,c;for(let p=i.firstChild;p;p=p.nextSibling){let m=Di(p);for(let $=0;$k||o==k&&s>Q){n=p,r=g,s=Q,o=k;let y=k?t0?$0)}Q==0?t>g.bottom&&(!h||h.bottomg.top)&&(a=p,c=g):h&&$s(h,g)?h=Gl(h,g.bottom):c&&$s(c,g)&&(c=El(c,g.top))}}if(h&&h.bottom>=t?(n=l,r=h):c&&c.top<=t&&(n=a,r=c),!n)return{node:i,offset:0};let f=Math.max(r.left,Math.min(r.right,e));if(n.nodeType==3)return Il(n,f,t);if(O&&n.contentEditable!="false")return Zs(n,f,t);let d=Array.prototype.indexOf.call(i.childNodes,n)+(e>=(r.left+r.right)/2?1:0);return{node:i,offset:d}}function Il(i,e,t){let n=i.nodeValue.length,r=-1,s=1e9,o=0;for(let O=0;Ot?h.top-t:t-h.bottom)-1;if(h.left-1<=e&&h.right+1>=e&&c=(h.left+h.right)/2,d=f;if((z.chrome||z.gecko)&&Lt(i,O).getBoundingClientRect().left==h.right&&(d=!f),c<=0)return{node:i,offset:O+(d?1:0)};r=O+(d?1:0),s=c}}}return{node:i,offset:r>-1?r:o>0?i.nodeValue.length:0}}function Ma(i,e,t,n=-1){var r,s;let o=i.contentDOM.getBoundingClientRect(),O=o.top+i.viewState.paddingTop,l,{docHeight:a}=i.viewState,{x:h,y:c}=e,f=c-O;if(f<0)return 0;if(f>a)return i.state.doc.length;for(let y=i.viewState.heightOracle.textHeight/2,P=!1;l=i.elementAtHeight(f),l.type!=Qe.Text;)for(;f=n>0?l.bottom+y:l.top-y,!(f>=0&&f<=a);){if(P)return t?null:0;P=!0,n=-n}c=O+f;let d=l.from;if(di.viewport.to)return i.viewport.to==i.state.doc.length?i.state.doc.length:t?null:Ml(i,o,l,h,c);let p=i.dom.ownerDocument,m=i.root.elementFromPoint?i.root:p,$=m.elementFromPoint(h,c);$&&!i.contentDOM.contains($)&&($=null),$||(h=Math.max(o.left+1,Math.min(o.right-1,h)),$=m.elementFromPoint(h,c),$&&!i.contentDOM.contains($)&&($=null));let g,Q=-1;if($&&((r=i.docView.nearest($))===null||r===void 0?void 0:r.isEditable)!=!1){if(p.caretPositionFromPoint){let y=p.caretPositionFromPoint(h,c);y&&({offsetNode:g,offset:Q}=y)}else if(p.caretRangeFromPoint){let y=p.caretRangeFromPoint(h,c);y&&({startContainer:g,startOffset:Q}=y,(!i.contentDOM.contains(g)||z.safari&&ap(g,Q,h)||z.chrome&&hp(g,Q,h))&&(g=void 0))}}if(!g||!i.docView.dom.contains(g)){let y=le.find(i.docView,d);if(!y)return f>l.top+l.height/2?l.to:l.from;({node:g,offset:Q}=Zs(y.dom,h,c))}let k=i.docView.nearest(g);if(!k)return null;if(k.isWidget&&((s=k.dom)===null||s===void 0?void 0:s.nodeType)==1){let y=k.dom.getBoundingClientRect();return e.yi.defaultLineHeight*1.5){let O=i.viewState.heightOracle.textHeight,l=Math.floor((r-t.top-(i.defaultLineHeight-O)*.5)/O);s+=l*i.viewState.heightOracle.lineLength}let o=i.state.sliceDoc(t.from,t.to);return t.from+Cn(o,s,i.state.tabSize)}function ap(i,e,t){let n;if(i.nodeType!=3||e!=(n=i.nodeValue.length))return!1;for(let r=i.nextSibling;r;r=r.nextSibling)if(r.nodeType!=1||r.nodeName!="BR")return!1;return Lt(i,n-1,n).getBoundingClientRect().left>t}function hp(i,e,t){if(e!=0)return!1;for(let r=i;;){let s=r.parentNode;if(!s||s.nodeType!=1||s.firstChild!=r)return!1;if(s.classList.contains("cm-line"))break;r=s}let n=i.nodeType==1?i.getBoundingClientRect():Lt(i,0,Math.max(i.nodeValue.length,1)).getBoundingClientRect();return t-n.left>5}function Ys(i,e){let t=i.lineBlockAt(e);if(Array.isArray(t.type)){for(let n of t.type)if(n.to>e||n.to==e&&(n.to==t.to||n.type==Qe.Text))return n}return t}function cp(i,e,t,n){let r=Ys(i,e.head),s=!n||r.type!=Qe.Text||!(i.lineWrapping||r.widgetLineBreaks)?null:i.coordsAtPos(e.assoc<0&&e.head>r.from?e.head-1:e.head);if(s){let o=i.dom.getBoundingClientRect(),O=i.textDirectionAt(r.from),l=i.posAtCoords({x:t==(O==K.LTR)?o.right-1:o.left+1,y:(s.top+s.bottom)/2});if(l!=null)return S.cursor(l,t?-1:1)}return S.cursor(t?r.to:r.from,t?-1:1)}function Ll(i,e,t,n){let r=i.state.doc.lineAt(e.head),s=i.bidiSpans(r),o=i.textDirectionAt(r.from);for(let O=e,l=null;;){let a=Kd(r,s,o,O,t),h=Ea;if(!a){if(r.number==(t?i.state.doc.lines:1))return O;h=` +`,r=i.state.doc.line(r.number+(t?1:-1)),s=i.bidiSpans(r),a=S.cursor(t?r.from:r.to)}if(l){if(!l(h))return O}else{if(!n)return a;l=n(h)}O=a}}function fp(i,e,t){let n=i.state.charCategorizer(e),r=n(t);return s=>{let o=n(s);return r==qe.Space&&(r=o),r==o}}function up(i,e,t,n){let r=e.head,s=t?1:-1;if(r==(t?i.state.doc.length:0))return S.cursor(r,e.assoc);let o=e.goalColumn,O,l=i.contentDOM.getBoundingClientRect(),a=i.coordsAtPos(r,e.assoc||-1),h=i.documentTop;if(a)o==null&&(o=a.left-l.left),O=s<0?a.top:a.bottom;else{let d=i.viewState.lineBlockAt(r);o==null&&(o=Math.min(l.right-l.left,i.defaultCharacterWidth*(r-d.from))),O=(s<0?d.top:d.bottom)+h}let c=l.left+o,f=n??i.viewState.heightOracle.textHeight>>1;for(let d=0;;d+=10){let p=O+(f+d)*s,m=Ma(i,{x:c,y:p},!1,s);if(pl.bottom||(s<0?mr)){let $=i.docView.coordsForChar(m),g=!$||p<$.top?-1:1;return S.cursor(m,g,void 0,o)}}}function Ln(i,e,t){for(;;){let n=0;for(let r of i)r.between(e-1,e+1,(s,o,O)=>{if(e>s&&er(i)),t.from,e.head>t.from?-1:1);return n==t.from?t:S.cursor(n,nnull),z.gecko&&Tp(e.contentDOM.ownerDocument)}handleEvent(e){!Qp(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||this.runHandlers(e.type,e)}runHandlers(e,t){let n=this.handlers[e];if(n){for(let r of n.observers)r(this.view,t);for(let r of n.handlers){if(t.defaultPrevented)break;if(r(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=dp(e),n=this.handlers,r=this.view.contentDOM;for(let s in t)if(s!="scroll"){let o=!t[s].handlers.length,O=n[s];O&&o!=!O.handlers.length&&(r.removeEventListener(s,this.handleEvent),O=null),O||r.addEventListener(s,this.handleEvent,{passive:o})}for(let s in n)s!="scroll"&&!t[s]&&r.removeEventListener(s,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&Date.now()n.keyCode==e.keyCode))&&!e.ctrlKey||pp.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(){let e=this.pendingIOSKey;return e?(this.pendingIOSKey=void 0,pi(this.view.contentDOM,e.key,e.keyCode)):!1}ignoreDuringComposition(e){return/^key/.test(e.type)?this.composing>0?!0:z.safari&&!z.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1:!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.mouseSelection&&this.mouseSelection.update(e),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function Dl(i,e){return(t,n)=>{try{return e.call(i,n,t)}catch(r){ut(t.state,r)}}}function dp(i){let e=Object.create(null);function t(n){return e[n]||(e[n]={observers:[],handlers:[]})}for(let n of i){let r=n.spec;if(r&&r.domEventHandlers)for(let s in r.domEventHandlers){let o=r.domEventHandlers[s];o&&t(s).handlers.push(Dl(n.value,o))}if(r&&r.domEventObservers)for(let s in r.domEventObservers){let o=r.domEventObservers[s];o&&t(s).observers.push(Dl(n.value,o))}}for(let n in rt)t(n).handlers.push(rt[n]);for(let n in Le)t(n).observers.push(Le[n]);return e}var La=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],pp="dthko",Da=[16,17,18,20,91,92,224,225],_n=6;function An(i){return Math.max(0,i)*.7+8}function mp(i,e){return Math.max(Math.abs(i.clientX-e.clientX),Math.abs(i.clientY-e.clientY))}var Cs=class{constructor(e,t,n,r){this.view=e,this.startEvent=t,this.style=n,this.mustSelect=r,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParent=Vd(e.contentDOM),this.atoms=e.state.facet(oo).map(o=>o(e));let s=e.contentDOM.ownerDocument;s.addEventListener("mousemove",this.move=this.move.bind(this)),s.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(j.allowMultipleSelections)&&$p(e,t),this.dragging=Sp(e,t)&&Ha(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){var t;if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&mp(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let n=0,r=0,s=((t=this.scrollParent)===null||t===void 0?void 0:t.getBoundingClientRect())||{left:0,top:0,right:this.view.win.innerWidth,bottom:this.view.win.innerHeight},o=qa(this.view);e.clientX-o.left<=s.left+_n?n=-An(s.left-e.clientX):e.clientX+o.right>=s.right-_n&&(n=An(e.clientX-s.right)),e.clientY-o.top<=s.top+_n?r=-An(s.top-e.clientY):e.clientY+o.bottom>=s.bottom-_n&&(r=An(e.clientY-s.bottom)),this.setScrollSpeed(n,r)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){this.scrollParent?(this.scrollParent.scrollLeft+=this.scrollSpeed.x,this.scrollParent.scrollTop+=this.scrollSpeed.y):this.view.win.scrollBy(this.scrollSpeed.x,this.scrollSpeed.y),this.dragging===!1&&this.select(this.lastEvent)}skipAtoms(e){let t=null;for(let n=0;nthis.select(this.lastEvent),20)}};function $p(i,e){let t=i.state.facet(ka);return t.length?t[0](e):z.mac?e.metaKey:e.ctrlKey}function gp(i,e){let t=i.state.facet(va);return t.length?t[0](e):z.mac?!e.altKey:!e.ctrlKey}function Sp(i,e){let{main:t}=i.state.selection;if(t.empty)return!1;let n=Hn(i.root);if(!n||n.rangeCount==0)return!0;let r=n.getRangeAt(0).getClientRects();for(let s=0;s=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function Qp(i,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,n;t!=i.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(n=N.get(t))&&n.ignoreEvent(e))return!1;return!0}var rt=Object.create(null),Le=Object.create(null),Ba=z.ie&&z.ie_version<15||z.ios&&z.webkit_version<604;function yp(i){let e=i.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{i.focus(),t.remove(),Na(i,t.value)},50)}function Na(i,e){let{state:t}=i,n,r=1,s=t.toText(e),o=s.lines==t.selection.ranges.length;if(qs!=null&&t.selection.ranges.every(l=>l.empty)&&qs==s.toString()){let l=-1;n=t.changeByRange(a=>{let h=t.doc.lineAt(a.from);if(h.from==l)return{range:a};l=h.from;let c=t.toText((o?s.line(r++).text:e)+t.lineBreak);return{changes:{from:h.from,insert:c},range:S.cursor(a.from+c.length)}})}else o?n=t.changeByRange(l=>{let a=s.line(r++);return{changes:{from:l.from,to:l.to,insert:a.text},range:S.cursor(l.from+a.length)}}):n=t.replaceSelection(s);i.dispatch(n,{userEvent:"input.paste",scrollIntoView:!0})}Le.scroll=i=>{i.inputState.lastScrollTop=i.scrollDOM.scrollTop,i.inputState.lastScrollLeft=i.scrollDOM.scrollLeft};rt.keydown=(i,e)=>(i.inputState.setSelectionOrigin("select"),e.keyCode==27&&(i.inputState.lastEscPress=Date.now()),!1);Le.touchstart=(i,e)=>{i.inputState.lastTouchTime=Date.now(),i.inputState.setSelectionOrigin("select.pointer")};Le.touchmove=i=>{i.inputState.setSelectionOrigin("select.pointer")};rt.mousedown=(i,e)=>{if(i.observer.flush(),i.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let n of i.state.facet(Ta))if(t=n(i,e),t)break;if(!t&&e.button==0&&(t=xp(i,e)),t){let n=!i.hasFocus;i.inputState.startMouseSelection(new Cs(i,e,t,n)),n&&i.observer.ignore(()=>pa(i.contentDOM));let r=i.inputState.mouseSelection;if(r)return r.start(e),r.dragging===!1}return!1};function Bl(i,e,t,n){if(n==1)return S.cursor(e,t);if(n==2)return op(i.state,e,t);{let r=le.find(i.docView,e),s=i.state.doc.lineAt(r?r.posAtEnd:e),o=r?r.posAtStart:s.from,O=r?r.posAtEnd:s.to;return Oi>=e.top&&i<=e.bottom,Nl=(i,e,t)=>Fa(e,t)&&i>=t.left&&i<=t.right;function bp(i,e,t,n){let r=le.find(i.docView,e);if(!r)return 1;let s=e-r.posAtStart;if(s==0)return 1;if(s==r.length)return-1;let o=r.coordsAt(s,-1);if(o&&Nl(t,n,o))return-1;let O=r.coordsAt(s,1);return O&&Nl(t,n,O)?1:o&&Fa(n,o)?-1:1}function Fl(i,e){let t=i.posAtCoords({x:e.clientX,y:e.clientY},!1);return{pos:t,bias:bp(i,t,e.clientX,e.clientY)}}var Pp=z.ie&&z.ie_version<=11,Hl=null,Kl=0,Jl=0;function Ha(i){if(!Pp)return i.detail;let e=Hl,t=Jl;return Hl=i,Jl=Date.now(),Kl=!e||t>Date.now()-400&&Math.abs(e.clientX-i.clientX)<2&&Math.abs(e.clientY-i.clientY)<2?(Kl+1)%3:1}function xp(i,e){let t=Fl(i,e),n=Ha(e),r=i.state.selection;return{update(s){s.docChanged&&(t.pos=s.changes.mapPos(t.pos),r=r.map(s.changes))},get(s,o,O){let l=Fl(i,s),a,h=Bl(i,l.pos,l.bias,n);if(t.pos!=l.pos&&!o){let c=Bl(i,t.pos,t.bias,n),f=Math.min(c.from,h.from),d=Math.max(c.to,h.to);h=f1&&(a=wp(r,l.pos))?a:O?r.addRange(h):S.create([h])}}}function wp(i,e){for(let t=0;t=e)return S.create(i.ranges.slice(0,t).concat(i.ranges.slice(t+1)),i.mainIndex==t?0:i.mainIndex-(i.mainIndex>t?1:0))}return null}rt.dragstart=(i,e)=>{let{selection:{main:t}}=i.state,{mouseSelection:n}=i.inputState;return n&&(n.dragging=t),e.dataTransfer&&(e.dataTransfer.setData("Text",i.state.sliceDoc(t.from,t.to)),e.dataTransfer.effectAllowed="copyMove"),!1};function ea(i,e,t,n){if(!t)return;let r=i.posAtCoords({x:e.clientX,y:e.clientY},!1),{mouseSelection:s}=i.inputState,o=n&&s&&s.dragging&&gp(i,e)?{from:s.dragging.from,to:s.dragging.to}:null,O={from:r,insert:t},l=i.state.changes(o?[o,O]:O);i.focus(),i.dispatch({changes:l,selection:{anchor:l.mapPos(r,-1),head:l.mapPos(r,1)},userEvent:o?"move.drop":"input.drop"})}rt.drop=(i,e)=>{if(!e.dataTransfer)return!1;if(i.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let n=Array(t.length),r=0,s=()=>{++r==t.length&&ea(i,e,n.filter(o=>o!=null).join(i.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(O.result)||(n[o]=O.result),s()},O.readAsText(t[o])}return!0}else{let n=e.dataTransfer.getData("Text");if(n)return ea(i,e,n,!0),!0}return!1};rt.paste=(i,e)=>{if(i.state.readOnly)return!0;i.observer.flush();let t=Ba?null:e.clipboardData;return t?(Na(i,t.getData("text/plain")||t.getData("text/uri-text")),!0):(yp(i),!1)};function kp(i,e){let t=i.dom.parentNode;if(!t)return;let n=t.appendChild(document.createElement("textarea"));n.style.cssText="position: fixed; left: -10000px; top: 10px",n.value=e,n.focus(),n.selectionEnd=e.length,n.selectionStart=0,setTimeout(()=>{n.remove(),i.focus()},50)}function vp(i){let e=[],t=[],n=!1;for(let r of i.selection.ranges)r.empty||(e.push(i.sliceDoc(r.from,r.to)),t.push(r));if(!e.length){let r=-1;for(let{from:s}of i.selection.ranges){let o=i.doc.lineAt(s);o.number>r&&(e.push(o.text),t.push({from:o.from,to:Math.min(i.doc.length,o.to+1)})),r=o.number}n=!0}return{text:e.join(i.lineBreak),ranges:t,linewise:n}}var qs=null;rt.copy=rt.cut=(i,e)=>{let{text:t,ranges:n,linewise:r}=vp(i.state);if(!t&&!r)return!1;qs=r?t:null,e.type=="cut"&&!i.state.readOnly&&i.dispatch({changes:n,scrollIntoView:!0,userEvent:"delete.cut"});let s=Ba?null:e.clipboardData;return s?(s.clearData(),s.setData("text/plain",t),!0):(kp(i,t),!1)};var Ka=we.define();function Ja(i,e){let t=[];for(let n of i.facet(Wa)){let r=n(i,e);r&&t.push(r)}return t?i.update({effects:t,annotations:Ka.of(!0)}):null}function eh(i){setTimeout(()=>{let e=i.hasFocus;if(e!=i.inputState.notifiedFocused){let t=Ja(i.state,e);t?i.dispatch(t):i.update([])}},10)}Le.focus=i=>{i.inputState.lastFocusTime=Date.now(),!i.scrollDOM.scrollTop&&(i.inputState.lastScrollTop||i.inputState.lastScrollLeft)&&(i.scrollDOM.scrollTop=i.inputState.lastScrollTop,i.scrollDOM.scrollLeft=i.inputState.lastScrollLeft),eh(i)};Le.blur=i=>{i.observer.clearSelectionRange(),eh(i)};Le.compositionstart=Le.compositionupdate=i=>{i.inputState.compositionFirstChange==null&&(i.inputState.compositionFirstChange=!0),i.inputState.composing<0&&(i.inputState.composing=0)};Le.compositionend=i=>{i.inputState.composing=-1,i.inputState.compositionEndedAt=Date.now(),i.inputState.compositionPendingKey=!0,i.inputState.compositionPendingChange=i.observer.pendingRecords().length>0,i.inputState.compositionFirstChange=null,z.chrome&&z.android?i.observer.flushSoon():i.inputState.compositionPendingChange?Promise.resolve().then(()=>i.observer.flush()):setTimeout(()=>{i.inputState.composing<0&&i.docView.hasComposition&&i.update([])},50)};Le.contextmenu=i=>{i.inputState.lastContextMenu=Date.now()};rt.beforeinput=(i,e)=>{var t;let n;if(z.chrome&&z.android&&(n=La.find(r=>r.inputType==e.inputType))&&(i.observer.delayAndroidKey(n.key,n.keyCode),n.key=="Backspace"||n.key=="Delete")){let r=((t=window.visualViewport)===null||t===void 0?void 0:t.height)||0;setTimeout(()=>{var s;(((s=window.visualViewport)===null||s===void 0?void 0:s.height)||0)>r+10&&i.hasFocus&&(i.contentDOM.blur(),i.focus())},100)}return!1};var ta=new Set;function Tp(i){ta.has(i)||(ta.add(i),i.addEventListener("copy",()=>{}),i.addEventListener("cut",()=>{}))}var ia=["pre-wrap","normal","pre-line","break-spaces"],Us=class{constructor(e){this.lineWrapping=e,this.doc=q.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30,this.heightChanged=!1}heightForGap(e,t){let n=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(n+=Math.max(0,Math.ceil((t-e-n*this.lineLength*.5)/this.lineLength))),this.lineHeight*n}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/(this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return ia.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let n=0;n-1,l=Math.round(t)!=Math.round(this.lineHeight)||this.lineWrapping!=O;if(this.lineWrapping=O,this.lineHeight=t,this.charWidth=n,this.textHeight=r,this.lineLength=s,l){this.heightSamples={};for(let a=0;a0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e,t){this.height!=t&&(Math.abs(this.height-t)>Dn&&(e.heightChanged=!0),this.height=t)}replace(e,t,n){return i.of(n)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,n,r){let s=this,o=n.doc;for(let O=r.length-1;O>=0;O--){let{fromA:l,toA:a,fromB:h,toB:c}=r[O],f=s.lineAt(l,B.ByPosNoHeight,n.setDoc(t),0,0),d=f.to>=a?f:s.lineAt(a,B.ByPosNoHeight,n,0,0);for(c+=d.to-a,a=d.to;O>0&&f.from<=r[O-1].toA;)l=r[O-1].fromA,h=r[O-1].fromB,O--,ls*2){let O=e[t-1];O.break?e.splice(--t,1,O.left,null,O.right):e.splice(--t,1,O.left,O.right),n+=1+O.break,r-=O.size}else if(s>r*2){let O=e[n];O.break?e.splice(n,1,O.left,null,O.right):e.splice(n,1,O.left,O.right),n+=2+O.break,s-=O.size}else break;else if(r=s&&o(this.blockAt(0,n,r,s))}updateHeight(e,t=0,n=!1,r){return r&&r.from<=t&&r.more&&this.setHeight(e,r.heights[r.index++]),this.outdated=!1,this}toString(){return`block(${this.length})`}},_e=class i extends or{constructor(e,t){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0}blockAt(e,t,n,r){return new tt(r,this.length,n,this.height,this.breaks)}replace(e,t,n){let r=n[0];return n.length==1&&(r instanceof i||r instanceof xt&&r.flags&4)&&Math.abs(this.length-r.length)<10?(r instanceof xt?r=new i(r.length,this.height):r.height=this.height,this.outdated||(r.outdated=!1),r):We.of(n)}updateHeight(e,t=0,n=!1,r){return r&&r.from<=t&&r.more?this.setHeight(e,r.heights[r.index++]):(n||this.outdated)&&this.setHeight(e,Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},xt=class i extends We{constructor(e){super(e,0)}heightMetrics(e,t){let n=e.doc.lineAt(t).number,r=e.doc.lineAt(t+this.length).number,s=r-n+1,o,O=0;if(e.lineWrapping){let l=Math.min(this.height,e.lineHeight*s);o=l/s,this.length>s+1&&(O=(this.height-l)/(this.length-s-1))}else o=this.height/s;return{firstLine:n,lastLine:r,perLine:o,perChar:O}}blockAt(e,t,n,r){let{firstLine:s,lastLine:o,perLine:O,perChar:l}=this.heightMetrics(t,r);if(t.lineWrapping){let a=r+Math.round(Math.max(0,Math.min(1,(e-n)/this.height))*this.length),h=t.doc.lineAt(a),c=O+h.length*l,f=Math.max(n,e-c/2);return new tt(h.from,h.length,f,c,0)}else{let a=Math.max(0,Math.min(o-s,Math.floor((e-n)/O))),{from:h,length:c}=t.doc.line(s+a);return new tt(h,c,n+O*a,O,0)}}lineAt(e,t,n,r,s){if(t==B.ByHeight)return this.blockAt(e,n,r,s);if(t==B.ByPosNoHeight){let{from:d,to:p}=n.doc.lineAt(e);return new tt(d,p-d,0,0,0)}let{firstLine:o,perLine:O,perChar:l}=this.heightMetrics(n,s),a=n.doc.lineAt(e),h=O+a.length*l,c=a.number-o,f=r+O*c+l*(a.from-s-c);return new tt(a.from,a.length,Math.max(r,Math.min(f,r+this.height-h)),h,0)}forEachLine(e,t,n,r,s,o){e=Math.max(e,s),t=Math.min(t,s+this.length);let{firstLine:O,perLine:l,perChar:a}=this.heightMetrics(n,s);for(let h=e,c=r;h<=t;){let f=n.doc.lineAt(h);if(h==e){let p=f.number-O;c+=l*p+a*(e-s-p)}let d=l+a*f.length;o(new tt(f.from,f.length,c,d,0)),c+=d,h=f.to+1}}replace(e,t,n){let r=this.length-t;if(r>0){let s=n[n.length-1];s instanceof i?n[n.length-1]=new i(s.length+r):n.push(null,new i(r-1))}if(e>0){let s=n[0];s instanceof i?n[0]=new i(e+s.length):n.unshift(new i(e-1),null)}return We.of(n)}decomposeLeft(e,t){t.push(new i(e-1),null)}decomposeRight(e,t){t.push(null,new i(this.length-e-1))}updateHeight(e,t=0,n=!1,r){let s=t+this.length;if(r&&r.from<=t+this.length&&r.more){let o=[],O=Math.max(t,r.from),l=-1;for(r.from>t&&o.push(new i(r.from-t-1).updateHeight(e,t));O<=s&&r.more;){let h=e.doc.lineAt(O).length;o.length&&o.push(null);let c=r.heights[r.index++];l==-1?l=c:Math.abs(c-l)>=Dn&&(l=-2);let f=new _e(h,c);f.outdated=!1,o.push(f),O+=h+1}O<=s&&o.push(null,new i(s-O).updateHeight(e,O));let a=We.of(o);return(l<0||Math.abs(a.height-this.height)>=Dn||Math.abs(l-this.heightMetrics(e,t).perLine)>=Dn)&&(e.heightChanged=!0),a}else(n||this.outdated)&&(this.setHeight(e,e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},As=class extends We{constructor(e,t,n){super(e.length+t+n.length,e.height+n.height,t|(e.outdated||n.outdated?2:0)),this.left=e,this.right=n,this.size=e.size+n.size}get break(){return this.flags&1}blockAt(e,t,n,r){let s=n+this.left.height;return eO))return a;let h=t==B.ByPosNoHeight?B.ByPosNoHeight:B.ByPos;return l?a.join(this.right.lineAt(O,h,n,o,O)):this.left.lineAt(O,h,n,r,s).join(a)}forEachLine(e,t,n,r,s,o){let O=r+this.left.height,l=s+this.left.length+this.break;if(this.break)e=l&&this.right.forEachLine(e,t,n,O,l,o);else{let a=this.lineAt(l,B.ByPos,n,r,s);e=e&&a.from<=t&&o(a),t>a.to&&this.right.forEachLine(a.to+1,t,n,O,l,o)}}replace(e,t,n){let r=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-r,t-r,n));let s=[];e>0&&this.decomposeLeft(e,s);let o=s.length;for(let O of n)s.push(O);if(e>0&&na(s,o-1),t=n&&t.push(null)),e>n&&this.right.decomposeLeft(e-n,t)}decomposeRight(e,t){let n=this.left.length,r=n+this.break;if(e>=r)return this.right.decomposeRight(e-r,t);e2*t.size||t.size>2*e.size?We.of(this.break?[e,null,t]:[e,t]):(this.left=e,this.right=t,this.height=e.height+t.height,this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,n=!1,r){let{left:s,right:o}=this,O=t+s.length+this.break,l=null;return r&&r.from<=t+s.length&&r.more?l=s=s.updateHeight(e,t,n,r):s.updateHeight(e,t,n),r&&r.from<=O+o.length&&r.more?l=o=o.updateHeight(e,O,n,r):o.updateHeight(e,O,n),l?this.balanced(s,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function na(i,e){let t,n;i[e]==null&&(t=i[e-1])instanceof xt&&(n=i[e+1])instanceof xt&&i.splice(e-1,3,new xt(t.length+1+n.length))}var zp=5,js=class i{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let n=Math.min(t,this.lineEnd),r=this.nodes[this.nodes.length-1];r instanceof _e?r.length+=n-this.pos:(n>this.pos||!this.isCovered)&&this.nodes.push(new _e(n-this.pos,-1)),this.writtenTo=n,t>n&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,n){if(e=zp)&&this.addLineDeco(r,s,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new _e(this.pos-e,-1)),this.writtenTo=this.pos}blankContent(e,t){let n=new xt(t-e);return this.oracle.doc.lineAt(e).to==t&&(n.flags|=4),n}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof _e)return e;let t=new _e(0,-1);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,n){let r=this.ensureLine();r.length+=n,r.collapsed+=n,r.widgetHeight=Math.max(r.widgetHeight,e),r.breaks+=t,this.writtenTo=this.pos=this.pos+n}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof _e)&&!this.isCovered?this.nodes.push(new _e(0,-1)):(this.writtenToh.clientHeight||h.scrollWidth>h.clientWidth)&&c.overflow!="visible"){let f=h.getBoundingClientRect();s=Math.max(s,f.left),o=Math.min(o,f.right),O=Math.max(O,f.top),l=a==i.parentNode?f.bottom:Math.min(l,f.bottom)}a=c.position=="absolute"||c.position=="fixed"?h.offsetParent:h.parentNode}else if(a.nodeType==11)a=a.host;else break;return{left:s-t.left,right:Math.max(s,o)-t.left,top:O-(t.top+e),bottom:Math.max(O,l)-(t.top+e)}}function Rp(i,e){let t=i.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}var Mi=class{constructor(e,t,n){this.from=e,this.to=t,this.size=n}static same(e,t){if(e.length!=t.length)return!1;for(let n=0;ntypeof n!="function"&&n.class=="cm-lineWrapping");this.heightOracle=new Us(t),this.stateDeco=e.facet(Ki).filter(n=>typeof n!="function"),this.heightMap=We.empty().applyChanges(this.stateDeco,q.empty,this.heightOracle.setDoc(e.doc),[new nt(0,0,0,e.doc.length)]),this.viewport=this.getViewport(0,null),this.updateViewportLines(),this.updateForViewport(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=M.set(this.lineGaps.map(n=>n.draw(this,!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let n=0;n<=1;n++){let r=n?t.head:t.anchor;if(!e.some(({from:s,to:o})=>r>=s&&r<=o)){let{from:s,to:o}=this.lineBlockAt(r);e.push(new ui(s,o))}}this.viewports=e.sort((n,r)=>n.from-r.from),this.scaler=this.heightMap.height<=7e6?ra:new Is(this.heightOracle,this.heightMap,this.viewports)}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(this.scaler.scale==1?e:Ai(e,this.scaler))})}update(e,t=null){this.state=e.state;let n=this.stateDeco;this.stateDeco=this.state.facet(Ki).filter(h=>typeof h!="function");let r=e.changedRanges,s=nt.extendWithRanges(r,Xp(n,this.stateDeco,e?e.changes:$e.empty(this.state.doc.length))),o=this.heightMap.height,O=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),s),this.heightMap.height!=o&&(e.flags|=2),O?(this.scrollAnchorPos=e.changes.mapPos(O.from,-1),this.scrollAnchorHeight=O.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=this.heightMap.height);let l=s.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.headl.to)||!this.viewportIsAppropriate(l))&&(l=this.getViewport(0,t));let a=!e.changes.empty||e.flags&2||l.from!=this.viewport.from||l.to!=this.viewport.to;this.viewport=l,this.updateForViewport(),a&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&e.selectionSet&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(Za)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let t=e.contentDOM,n=window.getComputedStyle(t),r=this.heightOracle,s=n.whiteSpace;this.defaultTextDirection=n.direction=="rtl"?K.RTL:K.LTR;let o=this.heightOracle.mustRefreshForWrapping(s),O=t.getBoundingClientRect(),l=o||this.mustMeasureContent||this.contentDOMHeight!=O.height;this.contentDOMHeight=O.height,this.mustMeasureContent=!1;let a=0,h=0;if(O.width&&O.height){let y=O.width/t.offsetWidth,P=O.height/t.offsetHeight;(y>.995&&y<1.005||!isFinite(y)||Math.abs(O.width-t.offsetWidth)<1)&&(y=1),(P>.995&&P<1.005||!isFinite(P)||Math.abs(O.height-t.offsetHeight)<1)&&(P=1),(this.scaleX!=y||this.scaleY!=P)&&(this.scaleX=y,this.scaleY=P,a|=8,o=l=!0)}let c=(parseInt(n.paddingTop)||0)*this.scaleY,f=(parseInt(n.paddingBottom)||0)*this.scaleY;(this.paddingTop!=c||this.paddingBottom!=f)&&(this.paddingTop=c,this.paddingBottom=f,a|=10),this.editorWidth!=e.scrollDOM.clientWidth&&(r.lineWrapping&&(l=!0),this.editorWidth=e.scrollDOM.clientWidth,a|=8);let d=e.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=d&&(this.scrollAnchorHeight=-1,this.scrollTop=d),this.scrolledToBottom=$a(e.scrollDOM);let p=(this.printing?Rp:Wp)(t,this.paddingTop),m=p.top-this.pixelViewport.top,$=p.bottom-this.pixelViewport.bottom;this.pixelViewport=p;let g=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(g!=this.inView&&(this.inView=g,g&&(l=!0)),!this.inView&&!this.scrollTarget)return 0;let Q=O.width;if((this.contentDOMWidth!=Q||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=O.width,this.editorHeight=e.scrollDOM.clientHeight,a|=8),l){let y=e.docView.measureVisibleLineHeights(this.viewport);if(r.mustRefreshForHeights(y)&&(o=!0),o||r.lineWrapping&&Math.abs(Q-this.contentDOMWidth)>r.charWidth){let{lineHeight:P,charWidth:w,textHeight:Z}=e.docView.measureTextSize();o=P>0&&r.refresh(s,P,w,Z,Q/w,y),o&&(e.docView.minWidth=0,a|=8)}m>0&&$>0?h=Math.max(m,$):m<0&&$<0&&(h=Math.min(m,$)),r.heightChanged=!1;for(let P of this.viewports){let w=P.from==this.viewport.from?y:e.docView.measureVisibleLineHeights(P);this.heightMap=(o?We.empty().applyChanges(this.stateDeco,q.empty,this.heightOracle,[new nt(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(r,0,o,new _s(P.from,w))}r.heightChanged&&(a|=2)}let k=!this.viewportIsAppropriate(this.viewport,h)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return k&&(this.viewport=this.getViewport(h,this.scrollTarget)),this.updateForViewport(),(a&2||k)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),a|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),a}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let n=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),r=this.heightMap,s=this.heightOracle,{visibleTop:o,visibleBottom:O}=this,l=new ui(r.lineAt(o-n*1e3,B.ByHeight,s,0,0).from,r.lineAt(O+(1-n)*1e3,B.ByHeight,s,0,0).to);if(t){let{head:a}=t.range;if(al.to){let h=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),c=r.lineAt(a,B.ByPos,s,0,0),f;t.y=="center"?f=(c.top+c.bottom)/2-h/2:t.y=="start"||t.y=="nearest"&&a=O+Math.max(10,Math.min(n,250)))&&r>o-2*1e3&&s>1,o=r<<1;if(this.defaultTextDirection!=K.LTR&&!n)return[];let O=[],l=(a,h,c,f)=>{if(h-aa&&$$.from>=c.from&&$.to<=c.to&&Math.abs($.from-a)$.fromg));if(!m){if(h$.from<=h&&$.to>=h)){let $=t.moveToLineBoundary(S.cursor(h),!1,!0).head;$>a&&(h=$)}m=new Mi(a,h,this.gapSize(c,a,h,f))}O.push(m)};for(let a of this.viewportLines){if(a.lengtha.from&&l(a.from,f,a,h),dt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(){let e=this.stateDeco;this.lineGaps.length&&(e=e.concat(this.lineGapDeco));let t=[];D.spans(e,this.viewport.from,this.viewport.to,{span(r,s){t.push({from:r,to:s})},point(){}},20);let n=t.length!=this.visibleRanges.length||this.visibleRanges.some((r,s)=>r.from!=t[s].from||r.to!=t[s].to);return this.visibleRanges=t,n?4:0}lineBlockAt(e){return e>=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||Ai(this.heightMap.lineAt(e,B.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return Ai(this.heightMap.lineAt(this.scaler.fromDOM(e),B.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return Ai(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},ui=class{constructor(e,t){this.from=e,this.to=t}};function Zp(i,e,t){let n=[],r=i,s=0;return D.spans(t,i,e,{span(){},point(o,O){o>r&&(n.push({from:r,to:o}),s+=o-r),r=O}},20),r=1)return e[e.length-1].to;let n=Math.floor(i*t);for(let r=0;;r++){let{from:s,to:o}=e[r],O=o-s;if(n<=O)return s+n;n-=O}}function En(i,e){let t=0;for(let{from:n,to:r}of i.ranges){if(e<=r){t+=e-n;break}t+=r-n}return t/i.total}function Yp(i,e){for(let t of i)if(e(t))return t}var ra={toDOM(i){return i},fromDOM(i){return i},scale:1},Is=class{constructor(e,t,n){let r=0,s=0,o=0;this.viewports=n.map(({from:O,to:l})=>{let a=t.lineAt(O,B.ByPos,e,0,0).top,h=t.lineAt(l,B.ByPos,e,0,0).bottom;return r+=h-a,{from:O,to:l,top:a,bottom:h,domTop:0,domBottom:0}}),this.scale=(7e6-r)/(t.height-r);for(let O of this.viewports)O.domTop=o+(O.top-s)*this.scale,o=O.domBottom=O.domTop+(O.bottom-O.top),s=O.bottom}toDOM(e){for(let t=0,n=0,r=0;;t++){let s=tAi(r,e)):i._content)}var Gn=W.define({combine:i=>i.join(" ")}),Ms=W.define({combine:i=>i.indexOf(!0)>-1}),Ls=Ue.newName(),th=Ue.newName(),ih=Ue.newName(),nh={"&light":"."+th,"&dark":"."+ih};function Ds(i,e,t){return new Ue(e,{finish(n){return/&/.test(n)?n.replace(/&\w*/,r=>{if(r=="&")return i;if(!t||!t[r])throw new RangeError(`Unsupported selector: ${r}`);return t[r]}):i+" "+n}})}var Vp=Ds("."+Ls,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#444"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",insetInlineStart:0,zIndex:200},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",borderRight:"1px solid #ddd"},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top"},".cm-highlightSpace:before":{content:"attr(data-display)",position:"absolute",pointerEvents:"none",color:"#888"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},nh),ji="\uFFFF",Bs=class{constructor(e,t){this.points=e,this.text="",this.lineSeparator=t.facet(j.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=ji}readRange(e,t){if(!e)return this;let n=e.parentNode;for(let r=e;;){this.findPointBefore(n,r);let s=this.text.length;this.readNode(r);let o=r.nextSibling;if(o==t)break;let O=N.get(r),l=N.get(o);(O&&l?O.breakAfter:(O?O.breakAfter:sa(r))||sa(o)&&(r.nodeName!="BR"||r.cmIgnore)&&this.text.length>s)&&this.lineBreak(),r=o}return this.findPointBefore(n,t),this}readTextNode(e){let t=e.nodeValue;for(let n of this.points)n.node==e&&(n.pos=this.text.length+Math.min(n.offset,t.length));for(let n=0,r=this.lineSeparator?null:/\r\n?|\n/g;;){let s=-1,o=1,O;if(this.lineSeparator?(s=t.indexOf(this.lineSeparator,n),o=this.lineSeparator.length):(O=r.exec(t))&&(s=O.index,o=O[0].length),this.append(t.slice(n,s<0?t.length:s)),s<0)break;if(this.lineBreak(),o>1)for(let l of this.points)l.node==e&&l.pos>this.text.length&&(l.pos-=o-1);n=s+o}}readNode(e){if(e.cmIgnore)return;let t=N.get(e),n=t&&t.overrideDOMText;if(n!=null){this.findPointInside(e,n.length);for(let r=n.iter();!r.next().done;)r.lineBreak?this.lineBreak():this.append(r.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let n of this.points)n.node==e&&e.childNodes[n.offset]==t&&(n.pos=this.text.length)}findPointInside(e,t){for(let n of this.points)(e.nodeType==3?n.node==e:e.contains(n.node))&&(n.pos=this.text.length+(Cp(e,n.node,n.offset)?t:0))}};function Cp(i,e,t){for(;;){if(!e||t-1)this.newSel=null;else if(t>-1&&(this.bounds=e.docView.domBoundsAround(t,n,0))){let O=s||o?[]:_p(e),l=new Bs(O,e.state);l.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=l.text,this.newSel=Ap(O,this.bounds.from)}else{let O=e.observer.selectionRange,l=s&&s.node==O.focusNode&&s.offset==O.focusOffset||!ys(e.contentDOM,O.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(O.focusNode,O.focusOffset),a=o&&o.node==O.anchorNode&&o.offset==O.anchorOffset||!ys(e.contentDOM,O.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(O.anchorNode,O.anchorOffset);this.newSel=S.single(a,l)}}};function rh(i,e){let t,{newSel:n}=e,r=i.state.selection.main,s=i.inputState.lastKeyTime>Date.now()-100?i.inputState.lastKeyCode:-1;if(e.bounds){let{from:o,to:O}=e.bounds,l=r.from,a=null;(s===8||z.android&&e.text.length=r.from&&t.to<=r.to&&(t.from!=r.from||t.to!=r.to)&&r.to-r.from-(t.to-t.from)<=4?t={from:r.from,to:r.to,insert:i.state.doc.slice(r.from,t.from).append(t.insert).append(i.state.doc.slice(t.to,r.to))}:(z.mac||z.android)&&t&&t.from==t.to&&t.from==r.head-1&&/^\. ?$/.test(t.insert.toString())&&i.contentDOM.getAttribute("autocorrect")=="off"?(n&&t.insert.length==2&&(n=S.single(n.main.anchor-1,n.main.head-1)),t={from:r.from,to:r.to,insert:q.of([" "])}):z.chrome&&t&&t.from==t.to&&t.from==r.head&&t.insert.toString()==` + `&&i.lineWrapping&&(n&&(n=S.single(n.main.anchor-1,n.main.head-1)),t={from:r.from,to:r.to,insert:q.of([" "])}),t){if(z.ios&&i.inputState.flushIOSKey()||z.android&&(t.from==r.from&&t.to==r.to&&t.insert.length==1&&t.insert.lines==2&&pi(i.contentDOM,"Enter",13)||(t.from==r.from-1&&t.to==r.to&&t.insert.length==0||s==8&&t.insert.lengthr.head)&&pi(i.contentDOM,"Backspace",8)||t.from==r.from&&t.to==r.to+1&&t.insert.length==0&&pi(i.contentDOM,"Delete",46)))return!0;let o=t.insert.toString();i.inputState.composing>=0&&i.inputState.composing++;let O,l=()=>O||(O=qp(i,t,n));return i.state.facet(Xa).some(a=>a(i,t.from,t.to,o,l))||i.dispatch(l()),!0}else if(n&&!n.main.eq(r)){let o=!1,O="select";return i.inputState.lastSelectionTime>Date.now()-50&&(i.inputState.lastSelectionOrigin=="select"&&(o=!0),O=i.inputState.lastSelectionOrigin),i.dispatch({selection:n,scrollIntoView:o,userEvent:O}),!0}else return!1}function qp(i,e,t){let n,r=i.state,s=r.selection.main;if(e.from>=s.from&&e.to<=s.to&&e.to-e.from>=(s.to-s.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&i.inputState.composing<0){let O=s.frome.to?r.sliceDoc(e.to,s.to):"";n=r.replaceSelection(i.state.toText(O+e.insert.sliceString(0,void 0,i.state.lineBreak)+l))}else{let O=r.changes(e),l=t&&t.main.to<=O.newLength?t.main:void 0;if(r.selection.ranges.length>1&&i.inputState.composing>=0&&e.to<=s.to&&e.to>=s.to-10){let a=i.state.sliceDoc(e.from,e.to),h,c=t&&Ga(i,t.main.head);if(c){let p=e.insert.length-(e.to-e.from);h={from:c.from,to:c.to-p}}else h=i.state.doc.lineAt(s.head);let f=s.to-e.to,d=s.to-s.from;n=r.changeByRange(p=>{if(p.from==s.from&&p.to==s.to)return{changes:O,range:l||p.map(O)};let m=p.to-f,$=m-a.length;if(p.to-p.from!=d||i.state.sliceDoc($,m)!=a||p.to>=h.from&&p.from<=h.to)return{range:p};let g=r.changes({from:$,to:m,insert:e.insert}),Q=p.to-s.to;return{changes:g,range:l?S.range(Math.max(0,l.anchor+Q),Math.max(0,l.head+Q)):p.map(g)}})}else n={changes:O,selection:l&&r.selection.replaceRange(l)}}let o="input.type";return(i.composing||i.inputState.compositionPendingChange&&i.inputState.compositionEndedAt>Date.now()-50)&&(i.inputState.compositionPendingChange=!1,o+=".compose",i.inputState.compositionFirstChange&&(o+=".start",i.inputState.compositionFirstChange=!1)),r.update(n,{userEvent:o,scrollIntoView:!0})}function Up(i,e,t,n){let r=Math.min(i.length,e.length),s=0;for(;s0&&O>0&&i.charCodeAt(o-1)==e.charCodeAt(O-1);)o--,O--;if(n=="end"){let l=Math.max(0,s-Math.min(o,O));t-=o+l-s}if(o=o?s-t:0;s-=l,O=s+(O-o),o=s}else if(O=O?s-t:0;s-=l,o=s+(o-O),O=s}return{from:s,toA:o,toB:O}}function _p(i){let e=[];if(i.root.activeElement!=i.contentDOM)return e;let{anchorNode:t,anchorOffset:n,focusNode:r,focusOffset:s}=i.observer.selectionRange;return t&&(e.push(new lr(t,n)),(r!=t||s!=n)&&e.push(new lr(r,s))),e}function Ap(i,e){if(i.length==0)return null;let t=i[0].pos,n=i.length==2?i[1].pos:t;return t>-1&&n>-1?S.single(t+e,n+e):null}var jp={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Ss=z.ie&&z.ie_version<=11,Fs=class{constructor(e){this.view=e,this.active=!1,this.selectionRange=new bs,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.resizeContent=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let n of t)this.queue.push(n);(z.ie&&z.ie_version<=11||z.ios&&e.composing)&&t.some(n=>n.type=="childList"&&n.removedNodes.length||n.type=="characterData"&&n.oldValue.length>n.target.nodeValue.length)?this.flushSoon():this.flush()}),Ss&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate)this.view.requestMeasure()),this.resizeContent.observe(e.contentDOM)),this.addWindowListeners(this.win=e.win),this.start(),typeof IntersectionObserver=="function"&&(this.intersection=new IntersectionObserver(t=>{this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(){this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500)}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,n)=>t!=e[n]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:n}=this,r=this.selectionRange;if(n.state.facet(ur)?n.root.activeElement!=this.dom:!Mn(n.dom,r))return;let s=r.anchorNode&&n.docView.nearest(r.anchorNode);if(s&&s.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(z.ie&&z.ie_version<=11||z.android&&z.chrome)&&!n.state.selection.main.empty&&r.focusNode&&Kn(r.focusNode,r.focusOffset,r.anchorNode,r.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=z.safari&&e.root.nodeType==11&&Rd(this.dom.ownerDocument)==this.dom&&Ep(this.view)||Hn(e.root);if(!t||this.selectionRange.eq(t))return!1;let n=Mn(this.dom,t);return n&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let s=this.delayedAndroidKey;s&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=s.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&s.force&&pi(this.dom,s.key,s.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(r)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,n=-1,r=!1;for(let s of e){let o=this.readMutation(s);o&&(o.typeOver&&(r=!0),t==-1?{from:t,to:n}=o:(t=Math.min(o.from,t),n=Math.max(o.to,n)))}return{from:t,to:n,typeOver:r}}readChange(){let{from:e,to:t,typeOver:n}=this.processRecords(),r=this.selectionChanged&&Mn(this.dom,this.selectionRange);if(e<0&&!r)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let s=new Ns(this.view,e,t,n);return this.view.docView.domChanged={newSel:s.newSel?s.newSel.main:null},s}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let n=this.view.state,r=rh(this.view,t);return this.view.state==n&&this.view.update([]),r}readMutation(e){let t=this.view.docView.nearest(e.target);if(!t||t.ignoreMutation(e))return null;if(t.markDirty(e.type=="attributes"),e.type=="attributes"&&(t.flags|=4),e.type=="childList"){let n=oa(t,e.previousSibling||e.target.previousSibling,-1),r=oa(t,e.nextSibling||e.target.nextSibling,1);return{from:n?t.posAfter(n):t.posAtStart,to:r?t.posBefore(r):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}destroy(){var e,t,n,r;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(n=this.resizeScroll)===null||n===void 0||n.disconnect(),(r=this.resizeContent)===null||r===void 0||r.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey)}};function oa(i,e,t){for(;e;){let n=N.get(e);if(n&&n.parent==i)return n;let r=e.parentNode;e=r!=i.dom?r:t>0?e.nextSibling:e.previousSibling}return null}function Ep(i){let e=null;function t(l){l.preventDefault(),l.stopImmediatePropagation(),e=l.getTargetRanges()[0]}if(i.contentDOM.addEventListener("beforeinput",t,!0),i.dom.ownerDocument.execCommand("indent"),i.contentDOM.removeEventListener("beforeinput",t,!0),!e)return null;let n=e.startContainer,r=e.startOffset,s=e.endContainer,o=e.endOffset,O=i.docView.domAtPos(i.state.selection.main.anchor);return Kn(O.node,O.offset,s,o)&&([n,r,s,o]=[s,o,n,r]),{anchorNode:n,anchorOffset:r,focusNode:s,focusOffset:o}}var v=class i{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return this.inputState.composing>0}get compositionStarted(){return this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.style.cssText="position: fixed; top: -10000px",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM);let{dispatch:t}=e;this.dispatchTransactions=e.dispatchTransactions||t&&(n=>n.forEach(r=>t(r,this)))||(n=>this.update(n)),this.dispatch=this.dispatch.bind(this),this._root=e.root||Cd(e.parent)||document,this.viewState=new Or(e.state||j.create(e)),this.plugins=this.state.facet(Ui).map(n=>new Ii(n));for(let n of this.plugins)n.update(this);this.observer=new Fs(this),this.inputState=new Vs(this),this.inputState.ensureHandlers(this.plugins),this.docView=new rr(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),e.parent&&e.parent.appendChild(this.dom)}dispatch(...e){let t=e.length==1&&e[0]instanceof se?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,n=!1,r,s=this.state;for(let f of e){if(f.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=f.state}if(this.destroyed){this.viewState.state=s;return}let o=this.hasFocus,O=0,l=null;e.some(f=>f.annotation(Ka))?(this.inputState.notifiedFocused=o,O=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,l=Ja(s,o),l||(O=1));let a=this.observer.delayedAndroidKey,h=null;if(a?(this.observer.clearDelayedAndroidKey(),h=this.observer.readChange(),(h&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(h=null)):this.observer.clear(),s.facet(j.phrases)!=this.state.facet(j.phrases))return this.setState(s);r=nr.create(this,s,e),r.flags|=O;let c=this.viewState.scrollTarget;try{this.updateState=2;for(let f of e){if(c&&(c=c.map(f.changes)),f.scrollIntoView){let{main:d}=f.state.selection;c=new ir(d.empty?d:S.cursor(d.head,d.head>d.anchor?-1:1))}for(let d of f.effects)d.is(Al)&&(c=d.value)}this.viewState.update(r,c),this.bidiCache=ar.update(this.bidiCache,r.changes),r.empty||(this.updatePlugins(r),this.inputState.update(r)),t=this.docView.update(r),this.state.facet(_i)!=this.styleModules&&this.mountStyles(),n=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(f=>f.isUserEvent("select.pointer")))}finally{this.updateState=0}if(r.startState.facet(Gn)!=r.state.facet(Gn)&&(this.viewState.mustMeasureContent=!0),(t||n||c||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),!r.empty)for(let f of this.state.facet(zs))f(r);(l||h)&&Promise.resolve().then(()=>{l&&this.state==l.startState&&this.dispatch(l),h&&!rh(this,h)&&a.force&&pi(this.contentDOM,a.key,a.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let n of this.plugins)n.destroy(this);this.viewState=new Or(e),this.plugins=e.facet(Ui).map(n=>new Ii(n)),this.pluginMap.clear();for(let n of this.plugins)n.update(this);this.docView=new rr(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Ui),n=e.state.facet(Ui);if(t!=n){let r=[];for(let s of n){let o=t.indexOf(s);if(o<0)r.push(new Ii(s));else{let O=this.plugins[o];O.mustUpdate=e,r.push(O)}}for(let s of this.plugins)s.mustUpdate!=e&&s.destroy(this);this.plugins=r,this.pluginMap.clear()}else for(let r of this.plugins)r.mustUpdate=e;for(let r=0;r-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,n=this.scrollDOM,r=n.scrollTop*this.scaleY,{scrollAnchorPos:s,scrollAnchorHeight:o}=this.viewState;Math.abs(r-this.viewState.scrollTop)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let O=0;;O++){if(o<0)if($a(n))s=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(r);s=d.from,o=d.top}this.updateState=1;let l=this.viewState.measure(this);if(!l&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(O>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let a=[];l&4||([this.measureRequests,a]=[a,this.measureRequests]);let h=a.map(d=>{try{return d.read(this)}catch(p){return ut(this.state,p),Oa}}),c=nr.create(this,this.state,[]),f=!1;c.flags|=l,t?t.flags|=l:t=c,this.updateState=2,c.empty||(this.updatePlugins(c),this.inputState.update(c),this.updateAttrs(),f=this.docView.update(c));for(let d=0;d1||p<-1){r=r+p,n.scrollTop=r/this.scaleY,o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let O of this.state.facet(zs))O(t)}get themeClasses(){return Ls+" "+(this.state.facet(Ms)?ih:th)+" "+this.state.facet(Gn)}updateAttrs(){let e=la(this,Ya,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",translate:"no",contenteditable:this.state.facet(ur)?"true":"false",class:"cm-content",style:`${z.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),la(this,so,t);let n=this.observer.ignore(()=>{let r=vs(this.contentDOM,this.contentAttrs,t),s=vs(this.dom,this.editorAttrs,e);return r||s});return this.editorAttrs=e,this.contentAttrs=t,n}showAnnouncements(e){let t=!0;for(let n of e)for(let r of n.effects)if(r.is(i.announce)){t&&(this.announceDOM.textContent=""),t=!1;let s=this.announceDOM.appendChild(document.createElement("div"));s.textContent=r.value}}mountStyles(){this.styleModules=this.state.facet(_i);let e=this.state.facet(i.cspNonce);Ue.mount(this.root,this.styleModules.concat(Vp).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;tn.spec==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,n){return gs(this,e,Ll(this,e,t,n))}moveByGroup(e,t){return gs(this,e,Ll(this,e,t,n=>fp(this,e.head,n)))}moveToLineBoundary(e,t,n=!0){return cp(this,e,t,n)}moveVertically(e,t,n){return gs(this,e,up(this,e,t,n))}domAtPos(e){return this.docView.domAtPos(e)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){return this.readMeasured(),Ma(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let n=this.docView.coordsAt(e,t);if(!n||n.left==n.right)return n;let r=this.state.doc.lineAt(e),s=this.bidiSpans(r),o=s[it.find(s,e-r.from,-1,t)];return io(n,o.dir==K.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Ra)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>Gp)return ja(e.length);let t=this.textDirectionAt(e.from),n;for(let s of this.bidiCache)if(s.from==e.from&&s.dir==t&&(s.fresh||Aa(s.isolates,n=jl(this,e.from,e.to))))return s.order;n||(n=jl(this,e.from,e.to));let r=Hd(e.text,t,n);return this.bidiCache.push(new ar(e.from,e.to,t,n,!0,r)),r}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||z.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{pa(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){return Al.of(new ir(typeof e=="number"?S.cursor(e):e,t.y,t.x,t.yMargin,t.xMargin))}static domEventHandlers(e){return Ae.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return Ae.define(()=>({}),{eventObservers:e})}static theme(e,t){let n=Ue.newName(),r=[Gn.of(n),_i.of(Ds(`.${n}`,e))];return t&&t.dark&&r.push(Ms.of(!0)),r}static baseTheme(e){return Je.lowest(_i.of(Ds("."+Ls,e,nh)))}static findFromDOM(e){var t;let n=e.querySelector(".cm-content"),r=n&&N.get(n)||N.get(e);return((t=r?.rootView)===null||t===void 0?void 0:t.view)||null}};v.styleModule=_i;v.inputHandler=Xa;v.focusChangeEffect=Wa;v.perLineTextDirection=Ra;v.exceptionSink=za;v.updateListener=zs;v.editable=ur;v.mouseSelectionStyle=Ta;v.dragMovesSelection=va;v.clickAddsSelectionRange=ka;v.decorations=Ki;v.atomicRanges=oo;v.bidiIsolatedRanges=Va;v.scrollMargins=Ca;v.darkTheme=Ms;v.cspNonce=W.define({combine:i=>i.length?i[0]:""});v.contentAttributes=so;v.editorAttributes=Ya;v.lineWrapping=v.contentAttributes.of({class:"cm-lineWrapping"});v.announce=E.define();var Gp=4096,Oa={},ar=class i{constructor(e,t,n,r,s,o){this.from=e,this.to=t,this.dir=n,this.isolates=r,this.fresh=s,this.order=o}static update(e,t){if(t.empty&&!e.some(s=>s.fresh))return e;let n=[],r=e.length?e[e.length-1].dir:K.LTR;for(let s=Math.max(0,e.length-10);s=0;r--){let s=n[r],o=typeof s=="function"?s(i):s;o&&ks(o,t)}return t}var Ip=z.mac?"mac":z.windows?"win":z.linux?"linux":"key";function Mp(i,e){let t=i.split(/-(?!$)/),n=t[t.length-1];n=="Space"&&(n=" ");let r,s,o,O;for(let l=0;ln.concat(r),[]))),t}var Pt=null,Bp=4e3;function Np(i,e=Ip){let t=Object.create(null),n=Object.create(null),r=(o,O)=>{let l=n[o];if(l==null)n[o]=O;else if(l!=O)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},s=(o,O,l,a,h)=>{var c,f;let d=t[o]||(t[o]=Object.create(null)),p=O.split(/ (?!$)/).map(g=>Mp(g,e));for(let g=1;g{let y=Pt={view:k,prefix:Q,scope:o};return setTimeout(()=>{Pt==y&&(Pt=null)},Bp),!0}]})}let m=p.join(" ");r(m,!1);let $=d[m]||(d[m]={preventDefault:!1,stopPropagation:!1,run:((f=(c=d._any)===null||c===void 0?void 0:c.run)===null||f===void 0?void 0:f.slice())||[]});l&&$.run.push(l),a&&($.preventDefault=!0),h&&($.stopPropagation=!0)};for(let o of i){let O=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let a of O){let h=t[a]||(t[a]=Object.create(null));h._any||(h._any={preventDefault:!1,stopPropagation:!1,run:[]});for(let c in h)h[c].run.push(o.any)}let l=o[e]||o.key;if(l)for(let a of O)s(a,l,o.run,o.preventDefault,o.stopPropagation),o.shift&&s(a,"Shift-"+l,o.shift,o.preventDefault,o.stopPropagation)}return t}function Fp(i,e,t,n){let r=Rl(e),s=li(r,0),o=Yi(s)==r.length&&r!=" ",O="",l=!1,a=!1,h=!1;Pt&&Pt.view==t&&Pt.scope==n&&(O=Pt.prefix+" ",Da.indexOf(e.keyCode)<0&&(a=!0,Pt=null));let c=new Set,f=$=>{if($){for(let g of $.run)if(!c.has(g)&&(c.add(g),g(t,e)))return $.stopPropagation&&(h=!0),!0;$.preventDefault&&($.stopPropagation&&(h=!0),a=!0)}return!1},d=i[n],p,m;return d&&(f(d[O+In(r,e,!o)])?l=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(z.windows&&e.ctrlKey&&e.altKey)&&(p=ft[e.keyCode])&&p!=r?(f(d[O+In(p,e,!0)])||e.shiftKey&&(m=ci[e.keyCode])!=r&&m!=p&&f(d[O+In(m,e,!1)]))&&(l=!0):o&&e.shiftKey&&f(d[O+In(r,e,!0)])&&(l=!0),!l&&f(d._any)&&(l=!0)),a&&(l=!0),l&&h&&e.stopPropagation(),l}var en=class i{constructor(e,t,n,r,s){this.className=e,this.left=t,this.top=n,this.width=r,this.height=s}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,n){if(n.empty){let r=e.coordsAtPos(n.head,n.assoc||1);if(!r)return[];let s=sh(e);return[new i(t,r.left-s.left,r.top-s.top,null,r.bottom-r.top)]}else return Hp(e,t,n)}};function sh(i){let e=i.scrollDOM.getBoundingClientRect();return{left:(i.textDirection==K.LTR?e.left:e.right-i.scrollDOM.clientWidth*i.scaleX)-i.scrollDOM.scrollLeft*i.scaleX,top:e.top-i.scrollDOM.scrollTop*i.scaleY}}function ha(i,e,t){let n=S.cursor(e);return{from:Math.max(t.from,i.moveToLineBoundary(n,!1,!0).from),to:Math.min(t.to,i.moveToLineBoundary(n,!0,!0).from),type:Qe.Text}}function Hp(i,e,t){if(t.to<=i.viewport.from||t.from>=i.viewport.to)return[];let n=Math.max(t.from,i.viewport.from),r=Math.min(t.to,i.viewport.to),s=i.textDirection==K.LTR,o=i.contentDOM,O=o.getBoundingClientRect(),l=sh(i),a=o.querySelector(".cm-line"),h=a&&window.getComputedStyle(a),c=O.left+(h?parseInt(h.paddingLeft)+Math.min(0,parseInt(h.textIndent)):0),f=O.right-(h?parseInt(h.paddingRight):0),d=Ys(i,n),p=Ys(i,r),m=d.type==Qe.Text?d:null,$=p.type==Qe.Text?p:null;if(m&&(i.lineWrapping||d.widgetLineBreaks)&&(m=ha(i,n,m)),$&&(i.lineWrapping||p.widgetLineBreaks)&&($=ha(i,r,$)),m&&$&&m.from==$.from)return Q(k(t.from,t.to,m));{let P=m?k(t.from,null,m):y(d,!1),w=$?k(null,t.to,$):y(p,!0),Z=[];return(m||d).to<($||p).from-(m&&$?1:0)||d.widgetLineBreaks>1&&P.bottom+i.defaultLineHeight/2te&&Pe.from=he)break;ie>oe&&L(Math.max(J,oe),P==null&&J<=te,Math.min(ie,he),w==null&&ie>=ae,xe.dir)}if(oe=Ke.to+1,oe>=he)break}return C.length==0&&L(te,P==null,ae,w==null,i.textDirection),{top:I,bottom:V,horizontal:C}}function y(P,w){let Z=O.top+(w?P.top:P.bottom);return{top:Z,bottom:Z,horizontal:[]}}}function Kp(i,e){return i.constructor==e.constructor&&i.eq(e)}var Hs=class{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(Bn)!=e.state.facet(Bn)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}setOrder(e){let t=0,n=e.facet(Bn);for(;t!Kp(t,this.drawn[n]))){let t=this.dom.firstChild,n=0;for(let r of e)r.update&&t&&r.constructor&&this.drawn[n].constructor&&r.update(t,this.drawn[n])?(t=t.nextSibling,n++):this.dom.insertBefore(r.draw(),t);for(;t;){let r=t.nextSibling;t.remove(),t=r}this.drawn=e}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},Bn=W.define();function oh(i){return[Ae.define(e=>new Hs(e,i)),Bn.of(i)]}var Oh=!z.ios,tn=W.define({combine(i){return bt(i,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function lh(i={}){return[tn.of(i),Jp,em,tm,Za.of(!0)]}function ah(i){return i.startState.facet(tn)!=i.state.facet(tn)}var Jp=oh({above:!0,markers(i){let{state:e}=i,t=e.facet(tn),n=[];for(let r of e.selection.ranges){let s=r==e.selection.main;if(r.empty?!s||Oh:t.drawRangeCursor){let o=s?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",O=r.empty?r:S.cursor(r.head,r.head>r.anchor?-1:1);for(let l of en.forRange(i,o,O))n.push(l)}}return n},update(i,e){i.transactions.some(n=>n.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=ah(i);return t&&ca(i.state,e),i.docChanged||i.selectionSet||t},mount(i,e){ca(e.state,i)},class:"cm-cursorLayer"});function ca(i,e){e.style.animationDuration=i.facet(tn).cursorBlinkRate+"ms"}var em=oh({above:!1,markers(i){return i.state.selection.ranges.map(e=>e.empty?[]:en.forRange(i,"cm-selectionBackground",e)).reduce((e,t)=>e.concat(t))},update(i,e){return i.docChanged||i.selectionSet||i.viewportChanged||ah(i)},class:"cm-selectionLayer"}),hh={".cm-line":{"& ::selection":{backgroundColor:"transparent !important"},"&::selection":{backgroundColor:"transparent !important"}}};Oh&&(hh[".cm-line"].caretColor="transparent !important");var tm=Je.highest(v.theme(hh)),ch=E.define({map(i,e){return i==null?null:e.mapPos(i)}}),Ei=ge.define({create(){return null},update(i,e){return i!=null&&(i=e.changes.mapPos(i)),e.effects.reduce((t,n)=>n.is(ch)?n.value:t,i)}}),im=Ae.fromClass(class{constructor(i){this.view=i,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(i){var e;let t=i.state.field(Ei);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(i.startState.field(Ei)!=t||i.docChanged||i.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:i}=this,e=i.state.field(Ei),t=e!=null&&i.coordsAtPos(e);if(!t)return null;let n=i.scrollDOM.getBoundingClientRect();return{left:t.left-n.left+i.scrollDOM.scrollLeft*i.scaleX,top:t.top-n.top+i.scrollDOM.scrollTop*i.scaleY,height:t.bottom-t.top}}drawCursor(i){if(this.cursor){let{scaleX:e,scaleY:t}=this.view;i?(this.cursor.style.left=i.left/e+"px",this.cursor.style.top=i.top/t+"px",this.cursor.style.height=i.height/t+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(i){this.view.state.field(Ei)!=i&&this.view.dispatch({effects:ch.of(i)})}},{eventObservers:{dragover(i){this.setDropPos(this.view.posAtCoords({x:i.clientX,y:i.clientY}))},dragleave(i){(i.target==this.view.contentDOM||!this.view.contentDOM.contains(i.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function fh(){return[Ei,im]}var Ib=/x/.unicode!=null?"gu":"g";function Oo(){return rm}var nm=M.line({class:"cm-activeLine"}),rm=Ae.fromClass(class{constructor(i){this.decorations=this.getDeco(i)}update(i){(i.docChanged||i.selectionSet)&&(this.decorations=this.getDeco(i.view))}getDeco(i){let e=-1,t=[];for(let n of i.state.selection.ranges){let r=i.lineBlockAt(n.head);r.from>e&&(t.push(nm.range(r.from)),e=r.from)}return M.set(t)}},{decorations:i=>i.decorations});var Ks=2e3;function sm(i,e,t){let n=Math.min(e.line,t.line),r=Math.max(e.line,t.line),s=[];if(e.off>Ks||t.off>Ks||e.col<0||t.col<0){let o=Math.min(e.off,t.off),O=Math.max(e.off,t.off);for(let l=n;l<=r;l++){let a=i.doc.line(l);a.length<=O&&s.push(S.range(a.from+o,a.to+O))}}else{let o=Math.min(e.col,t.col),O=Math.max(e.col,t.col);for(let l=n;l<=r;l++){let a=i.doc.line(l),h=Cn(a.text,o,i.tabSize,!0);if(h<0)s.push(S.cursor(a.to));else{let c=Cn(a.text,O,i.tabSize);s.push(S.range(a.from+h,a.from+c))}}}return s}function om(i,e){let t=i.coordsAtPos(i.viewport.from);return t?Math.round(Math.abs((t.left-e)/i.defaultCharacterWidth)):-1}function fa(i,e){let t=i.posAtCoords({x:e.clientX,y:e.clientY},!1),n=i.state.doc.lineAt(t),r=t-n.from,s=r>Ks?-1:r==n.length?om(i,e.clientX):ke(n.text,i.state.tabSize,t-n.from);return{line:n.number,col:s,off:r}}function Om(i,e){let t=fa(i,e),n=i.state.selection;return t?{update(r){if(r.docChanged){let s=r.changes.mapPos(r.startState.doc.line(t.line).from),o=r.state.doc.lineAt(s);t={line:o.number,col:t.col,off:Math.min(t.off,o.length)},n=n.map(r.changes)}},get(r,s,o){let O=fa(i,r);if(!O)return n;let l=sm(i.state,t,O);return l.length?o?S.create(l.concat(n.ranges)):S.create(l):n}}:null}function uh(i){let e=i?.eventFilter||(t=>t.altKey&&t.button==0);return v.mouseSelectionStyle.of((t,n)=>e(n)?Om(t,n):null)}var Mb=v.baseTheme({".cm-tooltip":{zIndex:100,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:`${7*2}px`,position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}});var De=class extends Me{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};De.prototype.elementClass="";De.prototype.toDOM=void 0;De.prototype.mapMode=Oe.TrackBefore;De.prototype.startSide=De.prototype.endSide=-1;De.prototype.point=!0;var Nn=W.define();var Fn=W.define();var Js=W.define({combine:i=>i.some(e=>e)});function lm(i){let e=[am];return i&&i.fixed===!1&&e.push(Js.of(!0)),e}var am=Ae.fromClass(class{constructor(i){this.view=i,this.prevViewport=i.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=i.state.facet(Fn).map(e=>new hr(i,e));for(let e of this.gutters)this.dom.appendChild(e.dom);this.fixed=!i.state.facet(Js),this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),i.scrollDOM.insertBefore(this.dom,i.contentDOM)}update(i){if(this.updateGutters(i)){let e=this.prevViewport,t=i.view.viewport,n=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(n<(t.to-t.from)*.8)}i.geometryChanged&&(this.dom.style.minHeight=this.view.contentHeight+"px"),this.view.state.facet(Js)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":""),this.prevViewport=i.view.viewport}syncGutters(i){let e=this.dom.nextSibling;i&&this.dom.remove();let t=D.iter(this.view.state.facet(Nn),this.view.viewport.from),n=[],r=this.gutters.map(s=>new to(s,this.view.viewport,-this.view.documentPadding.top));for(let s of this.view.viewportLineBlocks)if(n.length&&(n=[]),Array.isArray(s.type)){let o=!0;for(let O of s.type)if(O.type==Qe.Text&&o){eo(t,n,O.from);for(let l of r)l.line(this.view,O,n);o=!1}else if(O.widget)for(let l of r)l.widget(this.view,O)}else if(s.type==Qe.Text){eo(t,n,s.from);for(let o of r)o.line(this.view,s,n)}else if(s.widget)for(let o of r)o.widget(this.view,s);for(let s of r)s.finish();i&&this.view.scrollDOM.insertBefore(this.dom,e)}updateGutters(i){let e=i.startState.facet(Fn),t=i.state.facet(Fn),n=i.docChanged||i.heightChanged||i.viewportChanged||!D.eq(i.startState.facet(Nn),i.state.facet(Nn),i.view.viewport.from,i.view.viewport.to);if(e==t)for(let r of this.gutters)r.update(i)&&(n=!0);else{n=!0;let r=[];for(let s of t){let o=e.indexOf(s);o<0?r.push(new hr(this.view,s)):(this.gutters[o].update(i),r.push(this.gutters[o]))}for(let s of this.gutters)s.dom.remove(),r.indexOf(s)<0&&s.destroy();for(let s of r)this.dom.appendChild(s.dom);this.gutters=r}return n}destroy(){for(let i of this.gutters)i.destroy();this.dom.remove()}},{provide:i=>v.scrollMargins.of(e=>{let t=e.plugin(i);return!t||t.gutters.length==0||!t.fixed?null:e.textDirection==K.LTR?{left:t.dom.offsetWidth*e.scaleX}:{right:t.dom.offsetWidth*e.scaleX}})});function ua(i){return Array.isArray(i)?i:[i]}function eo(i,e,t){for(;i.value&&i.from<=t;)i.from==t&&e.push(i.value),i.next()}var to=class{constructor(e,t,n){this.gutter=e,this.height=n,this.i=0,this.cursor=D.iter(e.markers,t.from)}addElement(e,t,n){let{gutter:r}=this,s=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==r.elements.length){let O=new cr(e,o,s,n);r.elements.push(O),r.dom.appendChild(O.dom)}else r.elements[this.i].update(e,o,s,n);this.height=t.bottom,this.i++}line(e,t,n){let r=[];eo(this.cursor,r,t.from),n.length&&(r=r.concat(n));let s=this.gutter.config.lineMarker(e,t,r);s&&r.unshift(s);let o=this.gutter;r.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,r)}widget(e,t){let n=this.gutter.config.widgetMarker(e,t.widget,t);n&&this.addElement(e,t,[n])}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}},hr=class{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let n in t.domEventHandlers)this.dom.addEventListener(n,r=>{let s=r.target,o;if(s!=this.dom&&this.dom.contains(s)){for(;s.parentNode!=this.dom;)s=s.parentNode;let l=s.getBoundingClientRect();o=(l.top+l.bottom)/2}else o=r.clientY;let O=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[n](e,O,r)&&r.preventDefault()});this.markers=ua(t.markers(e)),t.initialSpacer&&(this.spacer=new cr(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=ua(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let r=this.config.updateSpacer(this.spacer.markers[0],e);r!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[r])}let n=e.view.viewport;return!D.eq(this.markers,t,n.from,n.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},cr=class{constructor(e,t,n,r){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,n,r)}update(e,t,n,r){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=n&&(this.dom.style.marginTop=(this.above=n)?n+"px":""),hm(this.markers,r)||this.setMarkers(e,r)}setMarkers(e,t){let n="cm-gutterElement",r=this.dom.firstChild;for(let s=0,o=0;;){let O=o,l=ss(O,l,a)||o(O,l,a):o}return n}})}}),Li=class extends De{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function Qs(i,e){return i.state.facet(di).formatNumber(e,i.state)}var fm=Fn.compute([di],i=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(cm)},lineMarker(e,t,n){return n.some(r=>r.toDOM)?null:new Li(Qs(e,e.state.doc.lineAt(t.from).number))},widgetMarker:()=>null,lineMarkerChange:e=>e.startState.facet(di)!=e.state.facet(di),initialSpacer(e){return new Li(Qs(e,da(e.state.doc.lines)))},updateSpacer(e,t){let n=Qs(t.view,da(t.view.state.doc.lines));return n==e.number?e:new Li(n)},domEventHandlers:i.facet(di).domEventHandlers}));function dh(i={}){return[di.of(i),lm(),fm]}function da(i){let e=9;for(;e{let e=[],t=-1;for(let n of i.selection.ranges){let r=i.doc.lineAt(n.head).from;r>t&&(t=r,e.push(um.range(r)))}return D.of(e)});function lo(){return dm}async function ph(i){if(window.isSecureContext&&navigator.clipboard){await navigator.clipboard.writeText(i);return}let e=document.createElement("textarea");e.style="position: absolute; left: -1000px; top: -1000px;",e.value=i,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e)}var pm=0,ve=class{constructor(e,t){this.from=e,this.to=t}},R=class{constructor(e={}){this.id=pm++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")})}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=F.match(e)),t=>{let n=e(t);return n===void 0?null:[this,n]}}};R.closedBy=new R({deserialize:i=>i.split(" ")});R.openedBy=new R({deserialize:i=>i.split(" ")});R.group=new R({deserialize:i=>i.split(" ")});R.contextHash=new R({perNode:!0});R.lookAhead=new R({perNode:!0});R.mounted=new R({perNode:!0});var Dt=class{constructor(e,t,n){this.tree=e,this.overlay=t,this.parser=n}static get(e){return e&&e.props&&e.props[R.mounted.id]}},mm=Object.create(null),F=class i{constructor(e,t,n,r=0){this.name=e,this.props=t,this.id=n,this.flags=r}static define(e){let t=e.props&&e.props.length?Object.create(null):mm,n=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),r=new i(e.name||"",t,e.id,n);if(e.props){for(let s of e.props)if(Array.isArray(s)||(s=s(r)),s){if(s[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[s[0].id]=s[1]}}return r}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(R.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let n in e)for(let r of n.split(" "))t[r]=e[n];return n=>{for(let r=n.prop(R.group),s=-1;s<(r?r.length:0);s++){let o=t[s<0?n.name:r[s]];if(o)return o}}}};F.none=new F("",Object.create(null),0,8);var pt=class i{constructor(e){this.types=e;for(let t=0;t0;for(let l=this.cursor(o|_.IncludeAnonymous);;){let a=!1;if(l.from<=s&&l.to>=r&&(!O&&l.type.isAnonymous||t(l)!==!1)){if(l.firstChild())continue;a=!0}for(;a&&n&&(O||!l.type.isAnonymous)&&n(l),!l.nextSibling();){if(!l.parent())return;a=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Qo(F.none,this.children,this.positions,0,this.children.length,0,this.length,(t,n,r)=>new i(this.type,t,n,r,this.propValues),e.makeTree||((t,n,r)=>new i(F.none,t,n,r)))}static build(e){return gm(e)}};Y.empty=new Y(F.none,[],[],0);var ao=class i{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new i(this.buffer,this.index)}},Bt=class i{constructor(e,t,n){this.buffer=e,this.length=t,this.set=n}get type(){return F.none}toString(){let e=[];for(let t=0;t0));l=o[l+3]);return O}slice(e,t,n){let r=this.buffer,s=new Uint16Array(t-e),o=0;for(let O=e,l=0;O=e&&te;case 1:return t<=e&&n>e;case 2:return n>e;case 4:return!0}}function nn(i,e,t,n){for(var r;i.from==i.to||(t<1?i.from>=e:i.from>e)||(t>-1?i.to<=e:i.to0?O.length:-1;e!=a;e+=t){let h=O[e],c=l[e]+o.from;if(bh(r,n,c,c+h.length)){if(h instanceof Bt){if(s&_.ExcludeBuffers)continue;let f=h.findChild(0,h.buffer.length,t,n-c,r);if(f>-1)return new Nt(new co(o,h,e,c),null,f)}else if(s&_.IncludeAnonymous||!h.type.isAnonymous||So(h)){let f;if(!(s&_.IgnoreMounts)&&(f=Dt.get(h))&&!f.overlay)return new i(f.tree,c,e,o);let d=new i(h,c,e,o);return s&_.IncludeAnonymous||!d.type.isAnonymous?d:d.nextChild(t<0?h.children.length-1:0,t,n,r)}}}if(s&_.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}enter(e,t,n=0){let r;if(!(n&_.IgnoreOverlays)&&(r=Dt.get(this._tree))&&r.overlay){let s=e-this.from;for(let{from:o,to:O}of r.overlay)if((t>0?o<=s:o=s:O>s))return new i(r.tree,r.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,n)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function $h(i,e,t,n){let r=i.cursor(),s=[];if(!r.firstChild())return s;if(t!=null){for(;!r.type.is(t);)if(!r.nextSibling())return s}for(;;){if(n!=null&&r.type.is(n))return s;if(r.type.is(e)&&s.push(r.node),!r.nextSibling())return n==null?s:[]}}function ho(i,e,t=e.length-1){for(let n=i.parent;t>=0;n=n.parent){if(!n)return!1;if(!n.type.isAnonymous){if(e[t]&&e[t]!=n.name)return!1;t--}}return!0}var co=class{constructor(e,t,n,r){this.parent=e,this.buffer=t,this.index=n,this.start=r}},Nt=class i extends mr{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,n){super(),this.context=e,this._parent=t,this.index=n,this.type=e.buffer.set.types[e.buffer.buffer[n]]}child(e,t,n){let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.context.start,n);return s<0?null:new i(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}enter(e,t,n=0){if(n&_.ExcludeBuffers)return null;let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return s<0?null:new i(this.context,this,s)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new i(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new i(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:n}=this.context,r=this.index+4,s=n.buffer[this.index+3];if(s>r){let o=n.buffer[this.index+1];e.push(n.slice(r,s,o)),t.push(0)}return new Y(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function Ph(i){if(!i.length)return null;if(i.length==1)return i[0];let e=0,t=i[0];for(let s=1;st.from||o.to=e){let O=new Re(o.tree,o.overlay[0].from+s.from,0,null);(r||(r=[n])).push(nn(O,e,t,!1))}}return r?Ph(r):n}var $i=class{get name(){return this.type.name}constructor(e,t=0){if(this.mode=t,this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,e instanceof Re)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let n=e._parent;n;n=n._parent)this.stack.unshift(n.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:n,buffer:r}=this.buffer;return this.type=t||r.set.types[r.buffer[e]],this.from=n+r.buffer[e+1],this.to=n+r.buffer[e+2],!0}yield(e){return e?e instanceof Re?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,n){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,n,this.mode));let{buffer:r}=this.buffer,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.buffer.start,n);return s<0?!1:(this.stack.push(this.index),this.yieldBuf(s))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,n=this.mode){return this.buffer?n&_.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,n))}parent(){if(!this.buffer)return this.yieldNode(this.mode&_.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&_.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,n=this.stack.length-1;if(e<0){let r=n<0?0:this.stack[n]+4;if(this.index!=r)return this.yieldBuf(t.findChild(r,this.index,-1,0,4))}else{let r=t.buffer[this.index+3];if(r<(n<0?t.buffer.length:t.buffer[this.stack[n]+3]))return this.yieldBuf(r)}return n<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,n,{buffer:r}=this;if(r){if(e>0){if(this.index-1)for(let s=t+e,o=e<0?-1:n._tree.children.length;s!=o;s+=e){let O=n._tree.children[s];if(this.mode&_.IncludeAnonymous||O instanceof Bt||!O.type.isAnonymous||So(O))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==r){if(r==this.index)return o;t=o,n=s+1;break e}r=this.stack[--s]}for(let r=n;r=0;s--){if(s<0)return ho(this.node,e,r);let o=n[t.buffer[this.stack[s]]];if(!o.isAnonymous){if(e[r]&&e[r]!=o.name)return!1;r--}}return!0}};function So(i){return i.children.some(e=>e instanceof Bt||!e.type.isAnonymous||So(e))}function gm(i){var e;let{buffer:t,nodeSet:n,maxBufferLength:r=1024,reused:s=[],minRepeatType:o=n.types.length}=i,O=Array.isArray(t)?new ao(t,t.length):t,l=n.types,a=0,h=0;function c(y,P,w,Z,I){let{id:V,start:C,end:L,size:te}=O,ae=h;for(;te<0;)if(O.next(),te==-1){let xe=s[V];w.push(xe),Z.push(C-y);return}else if(te==-3){a=V;return}else if(te==-4){h=V;return}else throw new RangeError(`Unrecognized record size: ${te}`);let Pe=l[V],oe,he,Ke=C-y;if(L-C<=r&&(he=m(O.pos-P,I))){let xe=new Uint16Array(he.size-he.skip),J=O.pos-he.size,ie=xe.length;for(;O.pos>J;)ie=$(he.start,xe,ie);oe=new Bt(xe,L-he.start,n),Ke=he.start-y}else{let xe=O.pos-te;O.next();let J=[],ie=[],At=V>=o?V:-1,ri=0,kn=L;for(;O.pos>xe;)At>=0&&O.id==At&&O.size>=0?(O.end<=kn-r&&(d(J,ie,C,ri,O.end,kn,At,ae),ri=J.length,kn=O.end),O.next()):c(C,xe,J,ie,At);if(At>=0&&ri>0&&ri-1&&ri>0){let ol=f(Pe);oe=Qo(Pe,J,ie,0,J.length,0,L-C,ol,ol)}else oe=p(Pe,J,ie,L-C,ae-L)}w.push(oe),Z.push(Ke)}function f(y){return(P,w,Z)=>{let I=0,V=P.length-1,C,L;if(V>=0&&(C=P[V])instanceof Y){if(!V&&C.type==y&&C.length==Z)return C;(L=C.prop(R.lookAhead))&&(I=w[V]+C.length+L)}return p(y,P,w,Z,I)}}function d(y,P,w,Z,I,V,C,L){let te=[],ae=[];for(;y.length>Z;)te.push(y.pop()),ae.push(P.pop()+w-I);y.push(p(n.types[C],te,ae,V-I,L-V)),P.push(I-w)}function p(y,P,w,Z,I=0,V){if(a){let C=[R.contextHash,a];V=V?[C].concat(V):[C]}if(I>25){let C=[R.lookAhead,I];V=V?[C].concat(V):[C]}return new Y(y,P,w,Z,V)}function m(y,P){let w=O.fork(),Z=0,I=0,V=0,C=w.end-r,L={size:0,start:0,skip:0};e:for(let te=w.pos-y;w.pos>te;){let ae=w.size;if(w.id==P&&ae>=0){L.size=Z,L.start=I,L.skip=V,V+=4,Z+=4,w.next();continue}let Pe=w.pos-ae;if(ae<0||Pe=o?4:0,he=w.start;for(w.next();w.pos>Pe;){if(w.size<0)if(w.size==-3)oe+=4;else break e;else w.id>=o&&(oe+=4);w.next()}I=he,Z+=ae,V+=oe}return(P<0||Z==y)&&(L.size=Z,L.start=I,L.skip=V),L.size>4?L:void 0}function $(y,P,w){let{id:Z,start:I,end:V,size:C}=O;if(O.next(),C>=0&&Z4){let te=O.pos-(C-4);for(;O.pos>te;)w=$(y,P,w)}P[--w]=L,P[--w]=V-y,P[--w]=I-y,P[--w]=Z}else C==-3?a=Z:C==-4&&(h=Z);return w}let g=[],Q=[];for(;O.pos>0;)c(i.start||0,i.bufferStart||0,g,Q,-1);let k=(e=i.length)!==null&&e!==void 0?e:g.length?Q[0]+g[0].length:0;return new Y(l[i.topID],g.reverse(),Q.reverse(),k)}var gh=new WeakMap;function pr(i,e){if(!i.isAnonymous||e instanceof Bt||e.type!=i)return 1;let t=gh.get(e);if(t==null){t=1;for(let n of e.children){if(n.type!=i||!(n instanceof Y)){t=1;break}t+=pr(i,n)}gh.set(e,t)}return t}function Qo(i,e,t,n,r,s,o,O,l){let a=0;for(let p=n;p=h)break;w+=Z}if(k==y+1){if(w>h){let Z=p[y];d(Z.children,Z.positions,0,Z.children.length,m[y]+Q);continue}c.push(p[y])}else{let Z=m[k-1]+p[k-1].length-P;c.push(Qo(i,p,m,y,k,P,Z,null,l))}f.push(P+Q-s)}}return d(e,t,n,r,0),(O||l)(c,f,o)}var gi=class{constructor(){this.map=new WeakMap}setBuffer(e,t,n){let r=this.map.get(e);r||this.map.set(e,r=new Map),r.set(t,n)}getBuffer(e,t){let n=this.map.get(e);return n&&n.get(t)}set(e,t){e instanceof Nt?this.setBuffer(e.context.buffer,e.index,t):e instanceof Re&&this.map.set(e.tree,t)}get(e){return e instanceof Nt?this.getBuffer(e.context.buffer,e.index):e instanceof Re?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}},mt=class i{constructor(e,t,n,r,s=!1,o=!1){this.from=e,this.to=t,this.tree=n,this.offset=r,this.open=(s?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],n=!1){let r=[new i(0,e.length,e,0,!1,n)];for(let s of t)s.to>e.length&&r.push(s);return r}static applyChanges(e,t,n=128){if(!t.length)return e;let r=[],s=1,o=e.length?e[0]:null;for(let O=0,l=0,a=0;;O++){let h=O=n)for(;o&&o.from=f.from||c<=f.to||a){let d=Math.max(f.from,l)-a,p=Math.min(f.to,c)-a;f=d>=p?null:new i(d,p,f.tree,f.offset+a,O>0,!!h)}if(f&&r.push(f),o.to>c)break;o=snew ve(r.from,r.to)):[new ve(0,0)]:[new ve(0,e.length)],this.createParse(e,t||[],n)}parse(e,t,n){let r=this.startParse(e,t,n);for(;;){let s=r.advance();if(s)return s}}},uo=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}};function Si(i){return(e,t,n,r)=>new $o(e,i,t,n,r)}var $r=class{constructor(e,t,n,r,s){if(this.parser=e,this.parse=t,this.overlay=n,this.target=r,this.ranges=s,!s.length||s.some(o=>o.from>=o.to))throw new RangeError("Invalid inner parse ranges given: "+JSON.stringify(s))}},po=class{constructor(e,t,n,r,s,o,O){this.parser=e,this.predicate=t,this.mounts=n,this.index=r,this.start=s,this.target=o,this.prev=O,this.depth=0,this.ranges=[]}},mo=new R({perNode:!0}),$o=class{constructor(e,t,n,r,s){this.nest=t,this.input=n,this.fragments=r,this.ranges=s,this.inner=[],this.innerDone=0,this.baseTree=null,this.stoppedAt=null,this.baseParse=e}advance(){if(this.baseParse){let n=this.baseParse.advance();if(!n)return null;if(this.baseParse=null,this.baseTree=n,this.startInner(),this.stoppedAt!=null)for(let r of this.inner)r.parse.stopAt(this.stoppedAt)}if(this.innerDone==this.inner.length){let n=this.baseTree;return this.stoppedAt!=null&&(n=new Y(n.type,n.children,n.positions,n.length,n.propValues.concat([[mo,this.stoppedAt]]))),n}let e=this.inner[this.innerDone],t=e.parse.advance();if(t){this.innerDone++;let n=Object.assign(Object.create(null),e.target.props);n[R.mounted.id]=new Dt(t,e.overlay,e.parser),e.target.props=n}return null}get parsedPos(){if(this.baseParse)return 0;let e=this.input.length;for(let t=this.innerDone;th.frag.from<=r.from&&h.frag.to>=r.to&&h.mount.overlay);if(a)for(let h of a.mount.overlay){let c=h.from+a.pos,f=h.to+a.pos;c>=r.from&&f<=r.to&&!t.ranges.some(d=>d.fromc)&&t.ranges.push({from:c,to:f})}}O=!1}else if(n&&(o=Sm(n.ranges,r.from,r.to)))O=o!=2;else if(!r.type.isAnonymous&&r.fromnew ve(c.from-r.from,c.to-r.from)):null,r.tree,h)),s.overlay?h.length&&(n={ranges:h,depth:0,prev:n}):O=!1}}else t&&(l=t.predicate(r))&&(l===!0&&(l=new ve(r.from,r.to)),l.fromnew ve(h.from-t.start,h.to-t.start)),t.target,a)),t=t.prev}n&&!--n.depth&&(n=n.prev)}}}};function Sm(i,e,t){for(let n of i){if(n.from>=t)break;if(n.to>e)return n.from<=e&&n.to>=t?2:1}return 0}function Sh(i,e,t,n,r,s){if(e=e.to);n++);let o=r.children[n],O=o.buffer;function l(a,h,c,f,d){let p=a;for(;O[p+2]+s<=e.from;)p=O[p+3];let m=[],$=[];Sh(o,a,p,m,$,f);let g=O[p+1],Q=O[p+2],k=g+s==e.from&&Q+s==e.to&&O[p]==e.type.id;return m.push(k?e.toTree():l(p+4,O[p+3],o.set.types[O[p]],g,Q-g)),$.push(g-f),Sh(o,O[p+3],h,m,$,f),new Y(c,m,$,d)}r.children[n]=l(0,O.length,F.none,0,o.length);for(let a=0;a<=t;a++)i.childAfter(e.from)}var gr=class{constructor(e,t){this.offset=t,this.done=!1,this.cursor=e.cursor(_.IncludeAnonymous|_.IgnoreMounts)}moveTo(e){let{cursor:t}=this,n=e-this.offset;for(;!this.done&&t.from=e&&t.enter(n,1,_.IgnoreOverlays|_.ExcludeBuffers)||t.next(!1)||(this.done=!0)}hasNode(e){if(this.moveTo(e.from),!this.done&&this.cursor.from+this.offset==e.from&&this.cursor.tree)for(let t=this.cursor.tree;;){if(t==e.tree)return!0;if(t.children.length&&t.positions[0]==0&&t.children[0]instanceof Y)t=t.children[0];else break}return!1}},go=class{constructor(e){var t;if(this.fragments=e,this.curTo=0,this.fragI=0,e.length){let n=this.curFrag=e[0];this.curTo=(t=n.tree.prop(mo))!==null&&t!==void 0?t:n.to,this.inner=new gr(n.tree,-n.offset)}else this.curFrag=this.inner=null}hasNode(e){for(;this.curFrag&&e.from>=this.curTo;)this.nextFrag();return this.curFrag&&this.curFrag.from<=e.from&&this.curTo>=e.to&&this.inner.hasNode(e)}nextFrag(){var e;if(this.fragI++,this.fragI==this.fragments.length)this.curFrag=this.inner=null;else{let t=this.curFrag=this.fragments[this.fragI];this.curTo=(e=t.tree.prop(mo))!==null&&e!==void 0?e:t.to,this.inner=new gr(t.tree,-t.offset)}}findMounts(e,t){var n;let r=[];if(this.inner){this.inner.cursor.moveTo(e,1);for(let s=this.inner.cursor.node;s;s=s.parent){let o=(n=s.tree)===null||n===void 0?void 0:n.prop(R.mounted);if(o&&o.parser==t)for(let O=this.fragI;O=s.to)break;l.tree==this.curFrag.tree&&r.push({frag:l,pos:s.from-l.offset,mount:o})}}}return r}};function Qh(i,e){let t=null,n=e;for(let r=1,s=0;r=O)break;l.to<=o||(t||(n=t=e.slice()),l.fromO&&t.splice(s+1,0,new ve(O,l.to))):l.to>O?t[s--]=new ve(O,l.to):t.splice(s--,1))}}return n}function ym(i,e,t,n){let r=0,s=0,o=!1,O=!1,l=-1e9,a=[];for(;;){let h=r==i.length?1e9:o?i[r].to:i[r].from,c=s==e.length?1e9:O?e[s].to:e[s].from;if(o!=O){let f=Math.max(l,t),d=Math.min(h,c,n);fnew ve(f.from+n,f.to+n)),c=ym(e,h,l,a);for(let f=0,d=l;;f++){let p=f==c.length,m=p?a:c[f].from;if(m>d&&t.push(new mt(d,m,r.tree,-o,s.from>=d||s.openStart,s.to<=m||s.openEnd)),p)break;d=c[f].to}}else t.push(new mt(l,a,r.tree,-o,s.from>=o||s.openStart,s.to<=O||s.openEnd))}return t}var bm=0,je=class i{constructor(e,t,n){this.set=e,this.base=t,this.modified=n,this.id=bm++}static define(e){if(e?.base)throw new Error("Can not derive from a modified tag");let t=new i([],null,[]);if(t.set.push(t),e)for(let n of e.set)t.set.push(n);return t}static defineModifier(){let e=new br;return t=>t.modified.indexOf(e)>-1?t:br.get(t.base||t,t.modified.concat(e).sort((n,r)=>n.id-r.id))}},Pm=0,br=class i{constructor(){this.instances=[],this.id=Pm++}static get(e,t){if(!t.length)return e;let n=t[0].instances.find(O=>O.base==e&&xm(t,O.modified));if(n)return n;let r=[],s=new je(r,e,t);for(let O of t)O.instances.push(s);let o=wm(t);for(let O of e.set)if(!O.modified.length)for(let l of o)r.push(i.get(O,l));return s}};function xm(i,e){return i.length==e.length&&i.every((t,n)=>t==e[n])}function wm(i){let e=[[]];for(let t=0;tn.length-t.length)}function ne(i){let e=Object.create(null);for(let t in i){let n=i[t];Array.isArray(n)||(n=[n]);for(let r of t.split(" "))if(r){let s=[],o=2,O=r;for(let c=0;;){if(O=="..."&&c>0&&c+3==r.length){o=1;break}let f=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(O);if(!f)throw new RangeError("Invalid path: "+r);if(s.push(f[0]=="*"?"":f[0][0]=='"'?JSON.parse(f[0]):f[0]),c+=f[0].length,c==r.length)break;let d=r[c++];if(c==r.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+r);O=r.slice(c)}let l=s.length-1,a=s[l];if(!a)throw new RangeError("Invalid path: "+r);let h=new Qi(n,o,l>0?s.slice(0,l):null);e[a]=h.sort(e[a])}}return kh.add(e)}var kh=new R,Qi=class{constructor(e,t,n,r){this.tags=e,this.mode=t,this.context=n,this.next=r}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=r;for(let O of s)for(let l of O.set){let a=t[l.id];if(a){o=o?o+" "+a:a;break}}return o},scope:n}}function km(i,e){let t=null;for(let n of i){let r=n.style(e);r&&(t=t?t+" "+r:r)}return t}function vh(i,e,t,n=0,r=i.length){let s=new bo(n,Array.isArray(e)?e:[e],t);s.highlightRange(i.cursor(),n,r,"",s.highlighters),s.flush(r)}var bo=class{constructor(e,t,n){this.at=e,this.highlighters=t,this.span=n,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,n,r,s){let{type:o,from:O,to:l}=e;if(O>=n||l<=t)return;o.isTop&&(s=this.highlighters.filter(d=>!d.scope||d.scope(o)));let a=r,h=vm(e)||Qi.empty,c=km(s,h.tags);if(c&&(a&&(a+=" "),a+=c,h.mode==1&&(r+=(r?" ":"")+c)),this.startSpan(Math.max(t,O),a),h.opaque)return;let f=e.tree&&e.tree.prop(R.mounted);if(f&&f.overlay){let d=e.node.enter(f.overlay[0].from+O,1),p=this.highlighters.filter($=>!$.scope||$.scope(f.tree.type)),m=e.firstChild();for(let $=0,g=O;;$++){let Q=$=k||!e.nextSibling())););if(!Q||k>n)break;g=Q.to+O,g>t&&(this.highlightRange(d.cursor(),Math.max(t,Q.from+O),Math.min(n,g),"",p),this.startSpan(Math.min(n,g),a))}m&&e.parent()}else if(e.firstChild()){f&&(r="");do if(!(e.to<=t)){if(e.from>=n)break;this.highlightRange(e,t,n,r,s),this.startSpan(Math.min(n,e.to),a)}while(e.nextSibling());e.parent()}}};function vm(i){let e=i.type.prop(kh);for(;e&&e.context&&!i.matchContext(e.context);)e=e.next;return e||null}var x=je.define,Sr=x(),zt=x(),xh=x(zt),wh=x(zt),Xt=x(),Qr=x(Xt),yo=x(Xt),lt=x(),Ft=x(lt),ot=x(),Ot=x(),Po=x(),rn=x(Po),yr=x(),u={comment:Sr,lineComment:x(Sr),blockComment:x(Sr),docComment:x(Sr),name:zt,variableName:x(zt),typeName:xh,tagName:x(xh),propertyName:wh,attributeName:x(wh),className:x(zt),labelName:x(zt),namespace:x(zt),macroName:x(zt),literal:Xt,string:Qr,docString:x(Qr),character:x(Qr),attributeValue:x(Qr),number:yo,integer:x(yo),float:x(yo),bool:x(Xt),regexp:x(Xt),escape:x(Xt),color:x(Xt),url:x(Xt),keyword:ot,self:x(ot),null:x(ot),atom:x(ot),unit:x(ot),modifier:x(ot),operatorKeyword:x(ot),controlKeyword:x(ot),definitionKeyword:x(ot),moduleKeyword:x(ot),operator:Ot,derefOperator:x(Ot),arithmeticOperator:x(Ot),logicOperator:x(Ot),bitwiseOperator:x(Ot),compareOperator:x(Ot),updateOperator:x(Ot),definitionOperator:x(Ot),typeOperator:x(Ot),controlOperator:x(Ot),punctuation:Po,separator:x(Po),bracket:rn,angleBracket:x(rn),squareBracket:x(rn),paren:x(rn),brace:x(rn),content:lt,heading:Ft,heading1:x(Ft),heading2:x(Ft),heading3:x(Ft),heading4:x(Ft),heading5:x(Ft),heading6:x(Ft),contentSeparator:x(lt),list:x(lt),quote:x(lt),emphasis:x(lt),strong:x(lt),link:x(lt),monospace:x(lt),strikethrough:x(lt),inserted:x(),deleted:x(),changed:x(),invalid:x(),meta:yr,documentMeta:x(yr),annotation:x(yr),processingInstruction:x(yr),definition:je.defineModifier(),constant:je.defineModifier(),function:je.defineModifier(),standard:je.defineModifier(),local:je.defineModifier(),special:je.defineModifier()},e0=xo([{tag:u.link,class:"tok-link"},{tag:u.heading,class:"tok-heading"},{tag:u.emphasis,class:"tok-emphasis"},{tag:u.strong,class:"tok-strong"},{tag:u.keyword,class:"tok-keyword"},{tag:u.atom,class:"tok-atom"},{tag:u.bool,class:"tok-bool"},{tag:u.url,class:"tok-url"},{tag:u.labelName,class:"tok-labelName"},{tag:u.inserted,class:"tok-inserted"},{tag:u.deleted,class:"tok-deleted"},{tag:u.literal,class:"tok-literal"},{tag:u.string,class:"tok-string"},{tag:u.number,class:"tok-number"},{tag:[u.regexp,u.escape,u.special(u.string)],class:"tok-string2"},{tag:u.variableName,class:"tok-variableName"},{tag:u.local(u.variableName),class:"tok-variableName tok-local"},{tag:u.definition(u.variableName),class:"tok-variableName tok-definition"},{tag:u.special(u.variableName),class:"tok-variableName2"},{tag:u.definition(u.propertyName),class:"tok-propertyName tok-definition"},{tag:u.typeName,class:"tok-typeName"},{tag:u.namespace,class:"tok-namespace"},{tag:u.className,class:"tok-className"},{tag:u.macroName,class:"tok-macroName"},{tag:u.propertyName,class:"tok-propertyName"},{tag:u.operator,class:"tok-operator"},{tag:u.comment,class:"tok-comment"},{tag:u.meta,class:"tok-meta"},{tag:u.invalid,class:"tok-invalid"},{tag:u.punctuation,class:"tok-punctuation"}]);var wo,gt=new R;function bi(i){return W.define({combine:i?e=>e.concat(i):void 0})}var kr=new R,ue=class{constructor(e,t,n=[],r=""){this.data=e,this.name=r,j.prototype.hasOwnProperty("tree")||Object.defineProperty(j.prototype,"tree",{get(){return A(this)}}),this.parser=t,this.extension=[yi.of(this),j.languageData.of((s,o,O)=>{let l=Th(s,o,O),a=l.type.prop(gt);if(!a)return[];let h=s.facet(a),c=l.type.prop(kr);if(c){let f=l.resolve(o-l.from,O);for(let d of c)if(d.test(f,s)){let p=s.facet(d.facet);return d.type=="replace"?p:p.concat(h)}}return h})].concat(n)}isActiveAt(e,t,n=-1){return Th(e,t,n).type.prop(gt)==this.data}findRegions(e){let t=e.facet(yi);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let n=[],r=(s,o)=>{if(s.prop(gt)==this.data){n.push({from:o,to:o+s.length});return}let O=s.prop(R.mounted);if(O){if(O.tree.prop(gt)==this.data){if(O.overlay)for(let l of O.overlay)n.push({from:l.from+o,to:l.to+o});else n.push({from:o,to:o+s.length});return}else if(O.overlay){let l=n.length;if(r(O.tree,O.overlay[0].from+o),n.length>l)return}}for(let l=0;ln.isTop?t:void 0)]}),e.name)}configure(e,t){return new i(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function A(i){let e=i.field(ue.state,!1);return e?e.tree:Y.empty}var zo=class{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let n=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-n,t-n)}},sn=null,Ht=class i{constructor(e,t,n=[],r,s,o,O,l){this.parser=e,this.state=t,this.fragments=n,this.tree=r,this.treeLen=s,this.viewport=o,this.skipped=O,this.scheduleOn=l,this.parse=null,this.tempSkipped=[]}static create(e,t,n){return new i(e,t,[],Y.empty,0,n,[],null)}startParse(){return this.parser.startParse(new zo(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=Y.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var n;if(typeof e=="number"){let r=Date.now()+e;e=()=>Date.now()>r}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(mt.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=sn;sn=this;try{return e()}finally{sn=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=zh(e,t.from,t.to);return e}changes(e,t){let{fragments:n,tree:r,treeLen:s,viewport:o,skipped:O}=this;if(this.takeTree(),!e.empty){let l=[];if(e.iterChangedRanges((a,h,c,f)=>l.push({fromA:a,toA:h,fromB:c,toB:f})),n=mt.applyChanges(n,l),r=Y.empty,s=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){O=[];for(let a of this.skipped){let h=e.mapPos(a.from,1),c=e.mapPos(a.to,-1);he.from&&(this.fragments=zh(this.fragments,r,s),this.skipped.splice(n--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends $t{createParse(t,n,r){let s=r[0].from,o=r[r.length-1].to;return{parsedPos:s,advance(){let l=sn;if(l){for(let a of r)l.tempSkipped.push(a);e&&(l.scheduleOn=l.scheduleOn?Promise.all([l.scheduleOn,e]):e)}return this.parsedPos=o,new Y(F.none,[],[],o-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return sn}};function zh(i,e,t){return mt.applyChanges(i,[{fromA:e,toA:t,fromB:e,toB:t}])}var on=class i{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),n=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,n)||t.takeTree(),new i(t)}static init(e){let t=Math.min(3e3,e.doc.length),n=Ht.create(e.facet(yi).parser,e,{from:0,to:t});return n.work(20,t)||n.takeTree(),new i(n)}};ue.state=ge.define({create:on.init,update(i,e){for(let t of e.effects)if(t.is(ue.setState))return t.value;return e.startState.facet(yi)!=e.state.facet(yi)?on.init(e.state):i.apply(e)}});var Zh=i=>{let e=setTimeout(()=>i(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Zh=i=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(i,{timeout:500-100})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});var ko=typeof navigator<"u"&&(!((wo=navigator.scheduling)===null||wo===void 0)&&wo.isInputPending)?()=>navigator.scheduling.isInputPending():null,Tm=Ae.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(ue.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(ue.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Zh(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEndr+1e3,l=s.context.work(()=>ko&&ko()||Date.now()>o,r+(O?0:1e5));this.chunkBudget-=Date.now()-t,(l||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:ue.setState.of(new on(s.context))})),this.chunkBudget>0&&!(l&&!O)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>ut(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),yi=W.define({combine(i){return i.length?i[0]:null},enables:i=>[ue.state,Tm,v.contentAttributes.compute([i],e=>{let t=e.facet(i);return t&&t.name?{"data-language":t.name}:{}})]}),re=class{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}},On=class i{constructor(e,t,n,r,s,o=void 0){this.name=e,this.alias=t,this.extensions=n,this.filename=r,this.loadFunc=s,this.support=o,this.loading=null}load(){return this.loading||(this.loading=this.loadFunc().then(e=>this.support=e,e=>{throw this.loading=null,e}))}static of(e){let{load:t,support:n}=e;if(!t){if(!n)throw new RangeError("Must pass either 'load' or 'support' to LanguageDescription.of");t=()=>Promise.resolve(n)}return new i(e.name,(e.alias||[]).concat(e.name).map(r=>r.toLowerCase()),e.extensions||[],e.filename,t,n)}static matchFilename(e,t){for(let r of e)if(r.filename&&r.filename.test(t))return r;let n=/\.([^.]+)$/.exec(t);if(n){for(let r of e)if(r.extensions.indexOf(n[1])>-1)return r}return null}static matchLanguageName(e,t,n=!0){t=t.toLowerCase();for(let r of e)if(r.alias.some(s=>s==t))return r;if(n)for(let r of e)for(let s of r.alias){let o=t.indexOf(s);if(o>-1&&(s.length>2||!/\w/.test(t[o-1])&&!/\w/.test(t[o+s.length])))return r}return null}},Yh=W.define(),Rt=W.define({combine:i=>{if(!i.length)return" ";let e=i[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(i[0]));return e}});function Wt(i){let e=i.facet(Rt);return e.charCodeAt(0)==9?i.tabSize*e.length:e.length}function an(i,e){let t="",n=i.tabSize,r=i.facet(Rt)[0];if(r==" "){for(;e>=n;)t+=" ",e-=n;r=" "}for(let s=0;s=e?zm(i,t,e):null}var Kt=class{constructor(e,t={}){this.state=e,this.options=t,this.unit=Wt(e)}lineAt(e,t=1){let n=this.state.doc.lineAt(e),{simulateBreak:r,simulateDoubleBreak:s}=this.options;return r!=null&&r>=n.from&&r<=n.to?s&&r==e?{text:"",from:e}:(t<0?r-1&&(s+=o-this.countColumn(n,n.search(/\S|$/))),s}countColumn(e,t=e.length){return ke(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:n,from:r}=this.lineAt(e,t),s=this.options.overrideIndentation;if(s){let o=s(r);if(o>-1)return o}return this.countColumn(n,n.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},ye=new R;function zm(i,e,t){let n=e.resolveStack(t),r=n.node.enterUnfinishedNodesBefore(t);if(r!=n.node){let s=[];for(let o=r;o!=n.node;o=o.parent)s.push(o);for(let o=s.length-1;o>=0;o--)n={node:s[o],next:n}}return Vh(n,i,t)}function Vh(i,e,t){for(let n=i;n;n=n.next){let r=Wm(n.node);if(r)return r(Xo.create(e,t,n))}return 0}function Xm(i){return i.pos==i.options.simulateBreak&&i.options.simulateDoubleBreak}function Wm(i){let e=i.type.prop(ye);if(e)return e;let t=i.firstChild,n;if(t&&(n=t.type.prop(R.closedBy))){let r=i.lastChild,s=r&&n.indexOf(r.name)>-1;return o=>Ch(o,!0,1,void 0,s&&!Xm(o)?r.from:void 0)}return i.parent==null?Rm:null}function Rm(){return 0}var Xo=class i extends Kt{constructor(e,t,n){super(e.state,e.options),this.base=e,this.pos=t,this.context=n}get node(){return this.context.node}static create(e,t,n){return new i(e,t,n)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let n=e.resolve(t.from);for(;n.parent&&n.parent.from==n.from;)n=n.parent;if(Zm(n,e))break;t=this.state.doc.lineAt(n.from)}return this.lineIndent(t.from)}continue(){return Vh(this.context.next,this.base,this.pos)}};function Zm(i,e){for(let t=e;t;t=t.parent)if(i==t)return!0;return!1}function Ym(i){let e=i.node,t=e.childAfter(e.from),n=e.lastChild;if(!t)return null;let r=i.options.simulateBreak,s=i.state.doc.lineAt(t.from),o=r==null||r<=s.from?s.to:Math.min(s.to,r);for(let O=t.to;;){let l=e.childAfter(O);if(!l||l==n)return null;if(!l.type.isSkipped)return l.fromCh(n,e,t,i)}function Ch(i,e,t,n,r){let s=i.textAfter,o=s.match(/^\s*/)[0].length,O=n&&s.slice(o,o+n.length)==n||r==i.pos+o,l=e?Ym(i):null;return l?O?i.column(l.from):i.column(l.to):i.baseIndent+(O?0:i.unit*t)}var qh=i=>i.baseIndent;function Ze({except:i,units:e=1}={}){return t=>{let n=i&&i.test(t.textAfter);return t.baseIndent+(n?0:e*t.unit)}}var Uh=W.define(),Te=new R;function Zt(i){let e=i.firstChild,t=i.lastChild;return e&&e.toO.prop(gt)==o.data:o?O=>O==o:void 0,this.style=xo(e.map(O=>({tag:O.tag,class:O.class||r(Object.assign({},O,{tag:null}))})),{all:s}).style,this.module=n?new Ue(n):null,this.themeType=t.themeType}static define(e,t){return new i(e,t||{})}},Wo=W.define(),_h=W.define({combine(i){return i.length?[i[0]]:null}});function vo(i){let e=i.facet(Wo);return e.length?e:i.facet(_h)}function qo(i,e){let t=[Vm],n;return i instanceof St&&(i.module&&t.push(v.styleModule.of(i.module)),n=i.themeType),e?.fallback?t.push(_h.of(i)):n?t.push(Wo.computeN([v.darkTheme],r=>r.facet(v.darkTheme)==(n=="dark")?[i]:[])):t.push(Wo.of(i)),t}var Ro=class{constructor(e){this.markCache=Object.create(null),this.tree=A(e.state),this.decorations=this.buildDeco(e,vo(e.state))}update(e){let t=A(e.state),n=vo(e.state),r=n!=vo(e.startState);t.length{n.add(o,O,this.markCache[l]||(this.markCache[l]=M.mark({class:l})))},r,s);return n.finish()}},Vm=Je.high(Ae.fromClass(Ro,{decorations:i=>i.decorations})),a0=St.define([{tag:u.meta,color:"#404740"},{tag:u.link,textDecoration:"underline"},{tag:u.heading,textDecoration:"underline",fontWeight:"bold"},{tag:u.emphasis,fontStyle:"italic"},{tag:u.strong,fontWeight:"bold"},{tag:u.strikethrough,textDecoration:"line-through"},{tag:u.keyword,color:"#708"},{tag:[u.atom,u.bool,u.url,u.contentSeparator,u.labelName],color:"#219"},{tag:[u.literal,u.inserted],color:"#164"},{tag:[u.string,u.deleted],color:"#a11"},{tag:[u.regexp,u.escape,u.special(u.string)],color:"#e40"},{tag:u.definition(u.variableName),color:"#00f"},{tag:u.local(u.variableName),color:"#30a"},{tag:[u.typeName,u.namespace],color:"#085"},{tag:u.className,color:"#167"},{tag:[u.special(u.variableName),u.macroName],color:"#256"},{tag:u.definition(u.propertyName),color:"#00c"},{tag:u.comment,color:"#940"},{tag:u.invalid,color:"#f00"}]),Cm=v.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),Ah=1e4,jh="()[]{}",Eh=W.define({combine(i){return bt(i,{afterCursor:!0,brackets:jh,maxScanDistance:Ah,renderMatch:_m})}}),qm=M.mark({class:"cm-matchingBracket"}),Um=M.mark({class:"cm-nonmatchingBracket"});function _m(i){let e=[],t=i.matched?qm:Um;return e.push(t.range(i.start.from,i.start.to)),i.end&&e.push(t.range(i.end.from,i.end.to)),e}var Am=ge.define({create(){return M.none},update(i,e){if(!e.docChanged&&!e.selection)return i;let t=[],n=e.state.facet(Eh);for(let r of e.state.selection.ranges){if(!r.empty)continue;let s=Be(e.state,r.head,-1,n)||r.head>0&&Be(e.state,r.head-1,1,n)||n.afterCursor&&(Be(e.state,r.head,1,n)||r.headv.decorations.from(i)}),jm=[Am,Cm];function Gh(i={}){return[Eh.of(i),jm]}var hn=new R;function Zo(i,e,t){let n=i.prop(e<0?R.openedBy:R.closedBy);if(n)return n;if(i.name.length==1){let r=t.indexOf(i.name);if(r>-1&&r%2==(e<0?1:0))return[t[r+e]]}return null}function Yo(i){let e=i.type.prop(hn);return e?e(i.node):i}function Be(i,e,t,n={}){let r=n.maxScanDistance||Ah,s=n.brackets||jh,o=A(i),O=o.resolveInner(e,t);for(let l=O;l;l=l.parent){let a=Zo(l.type,t,s);if(a&&l.from0?e>=h.from&&eh.from&&e<=h.to))return Em(i,e,t,l,h,a,s)}}return Gm(i,e,t,o,O.type,r,s)}function Em(i,e,t,n,r,s,o){let O=n.parent,l={from:r.from,to:r.to},a=0,h=O?.cursor();if(h&&(t<0?h.childBefore(n.from):h.childAfter(n.to)))do if(t<0?h.to<=n.from:h.from>=n.to){if(a==0&&s.indexOf(h.type.name)>-1&&h.from0)return null;let a={from:t<0?e-1:e,to:t>0?e+1:e},h=i.doc.iterRange(e,t>0?i.doc.length:0),c=0;for(let f=0;!h.next().done&&f<=s;){let d=h.value;t<0&&(f+=d.length);let p=e+f*t;for(let m=t>0?0:d.length-1,$=t>0?d.length:-1;m!=$;m+=t){let g=o.indexOf(d[m]);if(!(g<0||n.resolveInner(p+m,1).type!=r))if(g%2==0==t>0)c++;else{if(c==1)return{start:a,end:{from:p+m,to:p+m+1},matched:g>>1==l>>1};c--}}t>0&&(f+=d.length)}return h.done?{start:a,matched:!1}:null}function Xh(i,e,t,n=0,r=0){e==null&&(e=i.search(/[^\s\u00a0]/),e==-1&&(e=i.length));let s=r;for(let o=n;o=this.string.length}sol(){return this.pos==0}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.post}eatSpace(){let e=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e}skipToEnd(){this.pos=this.string.length}skipTo(e){let t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0}backUp(e){this.pos-=e}column(){return this.lastColumnPosn?o.toLowerCase():o,s=this.string.substr(this.pos,e.length);return r(s)==r(e)?(t!==!1&&(this.pos+=e.length),!0):null}else{let r=this.string.slice(this.pos).match(e);return r&&r.index>0?null:(r&&t!==!1&&(this.pos+=r[0].length),r)}}current(){return this.string.slice(this.start,this.pos)}};function Im(i){return{name:i.name||"",token:i.token,blankLine:i.blankLine||(()=>{}),startState:i.startState||(()=>!0),copyState:i.copyState||Mm,indent:i.indent||(()=>null),languageData:i.languageData||{},tokenTable:i.tokenTable||_o}}function Mm(i){if(typeof i!="object")return i;let e={};for(let t in i){let n=i[t];e[t]=n instanceof Array?n.slice():n}return e}var Wh=new WeakMap,xr=class i extends ue{constructor(e){let t=bi(e.languageData),n=Im(e),r,s=new class extends $t{createParse(o,O,l){return new Vo(r,o,O,l)}};super(t,s,[Yh.of((o,O)=>this.getIndent(o,O))],e.name),this.topNode=Nm(t),r=this,this.streamParser=n,this.stateAfter=new R({perNode:!0}),this.tokenTable=e.tokenTable?new wr(n.tokenTable):Bm}static define(e){return new i(e)}getIndent(e,t){let n=A(e.state),r=n.resolve(t);for(;r&&r.type!=this.topNode;)r=r.parent;if(!r)return null;let s,{overrideIndentation:o}=e.options;o&&(s=Wh.get(e.state),s!=null&&s1e4)return null;for(;l=n&&t+e.length<=r&&e.prop(i.stateAfter);if(s)return{state:i.streamParser.copyState(s),pos:t+e.length};for(let o=e.children.length-1;o>=0;o--){let O=e.children[o],l=t+e.positions[o],a=O instanceof Y&&l=e.length)return e;!r&&e.type==i.topNode&&(r=!0);for(let s=e.children.length-1;s>=0;s--){let o=e.positions[s],O=e.children[s],l;if(ot&&Uo(i,r.tree,0-r.offset,t,o),l;if(O&&(l=Ih(i,r.tree,t+r.offset,O.pos+r.offset,!1)))return{state:O.state,tree:l}}return{state:i.streamParser.startState(n?Wt(n):4),tree:Y.empty}}var Vo=class{constructor(e,t,n,r){this.lang=e,this.input=t,this.fragments=n,this.ranges=r,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=r[r.length-1].to;let s=Ht.get(),o=r[0].from,{state:O,tree:l}=Lm(e,n,o,s?.state);this.state=O,this.parsedPos=this.chunkStart=o+l.length;for(let a=0;a=t?this.finish():e&&this.parsedPos>=e.viewport.to?(e.skipUntilInView(this.parsedPos,t),this.finish()):null}stopAt(e){this.stoppedAt=e}lineAfter(e){let t=this.input.chunk(e);if(this.input.lineChunks)t==` `&&(t="");else{let n=t.indexOf(` -`);n>-1&&(t=t.slice(0,n))}return e+t.length<=this.to?t:t.slice(0,this.to-e)}nextLine(){let e=this.parsedPos,t=this.lineAfter(e),n=e+t.length;for(let r=this.rangeIndex;;){let s=this.ranges[r].to;if(s>=n||(t=t.slice(0,s-(n-t.length)),r++,r==this.ranges.length))break;let O=this.ranges[r].from,o=this.lineAfter(O);t+=o,n=O+o.length}return{line:t,end:n}}skipGapsTo(e,t,n){for(;;){let r=this.ranges[this.rangeIndex].to,s=e+t;if(n>0?r>s:r>=s)break;let O=this.ranges[++this.rangeIndex].from;t+=O-r}return t}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){s=this.skipGapsTo(t,s,1),t+=s;let O=this.chunk.length;s=this.skipGapsTo(n,s,-1),n+=s,r+=this.chunk.length-O}return this.chunk.push(e,t,n,r),s}parseLine(e){let{line:t,end:n}=this.nextLine(),r=0,{streamParser:s}=this.lang,O=new yr(t,e?e.state.tabSize:4,e?Xt(e.state):2);if(O.eol())s.blankLine(this.state,O.indentUnit);else for(;!O.eol();){let o=Uh(s.token,O,this.state);if(o&&(r=this.emitToken(this.lang.tokenTable.resolve(o),this.parsedPos+O.start,this.parsedPos+O.pos,4,r)),O.start>1e4)break}this.parsedPos=n,this.moveRangeIndex(),this.parsedPose.start)return r}throw new Error("Stream parser failed to advance stream.")}var qO=Object.create(null),rn=[F.none],k$=new ct(rn),xh=[],Yh=Object.create(null);for(let[i,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Yh[i]=_h(qO,e);var br=class{constructor(e){this.extra=e,this.table=Object.assign(Object.create(null),Yh)}resolve(e){return e?this.table[e]||(this.table[e]=_h(this.extra,e)):0}},v$=new br(qO);function wO(i,e){xh.indexOf(i)>-1||(xh.push(i),console.warn(e))}function _h(i,e){let t=null;for(let s of e.split(".")){let O=i[s]||u[s];O?typeof O=="function"?t?t=O(t):wO(s,`Modifier ${s} used at start of tag`):t?wO(s,`Tag ${s} used as modifier`):t=O:wO(s,`Unknown highlighting tag ${s}`)}if(!t)return 0;let n=e.replace(/ /g,"_"),r=F.define({id:rn.length,name:n,props:[se({[n]:t})]});return rn.push(r),r.id}function T$(i){let e=F.define({id:rn.length,name:"Document",props:[dt.add(()=>i)],top:!0});return rn.push(e),e}var X$=i=>{let{state:e}=i,t=e.doc.lineAt(e.selection.main.from),n=EO(i.state,t.from);return n.line?z$(i):n.block?R$(i):!1};function GO(i,e){return({state:t,dispatch:n})=>{if(t.readOnly)return!1;let r=i(e,t);return r?(n(t.update(r)),!0):!1}}var z$=GO(C$,0);var W$=GO(Dh,0);var R$=GO((i,e)=>Dh(i,e,Z$(e)),0);function EO(i,e){let t=i.languageDataAt("commentTokens",e);return t.length?t[0]:{}}var on=50;function V$(i,{open:e,close:t},n,r){let s=i.sliceDoc(n-on,n),O=i.sliceDoc(r,r+on),o=/\s*$/.exec(s)[0].length,l=/^\s*/.exec(O)[0].length,a=s.length-o;if(s.slice(a-e.length,a)==e&&O.slice(l,l+t.length)==t)return{open:{pos:n-o,margin:o&&1},close:{pos:r+l,margin:l&&1}};let h,c;r-n<=2*on?h=c=i.sliceDoc(n,r):(h=i.sliceDoc(n,n+on),c=i.sliceDoc(r-on,r));let f=/^\s*/.exec(h)[0].length,d=/\s*$/.exec(c)[0].length,p=c.length-d-t.length;return h.slice(f,f+e.length)==e&&c.slice(p,p+t.length)==t?{open:{pos:n+f+e.length,margin:/\s/.test(h.charAt(f+e.length))?1:0},close:{pos:r-d-t.length,margin:/\s/.test(c.charAt(p-1))?1:0}}:null}function Z$(i){let e=[];for(let t of i.selection.ranges){let n=i.doc.lineAt(t.from),r=t.to<=n.to?n:i.doc.lineAt(t.to),s=e.length-1;s>=0&&e[s].to>n.from?e[s].to=r.to:e.push({from:n.from+/^\s*/.exec(n.text)[0].length,to:r.to})}return e}function Dh(i,e,t=e.selection.ranges){let n=t.map(s=>EO(e,s.from).block);if(!n.every(s=>s))return null;let r=t.map((s,O)=>V$(e,n[O],s.from,s.to));if(i!=2&&!r.every(s=>s))return{changes:e.changes(t.map((s,O)=>r[O]?[]:[{from:s.from,insert:n[O].open+" "},{from:s.to,insert:" "+n[O].close}]))};if(i!=1&&r.some(s=>s)){let s=[];for(let O=0,o;Or&&(s==O||O>c.from)){r=c.from;let f=/^\s*/.exec(c.text)[0].length,d=f==c.length,p=c.text.slice(f,f+a.length)==a?f:-1;fs.comment<0&&(!s.empty||s.single))){let s=[];for(let{line:o,token:l,indent:a,empty:h,single:c}of n)(c||!h)&&s.push({from:o.from+a,insert:l+" "});let O=e.changes(s);return{changes:O,selection:e.selection.map(O,1)}}else if(i!=1&&n.some(s=>s.comment>=0)){let s=[];for(let{line:O,comment:o,token:l}of n)if(o>=0){let a=O.from+o,h=a+l.length;O.text[h-O.from]==" "&&h++,s.push({from:a,to:h})}return{changes:s}}return null}var YO=be.define(),q$=be.define(),U$=W.define(),Lh=W.define({combine(i){return Qt(i,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(n,r)=>e(n,r)||t(n,r)})}});function Y$(i){let e=0;return i.iterChangedRanges((t,n)=>e=n),e}var Nh=Qe.define({create(){return Ht.empty},update(i,e){let t=e.state.facet(Lh),n=e.annotation(YO);if(n){let l=e.docChanged?Q.single(Y$(e.changes)):void 0,a=Be.fromTransaction(e,l),h=n.side,c=h==0?i.undone:i.done;return a?c=vr(c,c.length,t.minDepth,a):c=Kh(c,e.startState.selection),new Ht(h==0?n.rest:c,h==0?c:n.rest)}let r=e.annotation(q$);if((r=="full"||r=="before")&&(i=i.isolate()),e.annotation(oe.addToHistory)===!1)return e.changes.empty?i:i.addMapping(e.changes.desc);let s=Be.fromTransaction(e),O=e.annotation(oe.time),o=e.annotation(oe.userEvent);return s?i=i.addChanges(s,O,o,t,e):e.selection&&(i=i.addSelection(e.startState.selection,O,o,t.newGroupDelay)),(r=="full"||r=="after")&&(i=i.isolate()),i},toJSON(i){return{done:i.done.map(e=>e.toJSON()),undone:i.undone.map(e=>e.toJSON())}},fromJSON(i){return new Ht(i.done.map(Be.fromJSON),i.undone.map(Be.fromJSON))}});function Hh(i={}){return[Nh,Lh.of(i),v.domEventHandlers({beforeinput(e,t){let n=e.inputType=="historyUndo"?Fh:e.inputType=="historyRedo"?_O:null;return n?(e.preventDefault(),n(t)):!1}})]}function Tr(i,e){return function({state:t,dispatch:n}){if(!e&&t.readOnly)return!1;let r=t.field(Nh,!1);if(!r)return!1;let s=r.pop(i,t,e);return s?(n(s),!0):!1}}var Fh=Tr(0,!1),_O=Tr(1,!1),_$=Tr(0,!0),A$=Tr(1,!0);var Be=class i{constructor(e,t,n,r,s){this.changes=e,this.effects=t,this.mapped=n,this.startSelection=r,this.selectionsAfter=s}setSelAfter(e){return new i(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,n;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(n=this.startSelection)===null||n===void 0?void 0:n.toJSON(),selectionsAfter:this.selectionsAfter.map(r=>r.toJSON())}}static fromJSON(e){return new i(e.changes&&ge.fromJSON(e.changes),[],e.mapped&<.fromJSON(e.mapped),e.startSelection&&Q.fromJSON(e.startSelection),e.selectionsAfter.map(Q.fromJSON))}static fromTransaction(e,t){let n=Ye;for(let r of e.startState.facet(U$)){let s=r(e);s.length&&(n=n.concat(s))}return!n.length&&e.changes.empty?null:new i(e.changes.invert(e.startState.doc),n,void 0,t||e.startState.selection,Ye)}static selection(e){return new i(void 0,Ye,void 0,void 0,e)}};function vr(i,e,t,n){let r=e+1>t+20?e-t-1:0,s=i.slice(r,e);return s.push(n),s}function j$(i,e){let t=[],n=!1;return i.iterChangedRanges((r,s)=>t.push(r,s)),e.iterChangedRanges((r,s,O,o)=>{for(let l=0;l=a&&O<=h&&(n=!0)}}),n}function G$(i,e){return i.ranges.length==e.ranges.length&&i.ranges.filter((t,n)=>t.empty!=e.ranges[n].empty).length===0}function Jh(i,e){return i.length?e.length?i.concat(e):i:e}var Ye=[],E$=200;function Kh(i,e){if(i.length){let t=i[i.length-1],n=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-E$));return n.length&&n[n.length-1].eq(e)?i:(n.push(e),vr(i,i.length-1,1e9,t.setSelAfter(n)))}else return[Be.selection([e])]}function M$(i){let e=i[i.length-1],t=i.slice();return t[i.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function UO(i,e){if(!i.length)return i;let t=i.length,n=Ye;for(;t;){let r=I$(i[t-1],e,n);if(r.changes&&!r.changes.empty||r.effects.length){let s=i.slice(0,t);return s[t-1]=r,s}else e=r.mapped,t--,n=r.selectionsAfter}return n.length?[Be.selection(n)]:Ye}function I$(i,e,t){let n=Jh(i.selectionsAfter.length?i.selectionsAfter.map(o=>o.map(e)):Ye,t);if(!i.changes)return Be.selection(n);let r=i.changes.map(e),s=e.mapDesc(i.changes,!0),O=i.mapped?i.mapped.composeDesc(s):s;return new Be(r,j.mapEffects(i.effects,e),O,i.startSelection.map(s),n)}var B$=/^(input\.type|delete)($|\.)/,Ht=class i{constructor(e,t,n=0,r=void 0){this.done=e,this.undone=t,this.prevTime=n,this.prevUserEvent=r}isolate(){return this.prevTime?new i(this.done,this.undone):this}addChanges(e,t,n,r,s){let O=this.done,o=O[O.length-1];return o&&o.changes&&!o.changes.empty&&e.changes&&(!n||B$.test(n))&&(!o.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?i.moveByChar(t,e):Xr(t,e))}function $e(i){return i.textDirectionAt(i.state.selection.main.head)==K.LTR}var ic=i=>tc(i,!$e(i)),nc=i=>tc(i,$e(i));function rc(i,e){return De(i,t=>t.empty?i.moveByGroup(t,e):Xr(t,e))}var D$=i=>rc(i,!$e(i)),L$=i=>rc(i,$e(i));function N$(i,e,t){if(e.type.prop(t))return!0;let n=e.to-e.from;return n&&(n>2||/[^\s,.;:]/.test(i.sliceDoc(e.from,e.to)))||e.firstChild}function zr(i,e,t){let n=_(i).resolveInner(e.head),r=t?R.closedBy:R.openedBy;for(let l=e.head;;){let a=t?n.childAfter(l):n.childBefore(l);if(!a)break;N$(i,a,r)?n=a:l=t?a.to:a.from}let s=n.type.prop(r),O,o;return s&&(O=t?Ie(i,n.from,1):Ie(i,n.to,-1))&&O.matched?o=t?O.end.to:O.end.from:o=t?n.to:n.from,Q.cursor(o,t?-1:1)}var H$=i=>De(i,e=>zr(i.state,e,!$e(i))),F$=i=>De(i,e=>zr(i.state,e,$e(i)));function sc(i,e){return De(i,t=>{if(!t.empty)return Xr(t,e);let n=i.moveVertically(t,e);return n.head!=t.head?n:i.moveToLineBoundary(t,e)})}var Oc=i=>sc(i,!1),oc=i=>sc(i,!0);function lc(i){let e=i.scrollDOM.clientHeightO.empty?i.moveVertically(O,e,t.height):Xr(O,e));if(r.eq(n.selection))return!1;let s;if(t.selfScroll){let O=i.coordsAtPos(n.selection.main.head),o=i.scrollDOM.getBoundingClientRect(),l=o.top+t.marginTop,a=o.bottom-t.marginBottom;O&&O.top>l&&O.bottomac(i,!1),AO=i=>ac(i,!0);function Wt(i,e,t){let n=i.lineBlockAt(e.head),r=i.moveToLineBoundary(e,t);if(r.head==e.head&&r.head!=(t?n.to:n.from)&&(r=i.moveToLineBoundary(e,t,!1)),!t&&r.head==n.from&&n.length){let s=/^\s*/.exec(i.state.sliceDoc(n.from,Math.min(n.from+100,n.to)))[0].length;s&&e.head!=n.from+s&&(r=Q.cursor(n.from+s))}return r}var J$=i=>De(i,e=>Wt(i,e,!0)),K$=i=>De(i,e=>Wt(i,e,!1)),em=i=>De(i,e=>Wt(i,e,!$e(i))),tm=i=>De(i,e=>Wt(i,e,$e(i))),im=i=>De(i,e=>Q.cursor(i.lineBlockAt(e.head).from,1)),nm=i=>De(i,e=>Q.cursor(i.lineBlockAt(e.head).to,-1));function rm(i,e,t){let n=!1,r=yi(i.selection,s=>{let O=Ie(i,s.head,-1)||Ie(i,s.head,1)||s.head>0&&Ie(i,s.head-1,1)||s.headrm(i,e,!1);function _e(i,e){let t=yi(i.state.selection,n=>{let r=e(n);return Q.range(n.anchor,r.head,r.goalColumn,r.bidiLevel||void 0)});return t.eq(i.state.selection)?!1:(i.dispatch(Ot(i.state,t)),!0)}function hc(i,e){return _e(i,t=>i.moveByChar(t,e))}var cc=i=>hc(i,!$e(i)),fc=i=>hc(i,$e(i));function uc(i,e){return _e(i,t=>i.moveByGroup(t,e))}var Om=i=>uc(i,!$e(i)),om=i=>uc(i,$e(i));var lm=i=>_e(i,e=>zr(i.state,e,!$e(i))),am=i=>_e(i,e=>zr(i.state,e,$e(i)));function dc(i,e){return _e(i,t=>i.moveVertically(t,e))}var pc=i=>dc(i,!1),$c=i=>dc(i,!0);function mc(i,e){return _e(i,t=>i.moveVertically(t,e,lc(i).height))}var jh=i=>mc(i,!1),Gh=i=>mc(i,!0),hm=i=>_e(i,e=>Wt(i,e,!0)),cm=i=>_e(i,e=>Wt(i,e,!1)),fm=i=>_e(i,e=>Wt(i,e,!$e(i))),um=i=>_e(i,e=>Wt(i,e,$e(i))),dm=i=>_e(i,e=>Q.cursor(i.lineBlockAt(e.head).from)),pm=i=>_e(i,e=>Q.cursor(i.lineBlockAt(e.head).to)),Eh=({state:i,dispatch:e})=>(e(Ot(i,{anchor:0})),!0),Mh=({state:i,dispatch:e})=>(e(Ot(i,{anchor:i.doc.length})),!0),Ih=({state:i,dispatch:e})=>(e(Ot(i,{anchor:i.selection.main.anchor,head:0})),!0),Bh=({state:i,dispatch:e})=>(e(Ot(i,{anchor:i.selection.main.anchor,head:i.doc.length})),!0),$m=({state:i,dispatch:e})=>(e(i.update({selection:{anchor:0,head:i.doc.length},userEvent:"select"})),!0),mm=({state:i,dispatch:e})=>{let t=Rr(i).map(({from:n,to:r})=>Q.range(n,Math.min(r+1,i.doc.length)));return e(i.update({selection:Q.create(t),userEvent:"select"})),!0},gm=({state:i,dispatch:e})=>{let t=yi(i.selection,n=>{var r;let s=_(i).resolveInner(n.head,1);for(;!(s.from=n.to||s.to>n.to&&s.from<=n.from||!(!((r=s.parent)===null||r===void 0)&&r.parent));)s=s.parent;return Q.range(s.to,s.from)});return e(Ot(i,t)),!0},Qm=({state:i,dispatch:e})=>{let t=i.selection,n=null;return t.ranges.length>1?n=Q.create([t.main]):t.main.empty||(n=Q.create([Q.cursor(t.main.head)])),n?(e(Ot(i,n)),!0):!1};function Wr(i,e){if(i.state.readOnly)return!1;let t="delete.selection",{state:n}=i,r=n.changeByRange(s=>{let{from:O,to:o}=s;if(O==o){let l=e(O);lO&&(t="delete.forward",l=kr(i,l,!0)),O=Math.min(O,l),o=Math.max(o,l)}else O=kr(i,O,!1),o=kr(i,o,!0);return O==o?{range:s}:{changes:{from:O,to:o},range:Q.cursor(O)}});return r.changes.empty?!1:(i.dispatch(n.update(r,{scrollIntoView:!0,userEvent:t,effects:t=="delete.selection"?v.announce.of(n.phrase("Selection deleted")):void 0})),!0)}function kr(i,e,t){if(i instanceof v)for(let n of i.state.facet(v.atomicRanges).map(r=>r(i)))n.between(e,e,(r,s)=>{re&&(e=t?s:r)});return e}var gc=(i,e)=>Wr(i,t=>{let{state:n}=i,r=n.doc.lineAt(t),s,O;if(!e&&t>r.from&&tgc(i,!1),Qc=i=>gc(i,!0),Sc=(i,e)=>Wr(i,t=>{let n=t,{state:r}=i,s=r.doc.lineAt(n),O=r.charCategorizer(n);for(let o=null;;){if(n==(e?s.to:s.from)){n==t&&s.number!=(e?r.doc.lines:1)&&(n+=e?1:-1);break}let l=ue(s.text,n-s.from,e)+s.from,a=s.text.slice(Math.min(n,l)-s.from,Math.max(n,l)-s.from),h=O(a);if(o!=null&&h!=o)break;(a!=" "||n!=t)&&(o=h),n=l}return n}),yc=i=>Sc(i,!1),Sm=i=>Sc(i,!0),Pc=i=>Wr(i,e=>{let t=i.lineBlockAt(e).to;return eWr(i,e=>{let t=i.lineBlockAt(e).from;return e>t?t:Math.max(0,e-1)});var Pm=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=i.changeByRange(n=>({changes:{from:n.from,to:n.to,insert:U.of(["",""])},range:Q.cursor(n.from)}));return e(i.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},bm=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=i.changeByRange(n=>{if(!n.empty||n.from==0||n.from==i.doc.length)return{range:n};let r=n.from,s=i.doc.lineAt(r),O=r==s.from?r-1:ue(s.text,r-s.from,!1)+s.from,o=r==s.to?r+1:ue(s.text,r-s.from,!0)+s.from;return{changes:{from:O,to:o,insert:i.doc.slice(r,o).append(i.doc.slice(O,r))},range:Q.cursor(o)}});return t.changes.empty?!1:(e(i.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function Rr(i){let e=[],t=-1;for(let n of i.selection.ranges){let r=i.doc.lineAt(n.from),s=i.doc.lineAt(n.to);if(!n.empty&&n.to==s.from&&(s=i.doc.lineAt(n.to-1)),t>=r.number){let O=e[e.length-1];O.to=s.to,O.ranges.push(n)}else e.push({from:r.from,to:s.to,ranges:[n]});t=s.number+1}return e}function bc(i,e,t){if(i.readOnly)return!1;let n=[],r=[];for(let s of Rr(i)){if(t?s.to==i.doc.length:s.from==0)continue;let O=i.doc.lineAt(t?s.to+1:s.from-1),o=O.length+1;if(t){n.push({from:s.to,to:O.to},{from:s.from,insert:O.text+i.lineBreak});for(let l of s.ranges)r.push(Q.range(Math.min(i.doc.length,l.anchor+o),Math.min(i.doc.length,l.head+o)))}else{n.push({from:O.from,to:s.from},{from:s.to,insert:i.lineBreak+O.text});for(let l of s.ranges)r.push(Q.range(l.anchor-o,l.head-o))}}return n.length?(e(i.update({changes:n,scrollIntoView:!0,selection:Q.create(r,i.selection.mainIndex),userEvent:"move.line"})),!0):!1}var xm=({state:i,dispatch:e})=>bc(i,e,!1),wm=({state:i,dispatch:e})=>bc(i,e,!0);function xc(i,e,t){if(i.readOnly)return!1;let n=[];for(let r of Rr(i))t?n.push({from:r.from,insert:i.doc.slice(r.from,r.to)+i.lineBreak}):n.push({from:r.to,insert:i.lineBreak+i.doc.slice(r.from,r.to)});return e(i.update({changes:n,scrollIntoView:!0,userEvent:"input.copyline"})),!0}var km=({state:i,dispatch:e})=>xc(i,e,!1),vm=({state:i,dispatch:e})=>xc(i,e,!0),Tm=i=>{if(i.state.readOnly)return!1;let{state:e}=i,t=e.changes(Rr(e).map(({from:r,to:s})=>(r>0?r--:si.moveVertically(r,!0)).map(t);return i.dispatch({changes:t,selection:n,scrollIntoView:!0,userEvent:"delete.line"}),!0};function Xm(i,e){if(/\(\)|\[\]|\{\}/.test(i.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=_(i).resolveInner(e),n=t.childBefore(e),r=t.childAfter(e),s;return n&&r&&n.to<=e&&r.from>=e&&(s=n.type.prop(R.closedBy))&&s.indexOf(r.name)>-1&&i.doc.lineAt(n.to).from==i.doc.lineAt(r.from).from?{from:n.to,to:r.from}:null}var zm=wc(!1),Wm=wc(!0);function wc(i){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=e.changeByRange(r=>{let{from:s,to:O}=r,o=e.doc.lineAt(s),l=!i&&s==O&&Xm(e,s);i&&(s=O=(O<=o.to?o:e.doc.lineAt(O)).to);let a=new Nt(e,{simulateBreak:s,simulateDoubleBreak:!!l}),h=VO(a,s);for(h==null&&(h=/^\s*/.exec(e.doc.lineAt(s).text)[0].length);Oo.from&&s{let r=[];for(let O=n.from;O<=n.to;){let o=i.doc.lineAt(O);o.number>t&&(n.empty||n.to>o.from)&&(e(o,r,n),t=o.number),O=o.to+1}let s=i.changes(r);return{changes:r,range:Q.range(s.mapPos(n.anchor,1),s.mapPos(n.head,1))}})}var Rm=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=Object.create(null),n=new Nt(i,{overrideIndentation:s=>{let O=t[s];return O??-1}}),r=MO(i,(s,O,o)=>{let l=VO(n,s.from);if(l==null)return;/\S/.test(s.text)||(l=0);let a=/^\s*/.exec(s.text)[0],h=sn(i,l);(a!=h||o.fromi.readOnly?!1:(e(i.update(MO(i,(t,n)=>{n.push({from:t.from,insert:i.facet(Si)})}),{userEvent:"input.indent"})),!0),vc=({state:i,dispatch:e})=>i.readOnly?!1:(e(i.update(MO(i,(t,n)=>{let r=/^\s*/.exec(t.text)[0];if(!r)return;let s=Gt(r,i.tabSize),O=0,o=sn(i,Math.max(0,s-Xt(i)));for(;O({mac:i.key,run:i.run,shift:i.shift}))),IO=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:H$,shift:lm},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:F$,shift:am},{key:"Alt-ArrowUp",run:xm},{key:"Shift-Alt-ArrowUp",run:km},{key:"Alt-ArrowDown",run:wm},{key:"Shift-Alt-ArrowDown",run:vm},{key:"Escape",run:Qm},{key:"Mod-Enter",run:Wm},{key:"Alt-l",mac:"Ctrl-l",run:mm},{key:"Mod-i",run:gm,preventDefault:!0},{key:"Mod-[",run:vc},{key:"Mod-]",run:kc},{key:"Mod-Alt-\\",run:Rm},{key:"Shift-Mod-k",run:Tm},{key:"Shift-Mod-\\",run:sm},{key:"Mod-/",run:X$},{key:"Alt-A",run:W$}].concat(Zm),Tc={key:"Tab",run:kc,shift:vc};var Cm="#e5c07b",Xc="#e06c75",qm="#56b6c2",Um="#ffffff",Vr="#abb2bf",DO="#7d8799",Ym="#61afef",_m="#98c379",zc="#d19a66",Am="#c678dd",jm="#21252b",Wc="#2c313a",Rc="#282c34",BO="#353a42",Gm="#3E4451",Vc="#528bff";var Zc=v.theme({"&":{color:Vr,backgroundColor:Rc},".cm-content":{caretColor:Vc},".cm-cursor, .cm-dropCursor":{borderLeftColor:Vc},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:Gm},".cm-panels":{backgroundColor:jm,color:Vr},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:Rc,color:DO,border:"none"},".cm-activeLineGutter":{backgroundColor:Wc},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:BO},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:BO,borderBottomColor:BO},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:Wc,color:Vr}}},{dark:!0}),Cc=pt.define([{tag:u.keyword,color:Am},{tag:[u.name,u.deleted,u.character,u.propertyName,u.macroName],color:Xc},{tag:[u.function(u.variableName),u.labelName],color:Ym},{tag:[u.color,u.constant(u.name),u.standard(u.name)],color:zc},{tag:[u.definition(u.name),u.separator],color:Vr},{tag:[u.typeName,u.className,u.number,u.changed,u.annotation,u.modifier,u.self,u.namespace],color:Cm},{tag:[u.operator,u.operatorKeyword,u.url,u.escape,u.regexp,u.link,u.special(u.string)],color:qm},{tag:[u.meta,u.comment],color:DO},{tag:u.strong,fontWeight:"bold"},{tag:u.emphasis,fontStyle:"italic"},{tag:u.strikethrough,textDecoration:"line-through"},{tag:u.link,color:DO,textDecoration:"underline"},{tag:u.heading,fontWeight:"bold",color:Xc},{tag:[u.atom,u.bool,u.special(u.variableName)],color:zc},{tag:[u.processingInstruction,u.string,u.inserted],color:_m},{tag:u.invalid,color:Um}]);var Em=pt.define([{tag:u.meta,color:"#388938"},{tag:u.link,textDecoration:"underline"},{tag:u.heading,textDecoration:"underline",fontWeight:"bold"},{tag:u.emphasis,fontStyle:"italic"},{tag:u.strong,fontWeight:"bold"},{tag:u.strikethrough,textDecoration:"line-through"},{tag:u.keyword,color:"#708"},{tag:[u.atom,u.bool,u.url,u.contentSeparator,u.labelName],color:"#219"},{tag:[u.literal,u.inserted],color:"#164"},{tag:[u.string,u.deleted],color:"#a11"},{tag:[u.regexp,u.escape,u.special(u.string)],color:"#e40"},{tag:u.definition(u.variableName),color:"#00f"},{tag:u.local(u.variableName),color:"#30a"},{tag:[u.typeName,u.namespace],color:"#085"},{tag:u.className,color:"#167"},{tag:[u.special(u.variableName),u.macroName],color:"#256"},{tag:u.definition(u.propertyName),color:"#00c"},{tag:u.compareOperator,color:"#708"},{tag:u.comment,color:"#940"},{tag:u.invalid,color:"#f00"}]),Mm={"&":{backgroundColor:"#FFF",color:"#000"},"&.cm-focused":{outline:"none"},".cm-line":{lineHeight:"1.6"}};function qc(i){let e=document.documentElement.classList.contains("dark-mode"),t=e?Zc:v.theme(Mm),n=e?Cc:Em,r={darkModeActive:e,registerViewTheme(s){let O=s();O&&(t=v.theme(O))},registerHighlightStyle(s){let O=s(u)||[];O.length&&(n=pt.define(O))}};return window.$events.emitPublic(i,"library-cm6::configure-theme",r),[t,ZO(n)]}function Uc(i){return[qc(i),oh(),th(),sh(),Ch(),Oh()]}function Im(){let i=new gt,e={focus(t,n){n.dispatch({effects:i.reconfigure([oO(),OO()])})},blur(t,n){n.dispatch({effects:i.reconfigure([])})}};return[i.of([]),v.domEventHandlers(e)]}function LO(i){return[...Uc(i),Im(),tt.of([...IO]),E.readOnly.of(!0)]}function Zr(i){return[...Uc(i),oO(),OO(),Hh(),tt.of([...IO,...ec,Tc]),v.lineWrapping]}var FO=class i{constructor(e,t,n,r,s,O,o,l,a,h=0,c){this.p=e,this.stack=t,this.state=n,this.reducePos=r,this.pos=s,this.score=O,this.buffer=o,this.bufferBase=l,this.curContext=a,this.lookAhead=h,this.parent=c}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,n=0){let r=e.parser.context;return new i(e,[],t,n,n,0,[],0,r?new Cr(r,r.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let n=e>>19,r=e&65535,{parser:s}=this.p,O=s.dynamicPrecedence(r);if(O&&(this.score+=O),n==0){this.pushState(s.getGoto(this.state,r,!0),this.reducePos),r=2e3&&!(!((t=this.p.parser.nodeSet.types[r])===null||t===void 0)&&t.isAnonymous)&&(l==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=a):this.p.lastBigReductionSizeo;)this.stack.pop();this.reduceContext(r,l)}storeNode(e,t,n,r=4,s=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&O.buffer[o-4]==0&&O.buffer[o-1]>-1){if(t==n)return;if(O.buffer[o-2]>=t){O.buffer[o-2]=n;return}}}if(!s||this.pos==n)this.buffer.push(e,t,n,r);else{let O=this.buffer.length;if(O>0&&this.buffer[O-4]!=0)for(;O>0&&this.buffer[O-2]>n;)this.buffer[O]=this.buffer[O-4],this.buffer[O+1]=this.buffer[O-3],this.buffer[O+2]=this.buffer[O-2],this.buffer[O+3]=this.buffer[O-1],O-=4,r>4&&(r-=4);this.buffer[O]=e,this.buffer[O+1]=t,this.buffer[O+2]=n,this.buffer[O+3]=r}}shift(e,t,n){let r=this.pos;if(e&131072)this.pushState(e&65535,this.pos);else if(e&262144)this.pos=n,this.shiftContext(t,r),t<=this.p.parser.maxNode&&this.buffer.push(t,r,n,4);else{let s=e,{parser:O}=this.p;(n>this.pos||t<=O.maxNode)&&(this.pos=n,O.stateFlag(s,1)||(this.reducePos=n)),this.pushState(s,r),this.shiftContext(t,r),t<=O.maxNode&&this.buffer.push(t,r,n,4)}}apply(e,t,n){e&65536?this.reduce(e):this.shift(e,t,n)}useNode(e,t){let n=this.p.reused.length-1;(n<0||this.p.reused[n]!=e)&&(this.p.reused.push(e),n++);let r=this.pos;this.reducePos=this.pos=r+e.length,this.pushState(t,r),this.buffer.push(n,r,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(;t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let n=e.buffer.slice(t),r=e.bufferBase+t;for(;e&&r==e.bufferBase;)e=e.parent;return new i(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,n,r,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let n=e<=this.p.parser.maxNode;n&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,n?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new JO(this);;){let n=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(n==0)return!1;if(!(n&65536))return!0;t.reduce(n)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let r=[];for(let s=0,O;sl&1&&o==O)||r.push(t[s],O)}t=r}let n=[];for(let r=0;r>19,r=e&65535,s=this.stack.length-n*3;if(s<0||t.getGoto(this.stack[s],r,!1)<0)return!1;this.storeNode(0,this.reducePos,this.reducePos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(e),!0}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;tthis.lookAhead&&(this.emitLookAhead(),this.lookAhead=e)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}},Cr=class{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}},Yc;(function(i){i[i.Insert=200]="Insert",i[i.Delete=190]="Delete",i[i.Reduce=100]="Reduce",i[i.MaxNext=4]="MaxNext",i[i.MaxInsertStackDepth=300]="MaxInsertStackDepth",i[i.DampenInsertStackDepth=120]="DampenInsertStackDepth",i[i.MinBigReduction=2e3]="MinBigReduction"})(Yc||(Yc={}));var JO=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,n=e>>19;n==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(n-1)*3;let r=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=r}},KO=class i{constructor(e,t,n){this.stack=e,this.pos=t,this.index=n,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new i(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new i(this.stack,this.pos,this.index)}};function ln(i,e=Uint16Array){if(typeof i!="string")return i;let t=null;for(let n=0,r=0;n=92&&O--,O>=34&&O--;let l=O-32;if(l>=46&&(l-=46,o=!0),s+=l,o)break;s*=46}t?t[r++]=s:t=new e(s)}return t}var Pi=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},_c=new Pi,eo=class{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=_c,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let n=this.range,r=this.rangeIndex,s=this.pos+e;for(;sn.to:s>=n.to;){if(r==this.ranges.length-1)return null;let O=this.ranges[++r];s+=O.from-n.to,n=O}return s}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,n,r;if(t>=0&&t=this.chunk2Pos&&no.to&&(this.chunk2=this.chunk2.slice(0,o.to-n)),r=this.chunk2.charCodeAt(0)}}return n>=this.token.lookAhead&&(this.token.lookAhead=n+1),r}acceptToken(e,t=0){let n=t?this.resolveOffset(t,-1):this.pos;if(n==null||n=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=_c,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let n="";for(let r of this.ranges){if(r.from>=t)break;r.to>e&&(n+=this.input.read(Math.max(r.from,e),Math.min(r.to,t)))}return n}},Rt=class{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:n}=t.p;Bc(this.data,e,t,this.id,n.data,n.tokenPrecTable)}};Rt.prototype.contextual=Rt.prototype.fallback=Rt.prototype.extend=!1;var bi=class{constructor(e,t,n){this.precTable=t,this.elseToken=n,this.data=typeof e=="string"?ln(e):e}token(e,t){let n=e.pos,r;for(;r=e.pos,Bc(this.data,e,t,0,this.data,this.precTable),!(e.token.value>-1);){if(this.elseToken==null)return;if(e.next<0)break;e.advance(),e.reset(r+1,e.token)}r>n&&(e.reset(n,e.token),e.acceptToken(this.elseToken,r-n))}};bi.prototype.contextual=Rt.prototype.fallback=Rt.prototype.extend=!1;var J=class{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}};function Bc(i,e,t,n,r,s){let O=0,o=1<0){let p=i[d];if(l.allows(p)&&(e.token.value==-1||e.token.value==p||Dm(p,e.token.value,r,s))){e.acceptToken(p);break}}let h=e.next,c=0,f=i[O+2];if(e.next<0&&f>c&&i[a+f*3-3]==65535&&i[a+f*3-3]==65535){O=i[a+f*3-1];continue e}for(;c>1,p=a+d+(d<<1),m=i[p],$=i[p+1]||65536;if(h=$)c=d+1;else{O=i[p+2],e.advance();continue e}}break}}function Ac(i,e,t){for(let n=e,r;(r=i[n])!=65535;n++)if(r==t)return n-e;return-1}function Dm(i,e,t,n){let r=Ac(t,n,e);return r<0||Ac(t,n,i)e)&&!n.type.isError)return t<0?Math.max(0,Math.min(n.to-1,e-25)):Math.min(i.length,Math.max(n.from+1,e+25));if(t<0?n.prevSibling():n.nextSibling())break;if(!n.parent())return t<0?0:i.length}}var to=class{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?Gc(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?Gc(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=O,null;if(s instanceof C){if(O==e){if(O=Math.max(this.safeFrom,e)&&(this.trees.push(s),this.start.push(O),this.index.push(0))}else this.index[t]++,this.nextStart=O+s.length}}},io=class{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(n=>new Pi)}getActions(e){let t=0,n=null,{parser:r}=e.p,{tokenizers:s}=r,O=r.stateSlot(e.state,3),o=e.curContext?e.curContext.hash:0,l=0;for(let a=0;ac.end+25&&(l=Math.max(c.lookAhead,l)),c.value!=0)){let f=t;if(c.extended>-1&&(t=this.addActions(e,c.extended,c.end,t)),t=this.addActions(e,c.value,c.end,t),!h.extend&&(n=c,t>f))break}}for(;this.actions.length>t;)this.actions.pop();return l&&e.setLookAhead(l),!n&&e.pos==this.stream.end&&(n=new Pi,n.value=e.p.parser.eofTerm,n.start=n.end=e.pos,t=this.addActions(e,n.value,n.end,t)),this.mainToken=n,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new Pi,{pos:n,p:r}=e;return t.start=n,t.end=Math.min(n+1,r.stream.end),t.value=n==r.stream.end?r.parser.eofTerm:0,t}updateCachedToken(e,t,n){let r=this.stream.clipPos(n.pos);if(t.token(this.stream.reset(r,e),n),e.value>-1){let{parser:s}=n.p;for(let O=0;O=0&&n.p.parser.dialect.allows(o>>1)){o&1?e.extended=o>>1:e.value=o>>1;break}}}else e.value=0,e.end=this.stream.clipPos(r+1)}putAction(e,t,n,r){for(let s=0;se.bufferLength*4?new to(n,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,n=this.stacks=[],r,s;if(this.bigReductionCount>300&&e.length==1){let[O]=e;for(;O.forceReduce()&&O.stack.length&&O.stack[O.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let O=0;Ot)n.push(o);else{if(this.advanceStack(o,n,e))continue;{r||(r=[],s=[]),r.push(o);let l=this.tokens.getMainToken(o);s.push(l.value,l.end)}}break}}if(!n.length){let O=r&&Lm(r);if(O)return this.stackToTree(O);if(this.parser.strict)throw Le&&r&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&r){let O=this.stoppedAt!=null&&r[0].pos>this.stoppedAt?r[0]:this.runRecovery(r,s,n);if(O)return this.stackToTree(O.forceAll())}if(this.recovering){let O=this.recovering==1?1:this.recovering*3;if(n.length>O)for(n.sort((o,l)=>l.score-o.score);n.length>O;)n.pop();n.some(o=>o.reducePos>t)&&this.recovering--}else if(n.length>1){e:for(let O=0;O500&&a.buffer.length>500)if((o.score-a.score||o.buffer.length-a.buffer.length)>0)n.splice(l--,1);else{n.splice(O--,1);continue e}}}n.length>12&&n.splice(12,n.length-12)}this.minStackPos=n[0].pos;for(let O=1;O ":"";if(this.stoppedAt!=null&&r>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let a=e.curContext&&e.curContext.tracker.strict,h=a?e.curContext.hash:0;for(let c=this.fragments.nodeAt(r);c;){let f=this.parser.nodeSet.types[c.type.id]==c.type?s.getGoto(e.state,c.type.id):-1;if(f>-1&&c.length&&(!a||(c.prop(R.contextHash)||0)==h))return e.useNode(c,f),Le&&console.log(O+this.stackID(e)+` (via reuse of ${s.getName(c.type.id)})`),!0;if(!(c instanceof C)||c.children.length==0||c.positions[0]>0)break;let d=c.children[0];if(d instanceof C&&c.positions[0]==0)c=d;else break}}let o=s.stateSlot(e.state,4);if(o>0)return e.reduce(o),Le&&console.log(O+this.stackID(e)+` (via always-reduce ${s.getName(o&65535)})`),!0;if(e.stack.length>=15e3)for(;e.stack.length>9e3&&e.forceReduce(););let l=this.tokens.getActions(e);for(let a=0;ar?t.push(p):n.push(p)}return!1}advanceFully(e,t){let n=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>n)return Mc(e,t),!0}}runRecovery(e,t,n){let r=null,s=!1;for(let O=0;O ":"";if(o.deadEnd&&(s||(s=!0,o.restart(),Le&&console.log(h+this.stackID(o)+" (restarted)"),this.advanceFully(o,n))))continue;let c=o.split(),f=h;for(let d=0;c.forceReduce()&&d<10&&(Le&&console.log(f+this.stackID(c)+" (via force-reduce)"),!this.advanceFully(c,n));d++)Le&&(f=this.stackID(c)+" -> ");for(let d of o.recoverByInsert(l))Le&&console.log(h+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,n);this.stream.end>o.pos?(a==o.pos&&(a++,l=0),o.recoverByDelete(l,a),Le&&console.log(h+this.stackID(o)+` (via recover-delete ${this.parser.getName(l)})`),Mc(o,n)):(!r||r.scorei,Vt=class{constructor(e){this.start=e.start,this.shift=e.shift||HO,this.reduce=e.reduce||HO,this.reuse=e.reuse||HO,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}},me=class i extends ut{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let o=0;oe.topRules[o][1]),r=[];for(let o=0;o=0)s(h,l,o[a++]);else{let c=o[a+-h];for(let f=-h;f>0;f--)s(o[a++],l,c);a++}}}this.nodeSet=new ct(t.map((o,l)=>F.define({name:l>=this.minRepeatTerm?void 0:o,id:l,props:r[l],top:n.indexOf(l)>-1,error:l==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(l)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let O=ln(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let o=0;otypeof o=="number"?new Rt(O,o):o),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,n){let r=new no(this,e,t,n);for(let s of this.wrappers)r=s(r,e,t,n);return r}getGoto(e,t,n=!1){let r=this.goto;if(t>=r[0])return-1;for(let s=r[t+1];;){let O=r[s++],o=O&1,l=r[s++];if(o&&n)return l;for(let a=s+(O>>1);s0}validAction(e,t){if(t==this.stateSlot(e,4))return!0;for(let n=this.stateSlot(e,1);;n+=3){if(this.data[n]==65535)if(this.data[n+1]==1)n=$t(this.data,n+2);else return!1;if(t==$t(this.data,n+1))return!0}}nextStates(e){let t=[];for(let n=this.stateSlot(e,1);;n+=3){if(this.data[n]==65535)if(this.data[n+1]==1)n=$t(this.data,n+2);else break;if(!(this.data[n+2]&1)){let r=this.data[n+1];t.some((s,O)=>O&1&&s==r)||t.push(this.data[n],r)}}return t}configure(e){let t=Object.assign(Object.create(i.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let n=this.topRules[e.top];if(!n)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=n}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(n=>{let r=e.tokenizers.find(s=>s.from==n);return r?r.to:n})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((n,r)=>{let s=e.specializers.find(o=>o.from==n.external);if(!s)return n;let O=Object.assign(Object.assign({},n),{external:s.to});return t.specializers[r]=Ic(O),O})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),n=t.map(()=>!1);if(e)for(let s of e.split(" ")){let O=t.indexOf(s);O>=0&&(n[O]=!0)}let r=null;for(let s=0;sn)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scorei.external(t,n)<<1|e}return i.get}var Nm=94,Dc=1,Hm=95,Fm=96,Lc=2,Nc=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],Jm=58,Km=40,Hc=95,eg=91,qr=45,tg=46,ig=35,ng=37;function Ur(i){return i>=65&&i<=90||i>=97&&i<=122||i>=161}function rg(i){return i>=48&&i<=57}var sg=new J((i,e)=>{for(let t=!1,n=0,r=0;;r++){let{next:s}=i;if(Ur(s)||s==qr||s==Hc||t&&rg(s))!t&&(s!=qr||r>0)&&(t=!0),n===r&&s==qr&&n++,i.advance();else{t&&i.acceptToken(s==Km?Hm:n==2&&e.canShift(Lc)?Lc:Fm);break}}}),Og=new J(i=>{if(Nc.includes(i.peek(-1))){let{next:e}=i;(Ur(e)||e==Hc||e==ig||e==tg||e==eg||e==Jm||e==qr)&&i.acceptToken(Nm)}}),og=new J(i=>{if(!Nc.includes(i.peek(-1))){let{next:e}=i;if(e==ng&&(i.advance(),i.acceptToken(Dc)),Ur(e)){do i.advance();while(Ur(i.next));i.acceptToken(Dc)}}}),lg=se({"AtKeyword import charset namespace keyframes media supports":u.definitionKeyword,"from to selector":u.keyword,NamespaceName:u.namespace,KeyframeName:u.labelName,TagName:u.tagName,ClassName:u.className,PseudoClassName:u.constant(u.className),IdName:u.labelName,"FeatureName PropertyName":u.propertyName,AttributeName:u.attributeName,NumberLiteral:u.number,KeywordQuery:u.keyword,UnaryQueryOp:u.operatorKeyword,"CallTag ValueName":u.atom,VariableName:u.variableName,Callee:u.operatorKeyword,Unit:u.unit,"UniversalSelector NestingSelector":u.definitionOperator,MatchOp:u.compareOperator,"ChildOp SiblingOp, LogicOp":u.logicOperator,BinOp:u.arithmeticOperator,Important:u.modifier,Comment:u.blockComment,ParenthesizedContent:u.special(u.name),ColorLiteral:u.color,StringLiteral:u.string,":":u.punctuation,"PseudoOp #":u.derefOperator,"; ,":u.separator,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace}),ag={__proto__:null,lang:32,"nth-child":32,"nth-last-child":32,"nth-of-type":32,"nth-last-of-type":32,dir:32,"host-context":32,url:60,"url-prefix":60,domain:60,regexp:60,selector:134},hg={__proto__:null,"@import":114,"@media":138,"@charset":142,"@namespace":146,"@keyframes":152,"@supports":164},cg={__proto__:null,not:128,only:128,from:158,to:160},Fc=me.deserialize({version:14,states:"7WQYQ[OOO#_Q[OOOOQP'#Cd'#CdOOQP'#Cc'#CcO#fQ[O'#CfO$YQXO'#CaO$aQ[O'#ChO$lQ[O'#DPO$qQ[O'#DTOOQP'#Ed'#EdO$vQdO'#DeO%bQ[O'#DrO$vQdO'#DtO%sQ[O'#DvO&OQ[O'#DyO&TQ[O'#EPO&cQ[O'#EROOQS'#Ec'#EcOOQS'#ET'#ETQYQ[OOO&jQXO'#CdO'_QWO'#DaO'dQWO'#EjO'oQ[O'#EjQOQWOOOOQP'#Cg'#CgOOQP,59Q,59QO#fQ[O,59QO'yQ[O'#EWO(eQWO,58{O(mQ[O,59SO$lQ[O,59kO$qQ[O,59oO'yQ[O,59sO'yQ[O,59uO'yQ[O,59vO(xQ[O'#D`OOQS,58{,58{OOQP'#Ck'#CkOOQO'#C}'#C}OOQP,59S,59SO)PQWO,59SO)UQWO,59SOOQP'#DR'#DROOQP,59k,59kOOQO'#DV'#DVO)ZQ`O,59oOOQS'#Cp'#CpO$vQdO'#CqO)cQvO'#CsO*pQtO,5:POOQO'#Cx'#CxO)UQWO'#CwO+UQWO'#CyOOQS'#Eg'#EgOOQO'#Dh'#DhO+ZQ[O'#DoO+iQWO'#EkO&TQ[O'#DmO+wQWO'#DpOOQO'#El'#ElO(hQWO,5:^O+|QpO,5:`OOQS'#Dx'#DxO,UQWO,5:bO,ZQ[O,5:bOOQO'#D{'#D{O,cQWO,5:eO,hQWO,5:kO,pQWO,5:mOOQS-E8R-E8RO$vQdO,59{O,xQ[O'#EYO-VQWO,5;UO-VQWO,5;UOOQP1G.l1G.lO-|QXO,5:rOOQO-E8U-E8UOOQS1G.g1G.gOOQP1G.n1G.nO)PQWO1G.nO)UQWO1G.nOOQP1G/V1G/VO.ZQ`O1G/ZO.tQXO1G/_O/[QXO1G/aO/rQXO1G/bO0YQWO,59zO0_Q[O'#DOO0fQdO'#CoOOQP1G/Z1G/ZO$vQdO1G/ZO0mQpO,59]OOQS,59_,59_O$vQdO,59aO0uQWO1G/kOOQS,59c,59cO0zQ!bO,59eO1SQWO'#DhO1_QWO,5:TO1dQWO,5:ZO&TQ[O,5:VO&TQ[O'#EZO1lQWO,5;VO1wQWO,5:XO'yQ[O,5:[OOQS1G/x1G/xOOQS1G/z1G/zOOQS1G/|1G/|O2YQWO1G/|O2_QdO'#D|OOQS1G0P1G0POOQS1G0V1G0VOOQS1G0X1G0XO2mQtO1G/gOOQO,5:t,5:tO3TQ[O,5:tOOQO-E8W-E8WO3bQWO1G0pOOQP7+$Y7+$YOOQP7+$u7+$uO$vQdO7+$uOOQS1G/f1G/fO3mQXO'#EiO3tQWO,59jO3yQtO'#EUO4nQdO'#EfO4xQWO,59ZO4}QpO7+$uOOQS1G.w1G.wOOQS1G.{1G.{OOQS7+%V7+%VO5VQWO1G/PO$vQdO1G/oOOQO1G/u1G/uOOQO1G/q1G/qO5[QWO,5:uOOQO-E8X-E8XO5jQXO1G/vOOQS7+%h7+%hO5qQYO'#CsO(hQWO'#E[O5yQdO,5:hOOQS,5:h,5:hO6XQtO'#EXO$vQdO'#EXO7VQdO7+%ROOQO7+%R7+%ROOQO1G0`1G0`O7jQpO<T![;'S%^;'S;=`%o<%lO%^^;TUoWOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^^;nYoW#[UOy%^z!Q%^!Q![;g![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^^[[oW#[UOy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^_?VSpVOy%^z;'S%^;'S;=`%o<%lO%^^?hWjSOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^_@VU#XPOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^~@nTjSOy%^z{@}{;'S%^;'S;=`%o<%lO%^~ASUoWOy@}yzAfz{Bm{;'S@};'S;=`Co<%lO@}~AiTOzAfz{Ax{;'SAf;'S;=`Bg<%lOAf~A{VOzAfz{Ax{!PAf!P!QBb!Q;'SAf;'S;=`Bg<%lOAf~BgOR~~BjP;=`<%lAf~BrWoWOy@}yzAfz{Bm{!P@}!P!QC[!Q;'S@};'S;=`Co<%lO@}~CcSoWR~Oy%^z;'S%^;'S;=`%o<%lO%^~CrP;=`<%l@}^Cz[#[UOy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^XDuU]POy%^z![%^![!]EX!];'S%^;'S;=`%o<%lO%^XE`S^PoWOy%^z;'S%^;'S;=`%o<%lO%^_EqS!WVOy%^z;'S%^;'S;=`%o<%lO%^YFSSzQOy%^z;'S%^;'S;=`%o<%lO%^XFeU|POy%^z!`%^!`!aFw!a;'S%^;'S;=`%o<%lO%^XGOS|PoWOy%^z;'S%^;'S;=`%o<%lO%^XG_WOy%^z!c%^!c!}Gw!}#T%^#T#oGw#o;'S%^;'S;=`%o<%lO%^XHO[!YPoWOy%^z}%^}!OGw!O!Q%^!Q![Gw![!c%^!c!}Gw!}#T%^#T#oGw#o;'S%^;'S;=`%o<%lO%^XHySxPOy%^z;'S%^;'S;=`%o<%lO%^^I[SvUOy%^z;'S%^;'S;=`%o<%lO%^XIkUOy%^z#b%^#b#cI}#c;'S%^;'S;=`%o<%lO%^XJSUoWOy%^z#W%^#W#XJf#X;'S%^;'S;=`%o<%lO%^XJmS!`PoWOy%^z;'S%^;'S;=`%o<%lO%^XJ|UOy%^z#f%^#f#gJf#g;'S%^;'S;=`%o<%lO%^XKeS!RPOy%^z;'S%^;'S;=`%o<%lO%^_KvS!QVOy%^z;'S%^;'S;=`%o<%lO%^ZLXU!PPOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^WLnP;=`<%l$}",tokenizers:[Og,og,sg,0,1,2,3],topRules:{StyleSheet:[0,4],Styles:[1,84]},specialized:[{term:95,get:i=>ag[i]||-1},{term:56,get:i=>hg[i]||-1},{term:96,get:i=>cg[i]||-1}],tokenPrec:1123});var so=null;function Oo(){if(!so&&typeof document=="object"&&document.body){let{style:i}=document.body,e=[],t=new Set;for(let n in i)n!="cssText"&&n!="cssFloat"&&typeof i[n]=="string"&&(/[A-Z]/.test(n)&&(n=n.replace(/[A-Z]/g,r=>"-"+r.toLowerCase())),t.has(n)||(e.push(n),t.add(n)));so=e.sort().map(n=>({type:"property",label:n}))}return so||[]}var Jc=["active","after","any-link","autofill","backdrop","before","checked","cue","default","defined","disabled","empty","enabled","file-selector-button","first","first-child","first-letter","first-line","first-of-type","focus","focus-visible","focus-within","fullscreen","has","host","host-context","hover","in-range","indeterminate","invalid","is","lang","last-child","last-of-type","left","link","marker","modal","not","nth-child","nth-last-child","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","part","placeholder","placeholder-shown","read-only","read-write","required","right","root","scope","selection","slotted","target","target-text","valid","visited","where"].map(i=>({type:"class",label:i})),Kc=["above","absolute","activeborder","additive","activecaption","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","antialiased","appworkspace","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","axis-pan","background","backwards","baseline","below","bidi-override","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic-abegede-gez","ethiopic-halehame-aa-er","ethiopic-halehame-gez","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fill-box","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","graytext","grid","groove","hand","hard-light","help","hidden","hide","higher","highlight","highlighttext","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","justify","keep-all","landscape","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-hexadecimal","lower-latin","lower-norwegian","lowercase","ltr","luminosity","manipulation","match","matrix","matrix3d","medium","menu","menutext","message-box","middle","min-intrinsic","mix","monospace","move","multiple","multiple_mask_images","multiply","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","opacity","open-quote","optimizeLegibility","optimizeSpeed","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","perspective","pinch-zoom","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","start","static","status-bar","stretch","stroke","stroke-box","sub","subpixel-antialiased","svg_masks","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","text","text-bottom","text-top","textarea","textfield","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","to","top","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unidirectional-pan","unset","up","upper-latin","uppercase","url","var","vertical","vertical-text","view-box","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"].map(i=>({type:"keyword",label:i})).concat(["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"].map(i=>({type:"constant",label:i}))),fg=["a","abbr","address","article","aside","b","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","dd","del","details","dfn","dialog","div","dl","dt","em","figcaption","figure","footer","form","header","hgroup","h1","h2","h3","h4","h5","h6","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","main","meter","nav","ol","output","p","pre","ruby","section","select","small","source","span","strong","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","tr","u","ul"].map(i=>({type:"type",label:i})),Zt=/^(\w[\w-]*|-\w[\w-]*|)$/,ug=/^-(-[\w-]*)?$/;function dg(i,e){var t;if((i.name=="("||i.type.isError)&&(i=i.parent||i),i.name!="ArgList")return!1;let n=(t=i.parent)===null||t===void 0?void 0:t.firstChild;return n?.name!="Callee"?!1:e.sliceString(n.from,n.to)=="var"}var ef=new pi,pg=["Declaration"];function $g(i){for(let e=i;;){if(e.type.isTop)return e;if(!(e=e.parent))return i}}function tf(i,e,t){if(e.to-e.from>4096){let n=ef.get(e);if(n)return n;let r=[],s=new Set,O=e.cursor(A.IncludeAnonymous);if(O.firstChild())do for(let o of tf(i,O.node,t))s.has(o.label)||(s.add(o.label),r.push(o));while(O.nextSibling());return ef.set(e,r),r}else{let n=[],r=new Set;return e.cursor().iterate(s=>{var O;if(t(s)&&s.matchContext(pg)&&((O=s.node.nextSibling)===null||O===void 0?void 0:O.name)==":"){let o=i.sliceString(s.from,s.to);r.has(o)||(r.add(o),n.push({label:o,type:"variable"}))}}),n}}var mg=i=>e=>{let{state:t,pos:n}=e,r=_(t).resolveInner(n,-1),s=r.type.isError&&r.from==r.to-1&&t.doc.sliceString(r.from,r.to)=="-";if(r.name=="PropertyName"||(s||r.name=="TagName")&&/^(Block|Styles)$/.test(r.resolve(r.to).name))return{from:r.from,options:Oo(),validFor:Zt};if(r.name=="ValueName")return{from:r.from,options:Kc,validFor:Zt};if(r.name=="PseudoClassName")return{from:r.from,options:Jc,validFor:Zt};if(i(r)||(e.explicit||s)&&dg(r,t.doc))return{from:i(r)||s?r.from:n,options:tf(t.doc,$g(r),i),validFor:ug};if(r.name=="TagName"){for(let{parent:l}=r;l;l=l.parent)if(l.name=="Block")return{from:r.from,options:Oo(),validFor:Zt};return{from:r.from,options:fg,validFor:Zt}}if(!e.explicit)return null;let O=r.resolve(n),o=O.childBefore(n);return o&&o.name==":"&&O.name=="PseudoClassSelector"?{from:n,options:Jc,validFor:Zt}:o&&o.name==":"&&O.name=="Declaration"||O.name=="ArgList"?{from:n,options:Kc,validFor:Zt}:O.name=="Block"||O.name=="Styles"?{from:n,options:Oo(),validFor:Zt}:null},gg=mg(i=>i.name=="VariableName"),an=pe.define({name:"css",parser:Fc.configure({props:[Se.add({Declaration:We()}),ke.add({"Block KeyframeList":zt})]}),languageData:{commentTokens:{block:{open:"/*",close:"*/"}},indentOnInput:/^\s*\}$/,wordChars:"-"}});function Yr(){return new Oe(an,an.data.of({autocomplete:gg}))}var Qg=se({String:u.string,Number:u.number,"True False":u.bool,PropertyName:u.propertyName,Null:u.null,",":u.separator,"[ ]":u.squareBracket,"{ }":u.brace}),nf=me.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#CjOOQO'#Cp'#CpQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CrOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59U,59UO!iQPO,59UOVQPO,59QOqQPO'#CkO!nQPO,59^OOQO1G.k1G.kOVQPO'#ClO!vQPO,59aOOQO1G.p1G.pOOQO1G.l1G.lOOQO,59V,59VOOQO-E6i-E6iOOQO,59W,59WOOQO-E6j-E6j",stateData:"#O~OcOS~OQSORSOSSOTSOWQO]ROePO~OVXOeUO~O[[O~PVOg^O~Oh_OVfX~OVaO~OhbO[iX~O[dO~Oh_OVfa~OhbO[ia~O",goto:"!kjPPPPPPkPPkqwPPk{!RPPP!XP!ePP!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"\u26A0 JsonText True False Null Number String } { Object Property PropertyName ] [ Array",maxTerm:25,nodeProps:[["openedBy",7,"{",12,"["],["closedBy",8,"}",13,"]"]],propSources:[Qg],skippedNodes:[0],repeatNodeCount:2,tokenData:"(p~RaXY!WYZ!W]^!Wpq!Wrs!]|}$i}!O$n!Q!R$w!R![&V![!]&h!}#O&m#P#Q&r#Y#Z&w#b#c'f#h#i'}#o#p(f#q#r(k~!]Oc~~!`Upq!]qr!]rs!rs#O!]#O#P!w#P~!]~!wOe~~!zXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#g~#jR!Q![#s!c!i#s#T#Z#s~#vR!Q![$P!c!i$P#T#Z$P~$SR!Q![$]!c!i$]#T#Z$]~$`R!Q![!]!c!i!]#T#Z!]~$nOh~~$qQ!Q!R$w!R![&V~$|RT~!O!P%V!g!h%k#X#Y%k~%YP!Q![%]~%bRT~!Q![%]!g!h%k#X#Y%k~%nR{|%w}!O%w!Q![%}~%zP!Q![%}~&SPT~!Q![%}~&[ST~!O!P%V!Q![&V!g!h%k#X#Y%k~&mOg~~&rO]~~&wO[~~&zP#T#U&}~'QP#`#a'T~'WP#g#h'Z~'^P#X#Y'a~'fOR~~'iP#i#j'l~'oP#`#a'r~'uP#`#a'x~'}OS~~(QP#f#g(T~(WP#i#j(Z~(^P#X#Y(a~(fOQ~~(kOW~~(pOV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0});var Sg=pe.define({name:"json",parser:nf.configure({props:[Se.add({Object:We({except:/^\s*\}/}),Array:We({except:/^\s*\]/})}),ke.add({"Object Array":zt})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function rf(){return new Oe(Sg)}var sf=302,Of=1,yg=2,of=303,Pg=305,bg=306,xg=3,wg=4,kg=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],af=125,vg=59,lf=47,Tg=42,Xg=43,zg=45,Wg=new Vt({start:!1,shift(i,e){return e==xg||e==wg||e==Pg?i:e==bg},strict:!1}),Rg=new J((i,e)=>{let{next:t}=i;(t==af||t==-1||e.context)&&e.canShift(of)&&i.acceptToken(of)},{contextual:!0,fallback:!0}),Vg=new J((i,e)=>{let{next:t}=i,n;kg.indexOf(t)>-1||t==lf&&((n=i.peek(1))==lf||n==Tg)||t!=af&&t!=vg&&t!=-1&&!e.context&&e.canShift(sf)&&i.acceptToken(sf)},{contextual:!0}),Zg=new J((i,e)=>{let{next:t}=i;if((t==Xg||t==zg)&&(i.advance(),t==i.next)){i.advance();let n=!e.context&&e.canShift(Of);i.acceptToken(n?Of:yg)}},{contextual:!0}),Cg=se({"get set async static":u.modifier,"for while do if else switch try catch finally return throw break continue default case":u.controlKeyword,"in of await yield void typeof delete instanceof":u.operatorKeyword,"let var const function class extends":u.definitionKeyword,"import export from":u.moduleKeyword,"with debugger as new":u.keyword,TemplateString:u.special(u.string),super:u.atom,BooleanLiteral:u.bool,this:u.self,null:u.null,Star:u.modifier,VariableName:u.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":u.function(u.variableName),VariableDefinition:u.definition(u.variableName),Label:u.labelName,PropertyName:u.propertyName,PrivatePropertyName:u.special(u.propertyName),"CallExpression/MemberExpression/PropertyName":u.function(u.propertyName),"FunctionDeclaration/VariableDefinition":u.function(u.definition(u.variableName)),"ClassDeclaration/VariableDefinition":u.definition(u.className),PropertyDefinition:u.definition(u.propertyName),PrivatePropertyDefinition:u.definition(u.special(u.propertyName)),UpdateOp:u.updateOperator,LineComment:u.lineComment,BlockComment:u.blockComment,Number:u.number,String:u.string,Escape:u.escape,ArithOp:u.arithmeticOperator,LogicOp:u.logicOperator,BitOp:u.bitwiseOperator,CompareOp:u.compareOperator,RegExp:u.regexp,Equals:u.definitionOperator,Arrow:u.function(u.punctuation),": Spread":u.punctuation,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace,"InterpolationStart InterpolationEnd":u.special(u.brace),".":u.derefOperator,", ;":u.separator,"@":u.meta,TypeName:u.typeName,TypeDefinition:u.definition(u.typeName),"type enum interface implements namespace module declare":u.definitionKeyword,"abstract global Privacy readonly override":u.modifier,"is keyof unique infer":u.operatorKeyword,JSXAttributeValue:u.attributeValue,JSXText:u.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":u.angleBracket,"JSXIdentifier JSXNameSpacedName":u.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":u.attributeName,"JSXBuiltin/JSXIdentifier":u.standard(u.tagName)}),qg={__proto__:null,export:14,as:19,from:27,default:30,async:35,function:36,extends:46,this:50,true:58,false:58,null:70,void:74,typeof:78,super:96,new:130,delete:146,yield:155,await:159,class:164,public:221,private:221,protected:221,readonly:223,instanceof:242,satisfies:245,in:246,const:248,import:280,keyof:335,unique:339,infer:345,is:381,abstract:401,implements:403,type:405,let:408,var:410,interface:417,enum:421,namespace:427,module:429,declare:433,global:437,for:458,of:467,while:470,with:474,do:478,if:482,else:484,switch:488,case:494,try:500,catch:504,finally:508,return:512,throw:516,break:520,continue:524,debugger:528},Ug={__proto__:null,async:117,get:119,set:121,declare:181,public:183,private:183,protected:183,static:185,abstract:187,override:189,readonly:195,accessor:197,new:385},Yg={__proto__:null,"<":137},hf=me.deserialize({version:14,states:"$EnO`QUOOO%QQUOOO'TQWOOP(bOSOOO*pQ(CjO'#CfO*wOpO'#CgO+VO!bO'#CgO+eO07`O'#DZO-vQUO'#DaO.WQUO'#DlO%QQUO'#DvO0_QUO'#EOOOQ(CY'#EW'#EWO0uQSO'#ETOOQO'#I`'#I`O0}QSO'#GkOOQO'#Ei'#EiO1YQSO'#EhO1_QSO'#EhO3aQ(CjO'#JcO6QQ(CjO'#JdO6nQSO'#FWO6sQ#tO'#FoOOQ(CY'#F`'#F`O7OO&jO'#F`O7^Q,UO'#FvO8tQSO'#FuOOQ(CY'#Jd'#JdOOQ(CW'#Jc'#JcOOQQ'#J}'#J}O8yQSO'#IPO9OQ(C[O'#IQOOQQ'#JP'#JPOOQQ'#IU'#IUQ`QUOOO%QQUO'#DnO9WQUO'#DzO%QQUO'#D|O9_QSO'#GkO9dQ,UO'#ClO9rQSO'#EgO9}QSO'#ErO:SQ,UO'#F_O:qQSO'#GkO:vQSO'#GoO;RQSO'#GoO;aQSO'#GrO;aQSO'#GsO;aQSO'#GuO9_QSO'#GxOQQSO'#HoO>VQ(C]O'#HuO%QQUO'#HwO>bQ(C]O'#HyO>mQ(C]O'#H{O9OQ(C[O'#H}O>xQ(CjO'#CfO?zQWO'#DfQOQSOOO@bQSO'#EPO9dQ,UO'#EgO@mQSO'#EgO@xQ`O'#F_OOQQ'#Cd'#CdOOQ(CW'#Dk'#DkOOQ(CW'#Jg'#JgO%QQUO'#JgOBUQWO'#E`OOQ(CW'#E_'#E_OB`Q(C`O'#E`OBzQWO'#ESOOQO'#Jj'#JjOC`QWO'#ESOCmQWO'#E`ODTQWO'#EfODWQWO'#E`ODqQWO'#E`OAQQWO'#E`OBzQWO'#E`PEbO?MpO'#C`POOO)CDn)CDnOOOO'#IV'#IVOEmOpO,59ROOQ(CY,59R,59ROOOO'#IW'#IWOE{O!bO,59RO%QQUO'#D]OOOO'#IY'#IYOFZO07`O,59uOOQ(CY,59u,59uOFiQUO'#IZOF|QSO'#JeOIOQbO'#JeO+sQUO'#JeOIVQSO,59{OImQSO'#EiOIzQSO'#JrOJVQSO'#JqOJVQSO'#JqOJ_QSO,5;VOJdQSO'#JpOOQ(CY,5:W,5:WOJkQUO,5:WOLlQ(CjO,5:bOM]QSO,5:jOMbQSO'#JnON[Q(C[O'#JoO:vQSO'#JnONcQSO'#JnONkQSO,5;UONpQSO'#JnOOQ(CY'#Cf'#CfO%QQUO'#EOO! dQ`O,5:oOOQO'#Jk'#JkOOQO-E<^-E<^O9_QSO,5=VO! zQSO,5=VO!!PQUO,5;SO!$SQ,UO'#EdO!%gQSO,5;SO!'PQ,UO'#DpO!'WQUO'#DuO!'bQWO,5;]O!'jQWO,5;]O%QQUO,5;]OOQQ'#FO'#FOOOQQ'#FQ'#FQO%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^OOQQ'#FU'#FUO!'xQUO,5;oOOQ(CY,5;t,5;tOOQ(CY,5;u,5;uO!){QSO,5;uOOQ(CY,5;v,5;vO%QQUO'#IfO!*TQ(C[O,5kOOQQ'#JX'#JXOOQQ,5>l,5>lOOQQ-EQQWO,5;yO!>VQSO,5=rO!>[QSO,5=rO!>aQSO,5=rO9OQ(C[O,5=rO!>oQSO'#EkO!?iQWO'#ElOOQ(CW'#Jp'#JpO!?pQ(C[O'#KOO9OQ(C[O,5=ZO;aQSO,5=aOOQO'#Cr'#CrO!?{QWO,5=^O!@TQ,UO,5=_O!@`QSO,5=aO!@eQ`O,5=dO>QQSO'#G}O9_QSO'#HPO!@mQSO'#HPO9dQ,UO'#HSO!@rQSO'#HSOOQQ,5=g,5=gO!@wQSO'#HTO!APQSO'#ClO!AUQSO,58|O!A`QSO,58|O!ChQUO,58|OOQQ,58|,58|O!CuQ(C[O,58|O%QQUO,58|O!DQQUO'#H[OOQQ'#H]'#H]OOQQ'#H^'#H^O`QUO,5=tO!DbQSO,5=tO`QUO,5=zO`QUO,5=|O!DgQSO,5>OO`QUO,5>QO!DlQSO,5>TO!DqQUO,5>ZOOQQ,5>a,5>aO%QQUO,5>aO9OQ(C[O,5>cOOQQ,5>e,5>eO!HxQSO,5>eOOQQ,5>g,5>gO!HxQSO,5>gOOQQ,5>i,5>iO!H}QWO'#DXO%QQUO'#JgO!IlQWO'#JgO!JZQWO'#DgO!JlQWO'#DgO!L}QUO'#DgO!MUQSO'#JfO!M^QSO,5:QO!McQSO'#EmO!MqQSO'#JsO!MyQSO,5;WO!NOQWO'#DgO!N]QWO'#EROOQ(CY,5:k,5:kO%QQUO,5:kO!NdQSO,5:kO>QQSO,5;RO!uO+sQUO,5>uOOQO,5>{,5>{O#&oQUO'#IZOOQO-EUQ(CjO1G0xO#AUQ$IUO'#CfO#CSQ$IUO1G1ZO#EQQ$IUO'#JdO!*OQSO1G1aO#EeQ(CjO,5?QOOQ(CW-EQQSO'#HsOOQQ1G3u1G3uO$0}QUO1G3uO9OQ(C[O1G3{OOQQ1G3}1G3}OOQ(CW'#GW'#GWO9OQ(C[O1G4PO9OQ(C[O1G4RO$5RQSO,5@RO!'xQUO,5;XO:vQSO,5;XO>QQSO,5:RO!'xQUO,5:RO!QQSO1G0mO!uO$:qQSO1G5kO$:yQSO1G5wO$;RQbO1G5xO:vQSO,5>{O$;]QSO1G5tO$;]QSO1G5tO:vQSO1G5tO$;eQ(CjO1G5uO%QQUO1G5uO$;uQ(C[O1G5uO$}O:vQSO,5>}OOQO,5>},5>}O$}OOQO-EQQWO,59pO%QQUO,59pO% mQSO1G2SO!%lQ,UO1G2ZO% rQ(CjO7+'gOOQ(CY7+'g7+'gO!!PQUO7+'gOOQ(CY7+%`7+%`O%!fQ`O'#J|O!NgQSO7+(]O%!pQbO7+(]O$<}QSO7+(]O%!wQ(ChO'#CfO%#[Q(ChO,5<{O%#|QSO,5<{OOQ(CW1G5`1G5`OOQQ7+$^7+$^O!VOOQQ,5>V,5>VO%QQUO'#HlO%)^QSO'#HnOOQQ,5>],5>]O:vQSO,5>]OOQQ,5>_,5>_OOQQ7+)a7+)aOOQQ7+)g7+)gOOQQ7+)k7+)kOOQQ7+)m7+)mO%)cQWO1G5mO%)wQ$IUO1G0sO%*RQSO1G0sOOQO1G/m1G/mO%*^Q$IUO1G/mO>QQSO1G/mO!'xQUO'#DgOOQO,5>v,5>vOOQO-E|,5>|OOQO-E<`-E<`O!QQSO7+&XO!wOOQO-ExO%QQUO,5>xOOQO-E<[-E<[O%5iQSO1G5oOOQ(CY<}Q$IUO1G0xO%?UQ$IUO1G0xO%AYQ$IUO1G0xO%AaQ$IUO1G0xO%CXQ$IUO1G0xO%ClQ(CjO<WOOQQ,5>Y,5>YO&&aQSO1G3wO:vQSO7+&_O!'xQUO7+&_OOQO7+%X7+%XO&&fQ$IUO1G5xO>QQSO7+%XOOQ(CY<QQSO<[QWO,5=mO&>mQWO,5:zOOQQ<QQSO7+)cO&@ZQSO<zAN>zO%QQUOAN?WO!zO&@pQ(C[OAN?WO!zO&@{Q(C[OAN?WOBzQWOAN>zO&AZQ(C[OAN?WO&AoQ(C`OAN?WO&AyQWOAN>zOBzQWOAN?WOOQO<ROy)uO|)vO(h)xO(i)zO~O#d#Wa^#Wa#X#Wa'k#Wa!V#Wa!g#Wa!X#Wa!S#Wa~P#*rO#d(QXP(QXX(QX^(QXk(QXz(QX!e(QX!h(QX!l(QX#g(QX#h(QX#i(QX#j(QX#k(QX#l(QX#m(QX#n(QX#o(QX#q(QX#s(QX#u(QX#v(QX'k(QX(R(QX(a(QX!g(QX!S(QX'i(QXo(QX!X(QX%a(QX!a(QX~P!1}O!V.bOd([X~P!.aOd.dO~O!V.eO!g(]X~P!4aO!g.hO~O!S.jO~OP$ZOy#wOz#xO|#yO!f#uO!h#vO!l$ZO(RVOX#fi^#fik#fi!V#fi!e#fi#h#fi#i#fi#j#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi'k#fi(a#fi(h#fi(i#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~O#g#fi~P#.nO#g#|O~P#.nOP$ZOy#wOz#xO|#yO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O(RVOX#fi^#fi!V#fi!e#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi'k#fi(a#fi(h#fi(i#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~Ok#fi~P#1`Ok$OO~P#1`OP$ZOk$OOy#wOz#xO|#yO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O#k$PO(RVO^#fi!V#fi#q#fi#s#fi#u#fi#v#fi'k#fi(a#fi(h#fi(i#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~OX#fi!e#fi#l#fi#m#fi#n#fi#o#fi~P#4QOX$bO!e$QO#l$QO#m$QO#n$aO#o$QO~P#4QOP$ZOX$bOk$OOy#wOz#xO|#yO!e$QO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O#k$PO#l$QO#m$QO#n$aO#o$QO#q$RO(RVO^#fi!V#fi#s#fi#u#fi#v#fi'k#fi(a#fi(i#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~O(h#fi~P#7RO(h#zO~P#7ROP$ZOX$bOk$OOy#wOz#xO|#yO!e$QO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O#k$PO#l$QO#m$QO#n$aO#o$QO#q$RO#s$TO(RVO(h#zO^#fi!V#fi#u#fi#v#fi'k#fi(a#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~O(i#fi~P#9sO(i#{O~P#9sOP$ZOX$bOk$OOy#wOz#xO|#yO!e$QO!f#uO!h#vO!l$ZO#g#|O#h#}O#i#}O#j#}O#k$PO#l$QO#m$QO#n$aO#o$QO#q$RO#s$TO#u$VO(RVO(h#zO(i#{O~O^#fi!V#fi#v#fi'k#fi(a#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~P#SOy)uO|)vO(h)xO(i)zO~OP#fiX#fik#fiz#fi!e#fi!f#fi!h#fi!l#fi#g#fi#h#fi#i#fi#j#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi#y#fi(R#fi(a#fi!V#fi!W#fi~P%D`O!f#uOP(QXX(QXg(QXk(QXy(QXz(QX|(QX!e(QX!h(QX!l(QX#g(QX#h(QX#i(QX#j(QX#k(QX#l(QX#m(QX#n(QX#o(QX#q(QX#s(QX#u(QX#v(QX#y(QX(R(QX(a(QX(h(QX(i(QX!V(QX!W(QX~O#y#zi!V#zi!W#zi~P#A]O#y!ni!W!ni~P$$jO!W6|O~O!V'Ya!W'Ya~P#A]O!a#sO(a'fO!V'Za!g'Za~O!V/YO!g(ni~O!V/YO!a#sO!g(ni~Od$uq!V$uq#X$uq#y$uq~P!.aO!S']a!V']a~P#*rO!a7TO~O!V/bO!S(oi~P#*rO!V/bO!S(oi~O!S7XO~O!a#sO#o7^O~Ok7_O!a#sO(a'fO~O!S7aO~Od$wq!V$wq#X$wq#y$wq~P!.aO^$iy!V$iy'k$iy'i$iy!S$iy!g$iyo$iy!X$iy%a$iy!a$iy~P!4aO!V4aO!X(pa~O^#[y!V#[y'k#[y'i#[y!S#[y!g#[yo#[y!X#[y%a#[y!a#[y~P!4aOX7fO~O!V0bO!W(vi~O]7lO~O!a6PO~O(U(sO!V'bX!W'bX~O!V4xO!W(sa~O!h%[O'}%PO^(ZX!a(ZX!l(ZX#X(ZX'k(ZX(a(ZX~O't7uO~P._O!xg#>v#>|#?`#?f#?l#?z#@a#Aq#BP#BV#B]#Bc#Bi#Bs#By#CP#CZ#Cm#CsPPPPPPPPPP#CyPPPPPPP#Dm#I^P#J}#KU#K^PPPP$ h$$^$+P$+S$+V$-g$-j$-m$-tPP$-z$.O$.w$/w$/{$0aPP$0e$0k$0oP$0r$0v$0y$1o$2V$2[$2_$2b$2h$2k$2o$2sR!zRmpOXr!X#b%^&e&g&h&j,`,e1j1mU!pQ'R-QQ%dtQ%lwQ%szQ&]!TS&y!c,xQ'X!f^'^!m!r!s!t!u!v!wS*^$z*cQ+W%mQ+e%uQ,P&VQ-O'QQ-Y'YY-b'_'`'a'b'cQ/s*eQ1X,QW2e-d-f-g-hS5R0}5UU6a2h2j2kU8R5Y5Z5]S8x6d6fS9u8S8TQ:c8{Q:z9xRO>R>SQ%vzQ&w!cS&}%x,{Q+]%oS/Q)v/SQ0O*rQ0g+^Q0l+dQ1`,VQ1a,WQ4i0bQ4r0nQ5l1[Q5m1_Q7h4jQ7k4oQ8b5oQ9j7lR:R8_pmOXr!T!X#b%^&[&e&g&h&j,`,e1j1mR,T&^&z`OPXYrstux!X!^!g!l#Q#b#l#r#v#y#|#}$O$P$Q$R$S$T$U$V$W$Y$_$c$k%^%d%q&^&a&b&e&g&h&j&n&v'T'h'z(Q([(m(q(u)i)t*v+O+j,[,`,e,q,t-U-^-r-{.X.e.l.t/}0S0a1Q1b1c1d1f1j1m1o2O2`2o2y3R3h4z4}5b5t5v5w6Q6Z6p8O8Y8g8s9k:Y:^;V;m;zO!d%iw!f!o%k%l%m&x'W'X'Y']'k*]+V+W,u-X-Y-a-c/k0`2T2[2c2g4U6_6c8v8z:a;YQ+P%gQ+p&OQ+s&PQ+}&VQ.Y(fQ1R+zU1V,O,P,QQ2z.ZQ5c1SS5g1W1XS7t4|5QQ8^5hU9s7z8P8QU:x9t9v9wQ;e:yQ;u;f!z=y#s$a$b$v$y)p)|*Z*}+Q+o+r.W/b/d0t0w1P2x3z4S4a4c5a6m7T7^8V9P9{:g:};^R>Sg=zO>R>ST)q$s)rV*o%TPR>O>Q'QkOPWXYZrstu!X!^!l#Q#U#X#b#l#r#v#y#|#}$O$P$Q$R$S$T$U$V$W$Y$_$c$k%^%d%q&^&a&b&e&g&h&j&n&v&z'T'h'x'z(Q([(m(q(u)i)t*v+O+j,[,`,e,q,t-U-^-r-{.X.e.l.t/}0S0a1Q1b1c1d1f1j1m1o2O2`2o2y3R3h4z4}5b5t5v5w6Q6Z6p8O8Y8g8s9k:Y:^;V;m;zO!z(l#s$a$b$v$y)p)|*Z*}+Q+o+r.W/b/d0t0w1P2x3z4S4a4c5a6m7T7^8V9P9{:g:};^R>SQ*s%XQ/P)ug3eOQ*V$xS*`$z*cQ*t%YQ/o*a!z=h#s$a$b$v$y)p)|*Z*}+Q+o+r.W/b/d0t0w1P2x3z4S4a4c5a6m7T7^8V9P9{:g:};^R>Sf=iO!z(l#s$a$b$v$y)p)|*Z*}+Q+o+r.W/b/d0t0w1P2x3z4S4a4c5a6m7T7^8V9P9{:g:};^R>Sg3eO>R>SQ+q&PQ0v+sQ4v0uR7o4wT*b$z*cS*b$z*cT5T0}5US/m*_4}T4W/u8OQ+R%hQ/n*`Q0]+SQ1T+|Q5e1UQ8[5fQ9n7sQ:O8]Q:t9oQ;P:PQ;c:wQ;s;dQP>Q]=P3d6x9U:i:j;|p){$t(n*u/U/`/w/x3O3w4^6}7`:k=g=s=t!Y=Q(j)Z*P*X._.{/W/e0U0s0u2{2}3x3|4u4w6q6r7U7Y7b7d9`9d;_>P>Q_=R3d6x9U9V:i:j;|pmOXr!T!X#b%^&[&e&g&h&j,`,e1j1mQ&X!SR,[&bpmOXr!T!X#b%^&[&e&g&h&j,`,e1j1mR&X!SQ+u&QR0r+nqmOXr!T!X#b%^&[&e&g&h&j,`,e1j1mQ1O+zS5`1R1SU8U5^5_5cS9z8W8XS:{9y9|Q;g:|R;v;hQ&`!TR,U&[R5l1[S%pz%uR0h+_Q&e!UR,`&fR,f&kT1k,e1mR,j&lQ,i&lR1t,jQ'o!yR-l'oQrOQ#bXT%ar#bQ!|TR'q!|Q#PUR's#PQ)r$sR.|)rQ#SVR'u#SQ#VWU'{#V'|-sQ'|#WR-s'}Q,y&{R2Q,yQ.c(nR3P.cQ.f(pS3S.f3TR3T.gQ-Q'RR2U-Qr_OXr!T!X#b%^&[&^&e&g&h&j,`,e1j1mU!mQ'R-QS#eZ%[Y#o_!m#e-}5OQ-}(_T5O0}5US#]W%wU(S#](T-tQ(T#^R-t(OQ,|'OR2S,|Q(`#hQ-w(XW.R(`-w2l6gQ2l-xR6g2mQ)d$iR.u)dQ$mhR)j$mQ$`cU)Y$`-oP>QQ/c*XU3{/c3}7VQ3}/eR7V3|Q*c$zR/q*cQ*l%OR/z*lQ4b0UR7c4bQ+l%zR0q+lQ4y0xS7q4y9lR9l7rQ+w&RR0{+wQ5U0}R7|5UQ1Z,RS5j1Z8`R8`5lQ0c+ZW4k0c4m7i9hQ4m0fQ7i4lR9h7jQ+`%pR0i+`Q1m,eR5z1mWqOXr#bQ&i!XQ*x%^Q,_&eQ,a&gQ,b&hQ,d&jQ1h,`S1k,e1mR5y1jQ%`oQ&m!]Q&p!_Q&r!`Q&t!aU'g!o5P5QQ+T%jQ+g%vQ+m%{Q,T&`Q,l&oY-]']'i'j'm8QQ-j'eQ/p*bQ0^+US1^,U,XQ1u,kQ1v,nQ1w,oQ2]-[[2_-_-`-c-i-k9wQ4d0_Q4p0lQ4t0sQ5d1TQ5n1`Q5x1iY6X2^2a2d2f2gQ6[2bQ7e4eQ7m4rQ7n4uQ7{5TQ8Z5eQ8a5mY8p6Y6^6`6b6cQ8r6]Q9i7kQ9m7sQ9}8[Q:S8bY:Z8q8u8w8y8zQ:]8tQ:q9jS:s9n9oQ;O:OW;S:[:`:b:dQ;U:_S;a:t:wQ;i;PU;j;T;X;ZQ;l;WS;r;c;dS;w;k;oQ;y;nS;};s;tQOQ>P>RR>Q>SloOXr!X#b%^&e&g&h&j,`,e1j1mQ!dPS#dZ#lQ&o!^U'Z!l4}8OQ't#QQ(w#yQ)h$kS,X&^&aQ,]&bQ,k&nQ,p&vQ-S'TQ.i(uQ.y)iQ0X+OQ0o+jQ1e,[Q2X-UQ2v.XQ3k.tQ4[/}Q5_1QQ5p1bQ5q1cQ5s1dQ5u1fQ5|1oQ6l2yQ6{3hQ8X5bQ8f5tQ8h5vQ8i5wQ9R6pQ9|8YR:U8g#UcOPXZr!X!^!l#b#l#y%^&^&a&b&e&g&h&j&n&v'T(u+O+j,[,`,e-U.X/}1Q1b1c1d1f1j1m1o2y4}5b5t5v5w6p8O8Y8gQ#WWQ#cYQ%bsQ%ctQ%euS'w#U'zQ'}#XQ(i#rQ(p#vQ(x#|Q(y#}Q(z$OQ({$PQ(|$QQ(}$RQ)O$SQ)P$TQ)Q$UQ)R$VQ)S$WQ)U$YQ)X$_Q)]$cW)g$k)i.t3hQ*{%dQ+a%qS,v&z2OQ-k'hS-p'x-rQ-u(QQ-z([Q.a(mQ.g(qQ.k TypeParamList TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . ?. PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewExpression new TypeArgList CompareOp < ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies in const CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXStartTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast ArrowFunction TypeParamList SequenceExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody MethodDeclaration AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",maxTerm:363,context:Wg,nodeProps:[["group",-26,6,14,16,62,199,203,206,207,209,212,215,226,228,234,236,238,240,243,249,255,257,259,261,263,265,266,"Statement",-32,10,11,25,28,29,35,45,48,49,51,56,64,72,76,78,80,81,103,104,113,114,131,134,136,137,138,139,141,142,162,163,165,"Expression",-23,24,26,30,34,36,38,166,168,170,171,173,174,175,177,178,179,181,182,183,193,195,197,198,"Type",-3,84,96,102,"ClassItem"],["openedBy",31,"InterpolationStart",50,"[",54,"{",69,"(",143,"JSXStartTag",155,"JSXStartTag JSXStartCloseTag"],["closedBy",33,"InterpolationEnd",44,"]",55,"}",70,")",144,"JSXSelfCloseEndTag JSXEndTag",160,"JSXEndTag"]],propSources:[Cg],skippedNodes:[0,3,4,269],repeatNodeCount:32,tokenData:"$>y(CSR!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tu>PuvBavwDxwxGgxyMvyz! Qz{!![{|!%O|}!&]}!O!%O!O!P!'g!P!Q!1w!Q!R#0t!R![#3T![!]#@T!]!^#Aa!^!_#Bk!_!`#GS!`!a#In!a!b#N{!b!c$$z!c!}>P!}#O$&U#O#P$'`#P#Q$,w#Q#R$.R#R#S>P#S#T$/`#T#o$0j#o#p$4z#p#q$5p#q#r$7Q#r#s$8^#s$f%Z$f$g+g$g#BY>P#BY#BZ$9h#BZ$IS>P$IS$I_$9h$I_$I|>P$I|$I}$P$JT$JU$9h$JU$KV>P$KV$KW$9h$KW&FU>P&FU&FV$9h&FV;'S>P;'S;=`BZ<%l?HT>P?HT?HU$9h?HUO>P(n%d_$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$d&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$d&j'z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU'z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$d&j'wpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU'wpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX'wp'z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z(CS+rq$d&j'wp'z!b'm(;dOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z(CS.ST'x#S$d&j'n(;dO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c(CS.n_$d&j'wp'z!b'n(;dOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`/x`$d&j!l$Ip'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S1V`#q$Id$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S2d_#q$Id$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$2b3l_'v$(n$d&j'z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k*r4r_$d&j'z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k)`5vX$d&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q)`6jT$_#t$d&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#t6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y#t7bO$_#t#t7eP;=`<%l6y)`7kP;=`<%l5q*r7w]$_#t$d&j'z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}%W8uZ'z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p%W9oU$_#t'z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}%W:UP;=`<%l8p*r:[P;=`<%l4k#%|:hg$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}st%Ztu`k$d&j'wp'z!b(U!LY't&;d$W#tOY%ZYZ&cZr%Zrs&}st%Ztu>Puw%Zwx(rx}%Z}!O@T!O!Q%Z!Q![>P![!^%Z!^!_*g!_!c%Z!c!}>P!}#O%Z#O#P&c#P#R%Z#R#S>P#S#T%Z#T#o>P#o#p*g#p$g%Z$g;'S>P;'S;=`BZ<%lO>P+d@`k$d&j'wp'z!b$W#tOY%ZYZ&cZr%Zrs&}st%Ztu@Tuw%Zwx(rx}%Z}!O@T!O!Q%Z!Q![@T![!^%Z!^!_*g!_!c%Z!c!}@T!}#O%Z#O#P&c#P#R%Z#R#S@T#S#T%Z#T#o@T#o#p*g#p$g%Z$g;'S@T;'S;=`BT<%lO@T+dBWP;=`<%l@T(CSB^P;=`<%l>P%#SBl`$d&j'wp'z!b#i$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Cn!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#SCy_$d&j#{$Id'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%DfETa(i%Z![!^%Z!^!_*g!_!c%Z!c!i#>Z!i#O%Z#O#P&c#P#R%Z#R#S#>Z#S#T%Z#T#Z#>Z#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#>fi$d&j'wp'z!bl$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#>Z![!^%Z!^!_*g!_!c%Z!c!i#>Z!i#O%Z#O#P&c#P#R%Z#R#S#>Z#S#T%Z#T#Z#>Z#Z#b%Z#b#c#5T#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%Gh#@b_!a$b$d&j#y%Puw%Zwx(rx}%Z}!O@T!O!Q%Z!Q![>P![!^%Z!^!_*g!_!c%Z!c!}>P!}#O%Z#O#P&c#P#R%Z#R#S>P#S#T%Z#T#o>P#o#p*g#p$f%Z$f$g+g$g#BY>P#BY#BZ$9h#BZ$IS>P$IS$I_$9h$I_$JT>P$JT$JU$9h$JU$KV>P$KV$KW$9h$KW&FU>P&FU&FV$9h&FV;'S>P;'S;=`BZ<%l?HT>P?HT?HU$9h?HUO>P(CS$=Uk$d&j'wp'z!b'n(;d(U!LY't&;d$W#tOY%ZYZ&cZr%Zrs&}st%Ztu>Puw%Zwx(rx}%Z}!O@T!O!Q%Z!Q![>P![!^%Z!^!_*g!_!c%Z!c!}>P!}#O%Z#O#P&c#P#R%Z#R#S>P#S#T%Z#T#o>P#o#p*g#p$g%Z$g;'S>P;'S;=`BZ<%lO>P",tokenizers:[Vg,Zg,2,3,4,5,6,7,8,9,10,11,12,13,Rg,new bi("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOq~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!O~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(T~~",141,326),new bi("j~RQYZXz{^~^O'q~~aP!P!Qd~iO'r~~",25,308)],topRules:{Script:[0,5],SingleExpression:[1,267],SingleClassItem:[2,268]},dialects:{jsx:13525,ts:13527},dynamicPrecedences:{76:1,78:1,163:1,191:1},specialized:[{term:312,get:i=>qg[i]||-1},{term:328,get:i=>Ug[i]||-1},{term:67,get:i=>Yg[i]||-1}],tokenPrec:13551});var _r=class{constructor(e,t,n){this.state=e,this.pos=t,this.explicit=n,this.abortListeners=[]}tokenBefore(e){let t=_(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),n=Math.max(t.from,this.pos-250),r=t.text.slice(n-t.from,this.pos-t.from),s=r.search(Ag(e,!1));return s<0?null:{from:n+s,to:this.pos,text:r.slice(s)}}get aborted(){return this.abortListeners==null}addEventListener(e,t){e=="abort"&&this.abortListeners&&this.abortListeners.push(t)}};function cf(i){let e=Object.keys(i).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function _g(i){let e=Object.create(null),t=Object.create(null);for(let{label:r}of i){e[r[0]]=!0;for(let s=1;stypeof r=="string"?{label:r}:r),[t,n]=e.every(r=>/^\w+$/.test(r.label))?[/\w*$/,/\w+$/]:_g(e);return r=>{let s=r.matchBefore(n);return s||r.explicit?{from:s?s.from:r.pos,options:e,validFor:t}:null}}function df(i,e){return t=>{for(let n=_(t.state).resolveInner(t.pos,-1);n;n=n.parent){if(i.indexOf(n.name)>-1)return null;if(n.type.isTop)break}return e(t)}}function Ag(i,e){var t;let{source:n}=i,r=e&&n[0]!="^",s=n[n.length-1]!="$";return!r&&!s?i:new RegExp(`${r?"^":""}(?:${n})${s?"$":""}`,(t=i.flags)!==null&&t!==void 0?t:i.ignoreCase?"i":"")}var jg=be.define();var Gg=v.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"\xB7\xB7\xB7"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'\u0192'"}},".cm-completionIcon-class":{"&:after":{content:"'\u25CB'"}},".cm-completionIcon-interface":{"&:after":{content:"'\u25CC'"}},".cm-completionIcon-variable":{"&:after":{content:"'\u{1D465}'"}},".cm-completionIcon-constant":{"&:after":{content:"'\u{1D436}'"}},".cm-completionIcon-type":{"&:after":{content:"'\u{1D461}'"}},".cm-completionIcon-enum":{"&:after":{content:"'\u222A'"}},".cm-completionIcon-property":{"&:after":{content:"'\u25A1'"}},".cm-completionIcon-keyword":{"&:after":{content:"'\u{1F511}\uFE0E'"}},".cm-completionIcon-namespace":{"&:after":{content:"'\u25A2'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}}),oo=class{constructor(e,t,n,r){this.field=e,this.line=t,this.from=n,this.to=r}},lo=class i{constructor(e,t,n){this.field=e,this.from=t,this.to=n}map(e){let t=e.mapPos(this.from,-1,ae.TrackDel),n=e.mapPos(this.to,1,ae.TrackDel);return t==null||n==null?null:new i(this.field,t,n)}},ao=class i{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let n=[],r=[t],s=e.doc.lineAt(t),O=/^\s*/.exec(s.text)[0];for(let l of this.lines){if(n.length){let a=O,h=/^\t*/.exec(l)[0].length;for(let c=0;cnew lo(l.field,r[l.line]+l.from,r[l.line]+l.to));return{text:n,ranges:o}}static parse(e){let t=[],n=[],r=[],s;for(let O of e.split(/\r\n?|\n/)){for(;s=/[#$]\{(?:(\d+)(?::([^}]*))?|([^}]*))\}/.exec(O);){let o=s[1]?+s[1]:null,l=s[2]||s[3]||"",a=-1;for(let h=0;h=a&&c.field++}r.push(new oo(a,n.length,s.index,s.index+l.length)),O=O.slice(0,s.index)+l+O.slice(s.index+s[0].length)}for(let o;o=/\\([{}])/.exec(O);){O=O.slice(0,o.index)+o[1]+O.slice(o.index+o[0].length);for(let l of r)l.line==n.length&&l.from>o.index&&(l.from--,l.to--)}n.push(O)}return new i(n,r)}},Eg=M.widget({widget:new class extends wt{toDOM(){let i=document.createElement("span");return i.className="cm-snippetFieldPosition",i}ignoreEvent(){return!1}}}),Mg=M.mark({class:"cm-snippetField"}),xi=class i{constructor(e,t){this.ranges=e,this.active=t,this.deco=M.set(e.map(n=>(n.from==n.to?Eg:Mg).range(n.from,n.to)))}map(e){let t=[];for(let n of this.ranges){let r=n.map(e);if(!r)return null;t.push(r)}return new i(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(n=>n.field==this.active&&n.from<=t.from&&n.to>=t.to))}},cn=j.define({map(i,e){return i&&i.map(e)}}),Ig=j.define(),hn=Qe.define({create(){return null},update(i,e){for(let t of e.effects){if(t.is(cn))return t.value;if(t.is(Ig)&&i)return new xi(i.ranges,t.value)}return i&&e.docChanged&&(i=i.map(e.changes)),i&&e.selection&&!i.selectionInsideField(e.selection)&&(i=null),i},provide:i=>v.decorations.from(i,e=>e?e.deco:M.none)});function ho(i,e){return Q.create(i.filter(t=>t.field==e).map(t=>Q.range(t.from,t.to)))}function Bg(i){let e=ao.parse(i);return(t,n,r,s)=>{let{text:O,ranges:o}=e.instantiate(t.state,r),l={changes:{from:r,to:s,insert:U.of(O)},scrollIntoView:!0,annotations:n?jg.of(n):void 0};if(o.length&&(l.selection=ho(o,0)),o.length>1){let a=new xi(o,0),h=l.effects=[cn.of(a)];t.state.field(hn,!1)===void 0&&h.push(j.appendConfig.of([hn,Fg,Jg,Gg]))}t.dispatch(t.state.update(l))}}function pf(i){return({state:e,dispatch:t})=>{let n=e.field(hn,!1);if(!n||i<0&&n.active==0)return!1;let r=n.active+i,s=i>0&&!n.ranges.some(O=>O.field==r+i);return t(e.update({selection:ho(n.ranges,r),effects:cn.of(s?null:new xi(n.ranges,r))})),!0}}var Dg=({state:i,dispatch:e})=>i.field(hn,!1)?(e(i.update({effects:cn.of(null)})),!0):!1,Lg=pf(1),Ng=pf(-1);var Hg=[{key:"Tab",run:Lg,shift:Ng},{key:"Escape",run:Dg}],ff=W.define({combine(i){return i.length?i[0]:Hg}}),Fg=He.highest(tt.compute([ff],i=>i.facet(ff)));function Ae(i,e){return Object.assign(Object.assign({},e),{apply:Bg(i)})}var Jg=v.domEventHandlers({mousedown(i,e){let t=e.state.field(hn,!1),n;if(!t||(n=e.posAtCoords({x:i.clientX,y:i.clientY}))==null)return!1;let r=t.ranges.find(s=>s.from<=n&&s.to>=n);return!r||r.field==t.active?!1:(e.dispatch({selection:ho(t.ranges,r.field),effects:cn.of(t.ranges.some(s=>s.field>r.field)?new xi(t.ranges,r.field):null)}),!0)}});var $f=new class extends Ge{};$f.startSide=1;$f.endSide=-1;var z1=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent);var Kg=[Ae("function ${name}(${params}) {\n ${}\n}",{label:"function",detail:"definition",type:"keyword"}),Ae("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:"for",detail:"loop",type:"keyword"}),Ae("for (let ${name} of ${collection}) {\n ${}\n}",{label:"for",detail:"of loop",type:"keyword"}),Ae("do {\n ${}\n} while (${})",{label:"do",detail:"loop",type:"keyword"}),Ae("while (${}) {\n ${}\n}",{label:"while",detail:"loop",type:"keyword"}),Ae(`try { +`);n>-1&&(t=t.slice(0,n))}return e+t.length<=this.to?t:t.slice(0,this.to-e)}nextLine(){let e=this.parsedPos,t=this.lineAfter(e),n=e+t.length;for(let r=this.rangeIndex;;){let s=this.ranges[r].to;if(s>=n||(t=t.slice(0,s-(n-t.length)),r++,r==this.ranges.length))break;let o=this.ranges[r].from,O=this.lineAfter(o);t+=O,n=o+O.length}return{line:t,end:n}}skipGapsTo(e,t,n){for(;;){let r=this.ranges[this.rangeIndex].to,s=e+t;if(n>0?r>s:r>=s)break;let o=this.ranges[++this.rangeIndex].from;t+=o-r}return t}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){s=this.skipGapsTo(t,s,1),t+=s;let o=this.chunk.length;s=this.skipGapsTo(n,s,-1),n+=s,r+=this.chunk.length-o}return this.chunk.push(e,t,n,r),s}parseLine(e){let{line:t,end:n}=this.nextLine(),r=0,{streamParser:s}=this.lang,o=new Pr(t,e?e.state.tabSize:4,e?Wt(e.state):2);if(o.eol())s.blankLine(this.state,o.indentUnit);else for(;!o.eol();){let O=Mh(s.token,o,this.state);if(O&&(r=this.emitToken(this.lang.tokenTable.resolve(O),this.parsedPos+o.start,this.parsedPos+o.pos,4,r)),o.start>1e4)break}this.parsedPos=n,this.moveRangeIndex(),this.parsedPose.start)return r}throw new Error("Stream parser failed to advance stream.")}var _o=Object.create(null),ln=[F.none],Dm=new pt(ln),Rh=[],Lh=Object.create(null);for(let[i,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Lh[i]=Dh(_o,e);var wr=class{constructor(e){this.extra=e,this.table=Object.assign(Object.create(null),Lh)}resolve(e){return e?this.table[e]||(this.table[e]=Dh(this.extra,e)):0}},Bm=new wr(_o);function To(i,e){Rh.indexOf(i)>-1||(Rh.push(i),console.warn(e))}function Dh(i,e){let t=null;for(let s of e.split(".")){let o=i[s]||u[s];o?typeof o=="function"?t?t=o(t):To(s,`Modifier ${s} used at start of tag`):t?To(s,`Tag ${s} used as modifier`):t=o:To(s,`Unknown highlighting tag ${s}`)}if(!t)return 0;let n=e.replace(/ /g,"_"),r=F.define({id:ln.length,name:n,props:[ne({[n]:t})]});return ln.push(r),r.id}function Nm(i){let e=F.define({id:ln.length,name:"Document",props:[gt.add(()=>i)],top:!0});return ln.push(e),e}var Fm=i=>{let{state:e}=i,t=e.doc.lineAt(e.selection.main.from),n=Lo(i.state,t.from);return n.line?Hm(i):n.block?Jm(i):!1};function Mo(i,e){return({state:t,dispatch:n})=>{if(t.readOnly)return!1;let r=i(e,t);return r?(n(t.update(r)),!0):!1}}var Hm=Mo(i$,0);var Km=Mo(tc,0);var Jm=Mo((i,e)=>tc(i,e,t$(e)),0);function Lo(i,e){let t=i.languageDataAt("commentTokens",e);return t.length?t[0]:{}}var cn=50;function e$(i,{open:e,close:t},n,r){let s=i.sliceDoc(n-cn,n),o=i.sliceDoc(r,r+cn),O=/\s*$/.exec(s)[0].length,l=/^\s*/.exec(o)[0].length,a=s.length-O;if(s.slice(a-e.length,a)==e&&o.slice(l,l+t.length)==t)return{open:{pos:n-O,margin:O&&1},close:{pos:r+l,margin:l&&1}};let h,c;r-n<=2*cn?h=c=i.sliceDoc(n,r):(h=i.sliceDoc(n,n+cn),c=i.sliceDoc(r-cn,r));let f=/^\s*/.exec(h)[0].length,d=/\s*$/.exec(c)[0].length,p=c.length-d-t.length;return h.slice(f,f+e.length)==e&&c.slice(p,p+t.length)==t?{open:{pos:n+f+e.length,margin:/\s/.test(h.charAt(f+e.length))?1:0},close:{pos:r-d-t.length,margin:/\s/.test(c.charAt(p-1))?1:0}}:null}function t$(i){let e=[];for(let t of i.selection.ranges){let n=i.doc.lineAt(t.from),r=t.to<=n.to?n:i.doc.lineAt(t.to),s=e.length-1;s>=0&&e[s].to>n.from?e[s].to=r.to:e.push({from:n.from+/^\s*/.exec(n.text)[0].length,to:r.to})}return e}function tc(i,e,t=e.selection.ranges){let n=t.map(s=>Lo(e,s.from).block);if(!n.every(s=>s))return null;let r=t.map((s,o)=>e$(e,n[o],s.from,s.to));if(i!=2&&!r.every(s=>s))return{changes:e.changes(t.map((s,o)=>r[o]?[]:[{from:s.from,insert:n[o].open+" "},{from:s.to,insert:" "+n[o].close}]))};if(i!=1&&r.some(s=>s)){let s=[];for(let o=0,O;or&&(s==o||o>c.from)){r=c.from;let f=/^\s*/.exec(c.text)[0].length,d=f==c.length,p=c.text.slice(f,f+a.length)==a?f:-1;fs.comment<0&&(!s.empty||s.single))){let s=[];for(let{line:O,token:l,indent:a,empty:h,single:c}of n)(c||!h)&&s.push({from:O.from+a,insert:l+" "});let o=e.changes(s);return{changes:o,selection:e.selection.map(o,1)}}else if(i!=1&&n.some(s=>s.comment>=0)){let s=[];for(let{line:o,comment:O,token:l}of n)if(O>=0){let a=o.from+O,h=a+l.length;o.text[h-o.from]==" "&&h++,s.push({from:a,to:h})}return{changes:s}}return null}var jo=we.define(),n$=we.define(),r$=W.define(),ic=W.define({combine(i){return bt(i,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(n,r)=>e(n,r)||t(n,r)})}});function s$(i){let e=0;return i.iterChangedRanges((t,n)=>e=n),e}var nc=ge.define({create(){return Jt.empty},update(i,e){let t=e.state.facet(ic),n=e.annotation(jo);if(n){let l=e.docChanged?S.single(s$(e.changes)):void 0,a=Ne.fromTransaction(e,l),h=n.side,c=h==0?i.undone:i.done;return a?c=zr(c,c.length,t.minDepth,a):c=Oc(c,e.startState.selection),new Jt(h==0?n.rest:c,h==0?c:n.rest)}let r=e.annotation(n$);if((r=="full"||r=="before")&&(i=i.isolate()),e.annotation(se.addToHistory)===!1)return e.changes.empty?i:i.addMapping(e.changes.desc);let s=Ne.fromTransaction(e),o=e.annotation(se.time),O=e.annotation(se.userEvent);return s?i=i.addChanges(s,o,O,t,e):e.selection&&(i=i.addSelection(e.startState.selection,o,O,t.newGroupDelay)),(r=="full"||r=="after")&&(i=i.isolate()),i},toJSON(i){return{done:i.done.map(e=>e.toJSON()),undone:i.undone.map(e=>e.toJSON())}},fromJSON(i){return new Jt(i.done.map(Ne.fromJSON),i.undone.map(Ne.fromJSON))}});function rc(i={}){return[nc,ic.of(i),v.domEventHandlers({beforeinput(e,t){let n=e.inputType=="historyUndo"?sc:e.inputType=="historyRedo"?Eo:null;return n?(e.preventDefault(),n(t)):!1}})]}function Xr(i,e){return function({state:t,dispatch:n}){if(!e&&t.readOnly)return!1;let r=t.field(nc,!1);if(!r)return!1;let s=r.pop(i,t,e);return s?(n(s),!0):!1}}var sc=Xr(0,!1),Eo=Xr(1,!1),o$=Xr(0,!0),O$=Xr(1,!0);var Ne=class i{constructor(e,t,n,r,s){this.changes=e,this.effects=t,this.mapped=n,this.startSelection=r,this.selectionsAfter=s}setSelAfter(e){return new i(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,n;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(n=this.startSelection)===null||n===void 0?void 0:n.toJSON(),selectionsAfter:this.selectionsAfter.map(r=>r.toJSON())}}static fromJSON(e){return new i(e.changes&&$e.fromJSON(e.changes),[],e.mapped&&ht.fromJSON(e.mapped),e.startSelection&&S.fromJSON(e.startSelection),e.selectionsAfter.map(S.fromJSON))}static fromTransaction(e,t){let n=Ee;for(let r of e.startState.facet(r$)){let s=r(e);s.length&&(n=n.concat(s))}return!n.length&&e.changes.empty?null:new i(e.changes.invert(e.startState.doc),n,void 0,t||e.startState.selection,Ee)}static selection(e){return new i(void 0,Ee,void 0,void 0,e)}};function zr(i,e,t,n){let r=e+1>t+20?e-t-1:0,s=i.slice(r,e);return s.push(n),s}function l$(i,e){let t=[],n=!1;return i.iterChangedRanges((r,s)=>t.push(r,s)),e.iterChangedRanges((r,s,o,O)=>{for(let l=0;l=a&&o<=h&&(n=!0)}}),n}function a$(i,e){return i.ranges.length==e.ranges.length&&i.ranges.filter((t,n)=>t.empty!=e.ranges[n].empty).length===0}function oc(i,e){return i.length?e.length?i.concat(e):i:e}var Ee=[],h$=200;function Oc(i,e){if(i.length){let t=i[i.length-1],n=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-h$));return n.length&&n[n.length-1].eq(e)?i:(n.push(e),zr(i,i.length-1,1e9,t.setSelAfter(n)))}else return[Ne.selection([e])]}function c$(i){let e=i[i.length-1],t=i.slice();return t[i.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function Ao(i,e){if(!i.length)return i;let t=i.length,n=Ee;for(;t;){let r=f$(i[t-1],e,n);if(r.changes&&!r.changes.empty||r.effects.length){let s=i.slice(0,t);return s[t-1]=r,s}else e=r.mapped,t--,n=r.selectionsAfter}return n.length?[Ne.selection(n)]:Ee}function f$(i,e,t){let n=oc(i.selectionsAfter.length?i.selectionsAfter.map(O=>O.map(e)):Ee,t);if(!i.changes)return Ne.selection(n);let r=i.changes.map(e),s=e.mapDesc(i.changes,!0),o=i.mapped?i.mapped.composeDesc(s):s;return new Ne(r,E.mapEffects(i.effects,e),o,i.startSelection.map(s),n)}var u$=/^(input\.type|delete)($|\.)/,Jt=class i{constructor(e,t,n=0,r=void 0){this.done=e,this.undone=t,this.prevTime=n,this.prevUserEvent=r}isolate(){return this.prevTime?new i(this.done,this.undone):this}addChanges(e,t,n,r,s){let o=this.done,O=o[o.length-1];return O&&O.changes&&!O.changes.empty&&e.changes&&(!n||u$.test(n))&&(!O.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?i.moveByChar(t,e):Wr(t,e))}function pe(i){return i.textDirectionAt(i.state.selection.main.head)==K.LTR}var hc=i=>ac(i,!pe(i)),cc=i=>ac(i,pe(i));function fc(i,e){return Fe(i,t=>t.empty?i.moveByGroup(t,e):Wr(t,e))}var d$=i=>fc(i,!pe(i)),p$=i=>fc(i,pe(i));var $0=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function m$(i,e,t){if(e.type.prop(t))return!0;let n=e.to-e.from;return n&&(n>2||/[^\s,.;:]/.test(i.sliceDoc(e.from,e.to)))||e.firstChild}function Rr(i,e,t){let n=A(i).resolveInner(e.head),r=t?R.closedBy:R.openedBy;for(let l=e.head;;){let a=t?n.childAfter(l):n.childBefore(l);if(!a)break;m$(i,a,r)?n=a:l=t?a.to:a.from}let s=n.type.prop(r),o,O;return s&&(o=t?Be(i,n.from,1):Be(i,n.to,-1))&&o.matched?O=t?o.end.to:o.end.from:O=t?n.to:n.from,S.cursor(O,t?-1:1)}var $$=i=>Fe(i,e=>Rr(i.state,e,!pe(i))),g$=i=>Fe(i,e=>Rr(i.state,e,pe(i)));function uc(i,e){return Fe(i,t=>{if(!t.empty)return Wr(t,e);let n=i.moveVertically(t,e);return n.head!=t.head?n:i.moveToLineBoundary(t,e)})}var dc=i=>uc(i,!1),pc=i=>uc(i,!0);function mc(i){let e=i.scrollDOM.clientHeighto.empty?i.moveVertically(o,e,t.height):Wr(o,e));if(r.eq(n.selection))return!1;let s;if(t.selfScroll){let o=i.coordsAtPos(n.selection.main.head),O=i.scrollDOM.getBoundingClientRect(),l=O.top+t.marginTop,a=O.bottom-t.marginBottom;o&&o.top>l&&o.bottom$c(i,!1),Go=i=>$c(i,!0);function Yt(i,e,t){let n=i.lineBlockAt(e.head),r=i.moveToLineBoundary(e,t);if(r.head==e.head&&r.head!=(t?n.to:n.from)&&(r=i.moveToLineBoundary(e,t,!1)),!t&&r.head==n.from&&n.length){let s=/^\s*/.exec(i.state.sliceDoc(n.from,Math.min(n.from+100,n.to)))[0].length;s&&e.head!=n.from+s&&(r=S.cursor(n.from+s))}return r}var S$=i=>Fe(i,e=>Yt(i,e,!0)),Q$=i=>Fe(i,e=>Yt(i,e,!1)),y$=i=>Fe(i,e=>Yt(i,e,!pe(i))),b$=i=>Fe(i,e=>Yt(i,e,pe(i))),P$=i=>Fe(i,e=>S.cursor(i.lineBlockAt(e.head).from,1)),x$=i=>Fe(i,e=>S.cursor(i.lineBlockAt(e.head).to,-1));function w$(i,e,t){let n=!1,r=Pi(i.selection,s=>{let o=Be(i,s.head,-1)||Be(i,s.head,1)||s.head>0&&Be(i,s.head-1,1)||s.headw$(i,e,!1);function Ge(i,e){let t=Pi(i.state.selection,n=>{let r=e(n);return S.range(n.anchor,r.head,r.goalColumn,r.bidiLevel||void 0)});return t.eq(i.state.selection)?!1:(i.dispatch(at(i.state,t)),!0)}function gc(i,e){return Ge(i,t=>i.moveByChar(t,e))}var Sc=i=>gc(i,!pe(i)),Qc=i=>gc(i,pe(i));function yc(i,e){return Ge(i,t=>i.moveByGroup(t,e))}var v$=i=>yc(i,!pe(i)),T$=i=>yc(i,pe(i));var z$=i=>Ge(i,e=>Rr(i.state,e,!pe(i))),X$=i=>Ge(i,e=>Rr(i.state,e,pe(i)));function bc(i,e){return Ge(i,t=>i.moveVertically(t,e))}var Pc=i=>bc(i,!1),xc=i=>bc(i,!0);function wc(i,e){return Ge(i,t=>i.moveVertically(t,e,mc(i).height))}var Nh=i=>wc(i,!1),Fh=i=>wc(i,!0),W$=i=>Ge(i,e=>Yt(i,e,!0)),R$=i=>Ge(i,e=>Yt(i,e,!1)),Z$=i=>Ge(i,e=>Yt(i,e,!pe(i))),Y$=i=>Ge(i,e=>Yt(i,e,pe(i))),V$=i=>Ge(i,e=>S.cursor(i.lineBlockAt(e.head).from)),C$=i=>Ge(i,e=>S.cursor(i.lineBlockAt(e.head).to)),Hh=({state:i,dispatch:e})=>(e(at(i,{anchor:0})),!0),Kh=({state:i,dispatch:e})=>(e(at(i,{anchor:i.doc.length})),!0),Jh=({state:i,dispatch:e})=>(e(at(i,{anchor:i.selection.main.anchor,head:0})),!0),ec=({state:i,dispatch:e})=>(e(at(i,{anchor:i.selection.main.anchor,head:i.doc.length})),!0),q$=({state:i,dispatch:e})=>(e(i.update({selection:{anchor:0,head:i.doc.length},userEvent:"select"})),!0),U$=({state:i,dispatch:e})=>{let t=Zr(i).map(({from:n,to:r})=>S.range(n,Math.min(r+1,i.doc.length)));return e(i.update({selection:S.create(t),userEvent:"select"})),!0},_$=({state:i,dispatch:e})=>{let t=Pi(i.selection,n=>{var r;let s=A(i).resolveStack(n.from,1);for(let o=s;o;o=o.next){let{node:O}=o;if((O.from=n.to||O.to>n.to&&O.from<=n.from)&&(!((r=O.parent)===null||r===void 0)&&r.parent))return S.range(O.to,O.from)}return n});return e(at(i,t)),!0},A$=({state:i,dispatch:e})=>{let t=i.selection,n=null;return t.ranges.length>1?n=S.create([t.main]):t.main.empty||(n=S.create([S.cursor(t.main.head)])),n?(e(at(i,n)),!0):!1};function fn(i,e){if(i.state.readOnly)return!1;let t="delete.selection",{state:n}=i,r=n.changeByRange(s=>{let{from:o,to:O}=s;if(o==O){let l=e(s);lo&&(t="delete.forward",l=Tr(i,l,!0)),o=Math.min(o,l),O=Math.max(O,l)}else o=Tr(i,o,!1),O=Tr(i,O,!0);return o==O?{range:s}:{changes:{from:o,to:O},range:S.cursor(o,or(i)))n.between(e,e,(r,s)=>{re&&(e=t?s:r)});return e}var kc=(i,e)=>fn(i,t=>{let n=t.from,{state:r}=i,s=r.doc.lineAt(n),o,O;if(!e&&n>s.from&&nkc(i,!1),vc=i=>kc(i,!0),Tc=(i,e)=>fn(i,t=>{let n=t.head,{state:r}=i,s=r.doc.lineAt(n),o=r.charCategorizer(n);for(let O=null;;){if(n==(e?s.to:s.from)){n==t.head&&s.number!=(e?r.doc.lines:1)&&(n+=e?1:-1);break}let l=fe(s.text,n-s.from,e)+s.from,a=s.text.slice(Math.min(n,l)-s.from,Math.max(n,l)-s.from),h=o(a);if(O!=null&&h!=O)break;(a!=" "||n!=t.head)&&(O=h),n=l}return n}),zc=i=>Tc(i,!1),j$=i=>Tc(i,!0),E$=i=>fn(i,e=>{let t=i.lineBlockAt(e.head).to;return e.headfn(i,e=>{let t=i.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),I$=i=>fn(i,e=>{let t=i.moveToLineBoundary(e,!0).head;return e.head{if(i.readOnly)return!1;let t=i.changeByRange(n=>({changes:{from:n.from,to:n.to,insert:q.of(["",""])},range:S.cursor(n.from)}));return e(i.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},L$=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=i.changeByRange(n=>{if(!n.empty||n.from==0||n.from==i.doc.length)return{range:n};let r=n.from,s=i.doc.lineAt(r),o=r==s.from?r-1:fe(s.text,r-s.from,!1)+s.from,O=r==s.to?r+1:fe(s.text,r-s.from,!0)+s.from;return{changes:{from:o,to:O,insert:i.doc.slice(r,O).append(i.doc.slice(o,r))},range:S.cursor(O)}});return t.changes.empty?!1:(e(i.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function Zr(i){let e=[],t=-1;for(let n of i.selection.ranges){let r=i.doc.lineAt(n.from),s=i.doc.lineAt(n.to);if(!n.empty&&n.to==s.from&&(s=i.doc.lineAt(n.to-1)),t>=r.number){let o=e[e.length-1];o.to=s.to,o.ranges.push(n)}else e.push({from:r.from,to:s.to,ranges:[n]});t=s.number+1}return e}function Xc(i,e,t){if(i.readOnly)return!1;let n=[],r=[];for(let s of Zr(i)){if(t?s.to==i.doc.length:s.from==0)continue;let o=i.doc.lineAt(t?s.to+1:s.from-1),O=o.length+1;if(t){n.push({from:s.to,to:o.to},{from:s.from,insert:o.text+i.lineBreak});for(let l of s.ranges)r.push(S.range(Math.min(i.doc.length,l.anchor+O),Math.min(i.doc.length,l.head+O)))}else{n.push({from:o.from,to:s.from},{from:s.to,insert:i.lineBreak+o.text});for(let l of s.ranges)r.push(S.range(l.anchor-O,l.head-O))}}return n.length?(e(i.update({changes:n,scrollIntoView:!0,selection:S.create(r,i.selection.mainIndex),userEvent:"move.line"})),!0):!1}var D$=({state:i,dispatch:e})=>Xc(i,e,!1),B$=({state:i,dispatch:e})=>Xc(i,e,!0);function Wc(i,e,t){if(i.readOnly)return!1;let n=[];for(let r of Zr(i))t?n.push({from:r.from,insert:i.doc.slice(r.from,r.to)+i.lineBreak}):n.push({from:r.to,insert:i.lineBreak+i.doc.slice(r.from,r.to)});return e(i.update({changes:n,scrollIntoView:!0,userEvent:"input.copyline"})),!0}var N$=({state:i,dispatch:e})=>Wc(i,e,!1),F$=({state:i,dispatch:e})=>Wc(i,e,!0),H$=i=>{if(i.state.readOnly)return!1;let{state:e}=i,t=e.changes(Zr(e).map(({from:r,to:s})=>(r>0?r--:si.moveVertically(r,!0)).map(t);return i.dispatch({changes:t,selection:n,scrollIntoView:!0,userEvent:"delete.line"}),!0};function K$(i,e){if(/\(\)|\[\]|\{\}/.test(i.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=A(i).resolveInner(e),n=t.childBefore(e),r=t.childAfter(e),s;return n&&r&&n.to<=e&&r.from>=e&&(s=n.type.prop(R.closedBy))&&s.indexOf(r.name)>-1&&i.doc.lineAt(n.to).from==i.doc.lineAt(r.from).from&&!/\S/.test(i.sliceDoc(n.to,r.from))?{from:n.to,to:r.from}:null}var J$=Rc(!1),eg=Rc(!0);function Rc(i){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=e.changeByRange(r=>{let{from:s,to:o}=r,O=e.doc.lineAt(s),l=!i&&s==o&&K$(e,s);i&&(s=o=(o<=O.to?O:e.doc.lineAt(o)).to);let a=new Kt(e,{simulateBreak:s,simulateDoubleBreak:!!l}),h=Co(a,s);for(h==null&&(h=ke(/^\s*/.exec(e.doc.lineAt(s).text)[0],e.tabSize));oO.from&&s{let r=[];for(let o=n.from;o<=n.to;){let O=i.doc.lineAt(o);O.number>t&&(n.empty||n.to>O.from)&&(e(O,r,n),t=O.number),o=O.to+1}let s=i.changes(r);return{changes:r,range:S.range(s.mapPos(n.anchor,1),s.mapPos(n.head,1))}})}var tg=({state:i,dispatch:e})=>{if(i.readOnly)return!1;let t=Object.create(null),n=new Kt(i,{overrideIndentation:s=>{let o=t[s];return o??-1}}),r=Do(i,(s,o,O)=>{let l=Co(n,s.from);if(l==null)return;/\S/.test(s.text)||(l=0);let a=/^\s*/.exec(s.text)[0],h=an(i,l);(a!=h||O.fromi.readOnly?!1:(e(i.update(Do(i,(t,n)=>{n.push({from:t.from,insert:i.facet(Rt)})}),{userEvent:"input.indent"})),!0),Yc=({state:i,dispatch:e})=>i.readOnly?!1:(e(i.update(Do(i,(t,n)=>{let r=/^\s*/.exec(t.text)[0];if(!r)return;let s=ke(r,i.tabSize),o=0,O=an(i,Math.max(0,s-Wt(i)));for(;o({mac:i.key,run:i.run,shift:i.shift}))),Bo=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:$$,shift:z$},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:g$,shift:X$},{key:"Alt-ArrowUp",run:D$},{key:"Shift-Alt-ArrowUp",run:N$},{key:"Alt-ArrowDown",run:B$},{key:"Shift-Alt-ArrowDown",run:F$},{key:"Escape",run:A$},{key:"Mod-Enter",run:eg},{key:"Alt-l",mac:"Ctrl-l",run:U$},{key:"Mod-i",run:_$,preventDefault:!0},{key:"Mod-[",run:Yc},{key:"Mod-]",run:Zc},{key:"Mod-Alt-\\",run:tg},{key:"Shift-Mod-k",run:H$},{key:"Shift-Mod-\\",run:k$},{key:"Mod-/",run:Fm},{key:"Alt-A",run:Km}].concat(ng),Vc={key:"Tab",run:Zc,shift:Yc};var rg="#e5c07b",Cc="#e06c75",sg="#56b6c2",og="#ffffff",Yr="#abb2bf",Fo="#7d8799",Og="#61afef",lg="#98c379",qc="#d19a66",ag="#c678dd",hg="#21252b",Uc="#2c313a",_c="#282c34",No="#353a42",cg="#3E4451",Ac="#528bff";var jc=v.theme({"&":{color:Yr,backgroundColor:_c},".cm-content":{caretColor:Ac},".cm-cursor, .cm-dropCursor":{borderLeftColor:Ac},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:cg},".cm-panels":{backgroundColor:hg,color:Yr},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:_c,color:Fo,border:"none"},".cm-activeLineGutter":{backgroundColor:Uc},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:No},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:No,borderBottomColor:No},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:Uc,color:Yr}}},{dark:!0}),Ec=St.define([{tag:u.keyword,color:ag},{tag:[u.name,u.deleted,u.character,u.propertyName,u.macroName],color:Cc},{tag:[u.function(u.variableName),u.labelName],color:Og},{tag:[u.color,u.constant(u.name),u.standard(u.name)],color:qc},{tag:[u.definition(u.name),u.separator],color:Yr},{tag:[u.typeName,u.className,u.number,u.changed,u.annotation,u.modifier,u.self,u.namespace],color:rg},{tag:[u.operator,u.operatorKeyword,u.url,u.escape,u.regexp,u.link,u.special(u.string)],color:sg},{tag:[u.meta,u.comment],color:Fo},{tag:u.strong,fontWeight:"bold"},{tag:u.emphasis,fontStyle:"italic"},{tag:u.strikethrough,textDecoration:"line-through"},{tag:u.link,color:Fo,textDecoration:"underline"},{tag:u.heading,fontWeight:"bold",color:Cc},{tag:[u.atom,u.bool,u.special(u.variableName)],color:qc},{tag:[u.processingInstruction,u.string,u.inserted],color:lg},{tag:u.invalid,color:og}]);var fg=St.define([{tag:u.meta,color:"#388938"},{tag:u.link,textDecoration:"underline"},{tag:u.heading,textDecoration:"underline",fontWeight:"bold"},{tag:u.emphasis,fontStyle:"italic"},{tag:u.strong,fontWeight:"bold"},{tag:u.strikethrough,textDecoration:"line-through"},{tag:u.keyword,color:"#708"},{tag:[u.atom,u.bool,u.url,u.contentSeparator,u.labelName],color:"#219"},{tag:[u.literal,u.inserted],color:"#164"},{tag:[u.string,u.deleted],color:"#a11"},{tag:[u.regexp,u.escape,u.special(u.string)],color:"#e40"},{tag:u.definition(u.variableName),color:"#00f"},{tag:u.local(u.variableName),color:"#30a"},{tag:[u.typeName,u.namespace],color:"#085"},{tag:u.className,color:"#167"},{tag:[u.special(u.variableName),u.macroName],color:"#256"},{tag:u.definition(u.propertyName),color:"#00c"},{tag:u.compareOperator,color:"#708"},{tag:u.comment,color:"#940"},{tag:u.invalid,color:"#f00"}]),ug={"&":{backgroundColor:"#FFF",color:"#000"},"&.cm-focused":{outline:"none"},".cm-line":{lineHeight:"1.6"}};function Gc(i){let e=document.documentElement.classList.contains("dark-mode"),t=e?jc:v.theme(ug),n=e?Ec:fg,r={darkModeActive:e,registerViewTheme(s){let o=s();o&&(t=v.theme(o))},registerHighlightStyle(s){let o=s(u)||[];o.length&&(n=St.define(o))}};return window.$events.emitPublic(i,"library-cm6::configure-theme",r),[t,qo(n)]}function Ic(i){return[Gc(i),dh(),lh(),fh(),Gh(),uh()]}function dg(){let i=new ct,e={focus(t,n){n.dispatch({effects:i.reconfigure([lo(),Oo()])})},blur(t,n){n.dispatch({effects:i.reconfigure([])})}};return[i.of([]),v.domEventHandlers(e)]}function Ho(i){return[...Ic(i),dg(),st.of([...Bo]),j.readOnly.of(!0)]}function Vr(i){return[...Ic(i),lo(),Oo(),rc(),st.of([...Bo,...lc,Vc]),v.lineWrapping]}var eO=class i{constructor(e,t,n,r,s,o,O,l,a,h=0,c){this.p=e,this.stack=t,this.state=n,this.reducePos=r,this.pos=s,this.score=o,this.buffer=O,this.bufferBase=l,this.curContext=a,this.lookAhead=h,this.parent=c}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,n=0){let r=e.parser.context;return new i(e,[],t,n,n,0,[],0,r?new Cr(r,r.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let n=e>>19,r=e&65535,{parser:s}=this.p,o=s.dynamicPrecedence(r);if(o&&(this.score+=o),n==0){this.pushState(s.getGoto(this.state,r,!0),this.reducePos),r=2e3&&!(!((t=this.p.parser.nodeSet.types[r])===null||t===void 0)&&t.isAnonymous)&&(l==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=a):this.p.lastBigReductionSizeO;)this.stack.pop();this.reduceContext(r,l)}storeNode(e,t,n,r=4,s=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&o.buffer[O-4]==0&&o.buffer[O-1]>-1){if(t==n)return;if(o.buffer[O-2]>=t){o.buffer[O-2]=n;return}}}if(!s||this.pos==n)this.buffer.push(e,t,n,r);else{let o=this.buffer.length;if(o>0&&this.buffer[o-4]!=0)for(;o>0&&this.buffer[o-2]>n;)this.buffer[o]=this.buffer[o-4],this.buffer[o+1]=this.buffer[o-3],this.buffer[o+2]=this.buffer[o-2],this.buffer[o+3]=this.buffer[o-1],o-=4,r>4&&(r-=4);this.buffer[o]=e,this.buffer[o+1]=t,this.buffer[o+2]=n,this.buffer[o+3]=r}}shift(e,t,n,r){if(e&131072)this.pushState(e&65535,this.pos);else if(e&262144)this.pos=r,this.shiftContext(t,n),t<=this.p.parser.maxNode&&this.buffer.push(t,n,r,4);else{let s=e,{parser:o}=this.p;(r>this.pos||t<=o.maxNode)&&(this.pos=r,o.stateFlag(s,1)||(this.reducePos=r)),this.pushState(s,n),this.shiftContext(t,n),t<=o.maxNode&&this.buffer.push(t,n,r,4)}}apply(e,t,n,r){e&65536?this.reduce(e):this.shift(e,t,n,r)}useNode(e,t){let n=this.p.reused.length-1;(n<0||this.p.reused[n]!=e)&&(this.p.reused.push(e),n++);let r=this.pos;this.reducePos=this.pos=r+e.length,this.pushState(t,r),this.buffer.push(n,r,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(;t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let n=e.buffer.slice(t),r=e.bufferBase+t;for(;e&&r==e.bufferBase;)e=e.parent;return new i(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,n,r,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let n=e<=this.p.parser.maxNode;n&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,n?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new tO(this);;){let n=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(n==0)return!1;if(!(n&65536))return!0;t.reduce(n)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let r=[];for(let s=0,o;sl&1&&O==o)||r.push(t[s],o)}t=r}let n=[];for(let r=0;r>19,r=t&65535,s=this.stack.length-n*3;if(s<0||e.getGoto(this.stack[s],r,!1)<0){let o=this.findForcedReduction();if(o==null)return!1;t=o}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],n=(r,s)=>{if(!t.includes(r))return t.push(r),e.allActions(r,o=>{if(!(o&393216))if(o&65536){let O=(o>>19)-s;if(O>1){let l=o&65535,a=this.stack.length-O*3;if(a>=0&&e.getGoto(this.stack[a],l,!1)>=0)return O<<19|65536|l}}else{let O=n(o,s+1);if(O!=null)return O}})};return n(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;tthis.lookAhead&&(this.emitLookAhead(),this.lookAhead=e)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}},Cr=class{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}},tO=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,n=e>>19;n==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(n-1)*3;let r=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=r}},iO=class i{constructor(e,t,n){this.stack=e,this.pos=t,this.index=n,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new i(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new i(this.stack,this.pos,this.index)}};function un(i,e=Uint16Array){if(typeof i!="string")return i;let t=null;for(let n=0,r=0;n=92&&o--,o>=34&&o--;let l=o-32;if(l>=46&&(l-=46,O=!0),s+=l,O)break;s*=46}t?t[r++]=s:t=new e(s)}return t}var xi=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},Mc=new xi,nO=class{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=Mc,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let n=this.range,r=this.rangeIndex,s=this.pos+e;for(;sn.to:s>=n.to;){if(r==this.ranges.length-1)return null;let o=this.ranges[++r];s+=o.from-n.to,n=o}return s}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,n,r;if(t>=0&&t=this.chunk2Pos&&nO.to&&(this.chunk2=this.chunk2.slice(0,O.to-n)),r=this.chunk2.charCodeAt(0)}}return n>=this.token.lookAhead&&(this.token.lookAhead=n+1),r}acceptToken(e,t=0){let n=t?this.resolveOffset(t,-1):this.pos;if(n==null||n=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=Mc,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let n="";for(let r of this.ranges){if(r.from>=t)break;r.to>e&&(n+=this.input.read(Math.max(r.from,e),Math.min(r.to,t)))}return n}},Vt=class{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:n}=t.p;Fc(this.data,e,t,this.id,n.data,n.tokenPrecTable)}};Vt.prototype.contextual=Vt.prototype.fallback=Vt.prototype.extend=!1;var Ct=class{constructor(e,t,n){this.precTable=t,this.elseToken=n,this.data=typeof e=="string"?un(e):e}token(e,t){let n=e.pos,r=0;for(;;){let s=e.next<0,o=e.resolveOffset(1,1);if(Fc(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(s||r++,o==null)break;e.reset(o,e.token)}r&&(e.reset(n,e.token),e.acceptToken(this.elseToken,r))}};Ct.prototype.contextual=Vt.prototype.fallback=Vt.prototype.extend=!1;var H=class{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}};function Fc(i,e,t,n,r,s){let o=0,O=1<0){let p=i[d];if(l.allows(p)&&(e.token.value==-1||e.token.value==p||mg(p,e.token.value,r,s))){e.acceptToken(p);break}}let h=e.next,c=0,f=i[o+2];if(e.next<0&&f>c&&i[a+f*3-3]==65535&&i[a+f*3-3]==65535){o=i[a+f*3-1];continue e}for(;c>1,p=a+d+(d<<1),m=i[p],$=i[p+1]||65536;if(h=$)c=d+1;else{o=i[p+2],e.advance();continue e}}break}}function Lc(i,e,t){for(let n=e,r;(r=i[n])!=65535;n++)if(r==t)return n-e;return-1}function mg(i,e,t,n){let r=Lc(t,n,e);return r<0||Lc(t,n,i)e)&&!n.type.isError)return t<0?Math.max(0,Math.min(n.to-1,e-25)):Math.min(i.length,Math.max(n.from+1,e+25));if(t<0?n.prevSibling():n.nextSibling())break;if(!n.parent())return t<0?0:i.length}}var rO=class{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?Dc(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?Dc(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=o,null;if(s instanceof Y){if(o==e){if(o=Math.max(this.safeFrom,e)&&(this.trees.push(s),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+s.length}}},sO=class{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(n=>new xi)}getActions(e){let t=0,n=null,{parser:r}=e.p,{tokenizers:s}=r,o=r.stateSlot(e.state,3),O=e.curContext?e.curContext.hash:0,l=0;for(let a=0;ac.end+25&&(l=Math.max(c.lookAhead,l)),c.value!=0)){let f=t;if(c.extended>-1&&(t=this.addActions(e,c.extended,c.end,t)),t=this.addActions(e,c.value,c.end,t),!h.extend&&(n=c,t>f))break}}for(;this.actions.length>t;)this.actions.pop();return l&&e.setLookAhead(l),!n&&e.pos==this.stream.end&&(n=new xi,n.value=e.p.parser.eofTerm,n.start=n.end=e.pos,t=this.addActions(e,n.value,n.end,t)),this.mainToken=n,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new xi,{pos:n,p:r}=e;return t.start=n,t.end=Math.min(n+1,r.stream.end),t.value=n==r.stream.end?r.parser.eofTerm:0,t}updateCachedToken(e,t,n){let r=this.stream.clipPos(n.pos);if(t.token(this.stream.reset(r,e),n),e.value>-1){let{parser:s}=n.p;for(let o=0;o=0&&n.p.parser.dialect.allows(O>>1)){O&1?e.extended=O>>1:e.value=O>>1;break}}}else e.value=0,e.end=this.stream.clipPos(r+1)}putAction(e,t,n,r){for(let s=0;se.bufferLength*4?new rO(n,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,n=this.stacks=[],r,s;if(this.bigReductionCount>300&&e.length==1){let[o]=e;for(;o.forceReduce()&&o.stack.length&&o.stack[o.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let o=0;ot)n.push(O);else{if(this.advanceStack(O,n,e))continue;{r||(r=[],s=[]),r.push(O);let l=this.tokens.getMainToken(O);s.push(l.value,l.end)}}break}}if(!n.length){let o=r&&$g(r);if(o)return Ye&&console.log("Finish with "+this.stackID(o)),this.stackToTree(o);if(this.parser.strict)throw Ye&&r&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&r){let o=this.stoppedAt!=null&&r[0].pos>this.stoppedAt?r[0]:this.runRecovery(r,s,n);if(o)return Ye&&console.log("Force-finish "+this.stackID(o)),this.stackToTree(o.forceAll())}if(this.recovering){let o=this.recovering==1?1:this.recovering*3;if(n.length>o)for(n.sort((O,l)=>l.score-O.score);n.length>o;)n.pop();n.some(O=>O.reducePos>t)&&this.recovering--}else if(n.length>1){e:for(let o=0;o500&&a.buffer.length>500)if((O.score-a.score||O.buffer.length-a.buffer.length)>0)n.splice(l--,1);else{n.splice(o--,1);continue e}}}n.length>12&&n.splice(12,n.length-12)}this.minStackPos=n[0].pos;for(let o=1;o ":"";if(this.stoppedAt!=null&&r>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let a=e.curContext&&e.curContext.tracker.strict,h=a?e.curContext.hash:0;for(let c=this.fragments.nodeAt(r);c;){let f=this.parser.nodeSet.types[c.type.id]==c.type?s.getGoto(e.state,c.type.id):-1;if(f>-1&&c.length&&(!a||(c.prop(R.contextHash)||0)==h))return e.useNode(c,f),Ye&&console.log(o+this.stackID(e)+` (via reuse of ${s.getName(c.type.id)})`),!0;if(!(c instanceof Y)||c.children.length==0||c.positions[0]>0)break;let d=c.children[0];if(d instanceof Y&&c.positions[0]==0)c=d;else break}}let O=s.stateSlot(e.state,4);if(O>0)return e.reduce(O),Ye&&console.log(o+this.stackID(e)+` (via always-reduce ${s.getName(O&65535)})`),!0;if(e.stack.length>=9e3)for(;e.stack.length>6e3&&e.forceReduce(););let l=this.tokens.getActions(e);for(let a=0;ar?t.push(p):n.push(p)}return!1}advanceFully(e,t){let n=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>n)return Bc(e,t),!0}}runRecovery(e,t,n){let r=null,s=!1;for(let o=0;o ":"";if(O.deadEnd&&(s||(s=!0,O.restart(),Ye&&console.log(h+this.stackID(O)+" (restarted)"),this.advanceFully(O,n))))continue;let c=O.split(),f=h;for(let d=0;c.forceReduce()&&d<10&&(Ye&&console.log(f+this.stackID(c)+" (via force-reduce)"),!this.advanceFully(c,n));d++)Ye&&(f=this.stackID(c)+" -> ");for(let d of O.recoverByInsert(l))Ye&&console.log(h+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,n);this.stream.end>O.pos?(a==O.pos&&(a++,l=0),O.recoverByDelete(l,a),Ye&&console.log(h+this.stackID(O)+` (via recover-delete ${this.parser.getName(l)})`),Bc(O,n)):(!r||r.scorei,qt=class{constructor(e){this.start=e.start,this.shift=e.shift||Jo,this.reduce=e.reduce||Jo,this.reuse=e.reuse||Jo,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}},me=class i extends $t{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let O=0;Oe.topRules[O][1]),r=[];for(let O=0;O=0)s(h,l,O[a++]);else{let c=O[a+-h];for(let f=-h;f>0;f--)s(O[a++],l,c);a++}}}this.nodeSet=new pt(t.map((O,l)=>F.define({name:l>=this.minRepeatTerm?void 0:O,id:l,props:r[l],top:n.indexOf(l)>-1,error:l==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(l)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let o=un(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let O=0;Otypeof O=="number"?new Vt(o,O):O),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,n){let r=new oO(this,e,t,n);for(let s of this.wrappers)r=s(r,e,t,n);return r}getGoto(e,t,n=!1){let r=this.goto;if(t>=r[0])return-1;for(let s=r[t+1];;){let o=r[s++],O=o&1,l=r[s++];if(O&&n)return l;for(let a=s+(o>>1);s0}validAction(e,t){return!!this.allActions(e,n=>n==t?!0:null)}allActions(e,t){let n=this.stateSlot(e,4),r=n?t(n):void 0;for(let s=this.stateSlot(e,1);r==null;s+=3){if(this.data[s]==65535)if(this.data[s+1]==1)s=Qt(this.data,s+2);else break;r=t(Qt(this.data,s+1))}return r}nextStates(e){let t=[];for(let n=this.stateSlot(e,1);;n+=3){if(this.data[n]==65535)if(this.data[n+1]==1)n=Qt(this.data,n+2);else break;if(!(this.data[n+2]&1)){let r=this.data[n+1];t.some((s,o)=>o&1&&s==r)||t.push(this.data[n],r)}}return t}configure(e){let t=Object.assign(Object.create(i.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let n=this.topRules[e.top];if(!n)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=n}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(n=>{let r=e.tokenizers.find(s=>s.from==n);return r?r.to:n})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((n,r)=>{let s=e.specializers.find(O=>O.from==n.external);if(!s)return n;let o=Object.assign(Object.assign({},n),{external:s.to});return t.specializers[r]=Nc(o),o})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),n=t.map(()=>!1);if(e)for(let s of e.split(" ")){let o=t.indexOf(s);o>=0&&(n[o]=!0)}let r=null;for(let s=0;sn)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scorei.external(t,n)<<1|e}return i.get}var gg=96,Hc=1,Sg=97,Qg=98,Kc=2,Jc=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],yg=58,bg=40,ef=95,Pg=91,qr=45,xg=46,wg=35,kg=37;function Ur(i){return i>=65&&i<=90||i>=97&&i<=122||i>=161}function vg(i){return i>=48&&i<=57}var Tg=new H((i,e)=>{for(let t=!1,n=0,r=0;;r++){let{next:s}=i;if(Ur(s)||s==qr||s==ef||t&&vg(s))!t&&(s!=qr||r>0)&&(t=!0),n===r&&s==qr&&n++,i.advance();else{t&&i.acceptToken(s==bg?Sg:n==2&&e.canShift(Kc)?Kc:Qg);break}}}),zg=new H(i=>{if(Jc.includes(i.peek(-1))){let{next:e}=i;(Ur(e)||e==ef||e==wg||e==xg||e==Pg||e==yg||e==qr)&&i.acceptToken(gg)}}),Xg=new H(i=>{if(!Jc.includes(i.peek(-1))){let{next:e}=i;if(e==kg&&(i.advance(),i.acceptToken(Hc)),Ur(e)){do i.advance();while(Ur(i.next));i.acceptToken(Hc)}}}),Wg=ne({"AtKeyword import charset namespace keyframes media supports":u.definitionKeyword,"from to selector":u.keyword,NamespaceName:u.namespace,KeyframeName:u.labelName,KeyframeRangeName:u.operatorKeyword,TagName:u.tagName,ClassName:u.className,PseudoClassName:u.constant(u.className),IdName:u.labelName,"FeatureName PropertyName":u.propertyName,AttributeName:u.attributeName,NumberLiteral:u.number,KeywordQuery:u.keyword,UnaryQueryOp:u.operatorKeyword,"CallTag ValueName":u.atom,VariableName:u.variableName,Callee:u.operatorKeyword,Unit:u.unit,"UniversalSelector NestingSelector":u.definitionOperator,MatchOp:u.compareOperator,"ChildOp SiblingOp, LogicOp":u.logicOperator,BinOp:u.arithmeticOperator,Important:u.modifier,Comment:u.blockComment,ColorLiteral:u.color,"ParenthesizedContent StringLiteral":u.string,":":u.punctuation,"PseudoOp #":u.derefOperator,"; ,":u.separator,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace}),Rg={__proto__:null,lang:32,"nth-child":32,"nth-last-child":32,"nth-of-type":32,"nth-last-of-type":32,dir:32,"host-context":32,url:60,"url-prefix":60,domain:60,regexp:60,selector:134},Zg={__proto__:null,"@import":114,"@media":138,"@charset":142,"@namespace":146,"@keyframes":152,"@supports":164},Yg={__proto__:null,not:128,only:128},tf=me.deserialize({version:14,states:"9bQYQ[OOO#_Q[OOP#fOWOOOOQP'#Cd'#CdOOQP'#Cc'#CcO#kQ[O'#CfO$_QXO'#CaO$fQ[O'#ChO$qQ[O'#DPO$vQ[O'#DTOOQP'#Ej'#EjO${QdO'#DeO%gQ[O'#DrO${QdO'#DtO%xQ[O'#DvO&TQ[O'#DyO&]Q[O'#EPO&kQ[O'#EROOQS'#Ei'#EiOOQS'#EU'#EUQYQ[OOO&rQXO'#CdO'gQWO'#DaO'lQWO'#EpO'wQ[O'#EpQOQWOOP(RO#tO'#C_POOO)C@X)C@XOOQP'#Cg'#CgOOQP,59Q,59QO#kQ[O,59QO(^Q[O'#EXO(xQWO,58{O)QQ[O,59SO$qQ[O,59kO$vQ[O,59oO(^Q[O,59sO(^Q[O,59uO(^Q[O,59vO)]Q[O'#D`OOQS,58{,58{OOQP'#Ck'#CkOOQO'#C}'#C}OOQP,59S,59SO)dQWO,59SO)iQWO,59SOOQP'#DR'#DROOQP,59k,59kOOQO'#DV'#DVO)nQ`O,59oOOQS'#Cp'#CpO${QdO'#CqO)vQvO'#CsO+TQtO,5:POOQO'#Cx'#CxO)iQWO'#CwO+iQWO'#CyOOQS'#Em'#EmOOQO'#Dh'#DhO+nQ[O'#DoO+|QWO'#EqO&]Q[O'#DmO,[QWO'#DpOOQO'#Er'#ErO({QWO,5:^O,aQpO,5:`OOQS'#Dx'#DxO,iQWO,5:bO,nQ[O,5:bOOQO'#D{'#D{O,vQWO,5:eO,{QWO,5:kO-TQWO,5:mOOQS-E8S-E8SO${QdO,59{O-]Q[O'#EZO-jQWO,5;[O-jQWO,5;[POOO'#ET'#ETP-uO#tO,58yPOOO,58y,58yOOQP1G.l1G.lO.lQXO,5:sOOQO-E8V-E8VOOQS1G.g1G.gOOQP1G.n1G.nO)dQWO1G.nO)iQWO1G.nOOQP1G/V1G/VO.yQ`O1G/ZO/dQXO1G/_O/zQXO1G/aO0bQXO1G/bO0xQWO,59zO0}Q[O'#DOO1UQdO'#CoOOQP1G/Z1G/ZO${QdO1G/ZO1]QpO,59]OOQS,59_,59_O${QdO,59aO1eQWO1G/kOOQS,59c,59cO1jQ!bO,59eO1rQWO'#DhO1}QWO,5:TO2SQWO,5:ZO&]Q[O,5:VO&]Q[O'#E[O2[QWO,5;]O2gQWO,5:XO(^Q[O,5:[OOQS1G/x1G/xOOQS1G/z1G/zOOQS1G/|1G/|O2xQWO1G/|O2}QdO'#D|OOQS1G0P1G0POOQS1G0V1G0VOOQS1G0X1G0XO3YQtO1G/gOOQO,5:u,5:uO3pQ[O,5:uOOQO-E8X-E8XO3}QWO1G0vPOOO-E8R-E8RPOOO1G.e1G.eOOQP7+$Y7+$YOOQP7+$u7+$uO${QdO7+$uOOQS1G/f1G/fO4YQXO'#EoO4aQWO,59jO4fQtO'#EVO5ZQdO'#ElO5eQWO,59ZO5jQpO7+$uOOQS1G.w1G.wOOQS1G.{1G.{OOQS7+%V7+%VO5rQWO1G/PO${QdO1G/oOOQO1G/u1G/uOOQO1G/q1G/qO5wQWO,5:vOOQO-E8Y-E8YO6VQXO1G/vOOQS7+%h7+%hO6^QYO'#CsOOQO'#EO'#EOO6iQ`O'#D}OOQO'#D}'#D}O6tQWO'#E]O6|QdO,5:hOOQS,5:h,5:hO7XQtO'#EYO${QdO'#EYO8VQdO7+%ROOQO7+%R7+%ROOQO1G0a1G0aO8jQpO<T![;'S%^;'S;=`%o<%lO%^l;TUo`Oy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^l;nYo`#b[Oy%^z!Q%^!Q![;g![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^l[[o`#b[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^n?VSp^Oy%^z;'S%^;'S;=`%o<%lO%^l?hWjWOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^n@VU#_QOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^~@nTjWOy%^z{@}{;'S%^;'S;=`%o<%lO%^~AUSo`#X~Oy%^z;'S%^;'S;=`%o<%lO%^lAg[#b[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^bBbU]QOy%^z![%^![!]Bt!];'S%^;'S;=`%o<%lO%^bB{S^Qo`Oy%^z;'S%^;'S;=`%o<%lO%^nC^S!W^Oy%^z;'S%^;'S;=`%o<%lO%^dCoSzSOy%^z;'S%^;'S;=`%o<%lO%^bDQU|QOy%^z!`%^!`!aDd!a;'S%^;'S;=`%o<%lO%^bDkS|Qo`Oy%^z;'S%^;'S;=`%o<%lO%^bDzWOy%^z!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^bEk[!YQo`Oy%^z}%^}!OEd!O!Q%^!Q![Ed![!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^bFfSxQOy%^z;'S%^;'S;=`%o<%lO%^lFwSv[Oy%^z;'S%^;'S;=`%o<%lO%^bGWUOy%^z#b%^#b#cGj#c;'S%^;'S;=`%o<%lO%^bGoUo`Oy%^z#W%^#W#XHR#X;'S%^;'S;=`%o<%lO%^bHYS!`Qo`Oy%^z;'S%^;'S;=`%o<%lO%^bHiUOy%^z#f%^#f#gHR#g;'S%^;'S;=`%o<%lO%^fIQS!RUOy%^z;'S%^;'S;=`%o<%lO%^nIcS!Q^Oy%^z;'S%^;'S;=`%o<%lO%^fItU!PQOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^`JZP;=`<%l$}",tokenizers:[zg,Xg,Tg,1,2,3,4,new Ct("m~RRYZ[z{a~~g~aO#Z~~dP!P!Qg~lO#[~~",28,102)],topRules:{StyleSheet:[0,4],Styles:[1,84]},specialized:[{term:97,get:i=>Rg[i]||-1},{term:56,get:i=>Zg[i]||-1},{term:98,get:i=>Yg[i]||-1}],tokenPrec:1169});var lO=null;function aO(){if(!lO&&typeof document=="object"&&document.body){let{style:i}=document.body,e=[],t=new Set;for(let n in i)n!="cssText"&&n!="cssFloat"&&typeof i[n]=="string"&&(/[A-Z]/.test(n)&&(n=n.replace(/[A-Z]/g,r=>"-"+r.toLowerCase())),t.has(n)||(e.push(n),t.add(n)));lO=e.sort().map(n=>({type:"property",label:n}))}return lO||[]}var nf=["active","after","any-link","autofill","backdrop","before","checked","cue","default","defined","disabled","empty","enabled","file-selector-button","first","first-child","first-letter","first-line","first-of-type","focus","focus-visible","focus-within","fullscreen","has","host","host-context","hover","in-range","indeterminate","invalid","is","lang","last-child","last-of-type","left","link","marker","modal","not","nth-child","nth-last-child","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","part","placeholder","placeholder-shown","read-only","read-write","required","right","root","scope","selection","slotted","target","target-text","valid","visited","where"].map(i=>({type:"class",label:i})),rf=["above","absolute","activeborder","additive","activecaption","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","antialiased","appworkspace","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","axis-pan","background","backwards","baseline","below","bidi-override","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic-abegede-gez","ethiopic-halehame-aa-er","ethiopic-halehame-gez","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fill-box","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","graytext","grid","groove","hand","hard-light","help","hidden","hide","higher","highlight","highlighttext","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","justify","keep-all","landscape","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-hexadecimal","lower-latin","lower-norwegian","lowercase","ltr","luminosity","manipulation","match","matrix","matrix3d","medium","menu","menutext","message-box","middle","min-intrinsic","mix","monospace","move","multiple","multiple_mask_images","multiply","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","opacity","open-quote","optimizeLegibility","optimizeSpeed","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","perspective","pinch-zoom","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","start","static","status-bar","stretch","stroke","stroke-box","sub","subpixel-antialiased","svg_masks","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","text","text-bottom","text-top","textarea","textfield","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","to","top","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unidirectional-pan","unset","up","upper-latin","uppercase","url","var","vertical","vertical-text","view-box","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"].map(i=>({type:"keyword",label:i})).concat(["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"].map(i=>({type:"constant",label:i}))),Vg=["a","abbr","address","article","aside","b","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","dd","del","details","dfn","dialog","div","dl","dt","em","figcaption","figure","footer","form","header","hgroup","h1","h2","h3","h4","h5","h6","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","main","meter","nav","ol","output","p","pre","ruby","section","select","small","source","span","strong","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","tr","u","ul"].map(i=>({type:"type",label:i})),Ut=/^(\w[\w-]*|-\w[\w-]*|)$/,Cg=/^-(-[\w-]*)?$/;function qg(i,e){var t;if((i.name=="("||i.type.isError)&&(i=i.parent||i),i.name!="ArgList")return!1;let n=(t=i.parent)===null||t===void 0?void 0:t.firstChild;return n?.name!="Callee"?!1:e.sliceString(n.from,n.to)=="var"}var sf=new gi,Ug=["Declaration"];function _g(i){for(let e=i;;){if(e.type.isTop)return e;if(!(e=e.parent))return i}}function of(i,e,t){if(e.to-e.from>4096){let n=sf.get(e);if(n)return n;let r=[],s=new Set,o=e.cursor(_.IncludeAnonymous);if(o.firstChild())do for(let O of of(i,o.node,t))s.has(O.label)||(s.add(O.label),r.push(O));while(o.nextSibling());return sf.set(e,r),r}else{let n=[],r=new Set;return e.cursor().iterate(s=>{var o;if(t(s)&&s.matchContext(Ug)&&((o=s.node.nextSibling)===null||o===void 0?void 0:o.name)==":"){let O=i.sliceString(s.from,s.to);r.has(O)||(r.add(O),n.push({label:O,type:"variable"}))}}),n}}var Ag=i=>e=>{let{state:t,pos:n}=e,r=A(t).resolveInner(n,-1),s=r.type.isError&&r.from==r.to-1&&t.doc.sliceString(r.from,r.to)=="-";if(r.name=="PropertyName"||(s||r.name=="TagName")&&/^(Block|Styles)$/.test(r.resolve(r.to).name))return{from:r.from,options:aO(),validFor:Ut};if(r.name=="ValueName")return{from:r.from,options:rf,validFor:Ut};if(r.name=="PseudoClassName")return{from:r.from,options:nf,validFor:Ut};if(i(r)||(e.explicit||s)&&qg(r,t.doc))return{from:i(r)||s?r.from:n,options:of(t.doc,_g(r),i),validFor:Cg};if(r.name=="TagName"){for(let{parent:l}=r;l;l=l.parent)if(l.name=="Block")return{from:r.from,options:aO(),validFor:Ut};return{from:r.from,options:Vg,validFor:Ut}}if(!e.explicit)return null;let o=r.resolve(n),O=o.childBefore(n);return O&&O.name==":"&&o.name=="PseudoClassSelector"?{from:n,options:nf,validFor:Ut}:O&&O.name==":"&&o.name=="Declaration"||o.name=="ArgList"?{from:n,options:rf,validFor:Ut}:o.name=="Block"||o.name=="Styles"?{from:n,options:aO(),validFor:Ut}:null},jg=Ag(i=>i.name=="VariableName"),dn=de.define({name:"css",parser:tf.configure({props:[ye.add({Declaration:Ze()}),Te.add({"Block KeyframeList":Zt})]}),languageData:{commentTokens:{block:{open:"/*",close:"*/"}},indentOnInput:/^\s*\}$/,wordChars:"-"}});function _r(){return new re(dn,dn.data.of({autocomplete:jg}))}var Eg=ne({String:u.string,Number:u.number,"True False":u.bool,PropertyName:u.propertyName,Null:u.null,",":u.separator,"[ ]":u.squareBracket,"{ }":u.brace}),Of=me.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#CjOOQO'#Cp'#CpQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CrOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59U,59UO!iQPO,59UOVQPO,59QOqQPO'#CkO!nQPO,59^OOQO1G.k1G.kOVQPO'#ClO!vQPO,59aOOQO1G.p1G.pOOQO1G.l1G.lOOQO,59V,59VOOQO-E6i-E6iOOQO,59W,59WOOQO-E6j-E6j",stateData:"#O~OcOS~OQSORSOSSOTSOWQO]ROePO~OVXOeUO~O[[O~PVOg^O~Oh_OVfX~OVaO~OhbO[iX~O[dO~Oh_OVfa~OhbO[ia~O",goto:"!kjPPPPPPkPPkqwPPk{!RPPP!XP!ePP!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"\u26A0 JsonText True False Null Number String } { Object Property PropertyName ] [ Array",maxTerm:25,nodeProps:[["openedBy",7,"{",12,"["],["closedBy",8,"}",13,"]"]],propSources:[Eg],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oc~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Oe~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zOh~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yOg~~'OO]~~'TO[~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0});var Gg=de.define({name:"json",parser:Of.configure({props:[ye.add({Object:Ze({except:/^\s*\}/}),Array:Ze({except:/^\s*\]/})}),Te.add({"Object Array":Zt})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function lf(){return new re(Gg)}var Ig=304,af=1,Mg=2,Lg=305,Dg=307,Bg=308,Ng=3,Fg=4,Hg=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],cf=125,Kg=59,hf=47,Jg=42,eS=43,tS=45,iS=new qt({start:!1,shift(i,e){return e==Ng||e==Fg||e==Dg?i:e==Bg},strict:!1}),nS=new H((i,e)=>{let{next:t}=i;(t==cf||t==-1||e.context)&&i.acceptToken(Lg)},{contextual:!0,fallback:!0}),rS=new H((i,e)=>{let{next:t}=i,n;Hg.indexOf(t)>-1||t==hf&&((n=i.peek(1))==hf||n==Jg)||t!=cf&&t!=Kg&&t!=-1&&!e.context&&i.acceptToken(Ig)},{contextual:!0}),sS=new H((i,e)=>{let{next:t}=i;if((t==eS||t==tS)&&(i.advance(),t==i.next)){i.advance();let n=!e.context&&e.canShift(af);i.acceptToken(n?af:Mg)}},{contextual:!0}),oS=ne({"get set async static":u.modifier,"for while do if else switch try catch finally return throw break continue default case":u.controlKeyword,"in of await yield void typeof delete instanceof":u.operatorKeyword,"let var const using function class extends":u.definitionKeyword,"import export from":u.moduleKeyword,"with debugger as new":u.keyword,TemplateString:u.special(u.string),super:u.atom,BooleanLiteral:u.bool,this:u.self,null:u.null,Star:u.modifier,VariableName:u.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":u.function(u.variableName),VariableDefinition:u.definition(u.variableName),Label:u.labelName,PropertyName:u.propertyName,PrivatePropertyName:u.special(u.propertyName),"CallExpression/MemberExpression/PropertyName":u.function(u.propertyName),"FunctionDeclaration/VariableDefinition":u.function(u.definition(u.variableName)),"ClassDeclaration/VariableDefinition":u.definition(u.className),PropertyDefinition:u.definition(u.propertyName),PrivatePropertyDefinition:u.definition(u.special(u.propertyName)),UpdateOp:u.updateOperator,"LineComment Hashbang":u.lineComment,BlockComment:u.blockComment,Number:u.number,String:u.string,Escape:u.escape,ArithOp:u.arithmeticOperator,LogicOp:u.logicOperator,BitOp:u.bitwiseOperator,CompareOp:u.compareOperator,RegExp:u.regexp,Equals:u.definitionOperator,Arrow:u.function(u.punctuation),": Spread":u.punctuation,"( )":u.paren,"[ ]":u.squareBracket,"{ }":u.brace,"InterpolationStart InterpolationEnd":u.special(u.brace),".":u.derefOperator,", ;":u.separator,"@":u.meta,TypeName:u.typeName,TypeDefinition:u.definition(u.typeName),"type enum interface implements namespace module declare":u.definitionKeyword,"abstract global Privacy readonly override":u.modifier,"is keyof unique infer":u.operatorKeyword,JSXAttributeValue:u.attributeValue,JSXText:u.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":u.angleBracket,"JSXIdentifier JSXNameSpacedName":u.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":u.attributeName,"JSXBuiltin/JSXIdentifier":u.standard(u.tagName)}),OS={__proto__:null,export:16,as:21,from:29,default:32,async:37,function:38,extends:48,this:52,true:60,false:60,null:72,void:76,typeof:80,super:98,new:132,delete:148,yield:157,await:161,class:166,public:223,private:223,protected:223,readonly:225,instanceof:244,satisfies:247,in:248,const:250,import:282,keyof:337,unique:341,infer:347,is:383,abstract:403,implements:405,type:407,let:410,var:412,using:415,interface:421,enum:425,namespace:431,module:433,declare:437,global:441,for:460,of:469,while:472,with:476,do:480,if:484,else:486,switch:490,case:496,try:502,catch:506,finally:510,return:514,throw:518,break:522,continue:526,debugger:530},lS={__proto__:null,async:119,get:121,set:123,declare:183,public:185,private:185,protected:185,static:187,abstract:189,override:191,readonly:197,accessor:199,new:387},aS={__proto__:null,"<":139},ff=me.deserialize({version:14,states:"$6zO%TQUOOO%[QUOOO'_QWOOP(lOSOOO*zQ(CjO'#CgO+ROpO'#ChO+aO!bO'#ChO+oO07`O'#D[O.QQUO'#DbO.bQUO'#DmO%[QUO'#DwO0fQUO'#EPOOQ(CY'#EX'#EXO1PQSO'#EUOOQO'#Ej'#EjOOQO'#Id'#IdO1XQSO'#GlO1dQSO'#EiO1iQSO'#EiO3kQ(CjO'#JeO6[Q(CjO'#JfO6xQSO'#FXO6}Q#tO'#FpOOQ(CY'#Fa'#FaO7YO&jO'#FaO7hQ,UO'#FwO9OQSO'#FvOOQ(CY'#Jf'#JfOOQ(CW'#Je'#JeO9TQSO'#GpOOQQ'#KQ'#KQO9`QSO'#IQO9eQ(C[O'#IROOQQ'#JR'#JROOQQ'#IV'#IVQ`QUOOO`QUOOO%[QUO'#DoO9mQUO'#D{O9tQUO'#D}O9ZQSO'#GlO9{Q,UO'#CmO:ZQSO'#EhO:fQSO'#EsO:kQ,UO'#F`O;YQSO'#GlOOQO'#KR'#KRO;_QSO'#KRO;mQSO'#GtO;mQSO'#GuO;mQSO'#GwO9ZQSO'#GzO]QSO'#HZO>eQSO'#HaO>eQSO'#HcO`QUO'#HeO>eQSO'#HgO>eQSO'#HjO>jQSO'#HpO>oQ(C]O'#HvO%[QUO'#HxO>zQ(C]O'#HzO?VQ(C]O'#H|O9eQ(C[O'#IOO?bQ(CjO'#CgO@dQWO'#DgQOQSOOO%[QUO'#D}O@zQSO'#EQO9{Q,UO'#EhOAVQSO'#EhOAbQ`O'#F`OOQQ'#Ce'#CeOOQ(CW'#Dl'#DlOOQ(CW'#Ji'#JiO%[QUO'#JiOOQO'#Jm'#JmOOQO'#Ia'#IaOBbQWO'#EaOOQ(CW'#E`'#E`OC^Q(C`O'#EaOChQWO'#ETOOQO'#Jl'#JlOC|QWO'#JmOEZQWO'#ETOChQWO'#EaPEhO?MpO'#C`POOO)CDp)CDpOOOO'#IW'#IWOEsOpO,59SOOQ(CY,59S,59SOOOO'#IX'#IXOFRO!bO,59SO%[QUO'#D^OOOO'#IZ'#IZOFaO07`O,59vOOQ(CY,59v,59vOFoQUO'#I[OGSQSO'#JgOIUQbO'#JgO+}QUO'#JgOI]QSO,59|OIsQSO'#EjOJQQSO'#JuOJ]QSO'#JtOJ]QSO'#JtOJeQSO,5;WOJjQSO'#JsOOQ(CY,5:X,5:XOJqQUO,5:XOLrQ(CjO,5:cOMcQSO,5:kOM|Q(C[O'#JrONTQSO'#JqO9TQSO'#JqONiQSO'#JqONqQSO,5;VONvQSO'#JqO!#OQbO'#JfOOQ(CY'#Cg'#CgO%[QUO'#EPO!#nQ`O,5:pOOQO'#Jn'#JnOOQO-ElOOQQ'#JZ'#JZOOQQ,5>m,5>mOOQQ-ExQ(CjO,5:iOOQO,5@m,5@mO!?iQ,UO,5=WO!?wQ(C[O'#J[O9OQSO'#J[O!@YQ(C[O,59XO!@eQWO,59XO!@mQ,UO,59XO9{Q,UO,59XO!@xQSO,5;TO!AQQSO'#HYO!AcQSO'#KVO%[QUO,5;xO!7cQWO,5;zO!AkQSO,5=sO!ApQSO,5=sO!AuQSO,5=sO9eQ(C[O,5=sO;mQSO,5=cOOQO'#Cs'#CsO!BTQWO,5=`O!B]Q,UO,5=aO!BhQSO,5=cO!BmQ`O,5=fO!BuQSO'#KRO>jQSO'#HPO9ZQSO'#HRO!BzQSO'#HRO9{Q,UO'#HTO!CPQSO'#HTOOQQ,5=i,5=iO!CUQSO'#HUO!C^QSO'#CmO!CcQSO,58}O!CmQSO,58}O!ErQUO,58}OOQQ,58},58}O!FSQ(C[O,58}O%[QUO,58}O!H_QUO'#H]OOQQ'#H^'#H^OOQQ'#H_'#H_O`QUO,5=uO!HuQSO,5=uO`QUO,5={O`QUO,5=}O!HzQSO,5>PO`QUO,5>RO!IPQSO,5>UO!IUQUO,5>[OOQQ,5>b,5>bO%[QUO,5>bO9eQ(C[O,5>dOOQQ,5>f,5>fO!M`QSO,5>fOOQQ,5>h,5>hO!M`QSO,5>hOOQQ,5>j,5>jO!MeQWO'#DYO%[QUO'#JiO!NSQWO'#JiO!NqQWO'#DhO# SQWO'#DhO##eQUO'#DhO##lQSO'#JhO##tQSO,5:RO##yQSO'#EnO#$XQSO'#JvO#$aQSO,5;XO#$fQWO'#DhO#$sQWO'#ESOOQ(CY,5:l,5:lO%[QUO,5:lO#$zQSO,5:lO>jQSO,5;SO!@eQWO,5;SO!@mQ,UO,5;SO9{Q,UO,5;SO#%SQSO,5@TO#%XQ!LQO,5:pOOQO-E<_-E<_O#&_Q(C`O,5:{OChQWO,5:oO#&iQWO,5:oOChQWO,5:{O!@YQ(C[O,5:oOOQ(CW'#Ed'#EdOOQO,5:{,5:{O%[QUO,5:{O#&vQ(C[O,5:{O#'RQ(C[O,5:{O!@eQWO,5:oOOQO,5;R,5;RO#'aQ(C[O,5:{POOO'#IU'#IUP#'uO?MpO,58zPOOO,58z,58zOOOO-EvO+}QUO,5>vOOQO,5>|,5>|O#(aQUO'#I[OOQO-ERQ(CjO1G0yO#?yQ(CjO1G0yO#ByQ$IUO'#CgO#DwQ$IUO1G1[O#EOQ$IUO'#JfO!,YQSO1G1bO#E`Q(CjO,5?SOOQ(CW-EeQSO1G3kO$.VQUO1G3mO$2ZQUO'#HlOOQQ1G3p1G3pO$2hQSO'#HrO>jQSO'#HtOOQQ1G3v1G3vO$2pQUO1G3vO9eQ(C[O1G3|OOQQ1G4O1G4OOOQ(CW'#GX'#GXO9eQ(C[O1G4QO9eQ(C[O1G4SO$6wQSO,5@TO!*SQUO,5;YO9TQSO,5;YO>jQSO,5:SO!*SQUO,5:SO!@eQWO,5:SO$6|Q$IUO,5:SOOQO,5;Y,5;YO$7WQWO'#I]O$7nQSO,5@SOOQ(CY1G/m1G/mO$7vQWO'#IcO$8QQSO,5@bOOQ(CW1G0s1G0sO# SQWO,5:SOOQO'#I`'#I`O$8YQWO,5:nOOQ(CY,5:n,5:nO#$}QSO1G0WOOQ(CY1G0W1G0WO%[QUO1G0WOOQ(CY1G0n1G0nO>jQSO1G0nO!@eQWO1G0nO!@mQ,UO1G0nOOQ(CW1G5o1G5oO!@YQ(C[O1G0ZOOQO1G0g1G0gO%[QUO1G0gO$8aQ(C[O1G0gO$8lQ(C[O1G0gO!@eQWO1G0ZOChQWO1G0ZO$8zQ(C[O1G0gOOQO1G0Z1G0ZO$9`Q(CjO1G0gPOOO-EvO$9|QSO1G5mO$:UQSO1G5zO$:^QbO1G5{O9TQSO,5>|O$:hQ(CjO1G5xO%[QUO1G5xO$:xQ(C[O1G5xO$;ZQSO1G5wO$;ZQSO1G5wO9TQSO1G5wO$;cQSO,5?PO9TQSO,5?POOQO,5?P,5?PO$;wQSO,5?PO$$XQSO,5?POOQO-ExQ(CjO,5WOOQQ,5>W,5>WO%[QUO'#HmO%(ZQSO'#HoOOQQ,5>^,5>^O9TQSO,5>^OOQQ,5>`,5>`OOQQ7+)b7+)bOOQQ7+)h7+)hOOQQ7+)l7+)lOOQQ7+)n7+)nO%(`QWO1G5oO%(tQ$IUO1G0tO%)OQSO1G0tOOQO1G/n1G/nO%)ZQ$IUO1G/nO>jQSO1G/nO!*SQUO'#DhOOQO,5>w,5>wOOQO-E},5>}OOQO-EjQSO7+&YO!@eQWO7+&YOOQO7+%u7+%uO$9`Q(CjO7+&ROOQO7+&R7+&RO%[QUO7+&RO%)eQ(C[O7+&RO!@YQ(C[O7+%uO!@eQWO7+%uO%)pQ(C[O7+&RO%*OQ(CjO7++dO%[QUO7++dO%*`QSO7++cO%*`QSO7++cOOQO1G4k1G4kO9TQSO1G4kO%*hQSO1G4kOOQO7+%z7+%zO#$}QSO<xOOQO-E<[-E<[O%2^QbO,5>yO%[QUO,5>yOOQO-E<]-E<]O%2hQSO1G5qOOQ(CY<XQ$IUO1G0yO%>`Q$IUO1G0yO%@WQ$IUO1G0yO%@kQ(CjO<XOOQQ,5>Z,5>ZO%NUQSO1G3xO9TQSO7+&`O!*SQUO7+&`OOQO7+%Y7+%YO%NZQ$IUO1G5{O>jQSO7+%YOOQ(CY<jQSO<jQSO7+)dO&5rQSO<{AN>{O%[QUOAN?XOOQO<SQSO7++uO%LgQSOANAyOOQQANAyANAyO!&^Q,UOANAyO&>[QSOANAyOOQQANA{ANA{O9eQ(C[OANA{O#MzQSOANA{OOQO'#HW'#HWOOQO7+*e7+*eOOQQG22uG22uOOQQANEPANEPOOQQANEQANEQOOQQANBTANBTO&>dQSOANBTOOQQ<iQSOLD,jO&>qQ$IUO7+'tO&@gQ$IUO7+'vO&B]Q,UOG26|OOQO<YOPZXYZXlZXzZX{ZX}ZX!fZX!gZX!iZX!mZX#YZX#edX#hZX#iZX#jZX#kZX#lZX#mZX#nZX#oZX#pZX#rZX#tZX#vZX#wZX#|ZX(TZX(dZX(kZX(lZX!WZX!XZX~O#zZX~P#@sOP$]OY:YOl9|Oz#yO{#zO}#{O!f:OO!g#wO!i#xO!m$]O#h9zO#i9{O#j9{O#k9{O#l9}O#m:OO#n:OO#o:XO#p:OO#r:PO#t:RO#v:TO#w:UO(TVO(d$ZO(k#|O(l#}O~O#z.iO~P#CQO#Y:ZO#|:ZO#z(YX!X(YX~P! UO_'[a!W'[a'm'[a'k'[a!h'[a!T'[ap'[a!Y'[a%b'[a!b'[a~P!7zOP#giY#gi_#gil#gi{#gi!W#gi!f#gi!g#gi!i#gi!m#gi#h#gi#i#gi#j#gi#k#gi#l#gi#m#gi#n#gi#o#gi#p#gi#r#gi#t#gi#v#gi#w#gi'm#gi(T#gi(d#gi'k#gi!T#gi!h#gip#gi!Y#gi%b#gi!b#gi~P#,gO_#{i!W#{i'm#{i'k#{i!T#{i!h#{ip#{i!Y#{i%b#{i!b#{i~P!7zO$X.nO$Z.nO~O$X.oO$Z.oO~O!b)_O#Y.pO!Y$_X$U$_X$X$_X$Z$_X$b$_X~O!V.qO~O!Y)bO$U.sO$X)aO$Z)aO$b.tO~O!W:VO!X(XX~P#CQO!X.uO~O!b)_O$b(mX~O$b.wO~Or)qO(U)rO(V.zO~O!T/OO~P!&^O!WdX!bdX!hdX!h$tX(ddX~P!/bO!h/UO~P#,gO!W/VO!b#uO(d'gO!h(qX~O!h/[O~O!V*SO'v%`O!h(qP~O#e/^O~O!T$tX!W$tX!b${X~P!/bO!W/_O!T(rX~P#,gO!b/aO~O!T/cO~Ol/gO!b#uO!i%^O(P%RO(d'gO~O'v/iO~O!b+YO~O_%gO!W/mO'm%gO~O!X/oO~P!3`O!^/pO!_/pO'w!lO(W!mO~O}/rO(W!mO~O#U/sO~O'v&QOe'aX!W'aX~O!W*lOe(Qa~Oe/xO~Oz/yO{/yO}/zOhwa(kwa(lwa!Wwa#Ywa~Oewa#zwa~P$ hOz)vO})wOh$ma(k$ma(l$ma!W$ma#Y$ma~Oe$ma#z$ma~P$!^Oz)vO})wOh$oa(k$oa(l$oa!W$oa#Y$oa~Oe$oa#z$oa~P$#PO#e/|O~Oe$}a!W$}a#Y$}a#z$}a~P!0kO!b#uO~O#e0PO~O!W*}O_(va'm(va~Oz#yO{#zO}#{O!g#wO!i#xO(TVOP!oiY!oil!oi!W!oi!f!oi!m!oi#h!oi#i!oi#j!oi#k!oi#l!oi#m!oi#n!oi#o!oi#p!oi#r!oi#t!oi#v!oi#w!oi(d!oi(k!oi(l!oi~O_!oi'm!oi'k!oi!T!oi!h!oip!oi!Y!oi%b!oi!b!oi~P$$nOh.UO!Y'VO%b.TO~Oj0ZO'v0YO~P!1]O!b+YO_(Oa!Y(Oa'm(Oa!W(Oa~O#e0aO~OYZX!WdX!XdX~O!W0bO!X(zX~O!X0dO~OY0eO~O'v+bO'xTO'{UO~O!Y%wO'v%`O^'iX!W'iX~O!W+gO^(ya~O!h0jO~P!7zOY0mO~O^0nO~O#Y0qO~Oh0tO!Y$|O~O(W(tO!X(wP~Oh0}O!Y0zO%b0|O(P%RO~OY1XO!W1VO!X(xX~O!X1YO~O^1[O_%gO'm%gO~O'v#mO'xTO'{UO~O#Y$eO#|$eOP(YXY(YXl(YXz(YX{(YX}(YX!W(YX!f(YX!i(YX!m(YX#h(YX#i(YX#j(YX#k(YX#l(YX#m(YX#n(YX#o(YX#r(YX#t(YX#v(YX#w(YX(T(YX(d(YX(k(YX(l(YX~O#p1_O&S1`O_(YX!g(YX~P$+dO#Y$eO#p1_O&S1`O~O_1bO~P%[O_1dO~O&]1gOP&ZiQ&ZiW&Zi_&Zib&Zic&Zij&Zil&Zim&Zin&Zit&Ziv&Zix&Zi}&Zi!R&Zi!S&Zi!Y&Zi!d&Zi!i&Zi!l&Zi!m&Zi!n&Zi!p&Zi!r&Zi!u&Zi!y&Zi#q&Zi$R&Zi$V&Zi%a&Zi%c&Zi%e&Zi%f&Zi%g&Zi%j&Zi%l&Zi%o&Zi%p&Zi%r&Zi&O&Zi&U&Zi&W&Zi&Y&Zi&[&Zi&_&Zi&e&Zi&k&Zi&m&Zi&o&Zi&q&Zi&s&Zi'k&Zi'v&Zi'x&Zi'{&Zi(T&Zi(c&Zi(p&Zi!X&Zi`&Zi&b&Zi~O`1mO!X1kO&b1lO~P`O!YXO!i1oO~O&i,jOP&diQ&diW&di_&dib&dic&dij&dil&dim&din&dit&div&dix&di}&di!R&di!S&di!Y&di!d&di!i&di!l&di!m&di!n&di!p&di!r&di!u&di!y&di#q&di$R&di$V&di%a&di%c&di%e&di%f&di%g&di%j&di%l&di%o&di%p&di%r&di&O&di&U&di&W&di&Y&di&[&di&_&di&e&di&k&di&m&di&o&di&q&di&s&di'k&di'v&di'x&di'{&di(T&di(c&di(p&di!X&di&]&di`&di&b&di~O!T1uO~O!W![a!X![a~P#CQOm!nO}!oO!V1{O(W!mO!W'PX!X'PX~P@OO!W,zO!X([a~O!W'VX!X'VX~P!7SO!W,}O!X(ja~O!X2SO~P'_O_%gO#Y2]O'm%gO~O_%gO!b#uO#Y2]O'm%gO~O_%gO!b#uO!m2aO#Y2]O'm%gO(d'gO~O_%gO'm%gO~P!7zO!W$aOp$la~O!T'Oi!W'Oi~P!7zO!W'{O!T(Zi~O!W(SO!T(hi~O!T(ii!W(ii~P!7zO!W(fi!h(fi_(fi'm(fi~P!7zO#Y2cO!W(fi!h(fi_(fi'm(fi~O!W(`O!h(ei~O}%aO!Y%bO!y]O#c2hO#d2gO'v%`O~O}%aO!Y%bO#d2gO'v%`O~Oh2oO!Y'VO%b2nO~Oh2oO!Y'VO%b2nO(P%RO~O#ewaPwaYwa_walwa!fwa!gwa!iwa!mwa#hwa#iwa#jwa#kwa#lwa#mwa#nwa#owa#pwa#rwa#twa#vwa#wwa'mwa(Twa(dwa!hwa!Twa'kwapwa!Ywa%bwa!bwa~P$ hO#e$maP$maY$ma_$mal$ma{$ma!f$ma!g$ma!i$ma!m$ma#h$ma#i$ma#j$ma#k$ma#l$ma#m$ma#n$ma#o$ma#p$ma#r$ma#t$ma#v$ma#w$ma'm$ma(T$ma(d$ma!h$ma!T$ma'k$map$ma!Y$ma%b$ma!b$ma~P$!^O#e$oaP$oaY$oa_$oal$oa{$oa!f$oa!g$oa!i$oa!m$oa#h$oa#i$oa#j$oa#k$oa#l$oa#m$oa#n$oa#o$oa#p$oa#r$oa#t$oa#v$oa#w$oa'm$oa(T$oa(d$oa!h$oa!T$oa'k$oap$oa!Y$oa%b$oa!b$oa~P$#PO#e$}aP$}aY$}a_$}al$}a{$}a!W$}a!f$}a!g$}a!i$}a!m$}a#h$}a#i$}a#j$}a#k$}a#l$}a#m$}a#n$}a#o$}a#p$}a#r$}a#t$}a#v$}a#w$}a'm$}a(T$}a(d$}a!h$}a!T$}a'k$}a#Y$}ap$}a!Y$}a%b$}a!b$}a~P#,gO_#]q!W#]q'm#]q'k#]q!T#]q!h#]qp#]q!Y#]q%b#]q!b#]q~P!7zOe'QX!W'QX~P!'vO!W._Oe(^a~O!V2wO!W'RX!h'RX~P%[O!W.bO!h(_a~O!W.bO!h(_a~P!7zO!T2zO~O#z!ka!X!ka~PJxO#z!ca!W!ca!X!ca~P#CQO#z!oa!X!oa~P!:eO#z!qa!X!qa~P!=OO!Y3^O$VfO$`3_O~O!X3cO~Op3dO~P#,gO_$iq!W$iq'm$iq'k$iq!T$iq!h$iqp$iq!Y$iq%b$iq!b$iq~P!7zO!T3eO~P#,gOz)vO})wO(l){Oh%Yi(k%Yi!W%Yi#Y%Yi~Oe%Yi#z%Yi~P$I|Oz)vO})wOh%[i(k%[i(l%[i!W%[i#Y%[i~Oe%[i#z%[i~P$JoO(d$ZO~P#,gO!V3hO'v%`O!W']X!h']X~O!W/VO!h(qa~O!W/VO!b#uO!h(qa~O!W/VO!b#uO(d'gO!h(qa~Oe$vi!W$vi#Y$vi#z$vi~P!0kO!V3pO'v*XO!T'_X!W'_X~P!1YO!W/_O!T(ra~O!W/_O!T(ra~P#,gO!b#uO#p3xO~Ol3{O!b#uO(d'gO~Oe(Ri!W(Ri~P!0kO#Y4OOe(Ri!W(Ri~P!0kO!h4RO~O_$jq!W$jq'm$jq'k$jq!T$jq!h$jqp$jq!Y$jq%b$jq!b$jq~P!7zO!T4VO~O!W4WO!Y(sX~P#,gO!g#wO~P4XO_$tX!Y$tX%VZX'm$tX!W$tX~P!/bO%V4YO_iXhiXziX}iX!YiX'miX(kiX(liX!WiX~O%V4YO~O%c4aO'v+bO'xTO'{UO!W'hX!X'hX~O!W0bO!X(za~OY4eO~O^4fO~O_%gO'm%gO~P#,gO!Y$|O~P#,gO!W4nO#Y4pO!X(wX~O!X4qO~Om!nO}4rO!]!xO!^!uO!_!uO!y9rO!}!pO#O!pO#P!pO#Q!pO#R!pO#U4wO#V!yO'w!lO'xTO'{UO(W!mO(c!sO~O!X4vO~P%$nOh4|O!Y0zO%b4{O~Oh4|O!Y0zO%b4{O(P%RO~O'v#mO!W'gX!X'gX~O!W1VO!X(xa~O'xTO'{UO(W5VO~O^5ZO~O#p5^O&S5_O~PMhO!h5`O~P%[O_5bO~O_5bO~P%[O`1mO!X5gO&b1lO~P`O!b5iO~O!b5kO!W(]i!X(]i!b(]i!i(]i(P(]i~O!W#bi!X#bi~P#CQO#Y5lO!W#bi!X#bi~O!W![i!X![i~P#CQO_%gO#Y5uO'm%gO~O_%gO!b#uO#Y5uO'm%gO~O!W(fq!h(fq_(fq'm(fq~P!7zO!W(`O!h(eq~O}%aO!Y%bO#d5|O'v%`O~O!Y'VO%b6PO~Oh6SO!Y'VO%b6PO~O#e%YiP%YiY%Yi_%Yil%Yi{%Yi!f%Yi!g%Yi!i%Yi!m%Yi#h%Yi#i%Yi#j%Yi#k%Yi#l%Yi#m%Yi#n%Yi#o%Yi#p%Yi#r%Yi#t%Yi#v%Yi#w%Yi'm%Yi(T%Yi(d%Yi!h%Yi!T%Yi'k%Yip%Yi!Y%Yi%b%Yi!b%Yi~P$I|O#e%[iP%[iY%[i_%[il%[i{%[i!f%[i!g%[i!i%[i!m%[i#h%[i#i%[i#j%[i#k%[i#l%[i#m%[i#n%[i#o%[i#p%[i#r%[i#t%[i#v%[i#w%[i'm%[i(T%[i(d%[i!h%[i!T%[i'k%[ip%[i!Y%[i%b%[i!b%[i~P$JoO#e$viP$viY$vi_$vil$vi{$vi!W$vi!f$vi!g$vi!i$vi!m$vi#h$vi#i$vi#j$vi#k$vi#l$vi#m$vi#n$vi#o$vi#p$vi#r$vi#t$vi#v$vi#w$vi'm$vi(T$vi(d$vi!h$vi!T$vi'k$vi#Y$vip$vi!Y$vi%b$vi!b$vi~P#,gOe'Qa!W'Qa~P!0kO!W'Ra!h'Ra~P!7zO!W.bO!h(_i~O#z#]i!W#]i!X#]i~P#CQOP$]Oz#yO{#zO}#{O!g#wO!i#xO!m$]O(TVOY#gil#gi!f#gi#i#gi#j#gi#k#gi#l#gi#m#gi#n#gi#o#gi#p#gi#r#gi#t#gi#v#gi#w#gi#z#gi(d#gi(k#gi(l#gi!W#gi!X#gi~O#h#gi~P%2}O#h9zO~P%2}OP$]Oz#yO{#zO}#{O!g#wO!i#xO!m$]O#h9zO#i9{O#j9{O#k9{O(TVOY#gi!f#gi#l#gi#m#gi#n#gi#o#gi#p#gi#r#gi#t#gi#v#gi#w#gi#z#gi(d#gi(k#gi(l#gi!W#gi!X#gi~Ol#gi~P%5YOl9|O~P%5YOP$]Ol9|Oz#yO{#zO}#{O!g#wO!i#xO!m$]O#h9zO#i9{O#j9{O#k9{O#l9}O(TVO#r#gi#t#gi#v#gi#w#gi#z#gi(d#gi(k#gi(l#gi!W#gi!X#gi~OY#gi!f#gi#m#gi#n#gi#o#gi#p#gi~P%7eOY:YO!f:OO#m:OO#n:OO#o:XO#p:OO~P%7eOP$]OY:YOl9|Oz#yO{#zO}#{O!f:OO!g#wO!i#xO!m$]O#h9zO#i9{O#j9{O#k9{O#l9}O#m:OO#n:OO#o:XO#p:OO#r:PO(TVO#t#gi#v#gi#w#gi#z#gi(d#gi(l#gi!W#gi!X#gi~O(k#gi~P%:PO(k#|O~P%:POP$]OY:YOl9|Oz#yO{#zO}#{O!f:OO!g#wO!i#xO!m$]O#h9zO#i9{O#j9{O#k9{O#l9}O#m:OO#n:OO#o:XO#p:OO#r:PO#t:RO(TVO(k#|O#v#gi#w#gi#z#gi(d#gi!W#gi!X#gi~O(l#gi~P%<[O(l#}O~P%<[OP$]OY:YOl9|Oz#yO{#zO}#{O!f:OO!g#wO!i#xO!m$]O#h9zO#i9{O#j9{O#k9{O#l9}O#m:OO#n:OO#o:XO#p:OO#r:PO#t:RO#v:TO(TVO(k#|O(l#}O~O#w#gi#z#gi(d#gi!W#gi!X#gi~P%>gO_#xy!W#xy'm#xy'k#xy!T#xy!h#xyp#xy!Y#xy%b#xy!b#xy~P!7zOh;mOz)vO})wO(k)yO(l){O~OP#giY#gil#gi{#gi!f#gi!g#gi!i#gi!m#gi#h#gi#i#gi#j#gi#k#gi#l#gi#m#gi#n#gi#o#gi#p#gi#r#gi#t#gi#v#gi#w#gi#z#gi(T#gi(d#gi!W#gi!X#gi~P%A_O!g#wOP(SXY(SXh(SXl(SXz(SX{(SX}(SX!f(SX!i(SX!m(SX#h(SX#i(SX#j(SX#k(SX#l(SX#m(SX#n(SX#o(SX#p(SX#r(SX#t(SX#v(SX#w(SX#z(SX(T(SX(d(SX(k(SX(l(SX!W(SX!X(SX~O#z#{i!W#{i!X#{i~P#CQO#z!oi!X!oi~P$$nO!X6`O~O!W'[a!X'[a~P#CQO!b#uO(d'gO!W']a!h']a~O!W/VO!h(qi~O!W/VO!b#uO!h(qi~Oe$vq!W$vq#Y$vq#z$vq~P!0kO!T'_a!W'_a~P#,gO!b6gO~O!W/_O!T(ri~P#,gO!W/_O!T(ri~O!T6kO~O!b#uO#p6pO~Ol6qO!b#uO(d'gO~O!T6sO~Oe$xq!W$xq#Y$xq#z$xq~P!0kO_$jy!W$jy'm$jy'k$jy!T$jy!h$jyp$jy!Y$jy%b$jy!b$jy~P!7zO!b5kO~O!W4WO!Y(sa~O_#]y!W#]y'm#]y'k#]y!T#]y!h#]yp#]y!Y#]y%b#]y!b#]y~P!7zOY6xO~O!W0bO!X(zi~O^7OO~O(W(tO!W'dX!X'dX~O!W4nO!X(wa~OjkO'v7VO~P.iO!X7YO~P%$nOm!nO}7ZO'xTO'{UO(W!mO(c!sO~O!Y0zO~O!Y0zO%b7]O~Oh7`O!Y0zO%b7]O~OY7eO!W'ga!X'ga~O!W1VO!X(xi~O!h7iO~O!h7jO~O!h7mO~O!h7mO~P%[O_7oO~O!b7pO~O!h7qO~O!W(ii!X(ii~P#CQO_%gO#Y7yO'm%gO~O!W(fy!h(fy_(fy'm(fy~P!7zO!W(`O!h(ey~O!Y'VO%b7|O~O#e$vqP$vqY$vq_$vql$vq{$vq!W$vq!f$vq!g$vq!i$vq!m$vq#h$vq#i$vq#j$vq#k$vq#l$vq#m$vq#n$vq#o$vq#p$vq#r$vq#t$vq#v$vq#w$vq'm$vq(T$vq(d$vq!h$vq!T$vq'k$vq#Y$vqp$vq!Y$vq%b$vq!b$vq~P#,gO#e$xqP$xqY$xq_$xql$xq{$xq!W$xq!f$xq!g$xq!i$xq!m$xq#h$xq#i$xq#j$xq#k$xq#l$xq#m$xq#n$xq#o$xq#p$xq#r$xq#t$xq#v$xq#w$xq'm$xq(T$xq(d$xq!h$xq!T$xq'k$xq#Y$xqp$xq!Y$xq%b$xq!b$xq~P#,gO!W'Ri!h'Ri~P!7zO#z#]q!W#]q!X#]q~P#CQOz/yO{/yO}/zOPwaYwahwalwa!fwa!gwa!iwa!mwa#hwa#iwa#jwa#kwa#lwa#mwa#nwa#owa#pwa#rwa#twa#vwa#wwa#zwa(Twa(dwa(kwa(lwa!Wwa!Xwa~Oz)vO})wOP$maY$mah$mal$ma{$ma!f$ma!g$ma!i$ma!m$ma#h$ma#i$ma#j$ma#k$ma#l$ma#m$ma#n$ma#o$ma#p$ma#r$ma#t$ma#v$ma#w$ma#z$ma(T$ma(d$ma(k$ma(l$ma!W$ma!X$ma~Oz)vO})wOP$oaY$oah$oal$oa{$oa!f$oa!g$oa!i$oa!m$oa#h$oa#i$oa#j$oa#k$oa#l$oa#m$oa#n$oa#o$oa#p$oa#r$oa#t$oa#v$oa#w$oa#z$oa(T$oa(d$oa(k$oa(l$oa!W$oa!X$oa~OP$}aY$}al$}a{$}a!f$}a!g$}a!i$}a!m$}a#h$}a#i$}a#j$}a#k$}a#l$}a#m$}a#n$}a#o$}a#p$}a#r$}a#t$}a#v$}a#w$}a#z$}a(T$}a(d$}a!W$}a!X$}a~P%A_O#z$iq!W$iq!X$iq~P#CQO#z$jq!W$jq!X$jq~P#CQO!X8WO~O#z8XO~P!0kO!b#uO!W']i!h']i~O!b#uO(d'gO!W']i!h']i~O!W/VO!h(qq~O!T'_i!W'_i~P#,gO!W/_O!T(rq~O!T8_O~P#,gO!T8_O~Oe(Ry!W(Ry~P!0kO!W'ba!Y'ba~P#,gO_%Uq!Y%Uq'm%Uq!W%Uq~P#,gOY8dO~O!W0bO!X(zq~O#Y8hO!W'da!X'da~O!W4nO!X(wi~P#CQOPZXYZXlZXzZX{ZX}ZX!TZX!WZX!fZX!gZX!iZX!mZX#YZX#edX#hZX#iZX#jZX#kZX#lZX#mZX#nZX#oZX#pZX#rZX#tZX#vZX#wZX#|ZX(TZX(dZX(kZX(lZX~O!b%SX#p%SX~P&2_O!Y0zO%b8lO~O'xTO'{UO(W8qO~O!W1VO!X(xq~O!h8tO~O!h8uO~O!h8vO~O!h8vO~P%[O#Y8yO!W#by!X#by~O!W#by!X#by~P#CQO!Y'VO%b9OO~O#z#xy!W#xy!X#xy~P#CQOP$viY$vil$vi{$vi!f$vi!g$vi!i$vi!m$vi#h$vi#i$vi#j$vi#k$vi#l$vi#m$vi#n$vi#o$vi#p$vi#r$vi#t$vi#v$vi#w$vi#z$vi(T$vi(d$vi!W$vi!X$vi~P%A_Oz)vO})wO(l){OP%YiY%Yih%Yil%Yi{%Yi!f%Yi!g%Yi!i%Yi!m%Yi#h%Yi#i%Yi#j%Yi#k%Yi#l%Yi#m%Yi#n%Yi#o%Yi#p%Yi#r%Yi#t%Yi#v%Yi#w%Yi#z%Yi(T%Yi(d%Yi(k%Yi!W%Yi!X%Yi~Oz)vO})wOP%[iY%[ih%[il%[i{%[i!f%[i!g%[i!i%[i!m%[i#h%[i#i%[i#j%[i#k%[i#l%[i#m%[i#n%[i#o%[i#p%[i#r%[i#t%[i#v%[i#w%[i#z%[i(T%[i(d%[i(k%[i(l%[i!W%[i!X%[i~O#z$jy!W$jy!X$jy~P#CQO#z#]y!W#]y!X#]y~P#CQO!b#uO!W']q!h']q~O!W/VO!h(qy~O!T'_q!W'_q~P#,gO!T9VO~P#,gO!W0bO!X(zy~O!W4nO!X(wq~O!Y0zO%b9^O~O!h9aO~O!Y'VO%b9fO~OP$vqY$vql$vq{$vq!f$vq!g$vq!i$vq!m$vq#h$vq#i$vq#j$vq#k$vq#l$vq#m$vq#n$vq#o$vq#p$vq#r$vq#t$vq#v$vq#w$vq#z$vq(T$vq(d$vq!W$vq!X$vq~P%A_OP$xqY$xql$xq{$xq!f$xq!g$xq!i$xq!m$xq#h$xq#i$xq#j$xq#k$xq#l$xq#m$xq#n$xq#o$xq#p$xq#r$xq#t$xq#v$xq#w$xq#z$xq(T$xq(d$xq!W$xq!X$xq~P%A_Oe%^!Z!W%^!Z#Y%^!Z#z%^!Z~P!0kO!W'dq!X'dq~P#CQO!W#b!Z!X#b!Z~P#CQO#e%^!ZP%^!ZY%^!Z_%^!Zl%^!Z{%^!Z!W%^!Z!f%^!Z!g%^!Z!i%^!Z!m%^!Z#h%^!Z#i%^!Z#j%^!Z#k%^!Z#l%^!Z#m%^!Z#n%^!Z#o%^!Z#p%^!Z#r%^!Z#t%^!Z#v%^!Z#w%^!Z'm%^!Z(T%^!Z(d%^!Z!h%^!Z!T%^!Z'k%^!Z#Y%^!Zp%^!Z!Y%^!Z%b%^!Z!b%^!Z~P#,gOP%^!ZY%^!Zl%^!Z{%^!Z!f%^!Z!g%^!Z!i%^!Z!m%^!Z#h%^!Z#i%^!Z#j%^!Z#k%^!Z#l%^!Z#m%^!Z#n%^!Z#o%^!Z#p%^!Z#r%^!Z#t%^!Z#v%^!Z#w%^!Z#z%^!Z(T%^!Z(d%^!Z!W%^!Z!X%^!Z~P%A_Op(XX~P1qO'w!lO~P!*SO!TdX!WdX#YdX~P&2_OPZXYZXlZXzZX{ZX}ZX!WZX!WdX!fZX!gZX!iZX!mZX#YZX#YdX#edX#hZX#iZX#jZX#kZX#lZX#mZX#nZX#oZX#pZX#rZX#tZX#vZX#wZX#|ZX(TZX(dZX(kZX(lZX~O!bdX!hZX!hdX(ddX~P&GuOP9qOQ9qOb;bOc!iOjkOl9qOmkOnkOtkOv9qOx9qO}WO!RkO!SkO!YXO!d9tO!iZO!l9qO!m9qO!n9qO!p9uO!r9xO!u!hO$R!kO$VfO'v)UO'xTO'{UO(TVO(c[O(p;`O~O!W:VO!X$la~Oj%SOl$tOm$sOn$sOt%TOv%UOx:]O}${O!Y$|O!d;gO!i$xO#d:cO$R%YO$n:_O$p:aO$s%ZO'v(lO'xTO'{UO(P%RO(T$uO~O#q)]O~P&LkO!XZX!XdX~P&GuO#e9yO~O!b#uO#e9yO~O#Y:ZO~O#p:OO~O#Y:eO!W(iX!X(iX~O#Y:ZO!W(gX!X(gX~O#e:fO~Oe:hO~P!0kO#e:mO~O#e:nO~O!b#uO#e:oO~O!b#uO#e:fO~O#z:pO~P#CQO#e:qO~O#e:rO~O#e:sO~O#e:tO~O#e:uO~O#e:vO~O#z:wO~P!0kO#z:xO~P!0kO$V~!g!}#O#Q#R#U#c#d#o(p$n$p$s%V%a%b%c%j%l%o%p%r%t~'qR$V(p#i!S'o'w#jm#h#klz'p(W'p'v$X$Z$X~",goto:"$'R)OPPPP)PPP)SP)eP*t.xPPPP5YPP5pP;l>sP?WP?WPPP?WP@xP?WP?WP?WP@|PPARPAlPFdPPPFhPPPPFhIiPPPIoJjPFhPLxPPPP! WFhPPPFhPFhP!#fFhP!&z!'|!(VP!(y!(}!(yPPPPP!,Y!'|PP!,v!-pP!0dFhFh!0i!3s!8Y!8Y!wP#@W#@_#@gPPPP#Du#Gl#NT#NW#NZ$ S$ V$ Y$ a$ iPP$ o$ s$!k$#j$#n$$SPP$$W$$^$$bP$$e$$i$$l$%b$%y$&b$&f$&i$&l$&r$&u$&y$&}R!{RoqOXst!Z#c%f&i&k&l&n,b,g1g1jY!uQ'V-S0z4uQ%lvQ%tyQ%{|Q&a!VS&}!e,zQ']!iS'c!r!xS*_$|*dQ+`%uQ+m%}Q,R&ZQ-Q'UQ-['^Q-d'dQ/p*fQ1U,SR:d9u%OdOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&i&k&l&n&r&z'X'i'y'{(R(Y(n(r(v)u*x*|,_,b,g-W-`-n-t.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2w4r4|5^5_5b5u7Z7`7o7yS#p]9r!r)W$[$m'O)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cQ*o%VQ+e%wQ,T&^Q,[&fQ.X:[Q0W+WQ0[+YQ0g+fQ1^,YQ2k.UQ4`0bQ5T1VQ6R2oQ6X:]Q6z4aR8P6S&|kOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;ct!nQ!r!u!x!y&}'U'V'c'd'e,z-Q-S-d0z4u4w$^$si#u#w$c$d$x${%W%X%])q)w)z)|)}*U*[*j*k+V+Y+q+t.T._/P/^/_/a/|0q0t0|2n3f3p3x4O4W4Y4{6P6g6p7]7|8X8l9O9^9f:X:Y:^:_:`:a:b:c:i:j:k:l:m:n:q:r:s:t:w:x;`;h;i;l;mQ&O|Q&{!eS'R%b,}Q+e%wQ/{*sQ0g+fQ0l+lQ1],XQ1^,YQ4`0bQ4i0nQ5W1XQ5X1[Q6z4aQ6}4fQ7h5ZQ8g7OR8r7ernOXst!V!Z#c%f&`&i&k&l&n,b,g1g1jR,V&b&v^OPXYstuvwz!Z!`!g!j!o#R#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m%f%l%y&b&e&f&i&k&l&n&r&z'X'i'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;b;c[#[WZ#V#Y'O'y!S%cm#g#h#k%^%a(S(^(_(`*z*{*},^,t-r-x-y-z-|1o2g2h5k5|Q%oxQ%syS%x|%}Q&U!TQ'Y!hQ'[!iQ(g#rS*R$x*VS+_%t%uQ+c%wQ+|&XQ,Q&ZS-Z']'^Q.W(hQ/Z*SQ0`+`Q0f+fQ0h+gQ0k+kQ1P+}S1T,R,SQ2X-[Q3g/VQ4_0bQ4c0eQ4h0mQ5S1UQ6d3hQ6y4aQ6|4eQ8c6xR9X8dv$zi#w%W%X%])z)|*U*j*k._/^/|3f4O8X;`;h;i!S%qy!i!t%s%t%u&|'[']'^'b'l*^+_+`,w-Z-[-c/h0`2Q2X2`3zQ+X%oQ+r&RQ+u&SQ,P&ZQ.V(gQ1O+|U1S,Q,R,SQ2p.WQ4}1PS5R1T1UQ7d5S#O;d#u$c$d$x${)q)w)}*[+V+Y+q+t.T/P/_/a0q0t0|2n3p3x4W4Y4{6P6g6p7]7|8l9O9^9f:^:`:b:i:k:m:q:s:w;l;mg;e:X:Y:_:a:c:j:l:n:r:t:xW%Pi%R*l;`S&R!Q&`Q&S!RQ&T!SR+p&P$_%Oi#u#w$c$d$x${%W%X%])q)w)z)|)}*U*[*j*k+V+Y+q+t.T._/P/^/_/a/|0q0t0|2n3f3p3x4O4W4Y4{6P6g6p7]7|8X8l9O9^9f:X:Y:^:_:`:a:b:c:i:j:k:l:m:n:q:r:s:t:w:x;`;h;i;l;mT)r$u)sV*p%V:[:]U'R!e%b,}S(u#y#zQ+j%zS.P(c(dQ0u+vQ4P/yR7S4n&|kOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;c$i$`c#X#d%j%k%m'x(O(j(q(y(z({(|(})O)P)Q)R)S)T)V)Y)^)h+T+i,x-g-l-q-s.^.d.h.j.k.l.{/}1v1y2Z2b2v2{2|2}3O3P3Q3R3S3T3U3V3W3X3[3]3b4T4]5n5t5y6V6W6]6^7U7s7w8Q8U8V8{9Z9b9s;VT#SV#T&}kOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cQ'P!eR1|,zv!nQ!e!r!u!x!y&}'U'V'c'd'e,z-Q-S-d0z4u4wS*^$|*dS/h*_*fQ/q*gQ0w+xQ3z/pR3}/snqOXst!Z#c%f&i&k&l&n,b,g1g1jQ&p!^Q'm!wS(i#t9yQ+]%rQ+z&UQ+{&WQ-X'ZQ-f'fS.](n:fS0O*x:oQ0^+^Q0y+yQ1n,iQ1p,jQ1x,uQ2V-YQ2Y-^S4U0P:uQ4Z0_S4^0a:vQ5m1zQ5q2WQ5v2_Q6w4[Q7t5oQ7u5rQ7x5wR8x7q$d$_c#X#d%k%m'x(O(j(q(y(z({(|(})O)P)Q)R)S)T)V)Y)^)h+T+i,x-g-l-q-s.^.d.h.k.l.{/}1v1y2Z2b2v2{2|2}3O3P3Q3R3S3T3U3V3W3X3[3]3b4T4]5n5t5y6V6W6]6^7U7s7w8Q8U8V8{9Z9b9s;VS(f#o'`U*i$}(m3ZS+S%j.jQ2l0WQ6O2kQ8O6RR9P8P$d$^c#X#d%k%m'x(O(j(q(y(z({(|(})O)P)Q)R)S)T)V)Y)^)h+T+i,x-g-l-q-s.^.d.h.k.l.{/}1v1y2Z2b2v2{2|2}3O3P3Q3R3S3T3U3V3W3X3[3]3b4T4]5n5t5y6V6W6]6^7U7s7w8Q8U8V8{9Z9b9s;VS(e#o'`S(w#z$_S+R%j.jS.Q(d(fQ.m)XQ0T+SR2i.R&|kOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cS#p]9rQ&k!XQ&l!YQ&n![Q&o!]R1f,eQ'W!hQ+U%oQ-V'YS.S(g+XQ2T-UW2m.V.W0V0XQ5p2UU5}2j2l2pS7{6O6QS8}7}8OS9d8|9PQ9l9eR9o9mU!vQ'V-ST4s0z4u!Q_OXZ`st!V!Z#c#g%^%f&`&b&i&k&l&n(`,b,g-y1g1j]!pQ!r'V-S0z4uT#p]9r%Y{OPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&f&i&k&l&n&r&z'X'i'y'{(R(Y(n(r(v)u*x*|+W,_,b,g-W-`-n-t.U.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2o2w4r4|5^5_5b5u6S7Z7`7o7yS(u#y#zS.P(c(d!s:|$[$m'O)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cY!tQ'V-S0z4uQ'b!rS'l!u!xS'n!y4wS-c'c'dQ-e'eR2`-dQ'k!tS([#f1aS-b'b'nQ/Y*RQ/f*^Q2a-eQ3l/ZS3u/g/qQ6c3gS6n3{3}Q8Z6dR8b6qQ#vbQ'j!tS(Z#f1aS(]#l*wQ*y%_Q+Z%pQ+a%vU-a'b'k'nQ-u([Q/X*RQ/e*^Q/k*aQ0]+[Q1Q,OS2^-b-eQ2f-}S3k/Y/ZS3t/f/qQ3w/jQ3y/lQ5P1RQ5x2aQ6b3gQ6f3lS6j3u3}Q6o3|Q7b5QS8Y6c6dQ8^6kQ8`6nQ8o7cQ9T8ZQ9U8_Q9W8bQ9`8pQ9h9VQ;P:zQ;[;TR;];UV!vQ'V-S%YaOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&f&i&k&l&n&r&z'X'i'y'{(R(Y(n(r(v)u*x*|+W,_,b,g-W-`-n-t.U.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2o2w4r4|5^5_5b5u6S7Z7`7o7yS#vz!j!r:y$[$m'O)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cR;P;b%YbOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&f&i&k&l&n&r&z'X'i'y'{(R(Y(n(r(v)u*x*|+W,_,b,g-W-`-n-t.U.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2o2w4r4|5^5_5b5u6S7Z7`7o7yQ%_j!S%py!i!t%s%t%u&|'[']'^'b'l*^+_+`,w-Z-[-c/h0`2Q2X2`3zS%vz!jQ+[%qQ,O&ZW1R,P,Q,R,SU5Q1S1T1US7c5R5SQ8p7d!r:z$[$m'O)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cQ;T;aR;U;b$|eOPXYstuvw!Z!`!g!o#R#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&i&k&l&n&r&z'X'i'{(R(Y(n(r(v)u*x*|+W,_,b,g-W-`-n-t.U.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2o2w4r4|5^5_5b5u6S7Z7`7o7yY#aWZ#V#Y'y!S%cm#g#h#k%^%a(S(^(_(`*z*{*},^,t-r-x-y-z-|1o2g2h5k5|Q,]&f!p:{$[$m)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cR;O'OS'S!e%bR2O,}%OdOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&i&k&l&n&r&z'X'i'y'{(R(Y(n(r(v)u*x*|,_,b,g-W-`-n-t.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2w4r4|5^5_5b5u7Z7`7o7y!r)W$[$m'O)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cQ,[&fQ0W+WQ2k.UQ6R2oR8P6S!f$Uc#X%j'x(O(j(q)Q)R)S)T)Y)^+i-g-l-q-s.^.d.{/}2Z2b2v3X4T4]5t5y6V7w8{9s!T:Q)V)h,x.j1v1y2{3T3U3V3W3[3b5n6W6]6^7U7s8Q8U8V9Z9b;V!b$Wc#X%j'x(O(j(q)S)T)Y)^+i-g-l-q-s.^.d.{/}2Z2b2v3X4T4]5t5y6V7w8{9s!P:S)V)h,x.j1v1y2{3V3W3[3b5n6W6]6^7U7s8Q8U8V9Z9b;V!^$[c#X%j'x(O(j(q)Y)^+i-g-l-q-s.^.d.{/}2Z2b2v3X4T4]5t5y6V7w8{9sQ3f/Tz;c)V)h,x.j1v1y2{3[3b5n6W6]6^7U7s8Q8U8V9Z9b;VQ;h;jR;i;k&|kOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cS$nh$oR3_.p'TgOPWXYZhstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m$o%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.p.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cT$jf$pQ$hfS)a$k)eR)m$pT$if$pT)c$k)e'ThOPWXYZhstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m$o%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.p.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cT$nh$oQ$qhR)l$o%YjOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&f&i&k&l&n&r&z'X'i'y'{(R(Y(n(r(v)u*x*|+W,_,b,g-W-`-n-t.U.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2o2w4r4|5^5_5b5u6S7Z7`7o7y!s;a$[$m'O)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;c#clOPXZst!Z!`!o#R#c#n#{$m%f&b&e&f&i&k&l&n&r&z'X(v)j*|+W,_,b,g-W.U.q/z0}1_1`1b1d1g1j1l2o3^4r4|5^5_5b6S7Z7`7ov$}i#w%W%X%])z)|*U*j*k._/^/|3f4O8X;`;h;i#O(m#u$c$d$x${)q)w)}*[+V+Y+q+t.T/P/_/a0q0t0|2n3p3x4W4Y4{6P6g6p7]7|8l9O9^9f:^:`:b:i:k:m:q:s:w;l;mQ*t%ZQ.|)vg3Z:X:Y:_:a:c:j:l:n:r:t:xv$yi#w%W%X%])z)|*U*j*k._/^/|3f4O8X;`;h;iQ*W$zS*a$|*dQ*u%[Q/l*b#O;R#u$c$d$x${)q)w)}*[+V+Y+q+t.T/P/_/a0q0t0|2n3p3x4W4Y4{6P6g6p7]7|8l9O9^9f:^:`:b:i:k:m:q:s:w;l;mf;S:X:Y:_:a:c:j:l:n:r:t:xQ;W;dQ;X;eQ;Y;fR;Z;gv$}i#w%W%X%])z)|*U*j*k._/^/|3f4O8X;`;h;i#O(m#u$c$d$x${)q)w)}*[+V+Y+q+t.T/P/_/a0q0t0|2n3p3x4W4Y4{6P6g6p7]7|8l9O9^9f:^:`:b:i:k:m:q:s:w;l;mg3Z:X:Y:_:a:c:j:l:n:r:t:xnoOXst!Z#c%f&i&k&l&n,b,g1g1jQ*Z${Q,p&uQ,q&wR3o/_$^%Oi#u#w$c$d$x${%W%X%])q)w)z)|)}*U*[*j*k+V+Y+q+t.T._/P/^/_/a/|0q0t0|2n3f3p3x4O4W4Y4{6P6g6p7]7|8X8l9O9^9f:X:Y:^:_:`:a:b:c:i:j:k:l:m:n:q:r:s:t:w:x;`;h;i;l;mQ+s&SQ0s+uQ4l0rR7R4mT*c$|*dS*c$|*dT4t0z4uS/j*`4rT3|/r7ZQ+Z%pQ/k*aQ0]+[Q1Q,OQ5P1RQ7b5QQ8o7cR9`8pn)z$v(o*v/]/t/u2t3m4S6a6r9S;Q;^;_!Y:i(k)[*Q*Y.[.x.}/T/b0U0p0r2s3n3r4k4m6T6U6h6l6t6v8]8a9g;j;k]:j3Y6[8R9Q9R9pp)|$v(o*v/R/]/t/u2t3m4S6a6r9S;Q;^;_![:k(k)[*Q*Y.[.x.}/T/b0U0p0r2q2s3n3r4k4m6T6U6h6l6t6v8]8a9g;j;k_:l3Y6[8R8S9Q9R9prnOXst!V!Z#c%f&`&i&k&l&n,b,g1g1jQ&]!UR,_&frnOXst!V!Z#c%f&`&i&k&l&n,b,g1g1jR&]!UQ+w&TR0o+psnOXst!V!Z#c%f&`&i&k&l&n,b,g1g1jQ0{+|S4z1O1PU7[4x4y4}S8k7^7_S9[8j8mQ9i9]R9n9jQ&d!VR,W&`R5W1XS%x|%}R0h+gQ&i!WR,b&jR,h&oT1h,g1jR,l&pQ,k&pR1q,lQ'p!zR-h'pSsOtQ#cXT%is#cQ!}TR'r!}Q#QUR't#QQ)s$uR.y)sQ#TVR'v#TQ#WWU'|#W'}-oQ'}#XR-o(OQ,{'PR1},{Q.`(oR2u.`Q.c(qS2x.c2yR2y.dQ-S'VR2R-SY!rQ'V-S0z4uR'a!rS#^W%aU(T#^(U-pQ(U#_R-p(PQ-O'SR2P-Ot`OXst!V!Z#c%f&`&b&i&k&l&n,b,g1g1jS#gZ%^U#q`#g-yR-y(`Q(a#iQ-v(]W.O(a-v2d5zQ2d-wR5z2eQ)e$kR.r)eQ$ohR)k$oQ$bcU)Z$b-k:WQ-k9sR:W)hQ/W*RW3i/W3j6e8[U3j/X/Y/ZS6e3k3lR8[6f#o)x$v(k(o)[*Q*Y*q*r*v.Y.Z.[.x.}/R/S/T/]/b/t/u0U0p0r2q2r2s2t3Y3m3n3r4S4k4m6T6U6Y6Z6[6a6h6l6r6t6v8R8S8T8]8a9Q9R9S9g9p;Q;^;_;j;kQ/`*YU3q/`3s6iQ3s/bR6i3rQ*d$|R/n*dQ*m%QR/w*mQ4X0UR6u4XQ+O%dR0S+OQ4o0uS7T4o8iR8i7UQ+y&UR0x+yQ4u0zR7X4uQ1W,TS5U1W7fR7f5WQ0c+cW4b0c4d6{8eQ4d0fQ6{4cR8e6|Q+h%xR0i+hQ1j,gR5f1jYrOXst#cQ&m!ZQ+Q%fQ,a&iQ,c&kQ,d&lQ,f&nQ1e,bS1h,g1jR5e1gQ%hpQ&q!_Q&t!aQ&v!bQ&x!cQ'h!tQ+P%eQ+]%rQ+o&OQ,V&dQ,n&sW-_'b'j'k'nQ-f'fQ/m*cQ0^+^S1Z,W,ZQ1r,mQ1s,pQ1t,qQ2Y-^W2[-a-b-e-gQ4Z0_Q4g0lQ4j0pQ5O1QQ5Y1]Q5d1fU5s2Z2^2aQ5v2_Q6w4[Q7P4iQ7Q4kQ7W4tQ7a5PQ7g5XS7v5t5xQ7x5wQ8f6}Q8n7bQ8s7hQ8z7wQ9Y8gQ9_8oQ9c8{R9k9`Q%ryQ'Z!iQ'f!tU+^%s%t%uQ,u&|U-Y'[']'^S-^'b'lQ/d*^S0_+_+`Q1z,wS2W-Z-[Q2_-cQ3v/hQ4[0`Q5o2QQ5r2XQ5w2`R6m3zS$wi;`R*n%RU%Qi%R;`R/v*lQ$viS(k#u+YQ(o#wS)[$c$dQ*Q$xQ*Y${Q*q%WQ*r%XQ*v%]Q.Y:^Q.Z:`Q.[:bQ.x)qS.})w/PQ/R)zQ/S)|Q/T)}Q/]*UQ/b*[Q/t*jQ/u*kh0U+V.T0|2n4{6P7]7|8l9O9^9fQ0p+qQ0r+tQ2q:iQ2r:kQ2s:mQ2t._S3Y:X:YQ3m/^Q3n/_Q3r/aQ4S/|Q4k0qQ4m0tQ6T:qQ6U:sQ6Y:_Q6Z:aQ6[:cQ6a3fQ6h3pQ6l3xQ6r4OQ6t4WQ6v4YQ8R:nQ8S:jQ8T:lQ8]6gQ8a6pQ9Q:rQ9R:tQ9S8XQ9g:wQ9p:xQ;Q;`Q;^;hQ;_;iQ;j;lR;k;mnpOXst!Z#c%f&i&k&l&n,b,g1g1jQ!fPS#eZ#nQ&s!`U'_!o4r7ZQ'u#RQ(x#{Q)i$mS,Z&b&eQ,`&fQ,m&rQ,r&zQ-U'XQ.f(vQ.v)jQ0Q*|Q0X+WQ1c,_Q2U-WQ2l.UQ3a.qQ4Q/zQ4y0}Q5[1_Q5]1`Q5a1bQ5c1dQ5h1lQ6O2oQ6_3^Q7_4|Q7k5^Q7l5_Q7n5bQ8O6SQ8m7`R8w7o#WcOPXZst!Z!`!o#c#n#{%f&b&e&f&i&k&l&n&r&z'X(v*|+W,_,b,g-W.U/z0}1_1`1b1d1g1j1l2o4r4|5^5_5b6S7Z7`7oQ#XWQ#dYQ%juQ%kvS%mw!gS'x#V'{Q(O#YQ(j#tQ(q#xQ(y$OQ(z$PQ({$QQ(|$RQ(}$SQ)O$TQ)P$UQ)Q$VQ)R$WQ)S$XQ)T$YQ)V$[Q)Y$aQ)^$eW)h$m)j.q3^Q+T%lQ+i%yS,x'O1{Q-g'iS-l'y-nQ-q(RQ-s(YQ.^(nQ.d(rQ.h9qQ.j9tQ.k9uQ.l9xQ.{)uQ/}*xQ1v,sQ1y,vQ2Z-`Q2b-tQ2v.bQ2{9yQ2|9zQ2}9{Q3O9|Q3P9}Q3Q:OQ3R:PQ3S:QQ3T:RQ3U:SQ3V:TQ3W:UQ3X.iQ3[:ZQ3]:dQ3b:VQ4T0PQ4]0aQ5n:eQ5t2]Q5y2cQ6V2wQ6W:fQ6]:hQ6^:oQ7U4pQ7s5lQ7w5uQ8Q:pQ8U:uQ8V:vQ8{7yQ9Z8hQ9b8yQ9s#RR;V;cR#ZWR'Q!eY!tQ'V-S0z4uS&|!e,zQ'b!rS'l!u!xS'n!y4wS,w&}'US-c'c'dQ-e'eQ2Q-QR2`-dR(p#wR(s#xQ!fQT-R'V-S]!qQ!r'V-S0z4uQ#o]R'`9rT#jZ%^S#iZ%^S%dm,^U(]#g#h#kS-w(^(_Q-{(`Q0R*}Q2e-xU2f-y-z-|S5{2g2hR7z5|`#]W#V#Y%a'y(S*z-rr#fZm#g#h#k%^(^(_(`*}-x-y-z-|2g2h5|Q1a,^Q1w,tQ5j1oQ7r5kT:}'O*{T#`W%aS#_W%aS'z#V(SS(P#Y*zS,y'O*{T-m'y-rT'T!e%bQ$kfR)o$pT)d$k)eR3`.pT*T$x*VR*]${Q0V+VQ2j.TQ4x0|Q6Q2nQ7^4{Q7}6PQ8j7]Q8|7|Q9]8lQ9e9OQ9j9^R9m9fnqOXst!Z#c%f&i&k&l&n,b,g1g1jQ&c!VR,V&`tmOXst!U!V!Z#c%f&`&i&k&l&n,b,g1g1jR,^&fT%em,^R0v+vR,U&^Q%||R+n%}R+d%wT&g!W&jT&h!W&jT1i,g1j",nodeNames:"\u26A0 ArithOp ArithOp LineComment BlockComment Script Hashbang ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > TypeParamList TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . ?. PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewExpression new TypeArgList CompareOp < ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies in const CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXStartTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast ArrowFunction TypeParamList SequenceExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",maxTerm:367,context:iS,nodeProps:[["group",-26,7,15,17,63,200,204,208,209,211,214,217,227,229,235,237,239,241,244,250,256,258,260,262,264,266,267,"Statement",-32,11,12,26,29,30,36,46,49,50,52,57,65,73,77,79,81,82,104,105,114,115,132,135,137,138,139,140,142,143,163,164,166,"Expression",-23,25,27,31,35,37,39,167,169,171,172,174,175,176,178,179,180,182,183,184,194,196,198,199,"Type",-3,85,97,103,"ClassItem"],["openedBy",32,"InterpolationStart",51,"[",55,"{",70,"(",144,"JSXStartTag",156,"JSXStartTag JSXStartCloseTag"],["closedBy",34,"InterpolationEnd",45,"]",56,"}",71,")",145,"JSXSelfCloseEndTag JSXEndTag",161,"JSXEndTag"]],propSources:[oS],skippedNodes:[0,3,4,270],repeatNodeCount:33,tokenData:"$Fl(CSR!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#8g!R![#:v![!]#Gv!]!^#IS!^!_#J^!_!`#Nu!`!a$#a!a!b$(n!b!c$,m!c!}Er!}#O$-w#O#P$/R#P#Q$4j#Q#R$5t#R#SEr#S#T$7R#T#o$8]#o#p$s#r#s$@P#s$f%Z$f$g+g$g#BYEr#BY#BZ$AZ#BZ$ISEr$IS$I_$AZ$I_$I|Er$I|$I}$Df$I}$JO$Df$JO$JTEr$JT$JU$AZ$JU$KVEr$KV$KW$AZ$KW&FUEr&FU&FV$AZ&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$AZ?HUOEr(n%d_$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$e&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$e&j'|!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU'|!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$e&j'ypOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU'ypOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX'yp'|!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z(CS+rq$e&j'yp'|!b'o(;dOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z(CS.ST'z#S$e&j'p(;dO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c(CS.n_$e&j'yp'|!b'p(;dOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`/x`$e&j!m$Ip'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S1V`#r$Id$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S2d_#r$Id$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$2b3l_'x$(n$e&j'|!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k*r4r_$e&j'|!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k)`5vX$e&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q)`6jT$`#t$e&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#t6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y#t7bO$`#t#t7eP;=`<%l6y)`7kP;=`<%l5q*r7w]$`#t$e&j'|!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}%W8uZ'|!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p%W9oU$`#t'|!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}%W:UP;=`<%l8p*r:[P;=`<%l4k#%|:hh$e&j'yp'|!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXUS$e&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSUSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWUS'|!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]US$e&j'ypOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWUS'ypOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYUS'yp'|!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%lQ^$e&j!SSOY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@Y!_!}!=y!}#O!Bw#O#P!Dj#P#o!=y#o#p!@Y#p;'S!=y;'S;=`!E[<%lO!=y&n!?Ta$e&j!SSO!^&c!_#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&cS!@_X!SSOY!@YZ!P!@Y!P!Q!@z!Q!}!@Y!}#O!Ac#O#P!Bb#P;'S!@Y;'S;=`!Bq<%lO!@YS!APU!SS#Z#[!@z#]#^!@z#a#b!@z#g#h!@z#i#j!@z#m#n!@zS!AfVOY!AcZ#O!Ac#O#P!A{#P#Q!@Y#Q;'S!Ac;'S;=`!B[<%lO!AcS!BOSOY!AcZ;'S!Ac;'S;=`!B[<%lO!AcS!B_P;=`<%l!AcS!BeSOY!@YZ;'S!@Y;'S;=`!Bq<%lO!@YS!BtP;=`<%l!@Y&n!B|[$e&jOY!BwYZ&cZ!^!Bw!^!_!Ac!_#O!Bw#O#P!Cr#P#Q!=y#Q#o!Bw#o#p!Ac#p;'S!Bw;'S;=`!Dd<%lO!Bw&n!CwX$e&jOY!BwYZ&cZ!^!Bw!^!_!Ac!_#o!Bw#o#p!Ac#p;'S!Bw;'S;=`!Dd<%lO!Bw&n!DgP;=`<%l!Bw&n!DoX$e&jOY!=yYZ&cZ!^!=y!^!_!@Y!_#o!=y#o#p!@Y#p;'S!=y;'S;=`!E[<%lO!=y&n!E_P;=`<%l!=y(Q!Eki$e&j'|!b!SSOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#Z&}#Z#[!Eb#[#]&}#]#^!Eb#^#a&}#a#b!Eb#b#g&}#g#h!Eb#h#i&}#i#j!Eb#j#m&}#m#n!Eb#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!f!GaZ'|!b!SSOY!GYZw!GYwx!@Yx!P!GY!P!Q!HS!Q!}!GY!}#O!Ic#O#P!Bb#P;'S!GY;'S;=`!JZ<%lO!GY!f!HZb'|!b!SSOY'}Zw'}x#O'}#P#Z'}#Z#[!HS#[#]'}#]#^!HS#^#a'}#a#b!HS#b#g'}#g#h!HS#h#i'}#i#j!HS#j#m'}#m#n!HS#n;'S'};'S;=`(f<%lO'}!f!IhX'|!bOY!IcZw!Icwx!Acx#O!Ic#O#P!A{#P#Q!GY#Q;'S!Ic;'S;=`!JT<%lO!Ic!f!JWP;=`<%l!Ic!f!J^P;=`<%l!GY(Q!Jh^$e&j'|!bOY!JaYZ&cZw!Jawx!Bwx!^!Ja!^!_!Ic!_#O!Ja#O#P!Cr#P#Q!Q#V#X%Z#X#Y!4|#Y#b%Z#b#c#Zd$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#?i!R!S#?i!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#?i#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#?tf$e&j'yp'|!bm$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#?i!R!S#?i!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#?i#S#b%Z#b#c#OS[i]||-1},{term:330,get:i=>lS[i]||-1},{term:68,get:i=>aS[i]||-1}],tokenPrec:12827});var Ar=class{constructor(e,t,n){this.state=e,this.pos=t,this.explicit=n,this.abortListeners=[]}tokenBefore(e){let t=A(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),n=Math.max(t.from,this.pos-250),r=t.text.slice(n-t.from,this.pos-t.from),s=r.search(cS(e,!1));return s<0?null:{from:n+s,to:this.pos,text:r.slice(s)}}get aborted(){return this.abortListeners==null}addEventListener(e,t){e=="abort"&&this.abortListeners&&this.abortListeners.push(t)}};function uf(i){let e=Object.keys(i).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function hS(i){let e=Object.create(null),t=Object.create(null);for(let{label:r}of i){e[r[0]]=!0;for(let s=1;stypeof r=="string"?{label:r}:r),[t,n]=e.every(r=>/^\w+$/.test(r.label))?[/\w*$/,/\w+$/]:hS(e);return r=>{let s=r.matchBefore(n);return s||r.explicit?{from:s?s.from:r.pos,options:e,validFor:t}:null}}function mf(i,e){return t=>{for(let n=A(t.state).resolveInner(t.pos,-1);n;n=n.parent){if(i.indexOf(n.name)>-1)return null;if(n.type.isTop)break}return e(t)}}function cS(i,e){var t;let{source:n}=i,r=e&&n[0]!="^",s=n[n.length-1]!="$";return!r&&!s?i:new RegExp(`${r?"^":""}(?:${n})${s?"$":""}`,(t=i.flags)!==null&&t!==void 0?t:i.ignoreCase?"i":"")}var fS=we.define();var uS=v.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"\xB7\xB7\xB7"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'\u0192'"}},".cm-completionIcon-class":{"&:after":{content:"'\u25CB'"}},".cm-completionIcon-interface":{"&:after":{content:"'\u25CC'"}},".cm-completionIcon-variable":{"&:after":{content:"'\u{1D465}'"}},".cm-completionIcon-constant":{"&:after":{content:"'\u{1D436}'"}},".cm-completionIcon-type":{"&:after":{content:"'\u{1D461}'"}},".cm-completionIcon-enum":{"&:after":{content:"'\u222A'"}},".cm-completionIcon-property":{"&:after":{content:"'\u25A1'"}},".cm-completionIcon-keyword":{"&:after":{content:"'\u{1F511}\uFE0E'"}},".cm-completionIcon-namespace":{"&:after":{content:"'\u25A2'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}}),hO=class{constructor(e,t,n,r){this.field=e,this.line=t,this.from=n,this.to=r}},cO=class i{constructor(e,t,n){this.field=e,this.from=t,this.to=n}map(e){let t=e.mapPos(this.from,-1,Oe.TrackDel),n=e.mapPos(this.to,1,Oe.TrackDel);return t==null||n==null?null:new i(this.field,t,n)}},fO=class i{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let n=[],r=[t],s=e.doc.lineAt(t),o=/^\s*/.exec(s.text)[0];for(let l of this.lines){if(n.length){let a=o,h=/^\t*/.exec(l)[0].length;for(let c=0;cnew cO(l.field,r[l.line]+l.from,r[l.line]+l.to));return{text:n,ranges:O}}static parse(e){let t=[],n=[],r=[],s;for(let o of e.split(/\r\n?|\n/)){for(;s=/[#$]\{(?:(\d+)(?::([^}]*))?|([^}]*))\}/.exec(o);){let O=s[1]?+s[1]:null,l=s[2]||s[3]||"",a=-1;for(let h=0;h=a&&c.field++}r.push(new hO(a,n.length,s.index,s.index+l.length)),o=o.slice(0,s.index)+l+o.slice(s.index+s[0].length)}for(let O;O=/\\([{}])/.exec(o);){o=o.slice(0,O.index)+O[1]+o.slice(O.index+O[0].length);for(let l of r)l.line==n.length&&l.from>O.index&&(l.from--,l.to--)}n.push(o)}return new i(n,r)}},dS=M.widget({widget:new class extends vt{toDOM(){let i=document.createElement("span");return i.className="cm-snippetFieldPosition",i}ignoreEvent(){return!1}}}),pS=M.mark({class:"cm-snippetField"}),wi=class i{constructor(e,t){this.ranges=e,this.active=t,this.deco=M.set(e.map(n=>(n.from==n.to?dS:pS).range(n.from,n.to)))}map(e){let t=[];for(let n of this.ranges){let r=n.map(e);if(!r)return null;t.push(r)}return new i(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(n=>n.field==this.active&&n.from<=t.from&&n.to>=t.to))}},mn=E.define({map(i,e){return i&&i.map(e)}}),mS=E.define(),pn=ge.define({create(){return null},update(i,e){for(let t of e.effects){if(t.is(mn))return t.value;if(t.is(mS)&&i)return new wi(i.ranges,t.value)}return i&&e.docChanged&&(i=i.map(e.changes)),i&&e.selection&&!i.selectionInsideField(e.selection)&&(i=null),i},provide:i=>v.decorations.from(i,e=>e?e.deco:M.none)});function uO(i,e){return S.create(i.filter(t=>t.field==e).map(t=>S.range(t.from,t.to)))}function $S(i){let e=fO.parse(i);return(t,n,r,s)=>{let{text:o,ranges:O}=e.instantiate(t.state,r),l={changes:{from:r,to:s,insert:q.of(o)},scrollIntoView:!0,annotations:n?fS.of(n):void 0};if(O.length&&(l.selection=uO(O,0)),O.length>1){let a=new wi(O,0),h=l.effects=[mn.of(a)];t.state.field(pn,!1)===void 0&&h.push(E.appendConfig.of([pn,bS,PS,uS]))}t.dispatch(t.state.update(l))}}function $f(i){return({state:e,dispatch:t})=>{let n=e.field(pn,!1);if(!n||i<0&&n.active==0)return!1;let r=n.active+i,s=i>0&&!n.ranges.some(o=>o.field==r+i);return t(e.update({selection:uO(n.ranges,r),effects:mn.of(s?null:new wi(n.ranges,r)),scrollIntoView:!0})),!0}}var gS=({state:i,dispatch:e})=>i.field(pn,!1)?(e(i.update({effects:mn.of(null)})),!0):!1,SS=$f(1),QS=$f(-1);var yS=[{key:"Tab",run:SS,shift:QS},{key:"Escape",run:gS}],df=W.define({combine(i){return i.length?i[0]:yS}}),bS=Je.highest(st.compute([df],i=>i.facet(df)));function be(i,e){return Object.assign(Object.assign({},e),{apply:$S(i)})}var PS=v.domEventHandlers({mousedown(i,e){let t=e.state.field(pn,!1),n;if(!t||(n=e.posAtCoords({x:i.clientX,y:i.clientY}))==null)return!1;let r=t.ranges.find(s=>s.from<=n&&s.to>=n);return!r||r.field==t.active?!1:(e.dispatch({selection:uO(t.ranges,r.field),effects:mn.of(t.ranges.some(s=>s.field>r.field)?new wi(t.ranges,r.field):null),scrollIntoView:!0}),!0)}});var gf=new class extends Me{};gf.startSide=1;gf.endSide=-1;var r1=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent);var bf=[be("function ${name}(${params}) {\n ${}\n}",{label:"function",detail:"definition",type:"keyword"}),be("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:"for",detail:"loop",type:"keyword"}),be("for (let ${name} of ${collection}) {\n ${}\n}",{label:"for",detail:"of loop",type:"keyword"}),be("do {\n ${}\n} while (${})",{label:"do",detail:"loop",type:"keyword"}),be("while (${}) {\n ${}\n}",{label:"while",detail:"loop",type:"keyword"}),be(`try { \${} } catch (\${error}) { \${} -}`,{label:"try",detail:"/ catch block",type:"keyword"}),Ae("if (${}) {\n ${}\n}",{label:"if",detail:"block",type:"keyword"}),Ae(`if (\${}) { +}`,{label:"try",detail:"/ catch block",type:"keyword"}),be("if (${}) {\n ${}\n}",{label:"if",detail:"block",type:"keyword"}),be(`if (\${}) { \${} } else { \${} -}`,{label:"if",detail:"/ else block",type:"keyword"}),Ae(`class \${name} { +}`,{label:"if",detail:"/ else block",type:"keyword"}),be(`class \${name} { constructor(\${params}) { \${} } -}`,{label:"class",detail:"definition",type:"keyword"}),Ae('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),Ae('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],mf=new pi,Sf=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function fn(i){return(e,t)=>{let n=e.node.getChild("VariableDefinition");return n&&t(n,i),!0}}var eQ=["FunctionDeclaration"],tQ={FunctionDeclaration:fn("function"),ClassDeclaration:fn("class"),ClassExpression:()=>!0,EnumDeclaration:fn("constant"),TypeAliasDeclaration:fn("type"),NamespaceDeclaration:fn("namespace"),VariableDefinition(i,e){i.matchContext(eQ)||e(i,"variable")},TypeDefinition(i,e){e(i,"type")},__proto__:null};function yf(i,e){let t=mf.get(e);if(t)return t;let n=[],r=!0;function s(O,o){let l=i.sliceString(O.from,O.to);n.push({label:l,type:o})}return e.cursor(A.IncludeAnonymous).iterate(O=>{if(r)r=!1;else if(O.name){let o=tQ[O.name];if(o&&o(O,s)||Sf.has(O.name))return!1}else if(O.to-O.from>8192){for(let o of yf(i,O.node))n.push(o);return!1}}),mf.set(e,n),n}var gf=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,Pf=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName",".","?."];function iQ(i){let e=_(i.state).resolveInner(i.pos,-1);if(Pf.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&gf.test(i.state.sliceDoc(e.from,e.to));if(!t&&!i.explicit)return null;let n=[];for(let r=e;r;r=r.parent)Sf.has(r.name)&&(n=n.concat(yf(i.state.doc,r)));return{options:n,from:t?e.from:i.pos,validFor:gf}}var ot=pe.define({name:"javascript",parser:hf.configure({props:[Se.add({IfStatement:We({except:/^\s*({|else\b)/}),TryStatement:We({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:Xh,SwitchBody:i=>{let e=i.textAfter,t=/^\s*\}/.test(e),n=/^\s*(case|default)\b/.test(e);return i.baseIndent+(t?0:n?1:2)*i.unit},Block:wr({closing:"}"}),ArrowFunction:i=>i.baseIndent+i.unit,"TemplateString BlockComment":()=>null,"Statement Property":We({except:/^{/}),JSXElement(i){let e=/^\s*<\//.test(i.textAfter);return i.lineIndent(i.node.from)+(e?0:i.unit)},JSXEscape(i){let e=/\s*\}/.test(i.textAfter);return i.lineIndent(i.node.from)+(e?0:i.unit)},"JSXOpenTag JSXSelfClosingTag"(i){return i.column(i.node.from)+i.unit}}),ke.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":zt,BlockComment(i){return{from:i.from+2,to:i.to-2}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),bf={test:i=>/^JSX/.test(i.name),facet:Qi({commentTokens:{block:{open:"{/*",close:"*/}"}}})},co=ot.configure({dialect:"ts"},"typescript"),fo=ot.configure({dialect:"jsx",props:[xr.add(i=>i.isTop?[bf]:void 0)]}),uo=ot.configure({dialect:"jsx ts",props:[xr.add(i=>i.isTop?[bf]:void 0)]},"typescript"),nQ="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(i=>({label:i,type:"keyword"}));function Ft(i={}){let e=i.jsx?i.typescript?uo:fo:i.typescript?co:ot;return new Oe(e,[ot.data.of({autocomplete:df(Pf,uf(Kg.concat(nQ)))}),ot.data.of({autocomplete:iQ}),i.jsx?oQ:[]])}function rQ(i){for(;;){if(i.name=="JSXOpenTag"||i.name=="JSXSelfClosingTag"||i.name=="JSXFragmentTag")return i;if(i.name=="JSXEscape"||!i.parent)return null;i=i.parent}}function Qf(i,e,t=i.length){for(let n=e?.firstChild;n;n=n.nextSibling)if(n.name=="JSXIdentifier"||n.name=="JSXBuiltin"||n.name=="JSXNamespacedName"||n.name=="JSXMemberExpression")return i.sliceString(n.from,Math.min(n.to,t));return""}function sQ(i){return i&&(i.name=="JSXEndTag"||i.name=="JSXSelfCloseEndTag")}var OQ=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),oQ=v.inputHandler.of((i,e,t,n)=>{if((OQ?i.composing:i.compositionStarted)||i.state.readOnly||e!=t||n!=">"&&n!="/"||!ot.isActiveAt(i.state,e,-1))return!1;let{state:r}=i,s=r.changeByRange(O=>{var o;let{head:l}=O,a=_(r).resolveInner(l,-1),h;if(a.name=="JSXStartTag"&&(a=a.parent),!(a.name=="JSXAttributeValue"&&a.to>l)){if(n==">"&&a.name=="JSXFragmentTag")return{range:Q.cursor(l+1),changes:{from:l,insert:">"}};if(n=="/"&&a.name=="JSXFragmentTag"){let c=a.parent,f=c?.parent;if(c.from==l-1&&((o=f.lastChild)===null||o===void 0?void 0:o.name)!="JSXEndTag"&&(h=Qf(r.doc,f?.firstChild,l))){let d=`/${h}>`;return{range:Q.cursor(l+d.length),changes:{from:l,insert:d}}}}else if(n==">"){let c=rQ(a);if(c&&!sQ(c.lastChild)&&r.sliceDoc(l,l+2)!="`}}}}return{range:O}});return s.changes.empty?!1:(i.dispatch(s,{userEvent:"input.type",scrollIntoView:!0}),!0)});var lQ=54,aQ=1,hQ=55,cQ=2,fQ=56,uQ=3,xf=4,dQ=5,Ar=6,Rf=7,Vf=8,Zf=9,Cf=10,pQ=11,$Q=12,mQ=13,po=57,gQ=14,wf=58,qf=20,QQ=22,Uf=23,SQ=24,mo=26,Yf=27,yQ=28,PQ=31,bQ=34,xQ=36,wQ=37,kQ=0,vQ=1,TQ={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},XQ={dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},kf={dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}};function zQ(i){return i==45||i==46||i==58||i>=65&&i<=90||i==95||i>=97&&i<=122||i>=161}function _f(i){return i==9||i==10||i==13||i==32}var vf=null,Tf=null,Xf=0;function go(i,e){let t=i.pos+e;if(Xf==t&&Tf==i)return vf;let n=i.peek(e);for(;_f(n);)n=i.peek(++e);let r="";for(;zQ(n);)r+=String.fromCharCode(n),n=i.peek(++e);return Tf=i,Xf=t,vf=r?r.toLowerCase():n==WQ||n==RQ?void 0:null}var Af=60,jr=62,Qo=47,WQ=63,RQ=33,VQ=45;function zf(i,e){this.name=i,this.parent=e,this.hash=e?e.hash:0;for(let t=0;t-1?new zf(go(n,1)||"",i):i},reduce(i,e){return e==qf&&i?i.parent:i},reuse(i,e,t,n){let r=e.type.id;return r==Ar||r==xQ?new zf(go(n,1)||"",i):i},hash(i){return i?i.hash:0},strict:!1}),qQ=new J((i,e)=>{if(i.next!=Af){i.next<0&&e.context&&i.acceptToken(po);return}i.advance();let t=i.next==Qo;t&&i.advance();let n=go(i,0);if(n===void 0)return;if(!n)return i.acceptToken(t?gQ:Ar);let r=e.context?e.context.name:null;if(t){if(n==r)return i.acceptToken(pQ);if(r&&XQ[r])return i.acceptToken(po,-2);if(e.dialectEnabled(kQ))return i.acceptToken($Q);for(let s=e.context;s;s=s.parent)if(s.name==n)return;i.acceptToken(mQ)}else{if(n=="script")return i.acceptToken(Rf);if(n=="style")return i.acceptToken(Vf);if(n=="textarea")return i.acceptToken(Zf);if(TQ.hasOwnProperty(n))return i.acceptToken(Cf);r&&kf[r]&&kf[r][n]?i.acceptToken(po,-1):i.acceptToken(Ar)}},{contextual:!0}),UQ=new J(i=>{for(let e=0,t=0;;t++){if(i.next<0){t&&i.acceptToken(wf);break}if(i.next==VQ)e++;else if(i.next==jr&&e>=2){t>3&&i.acceptToken(wf,-2);break}else e=0;i.advance()}});function YQ(i){for(;i;i=i.parent)if(i.name=="svg"||i.name=="math")return!0;return!1}var _Q=new J((i,e)=>{if(i.next==Qo&&i.peek(1)==jr){let t=e.dialectEnabled(vQ)||YQ(e.context);i.acceptToken(t?dQ:xf,2)}else i.next==jr&&i.acceptToken(xf,1)});function So(i,e,t){let n=2+i.length;return new J(r=>{for(let s=0,O=0,o=0;;o++){if(r.next<0){o&&r.acceptToken(e);break}if(s==0&&r.next==Af||s==1&&r.next==Qo||s>=2&&sO?r.acceptToken(e,-O):r.acceptToken(t,-(O-2));break}else if((r.next==10||r.next==13)&&o){r.acceptToken(e,1);break}else s=O=0;r.advance()}})}var AQ=So("script",lQ,aQ),jQ=So("style",hQ,cQ),GQ=So("textarea",fQ,uQ),EQ=se({"Text RawText":u.content,"StartTag StartCloseTag SelfClosingEndTag EndTag":u.angleBracket,TagName:u.tagName,"MismatchedCloseTag/TagName":[u.tagName,u.invalid],AttributeName:u.attributeName,"AttributeValue UnquotedAttributeValue":u.attributeValue,Is:u.definitionOperator,"EntityReference CharacterReference":u.character,Comment:u.blockComment,ProcessingInst:u.processingInstruction,DoctypeDecl:u.documentMeta}),jf=me.deserialize({version:14,states:",xOVO!rOOO!WQ#tO'#CqO!]Q#tO'#CzO!bQ#tO'#C}O!gQ#tO'#DQO!lQ#tO'#DSO!qOaO'#CpO!|ObO'#CpO#XOdO'#CpO$eO!rO'#CpOOO`'#Cp'#CpO$lO$fO'#DTO$tQ#tO'#DVO$yQ#tO'#DWOOO`'#Dk'#DkOOO`'#DY'#DYQVO!rOOO%OQ&rO,59]O%WQ&rO,59fO%`Q&rO,59iO%hQ&rO,59lO%sQ&rO,59nOOOa'#D^'#D^O%{OaO'#CxO&WOaO,59[OOOb'#D_'#D_O&`ObO'#C{O&kObO,59[OOOd'#D`'#D`O&sOdO'#DOO'OOdO,59[OOO`'#Da'#DaO'WO!rO,59[O'_Q#tO'#DROOO`,59[,59[OOOp'#Db'#DbO'dO$fO,59oOOO`,59o,59oO'lQ#|O,59qO'qQ#|O,59rOOO`-E7W-E7WO'vQ&rO'#CsOOQW'#DZ'#DZO(UQ&rO1G.wOOOa1G.w1G.wO(^Q&rO1G/QOOOb1G/Q1G/QO(fQ&rO1G/TOOOd1G/T1G/TO(nQ&rO1G/WOOO`1G/W1G/WOOO`1G/Y1G/YO(yQ&rO1G/YOOOa-E7[-E7[O)RQ#tO'#CyOOO`1G.v1G.vOOOb-E7]-E7]O)WQ#tO'#C|OOOd-E7^-E7^O)]Q#tO'#DPOOO`-E7_-E7_O)bQ#|O,59mOOOp-E7`-E7`OOO`1G/Z1G/ZOOO`1G/]1G/]OOO`1G/^1G/^O)gQ,UO,59_OOQW-E7X-E7XOOOa7+$c7+$cOOOb7+$l7+$lOOOd7+$o7+$oOOO`7+$r7+$rOOO`7+$t7+$tO)rQ#|O,59eO)wQ#|O,59hO)|Q#|O,59kOOO`1G/X1G/XO*RO7[O'#CvO*dOMhO'#CvOOQW1G.y1G.yOOO`1G/P1G/POOO`1G/S1G/SOOO`1G/V1G/VOOOO'#D['#D[O*uO7[O,59bOOQW,59b,59bOOOO'#D]'#D]O+WOMhO,59bOOOO-E7Y-E7YOOQW1G.|1G.|OOOO-E7Z-E7Z",stateData:"+s~O!^OS~OUSOVPOWQOXROYTO[]O][O^^O`^Oa^Ob^Oc^Ox^O{_O!dZO~OfaO~OfbO~OfcO~OfdO~OfeO~O!WfOPlP!ZlP~O!XiOQoP!ZoP~O!YlORrP!ZrP~OUSOVPOWQOXROYTOZqO[]O][O^^O`^Oa^Ob^Oc^Ox^O!dZO~O!ZrO~P#dO![sO!euO~OfvO~OfwO~OS|OhyO~OS!OOhyO~OS!QOhyO~OS!SOT!TOhyO~OS!TOhyO~O!WfOPlX!ZlX~OP!WO!Z!XO~O!XiOQoX!ZoX~OQ!ZO!Z!XO~O!YlORrX!ZrX~OR!]O!Z!XO~O!Z!XO~P#dOf!_O~O![sO!e!aO~OS!bO~OS!cO~Oi!dOSgXhgXTgX~OS!fOhyO~OS!gOhyO~OS!hOhyO~OS!iOT!jOhyO~OS!jOhyO~Of!kO~Of!lO~Of!mO~OS!nO~Ok!qO!`!oO!b!pO~OS!rO~OS!sO~OS!tO~Oa!uOb!uOc!uO!`!wO!a!uO~Oa!xOb!xOc!xO!b!wO!c!xO~Oa!uOb!uOc!uO!`!{O!a!uO~Oa!xOb!xOc!xO!b!{O!c!xO~OT~bac!dx{!d~",goto:"%p!`PPPPPPPPPPPPPPPPPPPP!a!gP!mPP!yP!|#P#S#Y#]#`#f#i#l#r#x!aP!a!aP$O$U$l$r$x%O%U%[%bPPPPPPPP%hX^OX`pXUOX`pezabcde{}!P!R!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ}bQ!PcQ!RdQ!UeZ!e{}!P!R!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp",nodeNames:"\u26A0 StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl",maxTerm:67,context:CQ,nodeProps:[["closedBy",-10,1,2,3,7,8,9,10,11,12,13,"EndTag",6,"EndTag SelfClosingEndTag",-4,21,30,33,36,"CloseTag"],["openedBy",4,"StartTag StartCloseTag",5,"StartTag",-4,29,32,35,37,"OpenTag"],["group",-9,14,17,18,19,20,39,40,41,42,"Entity",16,"Entity TextContent",-3,28,31,34,"TextContent Entity"]],propSources:[EQ],skippedNodes:[0],repeatNodeCount:9,tokenData:"#%g!aR!YOX$qXY,QYZ,QZ[$q[]&X]^,Q^p$qpq,Qqr-_rs4ysv-_vw5iwxJ^x}-_}!OKP!O!P-_!P!Q$q!Q![-_![!]!!O!]!^-_!^!_!&W!_!`#$o!`!a&X!a!c-_!c!}!!O!}#R-_#R#S!!O#S#T3V#T#o!!O#o#s-_#s$f$q$f%W-_%W%o!!O%o%p-_%p&a!!O&a&b-_&b1p!!O1p4U-_4U4d!!O4d4e-_4e$IS!!O$IS$I`-_$I`$Ib!!O$Ib$Kh-_$Kh%#t!!O%#t&/x-_&/x&Et!!O&Et&FV-_&FV;'S!!O;'S;:j!&Q;:j;=`4s<%l?&r-_?&r?Ah!!O?Ah?BY$q?BY?Mn!!O?MnO$q!Z$|c`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr$qrs&}sv$qvw+Pwx(tx!^$q!^!_*V!_!a&X!a#S$q#S#T&X#T;'S$q;'S;=`+z<%lO$q!R&bX`P!a`!cpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&Xq'UV`P!cpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}P'pT`POv'kw!^'k!_;'S'k;'S;=`(P<%lO'kP(SP;=`<%l'kp([S!cpOv(Vx;'S(V;'S;=`(h<%lO(Vp(kP;=`<%l(Vq(qP;=`<%l&}a({W`P!a`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t`)jT!a`Or)esv)ew;'S)e;'S;=`)y<%lO)e`)|P;=`<%l)ea*SP;=`<%l(t!Q*^V!a`!cpOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!Q*vP;=`<%l*V!R*|P;=`<%l&XW+UYkWOX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+PW+wP;=`<%l+P!Z+}P;=`<%l$q!a,]``P!a`!cp!^^OX&XXY,QYZ,QZ]&X]^,Q^p&Xpq,Qqr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!_-ljhS`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_1n!_!a&X!a#S-_#S#T3V#T#s-_#s$f$q$f;'S-_;'S;=`4s<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q[/echSkWOX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!^!_0p!a#S/^#S#T0p#T#s/^#s$f+P$f;'S/^;'S;=`1h<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+PS0uXhSqr0psw0px!P0p!Q!_0p!a#s0p$f;'S0p;'S;=`1b<%l?Ah0p?BY?Mn0pS1eP;=`<%l0p[1kP;=`<%l/^!U1wbhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!U3SP;=`<%l1n!V3bchS`P!a`!cpOq&Xqr3Vrs&}sv3Vvw0pwx(tx!P3V!P!Q&X!Q!^3V!^!_1n!_!a&X!a#s3V#s$f&X$f;'S3V;'S;=`4m<%l?Ah3V?Ah?BY&X?BY?Mn3V?MnO&X!V4pP;=`<%l3V!_4vP;=`<%l-_!Z5SV!`h`P!cpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}!_5rjhSkWc!ROX7dXZ8qZ[7d[^8q^p7dqr:crs8qst@Ttw:cwx8qx!P:c!P!Q7d!Q!]:c!]!^/^!^!_=p!_!a8q!a#S:c#S#T=p#T#s:c#s$f7d$f;'S:c;'S;=`?}<%l?Ah:c?Ah?BY7d?BY?Mn:c?MnO7d!Z7ibkWOX7dXZ8qZ[7d[^8q^p7dqr7drs8qst+Ptw7dwx8qx!]7d!]!^9f!^!a8q!a#S7d#S#T8q#T;'S7d;'S;=`:]<%lO7d!R8tVOp8qqs8qt!]8q!]!^9Z!^;'S8q;'S;=`9`<%lO8q!R9`Oa!R!R9cP;=`<%l8q!Z9mYkWa!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z:`P;=`<%l7d!_:jjhSkWOX7dXZ8qZ[7d[^8q^p7dqr:crs8qst/^tw:cwx8qx!P:c!P!Q7d!Q!]:c!]!^<[!^!_=p!_!a8q!a#S:c#S#T=p#T#s:c#s$f7d$f;'S:c;'S;=`?}<%l?Ah:c?Ah?BY7d?BY?Mn:c?MnO7d!_b#d#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!>kdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#V1n#V#W!?y#W#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!@SdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#h1n#h#i!Ab#i#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!AkdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#m1n#m#n!By#n#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!CSdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#d1n#d#e!Db#e#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!DkdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#X1n#X#Y!5]#Y#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!FSchS!a`!cpOq!G_qr!Eyrs!HUsv!Eyvw!Ncwx!Jvx!P!Ey!P!Q!G_!Q!_!Ey!_!a!G_!a!b##T!b#s!Ey#s$f!G_$f;'S!Ey;'S;=`#$i<%l?Ah!Ey?Ah?BY!G_?BY?Mn!Ey?MnO!G_!R!GfY!a`!cpOr!G_rs!HUsv!G_vw!Hpwx!Jvx!a!G_!a!b!Lv!b;'S!G_;'S;=`!N]<%lO!G_q!HZV!cpOv!HUvx!Hpx!a!HU!a!b!Iq!b;'S!HU;'S;=`!Jp<%lO!HUP!HsTO!a!Hp!a!b!IS!b;'S!Hp;'S;=`!Ik<%lO!HpP!IVTO!`!Hp!`!a!If!a;'S!Hp;'S;=`!Ik<%lO!HpP!IkOxPP!InP;=`<%l!Hpq!IvV!cpOv!HUvx!Hpx!`!HU!`!a!J]!a;'S!HU;'S;=`!Jp<%lO!HUq!JdS!cpxPOv(Vx;'S(V;'S;=`(h<%lO(Vq!JsP;=`<%l!HUa!J{X!a`Or!Jvrs!Hpsv!Jvvw!Hpw!a!Jv!a!b!Kh!b;'S!Jv;'S;=`!Lp<%lO!Jva!KmX!a`Or!Jvrs!Hpsv!Jvvw!Hpw!`!Jv!`!a!LY!a;'S!Jv;'S;=`!Lp<%lO!Jva!LaT!a`xPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!LsP;=`<%l!Jv!R!L}Y!a`!cpOr!G_rs!HUsv!G_vw!Hpwx!Jvx!`!G_!`!a!Mm!a;'S!G_;'S;=`!N]<%lO!G_!R!MvV!a`!cpxPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!N`P;=`<%l!G_T!NhbhSOq!Hpqr!Ncrs!Hpsw!Ncwx!Hpx!P!Nc!P!Q!Hp!Q!_!Nc!_!a!Hp!a!b# p!b#s!Nc#s$f!Hp$f;'S!Nc;'S;=`#!}<%l?Ah!Nc?Ah?BY!Hp?BY?Mn!Nc?MnO!HpT# ubhSOq!Hpqr!Ncrs!Hpsw!Ncwx!Hpx!P!Nc!P!Q!Hp!Q!_!Nc!_!`!Hp!`!a!If!a#s!Nc#s$f!Hp$f;'S!Nc;'S;=`#!}<%l?Ah!Nc?Ah?BY!Hp?BY?Mn!Nc?MnO!HpT##QP;=`<%l!Nc!V##^chS!a`!cpOq!G_qr!Eyrs!HUsv!Eyvw!Ncwx!Jvx!P!Ey!P!Q!G_!Q!_!Ey!_!`!G_!`!a!Mm!a#s!Ey#s$f!G_$f;'S!Ey;'S;=`#$i<%l?Ah!Ey?Ah?BY!G_?BY?Mn!Ey?MnO!G_!V#$lP;=`<%l!Ey!V#$zXiS`P!a`!cpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X",tokenizers:[AQ,jQ,GQ,_Q,qQ,UQ,0,1,2,3,4,5],topRules:{Document:[0,15]},dialects:{noMatch:0,selfClosing:485},tokenPrec:487});function Gf(i,e){let t=Object.create(null);for(let n of i.getChildren(Uf)){let r=n.getChild(SQ),s=n.getChild(mo)||n.getChild(Yf);r&&(t[e.read(r.from,r.to)]=s?s.type.id==mo?e.read(s.from+1,s.to-1):e.read(s.from,s.to):"")}return t}function Wf(i,e){let t=i.getChild(QQ);return t?e.read(t.from,t.to):" "}function $o(i,e,t){let n;for(let r of t)if(!r.attrs||r.attrs(n||(n=Gf(i.node.parent.firstChild,e))))return{parser:r.parser};return null}function yo(i=[],e=[]){let t=[],n=[],r=[],s=[];for(let o of i)(o.tag=="script"?t:o.tag=="style"?n:o.tag=="textarea"?r:s).push(o);let O=e.length?Object.create(null):null;for(let o of e)(O[o.name]||(O[o.name]=[])).push(o);return $i((o,l)=>{let a=o.type.id;if(a==yQ)return $o(o,l,t);if(a==PQ)return $o(o,l,n);if(a==bQ)return $o(o,l,r);if(a==qf&&s.length){let h=o.node,c=h.firstChild,f=c&&Wf(c,l),d;if(f){for(let p of s)if(p.tag==f&&(!p.attrs||p.attrs(d||(d=Gf(h,l))))){let m=h.lastChild;return{parser:p.parser,overlay:[{from:c.to,to:m.type.id==wQ?m.from:h.to}]}}}}if(O&&a==Uf){let h=o.node,c;if(c=h.firstChild){let f=O[l.read(c.from,c.to)];if(f)for(let d of f){if(d.tagName&&d.tagName!=Wf(h.parent,l))continue;let p=h.lastChild;if(p.type.id==mo){let m=p.from+1,$=p.lastChild,g=p.to-($&&$.isError?0:1);if(g>m)return{parser:d.parser,overlay:[{from:m,to:g}]}}else if(p.type.id==Yf)return{parser:d.parser,overlay:[{from:p.from,to:p.to}]}}}}return null})}var un=["_blank","_self","_top","_parent"],Po=["ascii","utf-8","utf-16","latin1","latin1"],bo=["get","post","put","delete"],xo=["application/x-www-form-urlencoded","multipart/form-data","text/plain"],Re=["true","false"],z={},MQ={a:{attrs:{href:null,ping:null,type:null,media:null,target:un,hreflang:null}},abbr:z,address:z,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:["default","rect","circle","poly"]}},article:z,aside:z,audio:{attrs:{src:null,mediagroup:null,crossorigin:["anonymous","use-credentials"],preload:["none","metadata","auto"],autoplay:["autoplay"],loop:["loop"],controls:["controls"]}},b:z,base:{attrs:{href:null,target:un}},bdi:z,bdo:z,blockquote:{attrs:{cite:null}},body:z,br:z,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:["autofocus"],disabled:["autofocus"],formenctype:xo,formmethod:bo,formnovalidate:["novalidate"],formtarget:un,type:["submit","reset","button"]}},canvas:{attrs:{width:null,height:null}},caption:z,center:z,cite:z,code:z,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:["command","checkbox","radio"],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:["disabled"],checked:["checked"]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:["disabled"],multiple:["multiple"]}},datalist:{attrs:{data:null}},dd:z,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:["open"]}},dfn:z,div:z,dl:z,dt:z,em:z,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:["disabled"],form:null,name:null}},figcaption:z,figure:z,footer:z,form:{attrs:{action:null,name:null,"accept-charset":Po,autocomplete:["on","off"],enctype:xo,method:bo,novalidate:["novalidate"],target:un}},h1:z,h2:z,h3:z,h4:z,h5:z,h6:z,head:{children:["title","base","link","style","meta","script","noscript","command"]},header:z,hgroup:z,hr:z,html:{attrs:{manifest:null}},i:z,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:["allow-top-navigation","allow-same-origin","allow-forms","allow-scripts"],seamless:["seamless"]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:["anonymous","use-credentials"]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:["audio/*","video/*","image/*"],autocomplete:["on","off"],autofocus:["autofocus"],checked:["checked"],disabled:["disabled"],formenctype:xo,formmethod:bo,formnovalidate:["novalidate"],formtarget:un,multiple:["multiple"],readonly:["readonly"],required:["required"],type:["hidden","text","search","tel","url","email","password","datetime","date","month","week","time","datetime-local","number","range","color","checkbox","radio","file","submit","image","reset","button"]}},ins:{attrs:{cite:null,datetime:null}},kbd:z,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:["autofocus"],disabled:["disabled"],keytype:["RSA"]}},label:{attrs:{for:null,form:null}},legend:z,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:["all","16x16","16x16 32x32","16x16 32x32 64x64"]}},map:{attrs:{name:null}},mark:z,menu:{attrs:{label:null,type:["list","context","toolbar"]}},meta:{attrs:{content:null,charset:Po,name:["viewport","application-name","author","description","generator","keywords"],"http-equiv":["content-language","content-type","default-style","refresh"]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:z,noscript:z,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:["typemustmatch"]}},ol:{attrs:{reversed:["reversed"],start:null,type:["1","a","A","i","I"]},children:["li","script","template","ul","ol"]},optgroup:{attrs:{disabled:["disabled"],label:null}},option:{attrs:{disabled:["disabled"],label:null,selected:["selected"],value:null}},output:{attrs:{for:null,form:null,name:null}},p:z,param:{attrs:{name:null,value:null}},pre:z,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:z,rt:z,ruby:z,samp:z,script:{attrs:{type:["text/javascript"],src:null,async:["async"],defer:["defer"],charset:Po}},section:z,select:{attrs:{form:null,name:null,size:null,autofocus:["autofocus"],disabled:["disabled"],multiple:["multiple"]}},slot:{attrs:{name:null}},small:z,source:{attrs:{src:null,type:null,media:null}},span:z,strong:z,style:{attrs:{type:["text/css"],media:null,scoped:null}},sub:z,summary:z,sup:z,table:z,tbody:z,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:z,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:["autofocus"],disabled:["disabled"],readonly:["readonly"],required:["required"],wrap:["soft","hard"]}},tfoot:z,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:["row","col","rowgroup","colgroup"]}},thead:z,time:{attrs:{datetime:null}},title:z,tr:z,track:{attrs:{src:null,label:null,default:null,kind:["subtitles","captions","descriptions","chapters","metadata"],srclang:null}},ul:{children:["li","script","template","ul","ol"]},var:z,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:["anonymous","use-credentials"],preload:["auto","metadata","none"],autoplay:["autoplay"],mediagroup:["movie"],muted:["muted"],controls:["controls"]}},wbr:z},Bf={accesskey:null,class:null,contenteditable:Re,contextmenu:null,dir:["ltr","rtl","auto"],draggable:["true","false","auto"],dropzone:["copy","move","link","string:","file:"],hidden:["hidden"],id:null,inert:["inert"],itemid:null,itemprop:null,itemref:null,itemscope:["itemscope"],itemtype:null,lang:["ar","bn","de","en-GB","en-US","es","fr","hi","id","ja","pa","pt","ru","tr","zh"],spellcheck:Re,autocorrect:Re,autocapitalize:Re,style:null,tabindex:null,title:null,translate:["yes","no"],rel:["stylesheet","alternate","author","bookmark","help","license","next","nofollow","noreferrer","prefetch","prev","search","tag"],role:"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer".split(" "),"aria-activedescendant":null,"aria-atomic":Re,"aria-autocomplete":["inline","list","both","none"],"aria-busy":Re,"aria-checked":["true","false","mixed","undefined"],"aria-controls":null,"aria-describedby":null,"aria-disabled":Re,"aria-dropeffect":null,"aria-expanded":["true","false","undefined"],"aria-flowto":null,"aria-grabbed":["true","false","undefined"],"aria-haspopup":Re,"aria-hidden":Re,"aria-invalid":["true","false","grammar","spelling"],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":["off","polite","assertive"],"aria-multiline":Re,"aria-multiselectable":Re,"aria-owns":null,"aria-posinset":null,"aria-pressed":["true","false","mixed","undefined"],"aria-readonly":Re,"aria-relevant":null,"aria-required":Re,"aria-selected":["true","false","undefined"],"aria-setsize":null,"aria-sort":["ascending","descending","none","other"],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},Df="beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload".split(" ").map(i=>"on"+i);for(let i of Df)Bf[i]=null;var Jt=class{constructor(e,t){this.tags=Object.assign(Object.assign({},MQ),e),this.globalAttrs=Object.assign(Object.assign({},Bf),t),this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};Jt.default=new Jt;function wi(i,e,t=i.length){if(!e)return"";let n=e.firstChild,r=n&&n.getChild("TagName");return r?i.sliceString(r.from,Math.min(r.to,t)):""}function ki(i,e=!1){for(;i;i=i.parent)if(i.name=="Element")if(e)e=!1;else return i;return null}function Lf(i,e,t){let n=t.tags[wi(i,ki(e))];return n?.children||t.allTags}function wo(i,e){let t=[];for(let n=ki(e);n&&!n.type.isTop;n=ki(n.parent)){let r=wi(i,n);if(r&&n.lastChild.name=="CloseTag")break;r&&t.indexOf(r)<0&&(e.name=="EndTag"||e.from>=n.firstChild.to)&&t.push(r)}return t}var Nf=/^[:\-\.\w\u00b7-\uffff]*$/;function Ef(i,e,t,n,r){let s=/\s*>/.test(i.sliceDoc(r,r+5))?"":">",O=ki(t,!0);return{from:n,to:r,options:Lf(i.doc,O,e).map(o=>({label:o,type:"type"})).concat(wo(i.doc,t).map((o,l)=>({label:"/"+o,apply:"/"+o+s,type:"type",boost:99-l}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function Mf(i,e,t,n){let r=/\s*>/.test(i.sliceDoc(n,n+5))?"":">";return{from:t,to:n,options:wo(i.doc,e).map((s,O)=>({label:s,apply:s+r,type:"type",boost:99-O})),validFor:Nf}}function IQ(i,e,t,n){let r=[],s=0;for(let O of Lf(i.doc,t,e))r.push({label:"<"+O,type:"type"});for(let O of wo(i.doc,t))r.push({label:"",type:"type",boost:99-s++});return{from:n,to:n,options:r,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function BQ(i,e,t,n,r){let s=ki(t),O=s?e.tags[wi(i.doc,s)]:null,o=O&&O.attrs?Object.keys(O.attrs):[],l=O&&O.globalAttrs===!1?o:o.length?o.concat(e.globalAttrNames):e.globalAttrNames;return{from:n,to:r,options:l.map(a=>({label:a,type:"property"})),validFor:Nf}}function DQ(i,e,t,n,r){var s;let O=(s=t.parent)===null||s===void 0?void 0:s.getChild("AttributeName"),o=[],l;if(O){let a=i.sliceDoc(O.from,O.to),h=e.globalAttrs[a];if(!h){let c=ki(t),f=c?e.tags[wi(i.doc,c)]:null;h=f?.attrs&&f.attrs[a]}if(h){let c=i.sliceDoc(n,r).toLowerCase(),f='"',d='"';/^['"]/.test(c)?(l=c[0]=='"'?/^[^"]*$/:/^[^']*$/,f="",d=i.sliceDoc(r,r+1)==c[0]?"":c[0],c=c.slice(1),n++):l=/^[^\s<>='"]*$/;for(let p of h)o.push({label:p,apply:f+p+d,type:"constant"})}}return{from:n,to:r,options:o,validFor:l}}function Hf(i,e){let{state:t,pos:n}=e,r=_(t).resolveInner(n,-1),s=r.resolve(n);for(let O=n,o;s==r&&(o=r.childBefore(O));){let l=o.lastChild;if(!l||!l.type.isError||l.fromHf(n,r)}var Jf=[{tag:"script",attrs:i=>i.type=="text/typescript"||i.lang=="ts",parser:co.parser},{tag:"script",attrs:i=>i.type=="text/babel"||i.type=="text/jsx",parser:fo.parser},{tag:"script",attrs:i=>i.type=="text/typescript-jsx",parser:uo.parser},{tag:"script",attrs(i){return!i.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(i.type)},parser:ot.parser},{tag:"style",attrs(i){return(!i.lang||i.lang=="css")&&(!i.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(i.type))},parser:an.parser}],Kf=[{name:"style",parser:an.parser.configure({top:"Styles"})}].concat(Df.map(i=>({name:i,parser:ot.parser}))),eu=pe.define({name:"html",parser:jf.configure({props:[Se.add({Element(i){let e=/^(\s*)(<\/)?/.exec(i.textAfter);return i.node.to<=i.pos+e[0].length?i.continue():i.lineIndent(i.node.from)+(e[2]?0:i.unit)},"OpenTag CloseTag SelfClosingTag"(i){return i.column(i.node.from)+i.unit},Document(i){if(i.pos+/\s*/.exec(i.textAfter)[0].lengthi.getChild("TagName")})]}),languageData:{commentTokens:{block:{open:""}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:"-._"}}),Gr=eu.configure({wrap:yo(Jf,Kf)});function vi(i={}){let e="",t;i.matchClosingTags===!1&&(e="noMatch"),i.selfClosingTags===!0&&(e=(e?e+" ":"")+"selfClosing"),(i.nestedLanguages&&i.nestedLanguages.length||i.nestedAttributes&&i.nestedAttributes.length)&&(t=yo((i.nestedLanguages||[]).concat(Jf),(i.nestedAttributes||[]).concat(Kf)));let n=t?eu.configure({wrap:t,dialect:e}):e?Gr.configure({dialect:e}):Gr;return new Oe(n,[Gr.data.of({autocomplete:LQ(i)}),i.autoCloseTags!==!1?NQ:[],Ft().support,Yr().support])}var If=new Set("area base br col command embed frame hr img input keygen link meta param source track wbr menuitem".split(" ")),NQ=v.inputHandler.of((i,e,t,n)=>{if(i.composing||i.state.readOnly||e!=t||n!=">"&&n!="/"||!Gr.isActiveAt(i.state,e,-1))return!1;let{state:r}=i,s=r.changeByRange(O=>{var o,l,a;let{head:h}=O,c=_(r).resolveInner(h,-1),f;if((c.name=="TagName"||c.name=="StartTag")&&(c=c.parent),n==">"&&c.name=="OpenTag"){if(((l=(o=c.parent)===null||o===void 0?void 0:o.lastChild)===null||l===void 0?void 0:l.name)!="CloseTag"&&(f=wi(r.doc,c.parent,h))&&!If.has(f)){let d=i.state.doc.sliceString(h,h+1)===">",p=`${d?"":">"}`;return{range:Q.cursor(h+1),changes:{from:h+(d?1:0),insert:p}}}}else if(n=="/"&&c.name=="OpenTag"){let d=c.parent,p=d?.parent;if(d.from==h-1&&((a=p.lastChild)===null||a===void 0?void 0:a.name)!="CloseTag"&&(f=wi(r.doc,p,h))&&!If.has(f)){let m=i.state.doc.sliceString(h,h+1)===">",$=`/${f}${m?"":">"}`,g=h+$.length+(m?1:0);return{range:Q.cursor(g),changes:{from:h,insert:$}}}}return{range:O}});return s.changes.empty?!1:(i.dispatch(s,{userEvent:"input.type",scrollIntoView:!0}),!0)});var Ir=class i{constructor(e,t,n,r,s,O,o){this.type=e,this.value=t,this.from=n,this.hash=r,this.end=s,this.children=O,this.positions=o,this.hashProp=[[R.contextHash,r]]}static create(e,t,n,r,s){let O=r+(r<<8)+e+(t<<4)|0;return new i(e,t,n,O,s,[],[])}addChild(e,t){e.prop(R.contextHash)!=this.hash&&(e=new C(e.type,e.children,e.positions,e.length,this.hashProp)),this.children.push(e),this.positions.push(t)}toTree(e,t=this.end){let n=this.children.length-1;return n>=0&&(t=Math.max(t,this.positions[n]+this.children[n].length+this.from)),new C(e.types[this.type],this.children,this.positions,t-this.from).balance({makeTree:(s,O,o)=>new C(F.none,s,O,o,this.hashProp)})}},S;(function(i){i[i.Document=1]="Document",i[i.CodeBlock=2]="CodeBlock",i[i.FencedCode=3]="FencedCode",i[i.Blockquote=4]="Blockquote",i[i.HorizontalRule=5]="HorizontalRule",i[i.BulletList=6]="BulletList",i[i.OrderedList=7]="OrderedList",i[i.ListItem=8]="ListItem",i[i.ATXHeading1=9]="ATXHeading1",i[i.ATXHeading2=10]="ATXHeading2",i[i.ATXHeading3=11]="ATXHeading3",i[i.ATXHeading4=12]="ATXHeading4",i[i.ATXHeading5=13]="ATXHeading5",i[i.ATXHeading6=14]="ATXHeading6",i[i.SetextHeading1=15]="SetextHeading1",i[i.SetextHeading2=16]="SetextHeading2",i[i.HTMLBlock=17]="HTMLBlock",i[i.LinkReference=18]="LinkReference",i[i.Paragraph=19]="Paragraph",i[i.CommentBlock=20]="CommentBlock",i[i.ProcessingInstructionBlock=21]="ProcessingInstructionBlock",i[i.Escape=22]="Escape",i[i.Entity=23]="Entity",i[i.HardBreak=24]="HardBreak",i[i.Emphasis=25]="Emphasis",i[i.StrongEmphasis=26]="StrongEmphasis",i[i.Link=27]="Link",i[i.Image=28]="Image",i[i.InlineCode=29]="InlineCode",i[i.HTMLTag=30]="HTMLTag",i[i.Comment=31]="Comment",i[i.ProcessingInstruction=32]="ProcessingInstruction",i[i.URL=33]="URL",i[i.HeaderMark=34]="HeaderMark",i[i.QuoteMark=35]="QuoteMark",i[i.ListMark=36]="ListMark",i[i.LinkMark=37]="LinkMark",i[i.EmphasisMark=38]="EmphasisMark",i[i.CodeMark=39]="CodeMark",i[i.CodeText=40]="CodeText",i[i.CodeInfo=41]="CodeInfo",i[i.LinkTitle=42]="LinkTitle",i[i.LinkLabel=43]="LinkLabel"})(S||(S={}));var To=class{constructor(e,t){this.start=e,this.content=t,this.marks=[],this.parsers=[]}},Xo=class{constructor(){this.text="",this.baseIndent=0,this.basePos=0,this.depth=0,this.markers=[],this.pos=0,this.indent=0,this.next=-1}forward(){this.basePos>this.pos&&this.forwardInner()}forwardInner(){let e=this.skipSpace(this.basePos);this.indent=this.countIndent(e,this.pos,this.indent),this.pos=e,this.next=e==this.text.length?-1:this.text.charCodeAt(e)}skipSpace(e){return $n(this.text,e)}reset(e){for(this.text=e,this.baseIndent=this.basePos=this.pos=this.indent=0,this.forwardInner(),this.depth=1;this.markers.length;)this.markers.pop()}moveBase(e){this.basePos=e,this.baseIndent=this.countIndent(e,this.pos,this.indent)}moveBaseColumn(e){this.baseIndent=e,this.basePos=this.findColumn(e)}addMarker(e){this.markers.push(e)}countIndent(e,t=0,n=0){for(let r=t;r=e.stack[t.depth+1].value+t.baseIndent)return!0;if(t.indent>=t.baseIndent+4)return!1;let n=(i.type==S.OrderedList?Go:jo)(t,e,!1);return n>0&&(i.type!=S.BulletList||Ao(t,e,!1)<0)&&t.text.charCodeAt(t.pos+n-1)==i.value}var ou={[S.Blockquote](i,e,t){return t.next!=62?!1:(t.markers.push(Y(S.QuoteMark,e.lineStart+t.pos,e.lineStart+t.pos+1)),t.moveBase(t.pos+(je(t.text.charCodeAt(t.pos+1))?2:1)),i.end=e.lineStart+t.text.length,!0)},[S.ListItem](i,e,t){return t.indent-1?!1:(t.moveBaseColumn(t.baseIndent+i.value),!0)},[S.OrderedList]:tu,[S.BulletList]:tu,[S.Document](){return!0}};function je(i){return i==32||i==9||i==10||i==13}function $n(i,e=0){for(;et&&je(i.charCodeAt(e-1));)e--;return e}function lu(i){if(i.next!=96&&i.next!=126)return-1;let e=i.pos+1;for(;e-1&&i.depth==e.stack.length||n<3?-1:1}function hu(i,e){for(let t=i.stack.length-1;t>=0;t--)if(i.stack[t].type==e)return!0;return!1}function jo(i,e,t){return(i.next==45||i.next==43||i.next==42)&&(i.pos==i.text.length-1||je(i.text.charCodeAt(i.pos+1)))&&(!t||hu(e,S.BulletList)||i.skipSpace(i.pos+2)=48&&r<=57;){n++;if(n==i.text.length)return-1;r=i.text.charCodeAt(n)}return n==i.pos||n>i.pos+9||r!=46&&r!=41||ni.pos+1||i.next!=49)?-1:n+1-i.pos}function cu(i){if(i.next!=35)return-1;let e=i.pos+1;for(;e6?-1:t}function fu(i){if(i.next!=45&&i.next!=61||i.indent>=i.baseIndent+4)return-1;let e=i.pos+1;for(;e/,du=/\?>/,Wo=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*"}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:"-._"}}),Gr=su.configure({wrap:PO(nu,ru)});function Ti(i={}){let e="",t;i.matchClosingTags===!1&&(e="noMatch"),i.selfClosingTags===!0&&(e=(e?e+" ":"")+"selfClosing"),(i.nestedLanguages&&i.nestedLanguages.length||i.nestedAttributes&&i.nestedAttributes.length)&&(t=PO((i.nestedLanguages||[]).concat(nu),(i.nestedAttributes||[]).concat(ru)));let n=t?su.configure({wrap:t,dialect:e}):e?Gr.configure({dialect:e}):Gr;return new re(n,[Gr.data.of({autocomplete:gQ(i)}),i.autoCloseTags!==!1?QQ:[],ei().support,_r().support])}var Ff=new Set("area base br col command embed frame hr img input keygen link meta param source track wbr menuitem".split(" ")),QQ=v.inputHandler.of((i,e,t,n,r)=>{if(i.composing||i.state.readOnly||e!=t||n!=">"&&n!="/"||!Gr.isActiveAt(i.state,e,-1))return!1;let s=r(),{state:o}=s,O=o.changeByRange(l=>{var a,h,c;let f=o.doc.sliceString(l.from-1,l.to)==n,{head:d}=l,p=A(o).resolveInner(d-1,-1),m;if((p.name=="TagName"||p.name=="StartTag")&&(p=p.parent),f&&n==">"&&p.name=="OpenTag"){if(((h=(a=p.parent)===null||a===void 0?void 0:a.lastChild)===null||h===void 0?void 0:h.name)!="CloseTag"&&(m=ki(o.doc,p.parent,d))&&!Ff.has(m)){let $=d+(o.doc.sliceString(d,d+1)===">"?1:0),g=``;return{range:l,changes:{from:d,to:$,insert:g}}}}else if(f&&n=="/"&&p.name=="IncompleteCloseTag"){let $=p.parent;if(p.from==d-2&&((c=$.lastChild)===null||c===void 0?void 0:c.name)!="CloseTag"&&(m=ki(o.doc,$,d))&&!Ff.has(m)){let g=d+(o.doc.sliceString(d,d+1)===">"?1:0),Q=`${m}>`;return{range:S.cursor(d+Q.length,-1),changes:{from:d,to:g,insert:Q}}}}return{range:l}});return O.changes.empty?!1:(i.dispatch([s,o.update(O,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});var Lr=class i{static create(e,t,n,r,s){let o=r+(r<<8)+e+(t<<4)|0;return new i(e,t,n,o,s,[],[])}constructor(e,t,n,r,s,o,O){this.type=e,this.value=t,this.from=n,this.hash=r,this.end=s,this.children=o,this.positions=O,this.hashProp=[[R.contextHash,r]]}addChild(e,t){e.prop(R.contextHash)!=this.hash&&(e=new Y(e.type,e.children,e.positions,e.length,this.hashProp)),this.children.push(e),this.positions.push(t)}toTree(e,t=this.end){let n=this.children.length-1;return n>=0&&(t=Math.max(t,this.positions[n]+this.children[n].length+this.from)),new Y(e.types[this.type],this.children,this.positions,t-this.from).balance({makeTree:(r,s,o)=>new Y(F.none,r,s,o,this.hashProp)})}},b;(function(i){i[i.Document=1]="Document",i[i.CodeBlock=2]="CodeBlock",i[i.FencedCode=3]="FencedCode",i[i.Blockquote=4]="Blockquote",i[i.HorizontalRule=5]="HorizontalRule",i[i.BulletList=6]="BulletList",i[i.OrderedList=7]="OrderedList",i[i.ListItem=8]="ListItem",i[i.ATXHeading1=9]="ATXHeading1",i[i.ATXHeading2=10]="ATXHeading2",i[i.ATXHeading3=11]="ATXHeading3",i[i.ATXHeading4=12]="ATXHeading4",i[i.ATXHeading5=13]="ATXHeading5",i[i.ATXHeading6=14]="ATXHeading6",i[i.SetextHeading1=15]="SetextHeading1",i[i.SetextHeading2=16]="SetextHeading2",i[i.HTMLBlock=17]="HTMLBlock",i[i.LinkReference=18]="LinkReference",i[i.Paragraph=19]="Paragraph",i[i.CommentBlock=20]="CommentBlock",i[i.ProcessingInstructionBlock=21]="ProcessingInstructionBlock",i[i.Escape=22]="Escape",i[i.Entity=23]="Entity",i[i.HardBreak=24]="HardBreak",i[i.Emphasis=25]="Emphasis",i[i.StrongEmphasis=26]="StrongEmphasis",i[i.Link=27]="Link",i[i.Image=28]="Image",i[i.InlineCode=29]="InlineCode",i[i.HTMLTag=30]="HTMLTag",i[i.Comment=31]="Comment",i[i.ProcessingInstruction=32]="ProcessingInstruction",i[i.URL=33]="URL",i[i.HeaderMark=34]="HeaderMark",i[i.QuoteMark=35]="QuoteMark",i[i.ListMark=36]="ListMark",i[i.LinkMark=37]="LinkMark",i[i.EmphasisMark=38]="EmphasisMark",i[i.CodeMark=39]="CodeMark",i[i.CodeText=40]="CodeText",i[i.CodeInfo=41]="CodeInfo",i[i.LinkTitle=42]="LinkTitle",i[i.LinkLabel=43]="LinkLabel"})(b||(b={}));var XO=class{constructor(e,t){this.start=e,this.content=t,this.marks=[],this.parsers=[]}},WO=class{constructor(){this.text="",this.baseIndent=0,this.basePos=0,this.depth=0,this.markers=[],this.pos=0,this.indent=0,this.next=-1}forward(){this.basePos>this.pos&&this.forwardInner()}forwardInner(){let e=this.skipSpace(this.basePos);this.indent=this.countIndent(e,this.pos,this.indent),this.pos=e,this.next=e==this.text.length?-1:this.text.charCodeAt(e)}skipSpace(e){return yn(this.text,e)}reset(e){for(this.text=e,this.baseIndent=this.basePos=this.pos=this.indent=0,this.forwardInner(),this.depth=1;this.markers.length;)this.markers.pop()}moveBase(e){this.basePos=e,this.baseIndent=this.countIndent(e,this.pos,this.indent)}moveBaseColumn(e){this.baseIndent=e,this.basePos=this.findColumn(e)}addMarker(e){this.markers.push(e)}countIndent(e,t=0,n=0){for(let r=t;r=e.stack[t.depth+1].value+t.baseIndent)return!0;if(t.indent>=t.baseIndent+4)return!1;let n=(i.type==b.OrderedList?IO:GO)(t,e,!1);return n>0&&(i.type!=b.BulletList||EO(t,e,!1)<0)&&t.text.charCodeAt(t.pos+n-1)==i.value}var gu={[b.Blockquote](i,e,t){return t.next!=62?!1:(t.markers.push(U(b.QuoteMark,e.lineStart+t.pos,e.lineStart+t.pos+1)),t.moveBase(t.pos+(Ie(t.text.charCodeAt(t.pos+1))?2:1)),i.end=e.lineStart+t.text.length,!0)},[b.ListItem](i,e,t){return t.indent-1?!1:(t.moveBaseColumn(t.baseIndent+i.value),!0)},[b.OrderedList]:ou,[b.BulletList]:ou,[b.Document](){return!0}};function Ie(i){return i==32||i==9||i==10||i==13}function yn(i,e=0){for(;et&&Ie(i.charCodeAt(e-1));)e--;return e}function Su(i){if(i.next!=96&&i.next!=126)return-1;let e=i.pos+1;for(;e-1&&i.depth==e.stack.length||n<3?-1:1}function yu(i,e){for(let t=i.stack.length-1;t>=0;t--)if(i.stack[t].type==e)return!0;return!1}function GO(i,e,t){return(i.next==45||i.next==43||i.next==42)&&(i.pos==i.text.length-1||Ie(i.text.charCodeAt(i.pos+1)))&&(!t||yu(e,b.BulletList)||i.skipSpace(i.pos+2)=48&&r<=57;){n++;if(n==i.text.length)return-1;r=i.text.charCodeAt(n)}return n==i.pos||n>i.pos+9||r!=46&&r!=41||ni.pos+1||i.next!=49)?-1:n+1-i.pos}function bu(i){if(i.next!=35)return-1;let e=i.pos+1;for(;e6?-1:t}function Pu(i){if(i.next!=45&&i.next!=61||i.indent>=i.baseIndent+4)return-1;let e=i.pos+1;for(;e/,wu=/\?>/,ZO=[[/^<(?:script|pre|style)(?:\s|>|$)/i,/<\/(?:script|pre|style)>/i],[/^\s*/i.exec(n);if(s)return i.append(Y(S.Comment,t,t+1+s[0].length));let O=/^\?[^]*?\?>/.exec(n);if(O)return i.append(Y(S.ProcessingInstruction,t,t+1+O[0].length));let o=/^(?:![A-Z][^]*?>|!\[CDATA\[[^]*?\]\]>|\/\s*[a-zA-Z][\w-]*\s*>|\s*[a-zA-Z][\w-]*(\s+[a-zA-Z:_][\w-.:]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*(\/\s*)?>)/.exec(n);return o?i.append(Y(S.HTMLTag,t,t+1+o[0].length)):-1},Emphasis(i,e,t){if(e!=95&&e!=42)return-1;let n=t+1;for(;i.char(n)==e;)n++;let r=i.slice(t-1,t),s=i.slice(n,n+1),O=Qn.test(r),o=Qn.test(s),l=/\s|^$/.test(r),a=/\s|^$/.test(s),h=!a&&(!o||l||O),c=!l&&(!O||a||o),f=h&&(e==42||!c||O),d=c&&(e==42||!h||o);return i.append(new Ve(e==95?gu:Qu,t,n,(f?1:0)|(d?2:0)))},HardBreak(i,e,t){if(e==92&&i.char(t+1)==10)return i.append(Y(S.HardBreak,t,t+2));if(e==32){let n=t+1;for(;i.char(n)==32;)n++;if(i.char(n)==10&&n>=t+2)return i.append(Y(S.HardBreak,t,n+1))}return-1},Link(i,e,t){return e==91?i.append(new Ve(pn,t,t+1,1)):-1},Image(i,e,t){return e==33&&i.char(t+1)==91?i.append(new Ve(ru,t,t+2,1)):-1},LinkEnd(i,e,t){if(e!=93)return-1;for(let n=i.parts.length-1;n>=0;n--){let r=i.parts[n];if(r instanceof Ve&&(r.type==pn||r.type==ru)){if(!r.side||i.skipSpace(r.to)==t&&!/[(\[]/.test(i.slice(t+1,t+2)))return i.parts[n]=null,-1;let s=i.takeContent(n),O=i.parts[n]=KQ(i,s,r.type==pn?S.Link:S.Image,r.from,t+1);if(r.type==pn)for(let o=0;oe?Y(S.URL,e+t,s+t):s==i.length?null:!1}}function yu(i,e,t){let n=i.charCodeAt(e);if(n!=39&&n!=34&&n!=40)return!1;let r=n==40?41:n;for(let s=e+1,O=!1;s=this.end?-1:this.text.charCodeAt(e-this.offset)}get end(){return this.offset+this.text.length}slice(e,t){return this.text.slice(e-this.offset,t-this.offset)}append(e){return this.parts.push(e),e.to}addDelimiter(e,t,n,r,s){return this.append(new Ve(e,t,n,(r?1:0)|(s?2:0)))}addElement(e){return this.append(e)}resolveMarkers(e){for(let n=e;n=e;l--){let m=this.parts[l];if(m instanceof Ve&&m.side&1&&m.type==r.type&&!(s&&(r.side&1||m.side&2)&&(m.to-m.from+O)%3==0&&((m.to-m.from)%3||O%3))){o=m;break}}if(!o)continue;let a=r.type.resolve,h=[],c=o.from,f=r.to;if(s){let m=Math.min(2,o.to-o.from,O);c=o.to-m,f=r.from+m,a=m==1?"Emphasis":"StrongEmphasis"}o.type.mark&&h.push(this.elt(o.type.mark,c,o.to));for(let m=l+1;m=0;t--){let n=this.parts[t];if(n instanceof Ve&&n.type==e)return t}return null}takeContent(e){let t=this.resolveMarkers(e);return this.parts.length=e,t}skipSpace(e){return $n(this.text,e-this.offset)+this.offset}elt(e,t,n,r){return typeof e=="string"?Y(this.parser.getNodeType(e),t,n,r):new Dr(e,t)}};function Uo(i,e){if(!e.length)return i;if(!i.length)return e;let t=i.slice(),n=0;for(let r of e){for(;n(e?e-1:0))return!1;if(this.fragmentEnd<0){let s=this.fragment.to;for(;s>0&&this.input.read(s-1,s)!=` -`;)s--;this.fragmentEnd=s?s-1:0}let n=this.cursor;n||(n=this.cursor=this.fragment.tree.cursor(),n.firstChild());let r=e+this.fragment.offset;for(;n.to<=r;)if(!n.parent())return!1;for(;;){if(n.from>=r)return this.fragment.from<=t;if(!n.childAfter(r))return!1}}matches(e){let t=this.cursor.tree;return t&&t.prop(R.contextHash)==e}takeNodes(e){let t=this.cursor,n=this.fragment.offset,r=this.fragmentEnd-(this.fragment.openEnd?1:0),s=e.absoluteLineStart,O=s,o=e.block.children.length,l=O,a=o;for(;;){if(t.to-n>r){if(t.type.isAnonymous&&t.firstChild())continue;break}if(e.dontInject.add(t.tree),e.addNode(t.tree,t.from-n),t.type.is("Block")&&(eS.indexOf(t.type.id)<0?(O=t.to-n,o=e.block.children.length):(O=l,o=a,l=t.to-n,a=e.block.children.length)),!t.nextSibling())break}for(;e.block.children.length>o;)e.block.children.pop(),e.block.positions.pop();return O-s}},tS=se({"Blockquote/...":u.quote,HorizontalRule:u.contentSeparator,"ATXHeading1/... SetextHeading1/...":u.heading1,"ATXHeading2/... SetextHeading2/...":u.heading2,"ATXHeading3/...":u.heading3,"ATXHeading4/...":u.heading4,"ATXHeading5/...":u.heading5,"ATXHeading6/...":u.heading6,"Comment CommentBlock":u.comment,Escape:u.escape,Entity:u.character,"Emphasis/...":u.emphasis,"StrongEmphasis/...":u.strong,"Link/... Image/...":u.link,"OrderedList/... BulletList/...":u.list,"BlockQuote/...":u.quote,"InlineCode CodeText":u.monospace,URL:u.url,"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark":u.processingInstruction,"CodeInfo LinkLabel":u.labelName,LinkTitle:u.string,Paragraph:u.content}),bu=new gn(new ct(mu).extend(tS),Object.keys(Er).map(i=>Er[i]),Object.keys(Er).map(i=>HQ[i]),Object.keys(Er),FQ,ou,Object.keys(vo).map(i=>vo[i]),Object.keys(vo),[]);function iS(i,e,t){let n=[];for(let r=i.firstChild,s=e;;r=r.nextSibling){let O=r?r.from:t;if(O>s&&n.push({from:s,to:O}),!r)break;s=r.to}return n}function xu(i){let{codeParser:e,htmlParser:t}=i;return{wrap:$i((r,s)=>{let O=r.type.id;if(e&&(O==S.CodeBlock||O==S.FencedCode)){let o="";if(O==S.FencedCode){let a=r.node.getChild(S.CodeInfo);a&&(o=s.read(a.from,a.to))}let l=e(o);if(l)return{parser:l,overlay:a=>a.type.id==S.CodeText}}else if(t&&(O==S.HTMLBlock||O==S.HTMLTag))return{parser:t,overlay:iS(r.node,r.from,r.to)};return null})}}var nS={resolve:"Strikethrough",mark:"StrikethroughMark"},rS={defineNodes:[{name:"Strikethrough",style:{"Strikethrough/...":u.strikethrough}},{name:"StrikethroughMark",style:u.processingInstruction}],parseInline:[{name:"Strikethrough",parse(i,e,t){if(e!=126||i.char(t+1)!=126||i.char(t+2)==126)return-1;let n=i.slice(t-1,t),r=i.slice(t+2,t+3),s=/\s|^$/.test(n),O=/\s|^$/.test(r),o=Qn.test(n),l=Qn.test(r);return i.addDelimiter(nS,t,t+2,!O&&(!l||s||o),!s&&(!o||O||l))},after:"Emphasis"}]};function mn(i,e,t=0,n,r=0){let s=0,O=!0,o=-1,l=-1,a=!1,h=()=>{n.push(i.elt("TableCell",r+o,r+l,i.parser.parseInline(e.slice(o,l),r+o)))};for(let c=t;c-1)&&s++,O=!1,n&&(o>-1&&h(),n.push(i.elt("TableDelimiter",c+r,c+r+1))),o=l=-1):(a||f!=32&&f!=9)&&(o<0&&(o=c),l=c+1),a=!a&&f==92}return o>-1&&(s++,n&&h()),s}function Ou(i,e){for(let t=e;tr instanceof Lr)||!Ou(e.text,e.basePos))return!1;let n=i.scanLine(i.absoluteLineEnd+1).text;return wu.test(n)&&mn(i,e.text,e.basePos)==mn(i,n,e.basePos)},before:"SetextHeading"}]},_o=class{nextLine(){return!1}finish(e,t){return e.addLeafElement(t,e.elt("Task",t.start,t.start+t.content.length,[e.elt("TaskMarker",t.start,t.start+3),...e.parser.parseInline(t.content.slice(3),t.start+3)])),!0}},OS={defineNodes:[{name:"Task",block:!0,style:u.list},{name:"TaskMarker",style:u.atom}],parseBlock:[{name:"TaskList",leaf(i,e){return/^\[[ xX]\]/.test(e.content)&&i.parentType().name=="ListItem"?new _o:null},after:"SetextHeading"}]},ku=[sS,OS,rS];function vu(i,e,t){return(n,r,s)=>{if(r!=i||n.char(s+1)==i)return-1;let O=[n.elt(t,s,s+1)];for(let o=s+1;o"}}}),Vu=new R,Zu=bu.configure({props:[ke.add(i=>!i.is("Block")||i.is("Document")||Io(i)!=null?void 0:(e,t)=>({from:t.doc.lineAt(e.from).to,to:e.to})),Vu.add(Io),Se.add({Document:()=>null}),dt.add({Document:Ru})]});function Io(i){let e=/^(?:ATX|Setext)Heading(\d)$/.exec(i.name);return e?+e[1]:void 0}function oS(i,e){let t=i;for(;;){let n=t.nextSibling,r;if(!n||(r=Io(n.type))!=null&&r<=e)break;t=n}return t.to}var lS=zh.of((i,e,t)=>{for(let n=_(i).resolveInner(t,-1);n&&!(n.fromt)return{from:t,to:s}}return null});function Do(i){return new de(Ru,i,[lS],"markdown")}var aS=Do(Zu),hS=Zu.configure([ku,Xu,Tu,zu]),Cu=Do(hS);function cS(i,e){return t=>{if(t&&i){let n=null;if(t=/\S*/.exec(t)[0],typeof i=="function"?n=i(t):n=nn.matchLanguageName(i,t,!0),n instanceof nn)return n.support?n.support.language.parser:Lt.getSkippingParser(n.load());if(n)return n.parser}return e?e.parser:null}}var Xi=class{constructor(e,t,n,r,s,O,o){this.node=e,this.from=t,this.to=n,this.spaceBefore=r,this.spaceAfter=s,this.type=O,this.item=o}blank(e,t=!0){let n=this.spaceBefore+(this.node.name=="Blockquote"?">":"");if(e!=null){for(;n.length0;r--)n+=" ";return n+(t?this.spaceAfter:"")}}marker(e,t){let n=this.node.name=="OrderedList"?String(+Uu(this.item,e)[2]+t):"";return this.spaceBefore+n+this.type+this.spaceAfter}};function qu(i,e){let t=[];for(let r=i;r&&r.name!="Document";r=r.parent)(r.name=="ListItem"||r.name=="Blockquote"||r.name=="FencedCode")&&t.push(r);let n=[];for(let r=t.length-1;r>=0;r--){let s=t[r],O,o=e.lineAt(s.from),l=s.from-o.from;if(s.name=="FencedCode")n.push(new Xi(s,l,l,"","","",null));else if(s.name=="Blockquote"&&(O=/^[ \t]*>( ?)/.exec(o.text.slice(l))))n.push(new Xi(s,l,l+O[0].length,"",O[1],">",null));else if(s.name=="ListItem"&&s.parent.name=="OrderedList"&&(O=/^([ \t]*)\d+([.)])([ \t]*)/.exec(o.text.slice(l)))){let a=O[3],h=O[0].length;a.length>=4&&(a=a.slice(0,a.length-4),h-=4),n.push(new Xi(s.parent,l,l+h,O[1],a,O[2],s))}else if(s.name=="ListItem"&&s.parent.name=="BulletList"&&(O=/^([ \t]*)([-+*])([ \t]{1,4}\[[ xX]\])?([ \t]+)/.exec(o.text.slice(l)))){let a=O[4],h=O[0].length;a.length>4&&(a=a.slice(0,a.length-4),h-=4);let c=O[2];O[3]&&(c+=O[3].replace(/[xX]/," ")),n.push(new Xi(s.parent,l,l+h,O[1],a,c,s))}}return n}function Uu(i,e){return/^(\s*)(\d+)(?=[.)])/.exec(e.sliceString(i.from,i.from+10))}function Eo(i,e,t,n=0){for(let r=-1,s=i;;){if(s.name=="ListItem"){let o=Uu(s,e),l=+o[2];if(r>=0){if(l!=r+1)return;t.push({from:s.from+o[1].length,to:s.from+o[0].length,insert:String(r+2+n)})}r=l}let O=s.nextSibling;if(!O)break;s=O}}var fS=({state:i,dispatch:e})=>{let t=_(i),{doc:n}=i,r=null,s=i.changeByRange(O=>{if(!O.empty||!Cu.isActiveAt(i,O.from))return r={range:O};let o=O.from,l=n.lineAt(o),a=qu(t.resolveInner(o,-1),n);for(;a.length&&a[a.length-1].from>o-l.from;)a.pop();if(!a.length)return r={range:O};let h=a[a.length-1];if(h.to-h.spaceAfter.length>o-l.from)return r={range:O};let c=o>=h.to-h.spaceAfter.length&&!/\S/.test(l.text.slice(h.to));if(h.item&&c)if(h.node.firstChild.to>=o||l.from>0&&!/[^\s>]/.test(n.lineAt(l.from-1).text)){let $=a.length>1?a[a.length-2]:null,g,b="";$&&$.item?(g=l.from+$.from,b=$.marker(n,1)):g=l.from+($?$.to:0);let k=[{from:g,to:o,insert:b}];return h.node.name=="OrderedList"&&Eo(h.item,n,k,-2),$&&$.node.name=="OrderedList"&&Eo($.item,n,k),{range:Q.cursor(g+b.length),changes:k}}else{let $="";for(let g=0,b=a.length-2;g<=b;g++)$+=a[g].blank(g\s*$/.exec($.text);if(g&&g.index==h.from){let b=i.changes([{from:$.from+g.index,to:$.to},{from:l.from+h.from,to:l.to}]);return{range:O.map(b),changes:b}}}let f=[];h.node.name=="OrderedList"&&Eo(h.item,n,f);let d=h.item&&h.item.from]*/.exec(l.text)[0].length>=h.to)for(let $=0,g=a.length-1;$<=g;$++)p+=$==g&&!d?a[$].marker(n,1):a[$].blank($l.from&&/\s/.test(l.text.charAt(m-l.from-1));)m--;return p=i.lineBreak+p,f.push({from:m,to:o,insert:p}),{range:Q.cursor(m+p.length),changes:f}});return r?!1:(e(i.update(s,{scrollIntoView:!0,userEvent:"input"})),!0)};function Wu(i){return i.name=="QuoteMark"||i.name=="ListMark"}function uS(i,e){let t=i.resolveInner(e,-1),n=e;Wu(t)&&(n=t.from,t=t.parent);for(let r;r=t.childBefore(n);)if(Wu(r))n=r.from;else if(r.name=="OrderedList"||r.name=="BulletList")t=r.lastChild,n=t.to;else break;return t}var dS=({state:i,dispatch:e})=>{let t=_(i),n=null,r=i.changeByRange(s=>{let O=s.from,{doc:o}=i;if(s.empty&&Cu.isActiveAt(i,s.from)){let l=o.lineAt(O),a=qu(uS(t,O),o);if(a.length){let h=a[a.length-1],c=h.to-h.spaceAfter.length+(h.spaceAfter?1:0);if(O-l.from>c&&!/\S/.test(l.text.slice(c,O-l.from)))return{range:Q.cursor(l.from+c),changes:{from:l.from+c,to:O}};if(O-l.from==c&&(!h.item||l.from<=h.item.from||!/\S/.test(l.text.slice(0,h.to)))){let f=l.from+h.from;if(h.item&&h.node.from=97&&i<=122||i>=65&&i<=90}function Sn(i){return i==95||i>=128||Gu(i)}function No(i){return i>=48&&i<=55||i>=97&&i<=102||i>=65&&i<=70}var Wy={int:!0,integer:!0,bool:!0,boolean:!0,float:!0,double:!0,real:!0,string:!0,array:!0,object:!0,unset:!0,__proto__:null},Ry=new J(i=>{if(i.next==40){i.advance();let e=0;for(;ju(i.peek(e));)e++;let t="",n;for(;Gu(n=i.peek(e));)t+=String.fromCharCode(n),e++;for(;ju(i.peek(e));)e++;i.peek(e)==41&&Wy[t.toLowerCase()]&&i.acceptToken(gS)}else if(i.next==60&&i.peek(1)==60&&i.peek(2)==60){for(let n=0;n<3;n++)i.advance();for(;i.next==32||i.next==9;)i.advance();let e=i.next==39;if(e&&i.advance(),!Sn(i.next))return;let t=String.fromCharCode(i.next);for(;i.advance(),!(!Sn(i.next)&&!(i.next>=48&&i.next<=55));)t+=String.fromCharCode(i.next);if(e){if(i.next!=39)return;i.advance()}if(i.next!=10&&i.next!=13)return;for(;;){let n=i.next==10||i.next==13;if(i.advance(),i.next<0)return;if(n){for(;i.next==32||i.next==9;)i.advance();let r=!0;for(let s=0;s{i.next<0&&i.acceptToken(bS)}),Zy=new J((i,e)=>{i.next==63&&e.canShift(Yu)&&i.peek(1)==62&&i.acceptToken(Yu)});function Cy(i){let e=i.peek(1);if(e==110||e==114||e==116||e==118||e==101||e==102||e==92||e==36||e==34||e==123)return 2;if(e>=48&&e<=55){let t=2,n;for(;t<5&&(n=i.peek(t))>=48&&n<=55;)t++;return t}if(e==120&&No(i.peek(2)))return No(i.peek(3))?4:3;if(e==117&&i.peek(2)==123)for(let t=3;;t++){let n=i.peek(t);if(n==125)return t==2?0:t+1;if(!No(n))break}return 0}var qy=new J((i,e)=>{let t=!1;for(;!(i.next==34||i.next<0||i.next==36&&(Sn(i.peek(1))||i.peek(1)==123)||i.next==123&&i.peek(1)==36);t=!0){if(i.next==92){let n=Cy(i);if(n){if(t)break;return i.acceptToken(yS,n)}}else if(!t&&(i.next==91||i.next==45&&i.peek(1)==62&&Sn(i.peek(2))||i.next==63&&i.peek(1)==45&&i.peek(2)==62&&Sn(i.peek(3)))&&e.canShift(PS))break;i.advance()}t&&i.acceptToken(SS)}),Uy=se({"Visibility abstract final static":u.modifier,"for foreach while do if else elseif switch try catch finally return throw break continue default case":u.controlKeyword,"endif endfor endforeach endswitch endwhile declare enddeclare goto match":u.controlKeyword,"and or xor yield unset clone instanceof insteadof":u.operatorKeyword,"function fn class trait implements extends const enum global interface use var":u.definitionKeyword,"include include_once require require_once namespace":u.moduleKeyword,"new from echo print array list as":u.keyword,null:u.null,Boolean:u.bool,VariableName:u.variableName,"NamespaceName/...":u.namespace,"NamedType/...":u.typeName,Name:u.name,"CallExpression/Name":u.function(u.variableName),"LabelStatement/Name":u.labelName,"MemberExpression/Name":u.propertyName,"MemberExpression/VariableName":u.special(u.propertyName),"ScopedExpression/ClassMemberName/Name":u.propertyName,"ScopedExpression/ClassMemberName/VariableName":u.special(u.propertyName),"CallExpression/MemberExpression/Name":u.function(u.propertyName),"CallExpression/ScopedExpression/ClassMemberName/Name":u.function(u.propertyName),"MethodDeclaration/Name":u.function(u.definition(u.variableName)),"FunctionDefinition/Name":u.function(u.definition(u.variableName)),"ClassDeclaration/Name":u.definition(u.className),UpdateOp:u.updateOperator,ArithOp:u.arithmeticOperator,LogicOp:u.logicOperator,BitOp:u.bitwiseOperator,CompareOp:u.compareOperator,ControlOp:u.controlOperator,AssignOp:u.definitionOperator,"$ ConcatOp":u.operator,LineComment:u.lineComment,BlockComment:u.blockComment,Integer:u.integer,Float:u.float,String:u.string,ShellExpression:u.special(u.string),"=> ->":u.punctuation,"( )":u.paren,"#[ [ ]":u.squareBracket,"${ { }":u.brace,"-> ?->":u.derefOperator,", ; :: : \\":u.separator,"PhpOpen PhpClose":u.processingInstruction}),Yy={__proto__:null,static:311,STATIC:311,class:333,CLASS:333},Eu=me.deserialize({version:14,states:"$GSQ`OWOOQhQaOOP%oO`OOOOO#t'#H_'#H_O%tO#|O'#DtOOO#u'#Dw'#DwQ&SOWO'#DwO&XO$VOOOOQ#u'#Dx'#DxO&lQaO'#D|O(mQdO'#E}O(tQdO'#EQO*kQaO'#EWO,zQ`O'#ETO-PQ`O'#E^O/nQaO'#E^O/uQ`O'#EfO/zQ`O'#EoO*kQaO'#EoO0VQ`O'#HhO0[Q`O'#E{O0[Q`O'#E{OOQS'#Ic'#IcO0aQ`O'#EvOOQS'#IZ'#IZO2oQdO'#IWO6tQeO'#FUO*kQaO'#FeO*kQaO'#FfO*kQaO'#FgO*kQaO'#FhO*kQaO'#FhO*kQaO'#FkOOQO'#Id'#IdO7RQ`O'#FqOOQO'#Hi'#HiO7ZQ`O'#HOO7uQ`O'#FlO8QQ`O'#H]O8]Q`O'#FvO8eQaO'#FwO*kQaO'#GVO*kQaO'#GYO8}OrO'#G]OOQS'#Iq'#IqOOQS'#Ip'#IpOOQS'#IW'#IWO,zQ`O'#GdO,zQ`O'#GfO,zQ`O'#GkOhQaO'#GmO9UQ`O'#GnO9ZQ`O'#GqO9`Q`O'#GtO9eQeO'#GuO9eQeO'#GvO9eQeO'#GwO9oQ`O'#GxO9tQ`O'#GzO9yQaO'#G{OS,5>SOJ[QdO,5;gOOQO-E;f-E;fOL^Q`O,5;gOLcQpO,5;bO0aQ`O'#EyOLkQtO'#E}OOQS'#Ez'#EzOOQS'#Ib'#IbOM`QaO,5:wO*kQaO,5;nOOQS,5;p,5;pO*kQaO,5;pOMgQdO,5UQaO,5=hO!-eQ`O'#F}O!-jQdO'#IlO!&WQdO,5=iOOQ#u,5=j,5=jO!-uQ`O,5=lO!-xQ`O,5=mO!-}Q`O,5=nO!.YQdO,5=qOOQ#u,5=q,5=qO!.eQ`O,5=rO!.eQ`O,5=rO!.mQdO'#IwO!.{Q`O'#HXO!&WQdO,5=rO!/ZQ`O,5=rO!/fQdO'#IYO!&WQdO,5=vOOQ#u-E;_-E;_O!1RQ`O,5=kOOO#u,5:^,5:^O!1^O#|O,5:^OOO#u-E;^-E;^OOOO,5>p,5>pOOQ#y1G0S1G0SO!1fQ`O1G0XO*kQaO1G0XO!2xQ`O1G0pOOQS1G0p1G0pO!4[Q`O1G0pOOQS'#I_'#I_O*kQaO'#I_OOQS1G0q1G0qO!4cQ`O'#IaO!7lQ`O'#E}O!7yQaO'#EuOOQO'#Ia'#IaO!8TQ`O'#I`O!8]Q`O,5;_OOQS'#FQ'#FQOOQS1G1U1G1UO!8bQdO1G1]O!:dQdO1G1]O!wO#(fQaO'#HdO#(vQ`O,5>vOOQS1G0d1G0dO#)OQ`O1G0dO#)TQ`O'#I^O#*mQ`O'#I^O#*uQ`O,5;ROIbQaO,5;ROOQS1G0u1G0uPOQO'#E}'#E}O#+fQdO1G1RO0aQ`O'#HgO#-hQtO,5;cO#.YQaO1G0|OOQS,5;e,5;eO#0iQtO,5;gO#0vQdO1G0cO*kQaO1G0cO#2cQdO1G1YO#4OQdO1G1[OOQO,5<^,5<^O#4`Q`O'#HjO#4nQ`O,5?ROOQO1G1w1G1wO#4vQ`O,5?ZO!&WQdO1G3TO<_Q`O1G3TOOQ#u1G3U1G3UO#4{Q`O1G3YO!1RQ`O1G3VO#5WQ`O1G3VO#5]QpO'#FoO#5kQ`O'#FoO#5{Q`O'#FoO#6WQ`O'#FoO#6`Q`O'#FsO#6eQ`O'#FtOOQO'#If'#IfO#6lQ`O'#IeO#6tQ`O,5tOOQ#u1G3b1G3bOOQ#u1G3V1G3VO!-xQ`O1G3VO!1UQ`O1G3VOOO#u1G/x1G/xO*kQaO7+%sO#MuQdO7+%sOOQS7+&[7+&[O$ bQ`O,5>yO>UQaO,5;`O$ iQ`O,5;aO$#OQaO'#HfO$#YQ`O,5>zOOQS1G0y1G0yO$#bQ`O'#EYO$#gQ`O'#IXO$#oQ`O,5:sOOQS1G0e1G0eO$#tQ`O1G0eO$#yQ`O1G0iO9yQaO1G0iOOQO,5>O,5>OOOQO-E;b-E;bOOQS7+&O7+&OO>UQaO,5;SO$%`QaO'#HeO$%jQ`O,5>xOOQS1G0m1G0mO$%rQ`O1G0mOOQS,5>R,5>ROOQS-E;e-E;eO$%wQdO7+&hO$'yQtO1G1RO$(WQdO7+%}OOQS1G0i1G0iOOQO,5>U,5>UOOQO-E;h-E;hOOQ#u7+(o7+(oO!&WQdO7+(oOOQ#u7+(t7+(tO#KmQ`O7+(tO0aQ`O7+(tOOQ#u7+(q7+(qO!-xQ`O7+(qO!1UQ`O7+(qO!1RQ`O7+(qO$)sQ`O,5UQaO,5],5>]OOQS-E;o-E;oO$.iQdO7+'hO$.yQpO7+'hO$/RQdO'#IiOOQO,5dOOQ#u,5>d,5>dOOQ#u-E;v-E;vO$;lQaO7+(lO$cOOQS-E;u-E;uO!&WQdO7+(nO$=mQdO1G2TOOQS,5>[,5>[OOQS-E;n-E;nOOQ#u7+(r7+(rO$?nQ`O'#GQO$?uQ`O'#GQO$@ZQ`O'#HUOOQO'#Hy'#HyO$@`Q`O,5=oOOQ#u,5=o,5=oO$@gQpO7+(tOOQ#u7+(x7+(xO!&WQdO7+(xO$@rQdO,5>fOOQS-E;x-E;xO$AQQdO1G4}O$A]Q`O,5=tO$AbQ`O,5=tO$AmQ`O'#H{O$BRQ`O,5?dOOQS1G3_1G3_O#KrQ`O7+(xO$BZQdO,5=|OOQS-E;`-E;`O$CvQdO<Q,5>QOOQO-E;d-E;dO$8YQaO,5:tO$FxQaO'#HcO$GVQ`O,5>sOOQS1G0_1G0_OOQS7+&P7+&PO$G_Q`O7+&TO$HtQ`O1G0nO$JZQ`O,5>POOQO,5>P,5>POOQO-E;c-E;cOOQS7+&X7+&XOOQS7+&T7+&TOOQ#u<UQaO1G1uO$KsQ`O1G1uO$LOQ`O1G1yOOQO1G1y1G1yO$LTQ`O1G1uO$L]Q`O1G1uO$MrQ`O1G1zO>UQaO1G1zOOQO,5>V,5>VOOQO-E;i-E;iOOQS<`OOQ#u-E;r-E;rOhQaO<aOOQO-E;s-E;sO!&WQdO<g,5>gOOQO-E;y-E;yO!&WQdO<UQaO,5;TOOQ#uANAzANAzO#KmQ`OANAzOOQ#uANAwANAwO!-xQ`OANAwO%)vQ`O7+'aO>UQaO7+'aOOQO7+'e7+'eO%+]Q`O7+'aO%+hQ`O7+'eO>UQaO7+'fO%+mQ`O7+'fO%-SQ`O'#HlO%-bQ`O,5?SO%-bQ`O,5?SOOQO1G1{1G1{O$+qQpOAN@dOOQSAN@dAN@dO0aQ`OAN@dO%-jQtOANCgO%-xQ`OAN@dO*kQaOAN@nO%.QQdOAN@nO%.bQpOAN@nOOQS,5>X,5>XOOQS-E;k-E;kOOQO1G2U1G2UO!&WQdO1G2UO$/dQpO1G2UO<_Q`O1G2SO!.YQdO1G2WO!&WQdO1G2SOOQO1G2W1G2WOOQO1G2S1G2SO%.jQaO'#GSOOQO1G2X1G2XOOQSAN@oAN@oOOOQ<UQaO<W,5>WO%6wQ`O,5>WOOQO-E;j-E;jO%6|Q`O1G4nOOQSG26OG26OO$+qQpOG26OO0aQ`OG26OO%7UQdOG26YO*kQaOG26YOOQO7+'p7+'pO!&WQdO7+'pO!&WQdO7+'nOOQO7+'r7+'rOOQO7+'n7+'nO%7fQ`OLD+tO%8uQ`O'#E}O%9PQ`O'#IZO!&WQdO'#HrO%:|QaO,5^,5>^OOQP-E;p-E;pOOQO1G2Y1G2YOOQ#uLD,bLD,bOOQTG27RG27RO!&WQdOLD,xO!&WQdO<wO&EPQdO1G0cO#.YQaO1G0cO&F{QdO1G1YO&HwQdO1G1[O#.YQaO1G1|O#.YQaO7+%sO&JsQdO7+%sO&LoQdO7+%}O#.YQaO7+'hO&NkQdO7+'hO'!gQdO<lQdO,5>wO(@nQdO1G0cO'.QQaO1G0cO(BpQdO1G1YO(DrQdO1G1[O'.QQaO1G1|O'.QQaO7+%sO(FtQdO7+%sO(HvQdO7+%}O'.QQaO7+'hO(JxQdO7+'hO(LzQdO<wO*1sQaO'#HdO*2TQ`O,5>vO*2]QdO1G0cO9yQaO1G0cO*4XQdO1G1YO*6TQdO1G1[O9yQaO1G1|O>UQaO'#HwO*8PQ`O,5=[O*8XQaO'#HbO*8cQ`O,5>tO9yQaO7+%sO*8kQdO7+%sO*:gQ`O1G0iO>UQaO1G0iO*;|QdO7+%}O9yQaO7+'hO*=xQdO7+'hO*?tQ`O,5>cO*AZQ`O,5=|O*BpQdO<UQaO'#FeO>UQaO'#FfO>UQaO'#FgO>UQaO'#FhO>UQaO'#FhO>UQaO'#FkO+'XQaO'#FwO>UQaO'#GVO>UQaO'#GYO+'`QaO,5:mO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO+'gQ`O'#I]O$8YQaO'#EaO+)PQaOG26YO$8YQaO'#I]O+*{Q`O'#I[O++TQaO,5:wO>UQaO,5;nO>UQaO,5;pO++[Q`O,5UQaO1G0XO+9hQ`O1G1]O+;TQ`O1G1]O+]Q`O1G1]O+?xQ`O1G1]O+AeQ`O1G1]O+CQQ`O1G1]O+DmQ`O1G1]O+FYQ`O1G1]O+GuQ`O1G1]O+IbQ`O1G1]O+J}Q`O1G1]O+LjQ`O1G1]O+NVQ`O1G1]O, rQ`O1G1]O,#_Q`O1G0cO>UQaO1G0cO,$zQ`O1G1YO,&gQ`O1G1[O,(SQ`O1G1|O>UQaO1G1|O>UQaO7+%sO,([Q`O7+%sO,)wQ`O7+%}O>UQaO7+'hO,+dQ`O7+'hO,+lQ`O7+'hO,-XQpO7+'hO,-aQ`O<UQaO<UQaOAN@nO,0qQ`OAN@nO,2^QpOAN@nO,2fQ`OG26YO>UQaOG26YO,4RQ`OLD+tO,5nQaO,5:}O>UQaO1G0iO,5uQ`O'#I]O$8YQaO'#FeO$8YQaO'#FfO$8YQaO'#FgO$8YQaO'#FhO$8YQaO'#FhO+)PQaO'#FhO$8YQaO'#FkO,6SQaO'#FwO,6ZQaO'#FwO$8YQaO'#GVO+)PQaO'#GVO$8YQaO'#GYO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO,8YQ`O'#FlO>UQaO'#EaO>UQaO'#I]O,8bQaO,5:wO,8iQaO,5:wO$8YQaO,5;nO+)PQaO,5;nO$8YQaO,5;pO,:hQ`O,5wO-IcQ`O1G0cO-KOQ`O1G0cO$8YQaO1G0cO+)PQaO1G0cO-L_Q`O1G1YO-MzQ`O1G1YO. ZQ`O1G1[O$8YQaO1G1|O$8YQaO7+%sO+)PQaO7+%sO.!vQ`O7+%sO.$cQ`O7+%sO.%rQ`O7+%}O.'_Q`O7+%}O$8YQaO7+'hO.(nQ`O7+'hO.*ZQ`O<fQ`O,5>wO.@RQ`O1G1|O!%WQ`O1G1|O0aQ`O1G1|O0aQ`O7+'hO.@ZQ`O7+'hO.@cQpO7+'hO.@kQpO<UO#X&PO~P>UO!o&SO!s&RO#b&RO~OPgOQ|OU^OW}O[8lOo=yOs#hOx8jOy8jO}`O!O]O!Q8pO!R}O!T8oO!U8kO!V8kO!Y8rO!c8iO!s&VO!y[O#U&WO#W_O#bhO#daO#ebO#peO$T8nO$]8mO$^8nO$aqO$z8qO${!OO$}}O%O}O%V|O'g{O~O!x'SP~PAOO!s&[O#b&[O~OT#TOz#RO!S#UO!b#VO!o!{O!v!yO!y!}O#S#QO#W!zO#`!|O#a!|O#s#PO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dO~O!x&nO~PCqO!x'VX!}'VX#O'VX#X'VX!n'VXV'VX!q'VX#u'VX#w'VXw'VX~P&sO!y$hO#S&oO~Oo$mOs$lO~O!o&pO~O!}&sO#S;dO#U;cO!x'OP~P9yOT6iOz6gO!S6jO!b6kO!o!{O!v8sO!y!}O#S#QO#W!zO#`!|O#a!|O#s#PO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}'PX#X'PX~O#O&tO~PGSO!}&wO#X'OX~O#X&yO~O!}'OO!x'QP~P9yO!n'PO~PCqO!m#oa!o#oa#S#oa#p#qX&s#oa!x#oa#O#oaw#oa~OT#oaz#oa!S#oa!b#oa!v#oa!y#oa#W#oa#`#oa#a#oa#s#oa#z#oa#{#oa#|#oa#}#oa$O#oa$Q#oa$R#oa$S#oa$T#oa$U#oa$V#oa$W#oa$z#oa!}#oa#X#oa!n#oaV#oa!q#oa#u#oa#w#oa~PIpO!s'RO~O!x'UO#l'SO~O!x'VX#l'VX#p#qX#S'VX#U'VX#b'VX!o'VX#O'VXw'VX!m'VX&s'VX~O#S'YO~P*kO!m$Xa&s$Xa!x$Xa!n$Xa~PCqO!m$Ya&s$Ya!x$Ya!n$Ya~PCqO!m$Za&s$Za!x$Za!n$Za~PCqO!m$[a&s$[a!x$[a!n$[a~PCqO!o!{O!y!}O#W!zO#`!|O#a!|O#s#PO$z#dOT$[a!S$[a!b$[a!m$[a!v$[a#S$[a#z$[a#{$[a#|$[a#}$[a$O$[a$Q$[a$R$[a$S$[a$T$[a$U$[a$V$[a$W$[a&s$[a!x$[a!n$[a~Oz#RO~PNyO!m$_a&s$_a!x$_a!n$_a~PCqO!y!}O!}$fX#X$fX~O!}'^O#X'ZX~O#X'`O~O!s$kO#S'aO~O]'cO~O!s'eO~O!s'fO~O$l'gO~O!`'mO#S'kO#U'lO#b'jO$drO!x'XP~P0aO!^'sO!oXO!q'rO~O!s'uO!y$hO~O!y$hO#S'wO~O!y$hO#S'yO~O#u'zO!m$sX!}$sX&s$sX~O!}'{O!m'bX&s'bX~O!m#cO&s#cO~O!q(PO#O(OO~O!m$ka&s$ka!x$ka!n$ka~PCqOl(ROw(SO!o(TO!y!}O~O!o!{O!y!}O#W!zO#`!|O#a!|O#s#PO~OT$yaz$ya!S$ya!b$ya!m$ya!v$ya#S$ya#z$ya#{$ya#|$ya#}$ya$O$ya$Q$ya$R$ya$S$ya$T$ya$U$ya$V$ya$W$ya$z$ya&s$ya!x$ya!}$ya#O$ya#X$ya!n$ya!q$yaV$ya#u$ya#w$ya~P!'WO!m$|a&s$|a!x$|a!n$|a~PCqO#W([O#`(YO#a(YO&r(ZOR&gX!o&gX#b&gX#e&gX&q&gX'f&gX~O'f(_O~P8lO!q(`O~PhO!o(cO!q(dO~O!q(`O&s(gO~PhO!a(kO~O!m(lO~P9yOZ(wOn(xO~O!s(zO~OT6iOz6gO!S6jO!b6kO!v8sO!}({O#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m'jX&s'jX~P!'WO#u)PO~O!})QO!m'`X&s'`X~Ol(RO!o(TO~Ow(SO!o)WO!q)ZO~O!m#cO!oXO&s#cO~O!o%pO!s#yO~OV)aO!})_O!m'kX&s'kX~O])cOs)cO!s#gO#peO~O!o%pO!s#gO#p)hO~OT6iOz6gO!S6jO!b6kO!v8sO!})iO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m&|X&s&|X#O&|X~P!'WOl(ROw(SO!o(TO~O!i)oO&t)oO~OT8vOz8tO!S8wO!b8xO!q)pO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#X)rO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WO!n)rO~PCqOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x'TX!}'TX~P!'WOT'VXz'VX!S'VX!b'VX!o'VX!v'VX!y'VX#S'VX#W'VX#`'VX#a'VX#p#qX#s'VX#z'VX#{'VX#|'VX#}'VX$O'VX$Q'VX$R'VX$S'VX$T'VX$U'VX$V'VX$W'VX$z'VX~O!q)tO!x'VX!}'VX~P!5xO!x#iX!}#iX~P>UO!})vO!x'SX~O!x)xO~O$z#dOT#yiz#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi$W#yi&s#yi!x#yi!}#yi#O#yi#X#yi!n#yi!q#yiV#yi#u#yi#w#yi~P!'WOz#RO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi&s#yi!x#yi!n#yi~P!'WOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi&s#yi!x#yi!n#yi~P!'WOT#TOz#RO!b#VO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dO!S#yi!m#yi&s#yi!x#yi!n#yi~P!'WOT#TOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dO!S#yi!b#yi!m#yi&s#yi!x#yi!n#yi~P!'WOz#RO#S#QO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#z#yi#{#yi&s#yi!x#yi!n#yi~P!'WOz#RO#S#QO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#z#yi#{#yi#|#yi&s#yi!x#yi!n#yi~P!'WOz#RO#S#QO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#z#yi#{#yi#|#yi#}#yi&s#yi!x#yi!n#yi~P!'WOz#RO#S#QO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#z#yi#{#yi#|#yi#}#yi$O#yi&s#yi!x#yi!n#yi~P!'WOz#RO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi&s#yi!x#yi!n#yi~P!'WOz#RO$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi&s#yi!x#yi!n#yi~P!'WOz#RO$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi&s#yi!x#yi!n#yi~P!'WOz#RO$T#`O$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi&s#yi!x#yi!n#yi~P!'WOz#RO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi&s#yi!x#yi!n#yi~P!'WOz#RO$S#_O$T#`O$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi&s#yi!x#yi!n#yi~P!'WOz#RO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi&s#yi!x#yi!n#yi~P!'WO_)yO~P9yO!x)|O~O#S*PO~P9yOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}#Ta#X#Ta#O#Ta!m#Ta&s#Ta!x#Ta!n#TaV#Ta!q#Ta~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}'Pa#X'Pa#O'Pa!m'Pa&s'Pa!x'Pa!n'PaV'Pa!q'Pa~P!'WO#S#oO#U#nO!}&WX#X&WX~P9yO!}&wO#X'Oa~O#X*SO~OT6iOz6gO!S6jO!b6kO!v8sO!}*UO#O*TO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!x'QX~P!'WO!}*UO!x'QX~O!x*WO~O!m#oi!o#oi#S#oi#p#qX&s#oi!x#oi#O#oiw#oi~OT#oiz#oi!S#oi!b#oi!v#oi!y#oi#W#oi#`#oi#a#oi#s#oi#z#oi#{#oi#|#oi#}#oi$O#oi$Q#oi$R#oi$S#oi$T#oi$U#oi$V#oi$W#oi$z#oi!}#oi#X#oi!n#oiV#oi!q#oi#u#oi#w#oi~P#*zO#l'SO!x#ka#S#ka#U#ka#b#ka!o#ka#O#kaw#ka!m#ka&s#ka~OPgOQ|OU^OW}O[4OOo5xOs#hOx3zOy3zO}`O!O]O!Q2^O!R}O!T4UO!U3|O!V3|O!Y2`O!c3xO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T4SO$]4QO$^4SO$aqO$z2_O${!OO$}}O%O}O%V|O'g{O~O#l#oa#U#oa#b#oa~PIpOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#Pi!S#Pi!b#Pi!m#Pi&s#Pi!x#Pi!n#Pi~P!'WOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#vi!S#vi!b#vi!m#vi&s#vi!x#vi!n#vi~P!'WO!m#xi&s#xi!x#xi!n#xi~PCqO!s#gO#peO!}&^X#X&^X~O!}'^O#X'Za~O!s'uO~Ow(SO!o)WO!q*fO~O!s*jO~O#S*lO#U*mO#b*kO#l'SO~O#S*lO#U*mO#b*kO$drO~P0aO#u*oO!x$cX!}$cX~O#U*mO#b*kO~O#b*pO~O#b*rO~P0aO!}*sO!x'XX~O!x*uO~O!y*wO~O!^*{O!oXO!q*zO~O!q*}O!o'ci!m'ci&s'ci~O!q+QO#O+PO~O#b$nO!m&eX!}&eX&s&eX~O!}'{O!m'ba&s'ba~OT$kiz$ki!S$ki!b$ki!m$ki!o$ki!v$ki!y$ki#S$ki#W$ki#`$ki#a$ki#s$ki#u#fa#w#fa#z$ki#{$ki#|$ki#}$ki$O$ki$Q$ki$R$ki$S$ki$T$ki$U$ki$V$ki$W$ki$z$ki&s$ki!x$ki!}$ki#O$ki#X$ki!n$ki!q$kiV$ki~OS+^O]+aOm+^Os$aO!^+dO!_+^O!`+^O!n+hO#b$nO$aqO$drO~P0aO!s+lO~O#W+nO#`+mO#a+mO~O!s+pO#b+pO$}+pO%T+oO~O!n+qO~PCqOc%XXd%XXh%XXj%XXf%XXg%XXe%XX~PhOc+uOd+sOP%WiQ%WiS%WiU%WiW%WiX%Wi[%Wi]%Wi^%Wi`%Wia%Wib%Wik%Wim%Wio%Wip%Wiq%Wis%Wit%Wiu%Wiv%Wix%Wiy%Wi|%Wi}%Wi!O%Wi!P%Wi!Q%Wi!R%Wi!T%Wi!U%Wi!V%Wi!W%Wi!X%Wi!Y%Wi!Z%Wi![%Wi!]%Wi!^%Wi!`%Wi!a%Wi!c%Wi!m%Wi!o%Wi!s%Wi!y%Wi#W%Wi#b%Wi#d%Wi#e%Wi#p%Wi$T%Wi$]%Wi$^%Wi$a%Wi$d%Wi$l%Wi$z%Wi${%Wi$}%Wi%O%Wi%V%Wi&p%Wi'g%Wi&t%Wi!n%Wih%Wij%Wif%Wig%WiY%Wi_%Wii%Wie%Wi~Oc+yOd+vOh+xO~OY+zO_+{O!n,OO~OY+zO_+{Oi%^X~Oi,QO~Oj,RO~O!m,TO~P9yO!m,VO~Of,WO~OT6iOV,XOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO~P!'WOg,YO~O!y,ZO~OZ(wOn(xOP%liQ%liS%liU%liW%liX%li[%li]%li^%li`%lia%lib%lik%lim%lio%lip%liq%lis%lit%liu%liv%lix%liy%li|%li}%li!O%li!P%li!Q%li!R%li!T%li!U%li!V%li!W%li!X%li!Y%li!Z%li![%li!]%li!^%li!`%li!a%li!c%li!m%li!o%li!s%li!y%li#W%li#b%li#d%li#e%li#p%li$T%li$]%li$^%li$a%li$d%li$l%li$z%li${%li$}%li%O%li%V%li&p%li'g%li&t%li!n%lic%lid%lih%lij%lif%lig%liY%li_%lii%lie%li~O#u,_O~O!}({O!m%da&s%da~O!x,bO~O!s%dO!m&dX!}&dX&s&dX~O!})QO!m'`a&s'`a~OS+^OY,iOm+^Os$aO!^+dO!_+^O!`+^O$aqO$drO~O!n,lO~P#JwO!o)WO~O!o%pO!s'RO~O!s#gO#peO!m&nX!}&nX&s&nX~O!})_O!m'ka&s'ka~O!s,rO~OV,sO!n%|X!}%|X~O!},uO!n'lX~O!n,wO~O!m&UX!}&UX&s&UX#O&UX~P9yO!})iO!m&|a&s&|a#O&|a~Oz#RO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT!uq!S!uq!b!uq!m!uq!v!uq&s!uq!x!uq!n!uq~P!'WO!n,|O~PCqOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#ia!}#ia~P!'WO!x&YX!}&YX~PAOO!})vO!x'Sa~O#O-QO~O!}-RO!n&{X~O!n-TO~O!x-UO~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}#Vi#X#Vi~P!'WO!x&XX!}&XX~P9yO!}*UO!x'Qa~O!x-[O~OT#jqz#jq!S#jq!b#jq!m#jq!v#jq#S#jq#u#jq#w#jq#z#jq#{#jq#|#jq#}#jq$O#jq$Q#jq$R#jq$S#jq$T#jq$U#jq$V#jq$W#jq$z#jq&s#jq!x#jq!}#jq#O#jq#X#jq!n#jq!q#jqV#jq~P!'WO#l#oi#U#oi#b#oi~P#*zOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#Pq!S#Pq!b#Pq!m#Pq&s#Pq!x#Pq!n#Pq~P!'WO#u-dO!x$ca!}$ca~O#U-fO#b-eO~O#b-gO~O#S-hO#U-fO#b-eO#l'SO~O#b-jO#l'SO~O#u-kO!x$ha!}$ha~O!`'mO#S'kO#U'lO#b'jO$drO!x&_X!}&_X~P0aO!}*sO!x'Xa~O!oXO#l'SO~O#S-pO#b-oO!x'[P~O!oXO!q-rO~O!q-uO!o'cq!m'cq&s'cq~O!^-wO!oXO!q-rO~O!q-{O#O-zO~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m$si!}$si&s$si~P!'WO!m$jq&s$jq!x$jq!n$jq~PCqO#O-zO#l'SO~O!}-|Ow']X!o']X!m']X&s']X~O#b$nO#l'SO~OS+^O].ROm+^Os$aO!_+^O!`+^O#b$nO$aqO$drO~P0aOS+^O].ROm+^Os$aO!_+^O!`+^O#b$nO$aqO~P0aOS+^O]+aOm+^Os$aO!^+dO!_+^O!`+^O!n.ZO#b$nO$aqO$drO~P0aO!s.^O~O!s._O#b._O$}._O%T+oO~O$}.`O~O#X.aO~Oc%Xad%Xah%Xaj%Xaf%Xag%Xae%Xa~PhOc.dOd+sOP%WqQ%WqS%WqU%WqW%WqX%Wq[%Wq]%Wq^%Wq`%Wqa%Wqb%Wqk%Wqm%Wqo%Wqp%Wqq%Wqs%Wqt%Wqu%Wqv%Wqx%Wqy%Wq|%Wq}%Wq!O%Wq!P%Wq!Q%Wq!R%Wq!T%Wq!U%Wq!V%Wq!W%Wq!X%Wq!Y%Wq!Z%Wq![%Wq!]%Wq!^%Wq!`%Wq!a%Wq!c%Wq!m%Wq!o%Wq!s%Wq!y%Wq#W%Wq#b%Wq#d%Wq#e%Wq#p%Wq$T%Wq$]%Wq$^%Wq$a%Wq$d%Wq$l%Wq$z%Wq${%Wq$}%Wq%O%Wq%V%Wq&p%Wq'g%Wq&t%Wq!n%Wqh%Wqj%Wqf%Wqg%WqY%Wq_%Wqi%Wqe%Wq~Oc.iOd+vOh.hO~O!q(`O~OP6]OQ|OU^OW}O[:fOo>ROs#hOx:dOy:dO}`O!O]O!Q:kO!R}O!T:jO!U:eO!V:eO!Y:oO!c8gO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T:hO$]:gO$^:hO$aqO$z:mO${!OO$}}O%O}O%V|O'g{O~O!m.lO!q.lO~OY+zO_+{O!n.nO~OY+zO_+{Oi%^a~O!x.rO~P>UO!m.tO~O!m.tO~P9yOQ|OW}O!R}O$}}O%O}O%V|O'g{O~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m&ka!}&ka&s&ka~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m$qi!}$qi&s$qi~P!'WOS+^Om+^Os$aO!_+^O!`+^O$aqO$drO~OY/PO~P$?VOS+^Om+^Os$aO!_+^O!`+^O$aqO~O!s/QO~O!n/SO~P#JwOw(SO!o)WO#l'SO~OV/VO!m&na!}&na&s&na~O!})_O!m'ki&s'ki~O!s/XO~OV/YO!n%|a!}%|a~O]/[Os/[O!s#gO#peO!n&oX!}&oX~O!},uO!n'la~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m&Ua!}&Ua&s&Ua#O&Ua~P!'WOz#RO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT!uy!S!uy!b!uy!m!uy!v!uy&s!uy!x!uy!n!uy~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#hi!}#hi~P!'WO_)yO!n&VX!}&VX~P9yO!}-RO!n&{a~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}#Vq#X#Vq~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#[i!}#[i~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#O/cO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!x&Xa!}&Xa~P!'WO#u/iO!x$ci!}$ci~O#b/jO~O#U/lO#b/kO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$ci!}$ci~P!'WO#u/mO!x$hi!}$hi~O!}/oO!x'[X~O#b/qO~O!x/rO~O!oXO!q/uO~O#l'SO!o'cy!m'cy&s'cy~O!m$jy&s$jy!x$jy!n$jy~PCqO#O/xO#l'SO~O!s#gO#peOw&aX!o&aX!}&aX!m&aX&s&aX~O!}-|Ow']a!o']a!m']a&s']a~OU$PO]0QO!R$PO!s$OO!v#}O#b$nO#p2XO~P$?uO!m#cO!o0VO&s#cO~O#X0YO~Oh0_O~OT:tOz:pO!S:vO!b:xO!m0`O!q0`O!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO~P!'WOY%]a_%]a!n%]ai%]a~PhO!x0bO~O!x0bO~P>UO!m0dO~OT6iOz6gO!S6jO!b6kO!v8sO!x0fO#O0eO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO~P!'WO!x0fO~O!x0gO#b0hO#l'SO~O!x0iO~O!s0jO~O!m#cO#u0lO&s#cO~O!s0mO~O!})_O!m'kq&s'kq~O!s0nO~OV0oO!n%}X!}%}X~OT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!n!|i!}!|i~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$cq!}$cq~P!'WO#u0vO!x$cq!}$cq~O#b0wO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$hq!}$hq~P!'WO#S0zO#b0yO!x&`X!}&`X~O!}/oO!x'[a~O#l'SO!o'c!R!m'c!R&s'c!R~O!oXO!q1PO~O!m$j!R&s$j!R!x$j!R!n$j!R~PCqO#O1RO#l'SO~OP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!n1^O!s1YO!y[O#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lOh1_O~OY%[i_%[i!n%[ii%[i~PhOY%]i_%]i!n%]ii%]i~PhO!x1bO~O!x1bO~P>UO!x1eO~O!m#cO#u1iO&s#cO~O$}1jO%V1jO~O!s1kO~OV1lO!n%}a!}%}a~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#]i!}#]i~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$cy!}$cy~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$hy!}$hy~P!'WO#b1nO~O!}/oO!x'[i~O!m$j!Z&s$j!Z!x$j!Z!n$j!Z~PCqOT:uOz:qO!S:wO!b:yO!v=nO#S#QO#z:sO#{:{O#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dO~P!'WOV1uO{1tO~P!5xOV1uO{1tOT&}Xz&}X!S&}X!b&}X!o&}X!v&}X!y&}X#S&}X#W&}X#`&}X#a&}X#s&}X#u&}X#w&}X#z&}X#{&}X#|&}X#}&}X$O&}X$Q&}X$R&}X$S&}X$T&}X$U&}X$V&}X$W&}X$z&}X~OP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!n1xO!s1YO!y[O#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lOY%[q_%[q!n%[qi%[q~PhO!x1zO~O!x%gi~PCqOe1{O~O$}1|O%V1|O~O!s2OO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$c!R!}$c!R~P!'WO!m$j!c&s$j!c!x$j!c!n$j!c~PCqO!s2QO~O!`2SO!s2RO~O!s2VO!m$xi&s$xi~O!s'WO~O!s*]O~OT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$ka#u$ka#w$ka&s$ka!x$ka!n$ka!q$ka#X$ka!}$ka~P!'WO#S2]O~P*kO$l$tO~P#.YOT6iOz6gO!S6jO!b6kO!v8sO#O2[O#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m'PX&s'PX!x'PX!n'PX~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#O3uO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}'PX#X'PX#u'PX#w'PX!m'PX&s'PX!x'PX!n'PXV'PX!q'PX~P!'WO#S3dO~P#.YOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$Xa#u$Xa#w$Xa&s$Xa!x$Xa!n$Xa!q$Xa#X$Xa!}$Xa~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$Ya#u$Ya#w$Ya&s$Ya!x$Ya!n$Ya!q$Ya#X$Ya!}$Ya~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$Za#u$Za#w$Za&s$Za!x$Za!n$Za!q$Za#X$Za!}$Za~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$[a#u$[a#w$[a&s$[a!x$[a!n$[a!q$[a#X$[a!}$[a~P!'WOz2aO#u$[a#w$[a!q$[a#X$[a!}$[a~PNyOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$_a#u$_a#w$_a&s$_a!x$_a!n$_a!q$_a#X$_a!}$_a~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$|a#u$|a#w$|a&s$|a!x$|a!n$|a!q$|a#X$|a!}$|a~P!'WOz2aO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi#u#yi#w#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOT2cOz2aO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!S#yi!m#yi#u#yi#w#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOT2cOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!S#yi!b#yi!m#yi#u#yi#w#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO#S#QO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi#z#yi#{#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO#S#QO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi#z#yi#{#yi#|#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO#S#QO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO#S#QO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$T2nO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$S2mO$T2nO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m#Ta#u#Ta#w#Ta&s#Ta!x#Ta!n#Ta!q#Ta#X#Ta!}#Ta~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m'Pa#u'Pa#w'Pa&s'Pa!x'Pa!n'Pa!q'Pa#X'Pa!}'Pa~P!'WOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#Pi!S#Pi!b#Pi!m#Pi#u#Pi#w#Pi&s#Pi!x#Pi!n#Pi!q#Pi#X#Pi!}#Pi~P!'WOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#vi!S#vi!b#vi!m#vi#u#vi#w#vi&s#vi!x#vi!n#vi!q#vi#X#vi!}#vi~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m#xi#u#xi#w#xi&s#xi!x#xi!n#xi!q#xi#X#xi!}#xi~P!'WOz2aO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT!uq!S!uq!b!uq!m!uq!v!uq#u!uq#w!uq&s!uq!x!uq!n!uq!q!uq#X!uq!}!uq~P!'WOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#Pq!S#Pq!b#Pq!m#Pq#u#Pq#w#Pq&s#Pq!x#Pq!n#Pq!q#Pq#X#Pq!}#Pq~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$jq#u$jq#w$jq&s$jq!x$jq!n$jq!q$jq#X$jq!}$jq~P!'WOz2aO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT!uy!S!uy!b!uy!m!uy!v!uy#u!uy#w!uy&s!uy!x!uy!n!uy!q!uy#X!uy!}!uy~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$jy#u$jy#w$jy&s$jy!x$jy!n$jy!q$jy#X$jy!}$jy~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$j!R#u$j!R#w$j!R&s$j!R!x$j!R!n$j!R!q$j!R#X$j!R!}$j!R~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$j!Z#u$j!Z#w$j!Z&s$j!Z!x$j!Z!n$j!Z!q$j!Z#X$j!Z!}$j!Z~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$j!c#u$j!c#w$j!c&s$j!c!x$j!c!n$j!c!q$j!c#X$j!c!}$j!c~P!'WOP6]OU^O[4POo8^Os#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#S3vO#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OO~P$;lOP6]OU^O[4POo8^Os#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OO~P$;lO#u2uO#w2vO!q&zX#X&zX!}&zX~P0rOP6]OU^O[4POo8^Or2wOs#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#S2tO#U2sO#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OOT#xXz#xX!S#xX!b#xX!m#xX!o#xX!v#xX#`#xX#a#xX#s#xX#u#xX#w#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX&s#xX!x#xX!n#xX!q#xX#X#xX!}#xX~P$;lOP6]OU^O[4POo8^Or4xOs#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#S4uO#U4tO#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OOT#xXz#xX!S#xX!b#xX!o#xX!v#xX!}#xX#O#xX#X#xX#`#xX#a#xX#s#xX#u#xX#w#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX!m#xX&s#xX!x#xX!n#xXV#xX!q#xX~P$;lO!q3PO~P>UO!q5}O#O3gO~OT8vOz8tO!S8wO!b8xO!q3hO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WO!q6OO#O3kO~O!q6PO#O3oO~O#O3oO#l'SO~O#O3pO#l'SO~O#O3sO#l'SO~OP6]OU^O[4POo8^Os#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$l$tO$z4bO${!OO~P$;lOP6]OU^O[4POo8^Os#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#S5eO#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OO~P$;lOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$Xa#O$Xa#X$Xa#u$Xa#w$Xa!m$Xa&s$Xa!x$Xa!n$XaV$Xa!q$Xa~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$Ya#O$Ya#X$Ya#u$Ya#w$Ya!m$Ya&s$Ya!x$Ya!n$YaV$Ya!q$Ya~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$Za#O$Za#X$Za#u$Za#w$Za!m$Za&s$Za!x$Za!n$ZaV$Za!q$Za~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$[a#O$[a#X$[a#u$[a#w$[a!m$[a&s$[a!x$[a!n$[aV$[a!q$[a~P!'WOz4dO!}$[a#O$[a#X$[a#u$[a#w$[aV$[a!q$[a~PNyOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$_a#O$_a#X$_a#u$_a#w$_a!m$_a&s$_a!x$_a!n$_aV$_a!q$_a~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$|a#O$|a#X$|a#u$|a#w$|a!m$|a&s$|a!x$|a!n$|aV$|a!q$|a~P!'WOz4dO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!}#yi#O#yi#X#yi#u#yi#w#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT4fOz4dO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!S#yi!}#yi#O#yi#X#yi#u#yi#w#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT4fOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!S#yi!b#yi!}#yi#O#yi#X#yi#u#yi#w#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO#S#QO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi#z#yi#{#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO#S#QO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO#S#QO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO#S#QO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$T4qO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$S4pO$T4qO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}#Ta#O#Ta#X#Ta#u#Ta#w#Ta!m#Ta&s#Ta!x#Ta!n#TaV#Ta!q#Ta~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}'Pa#O'Pa#X'Pa#u'Pa#w'Pa!m'Pa&s'Pa!x'Pa!n'PaV'Pa!q'Pa~P!'WOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#Pi!S#Pi!b#Pi!}#Pi#O#Pi#X#Pi#u#Pi#w#Pi!m#Pi&s#Pi!x#Pi!n#PiV#Pi!q#Pi~P!'WOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#vi!S#vi!b#vi!}#vi#O#vi#X#vi#u#vi#w#vi!m#vi&s#vi!x#vi!n#viV#vi!q#vi~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}#xi#O#xi#X#xi#u#xi#w#xi!m#xi&s#xi!x#xi!n#xiV#xi!q#xi~P!'WOz4dO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT!uq!S!uq!b!uq!v!uq!}!uq#O!uq#X!uq#u!uq#w!uq!m!uq&s!uq!x!uq!n!uqV!uq!q!uq~P!'WOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#Pq!S#Pq!b#Pq!}#Pq#O#Pq#X#Pq#u#Pq#w#Pq!m#Pq&s#Pq!x#Pq!n#PqV#Pq!q#Pq~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$jq#O$jq#X$jq#u$jq#w$jq!m$jq&s$jq!x$jq!n$jqV$jq!q$jq~P!'WOz4dO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT!uy!S!uy!b!uy!v!uy!}!uy#O!uy#X!uy#u!uy#w!uy!m!uy&s!uy!x!uy!n!uyV!uy!q!uy~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$jy#O$jy#X$jy#u$jy#w$jy!m$jy&s$jy!x$jy!n$jyV$jy!q$jy~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$j!R#O$j!R#X$j!R#u$j!R#w$j!R!m$j!R&s$j!R!x$j!R!n$j!RV$j!R!q$j!R~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$j!Z#O$j!Z#X$j!Z#u$j!Z#w$j!Z!m$j!Z&s$j!Z!x$j!Z!n$j!ZV$j!Z!q$j!Z~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$j!c#O$j!c#X$j!c#u$j!c#w$j!c!m$j!c&s$j!c!x$j!c!n$j!cV$j!c!q$j!c~P!'WO#S5wO~P#.YO!y$hO#S5{O~O!x4ZO#l'SO~O!y$hO#S5|O~OT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$ka#O$ka#X$ka#u$ka#w$ka!m$ka&s$ka!x$ka!n$kaV$ka!q$ka~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#O5vO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!m'PX#u'PX#w'PX&s'PX!x'PX!n'PX!q'PX#X'PX!}'PX~P!'WO#u4vO#w4wO!}&zX#O&zX#X&zXV&zX!q&zX~P0rO!q5QO~P>UO!q8bO#O5hO~OT8vOz8tO!S8wO!b8xO!q5iO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WO!q8cO#O5lO~O!q8dO#O5pO~O#O5pO#l'SO~O#O5qO#l'SO~O#O5tO#l'SO~O$l$tO~P9yOo5zOs$lO~O#S7oO~P9yOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$Xa#O$Xa#X$Xa!m$Xa&s$Xa!x$Xa!n$XaV$Xa!q$Xa~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$Ya#O$Ya#X$Ya!m$Ya&s$Ya!x$Ya!n$YaV$Ya!q$Ya~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$Za#O$Za#X$Za!m$Za&s$Za!x$Za!n$ZaV$Za!q$Za~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$[a#O$[a#X$[a!m$[a&s$[a!x$[a!n$[aV$[a!q$[a~P!'WOz6gO!}$[a#O$[a#X$[aV$[a!q$[a~PNyOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$_a#O$_a#X$_a!m$_a&s$_a!x$_a!n$_aV$_a!q$_a~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$ka#O$ka#X$ka!m$ka&s$ka!x$ka!n$kaV$ka!q$ka~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$|a#O$|a#X$|a!m$|a&s$|a!x$|a!n$|aV$|a!q$|a~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO!}7sO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x'jX~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO!}7uO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x&|X~P!'WOz6gO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!}#yi#O#yi#X#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT6iOz6gO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!S#yi!}#yi#O#yi#X#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT6iOz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!S#yi!b#yi!}#yi#O#yi#X#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO#S#QO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#z#yi#{#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO#S#QO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#z#yi#{#yi#|#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO#S#QO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#z#yi#{#yi#|#yi#}#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO#S#QO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$T6tO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$S6sO$T6tO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WO#S7zO~P>UO!m#Ta&s#Ta!x#Ta!n#Ta~PCqO!m'Pa&s'Pa!x'Pa!n'Pa~PCqO#S;dO#U;cO!x&WX!}&WX~P9yO!}7lO!x'Oa~Oz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#Pi!S#Pi!b#Pi!}#Pi#O#Pi#X#Pi!m#Pi&s#Pi!x#Pi!n#PiV#Pi!q#Pi~P!'WOz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#vi!S#vi!b#vi!}#vi#O#vi#X#vi!m#vi&s#vi!x#vi!n#viV#vi!q#vi~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}#xi#O#xi#X#xi!m#xi&s#xi!x#xi!n#xiV#xi!q#xi~P!'WO!}7sO!x%da~O!x&UX!}&UX~P>UO!}7uO!x&|a~Oz6gO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT!uq!S!uq!b!uq!v!uq!}!uq#O!uq#X!uq!m!uq&s!uq!x!uq!n!uqV!uq!q!uq~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#Vi!}#Vi~P!'WOz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#Pq!S#Pq!b#Pq!}#Pq#O#Pq#X#Pq!m#Pq&s#Pq!x#Pq!n#PqV#Pq!q#Pq~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$jq#O$jq#X$jq!m$jq&s$jq!x$jq!n$jqV$jq!q$jq~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x&ka!}&ka~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x&Ua!}&Ua~P!'WOz6gO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT!uy!S!uy!b!uy!v!uy!}!uy#O!uy#X!uy!m!uy&s!uy!x!uy!n!uyV!uy!q!uy~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#Vq!}#Vq~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$jy#O$jy#X$jy!m$jy&s$jy!x$jy!n$jyV$jy!q$jy~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$j!R#O$j!R#X$j!R!m$j!R&s$j!R!x$j!R!n$j!RV$j!R!q$j!R~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$j!Z#O$j!Z#X$j!Z!m$j!Z&s$j!Z!x$j!Z!n$j!ZV$j!Z!q$j!Z~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$j!c#O$j!c#X$j!c!m$j!c&s$j!c!x$j!c!n$j!cV$j!c!q$j!c~P!'WO#S8[O~P9yO#O8ZO!m'PX&s'PX!x'PX!n'PXV'PX!q'PX~PGSO!y$hO#S8`O~O!y$hO#S8aO~O#u6zO#w6{O!}&zX#O&zX#X&zXV&zX!q&zX~P0rOr6|O#S#oO#U#nO!}#xX#O#xX#X#xXV#xX!q#xX~P2yOr;iO#S9XO#U9VOT#xXz#xX!S#xX!b#xX!m#xX!o#xX!q#xX!v#xX#`#xX#a#xX#s#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX!n#xX!}#xX~P9yOr9WO#S9WO#U9WOT#xXz#xX!S#xX!b#xX!o#xX!v#xX#`#xX#a#xX#s#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX~P9yOr9]O#S;dO#U;cOT#xXz#xX!S#xX!b#xX!o#xX!q#xX!v#xX#`#xX#a#xX#s#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX#X#xX!x#xX!}#xX~P9yO$l$tO~P>UO!q7XO~P>UOT6iOz6gO!S6jO!b6kO!v8sO#O7iO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!x'PX!}'PX~P!'WOP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lO!}7lO!x'OX~O#S9yO~P>UOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$Xa#X$Xa!x$Xa!}$Xa~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$Ya#X$Ya!x$Ya!}$Ya~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$Za#X$Za!x$Za!}$Za~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$[a#X$[a!x$[a!}$[a~P!'WOz8tO$z#dOT$[a!S$[a!b$[a!q$[a!v$[a#S$[a#z$[a#{$[a#|$[a#}$[a$O$[a$Q$[a$R$[a$S$[a$T$[a$U$[a$V$[a$W$[a#X$[a!x$[a!}$[a~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$_a#X$_a!x$_a!}$_a~P!'WO!q=dO#O7rO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$ka#X$ka!x$ka!}$ka~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$|a#X$|a!x$|a!}$|a~P!'WOT8vOz8tO!S8wO!b8xO!q7wO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WOz8tO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#X#yi!x#yi!}#yi~P!'WOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi#X#yi!x#yi!}#yi~P!'WOT8vOz8tO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!S#yi!q#yi#X#yi!x#yi!}#yi~P!'WOT8vOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!S#yi!b#yi!q#yi#X#yi!x#yi!}#yi~P!'WOz8tO#S#QO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#z#yi#{#yi#X#yi!x#yi!}#yi~P!'WOz8tO#S#QO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#z#yi#{#yi#|#yi#X#yi!x#yi!}#yi~P!'WOz8tO#S#QO$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#z#yi#{#yi#|#yi#}#yi#X#yi!x#yi!}#yi~P!'WOz8tO#S#QO$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#z#yi#{#yi#|#yi#}#yi$O#yi#X#yi!x#yi!}#yi~P!'WOz8tO$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi#X#yi!x#yi!}#yi~P!'WOz8tO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi#X#yi!x#yi!}#yi~P!'WOz8tO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi#X#yi!x#yi!}#yi~P!'WOz8tO$T9RO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi#X#yi!x#yi!}#yi~P!'WOz8tO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi#X#yi!x#yi!}#yi~P!'WOz8tO$S9QO$T9RO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi#X#yi!x#yi!}#yi~P!'WOz8tO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi#X#yi!x#yi!}#yi~P!'WOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#Pi!S#Pi!b#Pi!q#Pi#X#Pi!x#Pi!}#Pi~P!'WOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#vi!S#vi!b#vi!q#vi#X#vi!x#vi!}#vi~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q#xi#X#xi!x#xi!}#xi~P!'WO!q=eO#O7|O~Oz8tO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT!uq!S!uq!b!uq!q!uq!v!uq#X!uq!x!uq!}!uq~P!'WOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#Pq!S#Pq!b#Pq!q#Pq#X#Pq!x#Pq!}#Pq~P!'WO!q=iO#O8TO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$jq#X$jq!x$jq!}$jq~P!'WO#O8TO#l'SO~Oz8tO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT!uy!S!uy!b!uy!q!uy!v!uy#X!uy!x!uy!}!uy~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$jy#X$jy!x$jy!}$jy~P!'WO#O8UO#l'SO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$j!R#X$j!R!x$j!R!}$j!R~P!'WO#O8XO#l'SO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$j!Z#X$j!Z!x$j!Z!}$j!Z~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$j!c#X$j!c!x$j!c!}$j!c~P!'WO#S:bO~P>UO#O:aO!q'PX!x'PX~PGSO$l$tO~P$8YOP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$l$tO$z:nO${!OO~P$;lOo8_Os$lO~O#SSOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!s#gO!y[O#SSOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!s#gO!y[O#S=UO#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lOT6iOz6gO!S6jO!b6kO!v8sO#O=SO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#O=RO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m'PX!q'PX!n'PX!}'PX~P!'WOT&zXz&zX!S&zX!b&zX!o&zX!q&zX!v&zX!y&zX#S&zX#W&zX#`&zX#a&zX#s&zX#z&zX#{&zX#|&zX#}&zX$O&zX$Q&zX$R&zX$S&zX$T&zX$U&zX$V&zX$W&zX$z&zX!}&zX~O#u9ZO#w9[O#X&zX!x&zX~P.8oO!y$hO#S=^O~O!q9hO~P>UO!y$hO#S=cO~O!q>OO#O9}O~OT8vOz8tO!S8wO!b8xO!q:OO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m#Ta!q#Ta!n#Ta!}#Ta~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m'Pa!q'Pa!n'Pa!}'Pa~P!'WO!q>PO#O:RO~O!q>QO#O:YO~O#O:YO#l'SO~O#O:ZO#l'SO~O#O:_O#l'SO~O#u;eO#w;gO!m&zX!n&zX~P.8oO#u;fO#w;hOT&zXz&zX!S&zX!b&zX!o&zX!v&zX!y&zX#S&zX#W&zX#`&zX#a&zX#s&zX#z&zX#{&zX#|&zX#}&zX$O&zX$Q&zX$R&zX$S&zX$T&zX$U&zX$V&zX$W&zX$z&zX~O!q;tO~P>UO!q;uO~P>UO!q>XO#OYO#O9WO~OT8vOz8tO!S8wO!b8xO!qZO#O[O#O<{O~O#O<{O#l'SO~O#O9WO#l'SO~O#O<|O#l'SO~O#O=PO#l'SO~O!y$hO#S=|O~Oo=[Os$lO~O!y$hO#S=}O~O!y$hO#S>UO~O!y$hO#S>VO~O!y$hO#S>WO~Oo={Os$lO~Oo>TOs$lO~Oo>SOs$lO~O%O$U$}$d!d$V#b%V#e'g!s#d~",goto:"%&y'mPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP'nP'uPP'{(OPPP(hP(OP(O*ZP*ZPP2W:j:mPP*Z:sBpPBsPBsPP:sCSCVCZ:s:sPPPC^PP:sK^!$S!$S:s!$WP!$W!$W!%UP!.]!7pP!?oP*ZP*Z*ZPPPPP!?rPPPPPPP*Z*Z*Z*ZPP*Z*ZP!E]!GRP!GV!Gy!GR!GR!HP*Z*ZP!HY!Hl!Ib!J`!Jd!J`!Jo!J}!J}!KV!KY!KY*ZPP*ZPP!K^#%[#%[#%`P#%fP(O#%j(O#&S#&V#&V#&](O#&`(O(O#&f#&i(O#&r#&u(O(O(O(O(O#&x(O(O(O(O(O(O(O(O(O#&{!KR(O(O#'_#'o#'r(O(OP#'u#'|#(S#(o#(y#)P#)Z#)b#)h#*d#4X#5T#5Z#5a#5k#5q#5w#6]#6c#6i#6o#6u#6{#7R#7]#7g#7m#7s#7}PPPPPPPP#8T#8X#8}#NO#NR#N]$(f$(r$)X$)_$)b$)e$)k$,X$5v$>_$>b$>h$>k$>n$>w$>{$?X$?k$Bk$CO$C{$K{PP%%y%%}%&Z%&p%&vQ!nQT!qV!rQUOR%x!mRVO}!hPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1a|!hPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1aQ%^!ZQ%g!aQ%l!eQ'd$dQ'q$iQ)[%kQ*y'tQ,](xU-n*v*x+OQ.W+cQ.{,[S/t-s-tQ0T.SS0}/s/wQ1V0RQ1o1OR2P1p0u!OPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;uO>P>Q>X>Y>Z>[3ZfPVX[_bgjklmnoprxyz!S!W!X!Y!]!e!f!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t#}$R$S$U$h$y$}%P%R%S%T%U%c%p%r%}&S&W&p&s&t&w'O'S'U'Y'^'i'm'r'z(O(P(R(S(T(`(l({)P)Z)_)c)i)p)t)v*P*T*U*f*o*s*z*}+P+Q+]+`+d+g+r+u+z,T,V,X,Z,u-Q-R-d-k-r-u-z-{-|.Q.b.d.l.t/[/c/i/m/u/x0V0`0a0d0e0i0v1P1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w5}6O6P6T6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8b8c8d8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;uO>P>Q>X>Y>Z>[3scPVX[_bdegjklmnoprxyz!S!W!X!Y!]!e!f!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t#{#}$R$S$U$h$y$}%P%R%S%T%U%c%m%n%p%r%}&S&W&p&s&t&w'O'S'U'Y'^'i'm'r'z(O(P(R(S(T(`(l({)P)Z)^)_)c)g)h)i)p)t)v*P*T*U*f*o*s*z*}+P+Q+]+`+d+g+r+u+z,T,V,X,Z,u,x-Q-R-d-k-r-u-z-{-|.Q.b.d.l.t/[/c/i/m/u/x0V0`0a0d0e0i0v1P1R1]1a2W2X2Y2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w5}6O6P6T6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8b8c8d8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;uO>P>Q>X>Y>Z>[0phPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0`0a0d0e0i0v1R1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;uRS=p>S>VS=s>T>UR=t>WT'n$h*s!csPVXt!S!j!r!s!w$h$}%P%S%U'i(T(`)W*s+]+g+r+u,g,k.b.d.l0`0a0i1aQ$^rR*`'^Q*x'sQ-t*{R/w-wQ(W$tQ)U%hQ)n%vQ*i'fQ+k(XR-c*jQ(V$tQ)Y%jQ)m%vQ*e'eS*h'f)nS+j(W(XS-b*i*jQ.]+kQ/T,mQ/e-`R/g-cQ(U$tQ)T%hQ)V%iQ)l%vU*g'f)m)nU+i(V(W(XQ,f)UU-a*h*i*jS.[+j+kS/f-b-cQ0X.]R0t/gT+e(T+g[%e!_$b'c+a.R0QR,d)Qb$ov(T+[+]+`+g.P.Q0PR+T'{S+e(T+gT,j)W,kR0W.XT1[0V1]0w|PVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X,_-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;uO>P>Q>X>Y>Z>[R2Y2X|tPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1aW$`t'i+],gS'i$h*sS+](T+gT,g)W,kQ'_$^R*a'_Q*t'oR-m*tQ/p-oS0{/p0|R0|/qQ-}+XR/|-}Q+g(TR.Y+gS+`(T+gS,h)W,kQ.Q+]W.T+`,h.Q/OR/O,gQ)R%eR,e)RQ'|$oR+U'|Q1]0VR1w1]Q${{R(^${Q+t(aR.c+tQ+w(bR.g+wQ+}(cQ,P(dT.m+},PQ(|%`S,a(|7tR7t7VQ(y%^R,^(yQ,k)WR/R,kQ)`%oS,q)`/WR/W,rQ,v)dR/^,vT!uV!rj!iPVX!j!r!s!w(`+r.l0`0a1aQ%Q!SQ(a$}W(h%P%S%U0iQ.e+uQ0Z.bR0[.d|ZPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1aQ#f[U#m_#s&wQ#wbQ$VkQ$WlQ$XmQ$YnQ$ZoQ$[pQ$sx^$uy2_4b6e8q:m:nQ$vzQ%W!WQ%Y!XQ%[!YW%`!]%R(l,VU%s!g&p-RQ%|!yQ&O!zQ&Q!{S&U!})v^&^#R2a4d6g8t:p:qQ&_#SQ&`#TQ&a#UQ&b#VQ&c#WQ&d#XQ&e#YQ&f#ZQ&g#[Q&h#]Q&i#^Q&j#_Q&k#`Q&l#aQ&m#bQ&u#nQ&v#oS&{#t'OQ'X$RQ'Z$SQ'[$UQ(]$yQ(p%TQ)q%}Q)s&SQ)u&WQ*O&tS*['U4ZQ*^'Y^*_2[3u5v8Z:a=R=SQ+S'zQ+V(OQ,`({Q,c)PQ,y)iQ,{)pQ,})tQ-V*PQ-W*TQ-X*U^-]2]3v5w8[:b=T=UQ-i*oQ-x+PQ.k+zQ.w,XQ/`-QQ/h-dQ/n-kQ/y-zQ0r/cQ0u/iQ0x/mQ1Q/xU1X0V1]9WQ1d0eQ1m0vQ1q1RQ2Z2^Q2qjQ2r3yQ2x3zQ2y3|Q2z4OQ2{4QQ2|4SQ2}4UQ3O2`Q3Q2bQ3R2cQ3S2dQ3T2eQ3U2fQ3V2gQ3W2hQ3X2iQ3Y2jQ3Z2kQ3[2lQ3]2mQ3^2nQ3_2oQ3`2pQ3a2sQ3b2tQ3c2uQ3e2vQ3f2wQ3i3PQ3j3dQ3l3gQ3m3hQ3n3kQ3q3oQ3r3pQ3t3sQ4Y4WQ4y3{Q4z3}Q4{4PQ4|4RQ4}4TQ5O4VQ5P4cQ5R4eQ5S4fQ5T4gQ5U4hQ5V4iQ5W4jQ5X4kQ5Y4lQ5Z4mQ5[4nQ5]4oQ5^4pQ5_4qQ5`4rQ5a4sQ5b4tQ5c4uQ5d4vQ5f4wQ5g4xQ5j5QQ5k5eQ5m5hQ5n5iQ5o5lQ5r5pQ5s5qQ5u5tQ6Q4aQ6R3xQ6V6TQ6}6^Q7O6_Q7P6`Q7Q6aQ7R6bQ7S6cQ7T6dQ7U6fU7V,T.t0dQ7W%cQ7Y6hQ7Z6iQ7[6jQ7]6kQ7^6lQ7_6mQ7`6nQ7a6oQ7b6pQ7c6qQ7d6rQ7e6sQ7f6tQ7g6uQ7h6vQ7j6xQ7k6yQ7n6zQ7p6{Q7q6|Q7x7XQ7y7iQ7{7oQ7}7rQ8O7sQ8P7uQ8Q7wQ8R7zQ8S7|Q8V8TQ8W8UQ8Y8XQ8]8fU9U#k&s7lQ9^8jQ9_8kQ9`8lQ9a8mQ9b8nQ9c8oQ9e8pQ9f8rQ9g8sQ9i8uQ9j8vQ9k8wQ9l8xQ9m8yQ9n8zQ9o8{Q9p8|Q9q8}Q9r9OQ9s9PQ9t9QQ9u9RQ9v9SQ9w9TQ9x9ZQ9z9[Q9{9]Q:P9hQ:Q9yQ:T9}Q:V:OQ:W:RQ:[:YQ:^:ZQ:`:_Q:c8iQ;j:dQ;k:eQ;l:fQ;m:gQ;n:hQ;o:iQ;p:jQ;q:kQ;r:lQ;s:oQ;v:rQ;w:sQ;x:tQ;y:uQ;z:vQ;{:wQ;|:xQ;}:yQOQ=h>PQ=j>QQ=u>XQ=v>YQ=w>ZR=x>[0t!OPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;uO>P>Q>X>Y>Z>[S$]r'^Q%k!eS%o!f%rQ)b%pU+X(R(S+dQ,p)_Q,t)cQ/Z,uQ/{-|R0p/[|vPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1a#U#i[bklmnopxyz!W!X!Y!{#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b$R$S$U$y%}&S'Y(O)p+P-z/x0e1R2[2]6x6yd+^(T)W+]+`+g,g,h,k.Q/O!t6w'U2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3z3|4O4Q4S4U5v5w!x;b3u3v3x3y3{3}4P4R4T4V4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t$O=z_j!]!g#k#n#o#s#t%R%T&p&s&t&w'O'z(l({)P)i*P*U,V,X-R6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6z6{6|7X7l7o7r7w7|8T8U8X8Z8[8f8g8h8i#|>]!y!z!}%c&W)t)v*T*o,T-d-k.t/c/i/m0d0v4W6T7i7s7u7z8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9Z9[9]9h9y9}:O:R:Y:Z:_:a:b;c;d=Z=m=n!v>^+z-Q9V9X:d:e:f:g:h:j:k:m:o:p:r:t:v:x:z:|;O;Q;S;U;W;Y;[;^;`;e;g;i;t_0V1]9W:i:l:n:q:s:u:w:y:{:};P;R;T;V;X;Z;];_;a;f;h;u AssignmentExpression ArrayExpression ValueList & VariadicUnpacking ... Pair [ ] ListExpression ValueList Pair Pair SubscriptExpression MemberExpression -> ?-> VariableName DynamicVariable $ ${ CallExpression ArgList NamedArgument SpreadArgument CastExpression UnionType LogicOp OptionalType NamedType QualifiedName \\ NamespaceName ScopedExpression :: ClassMemberName AssignOp UpdateExpression UpdateOp YieldExpression BinaryExpression LogicOp LogicOp LogicOp BitOp BitOp BitOp CompareOp CompareOp BitOp ArithOp ConcatOp ArithOp ArithOp IncludeExpression RequireExpression CloneExpression UnaryExpression ControlOp LogicOp PrintIntrinsic FunctionExpression static ParamList Parameter #[ Attributes Attribute VariadicParameter PropertyParameter UseList ArrowFunction NewExpression class BaseClause ClassInterfaceClause DeclarationList ConstDeclaration VariableDeclarator PropertyDeclaration VariableDeclarator MethodDeclaration UseDeclaration UseList UseInsteadOfClause UseAsClause UpdateExpression ArithOp ShellExpression ThrowExpression Integer Float String MemberExpression SubscriptExpression UnaryExpression ArithOp Interpolation String IfStatement ColonBlock SwitchStatement Block CaseStatement DefaultStatement ColonBlock WhileStatement EmptyStatement DoStatement ForStatement ForSpec SequenceExpression ForeachStatement ForSpec Pair GotoStatement ContinueStatement BreakStatement ReturnStatement TryStatement CatchDeclarator DeclareStatement EchoStatement UnsetStatement ConstDeclaration FunctionDefinition ClassDeclaration InterfaceDeclaration TraitDeclaration EnumDeclaration EnumBody EnumCase NamespaceDefinition NamespaceUseDeclaration UseGroup UseClause UseClause GlobalDeclaration FunctionStaticDeclaration Program",maxTerm:304,nodeProps:[["group",-36,2,8,49,81,83,85,88,93,94,102,106,107,110,111,114,118,123,126,130,132,133,147,148,149,150,153,154,164,165,179,181,182,183,184,185,191,"Expression",-28,74,78,80,82,192,194,199,201,202,205,208,209,210,211,212,214,215,216,217,218,219,220,221,222,225,226,230,231,"Statement",-3,119,121,122,"Type"],["openedBy",69,"phpOpen",76,"{",86,"(",101,"#["],["closedBy",71,"phpClose",77,"}",87,")",158,"]"]],propSources:[Uy],skippedNodes:[0],repeatNodeCount:29,tokenData:"!F|_R!]OX$zXY&^YZ'sZ]$z]^&^^p$zpq&^qr)Rrs+Pst+otu2buv5evw6rwx8Vxy>]yz>yz{?g{|@}|}Bb}!OCO!O!PDh!P!QKT!Q!R!!o!R![!$q![!]!,P!]!^!-a!^!_!-}!_!`!1S!`!a!2d!a!b!3t!b!c!7^!c!d!7z!d!e!9W!e!}!7z!}#O!;^#O#P!;z#P#Q!V<%lO8VR9WV&wP%VQOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X<%lO9mQ9rV%VQOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X<%lO9mQ:^O%VQQ:aRO;'S9m;'S;=`:j;=`O9mQ:oW%VQOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X;=`<%l9m<%lO9mQ;[P;=`<%l9mR;fV&wP%VQOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRV<%l~8V~O8V~~%fR=OW&wPOY8VYZ9PZ!^8V!^!_;{!_;'S8V;'S;=`=h;=`<%l9m<%lO8VR=mW%VQOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X;=`<%l8V<%lO9mR>YP;=`<%l8VR>dV!yQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV?QV!xU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR?nY&wP$VQOY$zYZ%fZz$zz{@^{!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR@eW$WQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zRAUY$TQ&wPOY$zYZ%fZ{$z{|At|!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zRA{V$zQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRBiV!}Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_CXZ$TQ%TW&wPOY$zYZ%fZ}$z}!OAt!O!^$z!^!_%k!_!`6U!`!aCz!a;'S$z;'S;=`&W<%lO$zVDRV#`U&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVDo[&wP$UQOY$zYZ%fZ!O$z!O!PEe!P!Q$z!Q![Fs![!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zVEjX&wPOY$zYZ%fZ!O$z!O!PFV!P!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVF^V#UU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRFz_&wP%OQOY$zYZ%fZ!Q$z!Q![Fs![!^$z!^!_%k!_!g$z!g!hGy!h#R$z#R#SJc#S#X$z#X#YGy#Y;'S$z;'S;=`&W<%lO$zRHO]&wPOY$zYZ%fZ{$z{|Hw|}$z}!OHw!O!Q$z!Q![Ii![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRH|X&wPOY$zYZ%fZ!Q$z!Q![Ii![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRIpZ&wP%OQOY$zYZ%fZ!Q$z!Q![Ii![!^$z!^!_%k!_#R$z#R#SHw#S;'S$z;'S;=`&W<%lO$zRJhX&wPOY$zYZ%fZ!Q$z!Q![Fs![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVK[[&wP$VQOY$zYZ%fZz$zz{LQ{!P$z!P!Q,o!Q!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zVLVX&wPOYLQYZLrZzLQz{N_{!^LQ!^!_! s!_;'SLQ;'S;=`!!i<%lOLQVLwT&wPOzMWz{Mj{;'SMW;'S;=`NX<%lOMWUMZTOzMWz{Mj{;'SMW;'S;=`NX<%lOMWUMmVOzMWz{Mj{!PMW!P!QNS!Q;'SMW;'S;=`NX<%lOMWUNXO!eUUN[P;=`<%lMWVNdZ&wPOYLQYZLrZzLQz{N_{!PLQ!P!Q! V!Q!^LQ!^!_! s!_;'SLQ;'S;=`!!i<%lOLQV! ^V!eU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV! vZOYLQYZLrZzLQz{N_{!aLQ!a!bMW!b;'SLQ;'S;=`!!i<%l~LQ~OLQ~~%fV!!lP;=`<%lLQZ!!vm&wP$}YOY$zYZ%fZ!O$z!O!PFs!P!Q$z!Q![!$q![!^$z!^!_%k!_!d$z!d!e!&o!e!g$z!g!hGy!h!q$z!q!r!(a!r!z$z!z!{!){!{#R$z#R#S!%}#S#U$z#U#V!&o#V#X$z#X#YGy#Y#c$z#c#d!(a#d#l$z#l#m!){#m;'S$z;'S;=`&W<%lO$zZ!$xa&wP$}YOY$zYZ%fZ!O$z!O!PFs!P!Q$z!Q![!$q![!^$z!^!_%k!_!g$z!g!hGy!h#R$z#R#S!%}#S#X$z#X#YGy#Y;'S$z;'S;=`&W<%lO$zZ!&SX&wPOY$zYZ%fZ!Q$z!Q![!$q![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!&tY&wPOY$zYZ%fZ!Q$z!Q!R!'d!R!S!'d!S!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!'k[&wP$}YOY$zYZ%fZ!Q$z!Q!R!'d!R!S!'d!S!^$z!^!_%k!_#R$z#R#S!&o#S;'S$z;'S;=`&W<%lO$zZ!(fX&wPOY$zYZ%fZ!Q$z!Q!Y!)R!Y!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!)YZ&wP$}YOY$zYZ%fZ!Q$z!Q!Y!)R!Y!^$z!^!_%k!_#R$z#R#S!(a#S;'S$z;'S;=`&W<%lO$zZ!*Q]&wPOY$zYZ%fZ!Q$z!Q![!*y![!^$z!^!_%k!_!c$z!c!i!*y!i#T$z#T#Z!*y#Z;'S$z;'S;=`&W<%lO$zZ!+Q_&wP$}YOY$zYZ%fZ!Q$z!Q![!*y![!^$z!^!_%k!_!c$z!c!i!*y!i#R$z#R#S!){#S#T$z#T#Z!*y#Z;'S$z;'S;=`&W<%lO$zR!,WX!qQ&wPOY$zYZ%fZ![$z![!]!,s!]!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!,zV#sQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!-hV!mU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!.S[$RQOY$zYZ%fZ!^$z!^!_!.x!_!`!/i!`!a*c!a!b!0]!b;'S$z;'S;=`&W<%l~$z~O$z~~%fR!/PW$SQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!/pX$RQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`$z!`!a*c!a;'S$z;'S;=`&W<%lO$zP!0bR!iP!_!`!0k!r!s!0p#d#e!0pP!0pO!iPP!0sQ!j!k!0y#[#]!0yP!0|Q!r!s!0k#d#e!0kV!1ZX#uQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`)r!`!a!1v!a;'S$z;'S;=`&W<%lO$zV!1}V#OU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!2kX$RQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`!3W!`!a!.x!a;'S$z;'S;=`&W<%lO$zR!3_V$RQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!3{[!vQ&wPOY$zYZ%fZ}$z}!O!4q!O!^$z!^!_%k!_!`$z!`!a!6P!a!b!6m!b;'S$z;'S;=`&W<%lO$zV!4vX&wPOY$zYZ%fZ!^$z!^!_%k!_!`$z!`!a!5c!a;'S$z;'S;=`&W<%lO$zV!5jV#aU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!6WV!gU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!6tW#zQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!7eV$]Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!8Ra&wP!s^OY$zYZ%fZ!Q$z!Q![!7z![!^$z!^!_%k!_!c$z!c!}!7z!}#R$z#R#S!7z#S#T$z#T#o!7z#o$g$z$g&j!7z&j;'S$z;'S;=`&W<%lO$z_!9_e&wP!s^OY$zYZ%fZr$zrs!:psw$zwx8Vx!Q$z!Q![!7z![!^$z!^!_%k!_!c$z!c!}!7z!}#R$z#R#S!7z#S#T$z#T#o!7z#o$g$z$g&j!7z&j;'S$z;'S;=`&W<%lO$zR!:wV&wP'gQOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!;eV#WU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!mZ!^!=u!^!_!@u!_#O!=u#O#P!Aq#P#S!=u#S#T!B{#T;'S!=u;'S;=`!Ci<%lO!=uR!>rV&wPO#O!?X#O#P!?q#P#S!?X#S#T!@j#T;'S!?X;'S;=`!@o<%lO!?XQ!?[VO#O!?X#O#P!?q#P#S!?X#S#T!@j#T;'S!?X;'S;=`!@o<%lO!?XQ!?tRO;'S!?X;'S;=`!?};=`O!?XQ!@QWO#O!?X#O#P!?q#P#S!?X#S#T!@j#T;'S!?X;'S;=`!@o;=`<%l!?X<%lO!?XQ!@oO${QQ!@rP;=`<%l!?XR!@x]OY!=uYZ!>mZ!a!=u!a!b!?X!b#O!=u#O#P!Aq#P#S!=u#S#T!B{#T;'S!=u;'S;=`!Ci<%l~!=u~O!=u~~%fR!AvW&wPOY!=uYZ!>mZ!^!=u!^!_!@u!_;'S!=u;'S;=`!B`;=`<%l!?X<%lO!=uR!BcWO#O!?X#O#P!?q#P#S!?X#S#T!@j#T;'S!?X;'S;=`!@o;=`<%l!=u<%lO!?XR!CSV${Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!ClP;=`<%l!=uV!CvV!oU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!DfY#}Q#lS&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`#p$z#p#q!EU#q;'S$z;'S;=`&W<%lO$zR!E]V#{Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!EyV!nQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!FgV$^Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z",tokenizers:[Ry,qy,Zy,0,1,2,3,Vy],topRules:{Template:[0,72],Program:[1,232]},dynamicPrecedences:{284:1},specialized:[{term:81,get:(i,e)=>Au(i)<<1,external:Au},{term:81,get:i=>Yy[i]||-1}],tokenPrec:29354});var _y=pe.define({name:"php",parser:Eu.configure({props:[Se.add({IfStatement:We({except:/^\s*({|else\b|elseif\b|endif\b)/}),TryStatement:We({except:/^\s*({|catch\b|finally\b)/}),SwitchBody:i=>{let e=i.textAfter,t=/^\s*\}/.test(e),n=/^\s*(case|default)\b/.test(e);return i.baseIndent+(t?0:n?1:2)*i.unit},ColonBlock:i=>i.baseIndent+i.unit,"Block EnumBody DeclarationList":wr({closing:"}"}),ArrowFunction:i=>i.baseIndent+i.unit,"String BlockComment":()=>null,Statement:We({except:/^({|end(for|foreach|switch|while)\b)/})}),ke.add({"Block EnumBody DeclarationList SwitchBody ArrayExpression ValueList":zt,ColonBlock(i){return{from:i.from+1,to:i.to}},BlockComment(i){return{from:i.from+2,to:i.to-2}}})]}),languageData:{commentTokens:{block:{open:"/*",close:"*/"},line:"//"},indentOnInput:/^\s*(?:case |default:|end(?:if|for(?:each)?|switch|while)|else(?:if)?|\{|\})$/,wordChars:"$",closeBrackets:{stringPrefixes:["b","B"]}}});function Mu(i={}){let e=[],t;if(i.baseLanguage!==null)if(i.baseLanguage)t=i.baseLanguage;else{let n=vi({matchClosingTags:!1});e.push(n.support),t=n.language}return new Oe(_y.configure({wrap:t&&$i(n=>n.type.isTop?{parser:t.parser,overlay:r=>r.name=="Text"}:null),top:i.plain?"Program":"Template"}),e)}var Ay=me.deserialize({version:14,states:"%^QYQPOOO!YQQO'#CaO#RQQO'#CrOOQO'#Ct'#CtQYQPOOOOQO'#C}'#C}O#]QQO'#CzO$ZQQO'#CoOOQO'#Cz'#CzOOQO'#Cu'#CuO$lQQO,58{OOQO,58{,58{O$sQQO,59^O$sQQO,59^OOQO,59^,59^OOQO-E6r-E6rO$zQQO'#CfOOQO,58|,58|OOQO'#C|'#C|O%]QSO'#C{O%hQQO,59ZOOQO-E6s-E6sOOQO1G.g1G.gO%mQQO1G.xOOQO1G.x1G.xO%tQQO,59QO%yQSO'#CvO&bQSO,59gOOQO1G.u1G.uOOQO7+$d7+$dOOQO1G.l1G.lOOQO,59b,59bOOQO-E6t-E6t",stateData:"&{~OmOSPOS~OSPOeQOgRO~OVUOZTO[TO]TO^WO_WO`WOaWObWOtVOuWO~ORZO~PeOVUOZTO[TO]TO^WO_WO`WObWOtVOuWO~Oa[Od^O~P!aOX`ORnXVnXZnX[nX]nX^nX_nX`nXanXbnXtnXunXdnX~OVbOZTO[TO]TOsoP~ORfO~PeOdhO~PeOVbOZTO[TO]TOWoP~OrjOsoXWoX~OslO~OdmO~PeOWnO~OVbOZTO[TO]TOrjXsjXWjX~OrjOsoaWoa~Og[]a_^`bVmPZ`~",goto:"#brPPPPPswPPP!PPPPPPPPPwPPsP!S!Y!hPPP!n!v!|#TTROS]WPQY[]gRaUQSOR_SQYPQ]QUeY]gRg[QkcRpk]XPQY[]gQdVRi`ScV`Roj[WPQY[]gVbV`j",nodeNames:"\u26A0 BlockComment Template }} {{ InsertBlock Function Identifier ) ( FunctionParamList String Boolean Number ChainedIdentifier Comparison Operator CodeTag Math Array %} {% CodeBlock PlainText",maxTerm:37,nodeProps:[["openedBy",3,"{{",8,"(",20,"{%"],["closedBy",4,"}}",9,")",21,"%}"]],skippedNodes:[0,1],repeatNodeCount:3,tokenData:"#Jr~R!^OX$}XY&ZYZ&ZZ]$}]^&Z^p$}pq&Zqr'Wrs(Ysu$}uv-cvw$}wx.gxy3Wyz3nz{4U{|4r|}5Y}!O5r!O!P>u!P!Q?]!Q!R:[!R![=m![!]?y!]!^$}!^!_@a!_!`@}!`!a@a!a!c$}!c!}6}!}#OAk#O#P$}#P#QBR#Q#R$}#R#S6}#S#T$}#T#UBi#U#V!'f#V#X6}#X#Y!,h#Y#Z# Y#Z#]6}#]#^#'g#^#a6}#a#b#.T#b#c#5r#c#d#8[#d#g6}#g#h#9h#h#i#AV#i#j!.Q#j#k!@V#k#l#Co#l#o6}#o#p#Ge#p#q>u#q#r#In#r;'S$};'S;=`&O<%lO$}P%STgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}P%fWOs$}tu$}v#o$}#p;'S$};'S;=`&O<%l~$}~O$}~~&UP&RP;=`<%l$}P&ZOgP~&b[gPm~OX$}XY&ZYZ&ZZ]$}]^&Z^p$}pq&Zq#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~']VgPO!_$}!_!`'r!`#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~'yTgP_~O#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~(aXgPZ~Or(Yrs(|s#O(Y#O#P)d#P#o(Y#o#p){#p;'S(Y;'S;=`,n<%lO(Y~)TTgPZ~O#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~)iUgPO#o(Y#o#p){#p;'S(Y;'S;=`,t;=`<%l*|<%lO(Y~*Q^Z~Or(Yrs(|st*|tu(Yuv*|v#O(Y#O#P)d#P#o(Y#o#p*|#p;'S(Y;'S;=`,n<%l~(Y~O(Y~~&U~+RVZ~Or*|rs+hs#O*|#O#P+m#P;'S*|;'S;=`,h<%lO*|~+mOZ~~+pRO;'S*|;'S;=`+y;=`O*|~,OWZ~Or*|rs+hs#O*|#O#P+m#P;'S*|;'S;=`,h;=`<%l*|<%lO*|~,kP;=`<%l*|~,qP;=`<%l(Y~,yWZ~Or*|rs+hs#O*|#O#P+m#P;'S*|;'S;=`,h;=`<%l(Y<%lO*|~-jVgPb~O#o$}#o#p%c#p#q$}#q#r.P#r;'S$};'S;=`&O<%lO$}R.WTdQgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~.nXgPZ~Ow.gwx(|x#O.g#O#P/Z#P#o.g#o#p/r#p;'S.g;'S;=`2c<%lO.g~/`UgPO#o.g#o#p/r#p;'S.g;'S;=`2i;=`<%l0v<%lO.g~/w_Z~Os.gst0vtu.guv0vvw.gwx(|x#O.g#O#P/Z#P#o.g#o#p0v#p;'S.g;'S;=`2c<%l~.g~O.g~~&U~0{VZ~Ow0vwx+hx#O0v#O#P1b#P;'S0v;'S;=`2]<%lO0v~1eRO;'S0v;'S;=`1n;=`O0v~1sWZ~Ow0vwx+hx#O0v#O#P1b#P;'S0v;'S;=`2];=`<%l0v<%lO0v~2`P;=`<%l0v~2fP;=`<%l.g~2nWZ~Ow0vwx+hx#O0v#O#P1b#P;'S0v;'S;=`2];=`<%l.g<%lO0vR3_TXQgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}V3uTWUgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~4]VgPb~Oz$}z{4r{#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~4yTgPb~O#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}V5cTrSuQgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~5{`gPb~V~O}$}}!O6}!O!P8T!P!Q$}!Q!R:[!R![=m![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~7U_gPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~8Y^gPO}$}}!O9U!O!Q$}!Q![9U![!c$}!c!}9U!}#R$}#R#S9U#S#T$}#T#o9U#o#p%c#p;'S$};'S;=`&O<%lO$}~9]_gP^~O}$}}!O9U!O!P8T!P!Q$}!Q![9U![!c$}!c!}9U!}#R$}#R#S9U#S#T$}#T#o9U#o#p%c#p;'S$};'S;=`&O<%lO$}~:e_gP]~V~O}$}}!O6}!O!P;d!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~;i^gPO}$}}!O9U!O!Q$}!Q![|TgP`~O#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~?dVgPb~O!P$}!P!Q4r!Q#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}R@QTuQgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~@hVgP_~O!_$}!_!`'r!`#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~AUVgP`~O!_$}!_!`'r!`#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}RArTtQgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}VBYTsUgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~BpegPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#b6}#b#cDR#c#d6}#d#eFg#e#i6}#i#jKe#j#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~DYagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#W6}#W#XE_#X#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~Eh_gP_~V~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~FnagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#d6}#d#eGs#e#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~GzagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#`6}#`#aIP#a#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~IWagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#m6}#m#nJ]#n#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~Jf_gPa~V~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~KlagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#h6}#h#iLq#i#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~LxagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#c6}#c#dM}#d#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~NUagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#Y! Z#Y#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~! bagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#g6}#g#h!!g#h#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!!nagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#V6}#V#W!#s#W#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!#z`gPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#U!$|#U#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!%TagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#d6}#d#e!&Y#e#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!&aagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#YJ]#Y#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!'magPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#`6}#`#a!(r#a#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!(yagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#c6}#c#d!*O#d#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!*VagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#V6}#V#W!+[#W#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!+cagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#_6}#_#`J]#`#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!,oegPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#`6}#`#a!.Q#a#b6}#b#c!/^#c#l6}#l#m!Hz#m#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!.XagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#g6}#g#h!&Y#h#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!/eagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#W6}#W#X!0j#X#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!0qkgPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#U!2f#U#V!'f#V#Y6}#Y#Z!3x#Z#]6}#]#^!6b#^#a6}#a#b!7n#b#g6}#g#h!OVgPO#k$}#k#l!>e#l#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~!>jVgPO#]$}#]#^!?P#^#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~!?UVgPO#h$}#h#i!?k#i#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~!?pVgPO#[$}#[#]'r#]#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~!@^agPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#Y!Ac#Y#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!AjagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#f6}#f#g!Bo#g#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!BvagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#U6}#U#V!C{#V#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!DS`gPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#U!EU#U#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!E]agPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#h6}#h#i!Fb#i#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!FiagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#]6}#]#^!Gn#^#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!GuagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#a6}#a#bJ]#b#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!IRagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#h6}#h#i!JW#i#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!J_agPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#Y!Kd#Y#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!KkagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#b6}#b#c!Lp#c#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!LwagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#W6}#W#X!M|#X#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!NTagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#g6}#g#hJ]#h#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~# abgPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#U#!i#U#c6}#c#d!5U#d#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#!pagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#`6}#`#a##u#a#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~##|agPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#g6}#g#h#%R#h#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#%YagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#Y#&_#Y#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#&h_gP[~V~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#'negPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#Y6}#Y#ZJ]#Z#b6}#b#c#)P#c#g6}#g#hE_#h#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#)YagP_~V~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#V6}#V#W#*_#W#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#*fagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#`6}#`#a#+k#a#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#+ragPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#i6}#i#j#,w#j#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#-OagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#W6}#W#X!&Y#X#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#.[`gPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#U#/^#U#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#/ecgPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#V6}#V#W!:T#W#h6}#h#i#0p#i#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#0wagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#V6}#V#W#1|#W#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#2TagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#[6}#[#]#3Y#]#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#3aagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#Y#4f#Y#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#4magPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#g6}#g#hE_#h#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#5yagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#c6}#c#d#7O#d#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#7VagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#h6}#h#iE_#i#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#8cagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#f6}#f#gE_#g#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#9ocgPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#Y#:z#Y#h6}#h#i#m#g#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#>tagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#h6}#h#i#?y#i#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#@QagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#g6}#g#h!=65&&i<=90||i==95||i>=97&&i<=122||i>=161}function Jy(i){return i==9||i==10||i==13||i==32}var Bu=null,Du=null,Lu=0;function Fo(i,e){let t=i.pos+e;if(Du==i&&Lu==t)return Bu;for(;Jy(i.peek(e));)e++;let n="";for(;;){let r=i.peek(e);if(!Fy(r))break;n+=String.fromCharCode(r),e++}return Du=i,Lu=t,Bu=n||null}function Nu(i,e){this.name=i,this.parent=e,this.hash=e?e.hash:0;for(let t=0;t{if(i.next==60){if(i.advance(),i.next==47){i.advance();let t=Fo(i,0);if(!t)return i.acceptToken(Iy);if(e.context&&t==e.context.name)return i.acceptToken(Gy);for(let n=e.context;n;n=n.parent)if(n.name==t)return i.acceptToken(Ey,-2);i.acceptToken(My)}else if(i.next!=33&&i.next!=63)return i.acceptToken(Ho)}},{contextual:!0});function Jo(i,e){return new J(t=>{for(let n=0,r=0;;r++){if(t.next<0){r&&t.acceptToken(i);break}if(t.next==e.charCodeAt(n)){if(n++,n==e.length){r>=e.length&&t.acceptToken(i,1-e.length);break}}else n=t.next==e.charCodeAt(0)?1:0;t.advance()}})}var tP=Jo(By,"-->"),iP=Jo(Dy,"?>"),nP=Jo(Ly,"]]>"),rP=se({Text:u.content,"StartTag StartCloseTag EndTag SelfCloseEndTag":u.angleBracket,TagName:u.tagName,"MismatchedCloseTag/Tagname":[u.tagName,u.invalid],AttributeName:u.attributeName,AttributeValue:u.attributeValue,Is:u.definitionOperator,"EntityReference CharacterReference":u.character,Comment:u.blockComment,ProcessingInst:u.processingInstruction,DoctypeDecl:u.documentMeta,Cdata:u.special(u.string)}),Hu=me.deserialize({version:14,states:",SOQOaOOOrOxO'#CfOzOpO'#CiO!tOaO'#CgOOOP'#Cg'#CgO!{OrO'#CrO#TOtO'#CsO#]OpO'#CtOOOP'#DS'#DSOOOP'#Cv'#CvQQOaOOOOOW'#Cw'#CwO#eOxO,59QOOOP,59Q,59QOOOO'#Cx'#CxO#mOpO,59TO#uO!bO,59TOOOP'#C{'#C{O$TOaO,59RO$[OpO'#CoOOOP,59R,59ROOOQ'#C|'#C|O$dOrO,59^OOOP,59^,59^OOOS'#C}'#C}O$lOtO,59_OOOP,59_,59_O$tOpO,59`O$|OpO,59`OOOP-E6t-E6tOOOW-E6u-E6uOOOP1G.l1G.lOOOO-E6v-E6vO%UO!bO1G.oO%UO!bO1G.oO%dOpO'#CkO%lO!bO'#CyO%zO!bO1G.oOOOP1G.o1G.oOOOP1G.w1G.wOOOP-E6y-E6yOOOP1G.m1G.mO&VOpO,59ZO&_OpO,59ZOOOQ-E6z-E6zOOOP1G.x1G.xOOOS-E6{-E6{OOOP1G.y1G.yO&gOpO1G.zO&gOpO1G.zOOOP1G.z1G.zO&oO!bO7+$ZO&}O!bO7+$ZOOOP7+$Z7+$ZOOOP7+$c7+$cO'YOpO,59VO'bOpO,59VO'jO!bO,59eOOOO-E6w-E6wO'xOpO1G.uO'xOpO1G.uOOOP1G.u1G.uO(QOpO7+$fOOOP7+$f7+$fO(YO!bO<`#X;'S%y;'S;=`&_<%lO%yX>eV{WOr%ysv%yw#T%y#T#U>z#U;'S%y;'S;=`&_<%lO%yX?PV{WOr%ysv%yw#h%y#h#i?f#i;'S%y;'S;=`&_<%lO%yX?kV{WOr%ysv%yw#T%y#T#Us.from<=t&&s.to>=t),r=n&&n.getChild("AttributeName");return r?i.sliceString(r.from,r.to):""}function el(i){for(let e=i&&i.parent;e;e=e.parent)if(e.name=="Element")return e;return null}function OP(i,e){var t;let n=_(i).resolveInner(e,-1),r=null;for(let s=n;!r&&s.parent;s=s.parent)(s.name=="OpenTag"||s.name=="CloseTag"||s.name=="SelfClosingTag"||s.name=="MismatchedCloseTag")&&(r=s);if(r&&(r.to>e||r.lastChild.type.isError)){let s=r.parent;if(n.name=="TagName")return r.name=="CloseTag"||r.name=="MismatchedCloseTag"?{type:"closeTag",from:n.from,context:s}:{type:"openTag",from:n.from,context:el(s)};if(n.name=="AttributeName")return{type:"attrName",from:n.from,context:r};if(n.name=="AttributeValue")return{type:"attrValue",from:n.from,context:r};let O=n==r||n.name=="Attribute"?n.childBefore(e):n;return O?.name=="StartTag"?{type:"openTag",from:e,context:el(s)}:O?.name=="StartCloseTag"&&O.to<=e?{type:"closeTag",from:e,context:s}:O?.name=="Is"?{type:"attrValue",from:e,context:r}:O?{type:"attrName",from:e,context:r}:null}else if(n.name=="StartCloseTag")return{type:"closeTag",from:e,context:n.parent};for(;n.parent&&n.to==e&&!(!((t=n.lastChild)===null||t===void 0)&&t.type.isError);)n=n.parent;return n.name=="Element"||n.name=="Text"||n.name=="Document"?{type:"tag",from:e,context:n.name=="Element"?n:el(n)}:null}var il=class{constructor(e,t,n){this.attrs=t,this.attrValues=n,this.children=[],this.name=e.name,this.completion=Object.assign(Object.assign({type:"type"},e.completion||{}),{label:this.name}),this.openCompletion=Object.assign(Object.assign({},this.completion),{label:"<"+this.name}),this.closeCompletion=Object.assign(Object.assign({},this.completion),{label:"",boost:2}),this.closeNameCompletion=Object.assign(Object.assign({},this.completion),{label:this.name+">"}),this.text=e.textContent?e.textContent.map(r=>({label:r,type:"text"})):[]}},tl=/^[:\-\.\w\u00b7-\uffff]*$/;function Fu(i){return Object.assign(Object.assign({type:"property"},i.completion||{}),{label:i.name})}function Ju(i){return typeof i=="string"?{label:`"${i}"`,type:"constant"}:/^"/.test(i.label)?i:Object.assign(Object.assign({},i),{label:`"${i.label}"`})}function oP(i,e){let t=[],n=[],r=Object.create(null);for(let l of e){let a=Fu(l);t.push(a),l.global&&n.push(a),l.values&&(r[l.name]=l.values.map(Ju))}let s=[],O=[],o=Object.create(null);for(let l of i){let a=n,h=r;l.attributes&&(a=a.concat(l.attributes.map(f=>typeof f=="string"?t.find(d=>d.label==f)||{label:f,type:"property"}:(f.values&&(h==r&&(h=Object.create(h)),h[f.name]=f.values.map(Ju)),Fu(f)))));let c=new il(l,a,h);o[c.name]=c,s.push(c),l.top&&O.push(c)}O.length||(O=s);for(let l=0;l{var a;let{doc:h}=l.state,c=OP(l.state,l.pos);if(!c||c.type=="tag"&&!l.explicit)return null;let{type:f,from:d,context:p}=c;if(f=="openTag"){let m=O,$=Ko(h,p);if($){let g=o[$];m=g?.children||s}return{from:d,options:m.map(g=>g.completion),validFor:tl}}else if(f=="closeTag"){let m=Ko(h,p);return m?{from:d,to:l.pos+(h.sliceString(l.pos,l.pos+1)==">"?1:0),options:[((a=o[m])===null||a===void 0?void 0:a.closeNameCompletion)||{label:m+">",type:"type"}],validFor:tl}:null}else if(f=="attrName"){let m=o[Hr(h,p)];return{from:d,options:m?.attrs||n,validFor:tl}}else if(f=="attrValue"){let m=sP(h,p,d);if(!m)return null;let $=o[Hr(h,p)],g=($?.attrValues||r)[m];return!g||!g.length?null:{from:d,to:l.pos+(h.sliceString(l.pos,l.pos+1)=='"'?1:0),options:g,validFor:/^"[^"]*"?$/}}else if(f=="tag"){let m=Ko(h,p),$=o[m],g=[],b=p&&p.lastChild;m&&(!b||b.name!="CloseTag"||Hr(h,b)!=m)&&g.push($?$.closeCompletion:{label:"",type:"type",boost:2});let k=g.concat(($?.children||(p?s:O)).map(y=>y.openCompletion));if(p&&$?.text.length){let y=p.firstChild;y.to>l.pos-20&&!/\S/.test(l.state.sliceDoc(y.to,l.pos))&&(k=k.concat($.text))}return{from:d,options:k,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}else return null}}var Ku=pe.define({name:"xml",parser:Hu.configure({props:[Se.add({Element(i){let e=/^\s*<\//.test(i.textAfter);return i.lineIndent(i.node.from)+(e?0:i.unit)},"OpenTag CloseTag SelfClosingTag"(i){return i.column(i.node.from)+i.unit}}),ke.add({Element(i){let e=i.firstChild,t=i.lastChild;return!e||e.name!="OpenTag"?null:{from:e.to,to:t.name=="CloseTag"?t.from:i.to}}}),On.add({"OpenTag CloseTag":i=>i.getChild("TagName")})]}),languageData:{commentTokens:{block:{open:""}},indentOnInput:/^\s*<\/$/}});function ed(i={}){return new Oe(Ku,Ku.data.of({autocomplete:oP(i.elements||[],i.attributes||[])}))}var T=async i=>{let e=await window.importVersioned("legacy-modes");return Pr.define(e[i])},lP={bash:()=>T("shell"),c:()=>T("c"),css:async()=>Yr(),"c++":()=>T("cpp"),"c#":()=>T("csharp"),clj:()=>T("clojure"),clojure:()=>T("clojure"),csharp:()=>T("csharp"),dart:()=>T("dart"),diff:()=>T("diff"),for:()=>T("fortran"),fortran:()=>T("fortran"),"f#":()=>T("fSharp"),fsharp:()=>T("fSharp"),go:()=>T("go"),haskell:()=>T("haskell"),hs:()=>T("haskell"),html:async()=>vi(),ini:()=>T("properties"),java:()=>T("java"),javascript:async()=>Ft(),json:async()=>rf(),js:async()=>Ft(),jl:()=>T("julia"),julia:()=>T("julia"),kotlin:()=>T("kotlin"),latex:()=>T("stex"),lua:()=>T("lua"),markdown:async()=>Nr(),matlab:()=>T("octave"),md:async()=>Nr(),mdown:async()=>Nr(),ml:()=>T("sml"),mssql:()=>T("msSQL"),mysql:()=>T("mySQL"),nginx:()=>T("nginx"),octave:()=>T("octave"),pas:()=>T("pascal"),pascal:()=>T("pascal"),perl:()=>T("perl"),pgsql:()=>T("pgSQL"),php:async i=>{let e=i.includes("T("perl"),"pl/sql":()=>T("plSQL"),postgresql:()=>T("pgSQL"),powershell:()=>T("powerShell"),properties:()=>T("properties"),ocaml:()=>T("oCaml"),py:()=>T("python"),python:()=>T("python"),rb:()=>T("ruby"),rs:()=>T("rust"),ruby:()=>T("ruby"),rust:()=>T("rust"),scala:()=>T("scala"),scheme:()=>T("scheme"),shell:()=>T("shell"),sh:()=>T("shell"),smarty:()=>T("smarty"),stext:()=>T("stex"),swift:()=>T("swift"),toml:()=>T("toml"),ts:async()=>Ft({typescript:!0}),twig:async()=>Iu(),typescript:async()=>Ft({typescript:!0}),sql:()=>T("standardSQL"),sqlite:()=>T("sqlite"),vbs:()=>T("vbScript"),vbscript:()=>T("vbScript"),"vb.net":()=>T("vb"),vbnet:()=>T("vb"),xml:async()=>ed(),yaml:()=>T("yaml"),yml:()=>T("yaml")};function td(i,e){let t=i.trim().replace(/^\./g,"").toLowerCase(),n=lP[t];if(!(typeof n>"u"))return n(e)}var id=new WeakMap;function zi(i){let e=new gt;i.extensions.push(e.of([]));let t=new v(i);return id.set(t,e),t}async function nd(i,e,t){let n=id.get(i),r=await td(e,t);i.dispatch({effects:n.reconfigure(r||[])})}var Ct=class{constructor(e){this.ev=e}getContent(){return this.ev.state.doc.toString()}setContent(e){let{doc:t}=this.ev.state;this.ev.dispatch({changes:{from:0,to:t.length,insert:e}})}focus(){this.ev.focus()}setMode(e,t=""){nd(this.ev,e,t)}};function aP(i){let e='',t='',n=document.createElement("button");n.setAttribute("type","button"),n.classList.add("cm-copy-button"),n.innerHTML=e,i.dom.appendChild(n);let r=620,s=60;n.addEventListener("click",()=>{lh(i.state.doc.toString()),n.classList.add("success"),setTimeout(()=>{n.innerHTML=t},s/2),setTimeout(()=>{n.classList.remove("success")},r),setTimeout(()=>{n.innerHTML=e},r+s/2)})}function rd(i){let e=i.querySelector("code[class^=language-]");i.innerHTML=i.innerHTML.replace(//gi,` -`);let t=i.textContent.trimEnd(),n="";e!==null&&(n=e.className.replace("language-",""));let r=document.createElement("div");i.parentNode.insertBefore(r,i);let s=zi({parent:r,doc:t,extensions:LO(r)});new Ct(s).setMode(n,t),i.remove(),aP(s)}function L0(i){let e=i.querySelectorAll("pre");for(let t of e)rd(t)}function N0(){let i=document.querySelectorAll(".page-content pre, .comment-box .content pre");for(let e of i)rd(e)}function H0(i,e,t,n){let r=zi({parent:i,doc:t,extensions:LO(i),root:e}),s=new Ct(r);return s.setMode(n,t),s}function F0(i,e){let t=i.textContent,n={parent:i.parentElement,doc:t,extensions:[...Zr(i.parentElement),v.updateListener.of(s=>{s.docChanged})]},r=new Ct(zi(n));return r.setMode(e,t),i.style.display="none",r}function J0(i,e){let t=i.value,n={parent:i.parentElement,doc:t,extensions:[...Zr(i.parentElement),v.updateListener.of(O=>{O.docChanged&&(i.value=O.state.doc.toString())})]},r=zi(n),s=new Ct(r);return s.setMode(e,t),i.style.display="none",s}function K0(i,e,t,n){let r=i.textContent,s={parent:i.parentElement,doc:r,extensions:[tt.of(n),...Zr(i.parentElement),v.updateListener.of(o=>{e(o)}),v.domEventHandlers(t)]};window.$events.emitPublic(i,"editor-markdown-cm6::pre-init",{editorViewConfig:s});let O=zi(s);return new Ct(O).setMode("markdown",""),i.style.display="none",O}export{N0 as highlight,L0 as highlightWithin,J0 as inlineEditor,K0 as markdownEditor,F0 as popupEditor,H0 as wysiwygView}; +`);n=r<0?t:t.slice(0,r)}return e+n.length>this.to?n.slice(0,this.to-e):n}prevLineEnd(){return this.atEnd?this.lineStart:this.lineStart-1}startContext(e,t,n=0){this.block=Lr.create(e,n,this.lineStart+t,this.block.hash,this.lineStart+this.line.text.length),this.stack.push(this.block)}startComposite(e,t,n=0){this.startContext(this.parser.getNodeType(e),t,n)}addNode(e,t,n){typeof e=="number"&&(e=new Y(this.parser.nodeSet.types[e],zi,zi,(n??this.prevLineEnd())-t)),this.block.addChild(e,t-this.block.from)}addElement(e){this.block.addChild(e.toTree(this.parser.nodeSet),e.from-this.block.from)}addLeafElement(e,t){this.addNode(this.buffer.writeElements(_O(t.children,e.marks),-t.from).finish(t.type,t.to-t.from),t.from)}finishContext(){let e=this.stack.pop(),t=this.stack[this.stack.length-1];t.addChild(e.toTree(this.parser.nodeSet),e.from-t.from),this.block=t}finish(){for(;this.stack.length>1;)this.finishContext();return this.addGaps(this.block.toTree(this.parser.nodeSet,this.lineStart))}addGaps(e){return this.ranges.length>1?vu(this.ranges,0,e.topNode,this.ranges[0].from,this.reusePlaceholders):e}finishLeaf(e){for(let n of e.parsers)if(n.finish(this,e))return;let t=_O(this.parser.parseInline(e.content,e.start),e.marks);this.addNode(this.buffer.writeElements(t,-e.start).finish(b.Paragraph,e.content.length),e.start)}elt(e,t,n,r){return typeof e=="string"?U(this.parser.getNodeType(e),t,n,r):new Br(e,t)}get buffer(){return new Dr(this.parser.nodeSet)}};function vu(i,e,t,n,r){let s=i[e].to,o=[],O=[],l=t.from+n;function a(h,c){for(;c?h>=s:h>s;){let f=i[e+1].from-s;n+=f,h+=f,e++,s=i[e].to}}for(let h=t.firstChild;h;h=h.nextSibling){a(h.from+n,!0);let c=h.from+n,f,d=r.get(h.tree);d?f=d:h.to+n>s?(f=vu(i,e,h,n,r),a(h.to+n,!1)):f=h.toTree(),o.push(f),O.push(c-l)}return a(t.to+n,!1),new Y(t.type,o,O,t.to+n-l,t.tree?t.tree.propValues:void 0)}var Pn=class i extends $t{constructor(e,t,n,r,s,o,O,l,a){super(),this.nodeSet=e,this.blockParsers=t,this.leafBlockParsers=n,this.blockNames=r,this.endLeafBlock=s,this.skipContextMarkup=o,this.inlineParsers=O,this.inlineNames=l,this.wrappers=a,this.nodeTypes=Object.create(null);for(let h of e.types)this.nodeTypes[h.name]=h.id}createParse(e,t,n){let r=new CO(this,e,t,n);for(let s of this.wrappers)r=s(r,e,t,n);return r}configure(e){let t=qO(e);if(!t)return this;let{nodeSet:n,skipContextMarkup:r}=this,s=this.blockParsers.slice(),o=this.leafBlockParsers.slice(),O=this.blockNames.slice(),l=this.inlineParsers.slice(),a=this.inlineNames.slice(),h=this.endLeafBlock.slice(),c=this.wrappers;if(Sn(t.defineNodes)){r=Object.assign({},r);let f=n.types.slice(),d;for(let p of t.defineNodes){let{name:m,block:$,composite:g,style:Q}=typeof p=="string"?{name:p}:p;if(f.some(P=>P.name==m))continue;g&&(r[f.length]=(P,w,Z)=>g(w,Z,P.value));let k=f.length,y=g?["Block","BlockContext"]:$?k>=b.ATXHeading1&&k<=b.SetextHeading2?["Block","LeafBlock","Heading"]:["Block","LeafBlock"]:void 0;f.push(F.define({id:k,name:m,props:y&&[[R.group,y]]})),Q&&(d||(d={}),Array.isArray(Q)||Q instanceof je?d[m]=Q:Object.assign(d,Q))}n=new pt(f),d&&(n=n.extend(ne(d)))}if(Sn(t.props)&&(n=n.extend(...t.props)),Sn(t.remove))for(let f of t.remove){let d=this.blockNames.indexOf(f),p=this.inlineNames.indexOf(f);d>-1&&(s[d]=o[d]=void 0),p>-1&&(l[p]=void 0)}if(Sn(t.parseBlock))for(let f of t.parseBlock){let d=O.indexOf(f.name);if(d>-1)s[d]=f.parse,o[d]=f.leaf;else{let p=f.before?Mr(O,f.before):f.after?Mr(O,f.after)+1:O.length-1;s.splice(p,0,f.parse),o.splice(p,0,f.leaf),O.splice(p,0,f.name)}f.endLeaf&&h.push(f.endLeaf)}if(Sn(t.parseInline))for(let f of t.parseInline){let d=a.indexOf(f.name);if(d>-1)l[d]=f.parse;else{let p=f.before?Mr(a,f.before):f.after?Mr(a,f.after)+1:a.length-1;l.splice(p,0,f.parse),a.splice(p,0,f.name)}}return t.wrap&&(c=c.concat(t.wrap)),new i(n,s,o,O,h,r,l,a,c)}getNodeType(e){let t=this.nodeTypes[e];if(t==null)throw new RangeError(`Unknown node type '${e}'`);return t}parseInline(e,t){let n=new UO(this,e,t);e:for(let r=t;r=0){r=O;continue e}}r++}return n.resolveMarkers(0)}};function Sn(i){return i!=null&&i.length>0}function qO(i){if(!Array.isArray(i))return i;if(i.length==0)return null;let e=qO(i[0]);if(i.length==1)return e;let t=qO(i.slice(1));if(!t||!e)return e||t;let n=(o,O)=>(o||zi).concat(O||zi),r=e.wrap,s=t.wrap;return{props:n(e.props,t.props),defineNodes:n(e.defineNodes,t.defineNodes),parseBlock:n(e.parseBlock,t.parseBlock),parseInline:n(e.parseInline,t.parseInline),remove:n(e.remove,t.remove),wrap:r?s?(o,O,l,a)=>r(s(o,O,l,a),O,l,a):r:s}}function Mr(i,e){let t=i.indexOf(e);if(t<0)throw new RangeError(`Position specified relative to unknown parser ${e}`);return t}var Tu=[F.none];for(let i=1,e;e=b[i];i++)Tu[i]=F.define({id:i,name:e,props:i>=b.Escape?[]:[[R.group,i in gu?["Block","BlockContext"]:["Block","LeafBlock"]]],top:e=="Document"});var zi=[],Dr=class{constructor(e){this.nodeSet=e,this.content=[],this.nodes=[]}write(e,t,n,r=0){return this.content.push(e,t,n,4+r*4),this}writeElements(e,t=0){for(let n of e)n.writeTo(this,t);return this}finish(e,t){return Y.build({buffer:this.content,nodeSet:this.nodeSet,reused:this.nodes,topID:e,length:t})}},ni=class{constructor(e,t,n,r=zi){this.type=e,this.from=t,this.to=n,this.children=r}writeTo(e,t){let n=e.content.length;e.writeElements(this.children,t),e.content.push(this.type,this.from+t,this.to+t,e.content.length+4-n)}toTree(e){return new Dr(e).writeElements(this.children,-this.from).finish(this.type,this.to-this.from)}},Br=class{constructor(e,t){this.tree=e,this.from=t}get to(){return this.from+this.tree.length}get type(){return this.tree.type.id}get children(){return zi}writeTo(e,t){e.nodes.push(this.tree),e.content.push(e.nodes.length-1,this.from+t,this.to+t,-1)}toTree(){return this.tree}};function U(i,e,t,n){return new ni(i,e,t,n)}var zu={resolve:"Emphasis",mark:"EmphasisMark"},Xu={resolve:"Emphasis",mark:"EmphasisMark"},Qn={},au={},Ce=class{constructor(e,t,n,r){this.type=e,this.from=t,this.to=n,this.side=r}},hu="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",xn=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\u2010-\u2027]/;try{xn=new RegExp("[\\p{Pc}|\\p{Pd}|\\p{Pe}|\\p{Pf}|\\p{Pi}|\\p{Po}|\\p{Ps}]","u")}catch{}var zO={Escape(i,e,t){if(e!=92||t==i.end-1)return-1;let n=i.char(t+1);for(let r=0;r]+|[a-z\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?(?:\.[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?)*)>/i.exec(n);if(r)return i.append(U(b.URL,t,t+1+r[0].length));let s=/^!--[^>](?:-[^-]|[^-])*?-->/i.exec(n);if(s)return i.append(U(b.Comment,t,t+1+s[0].length));let o=/^\?[^]*?\?>/.exec(n);if(o)return i.append(U(b.ProcessingInstruction,t,t+1+o[0].length));let O=/^(?:![A-Z][^]*?>|!\[CDATA\[[^]*?\]\]>|\/\s*[a-zA-Z][\w-]*\s*>|\s*[a-zA-Z][\w-]*(\s+[a-zA-Z:_][\w-.:]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*(\/\s*)?>)/.exec(n);return O?i.append(U(b.HTMLTag,t,t+1+O[0].length)):-1},Emphasis(i,e,t){if(e!=95&&e!=42)return-1;let n=t+1;for(;i.char(n)==e;)n++;let r=i.slice(t-1,t),s=i.slice(n,n+1),o=xn.test(r),O=xn.test(s),l=/\s|^$/.test(r),a=/\s|^$/.test(s),h=!a&&(!O||l||o),c=!l&&(!o||a||O),f=h&&(e==42||!c||o),d=c&&(e==42||!h||O);return i.append(new Ce(e==95?zu:Xu,t,n,(f?1:0)|(d?2:0)))},HardBreak(i,e,t){if(e==92&&i.char(t+1)==10)return i.append(U(b.HardBreak,t,t+2));if(e==32){let n=t+1;for(;i.char(n)==32;)n++;if(i.char(n)==10&&n>=t+2)return i.append(U(b.HardBreak,t,n+1))}return-1},Link(i,e,t){return e==91?i.append(new Ce(Qn,t,t+1,1)):-1},Image(i,e,t){return e==33&&i.char(t+1)==91?i.append(new Ce(au,t,t+2,1)):-1},LinkEnd(i,e,t){if(e!=93)return-1;for(let n=i.parts.length-1;n>=0;n--){let r=i.parts[n];if(r instanceof Ce&&(r.type==Qn||r.type==au)){if(!r.side||i.skipSpace(r.to)==t&&!/[(\[]/.test(i.slice(t+1,t+2)))return i.parts[n]=null,-1;let s=i.takeContent(n),o=i.parts[n]=xQ(i,s,r.type==Qn?b.Link:b.Image,r.from,t+1);if(r.type==Qn)for(let O=0;Oe?U(b.URL,e+t,s+t):s==i.length?null:!1}}function Ru(i,e,t){let n=i.charCodeAt(e);if(n!=39&&n!=34&&n!=40)return!1;let r=n==40?41:n;for(let s=e+1,o=!1;s=this.end?-1:this.text.charCodeAt(e-this.offset)}get end(){return this.offset+this.text.length}slice(e,t){return this.text.slice(e-this.offset,t-this.offset)}append(e){return this.parts.push(e),e.to}addDelimiter(e,t,n,r,s){return this.append(new Ce(e,t,n,(r?1:0)|(s?2:0)))}addElement(e){return this.append(e)}resolveMarkers(e){for(let n=e;n=e;l--){let m=this.parts[l];if(m instanceof Ce&&m.side&1&&m.type==r.type&&!(s&&(r.side&1||m.side&2)&&(m.to-m.from+o)%3==0&&((m.to-m.from)%3||o%3))){O=m;break}}if(!O)continue;let a=r.type.resolve,h=[],c=O.from,f=r.to;if(s){let m=Math.min(2,O.to-O.from,o);c=O.to-m,f=r.from+m,a=m==1?"Emphasis":"StrongEmphasis"}O.type.mark&&h.push(this.elt(O.type.mark,c,O.to));for(let m=l+1;m=0;t--){let n=this.parts[t];if(n instanceof Ce&&n.type==e)return t}return null}takeContent(e){let t=this.resolveMarkers(e);return this.parts.length=e,t}skipSpace(e){return yn(this.text,e-this.offset)+this.offset}elt(e,t,n,r){return typeof e=="string"?U(this.parser.getNodeType(e),t,n,r):new Br(e,t)}};function _O(i,e){if(!e.length)return i;if(!i.length)return e;let t=i.slice(),n=0;for(let r of e){for(;n(e?e-1:0))return!1;if(this.fragmentEnd<0){let s=this.fragment.to;for(;s>0&&this.input.read(s-1,s)!=` +`;)s--;this.fragmentEnd=s?s-1:0}let n=this.cursor;n||(n=this.cursor=this.fragment.tree.cursor(),n.firstChild());let r=e+this.fragment.offset;for(;n.to<=r;)if(!n.parent())return!1;for(;;){if(n.from>=r)return this.fragment.from<=t;if(!n.childAfter(r))return!1}}matches(e){let t=this.cursor.tree;return t&&t.prop(R.contextHash)==e}takeNodes(e){let t=this.cursor,n=this.fragment.offset,r=this.fragmentEnd-(this.fragment.openEnd?1:0),s=e.absoluteLineStart,o=s,O=e.block.children.length,l=o,a=O;for(;;){if(t.to-n>r){if(t.type.isAnonymous&&t.firstChild())continue;break}let h=Yu(t.from-n,e.ranges);if(t.to-n<=e.ranges[e.rangeI].to)e.addNode(t.tree,h);else{let c=new Y(e.parser.nodeSet.types[b.Paragraph],[],[],0,e.block.hashProp);e.reusePlaceholders.set(c,t.tree),e.addNode(c,h)}if(t.type.is("Block")&&(wQ.indexOf(t.type.id)<0?(o=t.to-n,O=e.block.children.length):(o=l,O=a,l=t.to-n,a=e.block.children.length)),!t.nextSibling())break}for(;e.block.children.length>O;)e.block.children.pop(),e.block.positions.pop();return o-s}};function Yu(i,e){let t=i;for(let n=1;nIr[i]),Object.keys(Ir).map(i=>yQ[i]),Object.keys(Ir),bQ,gu,Object.keys(zO).map(i=>zO[i]),Object.keys(zO),[]);function vQ(i,e,t){let n=[];for(let r=i.firstChild,s=e;;r=r.nextSibling){let o=r?r.from:t;if(o>s&&n.push({from:s,to:o}),!r)break;s=r.to}return n}function Cu(i){let{codeParser:e,htmlParser:t}=i;return{wrap:Si((r,s)=>{let o=r.type.id;if(e&&(o==b.CodeBlock||o==b.FencedCode)){let O="";if(o==b.FencedCode){let a=r.node.getChild(b.CodeInfo);a&&(O=s.read(a.from,a.to))}let l=e(O);if(l)return{parser:l,overlay:a=>a.type.id==b.CodeText}}else if(t&&(o==b.HTMLBlock||o==b.HTMLTag))return{parser:t,overlay:vQ(r.node,r.from,r.to)};return null})}}var TQ={resolve:"Strikethrough",mark:"StrikethroughMark"},zQ={defineNodes:[{name:"Strikethrough",style:{"Strikethrough/...":u.strikethrough}},{name:"StrikethroughMark",style:u.processingInstruction}],parseInline:[{name:"Strikethrough",parse(i,e,t){if(e!=126||i.char(t+1)!=126||i.char(t+2)==126)return-1;let n=i.slice(t-1,t),r=i.slice(t+2,t+3),s=/\s|^$/.test(n),o=/\s|^$/.test(r),O=xn.test(n),l=xn.test(r);return i.addDelimiter(TQ,t,t+2,!o&&(!l||s||O),!s&&(!O||o||l))},after:"Emphasis"}]};function bn(i,e,t=0,n,r=0){let s=0,o=!0,O=-1,l=-1,a=!1,h=()=>{n.push(i.elt("TableCell",r+O,r+l,i.parser.parseInline(e.slice(O,l),r+O)))};for(let c=t;c-1)&&s++,o=!1,n&&(O>-1&&h(),n.push(i.elt("TableDelimiter",c+r,c+r+1))),O=l=-1):(a||f!=32&&f!=9)&&(O<0&&(O=c),l=c+1),a=!a&&f==92}return O>-1&&(s++,n&&h()),s}function cu(i,e){for(let t=e;tr instanceof Nr)||!cu(e.text,e.basePos))return!1;let n=i.scanLine(i.absoluteLineEnd+1).text;return qu.test(n)&&bn(i,e.text,e.basePos)==bn(i,n,e.basePos)},before:"SetextHeading"}]},jO=class{nextLine(){return!1}finish(e,t){return e.addLeafElement(t,e.elt("Task",t.start,t.start+t.content.length,[e.elt("TaskMarker",t.start,t.start+3),...e.parser.parseInline(t.content.slice(3),t.start+3)])),!0}},WQ={defineNodes:[{name:"Task",block:!0,style:u.list},{name:"TaskMarker",style:u.atom}],parseBlock:[{name:"TaskList",leaf(i,e){return/^\[[ xX]\][ \t]/.test(e.content)&&i.parentType().name=="ListItem"?new jO:null},after:"SetextHeading"}]},fu=/(www\.)|(https?:\/\/)|([\w.+-]+@)|(mailto:|xmpp:)/gy,uu=/[\w-]+(\.\w+(\.\w+)?)(\/[^\s<]*)?/gy,du=/[\w.+-]+@[\w-]+\.[\w.-]+/gy,pu=/\/[a-zA-Z\d@.]+/gy;function mu(i,e,t,n){let r=0;for(let s=e;smu(i,e,n,"("))n--;else if(r==";"&&(s=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(i.slice(e,n))))n=e+s.index;else break}return n}function $u(i,e){du.lastIndex=e;let t=du.exec(i);if(!t)return-1;let n=t[0][t[0].length-1];return n=="_"||n=="-"?-1:e+t[0].length-(n=="."?1:0)}var ZQ={parseInline:[{name:"Autolink",parse(i,e,t){let n=t-i.offset;fu.lastIndex=n;let r=fu.exec(i.text),s=-1;return!r||(r[1]||r[2]?s=RQ(i.text,n+r[0].length):r[3]?s=$u(i.text,n):(s=$u(i.text,n+r[0].length),s>-1&&r[0]=="xmpp:"&&(pu.lastIndex=s,r=pu.exec(i.text),r&&(s=r.index+r[0].length))),s<0)?-1:(i.addElement(i.elt("URL",t,s+i.offset)),s+i.offset)}}]},Uu=[XQ,WQ,zQ,ZQ];function _u(i,e,t){return(n,r,s)=>{if(r!=i||n.char(s+1)==i)return-1;let o=[n.elt(t,s,s+1)];for(let O=s+1;O"}}}),Mu=new R,Lu=Vu.configure({props:[Te.add(i=>!i.is("Block")||i.is("Document")||DO(i)!=null?void 0:(e,t)=>({from:t.doc.lineAt(e.from).to,to:e.to})),Mu.add(DO),ye.add({Document:()=>null}),gt.add({Document:Iu})]});function DO(i){let e=/^(?:ATX|Setext)Heading(\d)$/.exec(i.name);return e?+e[1]:void 0}function YQ(i,e){let t=i;for(;;){let n=t.nextSibling,r;if(!n||(r=DO(n.type))!=null&&r<=e)break;t=n}return t.to}var VQ=Uh.of((i,e,t)=>{for(let n=A(i).resolveInner(t,-1);n&&!(n.fromt)return{from:t,to:s}}return null});function FO(i){return new ue(Iu,i,[VQ],"markdown")}var CQ=FO(Lu),qQ=Lu.configure([Uu,ju,Au,Eu]),Du=FO(qQ);function UQ(i,e){return t=>{if(t&&i){let n=null;if(t=/\S*/.exec(t)[0],typeof i=="function"?n=i(t):n=On.matchLanguageName(i,t,!0),n instanceof On)return n.support?n.support.language.parser:Ht.getSkippingParser(n.load());if(n)return n.parser}return e?e.parser:null}}var Xi=class{constructor(e,t,n,r,s,o,O){this.node=e,this.from=t,this.to=n,this.spaceBefore=r,this.spaceAfter=s,this.type=o,this.item=O}blank(e,t=!0){let n=this.spaceBefore+(this.node.name=="Blockquote"?">":"");if(e!=null){for(;n.length0;r--)n+=" ";return n+(t?this.spaceAfter:"")}}marker(e,t){let n=this.node.name=="OrderedList"?String(+Nu(this.item,e)[2]+t):"";return this.spaceBefore+n+this.type+this.spaceAfter}};function Bu(i,e){let t=[];for(let r=i;r&&r.name!="Document";r=r.parent)(r.name=="ListItem"||r.name=="Blockquote"||r.name=="FencedCode")&&t.push(r);let n=[];for(let r=t.length-1;r>=0;r--){let s=t[r],o,O=e.lineAt(s.from),l=s.from-O.from;if(s.name=="FencedCode")n.push(new Xi(s,l,l,"","","",null));else if(s.name=="Blockquote"&&(o=/^ *>( ?)/.exec(O.text.slice(l))))n.push(new Xi(s,l,l+o[0].length,"",o[1],">",null));else if(s.name=="ListItem"&&s.parent.name=="OrderedList"&&(o=/^( *)\d+([.)])( *)/.exec(O.text.slice(l)))){let a=o[3],h=o[0].length;a.length>=4&&(a=a.slice(0,a.length-4),h-=4),n.push(new Xi(s.parent,l,l+h,o[1],a,o[2],s))}else if(s.name=="ListItem"&&s.parent.name=="BulletList"&&(o=/^( *)([-+*])( {1,4}\[[ xX]\])?( +)/.exec(O.text.slice(l)))){let a=o[4],h=o[0].length;a.length>4&&(a=a.slice(0,a.length-4),h-=4);let c=o[2];o[3]&&(c+=o[3].replace(/[xX]/," ")),n.push(new Xi(s.parent,l,l+h,o[1],a,c,s))}}return n}function Nu(i,e){return/^(\s*)(\d+)(?=[.)])/.exec(e.sliceString(i.from,i.from+10))}function MO(i,e,t,n=0){for(let r=-1,s=i;;){if(s.name=="ListItem"){let O=Nu(s,e),l=+O[2];if(r>=0){if(l!=r+1)return;t.push({from:s.from+O[1].length,to:s.from+O[0].length,insert:String(r+2+n)})}r=l}let o=s.nextSibling;if(!o)break;s=o}}function BO(i,e){let t=/^[ \t]*/.exec(i)[0].length;if(!t||e.facet(Rt)!=" ")return i;let n=ke(i,4,t),r="";for(let s=n;s>0;)s>=4?(r+=" ",s-=4):(r+=" ",s--);return r+i.slice(t)}var _Q=({state:i,dispatch:e})=>{let t=A(i),{doc:n}=i,r=null,s=i.changeByRange(o=>{if(!o.empty||!Du.isActiveAt(i,o.from))return r={range:o};let O=o.from,l=n.lineAt(O),a=Bu(t.resolveInner(O,-1),n);for(;a.length&&a[a.length-1].from>O-l.from;)a.pop();if(!a.length)return r={range:o};let h=a[a.length-1];if(h.to-h.spaceAfter.length>O-l.from)return r={range:o};let c=O>=h.to-h.spaceAfter.length&&!/\S/.test(l.text.slice(h.to));if(h.item&&c)if(h.node.firstChild.to>=O||l.from>0&&!/[^\s>]/.test(n.lineAt(l.from-1).text)){let $=a.length>1?a[a.length-2]:null,g,Q="";$&&$.item?(g=l.from+$.from,Q=$.marker(n,1)):g=l.from+($?$.to:0);let k=[{from:g,to:O,insert:Q}];return h.node.name=="OrderedList"&&MO(h.item,n,k,-2),$&&$.node.name=="OrderedList"&&MO($.item,n,k),{range:S.cursor(g+Q.length),changes:k}}else{let $="";for(let g=0,Q=a.length-2;g<=Q;g++)$+=a[g].blank(g\s*$/.exec($.text);if(g&&g.index==h.from){let Q=i.changes([{from:$.from+g.index,to:$.to},{from:l.from+h.from,to:l.to}]);return{range:o.map(Q),changes:Q}}}let f=[];h.node.name=="OrderedList"&&MO(h.item,n,f);let d=h.item&&h.item.from]*/.exec(l.text)[0].length>=h.to)for(let $=0,g=a.length-1;$<=g;$++)p+=$==g&&!d?a[$].marker(n,1):a[$].blank($l.from&&/\s/.test(l.text.charAt(m-l.from-1));)m--;return p=BO(p,i),f.push({from:m,to:O,insert:i.lineBreak+p}),{range:S.cursor(m+p.length+1),changes:f}});return r?!1:(e(i.update(s,{scrollIntoView:!0,userEvent:"input"})),!0)};function Gu(i){return i.name=="QuoteMark"||i.name=="ListMark"}function AQ(i,e){let t=i.resolveInner(e,-1),n=e;Gu(t)&&(n=t.from,t=t.parent);for(let r;r=t.childBefore(n);)if(Gu(r))n=r.from;else if(r.name=="OrderedList"||r.name=="BulletList")t=r.lastChild,n=t.to;else break;return t}var jQ=({state:i,dispatch:e})=>{let t=A(i),n=null,r=i.changeByRange(s=>{let o=s.from,{doc:O}=i;if(s.empty&&Du.isActiveAt(i,s.from)){let l=O.lineAt(o),a=Bu(AQ(t,o),O);if(a.length){let h=a[a.length-1],c=h.to-h.spaceAfter.length+(h.spaceAfter?1:0);if(o-l.from>c&&!/\S/.test(l.text.slice(c,o-l.from)))return{range:S.cursor(l.from+c),changes:{from:l.from+c,to:o}};if(o-l.from==c&&(!h.item||l.from<=h.item.from||!/\S/.test(l.text.slice(0,h.to)))){let f=l.from+h.from;if(h.item&&h.node.from=97&&i<=122||i>=65&&i<=90}function wn(i){return i==95||i>=128||ed(i)}function KO(i){return i>=48&&i<=55||i>=97&&i<=102||i>=65&&i<=70}var rb={int:!0,integer:!0,bool:!0,boolean:!0,float:!0,double:!0,real:!0,string:!0,array:!0,object:!0,unset:!0,__proto__:null},sb=new H(i=>{if(i.next==40){i.advance();let e=0;for(;Ju(i.peek(e));)e++;let t="",n;for(;ed(n=i.peek(e));)t+=String.fromCharCode(n),e++;for(;Ju(i.peek(e));)e++;i.peek(e)==41&&rb[t.toLowerCase()]&&i.acceptToken(MQ)}else if(i.next==60&&i.peek(1)==60&&i.peek(2)==60){for(let n=0;n<3;n++)i.advance();for(;i.next==32||i.next==9;)i.advance();let e=i.next==39;if(e&&i.advance(),!wn(i.next))return;let t=String.fromCharCode(i.next);for(;i.advance(),!(!wn(i.next)&&!(i.next>=48&&i.next<=55));)t+=String.fromCharCode(i.next);if(e){if(i.next!=39)return;i.advance()}if(i.next!=10&&i.next!=13)return;for(;;){let n=i.next==10||i.next==13;if(i.advance(),i.next<0)return;if(n){for(;i.next==32||i.next==9;)i.advance();let r=!0;for(let s=0;s{i.next<0&&i.acceptToken(FQ)}),Ob=new H((i,e)=>{i.next==63&&e.canShift(Fu)&&i.peek(1)==62&&i.acceptToken(Fu)});function lb(i){let e=i.peek(1);if(e==110||e==114||e==116||e==118||e==101||e==102||e==92||e==36||e==34||e==123)return 2;if(e>=48&&e<=55){let t=2,n;for(;t<5&&(n=i.peek(t))>=48&&n<=55;)t++;return t}if(e==120&&KO(i.peek(2)))return KO(i.peek(3))?4:3;if(e==117&&i.peek(2)==123)for(let t=3;;t++){let n=i.peek(t);if(n==125)return t==2?0:t+1;if(!KO(n))break}return 0}var ab=new H((i,e)=>{let t=!1;for(;!(i.next==34||i.next<0||i.next==36&&(wn(i.peek(1))||i.peek(1)==123)||i.next==123&&i.peek(1)==36);t=!0){if(i.next==92){let n=lb(i);if(n){if(t)break;return i.acceptToken(BQ,n)}}else if(!t&&(i.next==91||i.next==45&&i.peek(1)==62&&wn(i.peek(2))||i.next==63&&i.peek(1)==45&&i.peek(2)==62&&wn(i.peek(3)))&&e.canShift(NQ))break;i.advance()}t&&i.acceptToken(DQ)}),hb=ne({"Visibility abstract final static":u.modifier,"for foreach while do if else elseif switch try catch finally return throw break continue default case":u.controlKeyword,"endif endfor endforeach endswitch endwhile declare enddeclare goto match":u.controlKeyword,"and or xor yield unset clone instanceof insteadof":u.operatorKeyword,"function fn class trait implements extends const enum global interface use var":u.definitionKeyword,"include include_once require require_once namespace":u.moduleKeyword,"new from echo print array list as":u.keyword,null:u.null,Boolean:u.bool,VariableName:u.variableName,"NamespaceName/...":u.namespace,"NamedType/...":u.typeName,Name:u.name,"CallExpression/Name":u.function(u.variableName),"LabelStatement/Name":u.labelName,"MemberExpression/Name":u.propertyName,"MemberExpression/VariableName":u.special(u.propertyName),"ScopedExpression/ClassMemberName/Name":u.propertyName,"ScopedExpression/ClassMemberName/VariableName":u.special(u.propertyName),"CallExpression/MemberExpression/Name":u.function(u.propertyName),"CallExpression/ScopedExpression/ClassMemberName/Name":u.function(u.propertyName),"MethodDeclaration/Name":u.function(u.definition(u.variableName)),"FunctionDefinition/Name":u.function(u.definition(u.variableName)),"ClassDeclaration/Name":u.definition(u.className),UpdateOp:u.updateOperator,ArithOp:u.arithmeticOperator,LogicOp:u.logicOperator,BitOp:u.bitwiseOperator,CompareOp:u.compareOperator,ControlOp:u.controlOperator,AssignOp:u.definitionOperator,"$ ConcatOp":u.operator,LineComment:u.lineComment,BlockComment:u.blockComment,Integer:u.integer,Float:u.float,String:u.string,ShellExpression:u.special(u.string),"=> ->":u.punctuation,"( )":u.paren,"#[ [ ]":u.squareBracket,"${ { }":u.brace,"-> ?->":u.derefOperator,", ; :: : \\":u.separator,"PhpOpen PhpClose":u.processingInstruction}),cb={__proto__:null,static:311,STATIC:311,class:333,CLASS:333},td=me.deserialize({version:14,states:"$GSQ`OWOOQhQaOOP%oO`OOOOO#t'#H_'#H_O%tO#|O'#DtOOO#u'#Dw'#DwQ&SOWO'#DwO&XO$VOOOOQ#u'#Dx'#DxO&lQaO'#D|O(mQdO'#E}O(tQdO'#EQO*kQaO'#EWO,zQ`O'#ETO-PQ`O'#E^O/nQaO'#E^O/uQ`O'#EfO/zQ`O'#EoO*kQaO'#EoO0VQ`O'#HhO0[Q`O'#E{O0[Q`O'#E{OOQS'#Ic'#IcO0aQ`O'#EvOOQS'#IZ'#IZO2oQdO'#IWO6tQeO'#FUO*kQaO'#FeO*kQaO'#FfO*kQaO'#FgO*kQaO'#FhO*kQaO'#FhO*kQaO'#FkOOQO'#Id'#IdO7RQ`O'#FqOOQO'#Hi'#HiO7ZQ`O'#HOO7uQ`O'#FlO8QQ`O'#H]O8]Q`O'#FvO8eQaO'#FwO*kQaO'#GVO*kQaO'#GYO8}OrO'#G]OOQS'#Iq'#IqOOQS'#Ip'#IpOOQS'#IW'#IWO,zQ`O'#GdO,zQ`O'#GfO,zQ`O'#GkOhQaO'#GmO9UQ`O'#GnO9ZQ`O'#GqO9`Q`O'#GtO9eQeO'#GuO9eQeO'#GvO9eQeO'#GwO9oQ`O'#GxO9tQ`O'#GzO9yQaO'#G{OS,5>SOJ[QdO,5;gOOQO-E;f-E;fOL^Q`O,5;gOLcQpO,5;bO0aQ`O'#EyOLkQtO'#E}OOQS'#Ez'#EzOOQS'#Ib'#IbOM`QaO,5:wO*kQaO,5;nOOQS,5;p,5;pO*kQaO,5;pOMgQdO,5UQaO,5=hO!-eQ`O'#F}O!-jQdO'#IlO!&WQdO,5=iOOQ#u,5=j,5=jO!-uQ`O,5=lO!-xQ`O,5=mO!-}Q`O,5=nO!.YQdO,5=qOOQ#u,5=q,5=qO!.eQ`O,5=rO!.eQ`O,5=rO!.mQdO'#IwO!.{Q`O'#HXO!&WQdO,5=rO!/ZQ`O,5=rO!/fQdO'#IYO!&WQdO,5=vOOQ#u-E;_-E;_O!1RQ`O,5=kOOO#u,5:^,5:^O!1^O#|O,5:^OOO#u-E;^-E;^OOOO,5>p,5>pOOQ#y1G0S1G0SO!1fQ`O1G0XO*kQaO1G0XO!2xQ`O1G0pOOQS1G0p1G0pO!4[Q`O1G0pOOQS'#I_'#I_O*kQaO'#I_OOQS1G0q1G0qO!4cQ`O'#IaO!7lQ`O'#E}O!7yQaO'#EuOOQO'#Ia'#IaO!8TQ`O'#I`O!8]Q`O,5;_OOQS'#FQ'#FQOOQS1G1U1G1UO!8bQdO1G1]O!:dQdO1G1]O!wO#(fQaO'#HdO#(vQ`O,5>vOOQS1G0d1G0dO#)OQ`O1G0dO#)TQ`O'#I^O#*mQ`O'#I^O#*uQ`O,5;ROIbQaO,5;ROOQS1G0u1G0uPOQO'#E}'#E}O#+fQdO1G1RO0aQ`O'#HgO#-hQtO,5;cO#.YQaO1G0|OOQS,5;e,5;eO#0iQtO,5;gO#0vQdO1G0cO*kQaO1G0cO#2cQdO1G1YO#4OQdO1G1[OOQO,5<^,5<^O#4`Q`O'#HjO#4nQ`O,5?ROOQO1G1w1G1wO#4vQ`O,5?ZO!&WQdO1G3TO<_Q`O1G3TOOQ#u1G3U1G3UO#4{Q`O1G3YO!1RQ`O1G3VO#5WQ`O1G3VO#5]QpO'#FoO#5kQ`O'#FoO#5{Q`O'#FoO#6WQ`O'#FoO#6`Q`O'#FsO#6eQ`O'#FtOOQO'#If'#IfO#6lQ`O'#IeO#6tQ`O,5tOOQ#u1G3b1G3bOOQ#u1G3V1G3VO!-xQ`O1G3VO!1UQ`O1G3VOOO#u1G/x1G/xO*kQaO7+%sO#MuQdO7+%sOOQS7+&[7+&[O$ bQ`O,5>yO>UQaO,5;`O$ iQ`O,5;aO$#OQaO'#HfO$#YQ`O,5>zOOQS1G0y1G0yO$#bQ`O'#EYO$#gQ`O'#IXO$#oQ`O,5:sOOQS1G0e1G0eO$#tQ`O1G0eO$#yQ`O1G0iO9yQaO1G0iOOQO,5>O,5>OOOQO-E;b-E;bOOQS7+&O7+&OO>UQaO,5;SO$%`QaO'#HeO$%jQ`O,5>xOOQS1G0m1G0mO$%rQ`O1G0mOOQS,5>R,5>ROOQS-E;e-E;eO$%wQdO7+&hO$'yQtO1G1RO$(WQdO7+%}OOQS1G0i1G0iOOQO,5>U,5>UOOQO-E;h-E;hOOQ#u7+(o7+(oO!&WQdO7+(oOOQ#u7+(t7+(tO#KmQ`O7+(tO0aQ`O7+(tOOQ#u7+(q7+(qO!-xQ`O7+(qO!1UQ`O7+(qO!1RQ`O7+(qO$)sQ`O,5UQaO,5],5>]OOQS-E;o-E;oO$.iQdO7+'hO$.yQpO7+'hO$/RQdO'#IiOOQO,5dOOQ#u,5>d,5>dOOQ#u-E;v-E;vO$;lQaO7+(lO$cOOQS-E;u-E;uO!&WQdO7+(nO$=mQdO1G2TOOQS,5>[,5>[OOQS-E;n-E;nOOQ#u7+(r7+(rO$?nQ`O'#GQO$?uQ`O'#GQO$@ZQ`O'#HUOOQO'#Hy'#HyO$@`Q`O,5=oOOQ#u,5=o,5=oO$@gQpO7+(tOOQ#u7+(x7+(xO!&WQdO7+(xO$@rQdO,5>fOOQS-E;x-E;xO$AQQdO1G4}O$A]Q`O,5=tO$AbQ`O,5=tO$AmQ`O'#H{O$BRQ`O,5?dOOQS1G3_1G3_O#KrQ`O7+(xO$BZQdO,5=|OOQS-E;`-E;`O$CvQdO<Q,5>QOOQO-E;d-E;dO$8YQaO,5:tO$FxQaO'#HcO$GVQ`O,5>sOOQS1G0_1G0_OOQS7+&P7+&PO$G_Q`O7+&TO$HtQ`O1G0nO$JZQ`O,5>POOQO,5>P,5>POOQO-E;c-E;cOOQS7+&X7+&XOOQS7+&T7+&TOOQ#u<UQaO1G1uO$KsQ`O1G1uO$LOQ`O1G1yOOQO1G1y1G1yO$LTQ`O1G1uO$L]Q`O1G1uO$MrQ`O1G1zO>UQaO1G1zOOQO,5>V,5>VOOQO-E;i-E;iOOQS<`OOQ#u-E;r-E;rOhQaO<aOOQO-E;s-E;sO!&WQdO<g,5>gOOQO-E;y-E;yO!&WQdO<UQaO,5;TOOQ#uANAzANAzO#KmQ`OANAzOOQ#uANAwANAwO!-xQ`OANAwO%)vQ`O7+'aO>UQaO7+'aOOQO7+'e7+'eO%+]Q`O7+'aO%+hQ`O7+'eO>UQaO7+'fO%+mQ`O7+'fO%-SQ`O'#HlO%-bQ`O,5?SO%-bQ`O,5?SOOQO1G1{1G1{O$+qQpOAN@dOOQSAN@dAN@dO0aQ`OAN@dO%-jQtOANCgO%-xQ`OAN@dO*kQaOAN@nO%.QQdOAN@nO%.bQpOAN@nOOQS,5>X,5>XOOQS-E;k-E;kOOQO1G2U1G2UO!&WQdO1G2UO$/dQpO1G2UO<_Q`O1G2SO!.YQdO1G2WO!&WQdO1G2SOOQO1G2W1G2WOOQO1G2S1G2SO%.jQaO'#GSOOQO1G2X1G2XOOQSAN@oAN@oOOOQ<UQaO<W,5>WO%6wQ`O,5>WOOQO-E;j-E;jO%6|Q`O1G4nOOQSG26OG26OO$+qQpOG26OO0aQ`OG26OO%7UQdOG26YO*kQaOG26YOOQO7+'p7+'pO!&WQdO7+'pO!&WQdO7+'nOOQO7+'r7+'rOOQO7+'n7+'nO%7fQ`OLD+tO%8uQ`O'#E}O%9PQ`O'#IZO!&WQdO'#HrO%:|QaO,5^,5>^OOQP-E;p-E;pOOQO1G2Y1G2YOOQ#uLD,bLD,bOOQTG27RG27RO!&WQdOLD,xO!&WQdO<wO&EPQdO1G0cO#.YQaO1G0cO&F{QdO1G1YO&HwQdO1G1[O#.YQaO1G1|O#.YQaO7+%sO&JsQdO7+%sO&LoQdO7+%}O#.YQaO7+'hO&NkQdO7+'hO'!gQdO<lQdO,5>wO(@nQdO1G0cO'.QQaO1G0cO(BpQdO1G1YO(DrQdO1G1[O'.QQaO1G1|O'.QQaO7+%sO(FtQdO7+%sO(HvQdO7+%}O'.QQaO7+'hO(JxQdO7+'hO(LzQdO<wO*1sQaO'#HdO*2TQ`O,5>vO*2]QdO1G0cO9yQaO1G0cO*4XQdO1G1YO*6TQdO1G1[O9yQaO1G1|O>UQaO'#HwO*8PQ`O,5=[O*8XQaO'#HbO*8cQ`O,5>tO9yQaO7+%sO*8kQdO7+%sO*:gQ`O1G0iO>UQaO1G0iO*;|QdO7+%}O9yQaO7+'hO*=xQdO7+'hO*?tQ`O,5>cO*AZQ`O,5=|O*BpQdO<UQaO'#FeO>UQaO'#FfO>UQaO'#FgO>UQaO'#FhO>UQaO'#FhO>UQaO'#FkO+'XQaO'#FwO>UQaO'#GVO>UQaO'#GYO+'`QaO,5:mO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO+'gQ`O'#I]O$8YQaO'#EaO+)PQaOG26YO$8YQaO'#I]O+*{Q`O'#I[O++TQaO,5:wO>UQaO,5;nO>UQaO,5;pO++[Q`O,5UQaO1G0XO+9hQ`O1G1]O+;TQ`O1G1]O+]Q`O1G1]O+?xQ`O1G1]O+AeQ`O1G1]O+CQQ`O1G1]O+DmQ`O1G1]O+FYQ`O1G1]O+GuQ`O1G1]O+IbQ`O1G1]O+J}Q`O1G1]O+LjQ`O1G1]O+NVQ`O1G1]O, rQ`O1G1]O,#_Q`O1G0cO>UQaO1G0cO,$zQ`O1G1YO,&gQ`O1G1[O,(SQ`O1G1|O>UQaO1G1|O>UQaO7+%sO,([Q`O7+%sO,)wQ`O7+%}O>UQaO7+'hO,+dQ`O7+'hO,+lQ`O7+'hO,-XQpO7+'hO,-aQ`O<UQaO<UQaOAN@nO,0qQ`OAN@nO,2^QpOAN@nO,2fQ`OG26YO>UQaOG26YO,4RQ`OLD+tO,5nQaO,5:}O>UQaO1G0iO,5uQ`O'#I]O$8YQaO'#FeO$8YQaO'#FfO$8YQaO'#FgO$8YQaO'#FhO$8YQaO'#FhO+)PQaO'#FhO$8YQaO'#FkO,6SQaO'#FwO,6ZQaO'#FwO$8YQaO'#GVO+)PQaO'#GVO$8YQaO'#GYO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO,8YQ`O'#FlO>UQaO'#EaO>UQaO'#I]O,8bQaO,5:wO,8iQaO,5:wO$8YQaO,5;nO+)PQaO,5;nO$8YQaO,5;pO,:hQ`O,5wO-IcQ`O1G0cO-KOQ`O1G0cO$8YQaO1G0cO+)PQaO1G0cO-L_Q`O1G1YO-MzQ`O1G1YO. ZQ`O1G1[O$8YQaO1G1|O$8YQaO7+%sO+)PQaO7+%sO.!vQ`O7+%sO.$cQ`O7+%sO.%rQ`O7+%}O.'_Q`O7+%}O$8YQaO7+'hO.(nQ`O7+'hO.*ZQ`O<fQ`O,5>wO.@RQ`O1G1|O!%WQ`O1G1|O0aQ`O1G1|O0aQ`O7+'hO.@ZQ`O7+'hO.@cQpO7+'hO.@kQpO<UO#X&PO~P>UO!o&SO!s&RO#b&RO~OPgOQ|OU^OW}O[8lOo=yOs#hOx8jOy8jO}`O!O]O!Q8pO!R}O!T8oO!U8kO!V8kO!Y8rO!c8iO!s&VO!y[O#U&WO#W_O#bhO#daO#ebO#peO$T8nO$]8mO$^8nO$aqO$z8qO${!OO$}}O%O}O%V|O'g{O~O!x'SP~PAOO!s&[O#b&[O~OT#TOz#RO!S#UO!b#VO!o!{O!v!yO!y!}O#S#QO#W!zO#`!|O#a!|O#s#PO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dO~O!x&nO~PCqO!x'VX!}'VX#O'VX#X'VX!n'VXV'VX!q'VX#u'VX#w'VXw'VX~P&sO!y$hO#S&oO~Oo$mOs$lO~O!o&pO~O!}&sO#S;dO#U;cO!x'OP~P9yOT6iOz6gO!S6jO!b6kO!o!{O!v8sO!y!}O#S#QO#W!zO#`!|O#a!|O#s#PO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}'PX#X'PX~O#O&tO~PGSO!}&wO#X'OX~O#X&yO~O!}'OO!x'QP~P9yO!n'PO~PCqO!m#oa!o#oa#S#oa#p#qX&s#oa!x#oa#O#oaw#oa~OT#oaz#oa!S#oa!b#oa!v#oa!y#oa#W#oa#`#oa#a#oa#s#oa#z#oa#{#oa#|#oa#}#oa$O#oa$Q#oa$R#oa$S#oa$T#oa$U#oa$V#oa$W#oa$z#oa!}#oa#X#oa!n#oaV#oa!q#oa#u#oa#w#oa~PIpO!s'RO~O!x'UO#l'SO~O!x'VX#l'VX#p#qX#S'VX#U'VX#b'VX!o'VX#O'VXw'VX!m'VX&s'VX~O#S'YO~P*kO!m$Xa&s$Xa!x$Xa!n$Xa~PCqO!m$Ya&s$Ya!x$Ya!n$Ya~PCqO!m$Za&s$Za!x$Za!n$Za~PCqO!m$[a&s$[a!x$[a!n$[a~PCqO!o!{O!y!}O#W!zO#`!|O#a!|O#s#PO$z#dOT$[a!S$[a!b$[a!m$[a!v$[a#S$[a#z$[a#{$[a#|$[a#}$[a$O$[a$Q$[a$R$[a$S$[a$T$[a$U$[a$V$[a$W$[a&s$[a!x$[a!n$[a~Oz#RO~PNyO!m$_a&s$_a!x$_a!n$_a~PCqO!y!}O!}$fX#X$fX~O!}'^O#X'ZX~O#X'`O~O!s$kO#S'aO~O]'cO~O!s'eO~O!s'fO~O$l'gO~O!`'mO#S'kO#U'lO#b'jO$drO!x'XP~P0aO!^'sO!oXO!q'rO~O!s'uO!y$hO~O!y$hO#S'wO~O!y$hO#S'yO~O#u'zO!m$sX!}$sX&s$sX~O!}'{O!m'bX&s'bX~O!m#cO&s#cO~O!q(PO#O(OO~O!m$ka&s$ka!x$ka!n$ka~PCqOl(ROw(SO!o(TO!y!}O~O!o!{O!y!}O#W!zO#`!|O#a!|O#s#PO~OT$yaz$ya!S$ya!b$ya!m$ya!v$ya#S$ya#z$ya#{$ya#|$ya#}$ya$O$ya$Q$ya$R$ya$S$ya$T$ya$U$ya$V$ya$W$ya$z$ya&s$ya!x$ya!}$ya#O$ya#X$ya!n$ya!q$yaV$ya#u$ya#w$ya~P!'WO!m$|a&s$|a!x$|a!n$|a~PCqO#W([O#`(YO#a(YO&r(ZOR&gX!o&gX#b&gX#e&gX&q&gX'f&gX~O'f(_O~P8lO!q(`O~PhO!o(cO!q(dO~O!q(`O&s(gO~PhO!a(kO~O!m(lO~P9yOZ(wOn(xO~O!s(zO~OT6iOz6gO!S6jO!b6kO!v8sO!}({O#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m'jX&s'jX~P!'WO#u)PO~O!})QO!m'`X&s'`X~Ol(RO!o(TO~Ow(SO!o)WO!q)ZO~O!m#cO!oXO&s#cO~O!o%pO!s#yO~OV)aO!})_O!m'kX&s'kX~O])cOs)cO!s#gO#peO~O!o%pO!s#gO#p)hO~OT6iOz6gO!S6jO!b6kO!v8sO!})iO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m&|X&s&|X#O&|X~P!'WOl(ROw(SO!o(TO~O!i)oO&t)oO~OT8vOz8tO!S8wO!b8xO!q)pO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#X)rO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WO!n)rO~PCqOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x'TX!}'TX~P!'WOT'VXz'VX!S'VX!b'VX!o'VX!v'VX!y'VX#S'VX#W'VX#`'VX#a'VX#p#qX#s'VX#z'VX#{'VX#|'VX#}'VX$O'VX$Q'VX$R'VX$S'VX$T'VX$U'VX$V'VX$W'VX$z'VX~O!q)tO!x'VX!}'VX~P!5xO!x#iX!}#iX~P>UO!})vO!x'SX~O!x)xO~O$z#dOT#yiz#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi$W#yi&s#yi!x#yi!}#yi#O#yi#X#yi!n#yi!q#yiV#yi#u#yi#w#yi~P!'WOz#RO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi&s#yi!x#yi!n#yi~P!'WOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi&s#yi!x#yi!n#yi~P!'WOT#TOz#RO!b#VO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dO!S#yi!m#yi&s#yi!x#yi!n#yi~P!'WOT#TOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dO!S#yi!b#yi!m#yi&s#yi!x#yi!n#yi~P!'WOz#RO#S#QO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#z#yi#{#yi&s#yi!x#yi!n#yi~P!'WOz#RO#S#QO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#z#yi#{#yi#|#yi&s#yi!x#yi!n#yi~P!'WOz#RO#S#QO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#z#yi#{#yi#|#yi#}#yi&s#yi!x#yi!n#yi~P!'WOz#RO#S#QO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#z#yi#{#yi#|#yi#}#yi$O#yi&s#yi!x#yi!n#yi~P!'WOz#RO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi&s#yi!x#yi!n#yi~P!'WOz#RO$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi&s#yi!x#yi!n#yi~P!'WOz#RO$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi&s#yi!x#yi!n#yi~P!'WOz#RO$T#`O$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi&s#yi!x#yi!n#yi~P!'WOz#RO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi&s#yi!x#yi!n#yi~P!'WOz#RO$S#_O$T#`O$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi&s#yi!x#yi!n#yi~P!'WOz#RO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi&s#yi!x#yi!n#yi~P!'WO_)yO~P9yO!x)|O~O#S*PO~P9yOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}#Ta#X#Ta#O#Ta!m#Ta&s#Ta!x#Ta!n#TaV#Ta!q#Ta~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}'Pa#X'Pa#O'Pa!m'Pa&s'Pa!x'Pa!n'PaV'Pa!q'Pa~P!'WO#S#oO#U#nO!}&WX#X&WX~P9yO!}&wO#X'Oa~O#X*SO~OT6iOz6gO!S6jO!b6kO!v8sO!}*UO#O*TO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!x'QX~P!'WO!}*UO!x'QX~O!x*WO~O!m#oi!o#oi#S#oi#p#qX&s#oi!x#oi#O#oiw#oi~OT#oiz#oi!S#oi!b#oi!v#oi!y#oi#W#oi#`#oi#a#oi#s#oi#z#oi#{#oi#|#oi#}#oi$O#oi$Q#oi$R#oi$S#oi$T#oi$U#oi$V#oi$W#oi$z#oi!}#oi#X#oi!n#oiV#oi!q#oi#u#oi#w#oi~P#*zO#l'SO!x#ka#S#ka#U#ka#b#ka!o#ka#O#kaw#ka!m#ka&s#ka~OPgOQ|OU^OW}O[4OOo5xOs#hOx3zOy3zO}`O!O]O!Q2^O!R}O!T4UO!U3|O!V3|O!Y2`O!c3xO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T4SO$]4QO$^4SO$aqO$z2_O${!OO$}}O%O}O%V|O'g{O~O#l#oa#U#oa#b#oa~PIpOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#Pi!S#Pi!b#Pi!m#Pi&s#Pi!x#Pi!n#Pi~P!'WOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#vi!S#vi!b#vi!m#vi&s#vi!x#vi!n#vi~P!'WO!m#xi&s#xi!x#xi!n#xi~PCqO!s#gO#peO!}&^X#X&^X~O!}'^O#X'Za~O!s'uO~Ow(SO!o)WO!q*fO~O!s*jO~O#S*lO#U*mO#b*kO#l'SO~O#S*lO#U*mO#b*kO$drO~P0aO#u*oO!x$cX!}$cX~O#U*mO#b*kO~O#b*pO~O#b*rO~P0aO!}*sO!x'XX~O!x*uO~O!y*wO~O!^*{O!oXO!q*zO~O!q*}O!o'ci!m'ci&s'ci~O!q+QO#O+PO~O#b$nO!m&eX!}&eX&s&eX~O!}'{O!m'ba&s'ba~OT$kiz$ki!S$ki!b$ki!m$ki!o$ki!v$ki!y$ki#S$ki#W$ki#`$ki#a$ki#s$ki#u#fa#w#fa#z$ki#{$ki#|$ki#}$ki$O$ki$Q$ki$R$ki$S$ki$T$ki$U$ki$V$ki$W$ki$z$ki&s$ki!x$ki!}$ki#O$ki#X$ki!n$ki!q$kiV$ki~OS+^O]+aOm+^Os$aO!^+dO!_+^O!`+^O!n+hO#b$nO$aqO$drO~P0aO!s+lO~O#W+nO#`+mO#a+mO~O!s+pO#b+pO$}+pO%T+oO~O!n+qO~PCqOc%XXd%XXh%XXj%XXf%XXg%XXe%XX~PhOc+uOd+sOP%WiQ%WiS%WiU%WiW%WiX%Wi[%Wi]%Wi^%Wi`%Wia%Wib%Wik%Wim%Wio%Wip%Wiq%Wis%Wit%Wiu%Wiv%Wix%Wiy%Wi|%Wi}%Wi!O%Wi!P%Wi!Q%Wi!R%Wi!T%Wi!U%Wi!V%Wi!W%Wi!X%Wi!Y%Wi!Z%Wi![%Wi!]%Wi!^%Wi!`%Wi!a%Wi!c%Wi!m%Wi!o%Wi!s%Wi!y%Wi#W%Wi#b%Wi#d%Wi#e%Wi#p%Wi$T%Wi$]%Wi$^%Wi$a%Wi$d%Wi$l%Wi$z%Wi${%Wi$}%Wi%O%Wi%V%Wi&p%Wi'g%Wi&t%Wi!n%Wih%Wij%Wif%Wig%WiY%Wi_%Wii%Wie%Wi~Oc+yOd+vOh+xO~OY+zO_+{O!n,OO~OY+zO_+{Oi%^X~Oi,QO~Oj,RO~O!m,TO~P9yO!m,VO~Of,WO~OT6iOV,XOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO~P!'WOg,YO~O!y,ZO~OZ(wOn(xOP%liQ%liS%liU%liW%liX%li[%li]%li^%li`%lia%lib%lik%lim%lio%lip%liq%lis%lit%liu%liv%lix%liy%li|%li}%li!O%li!P%li!Q%li!R%li!T%li!U%li!V%li!W%li!X%li!Y%li!Z%li![%li!]%li!^%li!`%li!a%li!c%li!m%li!o%li!s%li!y%li#W%li#b%li#d%li#e%li#p%li$T%li$]%li$^%li$a%li$d%li$l%li$z%li${%li$}%li%O%li%V%li&p%li'g%li&t%li!n%lic%lid%lih%lij%lif%lig%liY%li_%lii%lie%li~O#u,_O~O!}({O!m%da&s%da~O!x,bO~O!s%dO!m&dX!}&dX&s&dX~O!})QO!m'`a&s'`a~OS+^OY,iOm+^Os$aO!^+dO!_+^O!`+^O$aqO$drO~O!n,lO~P#JwO!o)WO~O!o%pO!s'RO~O!s#gO#peO!m&nX!}&nX&s&nX~O!})_O!m'ka&s'ka~O!s,rO~OV,sO!n%|X!}%|X~O!},uO!n'lX~O!n,wO~O!m&UX!}&UX&s&UX#O&UX~P9yO!})iO!m&|a&s&|a#O&|a~Oz#RO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT!uq!S!uq!b!uq!m!uq!v!uq&s!uq!x!uq!n!uq~P!'WO!n,|O~PCqOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#ia!}#ia~P!'WO!x&YX!}&YX~PAOO!})vO!x'Sa~O#O-QO~O!}-RO!n&{X~O!n-TO~O!x-UO~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}#Vi#X#Vi~P!'WO!x&XX!}&XX~P9yO!}*UO!x'Qa~O!x-[O~OT#jqz#jq!S#jq!b#jq!m#jq!v#jq#S#jq#u#jq#w#jq#z#jq#{#jq#|#jq#}#jq$O#jq$Q#jq$R#jq$S#jq$T#jq$U#jq$V#jq$W#jq$z#jq&s#jq!x#jq!}#jq#O#jq#X#jq!n#jq!q#jqV#jq~P!'WO#l#oi#U#oi#b#oi~P#*zOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#Pq!S#Pq!b#Pq!m#Pq&s#Pq!x#Pq!n#Pq~P!'WO#u-dO!x$ca!}$ca~O#U-fO#b-eO~O#b-gO~O#S-hO#U-fO#b-eO#l'SO~O#b-jO#l'SO~O#u-kO!x$ha!}$ha~O!`'mO#S'kO#U'lO#b'jO$drO!x&_X!}&_X~P0aO!}*sO!x'Xa~O!oXO#l'SO~O#S-pO#b-oO!x'[P~O!oXO!q-rO~O!q-uO!o'cq!m'cq&s'cq~O!^-wO!oXO!q-rO~O!q-{O#O-zO~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m$si!}$si&s$si~P!'WO!m$jq&s$jq!x$jq!n$jq~PCqO#O-zO#l'SO~O!}-|Ow']X!o']X!m']X&s']X~O#b$nO#l'SO~OS+^O].ROm+^Os$aO!_+^O!`+^O#b$nO$aqO$drO~P0aOS+^O].ROm+^Os$aO!_+^O!`+^O#b$nO$aqO~P0aOS+^O]+aOm+^Os$aO!^+dO!_+^O!`+^O!n.ZO#b$nO$aqO$drO~P0aO!s.^O~O!s._O#b._O$}._O%T+oO~O$}.`O~O#X.aO~Oc%Xad%Xah%Xaj%Xaf%Xag%Xae%Xa~PhOc.dOd+sOP%WqQ%WqS%WqU%WqW%WqX%Wq[%Wq]%Wq^%Wq`%Wqa%Wqb%Wqk%Wqm%Wqo%Wqp%Wqq%Wqs%Wqt%Wqu%Wqv%Wqx%Wqy%Wq|%Wq}%Wq!O%Wq!P%Wq!Q%Wq!R%Wq!T%Wq!U%Wq!V%Wq!W%Wq!X%Wq!Y%Wq!Z%Wq![%Wq!]%Wq!^%Wq!`%Wq!a%Wq!c%Wq!m%Wq!o%Wq!s%Wq!y%Wq#W%Wq#b%Wq#d%Wq#e%Wq#p%Wq$T%Wq$]%Wq$^%Wq$a%Wq$d%Wq$l%Wq$z%Wq${%Wq$}%Wq%O%Wq%V%Wq&p%Wq'g%Wq&t%Wq!n%Wqh%Wqj%Wqf%Wqg%WqY%Wq_%Wqi%Wqe%Wq~Oc.iOd+vOh.hO~O!q(`O~OP6]OQ|OU^OW}O[:fOo>ROs#hOx:dOy:dO}`O!O]O!Q:kO!R}O!T:jO!U:eO!V:eO!Y:oO!c8gO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T:hO$]:gO$^:hO$aqO$z:mO${!OO$}}O%O}O%V|O'g{O~O!m.lO!q.lO~OY+zO_+{O!n.nO~OY+zO_+{Oi%^a~O!x.rO~P>UO!m.tO~O!m.tO~P9yOQ|OW}O!R}O$}}O%O}O%V|O'g{O~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m&ka!}&ka&s&ka~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m$qi!}$qi&s$qi~P!'WOS+^Om+^Os$aO!_+^O!`+^O$aqO$drO~OY/PO~P$?VOS+^Om+^Os$aO!_+^O!`+^O$aqO~O!s/QO~O!n/SO~P#JwOw(SO!o)WO#l'SO~OV/VO!m&na!}&na&s&na~O!})_O!m'ki&s'ki~O!s/XO~OV/YO!n%|a!}%|a~O]/[Os/[O!s#gO#peO!n&oX!}&oX~O!},uO!n'la~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m&Ua!}&Ua&s&Ua#O&Ua~P!'WOz#RO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT!uy!S!uy!b!uy!m!uy!v!uy&s!uy!x!uy!n!uy~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#hi!}#hi~P!'WO_)yO!n&VX!}&VX~P9yO!}-RO!n&{a~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}#Vq#X#Vq~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#[i!}#[i~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#O/cO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!x&Xa!}&Xa~P!'WO#u/iO!x$ci!}$ci~O#b/jO~O#U/lO#b/kO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$ci!}$ci~P!'WO#u/mO!x$hi!}$hi~O!}/oO!x'[X~O#b/qO~O!x/rO~O!oXO!q/uO~O#l'SO!o'cy!m'cy&s'cy~O!m$jy&s$jy!x$jy!n$jy~PCqO#O/xO#l'SO~O!s#gO#peOw&aX!o&aX!}&aX!m&aX&s&aX~O!}-|Ow']a!o']a!m']a&s']a~OU$PO]0QO!R$PO!s$OO!v#}O#b$nO#p2XO~P$?uO!m#cO!o0VO&s#cO~O#X0YO~Oh0_O~OT:tOz:pO!S:vO!b:xO!m0`O!q0`O!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO~P!'WOY%]a_%]a!n%]ai%]a~PhO!x0bO~O!x0bO~P>UO!m0dO~OT6iOz6gO!S6jO!b6kO!v8sO!x0fO#O0eO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO~P!'WO!x0fO~O!x0gO#b0hO#l'SO~O!x0iO~O!s0jO~O!m#cO#u0lO&s#cO~O!s0mO~O!})_O!m'kq&s'kq~O!s0nO~OV0oO!n%}X!}%}X~OT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!n!|i!}!|i~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$cq!}$cq~P!'WO#u0vO!x$cq!}$cq~O#b0wO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$hq!}$hq~P!'WO#S0zO#b0yO!x&`X!}&`X~O!}/oO!x'[a~O#l'SO!o'c!R!m'c!R&s'c!R~O!oXO!q1PO~O!m$j!R&s$j!R!x$j!R!n$j!R~PCqO#O1RO#l'SO~OP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!n1^O!s1YO!y[O#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lOh1_O~OY%[i_%[i!n%[ii%[i~PhOY%]i_%]i!n%]ii%]i~PhO!x1bO~O!x1bO~P>UO!x1eO~O!m#cO#u1iO&s#cO~O$}1jO%V1jO~O!s1kO~OV1lO!n%}a!}%}a~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#]i!}#]i~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$cy!}$cy~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$hy!}$hy~P!'WO#b1nO~O!}/oO!x'[i~O!m$j!Z&s$j!Z!x$j!Z!n$j!Z~PCqOT:uOz:qO!S:wO!b:yO!v=nO#S#QO#z:sO#{:{O#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dO~P!'WOV1uO{1tO~P!5xOV1uO{1tOT&}Xz&}X!S&}X!b&}X!o&}X!v&}X!y&}X#S&}X#W&}X#`&}X#a&}X#s&}X#u&}X#w&}X#z&}X#{&}X#|&}X#}&}X$O&}X$Q&}X$R&}X$S&}X$T&}X$U&}X$V&}X$W&}X$z&}X~OP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!n1xO!s1YO!y[O#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lOY%[q_%[q!n%[qi%[q~PhO!x1zO~O!x%gi~PCqOe1{O~O$}1|O%V1|O~O!s2OO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$c!R!}$c!R~P!'WO!m$j!c&s$j!c!x$j!c!n$j!c~PCqO!s2QO~O!`2SO!s2RO~O!s2VO!m$xi&s$xi~O!s'WO~O!s*]O~OT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$ka#u$ka#w$ka&s$ka!x$ka!n$ka!q$ka#X$ka!}$ka~P!'WO#S2]O~P*kO$l$tO~P#.YOT6iOz6gO!S6jO!b6kO!v8sO#O2[O#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m'PX&s'PX!x'PX!n'PX~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#O3uO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}'PX#X'PX#u'PX#w'PX!m'PX&s'PX!x'PX!n'PXV'PX!q'PX~P!'WO#S3dO~P#.YOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$Xa#u$Xa#w$Xa&s$Xa!x$Xa!n$Xa!q$Xa#X$Xa!}$Xa~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$Ya#u$Ya#w$Ya&s$Ya!x$Ya!n$Ya!q$Ya#X$Ya!}$Ya~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$Za#u$Za#w$Za&s$Za!x$Za!n$Za!q$Za#X$Za!}$Za~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$[a#u$[a#w$[a&s$[a!x$[a!n$[a!q$[a#X$[a!}$[a~P!'WOz2aO#u$[a#w$[a!q$[a#X$[a!}$[a~PNyOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$_a#u$_a#w$_a&s$_a!x$_a!n$_a!q$_a#X$_a!}$_a~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$|a#u$|a#w$|a&s$|a!x$|a!n$|a!q$|a#X$|a!}$|a~P!'WOz2aO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi#u#yi#w#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOT2cOz2aO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!S#yi!m#yi#u#yi#w#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOT2cOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!S#yi!b#yi!m#yi#u#yi#w#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO#S#QO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi#z#yi#{#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO#S#QO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi#z#yi#{#yi#|#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO#S#QO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO#S#QO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$T2nO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$S2mO$T2nO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m#Ta#u#Ta#w#Ta&s#Ta!x#Ta!n#Ta!q#Ta#X#Ta!}#Ta~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m'Pa#u'Pa#w'Pa&s'Pa!x'Pa!n'Pa!q'Pa#X'Pa!}'Pa~P!'WOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#Pi!S#Pi!b#Pi!m#Pi#u#Pi#w#Pi&s#Pi!x#Pi!n#Pi!q#Pi#X#Pi!}#Pi~P!'WOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#vi!S#vi!b#vi!m#vi#u#vi#w#vi&s#vi!x#vi!n#vi!q#vi#X#vi!}#vi~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m#xi#u#xi#w#xi&s#xi!x#xi!n#xi!q#xi#X#xi!}#xi~P!'WOz2aO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT!uq!S!uq!b!uq!m!uq!v!uq#u!uq#w!uq&s!uq!x!uq!n!uq!q!uq#X!uq!}!uq~P!'WOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#Pq!S#Pq!b#Pq!m#Pq#u#Pq#w#Pq&s#Pq!x#Pq!n#Pq!q#Pq#X#Pq!}#Pq~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$jq#u$jq#w$jq&s$jq!x$jq!n$jq!q$jq#X$jq!}$jq~P!'WOz2aO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT!uy!S!uy!b!uy!m!uy!v!uy#u!uy#w!uy&s!uy!x!uy!n!uy!q!uy#X!uy!}!uy~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$jy#u$jy#w$jy&s$jy!x$jy!n$jy!q$jy#X$jy!}$jy~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$j!R#u$j!R#w$j!R&s$j!R!x$j!R!n$j!R!q$j!R#X$j!R!}$j!R~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$j!Z#u$j!Z#w$j!Z&s$j!Z!x$j!Z!n$j!Z!q$j!Z#X$j!Z!}$j!Z~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$j!c#u$j!c#w$j!c&s$j!c!x$j!c!n$j!c!q$j!c#X$j!c!}$j!c~P!'WOP6]OU^O[4POo8^Os#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#S3vO#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OO~P$;lOP6]OU^O[4POo8^Os#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OO~P$;lO#u2uO#w2vO!q&zX#X&zX!}&zX~P0rOP6]OU^O[4POo8^Or2wOs#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#S2tO#U2sO#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OOT#xXz#xX!S#xX!b#xX!m#xX!o#xX!v#xX#`#xX#a#xX#s#xX#u#xX#w#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX&s#xX!x#xX!n#xX!q#xX#X#xX!}#xX~P$;lOP6]OU^O[4POo8^Or4xOs#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#S4uO#U4tO#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OOT#xXz#xX!S#xX!b#xX!o#xX!v#xX!}#xX#O#xX#X#xX#`#xX#a#xX#s#xX#u#xX#w#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX!m#xX&s#xX!x#xX!n#xXV#xX!q#xX~P$;lO!q3PO~P>UO!q5}O#O3gO~OT8vOz8tO!S8wO!b8xO!q3hO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WO!q6OO#O3kO~O!q6PO#O3oO~O#O3oO#l'SO~O#O3pO#l'SO~O#O3sO#l'SO~OP6]OU^O[4POo8^Os#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$l$tO$z4bO${!OO~P$;lOP6]OU^O[4POo8^Os#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#S5eO#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OO~P$;lOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$Xa#O$Xa#X$Xa#u$Xa#w$Xa!m$Xa&s$Xa!x$Xa!n$XaV$Xa!q$Xa~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$Ya#O$Ya#X$Ya#u$Ya#w$Ya!m$Ya&s$Ya!x$Ya!n$YaV$Ya!q$Ya~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$Za#O$Za#X$Za#u$Za#w$Za!m$Za&s$Za!x$Za!n$ZaV$Za!q$Za~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$[a#O$[a#X$[a#u$[a#w$[a!m$[a&s$[a!x$[a!n$[aV$[a!q$[a~P!'WOz4dO!}$[a#O$[a#X$[a#u$[a#w$[aV$[a!q$[a~PNyOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$_a#O$_a#X$_a#u$_a#w$_a!m$_a&s$_a!x$_a!n$_aV$_a!q$_a~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$|a#O$|a#X$|a#u$|a#w$|a!m$|a&s$|a!x$|a!n$|aV$|a!q$|a~P!'WOz4dO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!}#yi#O#yi#X#yi#u#yi#w#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT4fOz4dO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!S#yi!}#yi#O#yi#X#yi#u#yi#w#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT4fOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!S#yi!b#yi!}#yi#O#yi#X#yi#u#yi#w#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO#S#QO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi#z#yi#{#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO#S#QO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO#S#QO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO#S#QO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$T4qO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$S4pO$T4qO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}#Ta#O#Ta#X#Ta#u#Ta#w#Ta!m#Ta&s#Ta!x#Ta!n#TaV#Ta!q#Ta~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}'Pa#O'Pa#X'Pa#u'Pa#w'Pa!m'Pa&s'Pa!x'Pa!n'PaV'Pa!q'Pa~P!'WOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#Pi!S#Pi!b#Pi!}#Pi#O#Pi#X#Pi#u#Pi#w#Pi!m#Pi&s#Pi!x#Pi!n#PiV#Pi!q#Pi~P!'WOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#vi!S#vi!b#vi!}#vi#O#vi#X#vi#u#vi#w#vi!m#vi&s#vi!x#vi!n#viV#vi!q#vi~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}#xi#O#xi#X#xi#u#xi#w#xi!m#xi&s#xi!x#xi!n#xiV#xi!q#xi~P!'WOz4dO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT!uq!S!uq!b!uq!v!uq!}!uq#O!uq#X!uq#u!uq#w!uq!m!uq&s!uq!x!uq!n!uqV!uq!q!uq~P!'WOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#Pq!S#Pq!b#Pq!}#Pq#O#Pq#X#Pq#u#Pq#w#Pq!m#Pq&s#Pq!x#Pq!n#PqV#Pq!q#Pq~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$jq#O$jq#X$jq#u$jq#w$jq!m$jq&s$jq!x$jq!n$jqV$jq!q$jq~P!'WOz4dO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT!uy!S!uy!b!uy!v!uy!}!uy#O!uy#X!uy#u!uy#w!uy!m!uy&s!uy!x!uy!n!uyV!uy!q!uy~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$jy#O$jy#X$jy#u$jy#w$jy!m$jy&s$jy!x$jy!n$jyV$jy!q$jy~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$j!R#O$j!R#X$j!R#u$j!R#w$j!R!m$j!R&s$j!R!x$j!R!n$j!RV$j!R!q$j!R~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$j!Z#O$j!Z#X$j!Z#u$j!Z#w$j!Z!m$j!Z&s$j!Z!x$j!Z!n$j!ZV$j!Z!q$j!Z~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$j!c#O$j!c#X$j!c#u$j!c#w$j!c!m$j!c&s$j!c!x$j!c!n$j!cV$j!c!q$j!c~P!'WO#S5wO~P#.YO!y$hO#S5{O~O!x4ZO#l'SO~O!y$hO#S5|O~OT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$ka#O$ka#X$ka#u$ka#w$ka!m$ka&s$ka!x$ka!n$kaV$ka!q$ka~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#O5vO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!m'PX#u'PX#w'PX&s'PX!x'PX!n'PX!q'PX#X'PX!}'PX~P!'WO#u4vO#w4wO!}&zX#O&zX#X&zXV&zX!q&zX~P0rO!q5QO~P>UO!q8bO#O5hO~OT8vOz8tO!S8wO!b8xO!q5iO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WO!q8cO#O5lO~O!q8dO#O5pO~O#O5pO#l'SO~O#O5qO#l'SO~O#O5tO#l'SO~O$l$tO~P9yOo5zOs$lO~O#S7oO~P9yOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$Xa#O$Xa#X$Xa!m$Xa&s$Xa!x$Xa!n$XaV$Xa!q$Xa~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$Ya#O$Ya#X$Ya!m$Ya&s$Ya!x$Ya!n$YaV$Ya!q$Ya~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$Za#O$Za#X$Za!m$Za&s$Za!x$Za!n$ZaV$Za!q$Za~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$[a#O$[a#X$[a!m$[a&s$[a!x$[a!n$[aV$[a!q$[a~P!'WOz6gO!}$[a#O$[a#X$[aV$[a!q$[a~PNyOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$_a#O$_a#X$_a!m$_a&s$_a!x$_a!n$_aV$_a!q$_a~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$ka#O$ka#X$ka!m$ka&s$ka!x$ka!n$kaV$ka!q$ka~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$|a#O$|a#X$|a!m$|a&s$|a!x$|a!n$|aV$|a!q$|a~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO!}7sO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x'jX~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO!}7uO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x&|X~P!'WOz6gO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!}#yi#O#yi#X#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT6iOz6gO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!S#yi!}#yi#O#yi#X#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT6iOz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!S#yi!b#yi!}#yi#O#yi#X#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO#S#QO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#z#yi#{#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO#S#QO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#z#yi#{#yi#|#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO#S#QO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#z#yi#{#yi#|#yi#}#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO#S#QO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$T6tO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$S6sO$T6tO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WO#S7zO~P>UO!m#Ta&s#Ta!x#Ta!n#Ta~PCqO!m'Pa&s'Pa!x'Pa!n'Pa~PCqO#S;dO#U;cO!x&WX!}&WX~P9yO!}7lO!x'Oa~Oz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#Pi!S#Pi!b#Pi!}#Pi#O#Pi#X#Pi!m#Pi&s#Pi!x#Pi!n#PiV#Pi!q#Pi~P!'WOz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#vi!S#vi!b#vi!}#vi#O#vi#X#vi!m#vi&s#vi!x#vi!n#viV#vi!q#vi~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}#xi#O#xi#X#xi!m#xi&s#xi!x#xi!n#xiV#xi!q#xi~P!'WO!}7sO!x%da~O!x&UX!}&UX~P>UO!}7uO!x&|a~Oz6gO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT!uq!S!uq!b!uq!v!uq!}!uq#O!uq#X!uq!m!uq&s!uq!x!uq!n!uqV!uq!q!uq~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#Vi!}#Vi~P!'WOz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#Pq!S#Pq!b#Pq!}#Pq#O#Pq#X#Pq!m#Pq&s#Pq!x#Pq!n#PqV#Pq!q#Pq~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$jq#O$jq#X$jq!m$jq&s$jq!x$jq!n$jqV$jq!q$jq~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x&ka!}&ka~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x&Ua!}&Ua~P!'WOz6gO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT!uy!S!uy!b!uy!v!uy!}!uy#O!uy#X!uy!m!uy&s!uy!x!uy!n!uyV!uy!q!uy~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#Vq!}#Vq~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$jy#O$jy#X$jy!m$jy&s$jy!x$jy!n$jyV$jy!q$jy~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$j!R#O$j!R#X$j!R!m$j!R&s$j!R!x$j!R!n$j!RV$j!R!q$j!R~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$j!Z#O$j!Z#X$j!Z!m$j!Z&s$j!Z!x$j!Z!n$j!ZV$j!Z!q$j!Z~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$j!c#O$j!c#X$j!c!m$j!c&s$j!c!x$j!c!n$j!cV$j!c!q$j!c~P!'WO#S8[O~P9yO#O8ZO!m'PX&s'PX!x'PX!n'PXV'PX!q'PX~PGSO!y$hO#S8`O~O!y$hO#S8aO~O#u6zO#w6{O!}&zX#O&zX#X&zXV&zX!q&zX~P0rOr6|O#S#oO#U#nO!}#xX#O#xX#X#xXV#xX!q#xX~P2yOr;iO#S9XO#U9VOT#xXz#xX!S#xX!b#xX!m#xX!o#xX!q#xX!v#xX#`#xX#a#xX#s#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX!n#xX!}#xX~P9yOr9WO#S9WO#U9WOT#xXz#xX!S#xX!b#xX!o#xX!v#xX#`#xX#a#xX#s#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX~P9yOr9]O#S;dO#U;cOT#xXz#xX!S#xX!b#xX!o#xX!q#xX!v#xX#`#xX#a#xX#s#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX#X#xX!x#xX!}#xX~P9yO$l$tO~P>UO!q7XO~P>UOT6iOz6gO!S6jO!b6kO!v8sO#O7iO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!x'PX!}'PX~P!'WOP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lO!}7lO!x'OX~O#S9yO~P>UOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$Xa#X$Xa!x$Xa!}$Xa~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$Ya#X$Ya!x$Ya!}$Ya~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$Za#X$Za!x$Za!}$Za~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$[a#X$[a!x$[a!}$[a~P!'WOz8tO$z#dOT$[a!S$[a!b$[a!q$[a!v$[a#S$[a#z$[a#{$[a#|$[a#}$[a$O$[a$Q$[a$R$[a$S$[a$T$[a$U$[a$V$[a$W$[a#X$[a!x$[a!}$[a~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$_a#X$_a!x$_a!}$_a~P!'WO!q=dO#O7rO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$ka#X$ka!x$ka!}$ka~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$|a#X$|a!x$|a!}$|a~P!'WOT8vOz8tO!S8wO!b8xO!q7wO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WOz8tO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#X#yi!x#yi!}#yi~P!'WOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi#X#yi!x#yi!}#yi~P!'WOT8vOz8tO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!S#yi!q#yi#X#yi!x#yi!}#yi~P!'WOT8vOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!S#yi!b#yi!q#yi#X#yi!x#yi!}#yi~P!'WOz8tO#S#QO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#z#yi#{#yi#X#yi!x#yi!}#yi~P!'WOz8tO#S#QO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#z#yi#{#yi#|#yi#X#yi!x#yi!}#yi~P!'WOz8tO#S#QO$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#z#yi#{#yi#|#yi#}#yi#X#yi!x#yi!}#yi~P!'WOz8tO#S#QO$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#z#yi#{#yi#|#yi#}#yi$O#yi#X#yi!x#yi!}#yi~P!'WOz8tO$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi#X#yi!x#yi!}#yi~P!'WOz8tO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi#X#yi!x#yi!}#yi~P!'WOz8tO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi#X#yi!x#yi!}#yi~P!'WOz8tO$T9RO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi#X#yi!x#yi!}#yi~P!'WOz8tO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi#X#yi!x#yi!}#yi~P!'WOz8tO$S9QO$T9RO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi#X#yi!x#yi!}#yi~P!'WOz8tO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi#X#yi!x#yi!}#yi~P!'WOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#Pi!S#Pi!b#Pi!q#Pi#X#Pi!x#Pi!}#Pi~P!'WOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#vi!S#vi!b#vi!q#vi#X#vi!x#vi!}#vi~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q#xi#X#xi!x#xi!}#xi~P!'WO!q=eO#O7|O~Oz8tO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT!uq!S!uq!b!uq!q!uq!v!uq#X!uq!x!uq!}!uq~P!'WOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#Pq!S#Pq!b#Pq!q#Pq#X#Pq!x#Pq!}#Pq~P!'WO!q=iO#O8TO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$jq#X$jq!x$jq!}$jq~P!'WO#O8TO#l'SO~Oz8tO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT!uy!S!uy!b!uy!q!uy!v!uy#X!uy!x!uy!}!uy~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$jy#X$jy!x$jy!}$jy~P!'WO#O8UO#l'SO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$j!R#X$j!R!x$j!R!}$j!R~P!'WO#O8XO#l'SO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$j!Z#X$j!Z!x$j!Z!}$j!Z~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$j!c#X$j!c!x$j!c!}$j!c~P!'WO#S:bO~P>UO#O:aO!q'PX!x'PX~PGSO$l$tO~P$8YOP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$l$tO$z:nO${!OO~P$;lOo8_Os$lO~O#SSOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!s#gO!y[O#SSOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!s#gO!y[O#S=UO#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lOT6iOz6gO!S6jO!b6kO!v8sO#O=SO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#O=RO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m'PX!q'PX!n'PX!}'PX~P!'WOT&zXz&zX!S&zX!b&zX!o&zX!q&zX!v&zX!y&zX#S&zX#W&zX#`&zX#a&zX#s&zX#z&zX#{&zX#|&zX#}&zX$O&zX$Q&zX$R&zX$S&zX$T&zX$U&zX$V&zX$W&zX$z&zX!}&zX~O#u9ZO#w9[O#X&zX!x&zX~P.8oO!y$hO#S=^O~O!q9hO~P>UO!y$hO#S=cO~O!q>OO#O9}O~OT8vOz8tO!S8wO!b8xO!q:OO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m#Ta!q#Ta!n#Ta!}#Ta~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m'Pa!q'Pa!n'Pa!}'Pa~P!'WO!q>PO#O:RO~O!q>QO#O:YO~O#O:YO#l'SO~O#O:ZO#l'SO~O#O:_O#l'SO~O#u;eO#w;gO!m&zX!n&zX~P.8oO#u;fO#w;hOT&zXz&zX!S&zX!b&zX!o&zX!v&zX!y&zX#S&zX#W&zX#`&zX#a&zX#s&zX#z&zX#{&zX#|&zX#}&zX$O&zX$Q&zX$R&zX$S&zX$T&zX$U&zX$V&zX$W&zX$z&zX~O!q;tO~P>UO!q;uO~P>UO!q>XO#OYO#O9WO~OT8vOz8tO!S8wO!b8xO!qZO#O[O#O<{O~O#O<{O#l'SO~O#O9WO#l'SO~O#O<|O#l'SO~O#O=PO#l'SO~O!y$hO#S=|O~Oo=[Os$lO~O!y$hO#S=}O~O!y$hO#S>UO~O!y$hO#S>VO~O!y$hO#S>WO~Oo={Os$lO~Oo>TOs$lO~Oo>SOs$lO~O%O$U$}$d!d$V#b%V#e'g!s#d~",goto:"%&y'mPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP'nP'uPP'{(OPPP(hP(OP(O*ZP*ZPP2W:j:mPP*Z:sBpPBsPBsPP:sCSCVCZ:s:sPPPC^PP:sK^!$S!$S:s!$WP!$W!$W!%UP!.]!7pP!?oP*ZP*Z*ZPPPPP!?rPPPPPPP*Z*Z*Z*ZPP*Z*ZP!E]!GRP!GV!Gy!GR!GR!HP*Z*ZP!HY!Hl!Ib!J`!Jd!J`!Jo!J}!J}!KV!KY!KY*ZPP*ZPP!K^#%[#%[#%`P#%fP(O#%j(O#&S#&V#&V#&](O#&`(O(O#&f#&i(O#&r#&u(O(O(O(O(O#&x(O(O(O(O(O(O(O(O(O#&{!KR(O(O#'_#'o#'r(O(OP#'u#'|#(S#(o#(y#)P#)Z#)b#)h#*d#4X#5T#5Z#5a#5k#5q#5w#6]#6c#6i#6o#6u#6{#7R#7]#7g#7m#7s#7}PPPPPPPP#8T#8X#8}#NO#NR#N]$(f$(r$)X$)_$)b$)e$)k$,X$5v$>_$>b$>h$>k$>n$>w$>{$?X$?k$Bk$CO$C{$K{PP%%y%%}%&Z%&p%&vQ!nQT!qV!rQUOR%x!mRVO}!hPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1a|!hPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1aQ%^!ZQ%g!aQ%l!eQ'd$dQ'q$iQ)[%kQ*y'tQ,](xU-n*v*x+OQ.W+cQ.{,[S/t-s-tQ0T.SS0}/s/wQ1V0RQ1o1OR2P1p0u!OPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;uO>P>Q>X>Y>Z>[3ZfPVX[_bgjklmnoprxyz!S!W!X!Y!]!e!f!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t#}$R$S$U$h$y$}%P%R%S%T%U%c%p%r%}&S&W&p&s&t&w'O'S'U'Y'^'i'm'r'z(O(P(R(S(T(`(l({)P)Z)_)c)i)p)t)v*P*T*U*f*o*s*z*}+P+Q+]+`+d+g+r+u+z,T,V,X,Z,u-Q-R-d-k-r-u-z-{-|.Q.b.d.l.t/[/c/i/m/u/x0V0`0a0d0e0i0v1P1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w5}6O6P6T6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8b8c8d8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;uO>P>Q>X>Y>Z>[3scPVX[_bdegjklmnoprxyz!S!W!X!Y!]!e!f!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t#{#}$R$S$U$h$y$}%P%R%S%T%U%c%m%n%p%r%}&S&W&p&s&t&w'O'S'U'Y'^'i'm'r'z(O(P(R(S(T(`(l({)P)Z)^)_)c)g)h)i)p)t)v*P*T*U*f*o*s*z*}+P+Q+]+`+d+g+r+u+z,T,V,X,Z,u,x-Q-R-d-k-r-u-z-{-|.Q.b.d.l.t/[/c/i/m/u/x0V0`0a0d0e0i0v1P1R1]1a2W2X2Y2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w5}6O6P6T6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8b8c8d8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;uO>P>Q>X>Y>Z>[0phPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0`0a0d0e0i0v1R1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;uRS=p>S>VS=s>T>UR=t>WT'n$h*s!csPVXt!S!j!r!s!w$h$}%P%S%U'i(T(`)W*s+]+g+r+u,g,k.b.d.l0`0a0i1aQ$^rR*`'^Q*x'sQ-t*{R/w-wQ(W$tQ)U%hQ)n%vQ*i'fQ+k(XR-c*jQ(V$tQ)Y%jQ)m%vQ*e'eS*h'f)nS+j(W(XS-b*i*jQ.]+kQ/T,mQ/e-`R/g-cQ(U$tQ)T%hQ)V%iQ)l%vU*g'f)m)nU+i(V(W(XQ,f)UU-a*h*i*jS.[+j+kS/f-b-cQ0X.]R0t/gT+e(T+g[%e!_$b'c+a.R0QR,d)Qb$ov(T+[+]+`+g.P.Q0PR+T'{S+e(T+gT,j)W,kR0W.XT1[0V1]0w|PVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X,_-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;uO>P>Q>X>Y>Z>[R2Y2X|tPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1aW$`t'i+],gS'i$h*sS+](T+gT,g)W,kQ'_$^R*a'_Q*t'oR-m*tQ/p-oS0{/p0|R0|/qQ-}+XR/|-}Q+g(TR.Y+gS+`(T+gS,h)W,kQ.Q+]W.T+`,h.Q/OR/O,gQ)R%eR,e)RQ'|$oR+U'|Q1]0VR1w1]Q${{R(^${Q+t(aR.c+tQ+w(bR.g+wQ+}(cQ,P(dT.m+},PQ(|%`S,a(|7tR7t7VQ(y%^R,^(yQ,k)WR/R,kQ)`%oS,q)`/WR/W,rQ,v)dR/^,vT!uV!rj!iPVX!j!r!s!w(`+r.l0`0a1aQ%Q!SQ(a$}W(h%P%S%U0iQ.e+uQ0Z.bR0[.d|ZPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1aQ#f[U#m_#s&wQ#wbQ$VkQ$WlQ$XmQ$YnQ$ZoQ$[pQ$sx^$uy2_4b6e8q:m:nQ$vzQ%W!WQ%Y!XQ%[!YW%`!]%R(l,VU%s!g&p-RQ%|!yQ&O!zQ&Q!{S&U!})v^&^#R2a4d6g8t:p:qQ&_#SQ&`#TQ&a#UQ&b#VQ&c#WQ&d#XQ&e#YQ&f#ZQ&g#[Q&h#]Q&i#^Q&j#_Q&k#`Q&l#aQ&m#bQ&u#nQ&v#oS&{#t'OQ'X$RQ'Z$SQ'[$UQ(]$yQ(p%TQ)q%}Q)s&SQ)u&WQ*O&tS*['U4ZQ*^'Y^*_2[3u5v8Z:a=R=SQ+S'zQ+V(OQ,`({Q,c)PQ,y)iQ,{)pQ,})tQ-V*PQ-W*TQ-X*U^-]2]3v5w8[:b=T=UQ-i*oQ-x+PQ.k+zQ.w,XQ/`-QQ/h-dQ/n-kQ/y-zQ0r/cQ0u/iQ0x/mQ1Q/xU1X0V1]9WQ1d0eQ1m0vQ1q1RQ2Z2^Q2qjQ2r3yQ2x3zQ2y3|Q2z4OQ2{4QQ2|4SQ2}4UQ3O2`Q3Q2bQ3R2cQ3S2dQ3T2eQ3U2fQ3V2gQ3W2hQ3X2iQ3Y2jQ3Z2kQ3[2lQ3]2mQ3^2nQ3_2oQ3`2pQ3a2sQ3b2tQ3c2uQ3e2vQ3f2wQ3i3PQ3j3dQ3l3gQ3m3hQ3n3kQ3q3oQ3r3pQ3t3sQ4Y4WQ4y3{Q4z3}Q4{4PQ4|4RQ4}4TQ5O4VQ5P4cQ5R4eQ5S4fQ5T4gQ5U4hQ5V4iQ5W4jQ5X4kQ5Y4lQ5Z4mQ5[4nQ5]4oQ5^4pQ5_4qQ5`4rQ5a4sQ5b4tQ5c4uQ5d4vQ5f4wQ5g4xQ5j5QQ5k5eQ5m5hQ5n5iQ5o5lQ5r5pQ5s5qQ5u5tQ6Q4aQ6R3xQ6V6TQ6}6^Q7O6_Q7P6`Q7Q6aQ7R6bQ7S6cQ7T6dQ7U6fU7V,T.t0dQ7W%cQ7Y6hQ7Z6iQ7[6jQ7]6kQ7^6lQ7_6mQ7`6nQ7a6oQ7b6pQ7c6qQ7d6rQ7e6sQ7f6tQ7g6uQ7h6vQ7j6xQ7k6yQ7n6zQ7p6{Q7q6|Q7x7XQ7y7iQ7{7oQ7}7rQ8O7sQ8P7uQ8Q7wQ8R7zQ8S7|Q8V8TQ8W8UQ8Y8XQ8]8fU9U#k&s7lQ9^8jQ9_8kQ9`8lQ9a8mQ9b8nQ9c8oQ9e8pQ9f8rQ9g8sQ9i8uQ9j8vQ9k8wQ9l8xQ9m8yQ9n8zQ9o8{Q9p8|Q9q8}Q9r9OQ9s9PQ9t9QQ9u9RQ9v9SQ9w9TQ9x9ZQ9z9[Q9{9]Q:P9hQ:Q9yQ:T9}Q:V:OQ:W:RQ:[:YQ:^:ZQ:`:_Q:c8iQ;j:dQ;k:eQ;l:fQ;m:gQ;n:hQ;o:iQ;p:jQ;q:kQ;r:lQ;s:oQ;v:rQ;w:sQ;x:tQ;y:uQ;z:vQ;{:wQ;|:xQ;}:yQOQ=h>PQ=j>QQ=u>XQ=v>YQ=w>ZR=x>[0t!OPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;uO>P>Q>X>Y>Z>[S$]r'^Q%k!eS%o!f%rQ)b%pU+X(R(S+dQ,p)_Q,t)cQ/Z,uQ/{-|R0p/[|vPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1a#U#i[bklmnopxyz!W!X!Y!{#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b$R$S$U$y%}&S'Y(O)p+P-z/x0e1R2[2]6x6yd+^(T)W+]+`+g,g,h,k.Q/O!t6w'U2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3z3|4O4Q4S4U5v5w!x;b3u3v3x3y3{3}4P4R4T4V4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t$O=z_j!]!g#k#n#o#s#t%R%T&p&s&t&w'O'z(l({)P)i*P*U,V,X-R6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6z6{6|7X7l7o7r7w7|8T8U8X8Z8[8f8g8h8i#|>]!y!z!}%c&W)t)v*T*o,T-d-k.t/c/i/m0d0v4W6T7i7s7u7z8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9Z9[9]9h9y9}:O:R:Y:Z:_:a:b;c;d=Z=m=n!v>^+z-Q9V9X:d:e:f:g:h:j:k:m:o:p:r:t:v:x:z:|;O;Q;S;U;W;Y;[;^;`;e;g;i;t_0V1]9W:i:l:n:q:s:u:w:y:{:};P;R;T;V;X;Z;];_;a;f;h;u AssignmentExpression ArrayExpression ValueList & VariadicUnpacking ... Pair [ ] ListExpression ValueList Pair Pair SubscriptExpression MemberExpression -> ?-> VariableName DynamicVariable $ ${ CallExpression ArgList NamedArgument SpreadArgument CastExpression UnionType LogicOp OptionalType NamedType QualifiedName \\ NamespaceName ScopedExpression :: ClassMemberName AssignOp UpdateExpression UpdateOp YieldExpression BinaryExpression LogicOp LogicOp LogicOp BitOp BitOp BitOp CompareOp CompareOp BitOp ArithOp ConcatOp ArithOp ArithOp IncludeExpression RequireExpression CloneExpression UnaryExpression ControlOp LogicOp PrintIntrinsic FunctionExpression static ParamList Parameter #[ Attributes Attribute VariadicParameter PropertyParameter UseList ArrowFunction NewExpression class BaseClause ClassInterfaceClause DeclarationList ConstDeclaration VariableDeclarator PropertyDeclaration VariableDeclarator MethodDeclaration UseDeclaration UseList UseInsteadOfClause UseAsClause UpdateExpression ArithOp ShellExpression ThrowExpression Integer Float String MemberExpression SubscriptExpression UnaryExpression ArithOp Interpolation String IfStatement ColonBlock SwitchStatement Block CaseStatement DefaultStatement ColonBlock WhileStatement EmptyStatement DoStatement ForStatement ForSpec SequenceExpression ForeachStatement ForSpec Pair GotoStatement ContinueStatement BreakStatement ReturnStatement TryStatement CatchDeclarator DeclareStatement EchoStatement UnsetStatement ConstDeclaration FunctionDefinition ClassDeclaration InterfaceDeclaration TraitDeclaration EnumDeclaration EnumBody EnumCase NamespaceDefinition NamespaceUseDeclaration UseGroup UseClause UseClause GlobalDeclaration FunctionStaticDeclaration Program",maxTerm:304,nodeProps:[["group",-36,2,8,49,81,83,85,88,93,94,102,106,107,110,111,114,118,123,126,130,132,133,147,148,149,150,153,154,164,165,179,181,182,183,184,185,191,"Expression",-28,74,78,80,82,192,194,199,201,202,205,208,209,210,211,212,214,215,216,217,218,219,220,221,222,225,226,230,231,"Statement",-3,119,121,122,"Type"],["openedBy",69,"phpOpen",76,"{",86,"(",101,"#["],["closedBy",71,"phpClose",77,"}",87,")",158,"]"]],propSources:[hb],skippedNodes:[0],repeatNodeCount:29,tokenData:"!F|_R!]OX$zXY&^YZ'sZ]$z]^&^^p$zpq&^qr)Rrs+Pst+otu2buv5evw6rwx8Vxy>]yz>yz{?g{|@}|}Bb}!OCO!O!PDh!P!QKT!Q!R!!o!R![!$q![!]!,P!]!^!-a!^!_!-}!_!`!1S!`!a!2d!a!b!3t!b!c!7^!c!d!7z!d!e!9W!e!}!7z!}#O!;^#O#P!;z#P#Q!V<%lO8VR9WV&wP%VQOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X<%lO9mQ9rV%VQOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X<%lO9mQ:^O%VQQ:aRO;'S9m;'S;=`:j;=`O9mQ:oW%VQOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X;=`<%l9m<%lO9mQ;[P;=`<%l9mR;fV&wP%VQOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRV<%l~8V~O8V~~%fR=OW&wPOY8VYZ9PZ!^8V!^!_;{!_;'S8V;'S;=`=h;=`<%l9m<%lO8VR=mW%VQOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X;=`<%l8V<%lO9mR>YP;=`<%l8VR>dV!yQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV?QV!xU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR?nY&wP$VQOY$zYZ%fZz$zz{@^{!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR@eW$WQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zRAUY$TQ&wPOY$zYZ%fZ{$z{|At|!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zRA{V$zQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRBiV!}Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_CXZ$TQ%TW&wPOY$zYZ%fZ}$z}!OAt!O!^$z!^!_%k!_!`6U!`!aCz!a;'S$z;'S;=`&W<%lO$zVDRV#`U&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVDo[&wP$UQOY$zYZ%fZ!O$z!O!PEe!P!Q$z!Q![Fs![!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zVEjX&wPOY$zYZ%fZ!O$z!O!PFV!P!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVF^V#UU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRFz_&wP%OQOY$zYZ%fZ!Q$z!Q![Fs![!^$z!^!_%k!_!g$z!g!hGy!h#R$z#R#SJc#S#X$z#X#YGy#Y;'S$z;'S;=`&W<%lO$zRHO]&wPOY$zYZ%fZ{$z{|Hw|}$z}!OHw!O!Q$z!Q![Ii![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRH|X&wPOY$zYZ%fZ!Q$z!Q![Ii![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRIpZ&wP%OQOY$zYZ%fZ!Q$z!Q![Ii![!^$z!^!_%k!_#R$z#R#SHw#S;'S$z;'S;=`&W<%lO$zRJhX&wPOY$zYZ%fZ!Q$z!Q![Fs![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVK[[&wP$VQOY$zYZ%fZz$zz{LQ{!P$z!P!Q,o!Q!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zVLVX&wPOYLQYZLrZzLQz{N_{!^LQ!^!_! s!_;'SLQ;'S;=`!!i<%lOLQVLwT&wPOzMWz{Mj{;'SMW;'S;=`NX<%lOMWUMZTOzMWz{Mj{;'SMW;'S;=`NX<%lOMWUMmVOzMWz{Mj{!PMW!P!QNS!Q;'SMW;'S;=`NX<%lOMWUNXO!eUUN[P;=`<%lMWVNdZ&wPOYLQYZLrZzLQz{N_{!PLQ!P!Q! V!Q!^LQ!^!_! s!_;'SLQ;'S;=`!!i<%lOLQV! ^V!eU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV! vZOYLQYZLrZzLQz{N_{!aLQ!a!bMW!b;'SLQ;'S;=`!!i<%l~LQ~OLQ~~%fV!!lP;=`<%lLQZ!!vm&wP$}YOY$zYZ%fZ!O$z!O!PFs!P!Q$z!Q![!$q![!^$z!^!_%k!_!d$z!d!e!&o!e!g$z!g!hGy!h!q$z!q!r!(a!r!z$z!z!{!){!{#R$z#R#S!%}#S#U$z#U#V!&o#V#X$z#X#YGy#Y#c$z#c#d!(a#d#l$z#l#m!){#m;'S$z;'S;=`&W<%lO$zZ!$xa&wP$}YOY$zYZ%fZ!O$z!O!PFs!P!Q$z!Q![!$q![!^$z!^!_%k!_!g$z!g!hGy!h#R$z#R#S!%}#S#X$z#X#YGy#Y;'S$z;'S;=`&W<%lO$zZ!&SX&wPOY$zYZ%fZ!Q$z!Q![!$q![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!&tY&wPOY$zYZ%fZ!Q$z!Q!R!'d!R!S!'d!S!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!'k[&wP$}YOY$zYZ%fZ!Q$z!Q!R!'d!R!S!'d!S!^$z!^!_%k!_#R$z#R#S!&o#S;'S$z;'S;=`&W<%lO$zZ!(fX&wPOY$zYZ%fZ!Q$z!Q!Y!)R!Y!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!)YZ&wP$}YOY$zYZ%fZ!Q$z!Q!Y!)R!Y!^$z!^!_%k!_#R$z#R#S!(a#S;'S$z;'S;=`&W<%lO$zZ!*Q]&wPOY$zYZ%fZ!Q$z!Q![!*y![!^$z!^!_%k!_!c$z!c!i!*y!i#T$z#T#Z!*y#Z;'S$z;'S;=`&W<%lO$zZ!+Q_&wP$}YOY$zYZ%fZ!Q$z!Q![!*y![!^$z!^!_%k!_!c$z!c!i!*y!i#R$z#R#S!){#S#T$z#T#Z!*y#Z;'S$z;'S;=`&W<%lO$zR!,WX!qQ&wPOY$zYZ%fZ![$z![!]!,s!]!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!,zV#sQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!-hV!mU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!.S[$RQOY$zYZ%fZ!^$z!^!_!.x!_!`!/i!`!a*c!a!b!0]!b;'S$z;'S;=`&W<%l~$z~O$z~~%fR!/PW$SQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!/pX$RQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`$z!`!a*c!a;'S$z;'S;=`&W<%lO$zP!0bR!iP!_!`!0k!r!s!0p#d#e!0pP!0pO!iPP!0sQ!j!k!0y#[#]!0yP!0|Q!r!s!0k#d#e!0kV!1ZX#uQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`)r!`!a!1v!a;'S$z;'S;=`&W<%lO$zV!1}V#OU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!2kX$RQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`!3W!`!a!.x!a;'S$z;'S;=`&W<%lO$zR!3_V$RQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!3{[!vQ&wPOY$zYZ%fZ}$z}!O!4q!O!^$z!^!_%k!_!`$z!`!a!6P!a!b!6m!b;'S$z;'S;=`&W<%lO$zV!4vX&wPOY$zYZ%fZ!^$z!^!_%k!_!`$z!`!a!5c!a;'S$z;'S;=`&W<%lO$zV!5jV#aU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!6WV!gU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!6tW#zQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!7eV$]Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!8Ra&wP!s^OY$zYZ%fZ!Q$z!Q![!7z![!^$z!^!_%k!_!c$z!c!}!7z!}#R$z#R#S!7z#S#T$z#T#o!7z#o$g$z$g&j!7z&j;'S$z;'S;=`&W<%lO$z_!9_e&wP!s^OY$zYZ%fZr$zrs!:psw$zwx8Vx!Q$z!Q![!7z![!^$z!^!_%k!_!c$z!c!}!7z!}#R$z#R#S!7z#S#T$z#T#o!7z#o$g$z$g&j!7z&j;'S$z;'S;=`&W<%lO$zR!:wV&wP'gQOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!;eV#WU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!mZ!^!=u!^!_!@u!_#O!=u#O#P!Aq#P#S!=u#S#T!B{#T;'S!=u;'S;=`!Ci<%lO!=uR!>rV&wPO#O!?X#O#P!?q#P#S!?X#S#T!@j#T;'S!?X;'S;=`!@o<%lO!?XQ!?[VO#O!?X#O#P!?q#P#S!?X#S#T!@j#T;'S!?X;'S;=`!@o<%lO!?XQ!?tRO;'S!?X;'S;=`!?};=`O!?XQ!@QWO#O!?X#O#P!?q#P#S!?X#S#T!@j#T;'S!?X;'S;=`!@o;=`<%l!?X<%lO!?XQ!@oO${QQ!@rP;=`<%l!?XR!@x]OY!=uYZ!>mZ!a!=u!a!b!?X!b#O!=u#O#P!Aq#P#S!=u#S#T!B{#T;'S!=u;'S;=`!Ci<%l~!=u~O!=u~~%fR!AvW&wPOY!=uYZ!>mZ!^!=u!^!_!@u!_;'S!=u;'S;=`!B`;=`<%l!?X<%lO!=uR!BcWO#O!?X#O#P!?q#P#S!?X#S#T!@j#T;'S!?X;'S;=`!@o;=`<%l!=u<%lO!?XR!CSV${Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!ClP;=`<%l!=uV!CvV!oU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!DfY#}Q#lS&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`#p$z#p#q!EU#q;'S$z;'S;=`&W<%lO$zR!E]V#{Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!EyV!nQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!FgV$^Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z",tokenizers:[sb,ab,Ob,0,1,2,3,ob],topRules:{Template:[0,72],Program:[1,232]},dynamicPrecedences:{284:1},specialized:[{term:81,get:(i,e)=>Ku(i)<<1,external:Ku},{term:81,get:i=>cb[i]||-1}],tokenPrec:29354});var fb=de.define({name:"php",parser:td.configure({props:[ye.add({IfStatement:Ze({except:/^\s*({|else\b|elseif\b|endif\b)/}),TryStatement:Ze({except:/^\s*({|catch\b|finally\b)/}),SwitchBody:i=>{let e=i.textAfter,t=/^\s*\}/.test(e),n=/^\s*(case|default)\b/.test(e);return i.baseIndent+(t?0:n?1:2)*i.unit},ColonBlock:i=>i.baseIndent+i.unit,"Block EnumBody DeclarationList":vr({closing:"}"}),ArrowFunction:i=>i.baseIndent+i.unit,"String BlockComment":()=>null,Statement:Ze({except:/^({|end(for|foreach|switch|while)\b)/})}),Te.add({"Block EnumBody DeclarationList SwitchBody ArrayExpression ValueList":Zt,ColonBlock(i){return{from:i.from+1,to:i.to}},BlockComment(i){return{from:i.from+2,to:i.to-2}}})]}),languageData:{commentTokens:{block:{open:"/*",close:"*/"},line:"//"},indentOnInput:/^\s*(?:case |default:|end(?:if|for(?:each)?|switch|while)|else(?:if)?|\{|\})$/,wordChars:"$",closeBrackets:{stringPrefixes:["b","B"]}}});function id(i={}){let e=[],t;if(i.baseLanguage!==null)if(i.baseLanguage)t=i.baseLanguage;else{let n=Ti({matchClosingTags:!1});e.push(n.support),t=n.language}return new re(fb.configure({wrap:t&&Si(n=>n.type.isTop?{parser:t.parser,overlay:r=>r.name=="Text"}:null),top:i.plain?"Program":"Template"}),e)}var ub=me.deserialize({version:14,states:"%^QYQPOOO!YQQO'#CaO#RQQO'#CrOOQO'#Ct'#CtQYQPOOOOQO'#C}'#C}O#]QQO'#CzO$ZQQO'#CoOOQO'#Cz'#CzOOQO'#Cu'#CuO$lQQO,58{OOQO,58{,58{O$sQQO,59^O$sQQO,59^OOQO,59^,59^OOQO-E6r-E6rO$zQQO'#CfOOQO,58|,58|OOQO'#C|'#C|O%]QSO'#C{O%hQQO,59ZOOQO-E6s-E6sOOQO1G.g1G.gO%mQQO1G.xOOQO1G.x1G.xO%tQQO,59QO%yQSO'#CvO&bQSO,59gOOQO1G.u1G.uOOQO7+$d7+$dOOQO1G.l1G.lOOQO,59b,59bOOQO-E6t-E6t",stateData:"&{~OmOSPOS~OSPOeQOgRO~OVUOZTO[TO]TO^WO_WO`WOaWObWOtVOuWO~ORZO~PeOVUOZTO[TO]TO^WO_WO`WObWOtVOuWO~Oa[Od^O~P!aOX`ORnXVnXZnX[nX]nX^nX_nX`nXanXbnXtnXunXdnX~OVbOZTO[TO]TOsoP~ORfO~PeOdhO~PeOVbOZTO[TO]TOWoP~OrjOsoXWoX~OslO~OdmO~PeOWnO~OVbOZTO[TO]TOrjXsjXWjX~OrjOsoaWoa~Og[]a_^`bVmPZ`~",goto:"#brPPPPPswPPP!PPPPPPPPPwPPsP!S!Y!hPPP!n!v!|#TTROS]WPQY[]gRaUQSOR_SQYPQ]QUeY]gRg[QkcRpk]XPQY[]gQdVRi`ScV`Roj[WPQY[]gVbV`j",nodeNames:"\u26A0 BlockComment Template }} {{ InsertBlock Function Identifier ) ( FunctionParamList String Boolean Number ChainedIdentifier Comparison Operator CodeTag Math Array %} {% CodeBlock PlainText",maxTerm:37,nodeProps:[["openedBy",3,"{{",8,"(",20,"{%"],["closedBy",4,"}}",9,")",21,"%}"]],skippedNodes:[0,1],repeatNodeCount:3,tokenData:"#Jr~R!^OX$}XY&ZYZ&ZZ]$}]^&Z^p$}pq&Zqr'Wrs(Ysu$}uv-cvw$}wx.gxy3Wyz3nz{4U{|4r|}5Y}!O5r!O!P>u!P!Q?]!Q!R:[!R![=m![!]?y!]!^$}!^!_@a!_!`@}!`!a@a!a!c$}!c!}6}!}#OAk#O#P$}#P#QBR#Q#R$}#R#S6}#S#T$}#T#UBi#U#V!'f#V#X6}#X#Y!,h#Y#Z# Y#Z#]6}#]#^#'g#^#a6}#a#b#.T#b#c#5r#c#d#8[#d#g6}#g#h#9h#h#i#AV#i#j!.Q#j#k!@V#k#l#Co#l#o6}#o#p#Ge#p#q>u#q#r#In#r;'S$};'S;=`&O<%lO$}P%STgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}P%fWOs$}tu$}v#o$}#p;'S$};'S;=`&O<%l~$}~O$}~~&UP&RP;=`<%l$}P&ZOgP~&b[gPm~OX$}XY&ZYZ&ZZ]$}]^&Z^p$}pq&Zq#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~']VgPO!_$}!_!`'r!`#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~'yTgP_~O#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~(aXgPZ~Or(Yrs(|s#O(Y#O#P)d#P#o(Y#o#p){#p;'S(Y;'S;=`,n<%lO(Y~)TTgPZ~O#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~)iUgPO#o(Y#o#p){#p;'S(Y;'S;=`,t;=`<%l*|<%lO(Y~*Q^Z~Or(Yrs(|st*|tu(Yuv*|v#O(Y#O#P)d#P#o(Y#o#p*|#p;'S(Y;'S;=`,n<%l~(Y~O(Y~~&U~+RVZ~Or*|rs+hs#O*|#O#P+m#P;'S*|;'S;=`,h<%lO*|~+mOZ~~+pRO;'S*|;'S;=`+y;=`O*|~,OWZ~Or*|rs+hs#O*|#O#P+m#P;'S*|;'S;=`,h;=`<%l*|<%lO*|~,kP;=`<%l*|~,qP;=`<%l(Y~,yWZ~Or*|rs+hs#O*|#O#P+m#P;'S*|;'S;=`,h;=`<%l(Y<%lO*|~-jVgPb~O#o$}#o#p%c#p#q$}#q#r.P#r;'S$};'S;=`&O<%lO$}R.WTdQgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~.nXgPZ~Ow.gwx(|x#O.g#O#P/Z#P#o.g#o#p/r#p;'S.g;'S;=`2c<%lO.g~/`UgPO#o.g#o#p/r#p;'S.g;'S;=`2i;=`<%l0v<%lO.g~/w_Z~Os.gst0vtu.guv0vvw.gwx(|x#O.g#O#P/Z#P#o.g#o#p0v#p;'S.g;'S;=`2c<%l~.g~O.g~~&U~0{VZ~Ow0vwx+hx#O0v#O#P1b#P;'S0v;'S;=`2]<%lO0v~1eRO;'S0v;'S;=`1n;=`O0v~1sWZ~Ow0vwx+hx#O0v#O#P1b#P;'S0v;'S;=`2];=`<%l0v<%lO0v~2`P;=`<%l0v~2fP;=`<%l.g~2nWZ~Ow0vwx+hx#O0v#O#P1b#P;'S0v;'S;=`2];=`<%l.g<%lO0vR3_TXQgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}V3uTWUgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~4]VgPb~Oz$}z{4r{#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~4yTgPb~O#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}V5cTrSuQgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~5{`gPb~V~O}$}}!O6}!O!P8T!P!Q$}!Q!R:[!R![=m![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~7U_gPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~8Y^gPO}$}}!O9U!O!Q$}!Q![9U![!c$}!c!}9U!}#R$}#R#S9U#S#T$}#T#o9U#o#p%c#p;'S$};'S;=`&O<%lO$}~9]_gP^~O}$}}!O9U!O!P8T!P!Q$}!Q![9U![!c$}!c!}9U!}#R$}#R#S9U#S#T$}#T#o9U#o#p%c#p;'S$};'S;=`&O<%lO$}~:e_gP]~V~O}$}}!O6}!O!P;d!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~;i^gPO}$}}!O9U!O!Q$}!Q![|TgP`~O#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~?dVgPb~O!P$}!P!Q4r!Q#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}R@QTuQgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~@hVgP_~O!_$}!_!`'r!`#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~AUVgP`~O!_$}!_!`'r!`#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}RArTtQgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}VBYTsUgPO#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~BpegPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#b6}#b#cDR#c#d6}#d#eFg#e#i6}#i#jKe#j#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~DYagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#W6}#W#XE_#X#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~Eh_gP_~V~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~FnagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#d6}#d#eGs#e#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~GzagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#`6}#`#aIP#a#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~IWagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#m6}#m#nJ]#n#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~Jf_gPa~V~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~KlagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#h6}#h#iLq#i#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~LxagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#c6}#c#dM}#d#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~NUagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#Y! Z#Y#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~! bagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#g6}#g#h!!g#h#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!!nagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#V6}#V#W!#s#W#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!#z`gPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#U!$|#U#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!%TagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#d6}#d#e!&Y#e#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!&aagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#YJ]#Y#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!'magPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#`6}#`#a!(r#a#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!(yagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#c6}#c#d!*O#d#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!*VagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#V6}#V#W!+[#W#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!+cagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#_6}#_#`J]#`#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!,oegPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#`6}#`#a!.Q#a#b6}#b#c!/^#c#l6}#l#m!Hz#m#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!.XagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#g6}#g#h!&Y#h#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!/eagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#W6}#W#X!0j#X#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!0qkgPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#U!2f#U#V!'f#V#Y6}#Y#Z!3x#Z#]6}#]#^!6b#^#a6}#a#b!7n#b#g6}#g#h!OVgPO#k$}#k#l!>e#l#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~!>jVgPO#]$}#]#^!?P#^#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~!?UVgPO#h$}#h#i!?k#i#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~!?pVgPO#[$}#[#]'r#]#o$}#o#p%c#p;'S$};'S;=`&O<%lO$}~!@^agPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#Y!Ac#Y#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!AjagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#f6}#f#g!Bo#g#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!BvagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#U6}#U#V!C{#V#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!DS`gPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#U!EU#U#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!E]agPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#h6}#h#i!Fb#i#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!FiagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#]6}#]#^!Gn#^#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!GuagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#a6}#a#bJ]#b#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!IRagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#h6}#h#i!JW#i#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!J_agPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#Y!Kd#Y#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!KkagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#b6}#b#c!Lp#c#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!LwagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#W6}#W#X!M|#X#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~!NTagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#g6}#g#hJ]#h#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~# abgPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#U#!i#U#c6}#c#d!5U#d#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#!pagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#`6}#`#a##u#a#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~##|agPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#g6}#g#h#%R#h#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#%YagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#Y#&_#Y#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#&h_gP[~V~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#'negPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#Y6}#Y#ZJ]#Z#b6}#b#c#)P#c#g6}#g#hE_#h#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#)YagP_~V~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#V6}#V#W#*_#W#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#*fagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#`6}#`#a#+k#a#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#+ragPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#i6}#i#j#,w#j#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#-OagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#W6}#W#X!&Y#X#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#.[`gPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#U#/^#U#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#/ecgPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#V6}#V#W!:T#W#h6}#h#i#0p#i#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#0wagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#V6}#V#W#1|#W#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#2TagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#[6}#[#]#3Y#]#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#3aagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#Y#4f#Y#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#4magPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#g6}#g#hE_#h#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#5yagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#c6}#c#d#7O#d#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#7VagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#h6}#h#iE_#i#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#8cagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#f6}#f#gE_#g#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#9ocgPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#X6}#X#Y#:z#Y#h6}#h#i#m#g#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#>tagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#h6}#h#i#?y#i#o6}#o#p%c#p;'S$};'S;=`&O<%lO$}~#@QagPV~O}$}}!O6}!O!P8T!P!Q$}!Q![6}![!c$}!c!}6}!}#R$}#R#S6}#S#T$}#T#g6}#g#h!=65&&i<=90||i==95||i>=97&&i<=122||i>=161}function wb(i){return i==9||i==10||i==13||i==32}var rd=null,sd=null,od=0;function el(i,e){let t=i.pos+e;if(sd==i&&od==t)return rd;for(;wb(i.peek(e));)e++;let n="";for(;;){let r=i.peek(e);if(!xb(r))break;n+=String.fromCharCode(r),e++}return sd=i,od=t,rd=n||null}function Od(i,e){this.name=i,this.parent=e,this.hash=e?e.hash:0;for(let t=0;t{if(i.next==60){if(i.advance(),i.next==47){i.advance();let t=el(i,0);if(!t)return i.acceptToken(gb);if(e.context&&t==e.context.name)return i.acceptToken(pb);for(let n=e.context;n;n=n.parent)if(n.name==t)return i.acceptToken(mb,-2);i.acceptToken($b)}else if(i.next!=33&&i.next!=63)return i.acceptToken(JO)}},{contextual:!0});function tl(i,e){return new H(t=>{for(let n=0,r=0;;r++){if(t.next<0){r&&t.acceptToken(i);break}if(t.next==e.charCodeAt(n)){if(n++,n==e.length){r>=e.length&&t.acceptToken(i,1-e.length);break}}else n=t.next==e.charCodeAt(0)?1:0;t.advance()}})}var Tb=tl(Sb,"-->"),zb=tl(Qb,"?>"),Xb=tl(yb,"]]>"),Wb=ne({Text:u.content,"StartTag StartCloseTag EndTag SelfCloseEndTag":u.angleBracket,TagName:u.tagName,"MismatchedCloseTag/Tagname":[u.tagName,u.invalid],AttributeName:u.attributeName,AttributeValue:u.attributeValue,Is:u.definitionOperator,"EntityReference CharacterReference":u.character,Comment:u.blockComment,ProcessingInst:u.processingInstruction,DoctypeDecl:u.documentMeta,Cdata:u.special(u.string)}),ld=me.deserialize({version:14,states:",SOQOaOOOrOxO'#CfOzOpO'#CiO!tOaO'#CgOOOP'#Cg'#CgO!{OrO'#CrO#TOtO'#CsO#]OpO'#CtOOOP'#DS'#DSOOOP'#Cv'#CvQQOaOOOOOW'#Cw'#CwO#eOxO,59QOOOP,59Q,59QOOOO'#Cx'#CxO#mOpO,59TO#uO!bO,59TOOOP'#C{'#C{O$TOaO,59RO$[OpO'#CoOOOP,59R,59ROOOQ'#C|'#C|O$dOrO,59^OOOP,59^,59^OOOS'#C}'#C}O$lOtO,59_OOOP,59_,59_O$tOpO,59`O$|OpO,59`OOOP-E6t-E6tOOOW-E6u-E6uOOOP1G.l1G.lOOOO-E6v-E6vO%UO!bO1G.oO%UO!bO1G.oO%dOpO'#CkO%lO!bO'#CyO%zO!bO1G.oOOOP1G.o1G.oOOOP1G.w1G.wOOOP-E6y-E6yOOOP1G.m1G.mO&VOpO,59ZO&_OpO,59ZOOOQ-E6z-E6zOOOP1G.x1G.xOOOS-E6{-E6{OOOP1G.y1G.yO&gOpO1G.zO&gOpO1G.zOOOP1G.z1G.zO&oO!bO7+$ZO&}O!bO7+$ZOOOP7+$Z7+$ZOOOP7+$c7+$cO'YOpO,59VO'bOpO,59VO'jO!bO,59eOOOO-E6w-E6wO'xOpO1G.uO'xOpO1G.uOOOP1G.u1G.uO(QOpO7+$fOOOP7+$f7+$fO(YO!bO<`#X;'S%y;'S;=`&_<%lO%yX>eV{WOr%ysv%yw#T%y#T#U>z#U;'S%y;'S;=`&_<%lO%yX?PV{WOr%ysv%yw#h%y#h#i?f#i;'S%y;'S;=`&_<%lO%yX?kV{WOr%ysv%yw#T%y#T#Us.from<=t&&s.to>=t),r=n&&n.getChild("AttributeName");return r?i.sliceString(r.from,r.to):""}function nl(i){for(let e=i&&i.parent;e;e=e.parent)if(e.name=="Element")return e;return null}function Zb(i,e){var t;let n=A(i).resolveInner(e,-1),r=null;for(let s=n;!r&&s.parent;s=s.parent)(s.name=="OpenTag"||s.name=="CloseTag"||s.name=="SelfClosingTag"||s.name=="MismatchedCloseTag")&&(r=s);if(r&&(r.to>e||r.lastChild.type.isError)){let s=r.parent;if(n.name=="TagName")return r.name=="CloseTag"||r.name=="MismatchedCloseTag"?{type:"closeTag",from:n.from,context:s}:{type:"openTag",from:n.from,context:nl(s)};if(n.name=="AttributeName")return{type:"attrName",from:n.from,context:r};if(n.name=="AttributeValue")return{type:"attrValue",from:n.from,context:r};let o=n==r||n.name=="Attribute"?n.childBefore(e):n;return o?.name=="StartTag"?{type:"openTag",from:e,context:nl(s)}:o?.name=="StartCloseTag"&&o.to<=e?{type:"closeTag",from:e,context:s}:o?.name=="Is"?{type:"attrValue",from:e,context:r}:o?{type:"attrName",from:e,context:r}:null}else if(n.name=="StartCloseTag")return{type:"closeTag",from:e,context:n.parent};for(;n.parent&&n.to==e&&!(!((t=n.lastChild)===null||t===void 0)&&t.type.isError);)n=n.parent;return n.name=="Element"||n.name=="Text"||n.name=="Document"?{type:"tag",from:e,context:n.name=="Element"?n:nl(n)}:null}var sl=class{constructor(e,t,n){this.attrs=t,this.attrValues=n,this.children=[],this.name=e.name,this.completion=Object.assign(Object.assign({type:"type"},e.completion||{}),{label:this.name}),this.openCompletion=Object.assign(Object.assign({},this.completion),{label:"<"+this.name}),this.closeCompletion=Object.assign(Object.assign({},this.completion),{label:"",boost:2}),this.closeNameCompletion=Object.assign(Object.assign({},this.completion),{label:this.name+">"}),this.text=e.textContent?e.textContent.map(r=>({label:r,type:"text"})):[]}},rl=/^[:\-\.\w\u00b7-\uffff]*$/;function ad(i){return Object.assign(Object.assign({type:"property"},i.completion||{}),{label:i.name})}function hd(i){return typeof i=="string"?{label:`"${i}"`,type:"constant"}:/^"/.test(i.label)?i:Object.assign(Object.assign({},i),{label:`"${i.label}"`})}function Yb(i,e){let t=[],n=[],r=Object.create(null);for(let l of e){let a=ad(l);t.push(a),l.global&&n.push(a),l.values&&(r[l.name]=l.values.map(hd))}let s=[],o=[],O=Object.create(null);for(let l of i){let a=n,h=r;l.attributes&&(a=a.concat(l.attributes.map(f=>typeof f=="string"?t.find(d=>d.label==f)||{label:f,type:"property"}:(f.values&&(h==r&&(h=Object.create(h)),h[f.name]=f.values.map(hd)),ad(f)))));let c=new sl(l,a,h);O[c.name]=c,s.push(c),l.top&&o.push(c)}o.length||(o=s);for(let l=0;l{var a;let{doc:h}=l.state,c=Zb(l.state,l.pos);if(!c||c.type=="tag"&&!l.explicit)return null;let{type:f,from:d,context:p}=c;if(f=="openTag"){let m=o,$=il(h,p);if($){let g=O[$];m=g?.children||s}return{from:d,options:m.map(g=>g.completion),validFor:rl}}else if(f=="closeTag"){let m=il(h,p);return m?{from:d,to:l.pos+(h.sliceString(l.pos,l.pos+1)==">"?1:0),options:[((a=O[m])===null||a===void 0?void 0:a.closeNameCompletion)||{label:m+">",type:"type"}],validFor:rl}:null}else if(f=="attrName"){let m=O[Hr(h,p)];return{from:d,options:m?.attrs||n,validFor:rl}}else if(f=="attrValue"){let m=Rb(h,p,d);if(!m)return null;let $=O[Hr(h,p)],g=($?.attrValues||r)[m];return!g||!g.length?null:{from:d,to:l.pos+(h.sliceString(l.pos,l.pos+1)=='"'?1:0),options:g,validFor:/^"[^"]*"?$/}}else if(f=="tag"){let m=il(h,p),$=O[m],g=[],Q=p&&p.lastChild;m&&(!Q||Q.name!="CloseTag"||Hr(h,Q)!=m)&&g.push($?$.closeCompletion:{label:"",type:"type",boost:2});let k=g.concat(($?.children||(p?s:o)).map(y=>y.openCompletion));if(p&&$?.text.length){let y=p.firstChild;y.to>l.pos-20&&!/\S/.test(l.state.sliceDoc(y.to,l.pos))&&(k=k.concat($.text))}return{from:d,options:k,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}else return null}}var cd=de.define({name:"xml",parser:ld.configure({props:[ye.add({Element(i){let e=/^\s*<\//.test(i.textAfter);return i.lineIndent(i.node.from)+(e?0:i.unit)},"OpenTag CloseTag SelfClosingTag"(i){return i.column(i.node.from)+i.unit}}),Te.add({Element(i){let e=i.firstChild,t=i.lastChild;return!e||e.name!="OpenTag"?null:{from:e.to,to:t.name=="CloseTag"?t.from:i.to}}}),hn.add({"OpenTag CloseTag":i=>i.getChild("TagName")})]}),languageData:{commentTokens:{block:{open:""}},indentOnInput:/^\s*<\/$/}});function fd(i={}){return new re(cd,cd.data.of({autocomplete:Yb(i.elements||[],i.attributes||[])}))}var T=async i=>{let e=await window.importVersioned("legacy-modes");return xr.define(e[i])},Vb={bash:()=>T("shell"),c:()=>T("c"),css:async()=>_r(),"c++":()=>T("cpp"),"c#":()=>T("csharp"),clj:()=>T("clojure"),clojure:()=>T("clojure"),csharp:()=>T("csharp"),dart:()=>T("dart"),diff:()=>T("diff"),for:()=>T("fortran"),fortran:()=>T("fortran"),"f#":()=>T("fSharp"),fsharp:()=>T("fSharp"),go:()=>T("go"),haskell:()=>T("haskell"),hs:()=>T("haskell"),html:async()=>Ti(),ini:()=>T("properties"),java:()=>T("java"),javascript:async()=>ei(),json:async()=>lf(),js:async()=>ei(),jl:()=>T("julia"),julia:()=>T("julia"),kotlin:()=>T("kotlin"),latex:()=>T("stex"),lua:()=>T("lua"),markdown:async()=>Fr(),matlab:()=>T("octave"),md:async()=>Fr(),mdown:async()=>Fr(),ml:()=>T("sml"),mssql:()=>T("msSQL"),mysql:()=>T("mySQL"),nginx:()=>T("nginx"),octave:()=>T("octave"),pas:()=>T("pascal"),pascal:()=>T("pascal"),perl:()=>T("perl"),pgsql:()=>T("pgSQL"),php:async i=>{let e=i.includes("T("perl"),"pl/sql":()=>T("plSQL"),postgresql:()=>T("pgSQL"),powershell:()=>T("powerShell"),properties:()=>T("properties"),ocaml:()=>T("oCaml"),py:()=>T("python"),python:()=>T("python"),rb:()=>T("ruby"),rs:()=>T("rust"),ruby:()=>T("ruby"),rust:()=>T("rust"),scala:()=>T("scala"),scheme:()=>T("scheme"),shell:()=>T("shell"),sh:()=>T("shell"),smarty:()=>T("smarty"),stext:()=>T("stex"),swift:()=>T("swift"),toml:()=>T("toml"),ts:async()=>ei({typescript:!0}),twig:async()=>nd(),typescript:async()=>ei({typescript:!0}),sql:()=>T("standardSQL"),sqlite:()=>T("sqlite"),vbs:()=>T("vbScript"),vbscript:()=>T("vbScript"),"vb.net":()=>T("vb"),vbnet:()=>T("vb"),xml:async()=>fd(),yaml:()=>T("yaml"),yml:()=>T("yaml")};function ud(i,e){let t=i.trim().replace(/^\./g,"").toLowerCase(),n=Vb[t];if(!(typeof n>"u"))return n(e)}var dd=new WeakMap;function Wi(i,e){let t=new ct;e.extensions.push(t.of([]));let n={usage:i,editorViewConfig:e,libEditorView:v,libEditorState:j,libCompartment:ct};window.$events.emitPublic(e.parent,"library-cm6::pre-init",n);let r=new v(e);return dd.set(r,t),window.$events.emitPublic(e.parent,"library-cm6::post-init",{editorView:r,...n}),r}async function pd(i,e,t){let n=dd.get(i),r=await ud(e,t);i.dispatch({effects:n.reconfigure(r||[])})}var _t=class{constructor(e){this.ev=e}getContent(){return this.ev.state.doc.toString()}setContent(e){let{doc:t}=this.ev.state;this.ev.dispatch({changes:{from:0,to:t.length,insert:e}})}focus(){this.ev.focus()}setMode(e,t=""){pd(this.ev,e,t)}};function Cb(i){let e='',t='',n=document.createElement("button");n.setAttribute("type","button"),n.classList.add("cm-copy-button"),n.innerHTML=e,i.dom.appendChild(n);let r=620,s=60;n.addEventListener("click",()=>{ph(i.state.doc.toString()),n.classList.add("success"),setTimeout(()=>{n.innerHTML=t},s/2),setTimeout(()=>{n.classList.remove("success")},r),setTimeout(()=>{n.innerHTML=e},r+s/2)})}function md(i){let e=i.querySelector("code[class^=language-]");i.innerHTML=i.innerHTML.replace(//gi,` +`);let t=i.textContent.trimEnd(),n="";e!==null&&(n=e.className.replace("language-",""));let r=document.createElement("div");i.parentNode.insertBefore(r,i);let s=Wi("content-code-block",{parent:r,doc:t,extensions:Ho(r)});new _t(s).setMode(n,t),i.remove(),Cb(s)}function bP(i){let e=i.querySelectorAll("pre");for(let t of e)md(t)}function PP(){let i=document.querySelectorAll(".page-content pre, .comment-box .content pre");for(let e of i)md(e)}function xP(i,e,t,n){let r=Wi("content-code-block",{parent:i,doc:t,extensions:Ho(i),root:e}),s=new _t(r);return s.setMode(n,t),s}function wP(i,e){let t=i.textContent,n={parent:i.parentElement,doc:t,extensions:[...Vr(i.parentElement)]},r=new _t(Wi("code-editor",n));return r.setMode(e,t),i.style.display="none",r}function kP(i,e){let t=i.value,n={parent:i.parentElement,doc:t,extensions:[...Vr(i.parentElement),v.updateListener.of(o=>{o.docChanged&&(i.value=o.state.doc.toString())})]},r=Wi("code-input",n),s=new _t(r);return s.setMode(e,t),i.style.display="none",s}function vP(i,e,t,n){let r=i.textContent,s={parent:i.parentElement,doc:r,extensions:[st.of(n),...Vr(i.parentElement),v.updateListener.of(O=>{e(O)}),v.domEventHandlers(t)]};window.$events.emitPublic(i,"editor-markdown-cm6::pre-init",{editorViewConfig:s});let o=Wi("markdown-editor",s);return new _t(o).setMode("markdown",""),i.style.display="none",o}export{PP as highlight,bP as highlightWithin,kP as inlineEditor,vP as markdownEditor,wP as popupEditor,xP as wysiwygView}; //# sourceMappingURL=code.js.map diff --git a/public/dist/export-styles.css b/public/dist/export-styles.css index e011236c667..566a27bb189 100644 --- a/public/dist/export-styles.css +++ b/public/dist/export-styles.css @@ -1 +1 @@ -:root{--font-body: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;--font-code: Lucida Console, DejaVu Sans Mono, Ubuntu Mono, Monaco, monospace;--color-primary: #206ea7;--color-primary-light: rgba(32,110,167,0.15);--color-link: #206ea7;--color-page: #206ea7;--color-page-draft: #7e50b1;--color-chapter: #af4d0d;--color-book: #077b70;--color-bookshelf: #a94747;--color-positive: #0f7d15;--color-negative: #ab0f0e;--color-info: #0288D1;--color-warning: #cf4d03;--bg-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='100%25' width='100%25'%3E%3Cdefs%3E%3Cpattern id='doodad' width='19' height='19' viewBox='0 0 40 40' patternUnits='userSpaceOnUse' patternTransform='rotate(143)'%3E%3Crect width='100%25' height='100%25' fill='rgba(42, 67, 101,0)'/%3E%3Cpath d='M-10 30h60v20h-60zM-10-10h60v20h-60' fill='rgba(26, 32, 44,0)'/%3E%3Cpath d='M-10 10h60v20h-60zM-10-30h60v20h-60z' fill='rgba(0, 0, 0,0.05)'/%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23doodad)' height='200%25' width='200%25'/%3E%3C/svg%3E")}:root.dark-mode{--bg-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='100%25' width='100%25'%3E%3Cdefs%3E%3Cpattern id='doodad' width='19' height='19' viewBox='0 0 40 40' patternUnits='userSpaceOnUse' patternTransform='rotate(143)'%3E%3Crect width='100%25' height='100%25' fill='rgba(42, 67, 101,0)'/%3E%3Cpath d='M-10 30h60v20h-60zM-10-10h60v20h-60' fill='rgba(26, 32, 44,0)'/%3E%3Cpath d='M-10 10h60v20h-60zM-10-30h60v20h-60z' fill='rgba(255, 255, 255,0.05)'/%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23doodad)' height='200%25' width='200%25'/%3E%3C/svg%3E");color-scheme:only dark;--color-positive: #4aa850;--color-negative: #e85c5b;--color-warning: #de8a5a}:root:not(.dark-mode){color-scheme:only light}*{box-sizing:border-box;outline-color:var(--color-primary);outline-width:1px}*:focus{outline-style:dotted}html{height:100%;overflow-y:scroll;background-color:#f2f2f2}html.flexbox{overflow-y:hidden}html.dark-mode{background-color:#111}body{font-size:14px;line-height:1.6;color:#444;-webkit-font-smoothing:antialiased;height:100%;display:flex;flex-direction:column}html.dark-mode body{color:#aaa}body,button,input,select,label,textarea{font-family:var(--font-body)}pre,#markdown-editor-input,.text-mono,.code-base,span.code,code{font-family:var(--font-code)}h1{font-size:3.425em;line-height:1.22222222em;margin-top:.48888889em;margin-bottom:.48888889em}h2{font-size:2.8275em;line-height:1.294117647em;margin-top:.8627451em;margin-bottom:.43137255em}h3{font-size:2.333em;line-height:1.221428572em;margin-top:.78571429em;margin-bottom:.43137255em}h4{font-size:1.666em;line-height:1.375em;margin-top:.78571429em;margin-bottom:.43137255em}h1,h2,h3,h4,h5,h6{font-weight:400;position:relative;display:block;font-family:var(--font-heading, var(--font-body));color:#222}html.dark-mode h1,html.dark-mode h2,html.dark-mode h3,html.dark-mode h4,html.dark-mode h5,html.dark-mode h6{color:#bbb}h1 .subheader,h2 .subheader,h3 .subheader,h4 .subheader,h5 .subheader,h6 .subheader{font-size:.5em;line-height:1em;color:#969696}h5{font-size:1.4em}h5,h6{line-height:1.2em;margin-top:.78571429em;margin-bottom:.66em}@media screen and (max-width: 600px){h1{font-size:2.8275em}h2{font-size:2.333em}h3{font-size:1.666em}h4{font-size:1.333em}h5{font-size:1.161616em}}.list-heading{font-size:2rem}h2.list-heading{font-size:1.333rem}a{color:var(--color-link);fill:currentColor;cursor:pointer;text-decoration:none;transition:filter ease-in-out 80ms;line-height:1.6}a:hover{text-decoration:underline}a.icon{display:inline-block}a svg{position:relative;display:inline-block}a:focus img:only-child{outline:2px dashed var(--color-link);outline-offset:2px}a.no-link-style{color:inherit}a.no-link-style:hover{text-decoration:none}.blended-links a{color:inherit}.blended-links a svg{fill:currentColor}p,ul,ol,pre,table,blockquote{margin-top:.3em;margin-bottom:1.375em}hr{border:0;height:1px;background:#eaeaea;margin-bottom:24px}html.dark-mode hr{background:#555}hr.faded{background-image:linear-gradient(to right, #FFF, #e3e0e0 20%, #e3e0e0 80%, #FFF)}hr.darker{background:#ddd}html.dark-mode hr.darker{background:#666}hr.margin-top,hr.even{margin-top:24px}strong,b,.bold,.strong{font-weight:bold}strong>strong,strong>b,strong>.bold,strong>.strong,b>strong,b>b,b>.bold,b>.strong,.bold>strong,.bold>b,.bold>.bold,.bold>.strong,.strong>strong,.strong>b,.strong>.bold,.strong>.strong{font-weight:bolder}em,i,.italic{font-style:italic}small,p.small,span.small,.text-small{font-size:.75rem}sup,.superscript{vertical-align:super;font-size:.8em}sub,.subscript{vertical-align:sub;font-size:.8em}pre{font-size:12px;border:1px solid #ddd;background-color:#fff;border-color:#ddd;border-radius:4px;padding-left:26px;position:relative;padding-top:3px;padding-bottom:3px}html.dark-mode pre{background-color:#2b2b2b}html.dark-mode pre{border-color:#111}pre:before{content:"";display:block;position:absolute;top:0;width:22.4px;left:0;height:100%;background-color:#f5f5f5;border-right:1px solid #ddd}html.dark-mode pre:before{background-color:#313335}html.dark-mode pre:before{border-right:none}@media print{pre{padding-left:12px}pre:before{display:none}}blockquote{display:block;position:relative;border-left:4px solid rgba(0,0,0,0);border-left-color:var(--color-primary);background-color:#f8f8f8;padding:12px 16px 12px 32px;overflow:auto}html.dark-mode blockquote{background-color:#333}blockquote:before{content:"“";font-size:2em;font-weight:bold;position:absolute;top:12px;left:12px;color:#777}.text-mono{font-family:var(--font-code)}.text-uppercase{text-transform:uppercase}.text-capitals{text-transform:capitalize}.code-base,span.code,code{font-size:.84em;border:1px solid #ddd;border-radius:3px;background-color:#f8f8f8;border-color:#ddd}html.dark-mode .code-base,html.dark-mode span.code,html.dark-mode code{background-color:#2b2b2b}html.dark-mode .code-base,html.dark-mode span.code,html.dark-mode code{border-color:#444}code{display:inline;padding:1px 3px;white-space:pre-wrap;line-height:1.2em}span.code{padding:1px 6px}pre code{background-color:rgba(0,0,0,0);border:0;font-size:1em;display:block;line-height:1.6}span.highlight{font-weight:bold;padding:2px 4px}ul,ol{padding-left:32px;padding-right:32px;display:flow-root}ul p,ol p{margin:0}ul{list-style:disc}ul ul{list-style:circle}ul label{margin:0}ol{list-style:decimal}li>ol,li>ul{margin-top:0;margin-bottom:0;margin-block-end:0;margin-block-start:0;padding-block-end:0;padding-block-start:0;padding-left:19.2px;padding-right:19.2px}li.checkbox-item,li.task-list-item{display:list-item;list-style:none;margin-left:-19.2px}li.checkbox-item input[type=checkbox],li.task-list-item input[type=checkbox]{margin-right:6px}li.checkbox-item li.checkbox-item,li.checkbox-item li.task-list-item,li.task-list-item li.checkbox-item,li.task-list-item li.task-list-item{margin-left:6px}.underlined{text-decoration:underline}.text-center{text-align:center}.text-left{text-align:start}.text-right{text-align:end}@media screen and (min-width: 360px){.text-xxs-center{text-align:center}.text-xxs-left{text-align:start}.text-xxs-right{text-align:end}}@media screen and (min-width: 400px){.text-xs-center{text-align:center}.text-xs-left{text-align:start}.text-xs-right{text-align:end}}@media screen and (min-width: 600px){.text-s-center{text-align:center}.text-s-left{text-align:start}.text-s-right{text-align:end}}@media screen and (min-width: 880px){.text-m-center{text-align:center}.text-m-left{text-align:start}.text-m-right{text-align:end}}@media screen and (min-width: 1000px){.text-l-center{text-align:center}.text-l-left{text-align:start}.text-l-right{text-align:end}}@media screen and (min-width: 1100px){.text-xl-center{text-align:center}.text-xl-left{text-align:start}.text-xl-right{text-align:end}}.text-bigger{font-size:1.1em}.text-large{font-size:1.6666em}.no-color{color:inherit}.break-text{white-space:normal;word-wrap:break-word;overflow-wrap:break-word}.text-limit-lines-1{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.text-limit-lines-2{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.header-group{margin:16px 0}.header-group h1,.header-group h2,.header-group h3,.header-group h4,.header-group h5,.header-group h6{margin:0}span.sep{color:#bbb;padding:0 6px}.list>*{display:block}.svg-icon{width:1em;height:1em;display:inline-block;position:relative;bottom:-0.105em;margin-inline-end:6px;pointer-events:none;fill:currentColor}table{min-width:100px;max-width:100%}table thead{background-color:#f8f8f8;font-weight:500}html.dark-mode table thead{background-color:#333}table td,table th{min-width:10px;padding:6px 8px;border:1px solid #ddd;overflow:auto;line-height:1.2;word-break:break-word;vertical-align:top}table td p,table th p{margin:0}table.table{width:100%}table.table tr td,table.table tr th{border-bottom:1px solid rgba(0,0,0,.05)}table.table th,table.table td{text-align:start;border:none;padding:12px 12px;vertical-align:middle;margin:0;overflow:visible}table.table th{font-weight:bold}table.table tr:hover{background-color:#f2f2f2}html.dark-mode table.table tr:hover{background-color:#333}table.table .text-right{text-align:end}table.table .text-center{text-align:center}table.table td.actions{overflow:visible}table.table a{display:inline-block}table.table.expand-to-padding{margin-left:-12px;margin-right:-12px;width:calc(100% + (2*12px));max-width:calc(100% + (2*12px))}table.no-style td{border:0;padding:0}table.list-table{margin:0 -6px}table.list-table td{border:0;vertical-align:middle;padding:6px}.page-content{width:100%;max-width:840px;margin:0 auto;overflow-wrap:break-word}.page-content .align-left{text-align:left}.page-content img.align-left,.page-content table.align-left{float:left !important;margin:6px 16px 16px 0}.page-content .align-right{text-align:right !important}.page-content img.align-right,.page-content table.align-right{float:right !important;margin:6px 0 6px 12px}.page-content .align-center{text-align:center}.page-content img.align-center{display:block}.page-content img.align-center,.page-content table.align-center{margin-left:auto;margin-right:auto}.page-content img{max-width:100%;height:auto}.page-content h1,.page-content h2,.page-content h3,.page-content h4,.page-content h5,.page-content h6,.page-content pre{clear:left}.page-content hr{clear:both;margin:16px 0}.page-content table{hyphens:auto;table-layout:fixed;max-width:100%;height:auto !important}.page-content ins,.page-content del{text-decoration:none}.page-content ins{background:#dbffdb}.page-content del{background:#ffecec}.page-content details{border:1px solid;border-color:#ddd;margin-bottom:1em;padding:12px}html.dark-mode .page-content details{border-color:#555}.page-content details>summary{margin-top:-12px;margin-left:-12px;margin-right:-12px;margin-bottom:-12px;font-weight:bold;background-color:#eee;padding:6px 12px}html.dark-mode .page-content details>summary{background-color:#333}.page-content details[open]>summary{margin-bottom:12px;border-bottom:1px solid;border-color:#ddd}html.dark-mode .page-content details[open]>summary{border-color:#555}.page-content details>summary+*{margin-top:.2em}.page-content details:after{content:"";display:block;clear:both}.page-content li>input[type=checkbox]{vertical-align:top;margin-top:.3em}.page-content p:empty{min-height:1.6em}.page-content.page-revision pre code{white-space:pre-wrap}.page-content .cm-editor{margin-bottom:1.375em}.page-content video{max-width:100%}.callout{border-left:3px solid #bbb;background-color:#eee;padding:12px 12px 12px 32px;display:block;position:relative;overflow:auto}.callout:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiMwMTUzODAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6Ii8+PC9zdmc+");background-repeat:no-repeat;content:"";width:1.2em;height:1.2em;left:8px;top:50%;margin-top:-9px;display:inline-block;position:absolute;line-height:1;opacity:.8}.callout.success{border-left-color:#0f7d15;background-color:#eafdeb;color:#063409}html.dark-mode .callout.success{border-left-color:#4aa850}html.dark-mode .callout.success{background-color:#122913}html.dark-mode .callout.success{color:#4aa850}.callout.success:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiMzNzZjMzkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE1bC01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6Ii8+PC9zdmc+")}.callout.danger{border-left-color:#ab0f0e;background-color:#fcdbdb;color:#4d0706}html.dark-mode .callout.danger{border-left-color:#e85c5b}html.dark-mode .callout.danger{background-color:#250505}html.dark-mode .callout.danger{color:#e85c5b}.callout.danger:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiNiOTE4MTgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiLz4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==")}.callout.info{border-left-color:#0288d1;color:#01466c;background-color:#d3efff}html.dark-mode .callout.info{border-left-color:#0288d1}html.dark-mode .callout.info{color:#0288d1}html.dark-mode .callout.info{background-color:#001825}.callout.warning{border-left-color:#cf4d03;background-color:#fee3d3;color:#6a2802}html.dark-mode .callout.warning{border-left-color:#de8a5a}html.dark-mode .callout.warning{background-color:#30170a}html.dark-mode .callout.warning{color:#de8a5a}.callout.warning:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiNiNjUzMWMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiLz48L3N2Zz4=")}.callout a{color:inherit;text-decoration:underline}html,body{background-color:#fff}body{font-family:"DejaVu Sans",-apple-system,BlinkMacSystemFont,"Segoe UI","Oxygen","Ubuntu","Roboto","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;margin:0;padding:0;display:block}table{border-spacing:0;border-collapse:collapse}.page-content{overflow:hidden}pre{padding-left:12px}pre:before{display:none}pre code{white-space:pre-wrap}.page-break{page-break-after:always}@media screen{.page-break{border-top:1px solid #ddd}}ul.contents ul li{list-style:circle}.chapter-hint{color:#888;margin-top:32px}.chapter-hint+h1{margin-top:0}body.export-format-pdf{font-size:14px;line-height:1.2}body.export-format-pdf h1,body.export-format-pdf h2,body.export-format-pdf h3,body.export-format-pdf h4,body.export-format-pdf h5,body.export-format-pdf h6{line-height:1.2}body.export-format-pdf table{max-width:800px !important;font-size:.8em;width:100% !important}body.export-format-pdf table td{width:auto !important}body.export-format-pdf .page-content .float{float:none !important}body.export-format-pdf .page-content img.align-left,body.export-format-pdf .page-content img.align-right{float:none !important;clear:both;display:block}body.export-format-pdf.export-engine-dompdf .page-content a>img{max-width:700px}body.export-format-pdf.export-engine-dompdf .page-content td a>img{max-width:100%}/*# sourceMappingURL=export-styles.css.map */ +:root{--font-body: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;--font-code: Lucida Console, DejaVu Sans Mono, Ubuntu Mono, Monaco, monospace;--color-primary: #206ea7;--color-primary-light: rgba(32,110,167,0.15);--color-link: #206ea7;--color-page: #206ea7;--color-page-draft: #7e50b1;--color-chapter: #af4d0d;--color-book: #077b70;--color-bookshelf: #a94747;--color-positive: #0f7d15;--color-negative: #ab0f0e;--color-info: #0288D1;--color-warning: #cf4d03;--bg-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='100%25' width='100%25'%3E%3Cdefs%3E%3Cpattern id='doodad' width='19' height='19' viewBox='0 0 40 40' patternUnits='userSpaceOnUse' patternTransform='rotate(143)'%3E%3Crect width='100%25' height='100%25' fill='rgba(42, 67, 101,0)'/%3E%3Cpath d='M-10 30h60v20h-60zM-10-10h60v20h-60' fill='rgba(26, 32, 44,0)'/%3E%3Cpath d='M-10 10h60v20h-60zM-10-30h60v20h-60z' fill='rgba(0, 0, 0,0.05)'/%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23doodad)' height='200%25' width='200%25'/%3E%3C/svg%3E")}:root.dark-mode{--bg-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='100%25' width='100%25'%3E%3Cdefs%3E%3Cpattern id='doodad' width='19' height='19' viewBox='0 0 40 40' patternUnits='userSpaceOnUse' patternTransform='rotate(143)'%3E%3Crect width='100%25' height='100%25' fill='rgba(42, 67, 101,0)'/%3E%3Cpath d='M-10 30h60v20h-60zM-10-10h60v20h-60' fill='rgba(26, 32, 44,0)'/%3E%3Cpath d='M-10 10h60v20h-60zM-10-30h60v20h-60z' fill='rgba(255, 255, 255,0.05)'/%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23doodad)' height='200%25' width='200%25'/%3E%3C/svg%3E");color-scheme:only dark;--color-positive: #4aa850;--color-negative: #e85c5b;--color-warning: #de8a5a}:root:not(.dark-mode){color-scheme:only light}*{box-sizing:border-box;outline-color:var(--color-primary);outline-width:1px}*:focus{outline-style:dotted}html{height:100%;overflow-y:scroll;background-color:#f2f2f2}html.flexbox{overflow-y:hidden}html.dark-mode{background-color:#111}body{font-size:14px;line-height:1.6;color:#444;-webkit-font-smoothing:antialiased;height:100%;display:flex;flex-direction:column}html.dark-mode body{color:#aaa}body,button,input,select,label,textarea{font-family:var(--font-body)}pre,#markdown-editor-input,.text-mono,.code-base,span.code,code{font-family:var(--font-code)}h1{font-size:3.425em;line-height:1.22222222em;margin-top:.48888889em;margin-bottom:.48888889em}h2{font-size:2.8275em;line-height:1.294117647em;margin-top:.8627451em;margin-bottom:.43137255em}h3{font-size:2.333em;line-height:1.221428572em;margin-top:.78571429em;margin-bottom:.43137255em}h4{font-size:1.666em;line-height:1.375em;margin-top:.78571429em;margin-bottom:.43137255em}h1,h2,h3,h4,h5,h6{font-weight:400;position:relative;display:block;font-family:var(--font-heading, var(--font-body));color:#222}html.dark-mode h1,html.dark-mode h2,html.dark-mode h3,html.dark-mode h4,html.dark-mode h5,html.dark-mode h6{color:#bbb}h1 .subheader,h2 .subheader,h3 .subheader,h4 .subheader,h5 .subheader,h6 .subheader{font-size:.5em;line-height:1em;color:#969696}h5{font-size:1.4em}h5,h6{line-height:1.2em;margin-top:.78571429em;margin-bottom:.66em}@media screen and (max-width: 600px){h1{font-size:2.8275em}h2{font-size:2.333em}h3{font-size:1.666em}h4{font-size:1.333em}h5{font-size:1.161616em}}.list-heading{font-size:2rem}h2.list-heading{font-size:1.333rem}a{color:var(--color-link);fill:currentColor;cursor:pointer;text-decoration:none;transition:filter ease-in-out 80ms;line-height:1.6}a:hover{text-decoration:underline}a.icon{display:inline-block}a svg{position:relative;display:inline-block}a:focus img:only-child{outline:2px dashed var(--color-link);outline-offset:2px}a.no-link-style{color:inherit}a.no-link-style:hover{text-decoration:none}.blended-links a{color:inherit}.blended-links a svg{fill:currentColor}p,ul,ol,pre,table,blockquote{margin-top:.3em;margin-bottom:1.375em}hr{border:0;height:1px;background:#eaeaea;margin-bottom:24px}html.dark-mode hr{background:#555}hr.faded{background-image:linear-gradient(to right, #FFF, #e3e0e0 20%, #e3e0e0 80%, #FFF)}hr.darker{background:#ddd}html.dark-mode hr.darker{background:#666}hr.margin-top,hr.even{margin-top:24px}strong,b,.bold,.strong{font-weight:bold}strong>strong,strong>b,strong>.bold,strong>.strong,b>strong,b>b,b>.bold,b>.strong,.bold>strong,.bold>b,.bold>.bold,.bold>.strong,.strong>strong,.strong>b,.strong>.bold,.strong>.strong{font-weight:bolder}em,i,.italic{font-style:italic}small,p.small,span.small,.text-small{font-size:.75rem}sup,.superscript{vertical-align:super;font-size:.8em}sub,.subscript{vertical-align:sub;font-size:.8em}pre{font-size:12px;border:1px solid #ddd;background-color:#fff;border-color:#ddd;border-radius:4px;padding-left:26px;position:relative;padding-top:3px;padding-bottom:3px}html.dark-mode pre{background-color:#2b2b2b}html.dark-mode pre{border-color:#111}pre:before{content:"";display:block;position:absolute;top:0;width:22.4px;left:0;height:100%;background-color:#f5f5f5;border-right:1px solid #ddd}html.dark-mode pre:before{background-color:#313335}html.dark-mode pre:before{border-right:none}@media print{pre{padding-left:12px}pre:before{display:none}}blockquote{display:block;position:relative;border-left:4px solid rgba(0,0,0,0);border-left-color:var(--color-primary);background-color:#f8f8f8;padding:12px 16px 12px 32px;overflow:auto}html.dark-mode blockquote{background-color:#333}blockquote:before{content:"“";font-size:2em;font-weight:bold;position:absolute;top:12px;left:12px;color:#777}.text-mono{font-family:var(--font-code)}.text-uppercase{text-transform:uppercase}.text-capitals{text-transform:capitalize}.code-base,span.code,code{font-size:.84em;border:1px solid #ddd;border-radius:3px;background-color:#f8f8f8;border-color:#ddd}html.dark-mode .code-base,html.dark-mode span.code,html.dark-mode code{background-color:#2b2b2b}html.dark-mode .code-base,html.dark-mode span.code,html.dark-mode code{border-color:#444}code{display:inline;padding:1px 3px;white-space:pre-wrap;line-height:1.2em}span.code{padding:1px 6px}pre code{background-color:rgba(0,0,0,0);border:0;font-size:1em;display:block;line-height:1.6}span.highlight{font-weight:bold;padding:2px 4px}ul,ol{padding-left:32px;padding-right:32px;display:flow-root}ul p,ol p{margin:0}ul{list-style:disc}ul ul{list-style:circle}ul label{margin:0}ol{list-style:decimal}li>ol,li>ul{margin-top:0;margin-bottom:0;margin-block-end:0;margin-block-start:0;padding-block-end:0;padding-block-start:0;padding-left:19.2px;padding-right:19.2px}li.checkbox-item,li.task-list-item{display:list-item;list-style:none;margin-left:-19.2px}li.checkbox-item input[type=checkbox],li.task-list-item input[type=checkbox]{margin-right:6px}li.checkbox-item li.checkbox-item,li.checkbox-item li.task-list-item,li.task-list-item li.checkbox-item,li.task-list-item li.task-list-item{margin-left:6px}.underlined{text-decoration:underline}.text-center{text-align:center}.text-left{text-align:start}.text-right{text-align:end}@media screen and (min-width: 360px){.text-xxs-center{text-align:center}.text-xxs-left{text-align:start}.text-xxs-right{text-align:end}}@media screen and (min-width: 400px){.text-xs-center{text-align:center}.text-xs-left{text-align:start}.text-xs-right{text-align:end}}@media screen and (min-width: 600px){.text-s-center{text-align:center}.text-s-left{text-align:start}.text-s-right{text-align:end}}@media screen and (min-width: 880px){.text-m-center{text-align:center}.text-m-left{text-align:start}.text-m-right{text-align:end}}@media screen and (min-width: 1000px){.text-l-center{text-align:center}.text-l-left{text-align:start}.text-l-right{text-align:end}}@media screen and (min-width: 1100px){.text-xl-center{text-align:center}.text-xl-left{text-align:start}.text-xl-right{text-align:end}}.text-bigger{font-size:1.1em}.text-large{font-size:1.6666em}.no-color{color:inherit}.break-text{white-space:normal;word-wrap:break-word;overflow-wrap:break-word}.text-limit-lines-1{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.text-limit-lines-2{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.header-group{margin:16px 0}.header-group h1,.header-group h2,.header-group h3,.header-group h4,.header-group h5,.header-group h6{margin:0}span.sep{color:#bbb;padding:0 6px}.list>*{display:block}.svg-icon{width:1em;height:1em;display:inline-block;position:relative;bottom:-0.105em;margin-inline-end:6px;pointer-events:none;fill:currentColor}table{min-width:100px;max-width:100%}table thead{background-color:#f8f8f8;font-weight:500}html.dark-mode table thead{background-color:#333}table td,table th{min-width:10px;padding:6px 8px;border:1px solid #ddd;overflow:auto;line-height:1.2;word-break:break-word;vertical-align:top}table td p,table th p{margin:0}table.table{width:100%}table.table tr td,table.table tr th{border-bottom:1px solid rgba(0,0,0,.05)}table.table th,table.table td{text-align:start;border:none;padding:12px 12px;vertical-align:middle;margin:0;overflow:visible}table.table th{font-weight:bold}table.table tr:hover{background-color:#f2f2f2}html.dark-mode table.table tr:hover{background-color:#333}table.table .text-right{text-align:end}table.table .text-center{text-align:center}table.table td.actions{overflow:visible}table.table a{display:inline-block}table.table.expand-to-padding{margin-left:-12px;margin-right:-12px;width:calc(100% + 2*12px);max-width:calc(100% + 2*12px)}table.no-style td{border:0;padding:0}table.list-table{margin:0 -6px}table.list-table td{border:0;vertical-align:middle;padding:6px}.page-content{width:100%;max-width:840px;margin:0 auto;overflow-wrap:break-word}.page-content .align-left{text-align:left}.page-content img.align-left,.page-content table.align-left{float:left !important;margin:6px 16px 16px 0}.page-content .align-right{text-align:right !important}.page-content img.align-right,.page-content table.align-right{float:right !important;margin:6px 0 6px 12px}.page-content .align-center{text-align:center}.page-content img.align-center{display:block}.page-content img.align-center,.page-content table.align-center{margin-left:auto;margin-right:auto}.page-content img{max-width:100%;height:auto}.page-content h1,.page-content h2,.page-content h3,.page-content h4,.page-content h5,.page-content h6,.page-content pre{clear:left}.page-content hr{clear:both;margin:16px 0}.page-content table{hyphens:auto;table-layout:fixed;max-width:100%;height:auto !important}.page-content ins,.page-content del{text-decoration:none}.page-content ins{background:#dbffdb}.page-content del{background:#ffecec}.page-content details{border:1px solid;border-color:#ddd;margin-bottom:1em;padding:12px}html.dark-mode .page-content details{border-color:#555}.page-content details>summary{margin-top:-12px;margin-left:-12px;margin-right:-12px;margin-bottom:-12px;font-weight:bold;background-color:#eee;padding:6px 12px}html.dark-mode .page-content details>summary{background-color:#333}.page-content details[open]>summary{margin-bottom:12px;border-bottom:1px solid;border-color:#ddd}html.dark-mode .page-content details[open]>summary{border-color:#555}.page-content details>summary+*{margin-top:.2em}.page-content details:after{content:"";display:block;clear:both}.page-content li>input[type=checkbox]{vertical-align:top;margin-top:.3em}.page-content p:empty{min-height:1.6em}.page-content.page-revision pre code{white-space:pre-wrap}.page-content .cm-editor{margin-bottom:1.375em}.page-content video{max-width:100%}.callout{border-left:3px solid #bbb;background-color:#eee;padding:12px 12px 12px 32px;display:block;position:relative;overflow:auto}.callout:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiMwMTUzODAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6Ii8+PC9zdmc+");background-repeat:no-repeat;content:"";width:1.2em;height:1.2em;left:8px;top:50%;margin-top:-9px;display:inline-block;position:absolute;line-height:1;opacity:.8}.callout.success{border-left-color:#0f7d15;background-color:#eafdeb;color:#063409}html.dark-mode .callout.success{border-left-color:#4aa850}html.dark-mode .callout.success{background-color:#122913}html.dark-mode .callout.success{color:#4aa850}.callout.success:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiMzNzZjMzkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE1bC01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6Ii8+PC9zdmc+")}.callout.danger{border-left-color:#ab0f0e;background-color:#fcdbdb;color:#4d0706}html.dark-mode .callout.danger{border-left-color:#e85c5b}html.dark-mode .callout.danger{background-color:#250505}html.dark-mode .callout.danger{color:#e85c5b}.callout.danger:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiNiOTE4MTgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiLz4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==")}.callout.info{border-left-color:#0288d1;color:#01466c;background-color:#d3efff}html.dark-mode .callout.info{border-left-color:#0288d1}html.dark-mode .callout.info{color:#0288d1}html.dark-mode .callout.info{background-color:#001825}.callout.warning{border-left-color:#cf4d03;background-color:#fee3d3;color:#6a2802}html.dark-mode .callout.warning{border-left-color:#de8a5a}html.dark-mode .callout.warning{background-color:#30170a}html.dark-mode .callout.warning{color:#de8a5a}.callout.warning:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiNiNjUzMWMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiLz48L3N2Zz4=")}.callout a{color:inherit;text-decoration:underline}html,body{background-color:#fff}body{font-family:"DejaVu Sans",-apple-system,BlinkMacSystemFont,"Segoe UI","Oxygen","Ubuntu","Roboto","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;margin:0;padding:0;display:block}table{border-spacing:0;border-collapse:collapse}.page-content{overflow:hidden}pre{padding-left:12px}pre:before{display:none}pre code{white-space:pre-wrap}.page-break{page-break-after:always}@media screen{.page-break{border-top:1px solid #ddd}}ul.contents ul li{list-style:circle}.chapter-hint{color:#888;margin-top:32px}.chapter-hint+h1{margin-top:0}body.export-format-pdf{font-size:14px;line-height:1.2}body.export-format-pdf h1,body.export-format-pdf h2,body.export-format-pdf h3,body.export-format-pdf h4,body.export-format-pdf h5,body.export-format-pdf h6{line-height:1.2}body.export-format-pdf table{max-width:800px !important;font-size:.8em;width:100% !important}body.export-format-pdf table td{width:auto !important}body.export-format-pdf .page-content .float{float:none !important}body.export-format-pdf .page-content img.align-left,body.export-format-pdf .page-content img.align-right{float:none !important;clear:both;display:block}body.export-format-pdf.export-engine-dompdf .page-content a>img{max-width:700px}body.export-format-pdf.export-engine-dompdf .page-content td a>img{max-width:100%}/*# sourceMappingURL=export-styles.css.map */ diff --git a/public/dist/print-styles.css b/public/dist/print-styles.css deleted file mode 100644 index 7cc4cbdc824..00000000000 --- a/public/dist/print-styles.css +++ /dev/null @@ -1 +0,0 @@ -:root{--font-body: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;--font-code: Lucida Console, DejaVu Sans Mono, Ubuntu Mono, Monaco, monospace;--color-primary: #206ea7;--color-primary-light: rgba(32,110,167,0.15);--color-link: #206ea7;--color-page: #206ea7;--color-page-draft: #7e50b1;--color-chapter: #af4d0d;--color-book: #077b70;--color-bookshelf: #a94747;--color-positive: #0f7d15;--color-negative: #ab0f0e;--color-info: #0288D1;--color-warning: #cf4d03;--bg-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='100%25' width='100%25'%3E%3Cdefs%3E%3Cpattern id='doodad' width='19' height='19' viewBox='0 0 40 40' patternUnits='userSpaceOnUse' patternTransform='rotate(143)'%3E%3Crect width='100%25' height='100%25' fill='rgba(42, 67, 101,0)'/%3E%3Cpath d='M-10 30h60v20h-60zM-10-10h60v20h-60' fill='rgba(26, 32, 44,0)'/%3E%3Cpath d='M-10 10h60v20h-60zM-10-30h60v20h-60z' fill='rgba(0, 0, 0,0.05)'/%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23doodad)' height='200%25' width='200%25'/%3E%3C/svg%3E")}:root.dark-mode{--bg-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='100%25' width='100%25'%3E%3Cdefs%3E%3Cpattern id='doodad' width='19' height='19' viewBox='0 0 40 40' patternUnits='userSpaceOnUse' patternTransform='rotate(143)'%3E%3Crect width='100%25' height='100%25' fill='rgba(42, 67, 101,0)'/%3E%3Cpath d='M-10 30h60v20h-60zM-10-10h60v20h-60' fill='rgba(26, 32, 44,0)'/%3E%3Cpath d='M-10 10h60v20h-60zM-10-30h60v20h-60z' fill='rgba(255, 255, 255,0.05)'/%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23doodad)' height='200%25' width='200%25'/%3E%3C/svg%3E");color-scheme:only dark;--color-positive: #4aa850;--color-negative: #e85c5b;--color-warning: #de8a5a}:root:not(.dark-mode){color-scheme:only light}header{display:none}html,body{font-size:12px;background-color:#fff}.page-content{margin:0 auto}.print-hidden{display:none !important}.tri-layout-container{grid-template-columns:1fr;grid-template-areas:"b";margin-inline-start:0;margin-inline-end:0;display:block}.card{box-shadow:none}.content-wrap.card{padding-inline-start:0;padding-inline-end:0}/*# sourceMappingURL=print-styles.css.map */ diff --git a/public/dist/styles.css b/public/dist/styles.css index 4c3498621d0..695ca25f7d0 100644 --- a/public/dist/styles.css +++ b/public/dist/styles.css @@ -1 +1 @@ -html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after{content:"";content:none}q:before,q:after{content:"";content:none}table{border-collapse:collapse;border-spacing:0}:root{--font-body: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;--font-code: Lucida Console, DejaVu Sans Mono, Ubuntu Mono, Monaco, monospace;--color-primary: #206ea7;--color-primary-light: rgba(32,110,167,0.15);--color-link: #206ea7;--color-page: #206ea7;--color-page-draft: #7e50b1;--color-chapter: #af4d0d;--color-book: #077b70;--color-bookshelf: #a94747;--color-positive: #0f7d15;--color-negative: #ab0f0e;--color-info: #0288D1;--color-warning: #cf4d03;--bg-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='100%25' width='100%25'%3E%3Cdefs%3E%3Cpattern id='doodad' width='19' height='19' viewBox='0 0 40 40' patternUnits='userSpaceOnUse' patternTransform='rotate(143)'%3E%3Crect width='100%25' height='100%25' fill='rgba(42, 67, 101,0)'/%3E%3Cpath d='M-10 30h60v20h-60zM-10-10h60v20h-60' fill='rgba(26, 32, 44,0)'/%3E%3Cpath d='M-10 10h60v20h-60zM-10-30h60v20h-60z' fill='rgba(0, 0, 0,0.05)'/%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23doodad)' height='200%25' width='200%25'/%3E%3C/svg%3E")}:root.dark-mode{--bg-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='100%25' width='100%25'%3E%3Cdefs%3E%3Cpattern id='doodad' width='19' height='19' viewBox='0 0 40 40' patternUnits='userSpaceOnUse' patternTransform='rotate(143)'%3E%3Crect width='100%25' height='100%25' fill='rgba(42, 67, 101,0)'/%3E%3Cpath d='M-10 30h60v20h-60zM-10-10h60v20h-60' fill='rgba(26, 32, 44,0)'/%3E%3Cpath d='M-10 10h60v20h-60zM-10-30h60v20h-60z' fill='rgba(255, 255, 255,0.05)'/%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23doodad)' height='200%25' width='200%25'/%3E%3C/svg%3E");color-scheme:only dark;--color-positive: #4aa850;--color-negative: #e85c5b;--color-warning: #de8a5a}:root:not(.dark-mode){color-scheme:only light}.m-none{margin:0 !important}.mx-none{margin-inline-start:0 !important;margin-inline-end:0 !important}.my-none{margin-top:0 !important;margin-bottom:0 !important}.mt-none{margin-top:0 !important}.mr-none{margin-inline-end:0 !important}.mb-none{margin-bottom:0 !important}.ml-none{margin-inline-start:0 !important}.m-xxs{margin:3px !important}.mx-xxs{margin-inline-start:3px !important;margin-inline-end:3px !important}.my-xxs{margin-top:3px !important;margin-bottom:3px !important}.mt-xxs{margin-top:3px !important}.mr-xxs{margin-inline-end:3px !important}.mb-xxs{margin-bottom:3px !important}.ml-xxs{margin-inline-start:3px !important}.m-xs{margin:6px !important}.mx-xs{margin-inline-start:6px !important;margin-inline-end:6px !important}.my-xs{margin-top:6px !important;margin-bottom:6px !important}.mt-xs{margin-top:6px !important}.mr-xs{margin-inline-end:6px !important}.mb-xs{margin-bottom:6px !important}.ml-xs{margin-inline-start:6px !important}.m-s{margin:12px !important}.mx-s{margin-inline-start:12px !important;margin-inline-end:12px !important}.my-s{margin-top:12px !important;margin-bottom:12px !important}.mt-s{margin-top:12px !important}.mr-s{margin-inline-end:12px !important}.mb-s{margin-bottom:12px !important}.ml-s{margin-inline-start:12px !important}.m-m{margin:16px !important}.mx-m{margin-inline-start:16px !important;margin-inline-end:16px !important}.my-m{margin-top:16px !important;margin-bottom:16px !important}.mt-m{margin-top:16px !important}.mr-m{margin-inline-end:16px !important}.mb-m{margin-bottom:16px !important}.ml-m{margin-inline-start:16px !important}.m-l{margin:24px !important}.mx-l{margin-inline-start:24px !important;margin-inline-end:24px !important}.my-l{margin-top:24px !important;margin-bottom:24px !important}.mt-l{margin-top:24px !important}.mr-l{margin-inline-end:24px !important}.mb-l{margin-bottom:24px !important}.ml-l{margin-inline-start:24px !important}.m-xl{margin:32px !important}.mx-xl{margin-inline-start:32px !important;margin-inline-end:32px !important}.my-xl{margin-top:32px !important;margin-bottom:32px !important}.mt-xl{margin-top:32px !important}.mr-xl{margin-inline-end:32px !important}.mb-xl{margin-bottom:32px !important}.ml-xl{margin-inline-start:32px !important}.m-xxl{margin:48px !important}.mx-xxl{margin-inline-start:48px !important;margin-inline-end:48px !important}.my-xxl{margin-top:48px !important;margin-bottom:48px !important}.mt-xxl{margin-top:48px !important}.mr-xxl{margin-inline-end:48px !important}.mb-xxl{margin-bottom:48px !important}.ml-xxl{margin-inline-start:48px !important}.m-auto{margin:auto !important}.mx-auto{margin-inline-start:auto !important;margin-inline-end:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-inline-end:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-inline-start:auto !important}.p-none{padding:0 !important}.px-none{padding-inline-start:0 !important;padding-inline-end:0 !important}.py-none{padding-top:0 !important;padding-bottom:0 !important}.pt-none{padding-top:0 !important}.pr-none{padding-inline-end:0 !important}.pb-none{padding-bottom:0 !important}.pl-none{padding-inline-start:0 !important}.p-xxs{padding:3px !important}.px-xxs{padding-inline-start:3px !important;padding-inline-end:3px !important}.py-xxs{padding-top:3px !important;padding-bottom:3px !important}.pt-xxs{padding-top:3px !important}.pr-xxs{padding-inline-end:3px !important}.pb-xxs{padding-bottom:3px !important}.pl-xxs{padding-inline-start:3px !important}.p-xs{padding:6px !important}.px-xs{padding-inline-start:6px !important;padding-inline-end:6px !important}.py-xs{padding-top:6px !important;padding-bottom:6px !important}.pt-xs{padding-top:6px !important}.pr-xs{padding-inline-end:6px !important}.pb-xs{padding-bottom:6px !important}.pl-xs{padding-inline-start:6px !important}.p-s{padding:12px !important}.px-s{padding-inline-start:12px !important;padding-inline-end:12px !important}.py-s{padding-top:12px !important;padding-bottom:12px !important}.pt-s{padding-top:12px !important}.pr-s{padding-inline-end:12px !important}.pb-s{padding-bottom:12px !important}.pl-s{padding-inline-start:12px !important}.p-m{padding:16px !important}.px-m{padding-inline-start:16px !important;padding-inline-end:16px !important}.py-m{padding-top:16px !important;padding-bottom:16px !important}.pt-m{padding-top:16px !important}.pr-m{padding-inline-end:16px !important}.pb-m{padding-bottom:16px !important}.pl-m{padding-inline-start:16px !important}.p-l{padding:24px !important}.px-l{padding-inline-start:24px !important;padding-inline-end:24px !important}.py-l{padding-top:24px !important;padding-bottom:24px !important}.pt-l{padding-top:24px !important}.pr-l{padding-inline-end:24px !important}.pb-l{padding-bottom:24px !important}.pl-l{padding-inline-start:24px !important}.p-xl{padding:32px !important}.px-xl{padding-inline-start:32px !important;padding-inline-end:32px !important}.py-xl{padding-top:32px !important;padding-bottom:32px !important}.pt-xl{padding-top:32px !important}.pr-xl{padding-inline-end:32px !important}.pb-xl{padding-bottom:32px !important}.pl-xl{padding-inline-start:32px !important}.p-xxl{padding:48px !important}.px-xxl{padding-inline-start:48px !important;padding-inline-end:48px !important}.py-xxl{padding-top:48px !important;padding-bottom:48px !important}.pt-xxl{padding-top:48px !important}.pr-xxl{padding-inline-end:48px !important}.pb-xxl{padding-bottom:48px !important}.pl-xxl{padding-inline-start:48px !important}.p-auto{padding:auto !important}.px-auto{padding-inline-start:auto !important;padding-inline-end:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-inline-end:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-inline-start:auto !important}.gap-none{gap:0 !important}.gap-x-none{column-gap:0 !important}.gap-y-none{row-gap:0 !important}.gap-xxs{gap:3px !important}.gap-x-xxs{column-gap:3px !important}.gap-y-xxs{row-gap:3px !important}.gap-xs{gap:6px !important}.gap-x-xs{column-gap:6px !important}.gap-y-xs{row-gap:6px !important}.gap-s{gap:12px !important}.gap-x-s{column-gap:12px !important}.gap-y-s{row-gap:12px !important}.gap-m{gap:16px !important}.gap-x-m{column-gap:16px !important}.gap-y-m{row-gap:16px !important}.gap-l{gap:24px !important}.gap-x-l{column-gap:24px !important}.gap-y-l{row-gap:24px !important}.gap-xl{gap:32px !important}.gap-x-xl{column-gap:32px !important}.gap-y-xl{row-gap:32px !important}.gap-xxl{gap:48px !important}.gap-x-xxl{column-gap:48px !important}.gap-y-xxl{row-gap:48px !important}.gap-auto{gap:auto !important}.gap-x-auto{column-gap:auto !important}.gap-y-auto{row-gap:auto !important}.opacity-10{opacity:.1}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}*{box-sizing:border-box;outline-color:var(--color-primary);outline-width:1px}*:focus{outline-style:dotted}html{height:100%;overflow-y:scroll;background-color:#f2f2f2}html.flexbox{overflow-y:hidden}html.dark-mode{background-color:#111}body{font-size:14px;line-height:1.6;color:#444;-webkit-font-smoothing:antialiased;height:100%;display:flex;flex-direction:column}html.dark-mode body{color:#aaa}body,button,input,select,label,textarea{font-family:var(--font-body)}pre,#markdown-editor-input,.text-mono,.code-base,span.code,code{font-family:var(--font-code)}h1{font-size:3.425em;line-height:1.22222222em;margin-top:.48888889em;margin-bottom:.48888889em}h2{font-size:2.8275em;line-height:1.294117647em;margin-top:.8627451em;margin-bottom:.43137255em}h3{font-size:2.333em;line-height:1.221428572em;margin-top:.78571429em;margin-bottom:.43137255em}h4{font-size:1.666em;line-height:1.375em;margin-top:.78571429em;margin-bottom:.43137255em}h1,h2,h3,h4,h5,h6{font-weight:400;position:relative;display:block;font-family:var(--font-heading, var(--font-body));color:#222}html.dark-mode h1,html.dark-mode h2,html.dark-mode h3,html.dark-mode h4,html.dark-mode h5,html.dark-mode h6{color:#bbb}h1 .subheader,h2 .subheader,h3 .subheader,h4 .subheader,h5 .subheader,h6 .subheader{font-size:.5em;line-height:1em;color:#969696}h5{font-size:1.4em}h5,h6{line-height:1.2em;margin-top:.78571429em;margin-bottom:.66em}@media screen and (max-width: 600px){h1{font-size:2.8275em}h2{font-size:2.333em}h3{font-size:1.666em}h4{font-size:1.333em}h5{font-size:1.161616em}}.list-heading{font-size:2rem}h2.list-heading{font-size:1.333rem}a{color:var(--color-link);fill:currentColor;cursor:pointer;text-decoration:none;transition:filter ease-in-out 80ms;line-height:1.6}a:hover{text-decoration:underline}a.icon{display:inline-block}a svg{position:relative;display:inline-block}a:focus img:only-child{outline:2px dashed var(--color-link);outline-offset:2px}a.no-link-style{color:inherit}a.no-link-style:hover{text-decoration:none}.blended-links a{color:inherit}.blended-links a svg{fill:currentColor}p,ul,ol,pre,table,blockquote{margin-top:.3em;margin-bottom:1.375em}hr{border:0;height:1px;background:#eaeaea;margin-bottom:24px}html.dark-mode hr{background:#555}hr.faded{background-image:linear-gradient(to right, #FFF, #e3e0e0 20%, #e3e0e0 80%, #FFF)}hr.darker{background:#ddd}html.dark-mode hr.darker{background:#666}hr.margin-top,hr.even{margin-top:24px}strong,b,.bold,.strong{font-weight:bold}strong>strong,strong>b,strong>.bold,strong>.strong,b>strong,b>b,b>.bold,b>.strong,.bold>strong,.bold>b,.bold>.bold,.bold>.strong,.strong>strong,.strong>b,.strong>.bold,.strong>.strong{font-weight:bolder}em,i,.italic{font-style:italic}small,p.small,span.small,.text-small{font-size:.75rem}sup,.superscript{vertical-align:super;font-size:.8em}sub,.subscript{vertical-align:sub;font-size:.8em}pre{font-size:12px;border:1px solid #ddd;background-color:#fff;border-color:#ddd;border-radius:4px;padding-left:26px;position:relative;padding-top:3px;padding-bottom:3px}html.dark-mode pre{background-color:#2b2b2b}html.dark-mode pre{border-color:#111}pre:before{content:"";display:block;position:absolute;top:0;width:22.4px;left:0;height:100%;background-color:#f5f5f5;border-right:1px solid #ddd}html.dark-mode pre:before{background-color:#313335}html.dark-mode pre:before{border-right:none}@media print{pre{padding-left:12px}pre:before{display:none}}blockquote{display:block;position:relative;border-left:4px solid rgba(0,0,0,0);border-left-color:var(--color-primary);background-color:#f8f8f8;padding:12px 16px 12px 32px;overflow:auto}html.dark-mode blockquote{background-color:#333}blockquote:before{content:"“";font-size:2em;font-weight:bold;position:absolute;top:12px;left:12px;color:#777}.text-mono{font-family:var(--font-code)}.text-uppercase{text-transform:uppercase}.text-capitals{text-transform:capitalize}.code-base,span.code,code{font-size:.84em;border:1px solid #ddd;border-radius:3px;background-color:#f8f8f8;border-color:#ddd}html.dark-mode .code-base,html.dark-mode span.code,html.dark-mode code{background-color:#2b2b2b}html.dark-mode .code-base,html.dark-mode span.code,html.dark-mode code{border-color:#444}code{display:inline;padding:1px 3px;white-space:pre-wrap;line-height:1.2em}span.code{padding:1px 6px}pre code{background-color:rgba(0,0,0,0);border:0;font-size:1em;display:block;line-height:1.6}span.highlight{font-weight:bold;padding:2px 4px}ul,ol{padding-left:32px;padding-right:32px;display:flow-root}ul p,ol p{margin:0}ul{list-style:disc}ul ul{list-style:circle}ul label{margin:0}ol{list-style:decimal}li>ol,li>ul{margin-top:0;margin-bottom:0;margin-block-end:0;margin-block-start:0;padding-block-end:0;padding-block-start:0;padding-left:19.2px;padding-right:19.2px}li.checkbox-item,li.task-list-item{display:list-item;list-style:none;margin-left:-19.2px}li.checkbox-item input[type=checkbox],li.task-list-item input[type=checkbox]{margin-right:6px}li.checkbox-item li.checkbox-item,li.checkbox-item li.task-list-item,li.task-list-item li.checkbox-item,li.task-list-item li.task-list-item{margin-left:6px}.underlined{text-decoration:underline}.text-center{text-align:center}.text-left{text-align:start}.text-right{text-align:end}@media screen and (min-width: 360px){.text-xxs-center{text-align:center}.text-xxs-left{text-align:start}.text-xxs-right{text-align:end}}@media screen and (min-width: 400px){.text-xs-center{text-align:center}.text-xs-left{text-align:start}.text-xs-right{text-align:end}}@media screen and (min-width: 600px){.text-s-center{text-align:center}.text-s-left{text-align:start}.text-s-right{text-align:end}}@media screen and (min-width: 880px){.text-m-center{text-align:center}.text-m-left{text-align:start}.text-m-right{text-align:end}}@media screen and (min-width: 1000px){.text-l-center{text-align:center}.text-l-left{text-align:start}.text-l-right{text-align:end}}@media screen and (min-width: 1100px){.text-xl-center{text-align:center}.text-xl-left{text-align:start}.text-xl-right{text-align:end}}.text-bigger{font-size:1.1em}.text-large{font-size:1.6666em}.no-color{color:inherit}.break-text{white-space:normal;word-wrap:break-word;overflow-wrap:break-word}.text-limit-lines-1{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.text-limit-lines-2{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.header-group{margin:16px 0}.header-group h1,.header-group h2,.header-group h3,.header-group h4,.header-group h5,.header-group h6{margin:0}span.sep{color:#bbb;padding:0 6px}.list>*{display:block}.svg-icon{width:1em;height:1em;display:inline-block;position:relative;bottom:-0.105em;margin-inline-end:6px;pointer-events:none;fill:currentColor}.primary-background{background-color:var(--color-primary) !important}.primary-background-light{background-color:var(--color-primary-light)}html.dark-mode .primary-background-light{background:#000}html.dark-mode .primary-background-light .text-link{color:#aaa !important}.link-background{background-color:var(--color-link) !important}.text-pos,.text-pos:hover,.text-pos-hover:hover{color:var(--color-positive) !important;fill:var(--color-positive) !important}.text-warn,.text-warn:hover,.text-warn-hover:hover{color:var(--color-warning) !important;fill:var(--color-warning) !important}.text-neg,.text-neg:hover,.text-neg-hover:hover{color:var(--color-negative) !important;fill:var(--color-negative) !important}.text-primary,.text-primary:hover,.text-primary-hover:hover{color:var(--color-primary) !important;fill:var(--color-primary) !important}.text-link,.text-link:hover,.text-link-hover:hover{color:var(--color-link) !important;fill:var(--color-link) !important}.text-muted{color:#575757 !important;fill:currentColor !important}html.dark-mode .text-muted{color:#888 !important}.text-dark{color:#222 !important;fill:currentColor !important}html.dark-mode .text-dark{color:#ccc !important}.text-white{color:#fff;fill:currentColor !important}.text-bookshelf,.text-bookshelf:hover{color:var(--color-bookshelf);fill:var(--color-bookshelf)}.text-book,.text-book:hover{color:var(--color-book);fill:var(--color-book)}.text-page,.text-page:hover{color:var(--color-page);fill:var(--color-page)}.text-page.draft,.text-page.draft:hover{color:var(--color-page-draft);fill:var(--color-page-draft)}.text-chapter,.text-chapter:hover{color:var(--color-chapter);fill:var(--color-chapter)}.bg-white{background-color:#fff}.bg-book{background-color:var(--color-book)}.bg-chapter{background-color:var(--color-chapter)}.bg-bookshelf{background-color:var(--color-bookshelf)}.container{max-width:1400px;margin-inline-start:auto;margin-inline-end:auto;padding-inline-start:16px;padding-inline-end:16px}.container.medium{max-width:1100px}.container.small{max-width:840px}.container.very-small{max-width:480px}.grid{display:grid;grid-column-gap:24px;grid-row-gap:24px}.grid>*{min-width:0}.grid.half{grid-template-columns:1fr 1fr}.grid.third{grid-template-columns:1fr 1fr 1fr}.grid.left-focus{grid-template-columns:2fr 1fr}.grid.right-focus{grid-template-columns:1fr 3fr}.grid.gap-y-xs{grid-row-gap:6px}.grid.gap-xl{grid-column-gap:32px;grid-row-gap:32px}.grid.gap-xxl{grid-column-gap:48px;grid-row-gap:48px}.grid.v-center{align-items:center}.grid.v-end{align-items:end}.grid.no-gap{grid-row-gap:0;grid-column-gap:0}.grid.no-row-gap{grid-row-gap:0}@media screen and (max-width: 880px){.grid.third:not(.no-break){grid-template-columns:1fr 1fr}.grid.half:not(.no-break),.grid.left-focus:not(.no-break),.grid.right-focus:not(.no-break){grid-template-columns:1fr}.grid.half.collapse-xs{grid-template-columns:1fr 1fr}.grid.gap-xl{grid-column-gap:16px;grid-row-gap:16px}.grid.right-focus.reverse-collapse>*:nth-child(2){order:0}.grid.right-focus.reverse-collapse>*:nth-child(1){order:1}}@media screen and (max-width: 600px){.grid.third:not(.no-break){grid-template-columns:1fr}}@media screen and (max-width: 400px){.grid.half.collapse-xs{grid-template-columns:1fr}}#content{flex:1 0 auto}body.flexbox{display:flex;flex-direction:column;align-items:stretch;height:100%;min-height:100%;max-height:100%;overflow:hidden}body.flexbox #content{flex:1;display:flex;min-height:0}.flex-fill{display:flex;align-items:stretch;min-height:0;max-width:100%;position:relative}.flex-container-row{display:flex;flex-direction:row}.flex-container-row.v-center{align-items:center}.flex-container-column{display:flex;flex-direction:column}.flex-container-row.inline,.flex-container-column.inline{display:inline-flex !important}.flex-container-column.wrap,.flex-container-row.wrap{flex-wrap:wrap}.flex{min-height:0;flex:1;max-width:100%}.flex.fit-content{flex-basis:auto;flex-grow:0}.flex.fill-area{flex-grow:1;flex-shrink:0;min-width:fit-content}.flex-2{min-height:0;flex:2;max-width:100%}.flex-3{min-height:0;flex:3;max-width:100%}.flex-none{flex:none}.justify-flex-start{justify-content:flex-start}.justify-flex-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-space-between{justify-content:space-between}.items-center{align-items:center}.items-stretch{align-items:stretch}.min-width-xxxxs{min-width:60px}.min-width-xxxs{min-width:80px}.min-width-xxs{min-width:100px}.min-width-xs{min-width:120px}.min-width-s{min-width:160px}.min-width-m{min-width:200px}.min-width-l{min-width:240px}.min-width-xl{min-width:280px}.min-width-xxl{min-width:320px}.block{display:block !important;position:relative}.inline{display:inline !important}.block.inline{display:inline-block !important}.relative{position:relative}.fixed{position:fixed;z-index:20}.fixed.top-right{top:0;right:0}.hidden{display:none !important}.fill-height{height:100%}.float{float:left}.float.right{float:right}.sticky-top-m{position:sticky;top:16px}@media screen and (max-width: 360px){.hide-under-xxs{display:none !important}}@media screen and (min-width: 360px){.hide-over-xxs{display:none !important}}@media screen and (max-width: 400px){.hide-under-xs{display:none !important}}@media screen and (min-width: 400px){.hide-over-xs{display:none !important}}@media screen and (max-width: 600px){.hide-under-s{display:none !important}}@media screen and (min-width: 600px){.hide-over-s{display:none !important}}@media screen and (max-width: 880px){.hide-under-m{display:none !important}}@media screen and (min-width: 880px){.hide-over-m{display:none !important}}@media screen and (max-width: 1000px){.hide-under-l{display:none !important}}@media screen and (min-width: 1000px){.hide-over-l{display:none !important}}@media screen and (max-width: 1100px){.hide-under-xl{display:none !important}}@media screen and (min-width: 1100px){.hide-over-xl{display:none !important}}[hidden]{display:none !important}.screen-reader-only{position:absolute;inset-inline-start:-10000px;top:auto;width:1px;height:1px;overflow:hidden}.rounded{border-radius:4px}.dual-column-content{columns:2}@media screen and (max-width: 880px){.dual-column-content{columns:1}}.clearfix::before,.clearfix::after{content:" ";display:table}.clearfix::after{clear:both}.tri-layout-container{display:grid;margin-inline-start:32px;margin-inline-end:32px;grid-template-columns:1fr 4fr 1fr;grid-template-areas:"a b c";grid-column-gap:32px}.tri-layout-container .tri-layout-right{grid-area:c;min-width:0}.tri-layout-container .tri-layout-left{grid-area:a;min-width:0}.tri-layout-container .tri-layout-middle{grid-area:b;padding-top:16px;min-width:0}@media screen and (max-width: 1400px){.tri-layout-container{grid-template-areas:"c b b" "a b b" ". b b";grid-template-columns:1fr 3fr;grid-template-rows:min-content min-content 1fr;padding-inline-end:24px}}@media screen and (min-width: 1400px)and (max-width: 1700px){.tri-layout-container{grid-template-columns:1fr 972px 1fr;grid-column-gap:12px;margin-inline-start:16px;margin-inline-end:16px}}@media screen and (min-width: 1000px)and (max-width: 1400px){.tri-layout-left{position:sticky;top:16px}}@media screen and (min-width: 1400px){.tri-layout-left-contents,.tri-layout-right-contents{padding:32px 16px;position:sticky;top:0;max-height:100vh;min-height:50vh;overflow-y:scroll;overflow-x:hidden;height:100%;scrollbar-width:none;-ms-overflow-style:none}.tri-layout-left-contents::-webkit-scrollbar,.tri-layout-right-contents::-webkit-scrollbar{display:none}.tri-layout-middle-contents{max-width:940px;margin:0 auto}}@media screen and (max-width: 1000px){.tri-layout-container{grid-template-areas:none;grid-template-columns:1fr;grid-column-gap:0;padding-inline-end:6px;padding-inline-start:6px}.tri-layout-container .tri-layout-left-contents,.tri-layout-container .tri-layout-right-contents{padding-inline-start:16px;padding-inline-end:16px}.tri-layout-container .tri-layout-left>*,.tri-layout-container .tri-layout-right>*{display:none;pointer-events:none}.tri-layout-container .tri-layout-left,.tri-layout-container .tri-layout-right{grid-area:none;grid-column:1/1;grid-row:1;padding-top:0 !important}.tri-layout-container .tri-layout-middle{grid-area:none;grid-row:3;grid-column:1/1;z-index:1;overflow:hidden;transition:transform ease-in-out 240ms}.tri-layout-container .tri-layout-left{grid-row:2}.tri-layout-container.show-info{overflow:hidden}.tri-layout-container.show-info .tri-layout-middle{display:none}.tri-layout-container.show-info .tri-layout-right>*,.tri-layout-container.show-info .tri-layout-left>*{display:block;pointer-events:auto}}@media screen and (min-width: 1000px){.tri-layout-mobile-tabs{display:none}.tri-layout-left-contents>*,.tri-layout-right-contents>*{opacity:.6;transition:opacity ease-in-out 120ms}html.dark-mode .tri-layout-left-contents>*,html.dark-mode .tri-layout-right-contents>*{opacity:.75}.tri-layout-left-contents>*:hover,.tri-layout-left-contents>*:focus-within,.tri-layout-right-contents>*:hover,.tri-layout-right-contents>*:focus-within{opacity:1 !important}}@media screen and (min-width: 1000px)and (prefers-contrast: more){.tri-layout-left-contents>*,.tri-layout-right-contents>*{opacity:1 !important}}@media screen and (max-width: 880px){.tri-layout-container{margin-inline-start:0;margin-inline-end:0}}.card{background-color:#fff;box-shadow:0 1px 6px -1px rgba(0,0,0,.1);border-radius:3px}html.dark-mode .card{background-color:#222}.card .body,.card p.empty-text{padding:16px}.card a,.card p{word-wrap:break-word;word-break:break-word}.card-title{padding:16px 16px 6px;margin:0;font-size:14px;color:#222;fill:#222;font-weight:400}.card-title a{line-height:1}.card-footer-link,button.card-footer-link{display:block;padding:12px 16px;line-height:1;border-top:1px solid;width:100%;text-align:left;border-color:#ddd;border-radius:0 0 3px 3px;font-size:.9em;margin-top:6px}html.dark-mode .card-footer-link,html.dark-mode button.card-footer-link{border-color:#555}.card-footer-link:hover,button.card-footer-link:hover{text-decoration:none;background-color:#f2f2f2}html.dark-mode .card-footer-link:hover,html.dark-mode button.card-footer-link:hover{background-color:#2d2d2d}.card-footer-link:focus,button.card-footer-link:focus{background-color:#eee;outline:1px dotted #666;outline-offset:-2px}html.dark-mode .card-footer-link:focus,html.dark-mode button.card-footer-link:focus{background-color:#222}.card.border-card{border:1px solid;border-color:#ddd}html.dark-mode .card.border-card{border-color:#000}.card.drag-card{border:1px solid #ddd;border-color:#ddd;background-color:#fff;border-radius:4px;display:flex;padding:0 0 0 40px;margin:12px 0;position:relative}html.dark-mode .card.drag-card{border-color:#000}html.dark-mode .card.drag-card{background-color:#333}.card.drag-card .drag-card-action{cursor:pointer}.card.drag-card .handle,.card.drag-card .drag-card-action{display:flex;align-items:center;text-align:center;justify-content:center;width:28px;flex-grow:0;padding:0 6px}.card.drag-card .handle:hover,.card.drag-card .drag-card-action:hover{background-color:#eee}html.dark-mode .card.drag-card .handle:hover,html.dark-mode .card.drag-card .drag-card-action:hover{background-color:#2d2d2d}.card.drag-card .handle .svg-icon,.card.drag-card .drag-card-action .svg-icon{margin-inline-end:0px}.card.drag-card .outline input{margin:12px 0;width:100%}.card.drag-card .outline{position:relative}.card.drag-card .handle{background-color:#eee;left:0;position:absolute;top:0;bottom:0}html.dark-mode .card.drag-card .handle{background-color:#2d2d2d}.card.drag-card>div{padding:0 12px;max-width:80%;flex:1}.grid-card{display:flex;flex-direction:column;border:1px solid #ddd;border-color:#ddd;margin-bottom:24px;border-radius:4px;overflow:hidden;min-width:100px;color:#444;transition:border-color ease-in-out 120ms,box-shadow ease-in-out 120ms}html.dark-mode .grid-card{border-color:#000}.grid-card:hover{color:#444;text-decoration:none;box-shadow:0 1px 6px -1px rgba(0,0,0,.1)}html.dark-mode .grid-card:hover{box-shadow:0 1px 6px -1px rgba(0,0,0,.5)}.grid-card h2{width:100%;font-size:1.5em;margin:0 0 10px}.grid-card p{font-size:.7rem;margin:0;line-height:1.6em}.grid-card .grid-card-content{flex:1;border-top:0;border-bottom-width:2px}.grid-card .grid-card-content,.grid-card .grid-card-footer{padding:24px}.grid-card .grid-card-content+.grid-card-footer{padding-top:0}.book-grid-item .grid-card-footer p.small{font-size:.8em;margin:0}.content-wrap.card{padding:16px 48px;margin-inline-start:auto;margin-inline-end:auto;margin-bottom:24px;overflow:initial;min-height:60vh}.content-wrap.card.auto-height{min-height:0}.content-wrap.card.fill-width{width:100%}@media screen and (max-width: 1400px){.content-wrap.card{padding:16px 32px}}@media screen and (max-width: 880px){.content-wrap.card{padding:16px 24px}}@media screen and (max-width: 600px){.content-wrap.card{padding:16px 16px}}.sub-card{box-shadow:0 1px 3px 0 rgba(0,0,0,.1);border:1.5px solid;border-color:#e2e2e2;border-radius:4px}html.dark-mode .sub-card{border-color:#444}.outline-hover{border:1px solid rgba(0,0,0,0) !important}.outline-hover:hover{border:1px solid rgba(0,0,0,.1) !important}.fade-in-when-active{opacity:.6;transition:opacity ease-in-out 120ms}html.dark-mode .fade-in-when-active{opacity:.7}.fade-in-when-active:hover,.fade-in-when-active:focus-within{opacity:1 !important}@media(prefers-contrast: more){.fade-in-when-active{opacity:1 !important}}.tag-item{display:inline-flex;margin-bottom:6px;margin-inline-end:6px;border-radius:4px;border:1px solid;overflow:hidden;font-size:.85em;border-color:#ccc}html.dark-mode .tag-item{border-color:#666}.tag-item a,.tag-item span,.tag-item a:hover,.tag-item a:active{padding:4px 8px;color:rgba(0,0,0,.7);transition:background-color ease-in-out 80ms;text-decoration:none}html.dark-mode .tag-item a,html.dark-mode .tag-item span,html.dark-mode .tag-item a:hover,html.dark-mode .tag-item a:active{color:rgba(255,255,255,.8)}.tag-item a:hover{background-color:rgba(255,255,255,.7)}html.dark-mode .tag-item a:hover{background-color:rgba(255,255,255,.3)}.tag-item svg{fill:rgba(0,0,0,.5)}html.dark-mode .tag-item svg{fill:rgba(255,255,255,.5)}.tag-item .tag-value{border-inline-start:1px solid;border-color:#ddd;background-color:rgba(255,255,255,.5)}html.dark-mode .tag-item .tag-value{border-color:#666}html.dark-mode .tag-item .tag-value{background-color:rgba(255,255,255,.2)}.tag-name.highlight,.tag-value.highlight{font-weight:bold}.tag-list div:last-child .tag-item{margin-bottom:0}.item-list-row .tag-item{margin-bottom:0}.api-method{font-size:.75rem;background-color:#888;padding:6px;line-height:1.3;opacity:.7;vertical-align:top;border-radius:3px;color:#fff;display:inline-block;min-width:60px;text-align:center;font-weight:bold}.api-method[data-method=GET]{background-color:#077b70}.api-method[data-method=POST]{background-color:#cf4d03}.api-method[data-method=PUT]{background-color:#0288d1}.api-method[data-method=DELETE]{background-color:#ab0f0e}.sticky-sidebar{position:sticky;top:16px;max-height:calc(100vh - 16px);overflow-y:auto}button{background-color:rgba(0,0,0,0);border:0;font-size:100%}.button{text-decoration:none;font-size:.85rem;line-height:1.4em;padding:7.8px 16px;margin-top:6px;margin-bottom:6px;display:inline-block;font-weight:400;outline:0;border-radius:2px;cursor:pointer;transition:background-color ease-in-out 120ms,filter ease-in-out 120ms,box-shadow ease-in-out 120ms;box-shadow:none;background-color:var(--color-primary);color:#fff;text-transform:uppercase;border:1px solid var(--color-primary);vertical-align:top}.button:hover,.button:focus,.button:active{background-color:var(--color-primary);text-decoration:none;color:#fff}.button:hover{box-shadow:0 0 4px 1px #ccc;filter:brightness(110%)}html.dark-mode .button:hover{box-shadow:0 0 4px 1px rgba(0,0,0,.5)}.button:focus{outline:1px dotted currentColor;outline-offset:-6px;box-shadow:none;filter:brightness(90%)}.button:active{outline:0}.button.outline{background-color:rgba(0,0,0,0);color:#666;fill:currentColor;border:1px solid;border-color:#ccc}html.dark-mode .button.outline{color:#aaa}html.dark-mode .button.outline{border-color:#666}.button.outline:hover,.button.outline:focus,.button.outline:active{border:1px solid #ccc;box-shadow:none;background-color:#f2f2f2;background-color:#f2f2f2;filter:none}html.dark-mode .button.outline:hover,html.dark-mode .button.outline:focus,html.dark-mode .button.outline:active{background-color:#555}.button.outline:active{border-color:#bbb;background-color:#ddd;color:#666;box-shadow:inset 0 0 2px rgba(0,0,0,.1)}.button+.button{margin-inline-start:12px}.button.small{font-size:.75rem;padding:7.2px 12px}.text-button{cursor:pointer;background-color:rgba(0,0,0,0);padding:0;margin:0;border:none;user-select:none;font-size:.75rem;line-height:1.4em;color:var(--color-link)}.text-button:active{outline:0}.text-button:hover{text-decoration:none}.text-button:hover,.text-button:focus{color:var(--color-link);fill:var(--color-link)}.text-button.hover-underline:hover{text-decoration:underline}.button.block{width:100%;text-align:start;display:block}.button.icon .svg-icon,.icon-button .svg-icon,.text-button.icon .svg-icon{margin-inline-end:0}.icon-button{text-align:center;border:1px solid rgba(0,0,0,0)}.icon-button:hover{background-color:rgba(0,0,0,.05);border-radius:4px;border-color:#ddd;cursor:pointer}html.dark-mode .icon-button:hover{border-color:#444}.button.svg{display:flex;align-items:center;padding:12px 16px;padding-bottom:10px;width:100%}.button.svg svg{display:inline-block;width:24px;height:24px;bottom:auto;margin-inline-end:16px}.button[disabled]{background-color:#bbb;cursor:default;border-color:#ccc}.button[disabled]:hover{background-color:#bbb;cursor:default;box-shadow:none}table{min-width:100px;max-width:100%}table thead{background-color:#f8f8f8;font-weight:500}html.dark-mode table thead{background-color:#333}table td,table th{min-width:10px;padding:6px 8px;border:1px solid #ddd;overflow:auto;line-height:1.2;word-break:break-word;vertical-align:top}table td p,table th p{margin:0}table.table{width:100%}table.table tr td,table.table tr th{border-bottom:1px solid rgba(0,0,0,.05)}table.table th,table.table td{text-align:start;border:none;padding:12px 12px;vertical-align:middle;margin:0;overflow:visible}table.table th{font-weight:bold}table.table tr:hover{background-color:#f2f2f2}html.dark-mode table.table tr:hover{background-color:#333}table.table .text-right{text-align:end}table.table .text-center{text-align:center}table.table td.actions{overflow:visible}table.table a{display:inline-block}table.table.expand-to-padding{margin-left:-12px;margin-right:-12px;width:calc(100% + (2*12px));max-width:calc(100% + (2*12px))}table.no-style td{border:0;padding:0}table.list-table{margin:0 -6px}table.list-table td{border:0;vertical-align:middle;padding:6px}.input-base,input[type=text],input[type=number],input[type=email],input[type=date],input[type=search],input[type=url],input[type=color],input[type=password],select,textarea,.fake-input{border-radius:3px;border:1px solid #d4d4d4;background-color:#fff;border-color:#d4d4d4;color:#666;display:inline-block;font-size:14px;padding:10.8px;height:40px;width:250px;max-width:100%}html.dark-mode .input-base,html.dark-mode input[type=text],html.dark-mode input[type=number],html.dark-mode input[type=email],html.dark-mode input[type=date],html.dark-mode input[type=search],html.dark-mode input[type=url],html.dark-mode input[type=color],html.dark-mode input[type=password],html.dark-mode select,html.dark-mode textarea,html.dark-mode .fake-input{background-color:#333}html.dark-mode .input-base,html.dark-mode input[type=text],html.dark-mode input[type=number],html.dark-mode input[type=email],html.dark-mode input[type=date],html.dark-mode input[type=search],html.dark-mode input[type=url],html.dark-mode input[type=color],html.dark-mode input[type=password],html.dark-mode select,html.dark-mode textarea,html.dark-mode .fake-input{border-color:#111}html.dark-mode .input-base,html.dark-mode input[type=text],html.dark-mode input[type=number],html.dark-mode input[type=email],html.dark-mode input[type=date],html.dark-mode input[type=search],html.dark-mode input[type=url],html.dark-mode input[type=color],html.dark-mode input[type=password],html.dark-mode select,html.dark-mode textarea,html.dark-mode .fake-input{color:#aaa}.input-base.neg,input.neg[type=text],input.neg[type=number],input.neg[type=email],input.neg[type=date],input.neg[type=search],input.neg[type=url],input.neg[type=color],input.neg[type=password],select.neg,textarea.neg,.neg.fake-input,.input-base.invalid,input.invalid[type=text],input.invalid[type=number],input.invalid[type=email],input.invalid[type=date],input.invalid[type=search],input.invalid[type=url],input.invalid[type=color],input.invalid[type=password],select.invalid,textarea.invalid,.invalid.fake-input{border:1px solid var(--color-negative)}.input-base.pos,input.pos[type=text],input.pos[type=number],input.pos[type=email],input.pos[type=date],input.pos[type=search],input.pos[type=url],input.pos[type=color],input.pos[type=password],select.pos,textarea.pos,.pos.fake-input,.input-base.valid,input.valid[type=text],input.valid[type=number],input.valid[type=email],input.valid[type=date],input.valid[type=search],input.valid[type=url],input.valid[type=color],input.valid[type=password],select.valid,textarea.valid,.valid.fake-input{border:1px solid var(--color-positive)}.input-base.disabled,input.disabled[type=text],input.disabled[type=number],input.disabled[type=email],input.disabled[type=date],input.disabled[type=search],input.disabled[type=url],input.disabled[type=color],input.disabled[type=password],select.disabled,textarea.disabled,.disabled.fake-input,.input-base[disabled],input[disabled][type=text],input[disabled][type=number],input[disabled][type=email],input[disabled][type=date],input[disabled][type=search],input[disabled][type=url],input[disabled][type=color],input[disabled][type=password],select[disabled],textarea[disabled],[disabled].fake-input{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAYAAADEUlfTAAAAMUlEQVQIW2NkwAGuXbv2nxGbHEhCS0uLEUMSJgHShCKJLIEiiS4Bl8QmAZbEJQGSBAC62BuJ+tt7zgAAAABJRU5ErkJggg==)}.input-base[readonly],input[readonly][type=text],input[readonly][type=number],input[readonly][type=email],input[readonly][type=date],input[readonly][type=search],input[readonly][type=url],input[readonly][type=color],input[readonly][type=password],select[readonly],textarea[readonly],[readonly].fake-input{background-color:#f8f8f8}.input-base:focus,input[type=text]:focus,input[type=number]:focus,input[type=email]:focus,input[type=date]:focus,input[type=search]:focus,input[type=url]:focus,input[type=color]:focus,input[type=password]:focus,select:focus,textarea:focus,.fake-input:focus{border-color:var(--color-primary);outline:1px solid var(--color-primary)}.input-fill-width{width:100% !important}.fake-input{overflow:auto}#html-editor{display:none}#markdown-editor{position:relative;z-index:5}#markdown-editor #markdown-editor-input{font-style:normal;font-weight:400;padding:6px 16px;color:#444;border-radius:0;max-height:100%;flex:1;border:0;width:100%}#markdown-editor #markdown-editor-input:focus{outline:0}#markdown-editor.fullscreen{position:fixed;top:0;left:0;height:100%;z-index:2}.markdown-editor-wrap{border-top:1px solid #ddd;border-bottom:1px solid #ddd;border-color:#ddd;position:relative;flex:1;min-width:0}html.dark-mode .markdown-editor-wrap{border-color:#000}.markdown-editor-wrap+.markdown-editor-wrap{flex-basis:50%;flex-shrink:0;flex-grow:0}.markdown-editor-wrap .cm-editor{flex:1;max-width:100%;border:0;margin:0}.markdown-panel-divider{width:2px;background-color:#ddd;cursor:col-resize}html.dark-mode .markdown-panel-divider{background-color:#000}@media screen and (max-width: 880px){#markdown-editor{flex-direction:column}#markdown-editor .markdown-editor-wrap{width:100%;max-width:100%;flex-grow:1;flex-basis:auto !important;min-height:0}.editor-toolbar-label{float:none !important;border-color:#ddd;display:block}html.dark-mode .editor-toolbar-label{border-color:#555}.markdown-editor-wrap:not(.active) .editor-toolbar+div,.markdown-editor-wrap:not(.active) .editor-toolbar .buttons,.markdown-editor-wrap:not(.active) .markdown-display{display:none}#markdown-editor .markdown-editor-wrap:not(.active){flex-grow:0;flex:none}}.markdown-editor-display{background-color:#fff}.markdown-editor-display body{display:block;background-color:#fff;padding-inline-start:16px;padding-inline-end:16px}.markdown-editor-display [drawio-diagram]:hover{outline:2px solid var(--color-primary)}html.markdown-editor-display.dark-mode{background-color:#222}html.markdown-editor-display.dark-mode body{background-color:#222}.editor-toolbar{height:32px;width:100%;font-size:11px;line-height:1.6;border-bottom:1px solid #ddd;background-color:#eee;background-color:#eee;border-color:#ddd;flex:none}html.dark-mode .editor-toolbar{background-color:#111}html.dark-mode .editor-toolbar{border-color:#000}html.dark-mode .editor-toolbar button{color:#aaa}.editor-toolbar .buttons{font-size:14px}.editor-toolbar .buttons .dropdown-menu{padding:0}.editor-toolbar .buttons .toggle-switch{margin:12px 0}.editor-toolbar .buttons button{font-size:.9rem;width:2rem;text-align:center;border-left:1px solid;border-color:#ddd}html.dark-mode .editor-toolbar .buttons button{border-color:#555}.editor-toolbar .buttons button svg{margin-inline-end:0}.editor-toolbar .buttons button:hover{background-color:#ddd}html.dark-mode .editor-toolbar .buttons button:hover{background-color:#222}label{color:#666;display:block;line-height:1.4em;font-size:.94em;font-weight:400;padding-bottom:2px;margin-bottom:.2em}html.dark-mode label{color:#ddd}label.inline{display:inline-block}label.radio,label.checkbox{font-weight:400;user-select:none}label.radio input[type=radio],label.radio input[type=checkbox],label.checkbox input[type=radio],label.checkbox input[type=checkbox]{margin-inline-end:6px}label.inline.checkbox{margin-inline-end:16px}label+p.small{margin-bottom:.8em}table.form-table{max-width:100%}table.form-table td{overflow:hidden;padding:1.5px 0}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:url("data:image/svg+xml;utf8,");background-size:10px 12px;background-position:calc(100% - 20px) 64%;background-repeat:no-repeat}html[dir=rtl] select{background-position:20px 70%}input[type=date]{width:190px}input[type=color]{height:60px}input[type=color].small{height:42px;width:60px;padding:2px}.toggle-switch{user-select:none;display:inline-grid;grid-template-columns:28px 1fr;align-items:center;margin:16px 0}.toggle-switch .custom-checkbox{width:16px;height:16px;border-radius:2px;display:inline-block;border:2px solid currentColor;overflow:hidden;fill:currentColor}.toggle-switch .custom-checkbox .svg-icon{width:100%;height:100%;margin:0;bottom:auto;top:-1.5px;left:0;transition:transform ease-in-out 120ms;transform:scale(0);transform-origin:center center}.toggle-switch input[type=checkbox]{display:none}.toggle-switch input[type=checkbox]:checked+.custom-checkbox .svg-icon{transform:scale(1)}.toggle-switch .custom-checkbox:hover{background-color:rgba(0,0,0,.05);opacity:.8}.toggle-switch input[type=checkbox][disabled]~*{opacity:.8;cursor:not-allowed}.toggle-switch input[type=checkbox][disabled]~.custom-checkbox{border-color:#999;color:#999 !important;background:#f2f2f2}.toggle-switch-list .toggle-switch{margin:6px 0}.toggle-switch-list.compact .toggle-switch{margin:1px 0}.form-group{margin-bottom:12px}.setting-list>div{border-bottom:1px solid #ddd;padding:32px 0}.setting-list>div:last-child{border-bottom:none}.setting-list-label{color:#222;font-size:1rem}.setting-list-label+p.small{margin-bottom:0}.setting-list-label+.grid{margin-top:16px}.setting-list .grid input[type=text],.setting-list .grid input[type=email],.setting-list .grid input[type=password],.setting-list .grid select,.stretch-inputs input[type=text],.stretch-inputs input[type=email],.stretch-inputs input[type=password],.stretch-inputs select{width:100%}.simple-code-input{background-color:#f8f8f8;font-family:monospace;font-size:12px;min-height:100px;display:block;width:100%}.form-group div.text-pos,.form-group div.text-neg,.form-group p.text-post,.form-group p.text-neg{padding:6px 0}.form-group.collapsible{padding:0 16px;border:1px solid;border-color:#ddd;border-radius:4px}html.dark-mode .form-group.collapsible{border-color:#000}.form-group.collapsible .collapse-title{margin-inline-start:-16px;margin-inline-end:-16px;padding:12px 16px;display:block;width:calc(100% + 32px);text-align:start}.form-group.collapsible .collapse-title,.form-group.collapsible .collapse-title label{cursor:pointer}.form-group.collapsible .collapse-title label{padding-bottom:0;margin-bottom:0;color:inherit}.form-group.collapsible .collapse-title label:before{display:inline-block;content:"▸";margin-inline-end:16px;transition:all ease-in-out 400ms;transform:rotate(0)}.form-group.collapsible .collapse-content{display:none;padding-bottom:16px}.form-group.collapsible.open .collapse-title label:before{transform:rotate(90deg)}.title-input input[type=text]{display:block;width:100%;padding:12px;margin-top:0;font-size:2em;height:auto}.title-input.page-title{font-size:.8em;background-color:#fff}html.dark-mode .title-input.page-title{background-color:#333}.title-input.page-title .input{border:0;margin-bottom:-1px}.title-input.page-title input[type=text]{max-width:840px;margin:0 auto;border:none;height:auto}.page-title input{display:block;width:100%;font-size:1.4em}.description-input textarea{display:block;width:100%;padding:12px;font-size:14px;color:#666;height:auto}div[editor-type=markdown] .title-input.page-title input[type=text]{max-width:100%;border-radius:0}.search-box{max-width:100%;position:relative}.search-box button[tabindex="-1"]{background-color:rgba(0,0,0,0);border:none;color:#666;padding:0;cursor:pointer;position:absolute;left:8px;top:9px}html.dark-mode .search-box button[tabindex="-1"]{color:#aaa}html[dir=rtl] .search-box button[tabindex="-1"]{right:8px;left:auto}.search-box input{display:block;padding:9px;padding-inline-start:28px;width:300px;max-width:100%;height:auto}.search-box.flexible input{width:100%}.search-box .search-box-cancel{left:auto;right:0}.contained-search-box{display:flex;height:38px;z-index:-1}.contained-search-box.floating{box-shadow:0 1px 3px 1px rgba(76,76,76,.26);border-radius:4px;overflow:hidden}html.dark-mode .contained-search-box.floating{border:1px solid #000}.contained-search-box input,.contained-search-box button{height:100%;border-radius:0;border:1px solid #ddd;border-color:#ddd;margin-inline-start:-1px}html.dark-mode .contained-search-box input,html.dark-mode .contained-search-box button{border-color:#000}.contained-search-box input:last-child,.contained-search-box button:last-child{border-inline-end:0}.contained-search-box input{border:0;flex:5;padding:6px 12px}.contained-search-box input:focus,.contained-search-box input:active{outline:1px dotted var(--color-primary);outline-offset:-2px;border:0}.contained-search-box button{border:0;width:48px;border-inline-start:1px solid #ddd;background-color:#fff;background-color:#fff;color:#444}html.dark-mode .contained-search-box button{background-color:#333}html.dark-mode .contained-search-box button{color:#aaa}.contained-search-box button:focus{outline:1px dotted var(--color-primary);outline-offset:-2px}.contained-search-box svg{margin:0}@media screen and (max-width: 600px){.contained-search-box{width:180px}}.outline>input{border:0;border-bottom:2px solid #ddd;border-radius:0}.outline>input:focus,.outline>input:active{border:0;border-bottom:2px solid #aaa;outline:0}.image-picker img{background-color:#bbb;max-width:100%}.custom-file-input{overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;height:1px;border:0;clip:rect(0, 0, 0, 0)}.custom-file-input:focus+label{border-color:var(--color-primary);outline:1px solid var(--color-primary)}input.shortcut-input{width:auto;max-width:120px;height:auto}.anim.fadeIn{opacity:0;animation-name:fadeIn;animation-duration:120ms;animation-timing-function:ease-in-out;animation-fill-mode:forwards}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.search-suggestions-animation{animation-name:searchSuggestions;animation-duration:120ms;animation-fill-mode:forwards;animation-timing-function:cubic-bezier(0.62, 0.28, 0.23, 0.99)}@keyframes searchSuggestions{0%{opacity:.5;transform:scale(0.9)}100%{opacity:1;transform:scale(1)}}@keyframes loadingBob{0%{transform:translate3d(0, 0, 0)}30%{transform:translate3d(0, 0, 0)}50%{transform:translate3d(0, -10px, 0)}70%{transform:translate3d(0, 0, 0)}100%{transform:translate3d(0, 0, 0)}}@keyframes pointer{0%{transform:translate3d(0, 20px, 0) scale3d(0, 0, 0)}100%{transform:translate3d(0, 0, 0) scale3d(1, 1, 1)}}.anim.pointer{transform-origin:50% 100%;animation-name:pointer;animation-duration:180ms;animation-delay:0s;animation-timing-function:cubic-bezier(0.62, 0.28, 0.23, 0.99)}.tox.tox-fullscreen{position:fixed;top:0;height:100%;width:100%;max-width:100%;z-index:100}.page-content.mce-content-body{padding-block-start:1rem;padding-block-end:1rem;outline:0;display:block}.page-content.mce-content-body doc-root{display:block}.page-content.mce-content-body code-block{display:block}.page-content.mce-content-body p{line-height:1.6}body.page-content.mce-content-body{padding-bottom:5rem}.tox .tox-pop__dialog .tox-toolbar{background:rgba(0,0,0,0) !important}.tox-toolbar__primary{justify-content:center}.page-content.mce-content-body code-block>*{pointer-events:none}.page-content.mce-content-body code-block pre{display:none}.page-content.mce-content-body details summary{pointer-events:none}.page-content.mce-content-body details doc-root{padding:12px;margin-left:-10px;margin-right:-10px;margin-bottom:-10px;margin-top:-10px;overflow:hidden}.dark-mode .tox .tox-toolbar__primary,.dark-mode .tox .tox-menu,.dark-mode .tox .tox-dialog__header,.dark-mode .tox .tox-dialog,.dark-mode .tox .tox-dialog__footer,.dark-mode .tox .tox-pop__dialog,.dark-mode .tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#333 !important}.dark-mode .tox .tox-tbtn svg,.dark-mode .tox .tox-tbtn,.dark-mode .tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#dbdbdb;fill:#dbdbdb}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{width:6em !important}.tox-menu .tox-collection__item blockquote::before{content:none}.tox-menu .tox-collection__item blockquote{border-left:4px solid var(--color-primary) !important;padding:4px 6px !important}.tox-menu .tox-collection__item blockquote{border-left:4px solid var(--color-primary) !important;padding:4px 6px !important}.tox-menu .tox-collection__item p[style*=background-color]{padding:4px 6px !important;border-left:3px solid currentColor !important}.tox-menu .tox-collection__item[title^="<"]>div>div{font-family:var(--font-code) !important;border:1px solid #ddd !important;background-color:#eee !important;padding:4px 6px !important}.tox-menu .tox-collection__item-label{line-height:normal !important}.page-content.mce-content-body .task-list-item{margin-left:0;position:relative}.page-content.mce-content-body .task-list-item>input[type=checkbox]{display:none}.page-content.mce-content-body .task-list-item:before{content:"";display:inline-block;border:2px solid #ccc;width:12px;height:12px;border-radius:2px;margin-right:8px;vertical-align:text-top;cursor:pointer;position:absolute;left:-24px;top:4px}.page-content.mce-content-body .task-list-item[checked]:before{background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-position:50% 50%;background-size:100% 100%}.cm-editor{font-size:12px;border:1px solid #ddd;line-height:1.4;margin-bottom:24px}.page-content .cm-editor,.CodeMirrorContainer .cm-editor{border-radius:4px}.cm-editor .cm-line,.cm-editor .cm-gutter{font-family:var(--font-code)}.dark-mode .cm-editor{border-color:#444}.cm-copy-button{position:absolute;display:flex;align-items:center;justify-content:center;top:-1px;right:-1px;background-color:#eee;border:1px solid #ddd;border-radius:0 4px 0 0;background-color:#eee;border-color:#ddd;color:#444;line-height:0;cursor:pointer;z-index:5;user-select:none;opacity:0;pointer-events:none;width:32px;height:32px;transition:background-color linear 60ms,color linear 60ms}html.dark-mode .cm-copy-button{background-color:#333}html.dark-mode .cm-copy-button{border-color:#444}html.dark-mode .cm-copy-button{color:#888}.cm-copy-button svg{fill:currentColor}.cm-copy-button.success{background:var(--color-positive);color:#fff}.cm-copy-button:focus{outline:0 !important}.cm-editor:hover .cm-copy-button{user-select:all;opacity:.6;pointer-events:all}.notification{position:fixed;top:0;right:0;margin:32px;padding:16px 24px;background-color:#fff;background-color:#fff;border-radius:4px;border-inline-start:6px solid currentColor;box-shadow:0 1px 6px 1px rgba(22,22,22,.2);z-index:999999;cursor:pointer;max-width:360px;transition:transform ease-in-out 280ms;transform:translateX(580px);display:grid;grid-template-columns:42px 1fr 12px;color:#444;font-weight:700}html.dark-mode .notification{background-color:#444}.notification span,.notification svg{vertical-align:middle;justify-self:center;align-self:center}.notification svg{width:2.8rem;height:2.8rem;padding-inline-end:12px;fill:currentColor}.notification .dismiss{margin-top:-8px}.notification .dismiss svg{height:1rem;color:#444}html.dark-mode .notification .dismiss svg{color:#888}.notification span{vertical-align:middle;line-height:1.3}html.dark-mode .notification span{color:#bbb}.notification.pos{color:var(--color-positive)}.notification.neg{color:var(--color-negative)}.notification.warning{color:var(--color-warning)}.notification.showing{transform:translateX(0)}.notification.showing:hover{transform:translate3d(0, -2px, 0)}.chapter-contents-toggle{cursor:pointer;margin:0;transition:all ease-in-out 180ms;user-select:none}.chapter-contents-toggle svg[data-icon=caret-right]{margin-inline-end:0;font-size:1rem;transition:all ease-in-out 180ms;transform:rotate(0deg);transform-origin:50% 50%}.chapter-contents-toggle.open svg[data-icon=caret-right]{transform:rotate(90deg)}.chapter-contents-toggle svg[data-icon=caret-right]+*{margin-inline-start:3px}[overlay],.popup-background{background-color:rgba(0,0,0,.333);position:fixed;z-index:95536;width:100%;height:100%;min-width:100%;min-height:100%;top:0;left:0;right:0;bottom:0;align-items:center;justify-content:center;display:none}html.dark-mode [overlay],html.dark-mode .popup-background{background-color:rgba(0,0,0,.6)}.popup-body-wrap{display:flex}.popup-body{background-color:#fff;max-height:90%;max-width:1200px;width:90%;height:auto;margin:2% auto;border-radius:4px;box-shadow:0 0 15px 0 rgba(0,0,0,.3);overflow:hidden;z-index:999;display:flex;flex-direction:column;position:relative}html.dark-mode .popup-body{background-color:#333}.popup-body.small{margin:2% auto;width:800px;max-width:90%}.popup-body.very-small{margin:2% auto;width:600px;max-width:90%}.popup-body:before{display:flex;align-self:flex-start}.popup-body .popup-content{overflow-y:auto}.popup-body:focus{outline:0}.popup-header button,.popup-footer button{margin:0;border-radius:0;box-shadow:none;color:#fff;padding:6px 16px;cursor:pointer}.popup-header button:not(.popup-header-close){font-size:.8rem}.popup-header button:hover{background-color:rgba(255,255,255,.1)}.popup-footer{justify-content:end;background-color:var(--color-primary-light);min-height:41px}.popup-footer button{padding:10px 16px}.popup-header-close{border:0;color:#fff;font-size:16px;cursor:pointer}.popup-header-close svg{margin-right:0}.popup-header,.popup-footer{display:flex;position:relative;height:40px;flex:0}.popup-header .popup-title,.popup-footer .popup-title{color:#fff;margin-right:auto;padding:8px 16px}.popup-header.flex-container-row,.popup-footer.flex-container-row{display:flex !important}body.flexbox-support #entity-selector-wrap .popup-body .form-group{height:444px;min-height:444px}#entity-selector-wrap .popup-body .form-group{margin:0}.popup-body .entity-selector-container{flex:1}.dropzone-overlay{position:absolute;display:flex;justify-content:center;align-items:center;font-size:1.333rem;width:98%;height:98%;left:1%;top:1%;border-radius:4px;border:1px dashed var(--color-primary);font-style:italic;box-sizing:content-box;background-clip:padding-box;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath fill='%23a9a9a9' fill-opacity='0.52' d='M1 3h1v1H1V3zm2-2h1v1H3V1z'%3E%3C/path%3E%3C/svg%3E");background-color:var(--color-primary);color:#fff;opacity:.8;z-index:9;pointer-events:none;animation:dzAnimIn 240ms ease-in-out}.dropzone-landing-area{background-color:var(--color-primary-light);padding:16px 24px;width:100%;border:1px dashed var(--color-primary);color:var(--color-primary);border-radius:4px}@keyframes dzAnimIn{0%{opacity:0;transform:scale(0.7)}60%{transform:scale(1.1)}100%{transform:scale(1);opacity:.8}}@keyframes dzFileItemIn{0%{opacity:.5;transform:translateY(28px)}100%{opacity:1;transform:translateY(0)}}@keyframes dzFileItemOut{0%{opacity:1;transform:translateY(0)}100%{opacity:.5;transform:translateY(28px)}}.dropzone-file-item{width:260px;height:80px;position:relative;display:flex;margin:1rem;flex-direction:row;background:#fff;box-shadow:0 1px 6px 1px rgba(22,22,22,.2);border-radius:4px;overflow:hidden;padding-bottom:3px;animation:dzFileItemIn ease-in-out 240ms;transition:transform ease-in-out 120ms,box-shadow ease-in-out 120ms;cursor:pointer}html.dark-mode .dropzone-file-item{background:#444}.dropzone-file-item:hover{transform:translateY(-3px);box-shadow:0 3px 8px 1px rgba(22,22,22,.2)}.dropzone-file-item.dismiss{animation:dzFileItemOut ease-in-out 240ms}.dropzone-file-item .loading-container{text-align:start !important;margin:0}.dropzone-file-item-image-wrap{width:80px;position:relative;background-color:var(--color-primary-light)}.dropzone-file-item-image-wrap img{object-fit:cover;width:100%;height:100%;opacity:.8}.dropzone-file-item-text-wrap{flex:1;display:block;padding:1rem;overflow:auto}.dropzone-file-item-progress{position:absolute;bottom:0;left:0;font-size:0;height:3px;background-color:var(--color-primary);transition:width ease-in-out 240ms}.dropzone-file-item-label,.dropzone-file-item-status{align-items:center;font-size:.8rem;font-weight:700}.dropzone-file-item-status[data-status]{display:flex;font-size:.6rem;font-weight:500;line-height:1.2}.dropzone-file-item-status[data-status=success]{color:var(--color-positive)}.dropzone-file-item-status[data-status=error]{color:var(--color-negative)}.dropzone-file-item-status[data-status]+.dropzone-file-item-label{display:none}.image-manager-body{min-height:70vh}.image-manager-filter-bar{position:sticky;top:0;z-index:5;background-color:rgba(255,255,255,.85)}html.dark-mode .image-manager-filter-bar{background-color:rgba(80,80,80,.85)}.image-manager-filter-bar-bg{position:absolute;left:0;top:0;width:100%;height:100%;opacity:.15;z-index:-1}.image-manager-filters{box-shadow:0 1px 3px 1px rgba(76,76,76,.26);border-radius:4px;overflow:hidden;border-bottom:0 !important}html.dark-mode .image-manager-filters{border:1px solid #000 !important}.image-manager-filters button{line-height:0;background-color:#fff}html.dark-mode .image-manager-filters button{background-color:#333}.image-manager-filters svg{margin:0}.image-manager-list{padding:3px;display:grid;grid-template-columns:repeat(auto-fit, minmax(140px, 1fr));gap:3px;z-index:3}.image-manager-list>div{aspect-ratio:1}.image-manager-list .image{display:block;position:relative;border-radius:0;margin:0;width:100%;text-align:start;padding:0;cursor:pointer;aspect-ratio:1;border-color:#ddd;transition:all linear 80ms;overflow:hidden}html.dark-mode .image-manager-list .image{border-color:#000}.image-manager-list .image.selected{background-color:var(--color-primary-light);outline:currentColor 3px solid;border-radius:3px;transform:scale3d(0.95, 0.95, 0.95)}.image-manager-list .image img{width:100%;max-width:100%;display:block;object-fit:cover;height:auto}.image-manager-list .image .image-meta{opacity:0;position:absolute;width:100%;bottom:0;left:0;color:#eee;background-color:rgba(0,0,0,.7);font-size:10px;padding:3px 4px;pointer-events:none;transition:opacity ease-in-out 80ms}.image-manager-list .image .image-meta span{display:block}.image-manager-list .image.selected .image-meta,.image-manager-list .image:hover .image-meta,.image-manager-list .image:focus .image-meta{opacity:1}@media screen and (max-width: 880px){.image-manager-list .image .image-meta{display:none}}.image-manager .load-more{text-align:center;padding:12px 16px;clear:both}.image-manager .load-more .loading-container{margin:0}.image-manager .loading-container{text-align:center}.image-manager-sidebar{width:300px;margin:0 auto;overflow-y:auto;overflow-x:hidden;border-inline-start:1px solid #ddd;border-color:#ddd}html.dark-mode .image-manager-sidebar{border-color:#000}.image-manager-sidebar .inner{min-height:auto;padding:16px}.image-manager-sidebar .image-manager-viewer img{max-width:100%;max-height:180px;display:block;margin:0 auto 16px auto;box-shadow:0 1px 21px 1px rgba(76,76,76,.3)}.image-manager-sidebar .image-manager-viewer{height:196px;display:flex;align-items:center;justify-content:center}.image-manager-sidebar .image-manager-viewer a{display:inline-block}@media screen and (max-width: 880px){.image-manager-sidebar{border-inline-start:0}}.image-manager-content{display:flex;flex-direction:column;flex:1;overflow-y:scroll}.image-manager-content .container{width:100%}.image-manager-content .full-tab{text-align:center}.tab-container.bordered [role=tablist] button[role=tab]{border-inline-end:1px solid #ddd;border-inline-end-color:#ddd}html.dark-mode .tab-container.bordered [role=tablist] button[role=tab]{border-inline-end-color:#000}.tab-container.bordered [role=tablist] button[role=tab]:last-child{border-inline-end:none}.tab-container [role=tablist]{display:flex;align-items:end;justify-items:start;text-align:start;border-bottom:1px solid #ddd;border-color:#ddd;margin-bottom:16px}html.dark-mode .tab-container [role=tablist]{border-color:#444}.tab-container [role=tablist] button[role=tab]{display:inline-block;padding:12px;color:rgba(0,0,0,.5);cursor:pointer;border-bottom:2px solid rgba(0,0,0,0);margin-bottom:-1px}html.dark-mode .tab-container [role=tablist] button[role=tab]{color:rgba(255,255,255,.5)}.tab-container [role=tablist] button[role=tab][aria-selected=true]{color:var(--color-link) !important;border-bottom-color:var(--color-link) !important;outline:0 !important}.tab-container [role=tablist] button[role=tab]:hover,.tab-container [role=tablist] button[role=tab]:focus{color:rgba(0,0,0,.8);border-bottom-color:rgba(0,0,0,.2)}html.dark-mode .tab-container [role=tablist] button[role=tab]:hover,html.dark-mode .tab-container [role=tablist] button[role=tab]:focus{color:rgba(255,255,255,.8)}html.dark-mode .tab-container [role=tablist] button[role=tab]:hover,html.dark-mode .tab-container [role=tablist] button[role=tab]:focus{border-bottom-color:rgba(255,255,255,.2)}.tab-container [role=tablist] button[role=tab]:focus{outline:1px dotted var(--color-primary);outline-offset:-2px}.tab-container [role=tablist].controls-card{margin-bottom:0;border-bottom:0;padding:0 6px}.image-picker .none{display:none}.code-editor .CodeMirror{height:auto;min-height:50vh;border-bottom:0}.code-editor .lang-options{overflow-y:scroll;flex-basis:200px;flex-grow:1}.code-editor .lang-options button{display:block;padding:6px 16px;border-bottom:1px solid;color:#333;border-bottom-color:#eee;cursor:pointer;width:100%;text-align:left;font-family:var(--font-code);font-size:.7rem;padding-left:30px}html.dark-mode .code-editor .lang-options button{color:#aaa}html.dark-mode .code-editor .lang-options button{border-bottom-color:#000}.code-editor .lang-options button:hover,.code-editor .lang-options button.active{background-color:var(--color-primary-light);color:var(--color-primary)}.code-editor button.lang-option-favorite-toggle{position:absolute;top:0;left:0;width:28px;font-size:1rem;border:0;line-height:1;padding:2px;z-index:2;height:100%;text-align:center;color:var(--color-primary)}.code-editor button.lang-option-favorite-toggle svg{margin:0}.code-editor button[data-favourite=true]~.action-favourite,.code-editor button[data-favourite=false]~.action-unfavourite{display:none}.code-editor .action-favourite{opacity:.5}.code-editor button:hover~.action-favourite{opacity:1}.code-editor label{background-color:var(--color-primary-light);width:100%;color:var(--color-primary);padding:3px 12px;margin-bottom:0}.code-editor-language-list{position:relative;width:160px;z-index:2;align-items:stretch}.code-editor-language-list input{border-radius:0;border:0;border-bottom:1px solid #ddd;padding:6px 12px;height:auto}.code-editor-main{flex:1;min-width:0}.code-editor-main .cm-editor{margin-bottom:0;z-index:1;max-width:100%;width:100%}.code-editor-body-wrap{height:80vh}@media screen and (max-width: 600px){.code-editor .lang-options{display:none}.code-editor-body-wrap{flex-direction:column}.code-editor-language-list,.code-editor-language-list input{width:100%}}.comments-container{padding-inline:32px}@media screen and (max-width: 880px){.comments-container{padding-inline:6px}}.comment-box{border-radius:4px;border:1px solid #ddd;border-color:#ddd;background-color:#fff}html.dark-mode .comment-box{border-color:#000}html.dark-mode .comment-box{background-color:#222}.comment-box .content{font-size:.666em;padding:6px 12px}.comment-box .content p,.comment-box .content ul,.comment-box .content ol{font-size:14px;margin:.5em 0}.comment-box .actions{opacity:0;transition:opacity ease-in-out 120ms}.comment-box:hover .actions,.comment-box:focus-within .actions{opacity:1}.comment-box .actions button:focus{outline:1px dotted var(--color-primary)}@media screen and (max-width: 880px){.comment-box .actions{opacity:1}}.comment-box .header{border-bottom:1px solid #ddd;padding:6px 12px;border-color:#ddd}html.dark-mode .comment-box .header{border-color:#000}.comment-box .header a{color:inherit}.comment-box .header .text-muted{color:#999}.comment-box .header .meta a,.comment-box .header .meta span{white-space:nowrap}.comment-box .header .right-meta .text-muted{opacity:.8}.comment-thread-indicator{border-inline-start:3px dotted #ddd;border-color:#ddd;margin-inline-start:6px;width:24px;height:calc(100% - 16px)}html.dark-mode .comment-thread-indicator{border-color:#444}.comment-branch .comment-branch .comment-branch .comment-branch .comment-thread-indicator{display:none}.comment-reply{display:none;margin:0 !important;margin-bottom:-3px !important}.comment-branch .comment-branch .comment-branch .comment-branch .comment-reply{display:block}.comment-container-compact .comment-box .meta{font-size:.8rem}.comment-container-compact .comment-box .header{padding:6px}.comment-container-compact .comment-box .right-meta{display:none}.comment-container-compact .comment-box .content{padding:6px 12px}.comment-container-compact .comment-thread-indicator{width:16px}#tag-manager .drag-card{max-width:500px}.template-item{cursor:pointer;position:relative}.template-item:hover,.template-item .template-item-actions button:hover{background-color:#f2f2f2}.template-item .template-item-actions{position:absolute;top:0;inset-inline-end:0;width:50px;height:100%;display:flex;flex-direction:column;border-inline-start:1px solid;border-color:#ddd}html.dark-mode .template-item .template-item-actions{border-color:#000}.template-item .template-item-actions button{cursor:pointer;flex:1;background-color:#fff;border:0;border-top:1px solid;border-color:#ddd}html.dark-mode .template-item .template-item-actions button{background-color:#222}html.dark-mode .template-item .template-item-actions button{border-color:#000}.template-item .template-item-actions button svg{margin:0}.template-item .template-item-actions button:first-child{border-top:0}.dropdown-search{position:relative}.dropdown-search-toggle-breadcrumb{border:1px solid rgba(0,0,0,0);border-radius:4px;line-height:normal;padding:6px}.dropdown-search-toggle-breadcrumb:hover{border-color:#ddd}.dropdown-search-toggle-breadcrumb .svg-icon{margin-inline-end:0}.dropdown-search-toggle-select{display:flex;gap:12px;line-height:normal}.dropdown-search-toggle-select .svg-icon{height:26px;width:26px;margin:0}.dropdown-search-toggle-select .avatar{height:22px;width:22px}.dropdown-search-toggle-select .avatar+span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dropdown-search-toggle-select .dropdown-search-toggle-caret{font-size:1.15rem}.dropdown-search-toggle-select-label{min-width:0;white-space:nowrap}.dropdown-search-toggle-select-caret{line-height:0;margin-left:auto;margin-top:-2px;display:flex;align-items:center}.dropdown-search-dropdown{box-shadow:0 1px 3px 1px rgba(76,76,76,.26);overflow:hidden;min-height:100px;width:240px;display:none;position:absolute;z-index:80;right:0;top:0;margin-top:16px}html[dir=rtl] .dropdown-search-dropdown{right:auto;left:-16px}.dropdown-search-dropdown .dropdown-search-search .svg-icon{position:absolute;left:12px;top:11px;fill:#888;pointer-events:none}html[dir=rtl] .dropdown-search-dropdown .dropdown-search-search .svg-icon{right:12px;left:auto}.dropdown-search-dropdown .dropdown-search-list{max-height:400px;overflow-y:scroll;text-align:start}.dropdown-search-dropdown .dropdown-search-item{padding:12px 16px}.dropdown-search-dropdown .dropdown-search-item:hover,.dropdown-search-dropdown .dropdown-search-item:focus{background-color:#f2f2f2;text-decoration:none}.dropdown-search-dropdown input,.dropdown-search-dropdown input:focus{padding-inline-start:32px;border-radius:0;border:0;border-bottom:1px solid #ddd}.dropdown-search-dropdown input:focus{outline:0}@media screen and (max-width: 880px){.dropdown-search-dropdown{position:fixed;right:auto;left:16px}.dropdown-search-dropdown .dropdown-search-list{max-height:240px}}.item-list{box-shadow:0 1px 3px 0 rgba(0,0,0,.1)}.item-list-row{border:1.5px solid;border-color:#e2e2e2;border-bottom-width:0}html.dark-mode .item-list-row{border-color:#444}.item-list-row label{padding-bottom:0}.item-list-row:hover{background-color:#f6f6f6}html.dark-mode .item-list-row:hover{background-color:#333}.item-list-row:first-child{border-radius:4px 4px 0 0}.item-list-row:last-child{border-radius:0 0 4px 4px;border-bottom-width:1.5px}.item-list-row:first-child:last-child{border-radius:4px}.item-list-row-toggle-all{visibility:hidden}.item-list-row:hover .item-list-row-toggle-all{visibility:visible}.status-indicator-active,.status-indicator-inactive{width:8px;height:8px;border-radius:50%;display:inline-block}.status-indicator-active{background-color:var(--color-positive)}.status-indicator-inactive{background-color:var(--color-negative)}.shortcut-container{background-color:rgba(0,0,0,.25);pointer-events:none;position:fixed;left:0;top:0;width:100%;height:100%;z-index:99}.shortcut-linkage{position:fixed;box-shadow:0 0 4px 0 #fff;border-radius:3px}.shortcut-hint{position:fixed;padding:3px 3px;font-size:.85rem;font-weight:700;line-height:1;background-color:#eee;border-radius:3px;border:1px solid #b4b4b4;box-shadow:0 1px 1px rgba(0,0,0,.2),0 2px 0 0 rgba(255,255,255,.7) inset;color:#333}.back-to-top{background-color:var(--color-primary);position:fixed;bottom:16px;right:24px;padding:5px 7px;cursor:pointer;color:#fff;fill:#fff;width:40px;height:40px;border-radius:40px;transition:all ease-in-out 180ms;opacity:0;z-index:999;overflow:hidden}.back-to-top svg{width:26.6666666667px;height:26.6666666667px;margin-inline-end:4px}.back-to-top:hover{width:136px;opacity:1 !important}.back-to-top .inner{width:136px}.back-to-top span{position:relative;vertical-align:top;line-height:2}.scroll-box{list-style:none;padding:0;margin:0;max-height:280px;overflow-y:scroll;border:1px solid;border-color:#ddd;border-radius:3px;min-height:20px;background-color:#eee}html.dark-mode .scroll-box{border-color:#000}html.dark-mode .scroll-box{background-color:#000}.scroll-box-item{border-bottom:1px solid;border-top:1px solid;border-color:#ddd;margin-top:-1px;background-color:#fff;display:flex;align-items:flex-start;padding:1px}html.dark-mode .scroll-box-item{border-color:#000}html.dark-mode .scroll-box-item{background-color:#222}.scroll-box-item:last-child{border-bottom:0}.scroll-box-item:hover{cursor:pointer;background-color:#f8f8f8}html.dark-mode .scroll-box-item:hover{background-color:#333}.scroll-box-item .handle{color:#aaa;cursor:grab}.scroll-box-item button{opacity:.6}.scroll-box-item .handle svg{margin:0}.scroll-box-item>*{padding:6px 16px}.scroll-box-item .handle+*{padding-left:0}.scroll-box-item:hover .handle{color:#444}html.dark-mode .scroll-box-item:hover .handle{color:#fff}.scroll-box-item:hover button{opacity:1}.scroll-box-item a:hover{text-decoration:none}input.scroll-box-search,.scroll-box-header-item{font-size:.8rem;border:1px solid;border-color:#ddd;background-color:#fff;margin-bottom:-1px;border-radius:3px 3px 0 0;width:100%;max-width:100%;height:auto;line-height:1.4;color:#666}html.dark-mode input.scroll-box-search,html.dark-mode .scroll-box-header-item{border-color:#000}html.dark-mode input.scroll-box-search,html.dark-mode .scroll-box-header-item{background-color:#222}.scroll-box-search+.scroll-box,.scroll-box-header-item+.scroll-box{border-radius:0 0 3px 3px}.scroll-box[refs="shelf-sort@shelf-book-list"] [data-action=add]{display:none}.scroll-box[refs="shelf-sort@all-book-list"] [data-action=remove],.scroll-box[refs="shelf-sort@all-book-list"] [data-action=move_up],.scroll-box[refs="shelf-sort@all-book-list"] [data-action=move_down]{display:none}header .grid{grid-template-columns:minmax(max-content, 2fr) 1fr minmax(max-content, 2fr)}@media screen and (max-width: 1000px){header .grid{grid-template-columns:1fr;grid-row-gap:0}}header{position:relative;display:block;z-index:11;top:0;color:#fafafa;border-bottom:1px solid #ddd;box-shadow:0 1px 6px -1px rgba(0,0,0,.1);border-bottom-color:#ddd}html.dark-mode header{border-bottom-color:#000}header .header-links{display:flex;align-items:center;justify-content:end}header .links{display:inline-block;vertical-align:top}header .links a{display:inline-block;padding:10px 16px;color:#fff;border-radius:3px}header .links a:hover{text-decoration:none;background-color:rgba(255,255,255,.15)}header .dropdown-container{padding-inline-start:16px;padding-inline-end:0}header .avatar,header .user-name{display:inline-block}header .avatar{width:30px;height:30px}header .user-name{vertical-align:top;position:relative;display:inline-flex;align-items:center;cursor:pointer;padding:12px;margin:0 -12px;border-radius:3px;gap:6px}header .user-name>span{padding-inline-start:6px;display:inline-block;line-height:1}header .user-name>svg{font-size:18px;margin-top:-2px;margin-inline-end:0}header .user-name:hover{background-color:rgba(255,255,255,.15)}@media screen and (min-width: 1000px)and (max-width: 1100px){header .user-name{padding-inline-start:6px}header .user-name .name{display:none}}.header *,.primary-background *{outline-color:#fff}header .search-box{display:inline-block}header .search-box input{background-color:rgba(0,0,0,.2);border:1px solid rgba(255,255,255,.2);border-radius:40px;color:#eee;z-index:2;height:auto;padding:9px;padding-inline-start:40px}header .search-box input:focus{outline:none;border:1px solid rgba(255,255,255,.4)}header .search-box input::placeholder{color:#fff;opacity:.6}@media screen and (min-width: 1000px)and (max-width: 1100px){header .search-box{max-width:200px}}header .search-box:focus-within #header-search-box-button{opacity:1}#header-search-box-button{z-index:1;inset-inline-start:16px;top:10px;color:#fff;opacity:.6;color:rgba(255,255,255,.8)}html.dark-mode #header-search-box-button{color:#aaa}#header-search-box-button svg{margin-inline-end:0}.global-search-suggestions{display:none;position:absolute;top:-12px;left:0;right:0;z-index:-1;margin-left:-48px;margin-right:-48px;padding-top:56px;border-radius:3px;box-shadow:0 2px 2px 1px rgba(0,0,0,.13);transform-origin:top center;opacity:.5;transform:scale(0.9)}.global-search-suggestions .entity-item-snippet p{display:none}.global-search-suggestions .entity-item-snippet{font-size:.8rem}.global-search-suggestions .entity-list-item-name{font-size:.9rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.global-search-suggestions .global-search-loading{position:absolute;width:100%}header .search-box.search-active:focus-within .global-search-suggestions{display:block}header .search-box.search-active:focus-within input{background-color:#eee;border-color:#ddd}html.dark-mode header .search-box.search-active:focus-within input{background-color:#333}html.dark-mode header .search-box.search-active:focus-within input{border-color:#111}header .search-box.search-active:focus-within #header-search-box-button,header .search-box.search-active:focus-within input{color:#444}html.dark-mode header .search-box.search-active:focus-within #header-search-box-button,html.dark-mode header .search-box.search-active:focus-within input{color:#aaa}.logo{display:inline-flex;padding:6px 12px;margin:6px -12px;gap:12px;align-items:center;border-radius:4px}.logo:hover{color:#fff;text-decoration:none;background-color:rgba(255,255,255,.15)}.logo-text{font-size:1.8em;color:#fff;font-weight:400;line-height:1}.logo-image{height:43px}.mobile-menu-toggle{color:#fff;fill:#fff;font-size:2em;border:2px solid rgba(255,255,255,.8);border-radius:4px;padding:0 6px;position:absolute;right:16px;top:13px;line-height:1;cursor:pointer;user-select:none}.mobile-menu-toggle svg{margin:0;bottom:-2px}html[dir=rtl] .mobile-menu-toggle{left:16px;right:auto}@media screen and (max-width: 1000px){header .header-links{background-color:#fff;display:none;z-index:10;right:16px;border-radius:4px;overflow:hidden;position:absolute;box-shadow:0 2px 2px 1px rgba(0,0,0,.13);margin-top:16px;padding:6px 0}html.dark-mode header .header-links{background-color:#333}header .header-links.show{display:block}header .links a,header .dropdown-container ul li a,header .dropdown-container ul li button{text-align:start;display:grid;align-items:center;padding:8px 16px;gap:16px;color:#444;grid-template-columns:16px auto;line-height:1.4;color:#444}html.dark-mode header .links a,html.dark-mode header .dropdown-container ul li a,html.dark-mode header .dropdown-container ul li button{color:#eee}header .links a svg,header .dropdown-container ul li a svg,header .dropdown-container ul li button svg{margin-inline-end:12px;width:16px}header .links a:hover,header .dropdown-container ul li a:hover,header .dropdown-container ul li button:hover{background-color:var(--color-primary-light);color:var(--color-primary);text-decoration:none}header .links a:focus,header .dropdown-container ul li a:focus,header .dropdown-container ul li button:focus{background-color:#eee;outline-color:var(--color-primary);color:var(--color-primary)}html.dark-mode header .links a:focus,html.dark-mode header .dropdown-container ul li a:focus,html.dark-mode header .dropdown-container ul li button:focus{background-color:#333}header .dropdown-container{display:block;padding-inline-start:0}header .links{display:block}header .dropdown-container ul{display:block !important;position:relative;background-color:rgba(0,0,0,0);border:0;padding:0;margin:0;box-shadow:none}}.tri-layout-mobile-tabs{position:sticky;top:0;z-index:5;background-color:#fff;border-bottom:1px solid #ddd;border-bottom-color:#ddd;box-shadow:0 1px 6px -1px rgba(0,0,0,.1)}html.dark-mode .tri-layout-mobile-tabs{border-bottom-color:#333}.tri-layout-mobile-tab{text-align:center;border-bottom:3px solid #bbb;cursor:pointer;margin:0;background-color:#fff;border-bottom-color:#bbb}html.dark-mode .tri-layout-mobile-tab{background-color:#222}html.dark-mode .tri-layout-mobile-tab{border-bottom-color:#333}.tri-layout-mobile-tab:first-child{border-inline-end:1px solid #ddd;border-inline-end-color:#ddd}html.dark-mode .tri-layout-mobile-tab:first-child{border-inline-end-color:#000}.tri-layout-mobile-tab[aria-selected=true]{border-bottom-color:currentColor !important}.breadcrumbs{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;flex-wrap:wrap;opacity:.7}.breadcrumbs .icon-list-item{width:auto;padding-top:6px;padding-bottom:6px}.breadcrumbs .separator{display:inline-block;fill:#aaa;font-size:1.6em;line-height:.8;margin:-2px 0 0}.breadcrumbs:hover,.breadcrumbs:focus-within{opacity:1}@media(prefers-contrast: more){.breadcrumbs{opacity:1}}@media screen and (max-width: 1000px){.breadcrumbs .icon-list-item{padding:6px}.breadcrumbs .icon-list-item>span+span{display:none}.breadcrumbs .icon-list-item>span:first-child{margin-inline-end:0}}.faded a,.faded button,.faded span,.faded span>div{color:#666;fill:#666}.faded .text-button{opacity:.5;transition:all ease-in-out 120ms}.faded .text-button:hover{opacity:1;text-decoration:none}.faded span.faded-text{display:inline-block;padding:12px}.action-buttons .text-button{display:inline-block;padding:6px 12px}.action-buttons .text-button:last-child{padding-inline-end:0}.action-buttons .text-button:first-child{padding-inline-start:0}.action-buttons .dropdown-container:last-child a{padding-inline-end:0;padding-inline-start:12px}.action-buttons{text-align:end}.action-buttons.text-left{text-align:start}.action-buttons.text-left .text-button{padding-inline-end:16px;padding-inline-start:0}.action-buttons.text-center{text-align:center}@media screen and (max-width: 880px){.action-buttons .text-button{padding:6px 6px}.action-buttons .dropdown-container:last-child a{padding-inline-start:6px}}footer{flex-shrink:0;padding:1rem 1rem 2rem 1rem;text-align:center}footer a{margin:0 .5em}body.flexbox footer{display:none}.book-contents .entity-list-item .icon{width:4px;border-radius:1px;justify-self:stretch;align-self:stretch;height:auto;margin-inline-end:6px}.book-contents .entity-list-item .icon:after{opacity:.5}.book-contents .entity-list-item .icon svg{display:none}.book-contents .entity-list-item p{margin-bottom:0}.book-contents .entity-list-item .inner-page{padding-top:0;padding-bottom:0}.entity-list-item+.chapter-expansion{display:flex;padding:0 16px 16px 16px;align-items:center;border:0;width:100%;position:relative}.entity-list-item+.chapter-expansion>.icon{width:4px;height:auto;border-radius:0 0 1px 1px;align-self:stretch;flex-shrink:0}.entity-list-item+.chapter-expansion>.icon:before{position:absolute;top:0;left:0;width:100%;height:1px;background-color:currentColor;content:"";opacity:.5}.entity-list-item+.chapter-expansion>.icon:after{opacity:.5}.entity-list-item+.chapter-expansion .icon svg{display:none}.entity-list-item+.chapter-expansion>.content{flex:1}.entity-list-item+.chapter-expansion .chapter-contents-toggle{border-radius:0 4px 4px 0;padding:6px 19px;width:100%;text-align:start}.entity-list-item+.chapter-expansion .chapter-contents-toggle:hover{background-color:rgba(0,0,0,.06)}.entity-list-item.has-children{padding-bottom:0}.entity-list-item.has-children>.icon{border-radius:4px 4px 0 0}.inset-list{display:none}.inset-list .entity-list-item-name{font-size:1rem}.inset-list .entity-list-item-children{padding-top:0;padding-bottom:0}.sidebar-page-nav{list-style:none;margin-block-start:12px;margin-block-end:16px;margin-inline-start:6px;margin-inline-end:0;position:relative}.sidebar-page-nav:after{content:"";display:block;position:absolute;left:0;background-color:rgba(0,0,0,.2);width:2px;top:5px;bottom:5px;z-index:0}html[dir=rtl] .sidebar-page-nav:after{left:auto;right:0}html.dark-mode .sidebar-page-nav:after{background-color:rgba(255,255,255,.2)}.sidebar-page-nav li{margin-bottom:4px;font-size:.95em;position:relative}.sidebar-page-nav .h1{padding-inline-start:16px}.sidebar-page-nav .h2{padding-inline-start:24px}.sidebar-page-nav .h3{padding-inline-start:32px}.sidebar-page-nav .h4{padding-inline-start:40px}.sidebar-page-nav .h5{padding-inline-start:48px}.sidebar-page-nav .h6{padding-inline-start:56px}.sidebar-page-nav .current-heading{font-weight:bold}.sidebar-page-nav li:not(.current-heading) .sidebar-page-nav-bullet{background-color:#bbb !important}html.dark-mode .sidebar-page-nav li:not(.current-heading) .sidebar-page-nav-bullet{background-color:#666 !important}.sidebar-page-nav .sidebar-page-nav-bullet{width:6px;height:6px;position:absolute;left:-2px;top:30%;border-radius:50%;box-shadow:0 0 0 6px #f2f2f2;box-shadow:0 0 0 6px #f2f2f2;z-index:1}html.dark-mode .sidebar-page-nav .sidebar-page-nav-bullet{box-shadow:0 0 0 6px #111}html[dir=rtl] .sidebar-page-nav .sidebar-page-nav-bullet{left:auto;right:-2px}.book-tree .sidebar-page-list{list-style:none;margin-block-start:6px;margin-block-end:0;margin-inline-start:-12px;margin-inline-end:-12px;padding-inline-start:0;padding-inline-end:0}.book-tree .sidebar-page-list ul{list-style:none;padding-inline-start:1rem;padding-inline-end:0}.book-tree .sidebar-page-list .entity-list-item{padding-top:2px;padding-bottom:2px;background-clip:content-box;border-radius:0 3px 3px 0;padding-inline-end:0}.book-tree .sidebar-page-list .entity-list-item .content{width:100%;padding-top:6px;padding-bottom:6px;max-width:calc(100% - 20px)}.book-tree .sidebar-page-list .entity-list-item.selected{background-color:rgba(0,0,0,.06)}html.dark-mode .book-tree .sidebar-page-list .entity-list-item.selected{background-color:rgba(255,255,255,.06)}.book-tree .sidebar-page-list .entity-list-item.no-hover{margin-top:-6px;padding-inline-end:0}.book-tree .sidebar-page-list .entity-list-item-name{font-size:1em;margin:0;margin-inline-end:16px}.book-tree .sidebar-page-list .chapter-child-menu{font-size:.8rem;margin-top:-0.2rem;margin-inline-start:-1rem}.book-tree .sidebar-page-list .chapter-contents-toggle{display:block;width:100%;text-align:start;padding:3px 12px 6px 12px;border-radius:0 3px 3px 0;line-height:1;margin-top:-3px;margin-bottom:-3px}.book-tree .sidebar-page-list .chapter-contents-toggle:hover{background-color:rgba(0,0,0,.06)}html.dark-mode .book-tree .sidebar-page-list .chapter-contents-toggle:hover{background-color:rgba(255,255,255,.06)}.book-tree .sidebar-page-list .entity-list-item .icon{z-index:2;width:4px;height:auto;align-self:stretch;flex-shrink:0;border-radius:1px;opacity:.8}.book-tree .sidebar-page-list .entity-list-item .icon:after{opacity:1}.book-tree .sidebar-page-list .entity-list-item .icon svg{display:none}.chapter-child-menu ul.sub-menu{display:none;padding-inline-start:0;position:relative;margin-bottom:0}.sortable-page-list,.sortable-page-sublist{list-style:none}.sort-box{margin-bottom:16px;padding:16px 32px;position:relative}.sort-box::before{pointer-events:none;content:"";border-radius:4px;opacity:.5;border:2px solid var(--color-book);display:block;top:0;bottom:0;left:0;right:0;position:absolute}.sort-box-options{display:flex;flex-wrap:wrap;justify-content:space-between}.sort-box-options .button{margin-inline-start:0}.sortable-page-list{margin-inline-start:0;padding:0}.sortable-page-list .entity-list-item>span:first-child{align-self:flex-start}.sortable-page-list .sortable-selected,.sortable-page-list .sortable-selected:hover{outline:1px dotted var(--color-primary);background-color:var(--color-primary-light) !important}.sortable-page-list .entity-list-item>div{display:block;flex:1}.sortable-page-list>ul{margin-inline-start:0}.sortable-page-list .sortable-page-sublist{margin-bottom:16px;margin-top:0;padding-inline-start:16px}.sortable-page-list li{background-color:#fff;border:1px solid;border-color:#ddd;margin-top:-1px;min-height:38px}html.dark-mode .sortable-page-list li{background-color:#222}html.dark-mode .sortable-page-list li{border-color:#666}.sortable-page-list li.text-page,.sortable-page-list li.text-chapter{border-inline-start:2px solid currentColor}.sortable-page-list li:first-child{margin-top:6px}.sortable-page-list li.placeholder{position:relative}.sortable-page-list li.placeholder:before{position:absolute}.sort-box summary{list-style:none;font-size:.9rem;cursor:pointer}.sort-box summary::-webkit-details-marker{display:none}details.sort-box summary .caret-container svg{transition:transform ease-in-out 120ms}details.sort-box[open] summary .caret-container svg{transform:rotate(90deg)}.sort-box-actions .icon-button{opacity:.6}.sort-box .flex-container-row:hover .sort-box-actions .icon-button,.sort-box .flex-container-row:focus-within .sort-box-actions .icon-button{opacity:1}.sort-box-actions .icon-button[disabled]{visibility:hidden}.sort-box-actions .dropdown-menu button[disabled]{display:none}.sort-list-handle{cursor:grab}.activity-list-item{padding:12px 0;display:grid;grid-template-columns:min-content 1fr;grid-column-gap:16px;font-size:.9em}.card .activity-list-item{padding:12px 16px}.user-list-item{display:inline-grid;padding:12px;grid-template-columns:min-content 1fr;grid-column-gap:16px;font-size:.9em;align-items:center}.user-list-item>div:first-child{line-height:0}ul.pagination{display:inline-block;list-style:none;margin:16px 0;padding-inline-start:1px}ul.pagination li{float:left}ul.pagination li:first-child a,ul.pagination li:first-child span{border-radius:3px 0 0 3px}ul.pagination li:last-child a,ul.pagination li:last-child span{border-radius:0 3px 3px 0}ul.pagination a,ul.pagination span{display:block;padding:3px 12px;border:1px solid #ccc;margin-inline-start:-1px;user-select:none;color:#555;border-color:#ccc}html.dark-mode ul.pagination a,html.dark-mode ul.pagination span{color:#eee}html.dark-mode ul.pagination a,html.dark-mode ul.pagination span{border-color:#666}ul.pagination li.disabled{cursor:not-allowed}ul.pagination li.active span{color:#111;background-color:rgba(0,0,0,.05)}html.dark-mode ul.pagination li.active span{color:#eee}html.dark-mode ul.pagination li.active span{background-color:rgba(0,0,0,.5)}.compact ul.pagination{margin:0}.entity-list,.icon-list{margin:0 -16px}.entity-list h4,.icon-list h4{margin:0}.entity-list hr,.icon-list hr{margin:0}.entity-list .text-small.text-muted,.icon-list .text-small.text-muted{color:#aaa;font-size:.75em;margin-top:6px}.entity-list .text-muted p.text-muted,.icon-list .text-muted p.text-muted{margin-top:0}.entity-list .page.draft .text-page,.icon-list .page.draft .text-page{color:var(--color-page-draft);fill:var(--color-page-draft)}.entity-list>.dropdown-container,.icon-list>.dropdown-container{display:block}.icon-list hr{margin:12px 16px;max-width:140px;opacity:.25;height:1.1px}.icon-list hr+hr,.icon-list hr:first-child,.icon-list hr:last-child{display:none}.entity-list-item,.icon-list-item{padding:12px 16px;display:flex;align-items:center;gap:16px;background-color:rgba(0,0,0,0);border:0;width:100%;position:relative;word-break:break-word}.entity-list-item h4 a,.icon-list-item h4 a{color:#666}.entity-list-item>span:first-child,.icon-list-item>span:first-child{flex-basis:1.88em;flex:none}.entity-list-item>span:last-child,.icon-list-item>span:last-child{flex:1;text-align:start}.entity-list-item>.content,.icon-list-item>.content{min-width:0}.entity-list-item:not(.no-hover),.icon-list-item:not(.no-hover){cursor:pointer}.entity-list-item:not(.no-hover):hover,.icon-list-item:not(.no-hover):hover{background-color:rgba(0,0,0,.06);text-decoration:none;border-radius:4px}html.dark-mode .entity-list-item:not(.no-hover):hover,html.dark-mode .icon-list-item:not(.no-hover):hover{background-color:rgba(255,255,255,.06)}.entity-list-item.outline-hover:hover,.icon-list-item.outline-hover:hover{background-color:rgba(0,0,0,0)}.entity-list-item:focus,.icon-list-item:focus{background-color:#eee;outline:1px dotted #666;outline-offset:-2px}html.dark-mode .entity-list-item:focus,html.dark-mode .icon-list-item:focus{background-color:#222}.entity-list-item.disabled{pointer-events:none;cursor:not-allowed;opacity:.8;user-select:none;background:var(--bg-disabled)}.entity-list-item-path-sep{display:inline-block;vertical-align:top;position:relative;top:1px}.entity-list-item-path-sep svg{margin-inline-end:0}.split-icon-list-item{display:flex;align-items:center;gap:16px;background-color:rgba(0,0,0,0);border:0;width:100%;position:relative;word-break:break-word;border-radius:4px}.split-icon-list-item>a{padding:12px 16px;display:flex;align-items:center;gap:16px;flex:1}.split-icon-list-item>a:hover{text-decoration:none}.split-icon-list-item .icon{flex-basis:1.88em;flex:none}.split-icon-list-item:hover{background-color:rgba(0,0,0,.06)}html.dark-mode .split-icon-list-item:hover{background-color:rgba(255,255,255,.06)}.icon-list-item-dropdown{margin-inline-start:auto;align-self:stretch;display:flex;align-items:stretch;border-inline-start:1px solid rgba(0,0,0,.1);visibility:hidden}.split-icon-list-item:hover .icon-list-item-dropdown,.split-icon-list-item:focus-within .icon-list-item-dropdown{visibility:visible}.icon-list-item-dropdown-toggle{padding:6px;display:flex;align-items:center;cursor:pointer;color:#888}html.dark-mode .icon-list-item-dropdown-toggle{color:#999}.icon-list-item-dropdown-toggle svg{margin:0}.icon-list-item-dropdown-toggle:hover{background-color:rgba(0,0,0,.06)}html.dark-mode .icon-list-item-dropdown-toggle:hover{background-color:rgba(255,255,255,.06)}.card .entity-list-item:not(.no-hover,.book-contents .entity-list-item):hover{background-color:#f2f2f2;border-radius:0}html.dark-mode .card .entity-list-item:not(.no-hover,.book-contents .entity-list-item):hover{background-color:#2d2d2d}.card .entity-list-item .entity-list-item:hover{background-color:#eee}.entity-list-item-children{padding:16px 24px}.entity-list-item-children>div{overflow:hidden;padding:0 0 6px 0}.entity-list-item-children .entity-chip{text-overflow:ellipsis;height:2.5em;overflow:hidden;text-align:start;display:block;white-space:nowrap}.entity-list-item-children>.entity-list>.entity-list-item:last-child{margin-bottom:-6px}.entity-list-item-image{align-self:stretch;width:140px;flex:none;background-size:cover;background-position:50% 50%;border-radius:3px;position:relative;margin-inline-end:24px}.entity-list-item-image.entity-list-item-image-wide{width:220px}.entity-list-item-image .svg-icon{color:#fff;font-size:1.66rem;margin-inline-end:0;position:absolute;bottom:6px;left:6px}html.dark-mode .entity-list-item-image .svg-icon{color:rgba(255,255,255,.6)}@media screen and (max-width: 880px){.entity-list-item-image{width:80px}}.chapter>.entity-list-item-image{width:60px}.entity-list.compact{font-size:8.4px}.entity-list.compact h4,.entity-list.compact a{line-height:1.2}.entity-list.compact .entity-item-snippet{display:none}.entity-list.compact .entity-list-item p{font-size:11.2px;padding-top:6px}.entity-list.compact .entity-list-item p:empty{padding-top:0}.entity-list.compact p{margin:0}.entity-list.compact>p.empty-text{display:block;font-size:14px}.entity-list.compact hr{margin:0}@media screen and (max-width: 880px){.entity-list.compact h4{font-size:1.666em}}.entity-item-tags{font-size:.75rem;opacity:1}.entity-item-tags .primary-background-light{background:rgba(0,0,0,0)}.entity-item-tags .tag-name{background-color:rgba(0,0,0,.05)}.dropdown-container{display:inline-block;vertical-align:top;position:relative}.dropdown-menu{display:none;position:absolute;z-index:999;top:0;list-style:none;inset-inline-end:0;margin:16px 0;background-color:#fff;box-shadow:0 1px 6px 0 rgba(0,0,0,.18);border-radius:3px;min-width:180px;padding:6px 0;color:#555;fill:currentColor;text-align:start !important;max-height:80vh;overflow-y:auto}html.dark-mode .dropdown-menu{background-color:#333}html.dark-mode .dropdown-menu{color:#eee}.dropdown-menu.anchor-left{inset-inline-end:auto;inset-inline-start:0}.dropdown-menu.wide{min-width:220px}.dropdown-menu.xl-limited{width:280px;max-width:100%}.dropdown-menu .text-muted{color:#999;fill:#999}.dropdown-menu li.active a{font-weight:600}.dropdown-menu button{width:100%;text-align:start}.dropdown-menu li.border-bottom{border-bottom:1px solid #ddd}.dropdown-menu li hr{margin:6px 0}.dropdown-menu .icon-item,.dropdown-menu .text-item,.dropdown-menu .label-item{padding:8px 16px;color:#555;fill:currentColor;white-space:nowrap;line-height:1.4;cursor:pointer}html.dark-mode .dropdown-menu .icon-item,html.dark-mode .dropdown-menu .text-item,html.dark-mode .dropdown-menu .label-item{color:#eee}.dropdown-menu .icon-item.break-text,.dropdown-menu .text-item.break-text,.dropdown-menu .label-item.break-text{white-space:normal;word-wrap:break-word;overflow-wrap:break-word}.dropdown-menu .icon-item:hover,.dropdown-menu .icon-item:focus,.dropdown-menu .text-item:hover,.dropdown-menu .text-item:focus,.dropdown-menu .label-item:hover,.dropdown-menu .label-item:focus{text-decoration:none;background-color:var(--color-primary-light);color:var(--color-primary)}.dropdown-menu .icon-item:focus,.dropdown-menu .text-item:focus,.dropdown-menu .label-item:focus{outline:1px solid var(--color-primary);outline-offset:-2px}.dropdown-menu .icon-item svg,.dropdown-menu .text-item svg,.dropdown-menu .label-item svg{margin-inline-end:12px;display:inline-block;width:16px}.dropdown-menu .text-item{display:block}.dropdown-menu .label-item{display:grid;align-items:center;grid-template-columns:auto min-content;gap:16px}.dropdown-menu .label-item>*:nth-child(2){opacity:.7}.dropdown-menu .label-item>*:nth-child(2):hover{opacity:1}.dropdown-menu .icon-item{display:grid;align-items:start;grid-template-columns:16px auto;gap:16px}.dropdown-menu .icon-item svg{margin-inline-end:0;margin-block-start:1px}.tri-layout-right .dropdown-menu,.tri-layout-left .dropdown-menu{inset-inline-end:6px}.featured-image-container{position:relative;overflow:hidden;min-height:140px;background-size:cover;background-position:50% 50%;transition:opacity ease-in-out 240ms}.featured-image-container a{display:block}.featured-image-container img{display:block;width:100%;max-width:100%;height:auto}.featured-image-container-wrap{position:relative}.featured-image-container-wrap .svg-icon{color:#fff;font-size:2rem;margin-inline-end:0;position:absolute;bottom:10px;left:6px}html.dark-mode .featured-image-container-wrap .svg-icon{color:rgba(255,255,255,.6)}.grid-card:hover .featured-image-container{opacity:.5}.action-link{background:rgba(0,0,0,0);border:none;color:currentColor;padding:16px 0}.active-link-list a{display:inline-block;padding:12px}.active-link-list a:not(.active){color:#444}html.dark-mode .active-link-list a:not(.active){color:#888}.active-link-list a:hover{background-color:rgba(0,0,0,.05);border-radius:4px;text-decoration:none}html.dark-mode .active-link-list a:hover{background-color:rgba(255,255,255,.05)}.active-link-list.in-sidebar a{display:block;margin-bottom:6px}.active-link-list.in-sidebar a.active{border-radius:4px;background-color:rgba(0,0,0,.05)}html.dark-mode .active-link-list.in-sidebar a.active{background-color:rgba(255,255,255,.05)}.entity-meta-item{display:flex;line-height:1.2;margin:.6em 0;align-content:start;gap:12px}.entity-meta-item a{line-height:1.2}.entity-meta-item svg{flex-shrink:0;width:1em;margin:0}.page-editor{display:flex;flex-direction:column;align-items:stretch;overflow:hidden}.page-editor .edit-area{flex:1;flex-direction:column;z-index:10}.page-editor .mce-tinymce{box-shadow:none}.page-editor .mce-top-part::before{box-shadow:none}body.tox-fullscreen .page-editor .edit-area,body.markdown-fullscreen .page-editor .edit-area{z-index:12}body.tox-fullscreen .page-editor,body.tox-fullscreen .flex-fill,body.markdown-fullscreen .page-editor,body.markdown-fullscreen .flex-fill{overflow:visible}@media screen and (max-width: 600px){.page-edit-toolbar{overflow-x:scroll;overflow-y:visible}.page-edit-toolbar .grid.third{display:block;white-space:nowrap}.page-edit-toolbar .grid.third>div{display:inline-block}}.page-save-mobile-button{position:fixed;z-index:30;border-radius:50%;width:56px;height:56px;font-size:24px;right:16px;bottom:12px;box-shadow:0 2px 2px 1px rgba(0,0,0,.13);background-color:currentColor;text-align:center}.page-save-mobile-button svg{fill:#fff;margin-inline-end:0}.draft-notification{pointer-events:none;transform:scale(0);transition:transform ease-in-out 120ms;transform-origin:50% 50%}.draft-notification.visible{transform:scale(1)}.page-style.editor{padding:0 !important}.pointer-container{position:fixed;display:none;left:0;z-index:10}.pointer{border:1px solid #ccc;border-color:#ccc;border-radius:4px;box-shadow:0 0 12px 1px rgba(0,0,0,.1);background-color:#fff;width:275px}html.dark-mode .pointer{border-color:#000}html.dark-mode .pointer{background-color:#333}.pointer.is-page-editable{width:328px}.pointer:before{position:absolute;left:50%;bottom:-9px;width:16px;height:16px;margin-inline-start:-8px;content:"";display:block;transform:rotate(45deg);transform-origin:50% 50%;border-block-end:1px solid #ccc;border-inline-end:1px solid #ccc;z-index:56;background-color:#fff;border-color:#ccc}html.dark-mode .pointer:before{background-color:#333}html.dark-mode .pointer:before{border-color:#000}.pointer input,.pointer button,.pointer a{position:relative;border-radius:0;height:28px;font-size:12px;vertical-align:top;padding:5px 16px}.pointer input{background-color:#fff;border:1px solid #ddd;border-color:#ddd;color:#666;width:160px;z-index:40;padding:5px 10px}html.dark-mode .pointer input{border-color:#000}.pointer .text-button{color:#444}html.dark-mode .pointer .text-button{color:#aaa}.pointer .input-group .button{line-height:1;margin:0 0 0 -4px;box-shadow:none}.pointer a.button{margin:0}.pointer .svg-icon{width:1.2em;height:1.2em}.pointer .button{border-color:#ddd}html.dark-mode .pointer .button{border-color:#000}.floating-toolbox{border:1px solid #ddd;background-color:#fff;border-color:#ddd;right:64px;width:48px;overflow:hidden;align-items:stretch;flex-direction:row;display:flex;transition:width ease-in-out 180ms;margin-top:-1px;min-height:0}html.dark-mode .floating-toolbox{background-color:#222}html.dark-mode .floating-toolbox{border-color:#000}.floating-toolbox.open{width:480px}.floating-toolbox .toolbox-toggle svg{transition:transform ease-in-out 180ms}.floating-toolbox .toolbox-toggle{transition:background-color ease-in-out 180ms}.floating-toolbox.open .toolbox-toggle{background-color:rgba(255,0,0,.29)}.floating-toolbox.open .toolbox-toggle svg{transform:rotate(180deg)}.floating-toolbox>div{flex:1;position:relative}.floating-toolbox .tabs{display:block;border-inline-end:1px solid #ddd;border-color:#ddd;width:48px;flex:0 1 auto}html.dark-mode .floating-toolbox .tabs{border-color:#000}.floating-toolbox .tabs svg{padding:0;margin:0}.floating-toolbox .tabs>button{color:rgba(0,0,0,.5);display:block;cursor:pointer;padding:12px 16px;font-size:16px;line-height:1.6;border-bottom:1px solid rgba(255,255,255,.3)}html.dark-mode .floating-toolbox .tabs>button{color:rgba(255,255,255,.5)}.floating-toolbox.open .tabs>button.active{color:#444;background-color:rgba(0,0,0,.1)}html.dark-mode .floating-toolbox.open .tabs>button.active{color:#eee}.floating-toolbox h4{font-size:24px;margin:16px 0 0 0;padding:0 24px 12px 24px}.floating-toolbox .tags input{max-width:100%;width:100%;min-width:50px}.floating-toolbox .tags td,.floating-toolbox .inline-start-table>div>div>div{padding-inline-end:12px;padding-top:12px;position:relative}.floating-toolbox .handle{user-select:none;cursor:move;fill:#999}.floating-toolbox form{display:flex;flex:1;flex-direction:column;overflow-y:scroll}.floating-toolbox table td,.floating-toolbox table th{overflow:visible}.toolbox-tab-content{display:none;overflow-y:auto;padding-bottom:45px}.suggestion-box{top:auto;margin:-4px 0 0;right:auto;left:0;padding:0}.suggestion-box li{display:block;border-bottom:1px solid #ddd}.suggestion-box li:last-child{border-bottom:0}.comments-container h5{color:#888;font-weight:normal;margin-top:.5em}.comment-editor .CodeMirror,.comment-editor .CodeMirror-scroll{min-height:175px}.mce-floatpanel[aria-label="Insert/edit media"] .mce-open{display:none}.entity-list-item>span:first-child,.icon-list-item>span:first-child,.split-icon-list-item>a>.icon,.chapter-expansion>.icon{font-size:.8rem;width:1.88em;height:1.88em;flex-shrink:0;display:flex;align-items:center;justify-content:center;text-align:center;border-radius:1em;position:relative;overflow:hidden}.entity-list-item>span:first-child svg,.icon-list-item>span:first-child svg,.split-icon-list-item>a>.icon svg,.chapter-expansion>.icon svg{margin:0;bottom:0}.entity-list-item>span:first-child:after,.icon-list-item>span:first-child:after,.split-icon-list-item>a>.icon:after,.chapter-expansion>.icon:after{content:"";position:absolute;background-color:currentColor;opacity:.2;left:0;top:0;width:100%;height:100%}.entity-chip{display:inline-block;align-items:center;justify-content:center;text-align:center;font-size:.9em;border-radius:3px;position:relative;overflow:hidden;padding:6px 12px;fill:currentColor;opacity:.85;transition:opacity ease-in-out 120ms}.entity-chip:after{content:"";position:absolute;background-color:currentColor;opacity:.15;left:0;top:0;width:100%;height:100%}.entity-chip:hover{text-decoration:none;opacity:1}@media(prefers-contrast: more){.entity-chip{opacity:1}}.page-content{width:100%;max-width:840px;margin:0 auto;overflow-wrap:break-word}.page-content .align-left{text-align:left}.page-content img.align-left,.page-content table.align-left{float:left !important;margin:6px 16px 16px 0}.page-content .align-right{text-align:right !important}.page-content img.align-right,.page-content table.align-right{float:right !important;margin:6px 0 6px 12px}.page-content .align-center{text-align:center}.page-content img.align-center{display:block}.page-content img.align-center,.page-content table.align-center{margin-left:auto;margin-right:auto}.page-content img{max-width:100%;height:auto}.page-content h1,.page-content h2,.page-content h3,.page-content h4,.page-content h5,.page-content h6,.page-content pre{clear:left}.page-content hr{clear:both;margin:16px 0}.page-content table{hyphens:auto;table-layout:fixed;max-width:100%;height:auto !important}.page-content ins,.page-content del{text-decoration:none}.page-content ins{background:#dbffdb}.page-content del{background:#ffecec}.page-content details{border:1px solid;border-color:#ddd;margin-bottom:1em;padding:12px}html.dark-mode .page-content details{border-color:#555}.page-content details>summary{margin-top:-12px;margin-left:-12px;margin-right:-12px;margin-bottom:-12px;font-weight:bold;background-color:#eee;padding:6px 12px}html.dark-mode .page-content details>summary{background-color:#333}.page-content details[open]>summary{margin-bottom:12px;border-bottom:1px solid;border-color:#ddd}html.dark-mode .page-content details[open]>summary{border-color:#555}.page-content details>summary+*{margin-top:.2em}.page-content details:after{content:"";display:block;clear:both}.page-content li>input[type=checkbox]{vertical-align:top;margin-top:.3em}.page-content p:empty{min-height:1.6em}.page-content.page-revision pre code{white-space:pre-wrap}.page-content .cm-editor{margin-bottom:1.375em}.page-content video{max-width:100%}.callout{border-left:3px solid #bbb;background-color:#eee;padding:12px 12px 12px 32px;display:block;position:relative;overflow:auto}.callout:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiMwMTUzODAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6Ii8+PC9zdmc+");background-repeat:no-repeat;content:"";width:1.2em;height:1.2em;left:8px;top:50%;margin-top:-9px;display:inline-block;position:absolute;line-height:1;opacity:.8}.callout.success{border-left-color:#0f7d15;background-color:#eafdeb;color:#063409}html.dark-mode .callout.success{border-left-color:#4aa850}html.dark-mode .callout.success{background-color:#122913}html.dark-mode .callout.success{color:#4aa850}.callout.success:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiMzNzZjMzkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE1bC01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6Ii8+PC9zdmc+")}.callout.danger{border-left-color:#ab0f0e;background-color:#fcdbdb;color:#4d0706}html.dark-mode .callout.danger{border-left-color:#e85c5b}html.dark-mode .callout.danger{background-color:#250505}html.dark-mode .callout.danger{color:#e85c5b}.callout.danger:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiNiOTE4MTgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiLz4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==")}.callout.info{border-left-color:#0288d1;color:#01466c;background-color:#d3efff}html.dark-mode .callout.info{border-left-color:#0288d1}html.dark-mode .callout.info{color:#0288d1}html.dark-mode .callout.info{background-color:#001825}.callout.warning{border-left-color:#cf4d03;background-color:#fee3d3;color:#6a2802}html.dark-mode .callout.warning{border-left-color:#de8a5a}html.dark-mode .callout.warning{background-color:#30170a}html.dark-mode .callout.warning{color:#de8a5a}.callout.warning:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiNiNjUzMWMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiLz48L3N2Zz4=")}.callout a{color:inherit;text-decoration:underline}.dragged{position:absolute;opacity:.5;z-index:2000}body.dragging,body.dragging *{cursor:move !important}.avatar{border-radius:100%;background-color:#eee;width:30px;height:30px}html.dark-mode .avatar{background-color:#000}.avatar.med{width:40px;height:40px}.avatar.large{width:80px;height:80px}.avatar.huge{width:120px;height:120px}.avatar.square{border-radius:3px}html.dark-mode .avatar[src$="user_avatar.png"]{filter:invert(1)}.loading-container{position:relative;display:block;margin:32px auto}.loading-container>div{width:10px;height:10px;border-radius:10px;display:inline-block;vertical-align:top;transform:translate3d(-10px, 0, 0);margin-top:6px;animation-name:loadingBob;animation-duration:1.4s;animation-iteration-count:infinite;animation-timing-function:cubic-bezier(0.62, 0.28, 0.23, 0.99);margin-inline-end:4px;background-color:var(--color-page);animation-delay:-300ms}.loading-container>div:first-child{left:-16px;background-color:var(--color-book);animation-delay:-600ms}.loading-container>div:last-of-type{left:16px;background-color:var(--color-chapter);animation-delay:0ms}.loading-container>span{margin-inline-start:12px;font-style:italic;color:#888;vertical-align:top}.skip-to-content-link{position:fixed;top:-52px;left:0;background-color:#fff;z-index:15;border-radius:0 4px 4px 0;display:block;box-shadow:0 0 4px 1px rgba(0,0,0,.5);font-weight:bold}.skip-to-content-link:focus{top:32px;outline-offset:-10px;outline:2px dotted var(--color-link)}.entity-selector{border:1px solid #ddd;border-color:#ddd;border-radius:3px;overflow:hidden;font-size:.8em}html.dark-mode .entity-selector{border-color:#111}.entity-selector input[type=text]{width:100%;display:block;border-radius:0;border:0;border-bottom:1px solid #ddd;font-size:16px;padding:12px 16px}.entity-selector .entity-list{overflow-y:scroll;height:400px;background-color:#eee;margin-inline-end:0;margin-inline-start:0}html.dark-mode .entity-selector .entity-list{background-color:#222}.entity-selector .entity-list-item{background-color:#fff}html.dark-mode .entity-selector .entity-list-item{background-color:#222}.entity-selector .entity-list-item p{margin-bottom:0}.entity-selector .entity-list-item:focus{outline:2px dotted var(--color-primary);outline-offset:-4px}.entity-selector .entity-list-item.selected{background-color:rgba(0,0,0,.05)}html.dark-mode .entity-selector .entity-list-item.selected{background-color:rgba(255,255,255,.05)}.entity-selector .loading{height:400px;padding-top:24px}.entity-selector.compact{font-size:10px}.entity-selector.compact .entity-item-snippet{display:none}.entity-selector.compact h4{font-size:14px}.fullscreen{border:0;position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;z-index:150}.list-sort-container{display:inline-block}.list-sort-container form{display:inline-block}.list-sort-container .list-sort{display:inline-grid;margin-inline-start:12px;grid-template-columns:minmax(120px, max-content) 40px;font-size:.9rem;border:2px solid #ddd;border-color:#ddd;border-radius:4px}html.dark-mode .list-sort-container .list-sort{border-color:#444}.list-sort-container .list-sort-label{font-weight:bold;display:inline-block;color:#555}html.dark-mode .list-sort-container .list-sort-label{color:#888}.list-sort-container .list-sort-type{text-align:start}.list-sort-container .list-sort-type,.list-sort-container .list-sort-dir{padding:6px 12px;cursor:pointer}.list-sort-container .list-sort-dir{border-inline-start:2px solid #ddd;color:#888;border-color:#ddd}html.dark-mode .list-sort-container .list-sort-dir{border-color:#444}.list-sort-container .list-sort-dir .svg-icon{transition:transform ease-in-out 120ms}.list-sort-container .list-sort-dir:hover .svg-icon{transform:rotate(180deg)}/*# sourceMappingURL=styles.css.map */ +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after{content:"";content:none}q:before,q:after{content:"";content:none}table{border-collapse:collapse;border-spacing:0}:root{--font-body: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;--font-code: Lucida Console, DejaVu Sans Mono, Ubuntu Mono, Monaco, monospace;--color-primary: #206ea7;--color-primary-light: rgba(32,110,167,0.15);--color-link: #206ea7;--color-page: #206ea7;--color-page-draft: #7e50b1;--color-chapter: #af4d0d;--color-book: #077b70;--color-bookshelf: #a94747;--color-positive: #0f7d15;--color-negative: #ab0f0e;--color-info: #0288D1;--color-warning: #cf4d03;--bg-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='100%25' width='100%25'%3E%3Cdefs%3E%3Cpattern id='doodad' width='19' height='19' viewBox='0 0 40 40' patternUnits='userSpaceOnUse' patternTransform='rotate(143)'%3E%3Crect width='100%25' height='100%25' fill='rgba(42, 67, 101,0)'/%3E%3Cpath d='M-10 30h60v20h-60zM-10-10h60v20h-60' fill='rgba(26, 32, 44,0)'/%3E%3Cpath d='M-10 10h60v20h-60zM-10-30h60v20h-60z' fill='rgba(0, 0, 0,0.05)'/%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23doodad)' height='200%25' width='200%25'/%3E%3C/svg%3E")}:root.dark-mode{--bg-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='100%25' width='100%25'%3E%3Cdefs%3E%3Cpattern id='doodad' width='19' height='19' viewBox='0 0 40 40' patternUnits='userSpaceOnUse' patternTransform='rotate(143)'%3E%3Crect width='100%25' height='100%25' fill='rgba(42, 67, 101,0)'/%3E%3Cpath d='M-10 30h60v20h-60zM-10-10h60v20h-60' fill='rgba(26, 32, 44,0)'/%3E%3Cpath d='M-10 10h60v20h-60zM-10-30h60v20h-60z' fill='rgba(255, 255, 255,0.05)'/%3E%3C/pattern%3E%3C/defs%3E%3Crect fill='url(%23doodad)' height='200%25' width='200%25'/%3E%3C/svg%3E");color-scheme:only dark;--color-positive: #4aa850;--color-negative: #e85c5b;--color-warning: #de8a5a}:root:not(.dark-mode){color-scheme:only light}.m-none{margin:0 !important}.mx-none{margin-inline-start:0 !important;margin-inline-end:0 !important}.my-none{margin-top:0 !important;margin-bottom:0 !important}.mt-none{margin-top:0 !important}.mr-none{margin-inline-end:0 !important}.mb-none{margin-bottom:0 !important}.ml-none{margin-inline-start:0 !important}.m-xxs{margin:3px !important}.mx-xxs{margin-inline-start:3px !important;margin-inline-end:3px !important}.my-xxs{margin-top:3px !important;margin-bottom:3px !important}.mt-xxs{margin-top:3px !important}.mr-xxs{margin-inline-end:3px !important}.mb-xxs{margin-bottom:3px !important}.ml-xxs{margin-inline-start:3px !important}.m-xs{margin:6px !important}.mx-xs{margin-inline-start:6px !important;margin-inline-end:6px !important}.my-xs{margin-top:6px !important;margin-bottom:6px !important}.mt-xs{margin-top:6px !important}.mr-xs{margin-inline-end:6px !important}.mb-xs{margin-bottom:6px !important}.ml-xs{margin-inline-start:6px !important}.m-s{margin:12px !important}.mx-s{margin-inline-start:12px !important;margin-inline-end:12px !important}.my-s{margin-top:12px !important;margin-bottom:12px !important}.mt-s{margin-top:12px !important}.mr-s{margin-inline-end:12px !important}.mb-s{margin-bottom:12px !important}.ml-s{margin-inline-start:12px !important}.m-m{margin:16px !important}.mx-m{margin-inline-start:16px !important;margin-inline-end:16px !important}.my-m{margin-top:16px !important;margin-bottom:16px !important}.mt-m{margin-top:16px !important}.mr-m{margin-inline-end:16px !important}.mb-m{margin-bottom:16px !important}.ml-m{margin-inline-start:16px !important}.m-l{margin:24px !important}.mx-l{margin-inline-start:24px !important;margin-inline-end:24px !important}.my-l{margin-top:24px !important;margin-bottom:24px !important}.mt-l{margin-top:24px !important}.mr-l{margin-inline-end:24px !important}.mb-l{margin-bottom:24px !important}.ml-l{margin-inline-start:24px !important}.m-xl{margin:32px !important}.mx-xl{margin-inline-start:32px !important;margin-inline-end:32px !important}.my-xl{margin-top:32px !important;margin-bottom:32px !important}.mt-xl{margin-top:32px !important}.mr-xl{margin-inline-end:32px !important}.mb-xl{margin-bottom:32px !important}.ml-xl{margin-inline-start:32px !important}.m-xxl{margin:48px !important}.mx-xxl{margin-inline-start:48px !important;margin-inline-end:48px !important}.my-xxl{margin-top:48px !important;margin-bottom:48px !important}.mt-xxl{margin-top:48px !important}.mr-xxl{margin-inline-end:48px !important}.mb-xxl{margin-bottom:48px !important}.ml-xxl{margin-inline-start:48px !important}.m-auto{margin:auto !important}.mx-auto{margin-inline-start:auto !important;margin-inline-end:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-inline-end:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-inline-start:auto !important}.p-none{padding:0 !important}.px-none{padding-inline-start:0 !important;padding-inline-end:0 !important}.py-none{padding-top:0 !important;padding-bottom:0 !important}.pt-none{padding-top:0 !important}.pr-none{padding-inline-end:0 !important}.pb-none{padding-bottom:0 !important}.pl-none{padding-inline-start:0 !important}.p-xxs{padding:3px !important}.px-xxs{padding-inline-start:3px !important;padding-inline-end:3px !important}.py-xxs{padding-top:3px !important;padding-bottom:3px !important}.pt-xxs{padding-top:3px !important}.pr-xxs{padding-inline-end:3px !important}.pb-xxs{padding-bottom:3px !important}.pl-xxs{padding-inline-start:3px !important}.p-xs{padding:6px !important}.px-xs{padding-inline-start:6px !important;padding-inline-end:6px !important}.py-xs{padding-top:6px !important;padding-bottom:6px !important}.pt-xs{padding-top:6px !important}.pr-xs{padding-inline-end:6px !important}.pb-xs{padding-bottom:6px !important}.pl-xs{padding-inline-start:6px !important}.p-s{padding:12px !important}.px-s{padding-inline-start:12px !important;padding-inline-end:12px !important}.py-s{padding-top:12px !important;padding-bottom:12px !important}.pt-s{padding-top:12px !important}.pr-s{padding-inline-end:12px !important}.pb-s{padding-bottom:12px !important}.pl-s{padding-inline-start:12px !important}.p-m{padding:16px !important}.px-m{padding-inline-start:16px !important;padding-inline-end:16px !important}.py-m{padding-top:16px !important;padding-bottom:16px !important}.pt-m{padding-top:16px !important}.pr-m{padding-inline-end:16px !important}.pb-m{padding-bottom:16px !important}.pl-m{padding-inline-start:16px !important}.p-l{padding:24px !important}.px-l{padding-inline-start:24px !important;padding-inline-end:24px !important}.py-l{padding-top:24px !important;padding-bottom:24px !important}.pt-l{padding-top:24px !important}.pr-l{padding-inline-end:24px !important}.pb-l{padding-bottom:24px !important}.pl-l{padding-inline-start:24px !important}.p-xl{padding:32px !important}.px-xl{padding-inline-start:32px !important;padding-inline-end:32px !important}.py-xl{padding-top:32px !important;padding-bottom:32px !important}.pt-xl{padding-top:32px !important}.pr-xl{padding-inline-end:32px !important}.pb-xl{padding-bottom:32px !important}.pl-xl{padding-inline-start:32px !important}.p-xxl{padding:48px !important}.px-xxl{padding-inline-start:48px !important;padding-inline-end:48px !important}.py-xxl{padding-top:48px !important;padding-bottom:48px !important}.pt-xxl{padding-top:48px !important}.pr-xxl{padding-inline-end:48px !important}.pb-xxl{padding-bottom:48px !important}.pl-xxl{padding-inline-start:48px !important}.p-auto{padding:auto !important}.px-auto{padding-inline-start:auto !important;padding-inline-end:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-inline-end:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-inline-start:auto !important}.gap-none{gap:0 !important}.gap-x-none{column-gap:0 !important}.gap-y-none{row-gap:0 !important}.gap-xxs{gap:3px !important}.gap-x-xxs{column-gap:3px !important}.gap-y-xxs{row-gap:3px !important}.gap-xs{gap:6px !important}.gap-x-xs{column-gap:6px !important}.gap-y-xs{row-gap:6px !important}.gap-s{gap:12px !important}.gap-x-s{column-gap:12px !important}.gap-y-s{row-gap:12px !important}.gap-m{gap:16px !important}.gap-x-m{column-gap:16px !important}.gap-y-m{row-gap:16px !important}.gap-l{gap:24px !important}.gap-x-l{column-gap:24px !important}.gap-y-l{row-gap:24px !important}.gap-xl{gap:32px !important}.gap-x-xl{column-gap:32px !important}.gap-y-xl{row-gap:32px !important}.gap-xxl{gap:48px !important}.gap-x-xxl{column-gap:48px !important}.gap-y-xxl{row-gap:48px !important}.gap-auto{gap:auto !important}.gap-x-auto{column-gap:auto !important}.gap-y-auto{row-gap:auto !important}.opacity-10{opacity:.1}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}*{box-sizing:border-box;outline-color:var(--color-primary);outline-width:1px}*:focus{outline-style:dotted}html{height:100%;overflow-y:scroll;background-color:#f2f2f2}html.flexbox{overflow-y:hidden}html.dark-mode{background-color:#111}body{font-size:14px;line-height:1.6;color:#444;-webkit-font-smoothing:antialiased;height:100%;display:flex;flex-direction:column}html.dark-mode body{color:#aaa}body,button,input,select,label,textarea{font-family:var(--font-body)}pre,#markdown-editor-input,.text-mono,.code-base,span.code,code{font-family:var(--font-code)}h1{font-size:3.425em;line-height:1.22222222em;margin-top:.48888889em;margin-bottom:.48888889em}h2{font-size:2.8275em;line-height:1.294117647em;margin-top:.8627451em;margin-bottom:.43137255em}h3{font-size:2.333em;line-height:1.221428572em;margin-top:.78571429em;margin-bottom:.43137255em}h4{font-size:1.666em;line-height:1.375em;margin-top:.78571429em;margin-bottom:.43137255em}h1,h2,h3,h4,h5,h6{font-weight:400;position:relative;display:block;font-family:var(--font-heading, var(--font-body));color:#222}html.dark-mode h1,html.dark-mode h2,html.dark-mode h3,html.dark-mode h4,html.dark-mode h5,html.dark-mode h6{color:#bbb}h1 .subheader,h2 .subheader,h3 .subheader,h4 .subheader,h5 .subheader,h6 .subheader{font-size:.5em;line-height:1em;color:#969696}h5{font-size:1.4em}h5,h6{line-height:1.2em;margin-top:.78571429em;margin-bottom:.66em}@media screen and (max-width: 600px){h1{font-size:2.8275em}h2{font-size:2.333em}h3{font-size:1.666em}h4{font-size:1.333em}h5{font-size:1.161616em}}.list-heading{font-size:2rem}h2.list-heading{font-size:1.333rem}a{color:var(--color-link);fill:currentColor;cursor:pointer;text-decoration:none;transition:filter ease-in-out 80ms;line-height:1.6}a:hover{text-decoration:underline}a.icon{display:inline-block}a svg{position:relative;display:inline-block}a:focus img:only-child{outline:2px dashed var(--color-link);outline-offset:2px}a.no-link-style{color:inherit}a.no-link-style:hover{text-decoration:none}.blended-links a{color:inherit}.blended-links a svg{fill:currentColor}p,ul,ol,pre,table,blockquote{margin-top:.3em;margin-bottom:1.375em}hr{border:0;height:1px;background:#eaeaea;margin-bottom:24px}html.dark-mode hr{background:#555}hr.faded{background-image:linear-gradient(to right, #FFF, #e3e0e0 20%, #e3e0e0 80%, #FFF)}hr.darker{background:#ddd}html.dark-mode hr.darker{background:#666}hr.margin-top,hr.even{margin-top:24px}strong,b,.bold,.strong{font-weight:bold}strong>strong,strong>b,strong>.bold,strong>.strong,b>strong,b>b,b>.bold,b>.strong,.bold>strong,.bold>b,.bold>.bold,.bold>.strong,.strong>strong,.strong>b,.strong>.bold,.strong>.strong{font-weight:bolder}em,i,.italic{font-style:italic}small,p.small,span.small,.text-small{font-size:.75rem}sup,.superscript{vertical-align:super;font-size:.8em}sub,.subscript{vertical-align:sub;font-size:.8em}pre{font-size:12px;border:1px solid #ddd;background-color:#fff;border-color:#ddd;border-radius:4px;padding-left:26px;position:relative;padding-top:3px;padding-bottom:3px}html.dark-mode pre{background-color:#2b2b2b}html.dark-mode pre{border-color:#111}pre:before{content:"";display:block;position:absolute;top:0;width:22.4px;left:0;height:100%;background-color:#f5f5f5;border-right:1px solid #ddd}html.dark-mode pre:before{background-color:#313335}html.dark-mode pre:before{border-right:none}@media print{pre{padding-left:12px}pre:before{display:none}}blockquote{display:block;position:relative;border-left:4px solid rgba(0,0,0,0);border-left-color:var(--color-primary);background-color:#f8f8f8;padding:12px 16px 12px 32px;overflow:auto}html.dark-mode blockquote{background-color:#333}blockquote:before{content:"“";font-size:2em;font-weight:bold;position:absolute;top:12px;left:12px;color:#777}.text-mono{font-family:var(--font-code)}.text-uppercase{text-transform:uppercase}.text-capitals{text-transform:capitalize}.code-base,span.code,code{font-size:.84em;border:1px solid #ddd;border-radius:3px;background-color:#f8f8f8;border-color:#ddd}html.dark-mode .code-base,html.dark-mode span.code,html.dark-mode code{background-color:#2b2b2b}html.dark-mode .code-base,html.dark-mode span.code,html.dark-mode code{border-color:#444}code{display:inline;padding:1px 3px;white-space:pre-wrap;line-height:1.2em}span.code{padding:1px 6px}pre code{background-color:rgba(0,0,0,0);border:0;font-size:1em;display:block;line-height:1.6}span.highlight{font-weight:bold;padding:2px 4px}ul,ol{padding-left:32px;padding-right:32px;display:flow-root}ul p,ol p{margin:0}ul{list-style:disc}ul ul{list-style:circle}ul label{margin:0}ol{list-style:decimal}li>ol,li>ul{margin-top:0;margin-bottom:0;margin-block-end:0;margin-block-start:0;padding-block-end:0;padding-block-start:0;padding-left:19.2px;padding-right:19.2px}li.checkbox-item,li.task-list-item{display:list-item;list-style:none;margin-left:-19.2px}li.checkbox-item input[type=checkbox],li.task-list-item input[type=checkbox]{margin-right:6px}li.checkbox-item li.checkbox-item,li.checkbox-item li.task-list-item,li.task-list-item li.checkbox-item,li.task-list-item li.task-list-item{margin-left:6px}.underlined{text-decoration:underline}.text-center{text-align:center}.text-left{text-align:start}.text-right{text-align:end}@media screen and (min-width: 360px){.text-xxs-center{text-align:center}.text-xxs-left{text-align:start}.text-xxs-right{text-align:end}}@media screen and (min-width: 400px){.text-xs-center{text-align:center}.text-xs-left{text-align:start}.text-xs-right{text-align:end}}@media screen and (min-width: 600px){.text-s-center{text-align:center}.text-s-left{text-align:start}.text-s-right{text-align:end}}@media screen and (min-width: 880px){.text-m-center{text-align:center}.text-m-left{text-align:start}.text-m-right{text-align:end}}@media screen and (min-width: 1000px){.text-l-center{text-align:center}.text-l-left{text-align:start}.text-l-right{text-align:end}}@media screen and (min-width: 1100px){.text-xl-center{text-align:center}.text-xl-left{text-align:start}.text-xl-right{text-align:end}}.text-bigger{font-size:1.1em}.text-large{font-size:1.6666em}.no-color{color:inherit}.break-text{white-space:normal;word-wrap:break-word;overflow-wrap:break-word}.text-limit-lines-1{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.text-limit-lines-2{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.header-group{margin:16px 0}.header-group h1,.header-group h2,.header-group h3,.header-group h4,.header-group h5,.header-group h6{margin:0}span.sep{color:#bbb;padding:0 6px}.list>*{display:block}.svg-icon{width:1em;height:1em;display:inline-block;position:relative;bottom:-0.105em;margin-inline-end:6px;pointer-events:none;fill:currentColor}.primary-background{background-color:var(--color-primary) !important}.primary-background-light{background-color:var(--color-primary-light)}html.dark-mode .primary-background-light{background:#000}html.dark-mode .primary-background-light .text-link{color:#aaa !important}.link-background{background-color:var(--color-link) !important}.text-pos,.text-pos:hover,.text-pos-hover:hover{color:var(--color-positive) !important;fill:var(--color-positive) !important}.text-warn,.text-warn:hover,.text-warn-hover:hover{color:var(--color-warning) !important;fill:var(--color-warning) !important}.text-neg,.text-neg:hover,.text-neg-hover:hover{color:var(--color-negative) !important;fill:var(--color-negative) !important}.text-primary,.text-primary:hover,.text-primary-hover:hover{color:var(--color-primary) !important;fill:var(--color-primary) !important}.text-link,.text-link:hover,.text-link-hover:hover{color:var(--color-link) !important;fill:var(--color-link) !important}.text-muted{color:#575757 !important;fill:currentColor !important}html.dark-mode .text-muted{color:#888 !important}.text-dark{color:#222 !important;fill:currentColor !important}html.dark-mode .text-dark{color:#ccc !important}.text-white{color:#fff;fill:currentColor !important}.text-bookshelf,.text-bookshelf:hover{color:var(--color-bookshelf);fill:var(--color-bookshelf)}.text-book,.text-book:hover{color:var(--color-book);fill:var(--color-book)}.text-page,.text-page:hover{color:var(--color-page);fill:var(--color-page)}.text-page.draft,.text-page.draft:hover{color:var(--color-page-draft);fill:var(--color-page-draft)}.text-chapter,.text-chapter:hover{color:var(--color-chapter);fill:var(--color-chapter)}.bg-white{background-color:#fff}.bg-book{background-color:var(--color-book)}.bg-chapter{background-color:var(--color-chapter)}.bg-bookshelf{background-color:var(--color-bookshelf)}.container{max-width:1400px;margin-inline-start:auto;margin-inline-end:auto;padding-inline-start:16px;padding-inline-end:16px}.container.medium{max-width:1100px}.container.small{max-width:840px}.container.very-small{max-width:480px}.grid{display:grid;grid-column-gap:24px;grid-row-gap:24px}.grid>*{min-width:0}.grid.half{grid-template-columns:1fr 1fr}.grid.third{grid-template-columns:1fr 1fr 1fr}.grid.left-focus{grid-template-columns:2fr 1fr}.grid.right-focus{grid-template-columns:1fr 3fr}.grid.gap-y-xs{grid-row-gap:6px}.grid.gap-xl{grid-column-gap:32px;grid-row-gap:32px}.grid.gap-xxl{grid-column-gap:48px;grid-row-gap:48px}.grid.v-center{align-items:center}.grid.v-end{align-items:end}.grid.no-gap{grid-row-gap:0;grid-column-gap:0}.grid.no-row-gap{grid-row-gap:0}@media screen and (max-width: 880px){.grid.third:not(.no-break){grid-template-columns:1fr 1fr}.grid.half:not(.no-break),.grid.left-focus:not(.no-break),.grid.right-focus:not(.no-break){grid-template-columns:1fr}.grid.half.collapse-xs{grid-template-columns:1fr 1fr}.grid.gap-xl{grid-column-gap:16px;grid-row-gap:16px}.grid.right-focus.reverse-collapse>*:nth-child(2){order:0}.grid.right-focus.reverse-collapse>*:nth-child(1){order:1}}@media screen and (max-width: 600px){.grid.third:not(.no-break){grid-template-columns:1fr}}@media screen and (max-width: 400px){.grid.half.collapse-xs{grid-template-columns:1fr}}#content{flex:1 0 auto}body.flexbox{display:flex;flex-direction:column;align-items:stretch;height:100%;min-height:100%;max-height:100%;overflow:hidden}body.flexbox #content{flex:1;display:flex;min-height:0}.flex-fill{display:flex;align-items:stretch;min-height:0;max-width:100%;position:relative}.flex-container-row{display:flex;flex-direction:row}.flex-container-row.v-center{align-items:center}.flex-container-column{display:flex;flex-direction:column}.flex-container-row.inline,.flex-container-column.inline{display:inline-flex !important}.flex-container-column.wrap,.flex-container-row.wrap{flex-wrap:wrap}.flex{min-height:0;flex:1;max-width:100%}.flex.fit-content{flex-basis:auto;flex-grow:0}.flex.fill-area{flex-grow:1;flex-shrink:0;min-width:fit-content}.flex-2{min-height:0;flex:2;max-width:100%}.flex-3{min-height:0;flex:3;max-width:100%}.flex-none{flex:none}.justify-flex-start{justify-content:flex-start}.justify-flex-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-space-between{justify-content:space-between}.items-center{align-items:center}.items-stretch{align-items:stretch}.min-width-xxxxs{min-width:60px}.min-width-xxxs{min-width:80px}.min-width-xxs{min-width:100px}.min-width-xs{min-width:120px}.min-width-s{min-width:160px}.min-width-m{min-width:200px}.min-width-l{min-width:240px}.min-width-xl{min-width:280px}.min-width-xxl{min-width:320px}.block{display:block !important;position:relative}.inline{display:inline !important}.block.inline{display:inline-block !important}.relative{position:relative}.fixed{position:fixed;z-index:20}.fixed.top-right{top:0;right:0}.hidden{display:none !important}.fill-height{height:100%}.float{float:left}.float.right{float:right}.sticky-top-m{position:sticky;top:16px}@media screen and (max-width: 360px){.hide-under-xxs{display:none !important}}@media screen and (min-width: 360px){.hide-over-xxs{display:none !important}}@media screen and (max-width: 400px){.hide-under-xs{display:none !important}}@media screen and (min-width: 400px){.hide-over-xs{display:none !important}}@media screen and (max-width: 600px){.hide-under-s{display:none !important}}@media screen and (min-width: 600px){.hide-over-s{display:none !important}}@media screen and (max-width: 880px){.hide-under-m{display:none !important}}@media screen and (min-width: 880px){.hide-over-m{display:none !important}}@media screen and (max-width: 1000px){.hide-under-l{display:none !important}}@media screen and (min-width: 1000px){.hide-over-l{display:none !important}}@media screen and (max-width: 1100px){.hide-under-xl{display:none !important}}@media screen and (min-width: 1100px){.hide-over-xl{display:none !important}}[hidden]{display:none !important}.screen-reader-only{position:absolute;inset-inline-start:-10000px;top:auto;width:1px;height:1px;overflow:hidden}.rounded{border-radius:4px}.dual-column-content{columns:2}@media screen and (max-width: 880px){.dual-column-content{columns:1}}.clearfix::before,.clearfix::after{content:" ";display:table}.clearfix::after{clear:both}.tri-layout-container{display:grid;margin-inline-start:32px;margin-inline-end:32px;grid-template-columns:1fr 4fr 1fr;grid-template-areas:"a b c";grid-column-gap:32px;position:relative}.tri-layout-sides{grid-column-start:a;grid-column-end:c;grid-row:1;min-width:0;z-index:4}.tri-layout-sides-content{display:grid;grid-template-areas:"a b c";grid-template-columns:1fr 4fr 1fr;height:100%}.tri-layout-middle{grid-area:b;padding-top:16px;min-width:0;z-index:5}.tri-layout-right{grid-area:c;min-width:0}.tri-layout-left{grid-area:a;min-width:0}@media screen and (min-width: 1400px){.tri-layout-left-contents,.tri-layout-right-contents{padding:32px 16px;position:sticky;top:0;max-height:100vh;min-height:50vh;overflow-y:scroll;overflow-x:hidden;height:100%;scrollbar-width:none;-ms-overflow-style:none}.tri-layout-left-contents::-webkit-scrollbar,.tri-layout-right-contents::-webkit-scrollbar{display:none}.tri-layout-middle-contents{max-width:940px;margin:0 auto}}@media screen and (min-width: 1400px)and (max-width: 1700px){.tri-layout-sides-content,.tri-layout-container{grid-template-columns:1fr 972px 1fr}.tri-layout-container{grid-column-gap:12px;margin-inline-start:16px;margin-inline-end:16px}}@media screen and (max-width: 1400px){.tri-layout-container{grid-template-areas:"a b b";grid-template-columns:1fr 3fr;grid-template-rows:min-content min-content 1fr;padding-inline-end:24px}.tri-layout-sides{grid-column-start:a;grid-column-end:a}.tri-layout-sides-content{display:block}}@media screen and (min-width: 1000px)and (max-width: 1400px){.tri-layout-sides-content{position:sticky;top:0;max-height:100vh;min-height:50vh;overflow-y:scroll;overflow-x:hidden;height:100%;scrollbar-width:none;-ms-overflow-style:none}.tri-layout-sides-content::-webkit-scrollbar{display:none}}@media screen and (min-width: 1000px){.tri-layout-mobile-tabs{display:none}.tri-layout-left-contents>*,.tri-layout-right-contents>*{opacity:.6;transition:opacity ease-in-out 120ms}html.dark-mode .tri-layout-left-contents>*,html.dark-mode .tri-layout-right-contents>*{opacity:.75}.tri-layout-left-contents>*:hover,.tri-layout-left-contents>*:focus-within,.tri-layout-right-contents>*:hover,.tri-layout-right-contents>*:focus-within{opacity:1 !important}}@media screen and (min-width: 1000px)and (prefers-contrast: more){.tri-layout-left-contents>*,.tri-layout-right-contents>*{opacity:1 !important}}@media screen and (max-width: 1000px){.tri-layout-container{grid-template-areas:none;grid-template-columns:1fr;grid-column-gap:0;padding-inline-end:6px;padding-inline-start:6px}.tri-layout-container .tri-layout-sides{padding-inline-start:16px;padding-inline-end:16px;grid-column:1/1}.tri-layout-container .tri-layout-left>*,.tri-layout-container .tri-layout-right>*{display:none;pointer-events:none}.tri-layout-container .tri-layout-left,.tri-layout-container .tri-layout-right{padding-top:0 !important}.tri-layout-container .tri-layout-middle{grid-area:none;grid-row:3;grid-column:1/1;z-index:1;overflow:hidden;transition:transform ease-in-out 240ms}.tri-layout-container .tri-layout-left{grid-row:2}.tri-layout-container.show-info{overflow:hidden}.tri-layout-container.show-info .tri-layout-middle{display:none}.tri-layout-container.show-info .tri-layout-right>*,.tri-layout-container.show-info .tri-layout-left>*{display:block;pointer-events:auto}}@media screen and (max-width: 880px){.tri-layout-container{margin-inline-start:0;margin-inline-end:0}}.card{background-color:#fff;box-shadow:0 1px 6px -1px rgba(0,0,0,.1);border-radius:3px;break-inside:avoid}html.dark-mode .card{background-color:#222}.card .body,.card p.empty-text{padding-block:16px}.card a,.card p{word-wrap:break-word;word-break:break-word}.card-title{padding:16px 16px 6px;margin:0;font-size:14px;color:#222;fill:#222;font-weight:400}.card-title a{line-height:1}.card-footer-link,button.card-footer-link{display:block;padding:12px 16px;line-height:1;border-top:1px solid;width:100%;text-align:left;border-color:#ddd;border-radius:0 0 3px 3px;font-size:.9em;margin-top:6px}html.dark-mode .card-footer-link,html.dark-mode button.card-footer-link{border-color:#555}.card-footer-link:hover,button.card-footer-link:hover{text-decoration:none;background-color:#f2f2f2}html.dark-mode .card-footer-link:hover,html.dark-mode button.card-footer-link:hover{background-color:#2d2d2d}.card-footer-link:focus,button.card-footer-link:focus{background-color:#eee;outline:1px dotted #666;outline-offset:-2px}html.dark-mode .card-footer-link:focus,html.dark-mode button.card-footer-link:focus{background-color:#222}.card.border-card{border:1px solid;border-color:#ddd}html.dark-mode .card.border-card{border-color:#000}.card.drag-card{border:1px solid #ddd;border-color:#ddd;background-color:#fff;border-radius:4px;display:flex;padding:0 0 0 40px;margin:12px 0;position:relative}html.dark-mode .card.drag-card{border-color:#000}html.dark-mode .card.drag-card{background-color:#333}.card.drag-card .drag-card-action{cursor:pointer}.card.drag-card .handle,.card.drag-card .drag-card-action{display:flex;align-items:center;text-align:center;justify-content:center;width:28px;flex-grow:0;padding:0 6px}.card.drag-card .handle:hover,.card.drag-card .drag-card-action:hover{background-color:#eee}html.dark-mode .card.drag-card .handle:hover,html.dark-mode .card.drag-card .drag-card-action:hover{background-color:#2d2d2d}.card.drag-card .handle .svg-icon,.card.drag-card .drag-card-action .svg-icon{margin-inline-end:0px}.card.drag-card .outline input{margin:12px 0;width:100%}.card.drag-card .outline{position:relative}.card.drag-card .handle{background-color:#eee;left:0;position:absolute;top:0;bottom:0}html.dark-mode .card.drag-card .handle{background-color:#2d2d2d}.card.drag-card>div{padding:0 12px;max-width:80%;flex:1}.grid-card{display:flex;flex-direction:column;border:1px solid #ddd;border-color:#ddd;margin-bottom:24px;border-radius:4px;overflow:hidden;min-width:100px;color:#444;transition:border-color ease-in-out 120ms,box-shadow ease-in-out 120ms}html.dark-mode .grid-card{border-color:#000}.grid-card:hover{color:#444;text-decoration:none;box-shadow:0 1px 6px -1px rgba(0,0,0,.1)}html.dark-mode .grid-card:hover{box-shadow:0 1px 6px -1px rgba(0,0,0,.5)}.grid-card h2{width:100%;font-size:1.5em;margin:0 0 10px}.grid-card p{font-size:.7rem;margin:0;line-height:1.6em}.grid-card .grid-card-content{flex:1;border-top:0;border-bottom-width:2px}.grid-card .grid-card-content,.grid-card .grid-card-footer{padding:24px}.grid-card .grid-card-content+.grid-card-footer{padding-top:0}.book-grid-item .grid-card-footer p.small{font-size:.8em;margin:0}.content-wrap.card{padding:16px 48px;margin-inline-start:auto;margin-inline-end:auto;margin-bottom:24px;overflow:initial;min-height:60vh;border-radius:8px}.content-wrap.card.auto-height{min-height:0}.content-wrap.card.fill-width{width:100%}@media screen and (max-width: 1400px){.content-wrap.card{padding:16px 32px}}@media screen and (max-width: 880px){.content-wrap.card{padding:16px 24px}}@media screen and (max-width: 600px){.content-wrap.card{padding:16px 16px}}.sub-card{box-shadow:0 1px 3px 0 rgba(0,0,0,.1);border:1.5px solid;border-color:#e2e2e2;border-radius:4px}html.dark-mode .sub-card{border-color:#444}.outline-hover{border:1px solid rgba(0,0,0,0) !important}.outline-hover:hover{border:1px solid rgba(0,0,0,.1) !important}.fade-in-when-active{opacity:.6;transition:opacity ease-in-out 120ms}html.dark-mode .fade-in-when-active{opacity:.7}.fade-in-when-active:hover,.fade-in-when-active:focus-within{opacity:1 !important}@media(prefers-contrast: more){.fade-in-when-active{opacity:1 !important}}.tag-item{display:inline-flex;margin-bottom:6px;margin-inline-end:6px;border-radius:4px;border:1px solid;overflow:hidden;font-size:.85em;border-color:#ccc}html.dark-mode .tag-item{border-color:#666}.tag-item a,.tag-item span,.tag-item a:hover,.tag-item a:active{padding:4px 8px;color:rgba(0,0,0,.7);transition:background-color ease-in-out 80ms;text-decoration:none}html.dark-mode .tag-item a,html.dark-mode .tag-item span,html.dark-mode .tag-item a:hover,html.dark-mode .tag-item a:active{color:rgba(255,255,255,.8)}.tag-item a:hover{background-color:rgba(255,255,255,.7)}html.dark-mode .tag-item a:hover{background-color:rgba(255,255,255,.3)}.tag-item svg{fill:rgba(0,0,0,.5)}html.dark-mode .tag-item svg{fill:rgba(255,255,255,.5)}.tag-item .tag-value{border-inline-start:1px solid;border-color:#ddd;background-color:rgba(255,255,255,.5)}html.dark-mode .tag-item .tag-value{border-color:#666}html.dark-mode .tag-item .tag-value{background-color:rgba(255,255,255,.2)}.tag-name.highlight,.tag-value.highlight{font-weight:bold}.tag-list div:last-child .tag-item{margin-bottom:0}.item-list-row .tag-item{margin-bottom:0}.api-method{font-size:.75rem;background-color:#888;padding:6px;line-height:1.3;opacity:.7;vertical-align:top;border-radius:3px;color:#fff;display:inline-block;min-width:60px;text-align:center;font-weight:bold}.api-method[data-method=GET]{background-color:#077b70}.api-method[data-method=POST]{background-color:#cf4d03}.api-method[data-method=PUT]{background-color:#0288d1}.api-method[data-method=DELETE]{background-color:#ab0f0e}.sticky-sidebar{position:sticky;top:16px;max-height:calc(100vh - 16px);overflow-y:auto}button{background-color:rgba(0,0,0,0);border:0;font-size:100%}.button{text-decoration:none;font-size:.85rem;line-height:1.4em;padding:7.8px 16px;margin-top:6px;margin-bottom:6px;display:inline-block;font-weight:400;outline:0;border-radius:2px;cursor:pointer;transition:background-color ease-in-out 120ms,filter ease-in-out 120ms,box-shadow ease-in-out 120ms;box-shadow:none;background-color:var(--color-primary);color:#fff;text-transform:uppercase;border:1px solid var(--color-primary);vertical-align:top}.button:hover,.button:focus,.button:active{background-color:var(--color-primary);text-decoration:none;color:#fff}.button:hover{box-shadow:0 0 4px 1px #ccc;filter:brightness(110%)}html.dark-mode .button:hover{box-shadow:0 0 4px 1px rgba(0,0,0,.5)}.button:focus{outline:1px dotted currentColor;outline-offset:-6px;box-shadow:none;filter:brightness(90%)}.button:active{outline:0}.button.outline{background-color:rgba(0,0,0,0);color:#666;fill:currentColor;border:1px solid;border-color:#ccc}html.dark-mode .button.outline{color:#aaa}html.dark-mode .button.outline{border-color:#666}.button.outline:hover,.button.outline:focus,.button.outline:active{border:1px solid #ccc;box-shadow:none;background-color:#f2f2f2;background-color:#f2f2f2;filter:none}html.dark-mode .button.outline:hover,html.dark-mode .button.outline:focus,html.dark-mode .button.outline:active{background-color:#555}.button.outline:active{border-color:#bbb;background-color:#ddd;color:#666;box-shadow:inset 0 0 2px rgba(0,0,0,.1)}.button+.button{margin-inline-start:12px}.button.small{font-size:.75rem;padding:7.2px 12px}.text-button{cursor:pointer;background-color:rgba(0,0,0,0);padding:0;margin:0;border:none;user-select:none;font-size:.75rem;line-height:1.4em;color:var(--color-link)}.text-button:active{outline:0}.text-button:hover{text-decoration:none}.text-button:hover,.text-button:focus{color:var(--color-link);fill:var(--color-link)}.text-button.hover-underline:hover{text-decoration:underline}.button.block{width:100%;text-align:start;display:block}.button.icon .svg-icon,.icon-button .svg-icon,.text-button.icon .svg-icon{margin-inline-end:0}.icon-button{text-align:center;border:1px solid rgba(0,0,0,0)}.icon-button:hover{background-color:rgba(0,0,0,.05);border-radius:4px;border-color:#ddd;cursor:pointer}html.dark-mode .icon-button:hover{border-color:#444}.button.svg{display:flex;align-items:center;padding:12px 16px;padding-bottom:10px;width:100%}.button.svg svg{display:inline-block;width:24px;height:24px;bottom:auto;margin-inline-end:16px}.button[disabled]{background-color:#bbb;cursor:default;border-color:#ccc}.button[disabled]:hover{background-color:#bbb;cursor:default;box-shadow:none}table{min-width:100px;max-width:100%}table thead{background-color:#f8f8f8;font-weight:500}html.dark-mode table thead{background-color:#333}table td,table th{min-width:10px;padding:6px 8px;border:1px solid #ddd;overflow:auto;line-height:1.2;word-break:break-word;vertical-align:top}table td p,table th p{margin:0}table.table{width:100%}table.table tr td,table.table tr th{border-bottom:1px solid rgba(0,0,0,.05)}table.table th,table.table td{text-align:start;border:none;padding:12px 12px;vertical-align:middle;margin:0;overflow:visible}table.table th{font-weight:bold}table.table tr:hover{background-color:#f2f2f2}html.dark-mode table.table tr:hover{background-color:#333}table.table .text-right{text-align:end}table.table .text-center{text-align:center}table.table td.actions{overflow:visible}table.table a{display:inline-block}table.table.expand-to-padding{margin-left:-12px;margin-right:-12px;width:calc(100% + 2*12px);max-width:calc(100% + 2*12px)}table.no-style td{border:0;padding:0}table.list-table{margin:0 -6px}table.list-table td{border:0;vertical-align:middle;padding:6px}.input-base,input[type=text],input[type=number],input[type=email],input[type=date],input[type=search],input[type=url],input[type=color],input[type=password],select,textarea,.fake-input{border-radius:3px;border:1px solid #d4d4d4;background-color:#fff;border-color:#d4d4d4;color:#666;display:inline-block;font-size:14px;padding:10.8px;height:40px;width:250px;max-width:100%}html.dark-mode .input-base,html.dark-mode input[type=text],html.dark-mode input[type=number],html.dark-mode input[type=email],html.dark-mode input[type=date],html.dark-mode input[type=search],html.dark-mode input[type=url],html.dark-mode input[type=color],html.dark-mode input[type=password],html.dark-mode select,html.dark-mode textarea,html.dark-mode .fake-input{background-color:#333}html.dark-mode .input-base,html.dark-mode input[type=text],html.dark-mode input[type=number],html.dark-mode input[type=email],html.dark-mode input[type=date],html.dark-mode input[type=search],html.dark-mode input[type=url],html.dark-mode input[type=color],html.dark-mode input[type=password],html.dark-mode select,html.dark-mode textarea,html.dark-mode .fake-input{border-color:#111}html.dark-mode .input-base,html.dark-mode input[type=text],html.dark-mode input[type=number],html.dark-mode input[type=email],html.dark-mode input[type=date],html.dark-mode input[type=search],html.dark-mode input[type=url],html.dark-mode input[type=color],html.dark-mode input[type=password],html.dark-mode select,html.dark-mode textarea,html.dark-mode .fake-input{color:#aaa}.input-base.neg,input.neg[type=text],input.neg[type=number],input.neg[type=email],input.neg[type=date],input.neg[type=search],input.neg[type=url],input.neg[type=color],input.neg[type=password],select.neg,textarea.neg,.neg.fake-input,.input-base.invalid,input.invalid[type=text],input.invalid[type=number],input.invalid[type=email],input.invalid[type=date],input.invalid[type=search],input.invalid[type=url],input.invalid[type=color],input.invalid[type=password],select.invalid,textarea.invalid,.invalid.fake-input{border:1px solid var(--color-negative)}.input-base.pos,input.pos[type=text],input.pos[type=number],input.pos[type=email],input.pos[type=date],input.pos[type=search],input.pos[type=url],input.pos[type=color],input.pos[type=password],select.pos,textarea.pos,.pos.fake-input,.input-base.valid,input.valid[type=text],input.valid[type=number],input.valid[type=email],input.valid[type=date],input.valid[type=search],input.valid[type=url],input.valid[type=color],input.valid[type=password],select.valid,textarea.valid,.valid.fake-input{border:1px solid var(--color-positive)}.input-base.disabled,input.disabled[type=text],input.disabled[type=number],input.disabled[type=email],input.disabled[type=date],input.disabled[type=search],input.disabled[type=url],input.disabled[type=color],input.disabled[type=password],select.disabled,textarea.disabled,.disabled.fake-input,.input-base[disabled],input[disabled][type=text],input[disabled][type=number],input[disabled][type=email],input[disabled][type=date],input[disabled][type=search],input[disabled][type=url],input[disabled][type=color],input[disabled][type=password],select[disabled],textarea[disabled],[disabled].fake-input{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAYAAADEUlfTAAAAMUlEQVQIW2NkwAGuXbv2nxGbHEhCS0uLEUMSJgHShCKJLIEiiS4Bl8QmAZbEJQGSBAC62BuJ+tt7zgAAAABJRU5ErkJggg==)}.input-base[readonly],input[readonly][type=text],input[readonly][type=number],input[readonly][type=email],input[readonly][type=date],input[readonly][type=search],input[readonly][type=url],input[readonly][type=color],input[readonly][type=password],select[readonly],textarea[readonly],[readonly].fake-input{background-color:#f8f8f8}.input-base:focus,input[type=text]:focus,input[type=number]:focus,input[type=email]:focus,input[type=date]:focus,input[type=search]:focus,input[type=url]:focus,input[type=color]:focus,input[type=password]:focus,select:focus,textarea:focus,.fake-input:focus{border-color:var(--color-primary);outline:1px solid var(--color-primary)}.input-fill-width{width:100% !important}.fake-input{overflow:auto}#html-editor{display:none}#markdown-editor{position:relative;z-index:5}#markdown-editor #markdown-editor-input{font-style:normal;font-weight:400;padding:6px 16px;color:#444;border-radius:0;max-height:100%;flex:1;border:0;width:100%}#markdown-editor #markdown-editor-input:focus{outline:0}#markdown-editor.fullscreen{position:fixed;top:0;left:0;height:100%;z-index:2}.markdown-editor-wrap{border-top:1px solid #ddd;border-bottom:1px solid #ddd;border-color:#ddd;position:relative;flex:1;min-width:0}html.dark-mode .markdown-editor-wrap{border-color:#000}.markdown-editor-wrap+.markdown-editor-wrap{flex-basis:50%;flex-shrink:0;flex-grow:0}.markdown-editor-wrap .cm-editor{flex:1;max-width:100%;border:0;margin:0}.markdown-panel-divider{width:2px;background-color:#ddd;cursor:col-resize}html.dark-mode .markdown-panel-divider{background-color:#000}@media screen and (max-width: 880px){#markdown-editor{flex-direction:column}#markdown-editor .markdown-editor-wrap{width:100%;max-width:100%;flex-grow:1;flex-basis:auto !important;min-height:0}.editor-toolbar-label{float:none !important;border-color:#ddd;display:block}html.dark-mode .editor-toolbar-label{border-color:#555}.markdown-editor-wrap:not(.active) .editor-toolbar+div,.markdown-editor-wrap:not(.active) .editor-toolbar .buttons,.markdown-editor-wrap:not(.active) .markdown-display{display:none}#markdown-editor .markdown-editor-wrap:not(.active){flex-grow:0;flex:none}}.markdown-editor-display{background-color:#fff}.markdown-editor-display body{display:block;background-color:#fff;padding-inline-start:16px;padding-inline-end:16px}.markdown-editor-display [drawio-diagram]:hover{outline:2px solid var(--color-primary)}html.markdown-editor-display.dark-mode{background-color:#222}html.markdown-editor-display.dark-mode body{background-color:#222}.editor-toolbar{height:32px;width:100%;font-size:11px;line-height:1.6;border-bottom:1px solid #ccc;background-color:#fff;border-color:#ccc;flex:none}html.dark-mode .editor-toolbar{background-color:#333}html.dark-mode .editor-toolbar{border-color:#000}html.dark-mode .editor-toolbar button{color:#aaa}.editor-toolbar .buttons{font-size:14px}.editor-toolbar .buttons .dropdown-menu{padding:0}.editor-toolbar .buttons .toggle-switch{margin:12px 0}.editor-toolbar .buttons button{font-size:.9rem;width:2rem;text-align:center;border-left:1px solid;border-color:#ddd}html.dark-mode .editor-toolbar .buttons button{border-color:#555}.editor-toolbar .buttons button svg{margin-inline-end:0}.editor-toolbar .buttons button:hover{background-color:#ddd}html.dark-mode .editor-toolbar .buttons button:hover{background-color:#222}label{color:#666;display:block;line-height:1.4em;font-size:.94em;font-weight:400;padding-bottom:2px;margin-bottom:.2em}html.dark-mode label{color:#ddd}label.inline{display:inline-block}label.radio,label.checkbox{font-weight:400;user-select:none}label.radio input[type=radio],label.radio input[type=checkbox],label.checkbox input[type=radio],label.checkbox input[type=checkbox]{margin-inline-end:6px}label.inline.checkbox{margin-inline-end:16px}label+p.small{margin-bottom:.8em}table.form-table{max-width:100%}table.form-table td{overflow:hidden;padding:1.5px 0}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:url("data:image/svg+xml;utf8,");background-size:10px 12px;background-position:calc(100% - 20px) 64%;background-repeat:no-repeat}html[dir=rtl] select{background-position:20px 70%}input[type=date]{width:190px}input[type=color]{height:60px}input[type=color].small{height:42px;width:60px;padding:2px}.toggle-switch{user-select:none;display:inline-grid;grid-template-columns:28px 1fr;align-items:center;margin:16px 0}.toggle-switch .custom-checkbox{width:16px;height:16px;border-radius:2px;display:inline-block;border:2px solid currentColor;overflow:hidden;fill:currentColor}.toggle-switch .custom-checkbox .svg-icon{width:100%;height:100%;margin:0;bottom:auto;top:-1.5px;left:0;transition:transform ease-in-out 120ms;transform:scale(0);transform-origin:center center}.toggle-switch input[type=checkbox]{display:none}.toggle-switch input[type=checkbox]:checked+.custom-checkbox .svg-icon{transform:scale(1)}.toggle-switch .custom-checkbox:hover{background-color:rgba(0,0,0,.05);opacity:.8}.toggle-switch input[type=checkbox][disabled]~*{opacity:.8;cursor:not-allowed}.toggle-switch input[type=checkbox][disabled]~.custom-checkbox{border-color:#999;color:#999 !important;background:#f2f2f2}.toggle-switch-list .toggle-switch{margin:6px 0}.toggle-switch-list.compact .toggle-switch{margin:1px 0}.form-group{margin-bottom:12px}.setting-list>div{border-bottom:1px solid #ddd;padding:32px 0}.setting-list>div:last-child{border-bottom:none}.setting-list-label{color:#222;font-size:1rem}.setting-list-label+p.small{margin-bottom:0}.setting-list-label+.grid{margin-top:16px}.setting-list .grid input[type=text],.setting-list .grid input[type=email],.setting-list .grid input[type=password],.setting-list .grid select,.stretch-inputs input[type=text],.stretch-inputs input[type=email],.stretch-inputs input[type=password],.stretch-inputs select{width:100%}.simple-code-input{background-color:#f8f8f8;font-family:monospace;font-size:12px;min-height:100px;display:block;width:100%}.form-group div.text-pos,.form-group div.text-neg,.form-group p.text-post,.form-group p.text-neg{padding:6px 0}.form-group.collapsible{padding:0 16px;border:1px solid;border-color:#ddd;border-radius:4px}html.dark-mode .form-group.collapsible{border-color:#000}.form-group.collapsible .collapse-title{margin-inline-start:-16px;margin-inline-end:-16px;padding:12px 16px;display:block;width:calc(100% + 32px);text-align:start}.form-group.collapsible .collapse-title,.form-group.collapsible .collapse-title label{cursor:pointer}.form-group.collapsible .collapse-title label{padding-bottom:0;margin-bottom:0;color:inherit}.form-group.collapsible .collapse-title label:before{display:inline-block;content:"▸";margin-inline-end:16px;transition:all ease-in-out 400ms;transform:rotate(0)}.form-group.collapsible .collapse-content{display:none;padding-bottom:16px}.form-group.collapsible.open .collapse-title label:before{transform:rotate(90deg)}.title-input input[type=text]{display:block;width:100%;padding:12px;margin-top:0;font-size:2em;height:auto}.description-input textarea{display:block;width:100%;padding:12px;font-size:14px;color:#666;height:auto}.search-box{max-width:100%;position:relative}.search-box button[tabindex="-1"]{background-color:rgba(0,0,0,0);border:none;color:#666;padding:0;cursor:pointer;position:absolute;left:8px;top:9px}html.dark-mode .search-box button[tabindex="-1"]{color:#aaa}html[dir=rtl] .search-box button[tabindex="-1"]{right:8px;left:auto}.search-box input{display:block;padding:9px;padding-inline-start:28px;width:300px;max-width:100%;height:auto}.search-box.flexible input{width:100%}.search-box .search-box-cancel{left:auto;right:0}.contained-search-box{display:flex;height:38px;z-index:-1}.contained-search-box.floating{box-shadow:0 1px 3px 1px rgba(76,76,76,.26);border-radius:4px;overflow:hidden}html.dark-mode .contained-search-box.floating{border:1px solid #000}.contained-search-box input,.contained-search-box button{height:100%;border-radius:0;border:1px solid #ddd;border-color:#ddd;margin-inline-start:-1px}html.dark-mode .contained-search-box input,html.dark-mode .contained-search-box button{border-color:#000}.contained-search-box input:last-child,.contained-search-box button:last-child{border-inline-end:0}.contained-search-box input{border:0;flex:5;padding:6px 12px}.contained-search-box input:focus,.contained-search-box input:active{outline:1px dotted var(--color-primary);outline-offset:-2px;border:0}.contained-search-box button{border:0;width:48px;border-inline-start:1px solid #ddd;background-color:#fff;background-color:#fff;color:#444}html.dark-mode .contained-search-box button{background-color:#333}html.dark-mode .contained-search-box button{color:#aaa}.contained-search-box button:focus{outline:1px dotted var(--color-primary);outline-offset:-2px}.contained-search-box svg{margin:0}@media screen and (max-width: 600px){.contained-search-box{width:180px}}.outline>input{border:0;border-bottom:2px solid #ddd;border-radius:0}.outline>input:focus,.outline>input:active{border:0;border-bottom:2px solid #aaa;outline:0}.image-picker img{background-color:#bbb;max-width:100%}.custom-file-input{overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;height:1px;border:0;clip:rect(0, 0, 0, 0)}.custom-file-input:focus+label{border-color:var(--color-primary);outline:1px solid var(--color-primary)}input.shortcut-input{width:auto;max-width:120px;height:auto}.anim.fadeIn{opacity:0;animation-name:fadeIn;animation-duration:120ms;animation-timing-function:ease-in-out;animation-fill-mode:forwards}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.search-suggestions-animation{animation-name:searchSuggestions;animation-duration:120ms;animation-fill-mode:forwards;animation-timing-function:cubic-bezier(0.62, 0.28, 0.23, 0.99)}@keyframes searchSuggestions{0%{opacity:.5;transform:scale(0.9)}100%{opacity:1;transform:scale(1)}}@keyframes loadingBob{0%{transform:translate3d(0, 0, 0)}30%{transform:translate3d(0, 0, 0)}50%{transform:translate3d(0, -10px, 0)}70%{transform:translate3d(0, 0, 0)}100%{transform:translate3d(0, 0, 0)}}@keyframes pointer{0%{transform:translate3d(0, 20px, 0) scale3d(0, 0, 0)}100%{transform:translate3d(0, 0, 0) scale3d(1, 1, 1)}}.anim.pointer{transform-origin:50% 100%;animation-name:pointer;animation-duration:180ms;animation-delay:0s;animation-timing-function:cubic-bezier(0.62, 0.28, 0.23, 0.99)}.tox.tox-fullscreen{position:fixed;top:0;height:100%;width:100%;max-width:100%;z-index:100}.tox.tox-tinymce{border-inline:0;border-bottom:0}.page-content.mce-content-body{padding-block-start:1rem;padding-block-end:1rem;outline:0;display:block}.page-content.mce-content-body doc-root{display:block}.page-content.mce-content-body code-block{display:block}.page-content.mce-content-body p{line-height:1.6}body.page-content.mce-content-body{padding-bottom:5rem}.tox .tox-pop__dialog .tox-toolbar{background:rgba(0,0,0,0) !important}.tox-toolbar__primary{justify-content:center}.page-content.mce-content-body code-block>*{pointer-events:none}.page-content.mce-content-body code-block pre{display:none}.page-content.mce-content-body details summary{pointer-events:none}.page-content.mce-content-body details doc-root{padding:12px;margin-left:-10px;margin-right:-10px;margin-bottom:-10px;margin-top:-10px;overflow:hidden}.dark-mode .tox .tox-toolbar__primary,.dark-mode .tox .tox-menu,.dark-mode .tox .tox-dialog__header,.dark-mode .tox .tox-dialog,.dark-mode .tox .tox-dialog__footer,.dark-mode .tox .tox-pop__dialog,.dark-mode .tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#333 !important}.dark-mode .tox .tox-tbtn svg,.dark-mode .tox .tox-tbtn,.dark-mode .tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#dbdbdb;fill:#dbdbdb}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{width:6em !important}.tox-menu .tox-collection__item blockquote::before{content:none}.tox-menu .tox-collection__item blockquote{border-left:4px solid var(--color-primary) !important;padding:4px 6px !important}.tox-menu .tox-collection__item blockquote{border-left:4px solid var(--color-primary) !important;padding:4px 6px !important}.tox-menu .tox-collection__item p[style*=background-color]{padding:4px 6px !important;border-left:3px solid currentColor !important}.tox-menu .tox-collection__item[title^="<"]>div>div{font-family:var(--font-code) !important;border:1px solid #ddd !important;background-color:#eee !important;padding:4px 6px !important}.tox-menu .tox-collection__item-label{line-height:normal !important}.page-content.mce-content-body .task-list-item{margin-left:0;position:relative}.page-content.mce-content-body .task-list-item>input[type=checkbox]{display:none}.page-content.mce-content-body .task-list-item:before{content:"";display:inline-block;border:2px solid #ccc;width:12px;height:12px;border-radius:2px;margin-right:8px;vertical-align:text-top;cursor:pointer;position:absolute;left:-24px;top:4px}.page-content.mce-content-body .task-list-item[checked]:before{background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-position:50% 50%;background-size:100% 100%}.cm-editor{font-size:12px;border:1px solid #ddd;line-height:1.4;margin-bottom:24px}.page-content .cm-editor,.CodeMirrorContainer .cm-editor{border-radius:4px}.cm-editor .cm-line,.cm-editor .cm-gutter{font-family:var(--font-code)}.dark-mode .cm-editor{border-color:#444}.cm-copy-button{position:absolute;display:flex;align-items:center;justify-content:center;top:-1px;right:-1px;background-color:#eee;border:1px solid #ddd;border-radius:0 4px 0 0;background-color:#eee;border-color:#ddd;color:#444;line-height:0;cursor:pointer;z-index:5;user-select:none;opacity:0;pointer-events:none;width:32px;height:32px;transition:background-color linear 60ms,color linear 60ms}html.dark-mode .cm-copy-button{background-color:#333}html.dark-mode .cm-copy-button{border-color:#444}html.dark-mode .cm-copy-button{color:#888}.cm-copy-button svg{fill:currentColor}.cm-copy-button.success{background:var(--color-positive);color:#fff}.cm-copy-button:focus{outline:0 !important}.cm-editor:hover .cm-copy-button{user-select:all;opacity:.6;pointer-events:all}.notification{position:fixed;top:0;right:0;margin:32px;padding:16px 24px;background-color:#fff;background-color:#fff;border-radius:4px;border-inline-start:6px solid currentColor;box-shadow:0 1px 6px 1px rgba(22,22,22,.2);z-index:999999;cursor:pointer;max-width:360px;transition:transform ease-in-out 280ms;transform:translateX(580px);display:grid;grid-template-columns:42px 1fr 12px;color:#444;font-weight:700}html.dark-mode .notification{background-color:#444}.notification span,.notification svg{vertical-align:middle;justify-self:center;align-self:center}.notification svg{width:2.8rem;height:2.8rem;padding-inline-end:12px;fill:currentColor}.notification .dismiss{margin-top:-8px}.notification .dismiss svg{height:1rem;color:#444}html.dark-mode .notification .dismiss svg{color:#888}.notification span{vertical-align:middle;line-height:1.3}html.dark-mode .notification span{color:#bbb}.notification.pos{color:var(--color-positive)}.notification.neg{color:var(--color-negative)}.notification.warning{color:var(--color-warning)}.notification.showing{transform:translateX(0)}.notification.showing:hover{transform:translate3d(0, -2px, 0)}.chapter-contents-toggle{cursor:pointer;margin:0;transition:all ease-in-out 180ms;user-select:none}.chapter-contents-toggle svg[data-icon=caret-right]{margin-inline-end:0;font-size:1rem;transition:all ease-in-out 180ms;transform:rotate(0deg);transform-origin:50% 50%}.chapter-contents-toggle.open svg[data-icon=caret-right]{transform:rotate(90deg)}.chapter-contents-toggle svg[data-icon=caret-right]+*{margin-inline-start:3px}[overlay],.popup-background{background-color:rgba(0,0,0,.333);position:fixed;z-index:95536;width:100%;height:100%;min-width:100%;min-height:100%;top:0;left:0;right:0;bottom:0;align-items:center;justify-content:center;display:none}html.dark-mode [overlay],html.dark-mode .popup-background{background-color:rgba(0,0,0,.6)}.popup-body-wrap{display:flex}.popup-body{background-color:#fff;max-height:90%;max-width:1200px;width:90%;height:auto;margin:2% auto;border-radius:4px;box-shadow:0 0 15px 0 rgba(0,0,0,.3);overflow:hidden;z-index:999;display:flex;flex-direction:column;position:relative}html.dark-mode .popup-body{background-color:#333}.popup-body.small{margin:2% auto;width:800px;max-width:90%}.popup-body.very-small{margin:2% auto;width:600px;max-width:90%}.popup-body:before{display:flex;align-self:flex-start}.popup-body .popup-content{overflow-y:auto}.popup-body:focus{outline:0}.popup-header button,.popup-footer button{margin:0;border-radius:0;box-shadow:none;color:#fff;padding:6px 16px;cursor:pointer}.popup-header button:not(.popup-header-close){font-size:.8rem}.popup-header button:hover{background-color:rgba(255,255,255,.1)}.popup-footer{justify-content:end;background-color:var(--color-primary-light);min-height:41px}.popup-footer button{padding:10px 16px}.popup-header-close{border:0;color:#fff;font-size:16px;cursor:pointer}.popup-header-close svg{margin-right:0}.popup-header,.popup-footer{display:flex;position:relative;height:40px;flex:0}.popup-header .popup-title,.popup-footer .popup-title{color:#fff;margin-right:auto;padding:8px 16px}.popup-header.flex-container-row,.popup-footer.flex-container-row{display:flex !important}body.flexbox-support #entity-selector-wrap .popup-body .form-group{height:444px;min-height:444px}#entity-selector-wrap .popup-body .form-group{margin:0}.popup-body .entity-selector-container{flex:1}.dropzone-overlay{position:absolute;display:flex;justify-content:center;align-items:center;font-size:1.333rem;width:98%;height:98%;left:1%;top:1%;border-radius:4px;border:1px dashed var(--color-primary);font-style:italic;box-sizing:content-box;background-clip:padding-box;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath fill='%23a9a9a9' fill-opacity='0.52' d='M1 3h1v1H1V3zm2-2h1v1H3V1z'%3E%3C/path%3E%3C/svg%3E");background-color:var(--color-primary);color:#fff;opacity:.8;z-index:9;pointer-events:none;animation:dzAnimIn 240ms ease-in-out}.dropzone-landing-area{background-color:var(--color-primary-light);padding:16px 24px;width:100%;border:1px dashed var(--color-primary);color:var(--color-primary);border-radius:4px}@keyframes dzAnimIn{0%{opacity:0;transform:scale(0.7)}60%{transform:scale(1.1)}100%{transform:scale(1);opacity:.8}}@keyframes dzFileItemIn{0%{opacity:.5;transform:translateY(28px)}100%{opacity:1;transform:translateY(0)}}@keyframes dzFileItemOut{0%{opacity:1;transform:translateY(0)}100%{opacity:.5;transform:translateY(28px)}}.dropzone-file-item{width:260px;height:80px;position:relative;display:flex;margin:1rem;flex-direction:row;background:#fff;box-shadow:0 1px 6px 1px rgba(22,22,22,.2);border-radius:4px;overflow:hidden;padding-bottom:3px;animation:dzFileItemIn ease-in-out 240ms;transition:transform ease-in-out 120ms,box-shadow ease-in-out 120ms;cursor:pointer}html.dark-mode .dropzone-file-item{background:#444}.dropzone-file-item:hover{transform:translateY(-3px);box-shadow:0 3px 8px 1px rgba(22,22,22,.2)}.dropzone-file-item.dismiss{animation:dzFileItemOut ease-in-out 240ms}.dropzone-file-item .loading-container{text-align:start !important;margin:0}.dropzone-file-item-image-wrap{width:80px;position:relative;background-color:var(--color-primary-light)}.dropzone-file-item-image-wrap img{object-fit:cover;width:100%;height:100%;opacity:.8}.dropzone-file-item-text-wrap{flex:1;display:block;padding:1rem;overflow:auto}.dropzone-file-item-progress{position:absolute;bottom:0;left:0;font-size:0;height:3px;background-color:var(--color-primary);transition:width ease-in-out 240ms}.dropzone-file-item-label,.dropzone-file-item-status{align-items:center;font-size:.8rem;font-weight:700}.dropzone-file-item-status[data-status]{display:flex;font-size:.6rem;font-weight:500;line-height:1.2}.dropzone-file-item-status[data-status=success]{color:var(--color-positive)}.dropzone-file-item-status[data-status=error]{color:var(--color-negative)}.dropzone-file-item-status[data-status]+.dropzone-file-item-label{display:none}.image-manager-body{min-height:70vh}.image-manager-filter-bar{position:sticky;top:0;z-index:5;background-color:rgba(255,255,255,.85)}html.dark-mode .image-manager-filter-bar{background-color:rgba(80,80,80,.85)}.image-manager-filter-bar-bg{position:absolute;left:0;top:0;width:100%;height:100%;opacity:.15;z-index:-1}.image-manager-filters{box-shadow:0 1px 3px 1px rgba(76,76,76,.26);border-radius:4px;overflow:hidden;border-bottom:0 !important}html.dark-mode .image-manager-filters{border:1px solid #000 !important}.image-manager-filters button{line-height:0;background-color:#fff}html.dark-mode .image-manager-filters button{background-color:#333}.image-manager-filters svg{margin:0}.image-manager-list{padding:3px;display:grid;grid-template-columns:repeat(auto-fill, minmax(max(140px, 17%), 1fr));gap:3px;z-index:3}.image-manager-list>div{aspect-ratio:1}.image-manager-list .image{display:block;position:relative;border-radius:0;margin:0;width:100%;text-align:start;padding:0;cursor:pointer;aspect-ratio:1;border-color:#ddd;transition:all linear 80ms;overflow:hidden}html.dark-mode .image-manager-list .image{border-color:#000}.image-manager-list .image.selected{background-color:var(--color-primary-light);outline:currentColor 3px solid;border-radius:3px;transform:scale3d(0.95, 0.95, 0.95)}.image-manager-list .image img{width:100%;max-width:100%;display:block;object-fit:cover;height:auto}.image-manager-list .image .image-meta{opacity:0;position:absolute;width:100%;bottom:0;left:0;color:#eee;background-color:rgba(0,0,0,.7);font-size:10px;padding:3px 4px;pointer-events:none;transition:opacity ease-in-out 80ms}.image-manager-list .image .image-meta span{display:block}.image-manager-list .image.selected .image-meta,.image-manager-list .image:hover .image-meta,.image-manager-list .image:focus .image-meta{opacity:1}@media screen and (max-width: 880px){.image-manager-list .image .image-meta{display:none}}.image-manager .load-more{text-align:center;padding:12px 16px;clear:both}.image-manager .load-more .loading-container{margin:0}.image-manager .loading-container{text-align:center}.image-manager-list .image-manager-list-warning{grid-column:1/-1;aspect-ratio:auto}.image-manager-warning{background:#fff;color:var(--color-warning);font-weight:bold;border-inline:3px solid var(--color-warning)}html.dark-mode .image-manager-warning{background:#333}.image-manager-sidebar{width:300px;margin:0 auto;overflow-y:auto;overflow-x:hidden;border-inline-start:1px solid #ddd;border-color:#ddd}html.dark-mode .image-manager-sidebar{border-color:#000}.image-manager-sidebar .inner{min-height:auto;padding:16px}.image-manager-sidebar .image-manager-viewer img{max-width:100%;max-height:180px;display:block;margin:0 auto 16px auto;box-shadow:0 1px 21px 1px rgba(76,76,76,.3)}.image-manager-sidebar .image-manager-viewer{height:196px;display:flex;align-items:center;justify-content:center}.image-manager-sidebar .image-manager-viewer a{display:inline-block}@media screen and (max-width: 880px){.image-manager-sidebar{border-inline-start:0}}.image-manager-content{display:flex;flex-direction:column;flex:1;overflow-y:scroll}.image-manager-content .container{width:100%}.image-manager-content .full-tab{text-align:center}.tab-container.bordered [role=tablist] button[role=tab]{border-inline-end:1px solid #ddd;border-inline-end-color:#ddd}html.dark-mode .tab-container.bordered [role=tablist] button[role=tab]{border-inline-end-color:#000}.tab-container.bordered [role=tablist] button[role=tab]:last-child{border-inline-end:none}.tab-container [role=tablist]{display:flex;align-items:end;justify-items:start;text-align:start;border-bottom:1px solid #ddd;border-color:#ddd;margin-bottom:16px}html.dark-mode .tab-container [role=tablist]{border-color:#444}.tab-container [role=tablist] button[role=tab]{display:inline-block;padding:12px;color:rgba(0,0,0,.5);cursor:pointer;border-bottom:2px solid rgba(0,0,0,0);margin-bottom:-1px}html.dark-mode .tab-container [role=tablist] button[role=tab]{color:rgba(255,255,255,.5)}.tab-container [role=tablist] button[role=tab][aria-selected=true]{color:var(--color-link) !important;border-bottom-color:var(--color-link) !important;outline:0 !important}.tab-container [role=tablist] button[role=tab]:hover,.tab-container [role=tablist] button[role=tab]:focus{color:rgba(0,0,0,.8);border-bottom-color:rgba(0,0,0,.2)}html.dark-mode .tab-container [role=tablist] button[role=tab]:hover,html.dark-mode .tab-container [role=tablist] button[role=tab]:focus{color:rgba(255,255,255,.8)}html.dark-mode .tab-container [role=tablist] button[role=tab]:hover,html.dark-mode .tab-container [role=tablist] button[role=tab]:focus{border-bottom-color:rgba(255,255,255,.2)}.tab-container [role=tablist] button[role=tab]:focus{outline:1px dotted var(--color-primary);outline-offset:-2px}.tab-container [role=tablist].controls-card{margin-bottom:0;border-bottom:0;padding:0 6px}.image-picker .none{display:none}.code-editor .CodeMirror{height:auto;min-height:50vh;border-bottom:0}.code-editor .lang-options{overflow-y:scroll;flex-basis:200px;flex-grow:1}.code-editor .lang-options button{display:block;padding:6px 16px;border-bottom:1px solid;color:#333;border-bottom-color:#eee;cursor:pointer;width:100%;text-align:left;font-family:var(--font-code);font-size:.7rem;padding-left:30px}html.dark-mode .code-editor .lang-options button{color:#aaa}html.dark-mode .code-editor .lang-options button{border-bottom-color:#000}.code-editor .lang-options button:hover,.code-editor .lang-options button.active{background-color:var(--color-primary-light);color:var(--color-primary)}.code-editor button.lang-option-favorite-toggle{position:absolute;top:0;left:0;width:28px;font-size:1rem;border:0;line-height:1;padding:2px;z-index:2;height:100%;text-align:center;color:var(--color-primary)}.code-editor button.lang-option-favorite-toggle svg{margin:0}.code-editor button[data-favourite=true]~.action-favourite,.code-editor button[data-favourite=false]~.action-unfavourite{display:none}.code-editor .action-favourite{opacity:.5}.code-editor button:hover~.action-favourite{opacity:1}.code-editor label{background-color:var(--color-primary-light);width:100%;color:var(--color-primary);padding:3px 12px;margin-bottom:0}.code-editor-language-list{position:relative;width:160px;z-index:2;align-items:stretch}.code-editor-language-list input{border-radius:0;border:0;border-bottom:1px solid #ddd;padding:6px 12px;height:auto}.code-editor-main{flex:1;min-width:0}.code-editor-main .cm-editor{margin-bottom:0;z-index:1;max-width:100%;width:100%}.code-editor-body-wrap{height:80vh}@media screen and (max-width: 600px){.code-editor .lang-options{display:none}.code-editor-body-wrap{flex-direction:column}.code-editor-language-list,.code-editor-language-list input{width:100%}}.comments-container{padding-inline:32px}@media screen and (max-width: 880px){.comments-container{padding-inline:6px}}.comment-box{border-radius:4px;border:1px solid #ddd;border-color:#ddd;background-color:#fff}html.dark-mode .comment-box{border-color:#000}html.dark-mode .comment-box{background-color:#222}.comment-box .content{font-size:.666em;padding:6px 12px}.comment-box .content p,.comment-box .content ul,.comment-box .content ol{font-size:14px;margin:.5em 0}.comment-box .actions{opacity:0;transition:opacity ease-in-out 120ms}.comment-box:hover .actions,.comment-box:focus-within .actions{opacity:1}.comment-box .actions button:focus{outline:1px dotted var(--color-primary)}@media screen and (max-width: 880px){.comment-box .actions{opacity:1}}.comment-box .header{border-bottom:1px solid #ddd;padding:6px 12px;border-color:#ddd}html.dark-mode .comment-box .header{border-color:#000}.comment-box .header a{color:inherit}.comment-box .header .text-muted{color:#999}.comment-box .header .meta a,.comment-box .header .meta span{white-space:nowrap}.comment-box .header .right-meta .text-muted{opacity:.8}.comment-thread-indicator{border-inline-start:3px dotted #ddd;border-color:#ddd;margin-inline-start:6px;width:24px;height:calc(100% - 16px)}html.dark-mode .comment-thread-indicator{border-color:#444}.comment-branch .comment-branch .comment-branch .comment-branch .comment-thread-indicator{display:none}.comment-reply{display:none;margin:0 !important;margin-bottom:-3px !important}.comment-branch .comment-branch .comment-branch .comment-branch .comment-reply{display:block}.comment-container-compact .comment-box .meta{font-size:.8rem}.comment-container-compact .comment-box .header{padding:6px}.comment-container-compact .comment-box .right-meta{display:none}.comment-container-compact .comment-box .content{padding:6px 12px}.comment-container-compact .comment-thread-indicator{width:16px}#tag-manager .drag-card{max-width:500px}.template-item{cursor:pointer;position:relative}.template-item:hover,.template-item .template-item-actions button:hover{background-color:#f2f2f2}.template-item .template-item-actions{position:absolute;top:0;inset-inline-end:0;width:50px;height:100%;display:flex;flex-direction:column;border-inline-start:1px solid;border-color:#ddd}html.dark-mode .template-item .template-item-actions{border-color:#000}.template-item .template-item-actions button{cursor:pointer;flex:1;background-color:#fff;border:0;border-top:1px solid;border-color:#ddd}html.dark-mode .template-item .template-item-actions button{background-color:#222}html.dark-mode .template-item .template-item-actions button{border-color:#000}.template-item .template-item-actions button svg{margin:0}.template-item .template-item-actions button:first-child{border-top:0}.dropdown-search{position:relative}.dropdown-search-toggle-breadcrumb{border:1px solid rgba(0,0,0,0);border-radius:4px;line-height:normal;padding:6px}.dropdown-search-toggle-breadcrumb:hover{border-color:#ddd}.dropdown-search-toggle-breadcrumb .svg-icon{margin-inline-end:0}.dropdown-search-toggle-select{display:flex;gap:12px;line-height:normal}.dropdown-search-toggle-select .svg-icon{height:26px;width:26px;margin:0}.dropdown-search-toggle-select .avatar{height:22px;width:22px}.dropdown-search-toggle-select .avatar+span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dropdown-search-toggle-select .dropdown-search-toggle-caret{font-size:1.15rem}.dropdown-search-toggle-select-label{min-width:0;white-space:nowrap}.dropdown-search-toggle-select-caret{line-height:0;margin-left:auto;margin-top:-2px;display:flex;align-items:center}.dropdown-search-dropdown{box-shadow:0 1px 3px 1px rgba(76,76,76,.26);overflow:hidden;min-height:100px;width:240px;display:none;position:absolute;z-index:80;right:0;top:0;margin-top:16px}html[dir=rtl] .dropdown-search-dropdown{right:auto;left:-16px}.dropdown-search-dropdown .dropdown-search-search .svg-icon{position:absolute;left:12px;top:11px;fill:#888;pointer-events:none}html[dir=rtl] .dropdown-search-dropdown .dropdown-search-search .svg-icon{right:12px;left:auto}.dropdown-search-dropdown .dropdown-search-list{max-height:400px;overflow-y:scroll;text-align:start}.dropdown-search-dropdown .dropdown-search-item{padding:12px 16px}.dropdown-search-dropdown .dropdown-search-item:hover,.dropdown-search-dropdown .dropdown-search-item:focus{background-color:#f2f2f2;text-decoration:none}.dropdown-search-dropdown input,.dropdown-search-dropdown input:focus{padding-inline-start:32px;border-radius:0;border:0;border-bottom:1px solid #ddd}.dropdown-search-dropdown input:focus{outline:0}@media screen and (max-width: 880px){.dropdown-search-dropdown{position:fixed;right:auto;left:16px}.dropdown-search-dropdown .dropdown-search-list{max-height:240px}}.item-list{box-shadow:0 1px 3px 0 rgba(0,0,0,.1)}.item-list-row{border:1.5px solid;border-color:#e2e2e2;border-bottom-width:0}html.dark-mode .item-list-row{border-color:#444}.item-list-row label{padding-bottom:0}.item-list-row:hover{background-color:#f6f6f6}html.dark-mode .item-list-row:hover{background-color:#333}.item-list-row:first-child{border-radius:4px 4px 0 0}.item-list-row:last-child{border-radius:0 0 4px 4px;border-bottom-width:1.5px}.item-list-row:first-child:last-child{border-radius:4px}.item-list-row-toggle-all{visibility:hidden}.item-list-row:hover .item-list-row-toggle-all{visibility:visible}.status-indicator-active,.status-indicator-inactive{width:8px;height:8px;border-radius:50%;display:inline-block}.status-indicator-active{background-color:var(--color-positive)}.status-indicator-inactive{background-color:var(--color-negative)}.shortcut-container{background-color:rgba(0,0,0,.25);pointer-events:none;position:fixed;left:0;top:0;width:100%;height:100%;z-index:99}.shortcut-linkage{position:fixed;box-shadow:0 0 4px 0 #fff;border-radius:3px}.shortcut-hint{position:fixed;padding:3px 3px;font-size:.85rem;font-weight:700;line-height:1;background-color:#eee;border-radius:3px;border:1px solid #b4b4b4;box-shadow:0 1px 1px rgba(0,0,0,.2),0 2px 0 0 rgba(255,255,255,.7) inset;color:#333}.back-to-top{background-color:var(--color-primary);position:fixed;bottom:16px;right:24px;padding:5px 7px;cursor:pointer;color:#fff;fill:#fff;width:40px;height:40px;border-radius:40px;transition:all ease-in-out 180ms;opacity:0;z-index:999;overflow:hidden}.back-to-top svg{width:26.6666666667px;height:26.6666666667px;margin-inline-end:4px}.back-to-top:hover{width:136px;opacity:1 !important}.back-to-top .inner{width:136px}.back-to-top span{position:relative;vertical-align:top;line-height:2}.scroll-box{list-style:none;padding:0;margin:0;max-height:280px;overflow-y:scroll;border:1px solid;border-color:#ddd;border-radius:3px;min-height:20px;background-color:#eee}html.dark-mode .scroll-box{border-color:#000}html.dark-mode .scroll-box{background-color:#000}.scroll-box-item{border-bottom:1px solid;border-top:1px solid;border-color:#ddd;margin-top:-1px;background-color:#fff;display:flex;align-items:flex-start;padding:1px}html.dark-mode .scroll-box-item{border-color:#000}html.dark-mode .scroll-box-item{background-color:#222}.scroll-box-item:last-child{border-bottom:0}.scroll-box-item:hover{cursor:pointer;background-color:#f8f8f8}html.dark-mode .scroll-box-item:hover{background-color:#333}.scroll-box-item .handle{color:#aaa;cursor:grab}.scroll-box-item button{opacity:.6}.scroll-box-item .handle svg{margin:0}.scroll-box-item>*{padding:6px 16px}.scroll-box-item .handle+*{padding-left:0}.scroll-box-item:hover .handle{color:#444}html.dark-mode .scroll-box-item:hover .handle{color:#fff}.scroll-box-item:hover button{opacity:1}.scroll-box-item a:hover{text-decoration:none}input.scroll-box-search,.scroll-box-header-item{font-size:.8rem;border:1px solid;border-color:#ddd;background-color:#fff;margin-bottom:-1px;border-radius:3px 3px 0 0;width:100%;max-width:100%;height:auto;line-height:1.4;color:#666}html.dark-mode input.scroll-box-search,html.dark-mode .scroll-box-header-item{border-color:#000}html.dark-mode input.scroll-box-search,html.dark-mode .scroll-box-header-item{background-color:#222}.scroll-box-search+.scroll-box,.scroll-box-header-item+.scroll-box{border-radius:0 0 3px 3px}.scroll-box[refs="shelf-sort@shelf-book-list"] [data-action=add]{display:none}.scroll-box[refs="shelf-sort@all-book-list"] [data-action=remove],.scroll-box[refs="shelf-sort@all-book-list"] [data-action=move_up],.scroll-box[refs="shelf-sort@all-book-list"] [data-action=move_down]{display:none}header.grid{grid-template-columns:minmax(max-content, 2fr) 1fr minmax(max-content, 2fr)}@media screen and (max-width: 1000px){header.grid{grid-template-columns:1fr;grid-row-gap:0}}header{position:relative;display:block;z-index:11;top:0;color:#fafafa;border-bottom:1px solid #ddd;box-shadow:0 1px 6px -1px rgba(0,0,0,.1);border-bottom-color:#ddd}html.dark-mode header{border-bottom-color:#000}header .header-links{display:flex;align-items:center;justify-content:end}header .links{display:inline-block;vertical-align:top}header .links a{display:inline-block;padding:10px 16px;color:#fff;border-radius:3px}header .links a:hover{text-decoration:none;background-color:rgba(255,255,255,.15)}header .dropdown-container{padding-inline-start:16px;padding-inline-end:0}header .avatar,header .user-name{display:inline-block}header .avatar{width:30px;height:30px}header .user-name{vertical-align:top;position:relative;display:inline-flex;align-items:center;cursor:pointer;padding:12px;margin:0 -12px;border-radius:3px;gap:6px}header .user-name>span{padding-inline-start:6px;display:inline-block;line-height:1}header .user-name>svg{font-size:18px;margin-top:-2px;margin-inline-end:0}header .user-name:hover{background-color:rgba(255,255,255,.15)}@media screen and (min-width: 1000px)and (max-width: 1100px){header .user-name{padding-inline-start:6px}header .user-name .name{display:none}}.header *,.primary-background *{outline-color:#fff}header .search-box{display:inline-block}header .search-box input{background-color:rgba(0,0,0,.2);border:1px solid rgba(255,255,255,.2);border-radius:40px;color:#eee;z-index:2;height:auto;padding:9px;padding-inline-start:40px}header .search-box input:focus{outline:none;border:1px solid rgba(255,255,255,.4)}header .search-box input::placeholder{color:#fff;opacity:.6}@media screen and (min-width: 1000px)and (max-width: 1100px){header .search-box{max-width:200px}}header .search-box:focus-within #header-search-box-button{opacity:1}#header-search-box-button{z-index:1;inset-inline-start:16px;top:10px;color:#fff;opacity:.6;color:rgba(255,255,255,.8)}html.dark-mode #header-search-box-button{color:#aaa}#header-search-box-button svg{margin-inline-end:0}.global-search-suggestions{display:none;position:absolute;top:-12px;left:0;right:0;z-index:-1;margin-left:-48px;margin-right:-48px;padding-top:56px;border-radius:3px;box-shadow:0 2px 2px 1px rgba(0,0,0,.13);transform-origin:top center;opacity:.5;transform:scale(0.9)}.global-search-suggestions .entity-item-snippet p{display:none}.global-search-suggestions .entity-item-snippet{font-size:.8rem}.global-search-suggestions .entity-list-item-name{font-size:.9rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.global-search-suggestions .global-search-loading{position:absolute;width:100%}header .search-box.search-active:focus-within .global-search-suggestions{display:block}header .search-box.search-active:focus-within input{background-color:#eee;border-color:#ddd}html.dark-mode header .search-box.search-active:focus-within input{background-color:#333}html.dark-mode header .search-box.search-active:focus-within input{border-color:#111}header .search-box.search-active:focus-within #header-search-box-button,header .search-box.search-active:focus-within input{color:#444}html.dark-mode header .search-box.search-active:focus-within #header-search-box-button,html.dark-mode header .search-box.search-active:focus-within input{color:#aaa}.logo{display:inline-flex;padding:6px 12px;margin:6px -12px;gap:12px;align-items:center;border-radius:4px}.logo:hover{color:#fff;text-decoration:none;background-color:rgba(255,255,255,.15)}.logo-text{font-size:1.8em;color:#fff;font-weight:400;line-height:1}.logo-image{height:43px}.mobile-menu-toggle{color:#fff;fill:#fff;font-size:2em;border:2px solid rgba(255,255,255,.8);border-radius:4px;padding:0 6px;position:absolute;right:16px;top:13px;line-height:1;cursor:pointer;user-select:none}.mobile-menu-toggle svg{margin:0;bottom:-2px}html[dir=rtl] .mobile-menu-toggle{left:16px;right:auto}@media screen and (max-width: 1000px){header .header-links{background-color:#fff;display:none;z-index:10;right:16px;border-radius:4px;overflow:hidden;position:absolute;box-shadow:0 2px 2px 1px rgba(0,0,0,.13);margin-top:16px;padding:6px 0}html.dark-mode header .header-links{background-color:#333}header .header-links.show{display:block}header .links a,header .dropdown-container ul li a,header .dropdown-container ul li button{text-align:start;display:grid;align-items:center;padding:8px 16px;gap:16px;color:#444;grid-template-columns:16px auto;line-height:1.4;color:#444}html.dark-mode header .links a,html.dark-mode header .dropdown-container ul li a,html.dark-mode header .dropdown-container ul li button{color:#eee}header .links a svg,header .dropdown-container ul li a svg,header .dropdown-container ul li button svg{margin-inline-end:12px;width:16px}header .links a:hover,header .dropdown-container ul li a:hover,header .dropdown-container ul li button:hover{background-color:var(--color-primary-light);color:var(--color-primary);text-decoration:none}header .links a:focus,header .dropdown-container ul li a:focus,header .dropdown-container ul li button:focus{background-color:#eee;outline-color:var(--color-primary);color:var(--color-primary)}html.dark-mode header .links a:focus,html.dark-mode header .dropdown-container ul li a:focus,html.dark-mode header .dropdown-container ul li button:focus{background-color:#333}header .dropdown-container{display:block;padding-inline-start:0}header .links{display:block}header .dropdown-container ul{display:block !important;position:relative;background-color:rgba(0,0,0,0);border:0;padding:0;margin:0;box-shadow:none}}.tri-layout-mobile-tabs{position:sticky;top:0;z-index:5;background-color:#fff;border-bottom:1px solid #ddd;border-bottom-color:#ddd;box-shadow:0 1px 6px -1px rgba(0,0,0,.1)}html.dark-mode .tri-layout-mobile-tabs{border-bottom-color:#333}.tri-layout-mobile-tab{text-align:center;border-bottom:3px solid #bbb;cursor:pointer;margin:0;background-color:#fff;border-bottom-color:#bbb}html.dark-mode .tri-layout-mobile-tab{background-color:#222}html.dark-mode .tri-layout-mobile-tab{border-bottom-color:#333}.tri-layout-mobile-tab:first-child{border-inline-end:1px solid #ddd;border-inline-end-color:#ddd}html.dark-mode .tri-layout-mobile-tab:first-child{border-inline-end-color:#000}.tri-layout-mobile-tab[aria-selected=true]{border-bottom-color:currentColor !important}.breadcrumbs{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;flex-wrap:wrap;opacity:.7}.breadcrumbs .icon-list-item{width:auto;padding-top:6px;padding-bottom:6px}.breadcrumbs .separator{display:inline-block;fill:#aaa;font-size:1.6em;line-height:.8;margin:-2px 0 0}.breadcrumbs:hover,.breadcrumbs:focus-within{opacity:1}@media(prefers-contrast: more){.breadcrumbs{opacity:1}}@media screen and (max-width: 1000px){.breadcrumbs .icon-list-item{padding:6px}.breadcrumbs .icon-list-item>span+span{display:none}.breadcrumbs .icon-list-item>span:first-child{margin-inline-end:0}}.faded a,.faded button,.faded span,.faded span>div{color:#666;fill:#666}.faded .text-button{opacity:.5;transition:all ease-in-out 120ms}.faded .text-button:hover{opacity:1;text-decoration:none}.faded span.faded-text{display:inline-block;padding:12px}footer{flex-shrink:0;padding:1rem 1rem 2rem 1rem;text-align:center}footer a{margin:0 .5em}body.flexbox footer{display:none}.book-contents .entity-list-item .icon{width:4px;border-radius:1px;justify-self:stretch;align-self:stretch;height:auto;margin-inline-end:6px}.book-contents .entity-list-item .icon:after{opacity:.5}.book-contents .entity-list-item .icon svg{display:none}.book-contents .entity-list-item p{margin-bottom:0}.book-contents .entity-list-item .inner-page{padding-top:0;padding-bottom:0}.entity-list-item+.chapter-expansion{display:flex;padding:0 16px 16px 16px;align-items:center;border:0;width:100%;position:relative}.entity-list-item+.chapter-expansion>.icon{width:4px;height:auto;border-radius:0 0 1px 1px;align-self:stretch;flex-shrink:0}.entity-list-item+.chapter-expansion>.icon:before{position:absolute;top:0;left:0;width:100%;height:1px;background-color:currentColor;content:"";opacity:.5}.entity-list-item+.chapter-expansion>.icon:after{opacity:.5}.entity-list-item+.chapter-expansion .icon svg{display:none}.entity-list-item+.chapter-expansion>.content{flex:1}.entity-list-item+.chapter-expansion .chapter-contents-toggle{border-radius:0 4px 4px 0;padding:6px 19px;width:100%;text-align:start}.entity-list-item+.chapter-expansion .chapter-contents-toggle:hover{background-color:rgba(0,0,0,.06)}.entity-list-item.has-children{padding-bottom:0}.entity-list-item.has-children>.icon{border-radius:4px 4px 0 0}.inset-list{display:none}.inset-list .entity-list-item-name{font-size:1rem}.inset-list .entity-list-item-children{padding-top:0;padding-bottom:0}.sidebar-page-nav{list-style:none;margin-block-start:12px;margin-block-end:16px;margin-inline-start:6px;margin-inline-end:0;position:relative}.sidebar-page-nav:after{content:"";display:block;position:absolute;left:0;background-color:rgba(0,0,0,.2);width:2px;top:5px;bottom:5px;z-index:0}html[dir=rtl] .sidebar-page-nav:after{left:auto;right:0}html.dark-mode .sidebar-page-nav:after{background-color:rgba(255,255,255,.2)}.sidebar-page-nav li{margin-bottom:4px;font-size:.95em;position:relative}.sidebar-page-nav .h1{padding-inline-start:16px}.sidebar-page-nav .h2{padding-inline-start:24px}.sidebar-page-nav .h3{padding-inline-start:32px}.sidebar-page-nav .h4{padding-inline-start:40px}.sidebar-page-nav .h5{padding-inline-start:48px}.sidebar-page-nav .h6{padding-inline-start:56px}.sidebar-page-nav .current-heading{font-weight:bold}.sidebar-page-nav li:not(.current-heading) .sidebar-page-nav-bullet{background-color:#bbb !important}html.dark-mode .sidebar-page-nav li:not(.current-heading) .sidebar-page-nav-bullet{background-color:#666 !important}.sidebar-page-nav .sidebar-page-nav-bullet{width:6px;height:6px;position:absolute;left:-2px;top:30%;border-radius:50%;box-shadow:0 0 0 6px #f2f2f2;box-shadow:0 0 0 6px #f2f2f2;z-index:1}html.dark-mode .sidebar-page-nav .sidebar-page-nav-bullet{box-shadow:0 0 0 6px #111}html[dir=rtl] .sidebar-page-nav .sidebar-page-nav-bullet{left:auto;right:-2px}.book-tree .sidebar-page-list{list-style:none;margin-block-start:6px;margin-block-end:0;margin-inline-start:-12px;margin-inline-end:-12px;padding-inline-start:0;padding-inline-end:0}.book-tree .sidebar-page-list ul{list-style:none;padding-inline-start:1rem;padding-inline-end:0}.book-tree .sidebar-page-list .entity-list-item{padding-top:2px;padding-bottom:2px;background-clip:content-box;border-radius:0 3px 3px 0;padding-inline-end:0}.book-tree .sidebar-page-list .entity-list-item .content{width:100%;padding-top:6px;padding-bottom:6px;max-width:calc(100% - 20px)}.book-tree .sidebar-page-list .entity-list-item.selected{background-color:rgba(0,0,0,.06)}html.dark-mode .book-tree .sidebar-page-list .entity-list-item.selected{background-color:rgba(255,255,255,.06)}.book-tree .sidebar-page-list .entity-list-item.no-hover{margin-top:-6px;padding-inline-end:0}.book-tree .sidebar-page-list .entity-list-item-name{font-size:1em;margin:0;margin-inline-end:16px}.book-tree .sidebar-page-list .chapter-child-menu{font-size:.8rem;margin-top:-0.2rem;margin-inline-start:-1rem}.book-tree .sidebar-page-list .chapter-contents-toggle{display:block;width:100%;text-align:start;padding:3px 12px 6px 12px;border-radius:0 3px 3px 0;line-height:1;margin-top:-3px;margin-bottom:-3px}.book-tree .sidebar-page-list .chapter-contents-toggle:hover{background-color:rgba(0,0,0,.06)}html.dark-mode .book-tree .sidebar-page-list .chapter-contents-toggle:hover{background-color:rgba(255,255,255,.06)}.book-tree .sidebar-page-list .entity-list-item .icon{z-index:2;width:4px;height:auto;align-self:stretch;flex-shrink:0;border-radius:1px;opacity:.8}.book-tree .sidebar-page-list .entity-list-item .icon:after{opacity:1}.book-tree .sidebar-page-list .entity-list-item .icon svg{display:none}.chapter-child-menu ul.sub-menu{display:none;padding-inline-start:0;position:relative;margin-bottom:0}.sortable-page-list,.sortable-page-sublist{list-style:none}.sort-box{margin-bottom:16px;padding:16px 32px;position:relative}.sort-box::before{pointer-events:none;content:"";border-radius:4px;opacity:.5;border:2px solid var(--color-book);display:block;top:0;bottom:0;left:0;right:0;position:absolute}.sort-box-options{display:flex;flex-wrap:wrap;justify-content:space-between}.sort-box-options .button{margin-inline-start:0}.sortable-page-list{margin-inline-start:0;padding:0}.sortable-page-list .entity-list-item>span:first-child{align-self:flex-start}.sortable-page-list .sortable-selected,.sortable-page-list .sortable-selected:hover{outline:1px dotted var(--color-primary);background-color:var(--color-primary-light) !important}.sortable-page-list .entity-list-item>div{display:block;flex:1}.sortable-page-list>ul{margin-inline-start:0}.sortable-page-list .sortable-page-sublist{margin-bottom:16px;margin-top:0;padding-inline-start:16px}.sortable-page-list li{background-color:#fff;border:1px solid;border-color:#ddd;margin-top:-1px;min-height:38px}html.dark-mode .sortable-page-list li{background-color:#222}html.dark-mode .sortable-page-list li{border-color:#666}.sortable-page-list li.text-page,.sortable-page-list li.text-chapter{border-inline-start:2px solid currentColor}.sortable-page-list li:first-child{margin-top:6px}.sortable-page-list li.placeholder{position:relative}.sortable-page-list li.placeholder:before{position:absolute}.sort-box summary{list-style:none;font-size:.9rem;cursor:pointer}.sort-box summary::-webkit-details-marker{display:none}details.sort-box summary .caret-container svg{transition:transform ease-in-out 120ms}details.sort-box[open] summary .caret-container svg{transform:rotate(90deg)}.sort-box-actions .icon-button{opacity:.6}.sort-box .flex-container-row:hover .sort-box-actions .icon-button,.sort-box .flex-container-row:focus-within .sort-box-actions .icon-button{opacity:1}.sort-box-actions .icon-button[disabled]{visibility:hidden}.sort-box-actions .dropdown-menu button[disabled]{display:none}.sort-list-handle{cursor:grab}.activity-list-item{padding:12px 0;display:grid;grid-template-columns:min-content 1fr;grid-column-gap:16px;font-size:.9em}.card .activity-list-item{padding-block:12px}.user-list-item{display:inline-grid;padding:12px;grid-template-columns:min-content 1fr;grid-column-gap:16px;font-size:.9em;align-items:center}.user-list-item>div:first-child{line-height:0}ul.pagination{display:inline-block;list-style:none;margin:16px 0;padding-inline-start:1px}ul.pagination li{float:left}ul.pagination li:first-child a,ul.pagination li:first-child span{border-radius:3px 0 0 3px}ul.pagination li:last-child a,ul.pagination li:last-child span{border-radius:0 3px 3px 0}ul.pagination a,ul.pagination span{display:block;padding:3px 12px;border:1px solid #ccc;margin-inline-start:-1px;user-select:none;color:#555;border-color:#ccc}html.dark-mode ul.pagination a,html.dark-mode ul.pagination span{color:#eee}html.dark-mode ul.pagination a,html.dark-mode ul.pagination span{border-color:#666}ul.pagination li.disabled{cursor:not-allowed}ul.pagination li.active span{color:#111;background-color:rgba(0,0,0,.05)}html.dark-mode ul.pagination li.active span{color:#eee}html.dark-mode ul.pagination li.active span{background-color:rgba(0,0,0,.5)}.compact ul.pagination{margin:0}.entity-list,.icon-list{margin:0 -16px}.entity-list h4,.icon-list h4{margin:0}.entity-list hr,.icon-list hr{margin:0}.entity-list .text-small.text-muted,.icon-list .text-small.text-muted{color:#aaa;font-size:.75em;margin-top:6px}.entity-list .text-muted p.text-muted,.icon-list .text-muted p.text-muted{margin-top:0}.entity-list .page.draft .text-page,.icon-list .page.draft .text-page{color:var(--color-page-draft);fill:var(--color-page-draft)}.entity-list>.dropdown-container,.icon-list>.dropdown-container{display:block}.icon-list hr{margin:12px 16px;max-width:140px;opacity:.25;height:1.1px}.icon-list hr+hr,.icon-list hr:first-child,.icon-list hr:last-child{display:none}.entity-list-item,.icon-list-item{padding:12px 16px;display:flex;align-items:center;gap:16px;background-color:rgba(0,0,0,0);border:0;width:100%;position:relative;word-break:break-word}.entity-list-item h4 a,.icon-list-item h4 a{color:#666}.entity-list-item>span:first-child,.icon-list-item>span:first-child{flex-basis:1.88em;flex:none}.entity-list-item>span:last-child,.icon-list-item>span:last-child{flex:1;text-align:start}.entity-list-item>.content,.icon-list-item>.content{min-width:0}.entity-list-item:not(.no-hover),.icon-list-item:not(.no-hover){cursor:pointer}.entity-list-item:not(.no-hover):hover,.icon-list-item:not(.no-hover):hover{background-color:rgba(0,0,0,.06);text-decoration:none;border-radius:4px}html.dark-mode .entity-list-item:not(.no-hover):hover,html.dark-mode .icon-list-item:not(.no-hover):hover{background-color:rgba(255,255,255,.06)}.entity-list-item.outline-hover:hover,.icon-list-item.outline-hover:hover{background-color:rgba(0,0,0,0)}.entity-list-item:focus,.icon-list-item:focus{background-color:#eee;outline:1px dotted #666;outline-offset:-2px}html.dark-mode .entity-list-item:focus,html.dark-mode .icon-list-item:focus{background-color:#222}.entity-list-item.disabled{pointer-events:none;cursor:not-allowed;opacity:.8;user-select:none;background:var(--bg-disabled)}.entity-list-item-path-sep{display:inline-block;vertical-align:top;position:relative;top:1px}.entity-list-item-path-sep svg{margin-inline-end:0}.split-icon-list-item{display:flex;align-items:center;gap:16px;background-color:rgba(0,0,0,0);border:0;width:100%;position:relative;word-break:break-word;border-radius:4px}.split-icon-list-item>a{padding:12px 16px;display:flex;align-items:center;gap:16px;flex:1}.split-icon-list-item>a:hover{text-decoration:none}.split-icon-list-item .icon{flex-basis:1.88em;flex:none}.split-icon-list-item:hover{background-color:rgba(0,0,0,.06)}html.dark-mode .split-icon-list-item:hover{background-color:rgba(255,255,255,.06)}.icon-list-item-dropdown{margin-inline-start:auto;align-self:stretch;display:flex;align-items:stretch;border-inline-start:1px solid rgba(0,0,0,.1);visibility:hidden}.split-icon-list-item:hover .icon-list-item-dropdown,.split-icon-list-item:focus-within .icon-list-item-dropdown{visibility:visible}.icon-list-item-dropdown-toggle{padding:6px;display:flex;align-items:center;cursor:pointer;color:#888}html.dark-mode .icon-list-item-dropdown-toggle{color:#999}.icon-list-item-dropdown-toggle svg{margin:0}.icon-list-item-dropdown-toggle:hover{background-color:rgba(0,0,0,.06)}html.dark-mode .icon-list-item-dropdown-toggle:hover{background-color:rgba(255,255,255,.06)}.card .entity-list-item:not(.no-hover,.book-contents .entity-list-item):hover{background-color:#f2f2f2;border-radius:0}html.dark-mode .card .entity-list-item:not(.no-hover,.book-contents .entity-list-item):hover{background-color:#2d2d2d}.card .entity-list-item .entity-list-item:hover{background-color:#eee}.entity-list-item-children{padding:16px 24px}.entity-list-item-children>div{overflow:hidden;padding:0 0 6px 0}.entity-list-item-children .entity-chip{text-overflow:ellipsis;height:2.5em;overflow:hidden;text-align:start;display:block;white-space:nowrap}.entity-list-item-children>.entity-list>.entity-list-item:last-child{margin-bottom:-6px}.entity-list-item-image{align-self:stretch;width:140px;flex:none;background-size:cover;background-position:50% 50%;border-radius:3px;position:relative;margin-inline-end:24px}.entity-list-item-image.entity-list-item-image-wide{width:220px}.entity-list-item-image .svg-icon{color:#fff;font-size:1.66rem;margin-inline-end:0;position:absolute;bottom:6px;left:6px}html.dark-mode .entity-list-item-image .svg-icon{color:rgba(255,255,255,.6)}@media screen and (max-width: 880px){.entity-list-item-image{width:80px}}.chapter>.entity-list-item-image{width:60px}.entity-list.compact{font-size:8.4px}.entity-list.compact h4,.entity-list.compact a{line-height:1.2}.entity-list.compact .entity-item-snippet{display:none}.entity-list.compact .entity-list-item p{font-size:11.2px;padding-top:6px}.entity-list.compact .entity-list-item p:empty{padding-top:0}.entity-list.compact p{margin:0}.entity-list.compact>p.empty-text{display:block;font-size:14px}.entity-list.compact hr{margin:0}@media screen and (max-width: 880px){.entity-list.compact h4{font-size:1.666em}}.entity-item-tags{font-size:.75rem;opacity:1}.entity-item-tags .primary-background-light{background:rgba(0,0,0,0)}.entity-item-tags .tag-name{background-color:rgba(0,0,0,.05)}.dropdown-container{display:inline-block;vertical-align:top;position:relative}.dropdown-menu{display:none;position:absolute;z-index:999;top:0;list-style:none;inset-inline-end:0;margin:16px 0;background-color:#fff;box-shadow:0 1px 6px 0 rgba(0,0,0,.18);border-radius:3px;min-width:180px;padding:6px 0;color:#555;fill:currentColor;text-align:start !important;max-height:500px;overflow-y:auto}html.dark-mode .dropdown-menu{background-color:#333}html.dark-mode .dropdown-menu{color:#eee}.dropdown-menu.anchor-left{inset-inline-end:auto;inset-inline-start:0}.dropdown-menu.wide{min-width:220px}.dropdown-menu.xl-limited{width:280px;max-width:100%}.dropdown-menu .text-muted{color:#999;fill:#999}.dropdown-menu li.active a{font-weight:600}.dropdown-menu button{width:100%;text-align:start}.dropdown-menu li.border-bottom{border-bottom:1px solid #ddd}.dropdown-menu li hr{margin:6px 0}.dropdown-menu .icon-item,.dropdown-menu .text-item,.dropdown-menu .label-item{padding:8px 16px;color:#555;fill:currentColor;white-space:nowrap;line-height:1.4;cursor:pointer}html.dark-mode .dropdown-menu .icon-item,html.dark-mode .dropdown-menu .text-item,html.dark-mode .dropdown-menu .label-item{color:#eee}.dropdown-menu .icon-item.break-text,.dropdown-menu .text-item.break-text,.dropdown-menu .label-item.break-text{white-space:normal;word-wrap:break-word;overflow-wrap:break-word}.dropdown-menu .icon-item:hover,.dropdown-menu .icon-item:focus,.dropdown-menu .text-item:hover,.dropdown-menu .text-item:focus,.dropdown-menu .label-item:hover,.dropdown-menu .label-item:focus{text-decoration:none;background-color:var(--color-primary-light);color:var(--color-primary)}.dropdown-menu .icon-item:focus,.dropdown-menu .text-item:focus,.dropdown-menu .label-item:focus{outline:1px solid var(--color-primary);outline-offset:-2px}.dropdown-menu .icon-item svg,.dropdown-menu .text-item svg,.dropdown-menu .label-item svg{margin-inline-end:12px;display:inline-block;width:16px}.dropdown-menu .text-item{display:block}.dropdown-menu .label-item{display:grid;align-items:center;grid-template-columns:auto min-content;gap:16px}.dropdown-menu .label-item>*:nth-child(2){opacity:.7}.dropdown-menu .label-item>*:nth-child(2):hover{opacity:1}.dropdown-menu .icon-item{display:grid;align-items:start;grid-template-columns:16px auto;gap:16px}.dropdown-menu .icon-item svg{margin-inline-end:0;margin-block-start:1px}.tri-layout-right .dropdown-menu,.tri-layout-left .dropdown-menu{inset-inline-end:6px}.featured-image-container{position:relative;overflow:hidden;min-height:140px;background-size:cover;background-position:50% 50%;transition:opacity ease-in-out 240ms}.featured-image-container a{display:block}.featured-image-container img{display:block;width:100%;max-width:100%;height:auto}.featured-image-container-wrap{position:relative}.featured-image-container-wrap .svg-icon{color:#fff;font-size:2rem;margin-inline-end:0;position:absolute;bottom:10px;left:6px}html.dark-mode .featured-image-container-wrap .svg-icon{color:rgba(255,255,255,.6)}.grid-card:hover .featured-image-container{opacity:.5}.action-link{background:rgba(0,0,0,0);border:none;color:currentColor;padding:16px 0}.active-link-list a{display:inline-block;padding:12px}.active-link-list a:not(.active){color:#444}html.dark-mode .active-link-list a:not(.active){color:#888}.active-link-list a:hover{background-color:rgba(0,0,0,.05);border-radius:4px;text-decoration:none}html.dark-mode .active-link-list a:hover{background-color:rgba(255,255,255,.05)}.active-link-list.in-sidebar a{display:block;margin-bottom:6px}.active-link-list.in-sidebar a.active{border-radius:4px;background-color:rgba(0,0,0,.05)}html.dark-mode .active-link-list.in-sidebar a.active{background-color:rgba(255,255,255,.05)}.entity-meta-item{display:flex;line-height:1.2;margin:.6em 0;align-content:start;gap:12px}.entity-meta-item a{line-height:1.2}.entity-meta-item svg{flex-shrink:0;width:1em;margin:0}.page-editor{display:flex;flex-direction:column;align-items:stretch;overflow:hidden}.page-editor .edit-area{flex:1;flex-direction:column;z-index:10;overflow:hidden;border-radius:0 0 8px 8px}.page-editor .mce-tinymce{box-shadow:none}.page-editor .mce-top-part::before{box-shadow:none}.page-editor-page-area{width:100%;border-radius:8px;box-shadow:0 1px 6px -1px rgba(0,0,0,.1);background-color:#fff}html.dark-mode .page-editor-page-area{background-color:#333}.page-edit-toolbar{width:100%;margin:0 auto;display:grid;grid-template-columns:minmax(max-content, 2fr) 1.5fr minmax(max-content, 2fr);align-items:center}@media screen and (min-width: 1400px){.page-editor-wysiwyg .page-edit-toolbar,.page-editor-wysiwyg .page-editor-page-area{max-width:1140px}.page-editor-wysiwyg .floating-toolbox{position:absolute}}@media screen and (max-width: 880px){.page-edit-toolbar{display:flex;flex-direction:row;justify-content:space-between}}.title-input.page-title{font-size:.8em}.title-input.page-title .input{border:0;margin-bottom:-1px}.title-input.page-title input[type=text]{max-width:840px;margin:0 auto;border:none;height:auto;display:block;width:100%;font-size:20px;border-radius:8px}.title-input.page-title input[type=text]:focus{position:relative;outline-offset:-1px;outline:1px dashed var(--color-primary);box-shadow:0 1px 6px -1px rgba(0,0,0,.1);z-index:50}.page-editor-markdown .title-input.page-title input[type=text]{max-width:100%}body.tox-fullscreen .page-editor .edit-area,body.markdown-fullscreen .page-editor .edit-area{z-index:12}body.tox-fullscreen .page-editor,body.tox-fullscreen .flex-fill,body.markdown-fullscreen .page-editor,body.markdown-fullscreen .flex-fill{overflow:visible}@media screen and (max-width: 600px){.page-edit-toolbar{overflow-x:scroll;overflow-y:visible}.page-edit-toolbar{white-space:nowrap}.page-edit-toolbar>div{display:inline-block}}.page-save-mobile-button{position:fixed;z-index:30;border-radius:50%;width:52px;height:52px;font-size:26px;right:6px;bottom:12px;box-shadow:0 2px 2px 1px rgba(0,0,0,.13);background-color:currentColor;text-align:center}.page-save-mobile-button svg{fill:#fff;margin-inline-end:0}.draft-notification{pointer-events:none;transform:scale(0);transition:transform ease-in-out 120ms;transform-origin:50% 50%}.draft-notification.visible{transform:scale(1)}.page-style.editor{padding:0 !important}.pointer-container{position:fixed;display:none;left:0;z-index:10}.pointer{border:1px solid #ccc;border-color:#ccc;border-radius:4px;box-shadow:0 0 12px 1px rgba(0,0,0,.1);background-color:#fff;width:275px}html.dark-mode .pointer{border-color:#000}html.dark-mode .pointer{background-color:#333}.pointer.is-page-editable{width:328px}.pointer:before{position:absolute;left:50%;bottom:-9px;width:16px;height:16px;margin-inline-start:-8px;content:"";display:block;transform:rotate(45deg);transform-origin:50% 50%;border-block-end:1px solid #ccc;border-inline-end:1px solid #ccc;z-index:56;background-color:#fff;border-color:#ccc}html.dark-mode .pointer:before{background-color:#333}html.dark-mode .pointer:before{border-color:#000}.pointer input,.pointer button,.pointer a{position:relative;border-radius:0;height:28px;font-size:12px;vertical-align:top;padding:5px 16px}.pointer input{background-color:#fff;border:1px solid #ddd;border-color:#ddd;color:#666;width:160px;z-index:40;padding:5px 10px}html.dark-mode .pointer input{border-color:#000}.pointer .text-button{color:#444}html.dark-mode .pointer .text-button{color:#aaa}.pointer .input-group .button{line-height:1;margin:0 0 0 -4px;box-shadow:none}.pointer a.button{margin:0}.pointer .svg-icon{width:1.2em;height:1.2em}.pointer .button{border-color:#ddd}html.dark-mode .pointer .button{border-color:#000}.floating-toolbox{background-color:#fff;overflow:hidden;align-items:stretch;flex-direction:row;display:flex;max-height:100%;border-radius:8px;box-shadow:0 1px 6px -1px rgba(0,0,0,.1);margin-bottom:auto;margin-left:24px;position:relative}html.dark-mode .floating-toolbox{background-color:#222}.floating-toolbox.open{position:relative;right:0;max-width:480px;margin-bottom:0}.floating-toolbox:not(.open) .toolbox-tab-content{display:none !important}.floating-toolbox .toolbox-toggle svg{transition:transform ease-in-out 180ms}.floating-toolbox .toolbox-toggle{transition:background-color ease-in-out 180ms}.floating-toolbox.open .toolbox-toggle{background-color:rgba(255,0,0,.2)}.floating-toolbox.open .toolbox-toggle svg{transform:rotate(180deg)}.floating-toolbox>div{flex:1;position:relative}.floating-toolbox .tabs{border-right:1px solid #ddd;border-right-color:#ddd;width:40px;flex:0 1 auto;margin-right:-1px}html.dark-mode .floating-toolbox .tabs{border-right-color:#000}.floating-toolbox .tabs-inner{background-color:#fff}html.dark-mode .floating-toolbox .tabs-inner{background-color:#222}.floating-toolbox .tabs svg{padding:0;margin:0}.floating-toolbox .tabs-inner>button{color:rgba(0,0,0,.7);display:block;cursor:pointer;padding:10px 6px;font-size:18px;line-height:1.6}html.dark-mode .floating-toolbox .tabs-inner>button{color:rgba(255,255,255,.5)}.floating-toolbox .tabs-inner>button:hover,.floating-toolbox.open .tabs-inner>button.active{color:var(--color-link) !important;position:relative}.floating-toolbox .tabs-inner>button:hover:after,.floating-toolbox.open .tabs-inner>button.active:after{content:"";display:block;position:absolute;left:0;width:100%;top:0;height:100%;background-color:currentColor;opacity:.075}.floating-toolbox.open .tabs-inner>button.active{border-inline-end:1px solid var(--color-link);margin-inline-end:-1px}.floating-toolbox h4{font-size:24px;margin:16px 0 0 0;padding:0 24px 12px 24px}.floating-toolbox .tags input{max-width:100%;width:100%;min-width:50px}.floating-toolbox .tags td,.floating-toolbox .inline-start-table>div>div>div{padding-inline-end:12px;padding-top:12px;position:relative}.floating-toolbox .handle{user-select:none;cursor:move;fill:#999}.floating-toolbox form{display:flex;flex:1;flex-direction:column;overflow-y:scroll}.floating-toolbox table td,.floating-toolbox table th{overflow:visible}@media screen and (max-width: 1400px){.floating-toolbox{margin-left:12px}}@media screen and (max-width: 600px){.page-editor-page-area-wrap{margin:4px !important}.floating-toolbox{margin-left:4px}.floating-toolbox .tabs{width:32px}.floating-toolbox .tabs-inner>button{font-size:12px}.page-edit-toolbar{padding-block:0 !important}.page-editor.toolbox-open .page-editor-page-area{display:none}}.toolbox-tab-content{display:none;overflow-y:auto;padding-bottom:45px}.suggestion-box{top:auto;margin:-4px 0 0;right:auto;left:0;padding:0}.suggestion-box li{display:block;border-bottom:1px solid #ddd}.suggestion-box li:last-child{border-bottom:0}.comments-container h5{color:#888;font-weight:normal;margin-top:.5em}.comment-editor .CodeMirror,.comment-editor .CodeMirror-scroll{min-height:175px}.mce-floatpanel[aria-label="Insert/edit media"] .mce-open{display:none}.entity-list-item>span:first-child,.icon-list-item>span:first-child,.split-icon-list-item>a>.icon,.chapter-expansion>.icon{font-size:.8rem;width:1.88em;height:1.88em;flex-shrink:0;display:flex;align-items:center;justify-content:center;text-align:center;border-radius:1em;position:relative;overflow:hidden}.entity-list-item>span:first-child svg,.icon-list-item>span:first-child svg,.split-icon-list-item>a>.icon svg,.chapter-expansion>.icon svg{margin:0;bottom:0}.entity-list-item>span:first-child:after,.icon-list-item>span:first-child:after,.split-icon-list-item>a>.icon:after,.chapter-expansion>.icon:after{content:"";position:absolute;background-color:currentColor;opacity:.2;left:0;top:0;width:100%;height:100%}.entity-chip{display:inline-block;align-items:center;justify-content:center;text-align:center;font-size:.9em;border-radius:3px;position:relative;overflow:hidden;padding:6px 12px;fill:currentColor;opacity:.85;transition:opacity ease-in-out 120ms}.entity-chip:after{content:"";position:absolute;background-color:currentColor;opacity:.15;left:0;top:0;width:100%;height:100%}.entity-chip:hover{text-decoration:none;opacity:1}@media(prefers-contrast: more){.entity-chip{opacity:1}}.page-content{width:100%;max-width:840px;margin:0 auto;overflow-wrap:break-word}.page-content .align-left{text-align:left}.page-content img.align-left,.page-content table.align-left{float:left !important;margin:6px 16px 16px 0}.page-content .align-right{text-align:right !important}.page-content img.align-right,.page-content table.align-right{float:right !important;margin:6px 0 6px 12px}.page-content .align-center{text-align:center}.page-content img.align-center{display:block}.page-content img.align-center,.page-content table.align-center{margin-left:auto;margin-right:auto}.page-content img{max-width:100%;height:auto}.page-content h1,.page-content h2,.page-content h3,.page-content h4,.page-content h5,.page-content h6,.page-content pre{clear:left}.page-content hr{clear:both;margin:16px 0}.page-content table{hyphens:auto;table-layout:fixed;max-width:100%;height:auto !important}.page-content ins,.page-content del{text-decoration:none}.page-content ins{background:#dbffdb}.page-content del{background:#ffecec}.page-content details{border:1px solid;border-color:#ddd;margin-bottom:1em;padding:12px}html.dark-mode .page-content details{border-color:#555}.page-content details>summary{margin-top:-12px;margin-left:-12px;margin-right:-12px;margin-bottom:-12px;font-weight:bold;background-color:#eee;padding:6px 12px}html.dark-mode .page-content details>summary{background-color:#333}.page-content details[open]>summary{margin-bottom:12px;border-bottom:1px solid;border-color:#ddd}html.dark-mode .page-content details[open]>summary{border-color:#555}.page-content details>summary+*{margin-top:.2em}.page-content details:after{content:"";display:block;clear:both}.page-content li>input[type=checkbox]{vertical-align:top;margin-top:.3em}.page-content p:empty{min-height:1.6em}.page-content.page-revision pre code{white-space:pre-wrap}.page-content .cm-editor{margin-bottom:1.375em}.page-content video{max-width:100%}.callout{border-left:3px solid #bbb;background-color:#eee;padding:12px 12px 12px 32px;display:block;position:relative;overflow:auto}.callout:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiMwMTUzODAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6Ii8+PC9zdmc+");background-repeat:no-repeat;content:"";width:1.2em;height:1.2em;left:8px;top:50%;margin-top:-9px;display:inline-block;position:absolute;line-height:1;opacity:.8}.callout.success{border-left-color:#0f7d15;background-color:#eafdeb;color:#063409}html.dark-mode .callout.success{border-left-color:#4aa850}html.dark-mode .callout.success{background-color:#122913}html.dark-mode .callout.success{color:#4aa850}.callout.success:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiMzNzZjMzkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE1bC01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6Ii8+PC9zdmc+")}.callout.danger{border-left-color:#ab0f0e;background-color:#fcdbdb;color:#4d0706}html.dark-mode .callout.danger{border-left-color:#e85c5b}html.dark-mode .callout.danger{background-color:#250505}html.dark-mode .callout.danger{color:#e85c5b}.callout.danger:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiNiOTE4MTgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiLz4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==")}.callout.info{border-left-color:#0288d1;color:#01466c;background-color:#d3efff}html.dark-mode .callout.info{border-left-color:#0288d1}html.dark-mode .callout.info{color:#0288d1}html.dark-mode .callout.info{background-color:#001825}.callout.warning{border-left-color:#cf4d03;background-color:#fee3d3;color:#6a2802}html.dark-mode .callout.warning{border-left-color:#de8a5a}html.dark-mode .callout.warning{background-color:#30170a}html.dark-mode .callout.warning{color:#de8a5a}.callout.warning:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9IiNiNjUzMWMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4gICAgPHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiLz48L3N2Zz4=")}.callout a{color:inherit;text-decoration:underline}@media print{html,body{font-size:12px;background-color:#fff}.page-content{margin:0 auto}.print-hidden{display:none !important}.tri-layout-container{grid-template-columns:1fr;grid-template-areas:"b";margin-inline-start:0;margin-inline-end:0;display:block}.card{box-shadow:none}.content-wrap.card{padding-inline-start:0;padding-inline-end:0}}.dragged{position:absolute;opacity:.5;z-index:2000}body.dragging,body.dragging *{cursor:move !important}.avatar{border-radius:100%;background-color:#eee;width:30px;height:30px}html.dark-mode .avatar{background-color:#000}.avatar.med{width:40px;height:40px}.avatar.large{width:80px;height:80px}.avatar.huge{width:120px;height:120px}.avatar.square{border-radius:3px}html.dark-mode .avatar[src$="user_avatar.png"]{filter:invert(1)}.loading-container{position:relative;display:block;margin:32px auto}.loading-container>div{width:10px;height:10px;border-radius:10px;display:inline-block;vertical-align:top;transform:translate3d(-10px, 0, 0);margin-top:6px;animation-name:loadingBob;animation-duration:1.4s;animation-iteration-count:infinite;animation-timing-function:cubic-bezier(0.62, 0.28, 0.23, 0.99);margin-inline-end:4px;background-color:var(--color-page);animation-delay:-300ms}.loading-container>div:first-child{left:-16px;background-color:var(--color-book);animation-delay:-600ms}.loading-container>div:last-of-type{left:16px;background-color:var(--color-chapter);animation-delay:0ms}.loading-container>span{margin-inline-start:12px;font-style:italic;color:#888;vertical-align:top}.skip-to-content-link{position:fixed;top:-52px;left:0;background-color:#fff;z-index:15;border-radius:0 4px 4px 0;display:block;box-shadow:0 0 4px 1px rgba(0,0,0,.5);font-weight:bold}.skip-to-content-link:focus{top:32px;outline-offset:-10px;outline:2px dotted var(--color-link)}.entity-selector{border:1px solid #ddd;border-color:#ddd;border-radius:3px;overflow:hidden;font-size:.8em}html.dark-mode .entity-selector{border-color:#111}.entity-selector input[type=text]{width:100%;display:block;border-radius:0;border:0;border-bottom:1px solid #ddd;font-size:16px;padding:12px 16px}.entity-selector .entity-list{overflow-y:scroll;height:400px;background-color:#eee;margin-inline-end:0;margin-inline-start:0}html.dark-mode .entity-selector .entity-list{background-color:#222}.entity-selector .entity-list-item{background-color:#fff}html.dark-mode .entity-selector .entity-list-item{background-color:#222}.entity-selector .entity-list-item p{margin-bottom:0}.entity-selector .entity-list-item:focus{outline:2px dotted var(--color-primary);outline-offset:-4px}.entity-selector .entity-list-item.selected{background-color:rgba(0,0,0,.05)}html.dark-mode .entity-selector .entity-list-item.selected{background-color:rgba(255,255,255,.05)}.entity-selector .loading{height:400px;padding-top:24px}.entity-selector.compact{font-size:10px}.entity-selector.compact .entity-item-snippet{display:none}.entity-selector.compact h4{font-size:14px}.fullscreen{border:0;position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;z-index:150}@media screen and (min-width: 600px)and (max-width: 880px){#home-default>.grid.third{display:block;columns:2;column-gap:24px !important}}.list-sort-container{display:inline-block}.list-sort-container form{display:inline-block}.list-sort-container .list-sort{display:inline-grid;margin-inline-start:12px;grid-template-columns:minmax(120px, max-content) 40px;font-size:.9rem;border:2px solid #ddd;border-color:#ddd;border-radius:4px}html.dark-mode .list-sort-container .list-sort{border-color:#444}.list-sort-container .list-sort-label{font-weight:bold;display:inline-block;color:#555}html.dark-mode .list-sort-container .list-sort-label{color:#888}.list-sort-container .list-sort-type{text-align:start}.list-sort-container .list-sort-type,.list-sort-container .list-sort-dir{padding:6px 12px;cursor:pointer}.list-sort-container .list-sort-dir{border-inline-start:2px solid #ddd;color:#888;border-color:#ddd}html.dark-mode .list-sort-container .list-sort-dir{border-color:#444}.list-sort-container .list-sort-dir .svg-icon{transition:transform ease-in-out 120ms}.list-sort-container .list-sort-dir:hover .svg-icon{transform:rotate(180deg)}/*# sourceMappingURL=styles.css.map */ diff --git a/readme.md b/readme.md index b4c6f2b3b61..b6174f41219 100644 --- a/readme.md +++ b/readme.md @@ -10,7 +10,9 @@ [![Repo Stats](https://img.shields.io/static/v1?label=GitHub+project&message=stats&color=f27e3f)](https://gh-stats.bookstackapp.com/) [![Discord](https://img.shields.io/static/v1?label=Discord&message=chat&color=738adb&logo=discord)](https://discord.gg/ztkBqR2) [![Mastodon](https://img.shields.io/static/v1?label=Mastodon&message=@bookstack&color=595aff&logo=mastodon)](https://fosstodon.org/@bookstack) -[![Twitter](https://img.shields.io/static/v1?label=Twitter&message=@bookstack_app&color=1d9bf0&logo=twitter)](https://twitter.com/bookstack_app) +[![X - Formerly Twitter](https://img.shields.io/static/v1?label=Follow&message=@bookstack_app&color=1d9bf0&logo=x)](https://x.com/bookstack_app) + +[![PeerTube](https://img.shields.io/static/v1?label=PeerTube&message=bookstack@foss.video&color=f2690d&logo=peertube)](https://foss.video/c/bookstack) [![YouTube](https://img.shields.io/static/v1?label=YouTube&message=bookstackapp&color=ff0000&logo=youtube)](https://www.youtube.com/bookstackapp) A platform for storing and organising information and documentation. Details for BookStack can be found on the official website at https://www.bookstackapp.com/. @@ -23,6 +25,7 @@ A platform for storing and organising information and documentation. Details for * [BookStack Blog](https://www.bookstackapp.com/blog) * [Issue List](https://github.com/BookStackApp/BookStack/issues) * [Discord Chat](https://discord.gg/ztkBqR2) +* [Support Options](https://www.bookstackapp.com/support/) ## 📚 Project Definition @@ -36,8 +39,9 @@ In regard to development philosophy, BookStack has a relaxed, open & positive ap Shown below are our bronze, silver and gold project sponsors. Big thanks to these companies for supporting the project. -Note: Listed services are not tested, vetted nor supported by the official BookStack project in any manner. -[View all sponsors](https://github.com/sponsors/ssddanbrown). +*Note: The listed services are not tested, vetted nor supported by the official BookStack project in any manner.* + +[Project donation details](https://www.bookstackapp.com/donate/) - [GitHub Sponsors Page](https://github.com/sponsors/ssddanbrown) - [Ko-fi Page](https://ko-fi.com/ssddanbrown) #### Silver Sponsors @@ -50,15 +54,24 @@ Note: Listed services are not tested, vetted nor supported by the official BookS #### Bronze Sponsors - + + + + +
    - Stellar Hosted + + Cloudabove Practicali
    + Stellar Hosted + Torutec
    + NETWAYS Web Services +
    ## 🛣️ Road Map @@ -80,7 +93,9 @@ Details about BookStack's versioning scheme and the general release process [can ## 🌎 Translations -Translations for text within BookStack is managed through the [BookStack project on Crowdin](https://crowdin.com/project/bookstack). Some strings have colon-prefixed variables such as `:userName`. Leave these values as they are as they will be replaced at run-time. Crowdin is the preferred way to provide translations, otherwise the raw translations files can be found within the `resources/lang` path. +Translations for text within BookStack is managed through the [BookStack project on Crowdin](https://crowdin.com/project/bookstack). Some strings have colon-prefixed variables such as `:userName`. Leave these values as they are as they will be replaced at run-time. + +Please use [Crowdin](https://crowdin.com/project/bookstack) to contribute translations instead of opening a pull request. The translations within the working codebase can be out-of-date, and merging via code can cause conflicts & sync issues. If for some reason you can't use Crowdin feel free to open an issue to discuss alternative options. If you'd like a new language to be added to Crowdin, for you to be able to provide translations for, please [open a new issue here](https://github.com/BookStackApp/BookStack/issues/new?template=language_request.yml). @@ -88,9 +103,9 @@ Please note, translations in BookStack are provided to the "Crowdin Global Trans ## 🎁 Contributing, Issues & Pull Requests -Feel free to create issues to request new features or to report bugs & problems. Just please follow the template given when creating the issue. +Feel free to [create issues](https://github.com/BookStackApp/BookStack/issues/new/choose) to request new features or to report bugs & problems. Just please follow the template given when creating the issue. -Pull requests are welcome. Unless a small tweak or language update, It may be best to open the pull request early or create an issue for your intended change to discuss how it will fit into the project and plan out the merge. Just because a feature request exists, or is tagged, does not mean that feature would be accepted into the core project. +Pull requests are welcome but, unless it's a small tweak, it may be best to open the pull request early or create an issue for your intended change to discuss how it will fit into the project and plan out the merge. Just because a feature request exists, or is tagged, does not mean that feature would be accepted into the core project. Pull requests should be created from the `development` branch since they will be merged back into `development` once done. Please do not build from or request a merge into the `release` branch as this is only for publishing releases. If you are looking to alter CSS or JavaScript content please edit the source files found in `resources/`. Any CSS or JS files within `public` are built from these source files and therefore should not be edited directly. diff --git a/resources/icons/notifications.svg b/resources/icons/notifications.svg new file mode 100644 index 00000000000..52786954db4 --- /dev/null +++ b/resources/icons/notifications.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/icons/security.svg b/resources/icons/security.svg new file mode 100644 index 00000000000..4fc0d20b97c --- /dev/null +++ b/resources/icons/security.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/js/code/index.mjs b/resources/js/code/index.mjs index e51472dc4ce..ada4529db54 100644 --- a/resources/js/code/index.mjs +++ b/resources/js/code/index.mjs @@ -55,7 +55,7 @@ function highlightElem(elem) { const wrapper = document.createElement('div'); elem.parentNode.insertBefore(wrapper, elem); - const ev = createView({ + const ev = createView('content-code-block', { parent: wrapper, doc: content, extensions: viewerExtensions(wrapper), @@ -99,7 +99,7 @@ export function highlight() { * @returns {SimpleEditorInterface} */ export function wysiwygView(cmContainer, shadowRoot, content, language) { - const ev = createView({ + const ev = createView('content-code-block', { parent: cmContainer, doc: content, extensions: viewerExtensions(cmContainer), @@ -125,16 +125,11 @@ export function popupEditor(elem, modeSuggestion) { doc: content, extensions: [ ...editorExtensions(elem.parentElement), - EditorView.updateListener.of(v => { - if (v.docChanged) { - // textArea.value = v.state.doc.toString(); - } - }), ], }; // Create editor, hide original input - const editor = new SimpleEditorInterface(createView(config)); + const editor = new SimpleEditorInterface(createView('code-editor', config)); editor.setMode(modeSuggestion, content); elem.style.display = 'none'; @@ -163,7 +158,7 @@ export function inlineEditor(textArea, mode) { }; // Create editor view, hide original input - const ev = createView(config); + const ev = createView('code-input', config); const editor = new SimpleEditorInterface(ev); editor.setMode(mode, content); textArea.style.display = 'none'; @@ -198,7 +193,7 @@ export function markdownEditor(elem, onChange, domEventHandlers, keyBindings) { window.$events.emitPublic(elem, 'editor-markdown-cm6::pre-init', {editorViewConfig: config}); // Create editor view, hide original input - const ev = createView(config); + const ev = createView('markdown-editor', config); (new SimpleEditorInterface(ev)).setMode('markdown', ''); elem.style.display = 'none'; diff --git a/resources/js/code/views.js b/resources/js/code/views.js index 12148ca0936..5599c35ddbe 100644 --- a/resources/js/code/views.js +++ b/resources/js/code/views.js @@ -1,4 +1,4 @@ -import {Compartment} from '@codemirror/state'; +import {Compartment, EditorState} from '@codemirror/state'; import {EditorView} from '@codemirror/view'; import {getLanguageExtension} from './languages'; @@ -7,17 +7,31 @@ const viewLangCompartments = new WeakMap(); /** * Create a new editor view. * + * @param {String} usageType * @param {{parent: Element, doc: String, extensions: Array}} config * @returns {EditorView} */ -export function createView(config) { +export function createView(usageType, config) { const langCompartment = new Compartment(); config.extensions.push(langCompartment.of([])); - const ev = new EditorView(config); + const commonEventData = { + usage: usageType, + editorViewConfig: config, + libEditorView: EditorView, + libEditorState: EditorState, + libCompartment: Compartment, + }; + + // Emit a pre-init public event so the user can tweak the config before instance creation + window.$events.emitPublic(config.parent, 'library-cm6::pre-init', commonEventData); + const ev = new EditorView(config); viewLangCompartments.set(ev, langCompartment); + // Emit a post-init public event so the user can gain a reference to the EditorView + window.$events.emitPublic(config.parent, 'library-cm6::post-init', {editorView: ev, ...commonEventData}); + return ev; } diff --git a/resources/js/components/auto-suggest.js b/resources/js/components/auto-suggest.js index 92a6c6af3f4..2eede241c69 100644 --- a/resources/js/components/auto-suggest.js +++ b/resources/js/components/auto-suggest.js @@ -31,7 +31,10 @@ export class AutoSuggest extends Component { }, event => { event.preventDefault(); - this.selectSuggestion(event.target.textContent); + const selectionValue = event.target.textContent; + if (selectionValue) { + this.selectSuggestion(selectionValue); + } }, ); navHandler.shareHandlingToEl(this.input); diff --git a/resources/js/components/dropdown.js b/resources/js/components/dropdown.js index 2c5919a37e7..4efd428acf7 100644 --- a/resources/js/components/dropdown.js +++ b/resources/js/components/dropdown.js @@ -34,6 +34,7 @@ export class Dropdown extends Component { let heightOffset = 0; const toggleHeight = this.toggle.getBoundingClientRect().height; const dropUpwards = menuOriginalRect.bottom > window.innerHeight; + const containerRect = this.container.getBoundingClientRect(); // If enabled, Move to body to prevent being trapped within scrollable sections if (this.moveMenu) { @@ -52,9 +53,13 @@ export class Dropdown extends Component { if (dropUpwards) { this.menu.style.top = 'initial'; this.menu.style.bottom = `${heightOffset}px`; + const maxHeight = (window.innerHeight - 40) - (window.innerHeight - containerRect.bottom); + this.menu.style.maxHeight = `${Math.floor(maxHeight)}px`; } else { this.menu.style.top = `${heightOffset}px`; this.menu.style.bottom = 'initial'; + const maxHeight = (window.innerHeight - 40) - containerRect.top; + this.menu.style.maxHeight = `${Math.floor(maxHeight)}px`; } // Set listener to hide on mouse leave or window click @@ -91,6 +96,7 @@ export class Dropdown extends Component { this.toggle.setAttribute('aria-expanded', 'false'); this.menu.style.top = ''; this.menu.style.bottom = ''; + this.menu.style.maxHeight = ''; if (this.moveMenu) { this.menu.style.position = ''; diff --git a/resources/js/components/editor-toolbox.js b/resources/js/components/editor-toolbox.js index 4d3c0ae75d2..ddb4ff39c76 100644 --- a/resources/js/components/editor-toolbox.js +++ b/resources/js/components/editor-toolbox.js @@ -8,6 +8,7 @@ export class EditorToolbox extends Component { this.buttons = this.$manyRefs.tabButton; this.contentElements = this.$manyRefs.tabContent; this.toggleButton = this.$refs.toggle; + this.editorWrapEl = this.container.closest('.page-editor'); this.setupListeners(); @@ -30,8 +31,9 @@ export class EditorToolbox extends Component { toggle() { this.container.classList.toggle('open'); - const expanded = this.container.classList.contains('open') ? 'true' : 'false'; - this.toggleButton.setAttribute('aria-expanded', expanded); + const isOpen = this.container.classList.contains('open'); + this.toggleButton.setAttribute('aria-expanded', isOpen ? 'true' : 'false'); + this.editorWrapEl.classList.toggle('toolbox-open', isOpen); } setActiveTab(tabName, openToolbox = false) { diff --git a/resources/js/components/entity-selector-popup.js b/resources/js/components/entity-selector-popup.js index e21e67fb33e..9ff67d53efb 100644 --- a/resources/js/components/entity-selector-popup.js +++ b/resources/js/components/entity-selector-popup.js @@ -15,9 +15,14 @@ export class EntitySelectorPopup extends Component { window.$events.listen('entity-select-confirm', this.handleConfirmedSelection.bind(this)); } - show(callback) { + show(callback, searchText = '') { this.callback = callback; this.getPopup().show(); + + if (searchText) { + this.getSelector().searchText(searchText); + } + this.getSelector().focusSearch(); } diff --git a/resources/js/components/entity-selector.js b/resources/js/components/entity-selector.js index f12108fbb49..9cda3587401 100644 --- a/resources/js/components/entity-selector.js +++ b/resources/js/components/entity-selector.js @@ -87,6 +87,11 @@ export class EntitySelector extends Component { this.searchInput.focus(); } + searchText(queryText) { + this.searchInput.value = queryText; + this.searchEntities(queryText); + } + showLoading() { this.loading.style.display = 'block'; this.resultsContainer.style.display = 'none'; diff --git a/resources/js/components/image-manager.js b/resources/js/components/image-manager.js index 78abcf30d8b..47231477b68 100644 --- a/resources/js/components/image-manager.js +++ b/resources/js/components/image-manager.js @@ -90,6 +90,15 @@ export class ImageManager extends Component { } }); + // Rebuild thumbs click + onChildEvent(this.formContainer, '#image-manager-rebuild-thumbs', 'click', async (_, button) => { + button.disabled = true; + if (this.lastSelected) { + await this.rebuildThumbnails(this.lastSelected.id); + } + button.disabled = false; + }); + // Edit form submit this.formContainer.addEventListener('ajax-form-success', () => { this.refreshGallery(); @@ -220,8 +229,8 @@ export class ImageManager extends Component { this.loadGallery(); } - onImageSelectEvent(event) { - const image = JSON.parse(event.detail.data); + async onImageSelectEvent(event) { + let image = JSON.parse(event.detail.data); const isDblClick = ((image && image.id === this.lastSelected.id) && Date.now() - this.lastSelectedTime < 400); const alreadySelected = event.target.classList.contains('selected'); @@ -229,12 +238,15 @@ export class ImageManager extends Component { el.classList.remove('selected'); }); - if (!alreadySelected) { + if (!alreadySelected && !isDblClick) { event.target.classList.add('selected'); - this.loadImageEditForm(image.id); - } else { + image = await this.loadImageEditForm(image.id); + } else if (!isDblClick) { this.resetEditForm(); + } else if (isDblClick) { + image = this.lastSelected; } + this.selectButton.classList.toggle('hidden', alreadySelected); if (isDblClick && this.callback) { @@ -256,6 +268,9 @@ export class ImageManager extends Component { this.formContainer.innerHTML = formHtml; this.formContainerPlaceholder.setAttribute('hidden', ''); window.$components.init(this.formContainer); + + const imageDataEl = this.formContainer.querySelector('#image-manager-form-image-data'); + return JSON.parse(imageDataEl.text); } runLoadMore() { @@ -268,4 +283,14 @@ export class ImageManager extends Component { return this.loadMore.querySelector('button') && !this.loadMore.hasAttribute('hidden'); } + async rebuildThumbnails(imageId) { + try { + const response = await window.$http.put(`/images/${imageId}/rebuild-thumbnails`); + window.$events.success(response.data); + this.refreshGallery(); + } catch (err) { + window.$events.showResponseError(err); + } + } + } diff --git a/resources/js/components/page-comments.js b/resources/js/components/page-comments.js index a46a5c3b3ef..e2911afc6a0 100644 --- a/resources/js/components/page-comments.js +++ b/resources/js/components/page-comments.js @@ -27,16 +27,12 @@ export class PageComments extends Component { // Internal State this.parentId = null; - this.formReplyText = this.formReplyLink.textContent; + this.formReplyText = this.formReplyLink?.textContent || ''; this.setupListeners(); } setupListeners() { - this.removeReplyToButton.addEventListener('click', this.removeReplyTo.bind(this)); - this.hideFormButton.addEventListener('click', this.hideForm.bind(this)); - this.addCommentButton.addEventListener('click', this.showForm.bind(this)); - this.elem.addEventListener('page-comment-delete', () => { this.updateCount(); this.hideForm(); @@ -47,6 +43,9 @@ export class PageComments extends Component { }); if (this.form) { + this.removeReplyToButton.addEventListener('click', this.removeReplyTo.bind(this)); + this.hideFormButton.addEventListener('click', this.hideForm.bind(this)); + this.addCommentButton.addEventListener('click', this.showForm.bind(this)); this.form.addEventListener('submit', this.saveComment.bind(this)); } } @@ -123,9 +122,8 @@ export class PageComments extends Component { this.showForm(); this.parentId = commentLocalId; this.replyToRow.toggleAttribute('hidden', false); - const replyLink = this.replyToRow.querySelector('a'); - replyLink.textContent = this.formReplyText.replace('1234', this.parentId); - replyLink.href = `#comment${this.parentId}`; + this.formReplyLink.textContent = this.formReplyText.replace('1234', this.parentId); + this.formReplyLink.href = `#comment${this.parentId}`; } removeReplyTo() { diff --git a/resources/js/components/page-display.js b/resources/js/components/page-display.js index bd1986c6ca8..1e13ae38800 100644 --- a/resources/js/components/page-display.js +++ b/resources/js/components/page-display.js @@ -37,7 +37,6 @@ export class PageDisplay extends Component { window.importVersioned('code').then(Code => Code.highlight()); this.setupNavHighlighting(); - this.setupDetailsCodeBlockRefresh(); // Check the hash on load if (window.location.hash) { @@ -87,14 +86,4 @@ export class PageDisplay extends Component { } } - setupDetailsCodeBlockRefresh() { - const onToggle = event => { - const codeMirrors = [...event.target.querySelectorAll('.CodeMirror')]; - codeMirrors.forEach(cm => cm.CodeMirror && cm.CodeMirror.refresh()); - }; - - const details = [...this.container.querySelectorAll('details')]; - details.forEach(detail => detail.addEventListener('toggle', onToggle)); - } - } diff --git a/resources/js/components/shortcuts.js b/resources/js/components/shortcuts.js index 85a7c3da711..b22c467318e 100644 --- a/resources/js/components/shortcuts.js +++ b/resources/js/components/shortcuts.js @@ -29,17 +29,16 @@ export class Shortcuts extends Component { return; } - this.handleShortcutPress(event); - }); - - window.addEventListener('keydown', event => { if (event.key === '?') { if (this.hintsShowing) { this.hideHints(); } else { this.showHints(); } + return; } + + this.handleShortcutPress(event); }); } diff --git a/resources/js/markdown/actions.js b/resources/js/markdown/actions.js index 3f9df47788f..4909a59d066 100644 --- a/resources/js/markdown/actions.js +++ b/resources/js/markdown/actions.js @@ -34,7 +34,7 @@ export class Actions { const imageManager = window.$components.first('image-manager'); imageManager.show(image => { - const imageUrl = image.thumbs.display || image.url; + const imageUrl = image.thumbs?.display || image.url; const selectedText = this.#getSelectionText(); const newText = `[![${selectedText || image.name}](${imageUrl})](${image.url})`; this.#replaceSelection(newText, newText.length); @@ -68,11 +68,12 @@ export class Actions { /** @type {EntitySelectorPopup} * */ const selector = window.$components.first('entity-selector-popup'); + const selectionText = this.#getSelectionText(selectionRange); selector.show(entity => { - const selectedText = this.#getSelectionText(selectionRange) || entity.name; + const selectedText = selectionText || entity.name; const newText = `[${selectedText}](${entity.link})`; this.#replaceSelection(newText, newText.length, selectionRange); - }); + }, selectionText); } // Show draw.io if enabled and handle save. @@ -416,7 +417,7 @@ export class Actions { const newContent = `[![](${data.thumbs.display})](${data.url})`; this.#findAndReplaceContent(placeHolderText, newContent); } catch (err) { - window.$events.emit('error', this.editor.config.text.imageUploadError); + window.$events.error(err?.data?.message || this.editor.config.text.imageUploadError); this.#findAndReplaceContent(placeHolderText, ''); console.error(err); } diff --git a/resources/js/services/util.js b/resources/js/services/util.js index d9c3bd0e914..59affff8814 100644 --- a/resources/js/services/util.js +++ b/resources/js/services/util.js @@ -30,19 +30,29 @@ export function debounce(func, waitMs, immediate) { */ export function scrollAndHighlightElement(element) { if (!element) return; + + const parentDetails = element.closest('details'); + if (parentDetails && !parentDetails.open) { + parentDetails.open = true; + } + element.scrollIntoView({behavior: 'smooth'}); - const color = getComputedStyle(document.body).getPropertyValue('--color-primary-light'); - const initColor = window.getComputedStyle(element).getPropertyValue('background-color'); - element.style.backgroundColor = color; + const highlight = getComputedStyle(document.body).getPropertyValue('--color-link'); + element.style.outline = `2px dashed ${highlight}`; + element.style.outlineOffset = '5px'; + element.style.transition = null; setTimeout(() => { - element.classList.add('selectFade'); - element.style.backgroundColor = initColor; - }, 10); - setTimeout(() => { - element.classList.remove('selectFade'); - element.style.backgroundColor = ''; - }, 3000); + element.style.transition = 'outline linear 3s'; + element.style.outline = '2px dashed rgba(0, 0, 0, 0)'; + const listener = () => { + element.removeEventListener('transitionend', listener); + element.style.transition = null; + element.style.outline = null; + element.style.outlineOffset = null; + }; + element.addEventListener('transitionend', listener); + }, 1000); } /** diff --git a/resources/js/wysiwyg/config.js b/resources/js/wysiwyg/config.js index d93c9644e5d..984081bd602 100644 --- a/resources/js/wysiwyg/config.js +++ b/resources/js/wysiwyg/config.js @@ -78,12 +78,13 @@ function filePickerCallback(callback, value, meta) { if (meta.filetype === 'file') { /** @type {EntitySelectorPopup} * */ const selector = window.$components.first('entity-selector-popup'); + const selectionText = this.selection.getContent({format: 'text'}).trim(); selector.show(entity => { callback(entity.link, { text: entity.name, title: entity.name, }); - }); + }, selectionText); } if (meta.filetype === 'image') { diff --git a/resources/js/wysiwyg/drop-paste-handling.js b/resources/js/wysiwyg/drop-paste-handling.js index 33078cd1d56..9668692c81d 100644 --- a/resources/js/wysiwyg/drop-paste-handling.js +++ b/resources/js/wysiwyg/drop-paste-handling.js @@ -61,7 +61,7 @@ function paste(editor, options, event) { editor.dom.replace(newEl, id); }).catch(err => { editor.dom.remove(id); - window.$events.emit('error', options.translations.imageUploadErrorText); + window.$events.error(err?.data?.message || options.translations.imageUploadErrorText); console.error(err); }); }, 10); diff --git a/resources/js/wysiwyg/plugins-imagemanager.js b/resources/js/wysiwyg/plugins-imagemanager.js index 37b5bfafd65..f1ea120502a 100644 --- a/resources/js/wysiwyg/plugins-imagemanager.js +++ b/resources/js/wysiwyg/plugins-imagemanager.js @@ -11,7 +11,7 @@ function register(editor) { /** @type {ImageManager} * */ const imageManager = window.$components.first('image-manager'); imageManager.show(image => { - const imageUrl = image.thumbs.display || image.url; + const imageUrl = image.thumbs?.display || image.url; let html = `
    `; html += `${image.name}`; html += ''; diff --git a/resources/js/wysiwyg/shortcuts.js b/resources/js/wysiwyg/shortcuts.js index 1c20df9c551..147e3c2d5c9 100644 --- a/resources/js/wysiwyg/shortcuts.js +++ b/resources/js/wysiwyg/shortcuts.js @@ -48,6 +48,7 @@ export function register(editor) { editor.shortcuts.add('meta+shift+K', '', () => { /** @var {EntitySelectorPopup} * */ const selectorPopup = window.$components.first('entity-selector-popup'); + const selectionText = editor.selection.getContent({format: 'text'}).trim(); selectorPopup.show(entity => { if (editor.selection.isCollapsed()) { editor.insertContent(editor.dom.createHTML('a', {href: entity.link}, editor.dom.encode(entity.name))); @@ -57,6 +58,6 @@ export function register(editor) { editor.selection.collapse(false); editor.focus(); - }); + }, selectionText); }); } diff --git a/resources/sass/_blocks.scss b/resources/sass/_blocks.scss index 54c509ef928..9e96e920b8d 100644 --- a/resources/sass/_blocks.scss +++ b/resources/sass/_blocks.scss @@ -6,8 +6,9 @@ @include lightDark(background-color, #FFF, #222); box-shadow: $bs-card; border-radius: 3px; + break-inside: avoid; .body, p.empty-text { - padding: $-m; + padding-block: $-m; } a, p { word-wrap: break-word; @@ -154,6 +155,7 @@ margin-bottom: $-l; overflow: initial; min-height: 60vh; + border-radius: 8px; &.auto-height { min-height: 0; } diff --git a/resources/sass/_components.scss b/resources/sass/_components.scss index c66a432bf26..150f78e1202 100644 --- a/resources/sass/_components.scss +++ b/resources/sass/_components.scss @@ -382,7 +382,7 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { .image-manager-list { padding: 3px; display: grid; - grid-template-columns: repeat( auto-fit, minmax(140px, 1fr) ); + grid-template-columns: repeat( auto-fill, minmax(max(140px, 17%), 1fr) ); gap: 3px; z-index: 3; > div { @@ -457,6 +457,18 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { text-align: center; } +.image-manager-list .image-manager-list-warning { + grid-column: 1 / -1; + aspect-ratio: auto; +} + +.image-manager-warning { + @include lightDark(background, #FFF, #333); + color: var(--color-warning); + font-weight: bold; + border-inline: 3px solid var(--color-warning); +} + .image-manager-sidebar { width: 300px; margin: 0 auto; diff --git a/resources/sass/_forms.scss b/resources/sass/_forms.scss index 2e534d60f08..2257e8000d0 100644 --- a/resources/sass/_forms.scss +++ b/resources/sass/_forms.scss @@ -148,10 +148,9 @@ html.markdown-editor-display.dark-mode { width: 100%; font-size: 11px; line-height: 1.6; - border-bottom: 1px solid #DDD; - background-color: #EEE; - @include lightDark(background-color, #eee, #111); - @include lightDark(border-color, #ddd, #000); + border-bottom: 1px solid #CCC; + @include lightDark(background-color, #FFF, #333); + @include lightDark(border-color, #CCC, #000); flex: none; @include whenDark { button { @@ -398,27 +397,6 @@ input[type=color] { height: auto; } -.title-input.page-title { - font-size: 0.8em; - @include lightDark(background-color, #fff, #333); - .input { - border: 0; - margin-bottom: -1px; - } - input[type="text"] { - max-width: 840px; - margin: 0 auto; - border: none; - height: auto; - } -} - -.page-title input { - display: block; - width: 100%; - font-size: 1.4em; -} - .description-input textarea { display: block; width: 100%; @@ -428,11 +406,6 @@ input[type=color] { height: auto; } -div[editor-type="markdown"] .title-input.page-title input[type="text"] { - max-width: 100%; - border-radius: 0; -} - .search-box { max-width: 100%; position: relative; diff --git a/resources/sass/_header.scss b/resources/sass/_header.scss index c1b6af4c655..e2daae437b6 100644 --- a/resources/sass/_header.scss +++ b/resources/sass/_header.scss @@ -2,12 +2,12 @@ * Includes the main navigation header and the faded toolbar. */ -header .grid { +header.grid { grid-template-columns: minmax(max-content, 2fr) 1fr minmax(max-content, 2fr); } @include smaller-than($l) { - header .grid { + header.grid { grid-template-columns: 1fr; grid-row-gap: 0; } @@ -364,43 +364,4 @@ header .search-box.search-active:focus-within { .faded span.faded-text { display: inline-block; padding: $-s; -} - -.action-buttons .text-button { - display: inline-block; - padding: $-xs $-s; - &:last-child { - padding-inline-end: 0; - } - &:first-child { - padding-inline-start: 0; - } -} - - -.action-buttons .dropdown-container:last-child a { - padding-inline-end: 0; - padding-inline-start: $-s; -} -.action-buttons { - text-align: end; - &.text-left { - text-align: start; - .text-button { - padding-inline-end: $-m; - padding-inline-start: 0; - } - } - &.text-center { - text-align: center; - } -} - -@include smaller-than($m) { - .action-buttons .text-button { - padding: $-xs $-xs; - } - .action-buttons .dropdown-container:last-child a { - padding-inline-start: $-xs; - } } \ No newline at end of file diff --git a/resources/sass/_layout.scss b/resources/sass/_layout.scss index 503298fccbd..d157ffdc36d 100644 --- a/resources/sass/_layout.scss +++ b/resources/sass/_layout.scss @@ -354,47 +354,84 @@ body.flexbox { grid-template-columns: 1fr 4fr 1fr; grid-template-areas: "a b c"; grid-column-gap: $-xl; - .tri-layout-right { - grid-area: c; - min-width: 0; + position: relative; +} +.tri-layout-sides { + grid-column-start: a; + grid-column-end: c; + grid-row: 1; + min-width: 0; + z-index: 4; +} +.tri-layout-sides-content { + display: grid; + grid-template-areas: "a b c"; + grid-template-columns: 1fr 4fr 1fr; + height: 100%; +} +.tri-layout-middle { + grid-area: b; + padding-top: $-m; + min-width: 0; + z-index: 5; +} +.tri-layout-right { + grid-area: c; + min-width: 0; +} +.tri-layout-left { + grid-area: a; + min-width: 0; +} + +@include larger-than($xxl) { + .tri-layout-left-contents, .tri-layout-right-contents { + padding: $-xl $-m; + position: sticky; + top: 0; + max-height: 100vh; + min-height: 50vh; + overflow-y: scroll; + overflow-x: hidden; + height: 100%; + scrollbar-width: none; + -ms-overflow-style: none; + &::-webkit-scrollbar { + display: none; + } } - .tri-layout-left { - grid-area: a; - min-width: 0; + .tri-layout-middle-contents { + max-width: 940px; + margin: 0 auto; } - .tri-layout-middle { - grid-area: b; - padding-top: $-m; - min-width: 0; +} +@include between($xxl, $xxxl) { + .tri-layout-sides-content, .tri-layout-container { + grid-template-columns: 1fr calc(940px + (2 * $-m)) 1fr; + } + .tri-layout-container { + grid-column-gap: $-s; + margin-inline-start: $-m; + margin-inline-end: $-m; } } @include smaller-than($xxl) { .tri-layout-container { - grid-template-areas: "c b b" - "a b b" - ". b b"; + grid-template-areas: "a b b"; grid-template-columns: 1fr 3fr; grid-template-rows: min-content min-content 1fr; padding-inline-end: $-l; } -} -@include between($xxl, $xxxl) { - .tri-layout-container { - grid-template-columns: 1fr calc(940px + (2 * $-m)) 1fr; - grid-column-gap: $-s; - margin-inline-start: $-m; - margin-inline-end: $-m; + .tri-layout-sides { + grid-column-start: a; + grid-column-end: a; } -} -@include between($l, $xxl) { - .tri-layout-left { - position: sticky; - top: $-m; + .tri-layout-sides-content { + display: block; } } -@include larger-than($xxl) { - .tri-layout-left-contents, .tri-layout-right-contents { - padding: $-xl $-m; +@include between($l, $xxl) { + .tri-layout-sides-content { position: sticky; top: 0; max-height: 100vh; @@ -408,12 +445,22 @@ body.flexbox { display: none; } } - .tri-layout-middle-contents { - max-width: 940px; - margin: 0 auto; +} +@include larger-than($l) { + .tri-layout-mobile-tabs { + display: none; + } + .tri-layout-left-contents > *, .tri-layout-right-contents > * { + @include lightDark(opacity, 0.6, 0.75); + transition: opacity ease-in-out 120ms; + &:hover, &:focus-within { + opacity: 1 !important; + } + @media (prefers-contrast: more) { + opacity: 1 !important; + } } } - @include smaller-than($l) { .tri-layout-container { grid-template-areas: none; @@ -421,18 +468,16 @@ body.flexbox { grid-column-gap: 0; padding-inline-end: $-xs; padding-inline-start: $-xs; - .tri-layout-left-contents, .tri-layout-right-contents { + .tri-layout-sides { padding-inline-start: $-m; padding-inline-end: $-m; + grid-column: 1/1; } .tri-layout-left > *, .tri-layout-right > * { display: none; pointer-events: none; } .tri-layout-left, .tri-layout-right { - grid-area: none; - grid-column: 1/1; - grid-row: 1; padding-top: 0 !important; } .tri-layout-middle { @@ -458,21 +503,6 @@ body.flexbox { } } } -@include larger-than($l) { - .tri-layout-mobile-tabs { - display: none; - } - .tri-layout-left-contents > *, .tri-layout-right-contents > * { - @include lightDark(opacity, 0.6, 0.75); - transition: opacity ease-in-out 120ms; - &:hover, &:focus-within { - opacity: 1 !important; - } - @media (prefers-contrast: more) { - opacity: 1 !important; - } - } -} @include smaller-than($m) { .tri-layout-container { diff --git a/resources/sass/_lists.scss b/resources/sass/_lists.scss index 32355119658..865b503c83e 100644 --- a/resources/sass/_lists.scss +++ b/resources/sass/_lists.scss @@ -342,7 +342,7 @@ details.sort-box[open] summary .caret-container svg { font-size: 0.9em; } .card .activity-list-item { - padding: $-s $-m; + padding-block: $-s; } .user-list-item { @@ -672,7 +672,7 @@ ul.pagination { @include lightDark(color, #555, #eee); fill: currentColor; text-align: start !important; - max-height: 80vh; + max-height: 500px; overflow-y: auto; &.anchor-left { inset-inline-end: auto; diff --git a/resources/sass/_pages.scss b/resources/sass/_pages.scss index fbac1de07c7..c06eca6d205 100755 --- a/resources/sass/_pages.scss +++ b/resources/sass/_pages.scss @@ -8,6 +8,8 @@ flex: 1; flex-direction: column; z-index: 10; + overflow: hidden; + border-radius: 0 0 8px 8px; } .mce-tinymce { @@ -19,6 +21,69 @@ } } +.page-editor-page-area { + width: 100%; + border-radius: 8px; + box-shadow: $bs-card; + @include lightDark(background-color, #FFF, #333) +} + +.page-edit-toolbar { + width: 100%; + margin: 0 auto; + display: grid; + grid-template-columns: minmax(max-content, 2fr) 1.5fr minmax(max-content, 2fr); + align-items: center; +} + +@include larger-than($xxl) { + .page-editor-wysiwyg .page-edit-toolbar, + .page-editor-wysiwyg .page-editor-page-area { + max-width: 1140px; + } + + .page-editor-wysiwyg .floating-toolbox { + position: absolute; + } +} + +@include smaller-than($m) { + .page-edit-toolbar { + display: flex; + flex-direction: row; + justify-content: space-between; + } +} + +.title-input.page-title { + font-size: 0.8em; + .input { + border: 0; + margin-bottom: -1px; + } + input[type="text"] { + max-width: 840px; + margin: 0 auto; + border: none; + height: auto; + display: block; + width: 100%; + font-size: 20px; + border-radius: 8px; + } + input[type="text"]:focus { + position: relative; + outline-offset: -1px; + outline: 1px dashed var(--color-primary); + box-shadow: $bs-card; + z-index: 50; + } +} + +.page-editor-markdown .title-input.page-title input[type="text"] { + max-width: 100%; +} + body.tox-fullscreen .page-editor .edit-area, body.markdown-fullscreen .page-editor .edit-area { z-index: 12; @@ -35,8 +100,7 @@ body.tox-fullscreen, body.markdown-fullscreen { overflow-x: scroll; overflow-y: visible; } - .page-edit-toolbar .grid.third { - display: block; + .page-edit-toolbar { white-space: nowrap; > div { display: inline-block; @@ -48,10 +112,10 @@ body.tox-fullscreen, body.markdown-fullscreen { position: fixed; z-index: 30; border-radius: 50%; - width: 56px; - height: 56px; - font-size: 24px; - right: $-m; + width: 52px; + height: 52px; + font-size: 26px; + right: $-xs; bottom: $-s; box-shadow: $bs-hover; background-color: currentColor; @@ -149,22 +213,27 @@ body.tox-fullscreen, body.markdown-fullscreen { } } -// Attribute form +// Page editor sidebar toolbox .floating-toolbox { - border: 1px solid #DDD; - @include lightDark(background-color, #fff, #222); - @include lightDark(border-color, #DDD, #000); - right: $-xl*2; - width: 48px; + @include lightDark(background-color, #FFF, #222); overflow: hidden; align-items: stretch; flex-direction: row; display: flex; - transition: width ease-in-out 180ms; - margin-top: -1px; - min-height: 0; + max-height: 100%; + border-radius: 8px; + box-shadow: $bs-card; + margin-bottom: auto; + margin-left: $-l; + position: relative; &.open { - width: 480px; + position: relative; + right: 0; + max-width: 480px; + margin-bottom: 0; + } + &:not(.open) .toolbox-tab-content { + display: none !important; } .toolbox-toggle svg { transition: transform ease-in-out 180ms; @@ -173,7 +242,7 @@ body.tox-fullscreen, body.markdown-fullscreen { transition: background-color ease-in-out 180ms; } &.open .toolbox-toggle { - background-color: rgba(255, 0, 0, 0.29); + background-color: rgba(255, 0, 0, 0.20); } &.open .toolbox-toggle svg { transform: rotate(180deg); @@ -183,28 +252,45 @@ body.tox-fullscreen, body.markdown-fullscreen { position: relative; } .tabs { - display: block; - border-inline-end: 1px solid #DDD; - @include lightDark(border-color, #ddd, #000); - width: 48px; + border-right: 1px solid #DDD; + @include lightDark(border-right-color, #DDD, #000); + width: 40px; flex: 0 1 auto; + margin-right: -1px; + } + .tabs-inner { + @include lightDark(background-color, #FFFFFF, #222); } .tabs svg { padding: 0; margin: 0; } - .tabs > button { - @include lightDark(color, rgba(0, 0, 0, 0.5), rgba(255, 255, 255, 0.5)); + .tabs-inner > button { + @include lightDark(color, rgba(0, 0, 0, 0.7), rgba(255, 255, 255, 0.5)); display: block; cursor: pointer; - padding: $-s $-m; - font-size: 16px; + padding: 10px $-xs; + font-size: 18px; line-height: 1.6; - border-bottom: 1px solid rgba(255, 255, 255, 0.3); } - &.open .tabs > button.active { - @include lightDark(color, #444, #EEE); - background-color: rgba(0, 0, 0, 0.1); + .tabs-inner > button:hover, &.open .tabs-inner > button.active { + color: var(--color-link) !important; + position: relative; + &:after { + content: ''; + display: block; + position: absolute; + left: 0; + width: 100%; + top: 0; + height: 100%; + background-color: currentColor; + opacity: .075; + } + } + &.open .tabs-inner > button.active { + border-inline-end: 1px solid var(--color-link); + margin-inline-end: -1px; } h4 { font-size: 24px; @@ -237,6 +323,33 @@ body.tox-fullscreen, body.markdown-fullscreen { } } +@include smaller-than($xxl) { + .floating-toolbox { + margin-left: $-s; + } +} + +@include smaller-than($s) { + .page-editor-page-area-wrap { + margin: 4px !important; + } + .floating-toolbox { + margin-left: 4px; + } + .floating-toolbox .tabs { + width: 32px; + } + .floating-toolbox .tabs-inner > button { + font-size: 12px; + } + .page-edit-toolbar { + padding-block: 0 !important; + } + .page-editor.toolbox-open .page-editor-page-area { + display: none; + } +} + .toolbox-tab-content { display: none; overflow-y: auto; diff --git a/resources/sass/print-styles.scss b/resources/sass/_print.scss similarity index 85% rename from resources/sass/print-styles.scss rename to resources/sass/_print.scss index 2c51bd75c69..f7d52a6ddd3 100644 --- a/resources/sass/print-styles.scss +++ b/resources/sass/_print.scss @@ -1,10 +1,3 @@ -@use "sass:math"; -@import "variables"; - -header { - display: none; -} - html, body { font-size: 12px; background-color: #FFF; diff --git a/resources/sass/_tinymce.scss b/resources/sass/_tinymce.scss index 13b6f676b69..7450f601684 100644 --- a/resources/sass/_tinymce.scss +++ b/resources/sass/_tinymce.scss @@ -9,6 +9,12 @@ z-index: 100; } +// Editor wrapper edits +.tox.tox-tinymce { + border-inline: 0; + border-bottom: 0; +} + // In editor body overrides .page-content.mce-content-body { padding-block-start: 1rem; diff --git a/resources/sass/styles.scss b/resources/sass/styles.scss index c0ce7ba6354..f52b6199262 100644 --- a/resources/sass/styles.scss +++ b/resources/sass/styles.scss @@ -23,6 +23,10 @@ @import "pages"; @import "content"; +@media print { + @import "print"; +} + // Jquery Sortable Styles .dragged { position: absolute; @@ -180,6 +184,14 @@ $loadingSize: 10px; z-index: 150; } +@include between($s, $m) { + #home-default > .grid.third { + display: block; + columns: 2; + column-gap: $-l !important; + } +} + .list-sort-container { display: inline-block; form { diff --git a/resources/views/books/index.blade.php b/resources/views/books/index.blade.php index bf9795b3ae4..0b407a8609a 100644 --- a/resources/views/books/index.blade.php +++ b/resources/views/books/index.blade.php @@ -17,7 +17,7 @@ @if(count($popular) > 0) @include('entities.list', ['entities' => $popular, 'style' => 'compact']) @else -
    {{ trans('entities.books_popular_empty') }}
    +

    {{ trans('entities.books_popular_empty') }}

    @endif @@ -26,7 +26,7 @@ @if(count($popular) > 0) @include('entities.list', ['entities' => $new, 'style' => 'compact']) @else -
    {{ trans('entities.books_new_empty') }}
    +

    {{ trans('entities.books_new_empty') }}

    @endif @stop @@ -36,7 +36,7 @@
    {{ trans('common.actions') }}
    @else

    {{ trans('entities.books_empty') }}

    - @if(userCan('books-create-all')) -
    @icon('edit'){{ trans('entities.create_now') }} + @if(userCan('book-create-all')) + @endif @endif \ No newline at end of file diff --git a/resources/views/books/show.blade.php b/resources/views/books/show.blade.php index 75b01a37924..8f7c3f6cf11 100644 --- a/resources/views/books/show.blade.php +++ b/resources/views/books/show.blade.php @@ -17,7 +17,7 @@ @section('body') -
    + @else -

    +

    {{ $emptyText ?? trans('common.no_items') }}

    @endif \ No newline at end of file diff --git a/resources/views/entities/watch-action.blade.php b/resources/views/entities/watch-action.blade.php index 34e287804cc..c87bc2b2b0c 100644 --- a/resources/views/entities/watch-action.blade.php +++ b/resources/views/entities/watch-action.blade.php @@ -1,7 +1,7 @@ {{ csrf_field() }} {{ method_field('PUT') }} - + + +
    +
    @include('common.loading-icon')
    +
    + +
    + \ No newline at end of file diff --git a/resources/views/layouts/parts/header-user-menu.blade.php b/resources/views/layouts/parts/header-user-menu.blade.php new file mode 100644 index 00000000000..0440e43d037 --- /dev/null +++ b/resources/views/layouts/parts/header-user-menu.blade.php @@ -0,0 +1,42 @@ + \ No newline at end of file diff --git a/resources/views/layouts/parts/header.blade.php b/resources/views/layouts/parts/header.blade.php new file mode 100644 index 00000000000..0e3ad44664b --- /dev/null +++ b/resources/views/layouts/parts/header.blade.php @@ -0,0 +1,25 @@ + diff --git a/resources/views/common/notifications.blade.php b/resources/views/layouts/parts/notifications.blade.php similarity index 100% rename from resources/views/common/notifications.blade.php rename to resources/views/layouts/parts/notifications.blade.php diff --git a/resources/views/common/skip-to-content.blade.php b/resources/views/layouts/parts/skip-to-content.blade.php similarity index 100% rename from resources/views/common/skip-to-content.blade.php rename to resources/views/layouts/parts/skip-to-content.blade.php diff --git a/resources/views/layouts/plain.blade.php b/resources/views/layouts/plain.blade.php index 043d8aa4824..37ebbe83d94 100644 --- a/resources/views/layouts/plain.blade.php +++ b/resources/views/layouts/plain.blade.php @@ -1,6 +1,6 @@ - {{ isset($pageTitle) ? $pageTitle . ' | ' : '' }}{{ setting('app-name') }} @@ -9,13 +9,12 @@ class="@yield('document-class')"> - + - - @include('common.custom-styles') - @include('common.custom-head') + @include('layouts.parts.custom-styles') + @include('layouts.parts.custom-head') @yield('content') diff --git a/resources/views/layouts/tri.blade.php b/resources/views/layouts/tri.blade.php index 14016830d4e..c3cedf0fbc2 100644 --- a/resources/views/layouts/tri.blade.php +++ b/resources/views/layouts/tri.blade.php @@ -27,10 +27,20 @@ class="tri-layout-mobile-tab px-m py-m text-link active">
    - - -
    @stop diff --git a/resources/views/pages/edit.blade.php b/resources/views/pages/edit.blade.php index 98adc849c26..841b275037b 100644 --- a/resources/views/pages/edit.blade.php +++ b/resources/views/pages/edit.blade.php @@ -10,7 +10,6 @@ @if(!$isDraft) {{ method_field('PUT') }} @endif @include('pages.parts.form', ['model' => $page]) - @include('pages.parts.editor-toolbox')
    diff --git a/resources/views/pages/parts/editor-toolbar.blade.php b/resources/views/pages/parts/editor-toolbar.blade.php index 3b438de7c35..d25f6a0a402 100644 --- a/resources/views/pages/parts/editor-toolbar.blade.php +++ b/resources/views/pages/parts/editor-toolbar.blade.php @@ -1,97 +1,116 @@ -
    -
    +
    -
    +
    +
    @icon('back'){{ trans('common.back') }} + class="icon-list-item text-link">@icon('back'){{ trans('common.back') }}
    +
    -
    - -
    - +
    + - +
    +
    \ No newline at end of file diff --git a/resources/views/pages/parts/editor-toolbox.blade.php b/resources/views/pages/parts/editor-toolbox.blade.php index 08e61e082a4..4ecac26a589 100644 --- a/resources/views/pages/parts/editor-toolbox.blade.php +++ b/resources/views/pages/parts/editor-toolbox.blade.php @@ -1,15 +1,17 @@
    -
    - - - @if(userCan('attachment-create-all')) - - @endif - - @if($comments->enabled()) - - @endif +
    +
    + + + @if(userCan('attachment-create-all')) + + @endif + + @if($comments->enabled()) + + @endif +
    diff --git a/resources/views/pages/parts/form.blade.php b/resources/views/pages/parts/form.blade.php index 6d59afe33da..e2c839cd220 100644 --- a/resources/views/pages/parts/form.blade.php +++ b/resources/views/pages/parts/form.blade.php @@ -1,4 +1,4 @@ -
    $model, 'editor' => $editor, 'isDraft' => $isDraft, 'draftsEnabled' => $draftsEnabled]) - {{--Title input--}} -
    -
    - @include('form.text', ['name' => 'name', 'model' => $model, 'placeholder' => trans('entities.pages_title')]) -
    -
    +
    +
    + {{--Title input--}} +
    +
    + @include('form.text', ['name' => 'name', 'model' => $model, 'placeholder' => trans('entities.pages_title')]) +
    +
    + +
    + {{--Editors--}} +
    - {{--Editors--}} -
    + {{--WYSIWYG Editor--}} + @if($editor === 'wysiwyg') + @include('pages.parts.wysiwyg-editor', ['model' => $model]) + @endif - {{--WYSIWYG Editor--}} - @if($editor === 'wysiwyg') - @include('pages.parts.wysiwyg-editor', ['model' => $model]) - @endif + {{--Markdown Editor--}} + @if($editor === 'markdown') + @include('pages.parts.markdown-editor', ['model' => $model]) + @endif - {{--Markdown Editor--}} - @if($editor === 'markdown') - @include('pages.parts.markdown-editor', ['model' => $model]) - @endif +
    +
    +
    + +
    + @include('pages.parts.editor-toolbox') +
    {{--Mobile Save Button--}} diff --git a/resources/views/pages/parts/image-manager-form.blade.php b/resources/views/pages/parts/image-manager-form.blade.php index 75750ef2f76..bd84e247d91 100644 --- a/resources/views/pages/parts/image-manager-form.blade.php +++ b/resources/views/pages/parts/image-manager-form.blade.php @@ -8,8 +8,17 @@ option:dropzone:file-accept="image/*" class="image-manager-details"> + @if($warning ?? '') +
    +
    @icon('warning')
    +
    {{ $warning }}
    +
    + @endif +
    + +
    {{ trans('common.delete') }} id="image-manager-replace" refs="dropzone@select-button" class="text-item">{{ trans('components.image_replace') }} + @endif
    diff --git a/resources/views/pages/parts/image-manager-list.blade.php b/resources/views/pages/parts/image-manager-list.blade.php index 7e660c747dc..ff6e23d6ac7 100644 --- a/resources/views/pages/parts/image-manager-list.blade.php +++ b/resources/views/pages/parts/image-manager-list.blade.php @@ -1,3 +1,9 @@ +@if($warning ?? '') +
    +
    @icon('warning')
    +
    {{ $warning }}
    +
    +@endif @foreach($images as $index => $image)