diff --git a/.env.example.complete b/.env.example.complete index e8520a24c..1a4f421f0 100644 --- a/.env.example.complete +++ b/.env.example.complete @@ -215,10 +215,11 @@ LDAP_SERVER=false LDAP_BASE_DN=false LDAP_DN=false LDAP_PASS=false -LDAP_USER_FILTER=false +LDAP_USER_FILTER="(&(uid={user}))" LDAP_VERSION=false LDAP_START_TLS=false LDAP_TLS_INSECURE=false +LDAP_TLS_CA_CERT=false LDAP_ID_ATTRIBUTE=uid LDAP_EMAIL_ATTRIBUTE=mail LDAP_DISPLAY_NAME_ATTRIBUTE=cn @@ -267,6 +268,7 @@ OIDC_ISSUER_DISCOVER=false OIDC_PUBLIC_KEY=null OIDC_AUTH_ENDPOINT=null OIDC_TOKEN_ENDPOINT=null +OIDC_USERINFO_ENDPOINT=null OIDC_ADDITIONAL_SCOPES=null OIDC_DUMP_USER_DETAILS=false OIDC_USER_TO_GROUPS=false @@ -324,6 +326,14 @@ FILE_UPLOAD_SIZE_LIMIT=50 # Can be 'a4' or 'letter'. EXPORT_PAGE_SIZE=a4 +# Export PDF Command +# Set a command which can be used to convert a HTML file into a PDF file. +# When false this will not be used. +# String values represent the command to be called for conversion. +# Supports '{input_html_path}' and '{output_pdf_path}' placeholder values. +# Example: EXPORT_PDF_COMMAND="/scripts/convert.sh {input_html_path} {output_pdf_path}" +EXPORT_PDF_COMMAND=false + # Set path to wkhtmltopdf binary for PDF generation. # Can be 'false' or a path path like: '/home/bins/wkhtmltopdf' # When false, BookStack will attempt to find a wkhtmltopdf in the application diff --git a/.github/translators.txt b/.github/translators.txt index f44042cd5..cf77951b0 100644 --- a/.github/translators.txt +++ b/.github/translators.txt @@ -389,7 +389,7 @@ Marc Hagen (MarcHagen) :: Dutch Kasper Alsøe (zeonos) :: Danish sultani :: Persian renge :: Korean -TheGatesDev (thegatesdev) :: Dutch +Tim (thegatesdev) :: Dutch; German Informal; Romanian; French; Catalan; Czech; Danish; German; Finnish; Hungarian; Italian; Japanese; Korean; Polish; Russian; Ukrainian; Chinese Simplified; Chinese Traditional; Portuguese, Brazilian; Persian; Spanish, Argentina; Croatian; Norwegian Nynorsk; Estonian; Uzbek; Norwegian Bokmal Irdi (irdiOL) :: Albanian KateBarber :: Welsh Twister (theuncles75) :: Hebrew @@ -410,3 +410,15 @@ cracrayol :: French CapuaSC :: Dutch Guardian75 :: German Informal mr-kanister :: German +Michele Bastianelli (makoblaster) :: Italian +jespernissen :: Danish +Andrey (avmaksimov) :: Russian +Gonzalo Loyola (AlFcl) :: Spanish, Argentina; Spanish +grobert63 :: French +wusst. (Supporti) :: German +MaximMaximS :: Czech +damian-klima :: Slovak +crow_ :: Latvian +JocelynDelalande :: French +Jan (JW-CH) :: German Informal +Timo B (lommes) :: German Informal diff --git a/.github/workflows/analyse-php.yml b/.github/workflows/analyse-php.yml index 4ddf51932..dbeaf9472 100644 --- a/.github/workflows/analyse-php.yml +++ b/.github/workflows/analyse-php.yml @@ -18,7 +18,7 @@ jobs: - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: 8.1 + php-version: 8.3 extensions: gd, mbstring, json, curl, xml, mysql, ldap - name: Get Composer Cache Directory @@ -27,10 +27,10 @@ jobs: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache composer packages - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-8.1 + key: ${{ runner.os }}-composer-8.3 restore-keys: ${{ runner.os }}-composer- - name: Install composer dependencies diff --git a/.github/workflows/test-migrations.yml b/.github/workflows/test-migrations.yml index 63f52a295..10cfbe172 100644 --- a/.github/workflows/test-migrations.yml +++ b/.github/workflows/test-migrations.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - php: ['8.0', '8.1', '8.2', '8.3'] + php: ['8.1', '8.2', '8.3'] steps: - uses: actions/checkout@v1 @@ -32,7 +32,7 @@ jobs: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache composer packages - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ matrix.php }} diff --git a/.github/workflows/test-php.yml b/.github/workflows/test-php.yml index 89ebf0dec..269f32632 100644 --- a/.github/workflows/test-php.yml +++ b/.github/workflows/test-php.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - php: ['8.0', '8.1', '8.2', '8.3'] + php: ['8.1', '8.2', '8.3'] steps: - uses: actions/checkout@v1 @@ -32,7 +32,7 @@ jobs: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache composer packages - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ matrix.php }} diff --git a/LICENSE b/LICENSE index 7727542f4..5ed2edf85 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015-2023, Dan Brown and the BookStack Project contributors. +Copyright (c) 2015-2024, Dan Brown and the BookStack Project contributors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/app/Access/Controllers/MfaTotpController.php b/app/Access/Controllers/MfaTotpController.php index f60644b84..5202fedc0 100644 --- a/app/Access/Controllers/MfaTotpController.php +++ b/app/Access/Controllers/MfaTotpController.php @@ -19,20 +19,25 @@ class MfaTotpController extends Controller protected const SETUP_SECRET_SESSION_KEY = 'mfa-setup-totp-secret'; + public function __construct( + protected TotpService $totp + ) { + } + /** * Show a view that generates and displays a TOTP QR code. */ - public function generate(TotpService $totp) + public function generate() { if (session()->has(static::SETUP_SECRET_SESSION_KEY)) { $totpSecret = decrypt(session()->get(static::SETUP_SECRET_SESSION_KEY)); } else { - $totpSecret = $totp->generateSecret(); + $totpSecret = $this->totp->generateSecret(); session()->put(static::SETUP_SECRET_SESSION_KEY, encrypt($totpSecret)); } - $qrCodeUrl = $totp->generateUrl($totpSecret, $this->currentOrLastAttemptedUser()); - $svg = $totp->generateQrCodeSvg($qrCodeUrl); + $qrCodeUrl = $this->totp->generateUrl($totpSecret, $this->currentOrLastAttemptedUser()); + $svg = $this->totp->generateQrCodeSvg($qrCodeUrl); $this->setPageTitle(trans('auth.mfa_gen_totp_title')); @@ -56,7 +61,7 @@ class MfaTotpController extends Controller 'code' => [ 'required', 'max:12', 'min:4', - new TotpValidationRule($totpSecret), + new TotpValidationRule($totpSecret, $this->totp), ], ]); @@ -87,7 +92,7 @@ class MfaTotpController extends Controller 'code' => [ 'required', 'max:12', 'min:4', - new TotpValidationRule($totpSecret), + new TotpValidationRule($totpSecret, $this->totp), ], ]); diff --git a/app/Access/Controllers/RegisterController.php b/app/Access/Controllers/RegisterController.php index 13b97f03c..e9812aa5d 100644 --- a/app/Access/Controllers/RegisterController.php +++ b/app/Access/Controllers/RegisterController.php @@ -15,24 +15,13 @@ use Illuminate\Validation\Rules\Password; class RegisterController extends Controller { - protected SocialDriverManager $socialDriverManager; - protected RegistrationService $registrationService; - protected LoginService $loginService; - - /** - * Create a new controller instance. - */ public function __construct( - SocialDriverManager $socialDriverManager, - RegistrationService $registrationService, - LoginService $loginService + protected SocialDriverManager $socialDriverManager, + protected RegistrationService $registrationService, + protected LoginService $loginService ) { $this->middleware('guest'); $this->middleware('guard:standard'); - - $this->socialDriverManager = $socialDriverManager; - $this->registrationService = $registrationService; - $this->loginService = $loginService; } /** @@ -87,6 +76,8 @@ class RegisterController extends Controller 'name' => ['required', 'min:2', 'max:100'], 'email' => ['required', 'email', 'max:255', 'unique:users'], 'password' => ['required', Password::default()], + // Basic honey for bots that must not be filled in + 'username' => ['prohibited'], ]); } } diff --git a/app/Access/LdapService.php b/app/Access/LdapService.php index 9d2667635..e822b09a6 100644 --- a/app/Access/LdapService.php +++ b/app/Access/LdapService.php @@ -209,6 +209,12 @@ class LdapService $this->ldap->setOption(null, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_NEVER); } + // Configure any user-provided CA cert files for LDAP. + // This option works globally and must be set before a connection is created. + if ($this->config['tls_ca_cert']) { + $this->configureTlsCaCerts($this->config['tls_ca_cert']); + } + $ldapHost = $this->parseServerString($this->config['server']); $ldapConnection = $this->ldap->connect($ldapHost); @@ -223,7 +229,14 @@ class LdapService // Start and verify TLS if it's enabled if ($this->config['start_tls']) { - $started = $this->ldap->startTls($ldapConnection); + try { + $started = $this->ldap->startTls($ldapConnection); + } catch (\Exception $exception) { + $error = $exception->getMessage() . ' :: ' . ldap_error($ldapConnection); + ldap_get_option($ldapConnection, LDAP_OPT_DIAGNOSTIC_MESSAGE, $detail); + Log::info("LDAP STARTTLS failure: {$error} {$detail}"); + throw new LdapException('Could not start TLS connection. Further details in the application log.'); + } if (!$started) { throw new LdapException('Could not start TLS connection'); } @@ -234,6 +247,33 @@ class LdapService return $this->ldapConnection; } + /** + * Configure TLS CA certs globally for ldap use. + * This will detect if the given path is a directory or file, and set the relevant + * LDAP TLS options appropriately otherwise throw an exception if no file/folder found. + * + * Note: When using a folder, certificates are expected to be correctly named by hash + * which can be done via the c_rehash utility. + * + * @throws LdapException + */ + protected function configureTlsCaCerts(string $caCertPath): void + { + $errMessage = "Provided path [{$caCertPath}] for LDAP TLS CA certs could not be resolved to an existing location"; + $path = realpath($caCertPath); + if ($path === false) { + throw new LdapException($errMessage); + } + + if (is_dir($path)) { + $this->ldap->setOption(null, LDAP_OPT_X_TLS_CACERTDIR, $path); + } else if (is_file($path)) { + $this->ldap->setOption(null, LDAP_OPT_X_TLS_CACERTFILE, $path); + } else { + throw new LdapException($errMessage); + } + } + /** * Parse an LDAP server string and return the host suitable for a connection. * Is flexible to formats such as 'ldap.example.com:8069' or 'ldaps://ldap.example.com'. @@ -249,13 +289,18 @@ class LdapService /** * Build a filter string by injecting common variables. + * Both "${var}" and "{var}" style placeholders are supported. + * Dollar based are old format but supported for compatibility. */ protected function buildFilter(string $filterString, array $attrs): string { $newAttrs = []; foreach ($attrs as $key => $attrText) { - $newKey = '${' . $key . '}'; - $newAttrs[$newKey] = $this->ldap->escape($attrText); + $escapedText = $this->ldap->escape($attrText); + $oldVarKey = '${' . $key . '}'; + $newVarKey = '{' . $key . '}'; + $newAttrs[$oldVarKey] = $escapedText; + $newAttrs[$newVarKey] = $escapedText; } return strtr($filterString, $newAttrs); diff --git a/app/Access/Mfa/TotpValidationRule.php b/app/Access/Mfa/TotpValidationRule.php index c38bde90b..63b575f19 100644 --- a/app/Access/Mfa/TotpValidationRule.php +++ b/app/Access/Mfa/TotpValidationRule.php @@ -2,36 +2,26 @@ namespace BookStack\Access\Mfa; -use Illuminate\Contracts\Validation\Rule; +use Closure; +use Illuminate\Contracts\Validation\ValidationRule; -class TotpValidationRule implements Rule +class TotpValidationRule implements ValidationRule { - protected $secret; - protected $totpService; - /** * Create a new rule instance. * Takes the TOTP secret that must be system provided, not user provided. */ - public function __construct(string $secret) - { - $this->secret = $secret; - $this->totpService = app()->make(TotpService::class); + public function __construct( + protected string $secret, + protected TotpService $totpService, + ) { } - /** - * Determine if the validation rule passes. - */ - public function passes($attribute, $value) + public function validate(string $attribute, mixed $value, Closure $fail): void { - return $this->totpService->verifyCode($value, $this->secret); - } - - /** - * Get the validation error message. - */ - public function message() - { - return trans('validation.totp'); + $passes = $this->totpService->verifyCode($value, $this->secret); + if (!$passes) { + $fail(trans('validation.totp')); + } } } diff --git a/app/Access/Oidc/OidcIdToken.php b/app/Access/Oidc/OidcIdToken.php index 5a395022a..68a8aa611 100644 --- a/app/Access/Oidc/OidcIdToken.php +++ b/app/Access/Oidc/OidcIdToken.php @@ -2,58 +2,8 @@ namespace BookStack\Access\Oidc; -class OidcIdToken +class OidcIdToken extends OidcJwtWithClaims implements ProvidesClaims { - protected array $header; - protected array $payload; - protected string $signature; - protected string $issuer; - protected array $tokenParts = []; - - /** - * @var array[]|string[] - */ - protected array $keys; - - public function __construct(string $token, string $issuer, array $keys) - { - $this->keys = $keys; - $this->issuer = $issuer; - $this->parse($token); - } - - /** - * Parse the token content into its components. - */ - protected function parse(string $token): void - { - $this->tokenParts = explode('.', $token); - $this->header = $this->parseEncodedTokenPart($this->tokenParts[0]); - $this->payload = $this->parseEncodedTokenPart($this->tokenParts[1] ?? ''); - $this->signature = $this->base64UrlDecode($this->tokenParts[2] ?? '') ?: ''; - } - - /** - * Parse a Base64-JSON encoded token part. - * Returns the data as a key-value array or empty array upon error. - */ - protected function parseEncodedTokenPart(string $part): array - { - $json = $this->base64UrlDecode($part) ?: '{}'; - $decoded = json_decode($json, true); - - return is_array($decoded) ? $decoded : []; - } - - /** - * Base64URL decode. Needs some character conversions to be compatible - * with PHP's default base64 handling. - */ - protected function base64UrlDecode(string $encoded): string - { - return base64_decode(strtr($encoded, '-_', '+/')); - } - /** * Validate all possible parts of the id token. * @@ -61,91 +11,12 @@ class OidcIdToken */ public function validate(string $clientId): bool { - $this->validateTokenStructure(); - $this->validateTokenSignature(); + parent::validateCommonTokenDetails($clientId); $this->validateTokenClaims($clientId); return true; } - /** - * Fetch a specific claim from this token. - * Returns null if it is null or does not exist. - * - * @return mixed|null - */ - public function getClaim(string $claim) - { - return $this->payload[$claim] ?? null; - } - - /** - * Get all returned claims within the token. - */ - public function getAllClaims(): array - { - return $this->payload; - } - - /** - * Replace the existing claim data of this token with that provided. - */ - public function replaceClaims(array $claims): void - { - $this->payload = $claims; - } - - /** - * Validate the structure of the given token and ensure we have the required pieces. - * As per https://datatracker.ietf.org/doc/html/rfc7519#section-7.2. - * - * @throws OidcInvalidTokenException - */ - protected function validateTokenStructure(): void - { - foreach (['header', 'payload'] as $prop) { - if (empty($this->$prop) || !is_array($this->$prop)) { - throw new OidcInvalidTokenException("Could not parse out a valid {$prop} within the provided token"); - } - } - - if (empty($this->signature) || !is_string($this->signature)) { - throw new OidcInvalidTokenException('Could not parse out a valid signature within the provided token'); - } - } - - /** - * Validate the signature of the given token and ensure it validates against the provided key. - * - * @throws OidcInvalidTokenException - */ - protected function validateTokenSignature(): void - { - if ($this->header['alg'] !== 'RS256') { - throw new OidcInvalidTokenException("Only RS256 signature validation is supported. Token reports using {$this->header['alg']}"); - } - - $parsedKeys = array_map(function ($key) { - try { - return new OidcJwtSigningKey($key); - } catch (OidcInvalidKeyException $e) { - throw new OidcInvalidTokenException('Failed to read signing key with error: ' . $e->getMessage()); - } - }, $this->keys); - - $parsedKeys = array_filter($parsedKeys); - - $contentToSign = $this->tokenParts[0] . '.' . $this->tokenParts[1]; - /** @var OidcJwtSigningKey $parsedKey */ - foreach ($parsedKeys as $parsedKey) { - if ($parsedKey->verify($contentToSign, $this->signature)) { - return; - } - } - - throw new OidcInvalidTokenException('Token signature could not be validated using the provided keys'); - } - /** * Validate the claims of the token. * As per https://openid.net/specs/openid-connect-basic-1_0.html#IDTokenValidation. @@ -156,27 +27,18 @@ class OidcIdToken { // 1. The Issuer Identifier for the OpenID Provider (which is typically obtained during Discovery) // MUST exactly match the value of the iss (issuer) Claim. - if (empty($this->payload['iss']) || $this->issuer !== $this->payload['iss']) { - throw new OidcInvalidTokenException('Missing or non-matching token issuer value'); - } + // Already done in parent. // 2. The Client MUST validate that the aud (audience) Claim contains its client_id value registered // at the Issuer identified by the iss (issuer) Claim as an audience. The ID Token MUST be rejected // if the ID Token does not list the Client as a valid audience, or if it contains additional // audiences not trusted by the Client. - if (empty($this->payload['aud'])) { - throw new OidcInvalidTokenException('Missing token audience value'); - } - + // Partially done in parent. $aud = is_string($this->payload['aud']) ? [$this->payload['aud']] : $this->payload['aud']; if (count($aud) !== 1) { throw new OidcInvalidTokenException('Token audience value has ' . count($aud) . ' values, Expected 1'); } - if ($aud[0] !== $clientId) { - throw new OidcInvalidTokenException('Token audience value did not match the expected client_id'); - } - // 3. If the ID Token contains multiple audiences, the Client SHOULD verify that an azp Claim is present. // NOTE: Addressed by enforcing a count of 1 above. diff --git a/app/Access/Oidc/OidcJwtWithClaims.php b/app/Access/Oidc/OidcJwtWithClaims.php new file mode 100644 index 000000000..06c04d81e --- /dev/null +++ b/app/Access/Oidc/OidcJwtWithClaims.php @@ -0,0 +1,174 @@ +keys = $keys; + $this->issuer = $issuer; + $this->parse($token); + } + + /** + * Parse the token content into its components. + */ + protected function parse(string $token): void + { + $this->tokenParts = explode('.', $token); + $this->header = $this->parseEncodedTokenPart($this->tokenParts[0]); + $this->payload = $this->parseEncodedTokenPart($this->tokenParts[1] ?? ''); + $this->signature = $this->base64UrlDecode($this->tokenParts[2] ?? '') ?: ''; + } + + /** + * Parse a Base64-JSON encoded token part. + * Returns the data as a key-value array or empty array upon error. + */ + protected function parseEncodedTokenPart(string $part): array + { + $json = $this->base64UrlDecode($part) ?: '{}'; + $decoded = json_decode($json, true); + + return is_array($decoded) ? $decoded : []; + } + + /** + * Base64URL decode. Needs some character conversions to be compatible + * with PHP's default base64 handling. + */ + protected function base64UrlDecode(string $encoded): string + { + return base64_decode(strtr($encoded, '-_', '+/')); + } + + /** + * Validate common parts of OIDC JWT tokens. + * + * @throws OidcInvalidTokenException + */ + public function validateCommonTokenDetails(string $clientId): bool + { + $this->validateTokenStructure(); + $this->validateTokenSignature(); + $this->validateCommonClaims($clientId); + + return true; + } + + /** + * Fetch a specific claim from this token. + * Returns null if it is null or does not exist. + */ + public function getClaim(string $claim): mixed + { + return $this->payload[$claim] ?? null; + } + + /** + * Get all returned claims within the token. + */ + public function getAllClaims(): array + { + return $this->payload; + } + + /** + * Replace the existing claim data of this token with that provided. + */ + public function replaceClaims(array $claims): void + { + $this->payload = $claims; + } + + /** + * Validate the structure of the given token and ensure we have the required pieces. + * As per https://datatracker.ietf.org/doc/html/rfc7519#section-7.2. + * + * @throws OidcInvalidTokenException + */ + protected function validateTokenStructure(): void + { + foreach (['header', 'payload'] as $prop) { + if (empty($this->$prop) || !is_array($this->$prop)) { + throw new OidcInvalidTokenException("Could not parse out a valid {$prop} within the provided token"); + } + } + + if (empty($this->signature) || !is_string($this->signature)) { + throw new OidcInvalidTokenException('Could not parse out a valid signature within the provided token'); + } + } + + /** + * Validate the signature of the given token and ensure it validates against the provided key. + * + * @throws OidcInvalidTokenException + */ + protected function validateTokenSignature(): void + { + if ($this->header['alg'] !== 'RS256') { + throw new OidcInvalidTokenException("Only RS256 signature validation is supported. Token reports using {$this->header['alg']}"); + } + + $parsedKeys = array_map(function ($key) { + try { + return new OidcJwtSigningKey($key); + } catch (OidcInvalidKeyException $e) { + throw new OidcInvalidTokenException('Failed to read signing key with error: ' . $e->getMessage()); + } + }, $this->keys); + + $parsedKeys = array_filter($parsedKeys); + + $contentToSign = $this->tokenParts[0] . '.' . $this->tokenParts[1]; + /** @var OidcJwtSigningKey $parsedKey */ + foreach ($parsedKeys as $parsedKey) { + if ($parsedKey->verify($contentToSign, $this->signature)) { + return; + } + } + + throw new OidcInvalidTokenException('Token signature could not be validated using the provided keys'); + } + + /** + * Validate common claims for OIDC JWT tokens. + * As per https://openid.net/specs/openid-connect-basic-1_0.html#IDTokenValidation + * and https://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse + * + * @throws OidcInvalidTokenException + */ + protected function validateCommonClaims(string $clientId): void + { + // 1. The Issuer Identifier for the OpenID Provider (which is typically obtained during Discovery) + // MUST exactly match the value of the iss (issuer) Claim. + if (empty($this->payload['iss']) || $this->issuer !== $this->payload['iss']) { + throw new OidcInvalidTokenException('Missing or non-matching token issuer value'); + } + + // 2. The Client MUST validate that the aud (audience) Claim contains its client_id value registered + // at the Issuer identified by the iss (issuer) Claim as an audience. The ID Token MUST be rejected + // if the ID Token does not list the Client as a valid audience. + if (empty($this->payload['aud'])) { + throw new OidcInvalidTokenException('Missing token audience value'); + } + + $aud = is_string($this->payload['aud']) ? [$this->payload['aud']] : $this->payload['aud']; + if (!in_array($clientId, $aud, true)) { + throw new OidcInvalidTokenException('Token audience value did not match the expected client_id'); + } + } +} diff --git a/app/Access/Oidc/OidcProviderSettings.php b/app/Access/Oidc/OidcProviderSettings.php index bea6a523e..71c3b5734 100644 --- a/app/Access/Oidc/OidcProviderSettings.php +++ b/app/Access/Oidc/OidcProviderSettings.php @@ -18,10 +18,10 @@ class OidcProviderSettings public string $issuer; public string $clientId; public string $clientSecret; - public ?string $redirectUri; public ?string $authorizationEndpoint; public ?string $tokenEndpoint; public ?string $endSessionEndpoint; + public ?string $userinfoEndpoint; /** * @var string[]|array[] @@ -37,7 +37,7 @@ class OidcProviderSettings /** * Apply an array of settings to populate setting properties within this class. */ - protected function applySettingsFromArray(array $settingsArray) + protected function applySettingsFromArray(array $settingsArray): void { foreach ($settingsArray as $key => $value) { if (property_exists($this, $key)) { @@ -51,9 +51,9 @@ class OidcProviderSettings * * @throws InvalidArgumentException */ - protected function validateInitial() + protected function validateInitial(): void { - $required = ['clientId', 'clientSecret', 'redirectUri', 'issuer']; + $required = ['clientId', 'clientSecret', 'issuer']; foreach ($required as $prop) { if (empty($this->$prop)) { throw new InvalidArgumentException("Missing required configuration \"{$prop}\" value"); @@ -73,12 +73,20 @@ class OidcProviderSettings public function validate(): void { $this->validateInitial(); + $required = ['keys', 'tokenEndpoint', 'authorizationEndpoint']; foreach ($required as $prop) { if (empty($this->$prop)) { throw new InvalidArgumentException("Missing required configuration \"{$prop}\" value"); } } + + $endpointProperties = ['tokenEndpoint', 'authorizationEndpoint', 'userinfoEndpoint']; + foreach ($endpointProperties as $prop) { + if (is_string($this->$prop) && !str_starts_with($this->$prop, 'https://')) { + throw new InvalidArgumentException("Endpoint value for \"{$prop}\" must start with https://"); + } + } } /** @@ -86,7 +94,7 @@ class OidcProviderSettings * * @throws OidcIssuerDiscoveryException */ - public function discoverFromIssuer(ClientInterface $httpClient, Repository $cache, int $cacheMinutes) + public function discoverFromIssuer(ClientInterface $httpClient, Repository $cache, int $cacheMinutes): void { try { $cacheKey = 'oidc-discovery::' . $this->issuer; @@ -128,6 +136,10 @@ class OidcProviderSettings $discoveredSettings['tokenEndpoint'] = $result['token_endpoint']; } + if (!empty($result['userinfo_endpoint'])) { + $discoveredSettings['userinfoEndpoint'] = $result['userinfo_endpoint']; + } + if (!empty($result['jwks_uri'])) { $keys = $this->loadKeysFromUri($result['jwks_uri'], $httpClient); $discoveredSettings['keys'] = $this->filterKeys($keys); @@ -175,9 +187,9 @@ class OidcProviderSettings /** * Get the settings needed by an OAuth provider, as a key=>value array. */ - public function arrayForProvider(): array + public function arrayForOAuthProvider(): array { - $settingKeys = ['clientId', 'clientSecret', 'redirectUri', 'authorizationEndpoint', 'tokenEndpoint']; + $settingKeys = ['clientId', 'clientSecret', 'authorizationEndpoint', 'tokenEndpoint', 'userinfoEndpoint']; $settings = []; foreach ($settingKeys as $setting) { $settings[$setting] = $this->$setting; diff --git a/app/Access/Oidc/OidcService.php b/app/Access/Oidc/OidcService.php index 036c9fc47..7c1760649 100644 --- a/app/Access/Oidc/OidcService.php +++ b/app/Access/Oidc/OidcService.php @@ -12,7 +12,6 @@ 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; @@ -91,10 +90,10 @@ class OidcService 'issuer' => $config['issuer'], 'clientId' => $config['client_id'], 'clientSecret' => $config['client_secret'], - 'redirectUri' => url('/oidc/callback'), 'authorizationEndpoint' => $config['authorization_endpoint'], 'tokenEndpoint' => $config['token_endpoint'], 'endSessionEndpoint' => is_string($config['end_session_endpoint']) ? $config['end_session_endpoint'] : null, + 'userinfoEndpoint' => $config['userinfo_endpoint'], ]); // Use keys if configured @@ -129,7 +128,10 @@ class OidcService */ protected function getProvider(OidcProviderSettings $settings): OidcOAuthProvider { - $provider = new OidcOAuthProvider($settings->arrayForProvider(), [ + $provider = new OidcOAuthProvider([ + ...$settings->arrayForOAuthProvider(), + 'redirectUri' => url('/oidc/callback'), + ], [ 'httpClient' => $this->http->buildClient(5), 'optionProvider' => new HttpBasicAuthOptionProvider(), ]); @@ -156,69 +158,6 @@ class OidcService return array_filter($scopeArr); } - /** - * Calculate the display name. - */ - protected function getUserDisplayName(OidcIdToken $token, string $defaultValue): string - { - $displayNameAttrString = $this->config()['display_name_claims'] ?? ''; - $displayNameAttrs = explode('|', $displayNameAttrString); - - $displayName = []; - foreach ($displayNameAttrs as $dnAttr) { - $dnComponent = $token->getClaim($dnAttr) ?? ''; - if ($dnComponent !== '') { - $displayName[] = $dnComponent; - } - } - - if (count($displayName) == 0) { - $displayName[] = $defaultValue; - } - - return implode(' ', $displayName); - } - - /** - * Extract the assigned groups from the id token. - * - * @return string[] - */ - protected function getUserGroups(OidcIdToken $token): array - { - $groupsAttr = $this->config()['groups_claim']; - if (empty($groupsAttr)) { - return []; - } - - $groupsList = Arr::get($token->getAllClaims(), $groupsAttr); - if (!is_array($groupsList)) { - return []; - } - - return array_values(array_filter($groupsList, function ($val) { - return is_string($val); - })); - } - - /** - * Extract the details of a user from an ID token. - * - * @return array{name: string, email: string, external_id: string, groups: string[]} - */ - protected function getUserDetails(OidcIdToken $token): array - { - $idClaim = $this->config()['external_id_claim']; - $id = $token->getClaim($idClaim); - - return [ - 'external_id' => $id, - 'email' => $token->getClaim('email'), - 'name' => $this->getUserDisplayName($token, $id), - 'groups' => $this->getUserGroups($token), - ]; - } - /** * Processes a received access token for a user. Login the user when * they exist, optionally registering them automatically. @@ -255,34 +194,35 @@ class OidcService try { $idToken->validate($settings->clientId); } catch (OidcInvalidTokenException $exception) { - throw new OidcException("ID token validate failed with error: {$exception->getMessage()}"); + throw new OidcException("ID token validation failed with error: {$exception->getMessage()}"); } - $userDetails = $this->getUserDetails($idToken); - $isLoggedIn = auth()->check(); - - if (empty($userDetails['email'])) { + $userDetails = $this->getUserDetailsFromToken($idToken, $accessToken, $settings); + if (empty($userDetails->email)) { throw new OidcException(trans('errors.oidc_no_email_address')); } + if (empty($userDetails->name)) { + $userDetails->name = $userDetails->externalId; + } + $isLoggedIn = auth()->check(); if ($isLoggedIn) { throw new OidcException(trans('errors.oidc_already_logged_in')); } try { $user = $this->registrationService->findOrRegister( - $userDetails['name'], - $userDetails['email'], - $userDetails['external_id'] + $userDetails->name, + $userDetails->email, + $userDetails->externalId ); } catch (UserRegistrationException $exception) { throw new OidcException($exception->getMessage()); } if ($this->shouldSyncGroups()) { - $groups = $userDetails['groups']; $detachExisting = $this->config()['remove_from_groups']; - $this->groupService->syncUserWithFoundGroups($user, $groups, $detachExisting); + $this->groupService->syncUserWithFoundGroups($user, $userDetails->groups ?? [], $detachExisting); } $this->loginService->login($user, 'oidc'); @@ -290,6 +230,45 @@ class OidcService return $user; } + /** + * @throws OidcException + */ + protected function getUserDetailsFromToken(OidcIdToken $idToken, OidcAccessToken $accessToken, OidcProviderSettings $settings): OidcUserDetails + { + $userDetails = new OidcUserDetails(); + $userDetails->populate( + $idToken, + $this->config()['external_id_claim'], + $this->config()['display_name_claims'] ?? '', + $this->config()['groups_claim'] ?? '' + ); + + if (!$userDetails->isFullyPopulated($this->shouldSyncGroups()) && !empty($settings->userinfoEndpoint)) { + $provider = $this->getProvider($settings); + $request = $provider->getAuthenticatedRequest('GET', $settings->userinfoEndpoint, $accessToken->getToken()); + $response = new OidcUserinfoResponse( + $provider->getResponse($request), + $settings->issuer, + $settings->keys, + ); + + try { + $response->validate($idToken->getClaim('sub'), $settings->clientId); + } catch (OidcInvalidTokenException $exception) { + throw new OidcException("Userinfo endpoint response validation failed with error: {$exception->getMessage()}"); + } + + $userDetails->populate( + $response, + $this->config()['external_id_claim'], + $this->config()['display_name_claims'] ?? '', + $this->config()['groups_claim'] ?? '' + ); + } + + return $userDetails; + } + /** * Get the OIDC config from the application. */ diff --git a/app/Access/Oidc/OidcUserDetails.php b/app/Access/Oidc/OidcUserDetails.php new file mode 100644 index 000000000..bccc49ee4 --- /dev/null +++ b/app/Access/Oidc/OidcUserDetails.php @@ -0,0 +1,75 @@ +externalId) + || empty($this->email) + || empty($this->name) + || ($groupSyncActive && empty($this->groups)); + + return !$hasEmpty; + } + + /** + * Populate user details from the given claim data. + */ + public function populate( + ProvidesClaims $claims, + string $idClaim, + string $displayNameClaims, + string $groupsClaim, + ): void { + $this->externalId = $claims->getClaim($idClaim) ?? $this->externalId; + $this->email = $claims->getClaim('email') ?? $this->email; + $this->name = static::getUserDisplayName($displayNameClaims, $claims) ?? $this->name; + $this->groups = static::getUserGroups($groupsClaim, $claims) ?? $this->groups; + } + + protected static function getUserDisplayName(string $displayNameClaims, ProvidesClaims $token): string + { + $displayNameClaimParts = explode('|', $displayNameClaims); + + $displayName = []; + foreach ($displayNameClaimParts as $claim) { + $component = $token->getClaim(trim($claim)) ?? ''; + if ($component !== '') { + $displayName[] = $component; + } + } + + return implode(' ', $displayName); + } + + protected static function getUserGroups(string $groupsClaim, ProvidesClaims $token): array + { + if (empty($groupsClaim)) { + return []; + } + + $groupsList = Arr::get($token->getAllClaims(), $groupsClaim); + if (!is_array($groupsList)) { + return []; + } + + return array_values(array_filter($groupsList, function ($val) { + return is_string($val); + })); + } +} diff --git a/app/Access/Oidc/OidcUserinfoResponse.php b/app/Access/Oidc/OidcUserinfoResponse.php new file mode 100644 index 000000000..9aded654e --- /dev/null +++ b/app/Access/Oidc/OidcUserinfoResponse.php @@ -0,0 +1,67 @@ +getHeader('Content-Type')[0]; + if ($contentType === 'application/json') { + $this->claims = json_decode($response->getBody()->getContents(), true); + } + + if ($contentType === 'application/jwt') { + $this->jwt = new OidcJwtWithClaims($response->getBody()->getContents(), $issuer, $keys); + $this->claims = $this->jwt->getAllClaims(); + } + } + + /** + * @throws OidcInvalidTokenException + */ + public function validate(string $idTokenSub, string $clientId): bool + { + if (!is_null($this->jwt)) { + $this->jwt->validateCommonTokenDetails($clientId); + } + + $sub = $this->getClaim('sub'); + + // Spec: v1.0 5.3.2: The sub (subject) Claim MUST always be returned in the UserInfo Response. + if (!is_string($sub) || empty($sub)) { + throw new OidcInvalidTokenException("No valid subject value found in userinfo data"); + } + + // Spec: v1.0 5.3.2: The sub Claim in the UserInfo Response MUST be verified to exactly match the sub Claim in the ID Token; + // if they do not match, the UserInfo Response values MUST NOT be used. + if ($idTokenSub !== $sub) { + throw new OidcInvalidTokenException("Subject value provided in the userinfo endpoint does not match the provided ID token value"); + } + + // Spec v1.0 5.3.4 Defines the following: + // Verify that the OP that responded was the intended OP through a TLS server certificate check, per RFC 6125 [RFC6125]. + // This is effectively done as part of the HTTP request we're making through CURLOPT_SSL_VERIFYHOST on the request. + // If the Client has provided a userinfo_encrypted_response_alg parameter during Registration, decrypt the UserInfo Response using the keys specified during Registration. + // We don't currently support JWT encryption for OIDC + // If the response was signed, the Client SHOULD validate the signature according to JWS [JWS]. + // This is done as part of the validateCommonClaims above. + + return true; + } + + public function getClaim(string $claim): mixed + { + return $this->claims[$claim] ?? null; + } + + public function getAllClaims(): array + { + return $this->claims; + } +} diff --git a/app/Access/Oidc/ProvidesClaims.php b/app/Access/Oidc/ProvidesClaims.php new file mode 100644 index 000000000..a3cf51655 --- /dev/null +++ b/app/Access/Oidc/ProvidesClaims.php @@ -0,0 +1,17 @@ +permissions - ->restrictEntityRelationQuery(Activity::query(), 'activities', 'entity_id', 'entity_type') + ->restrictEntityRelationQuery(Activity::query(), 'activities', 'loggable_id', 'loggable_type') ->orderBy('created_at', 'desc') ->with(['user']) ->skip($count * $page) ->take($count) ->get(); - $this->listLoader->loadIntoRelations($activityList->all(), 'entity', false); + $this->listLoader->loadIntoRelations($activityList->all(), 'loggable', false); return $this->filterSimilar($activityList); } @@ -59,14 +59,14 @@ class ActivityQueries $query->where(function (Builder $query) use ($queryIds) { foreach ($queryIds as $morphClass => $idArr) { $query->orWhere(function (Builder $innerQuery) use ($morphClass, $idArr) { - $innerQuery->where('entity_type', '=', $morphClass) - ->whereIn('entity_id', $idArr); + $innerQuery->where('loggable_type', '=', $morphClass) + ->whereIn('loggable_id', $idArr); }); } }); $activity = $query->orderBy('created_at', 'desc') - ->with(['entity' => function (Relation $query) { + ->with(['loggable' => function (Relation $query) { $query->withTrashed(); }, 'user.avatar']) ->skip($count * ($page - 1)) @@ -82,7 +82,7 @@ class ActivityQueries public function userActivity(User $user, int $count = 20, int $page = 0): array { $activityList = $this->permissions - ->restrictEntityRelationQuery(Activity::query(), 'activities', 'entity_id', 'entity_type') + ->restrictEntityRelationQuery(Activity::query(), 'activities', 'loggable_id', 'loggable_type') ->orderBy('created_at', 'desc') ->where('user_id', '=', $user->id) ->skip($count * $page) diff --git a/app/Activity/Controllers/AuditLogApiController.php b/app/Activity/Controllers/AuditLogApiController.php new file mode 100644 index 000000000..650d17446 --- /dev/null +++ b/app/Activity/Controllers/AuditLogApiController.php @@ -0,0 +1,28 @@ +checkPermission('settings-manage'); + $this->checkPermission('users-manage'); + + $query = Activity::query()->with(['user']); + + return $this->apiListingResponse($query, [ + 'id', 'type', 'detail', 'user_id', 'loggable_id', 'loggable_type', 'ip', 'created_at', + ]); + } +} diff --git a/app/Activity/Controllers/AuditLogController.php b/app/Activity/Controllers/AuditLogController.php index c3910a26b..641106d7f 100644 --- a/app/Activity/Controllers/AuditLogController.php +++ b/app/Activity/Controllers/AuditLogController.php @@ -32,7 +32,7 @@ class AuditLogController extends Controller $query = Activity::query() ->with([ - 'entity' => fn ($query) => $query->withTrashed(), + 'loggable' => fn ($query) => $query->withTrashed(), 'user', ]) ->orderBy($listOptions->getSort(), $listOptions->getOrder()); diff --git a/app/Activity/Models/Activity.php b/app/Activity/Models/Activity.php index 5fad9f1d3..ac9fec517 100644 --- a/app/Activity/Models/Activity.php +++ b/app/Activity/Models/Activity.php @@ -15,26 +15,24 @@ use Illuminate\Support\Str; /** * @property string $type * @property User $user - * @property Entity $entity + * @property Entity $loggable * @property string $detail - * @property string $entity_type - * @property int $entity_id + * @property string $loggable_type + * @property int $loggable_id * @property int $user_id * @property Carbon $created_at - * @property Carbon $updated_at */ class Activity extends Model { /** - * Get the entity for this activity. + * Get the loggable model related to this activity. + * Currently only used for entities (previously entity_[id/type] columns). + * Could be used for others but will need an audit of uses where assumed + * to be entities. */ - public function entity(): MorphTo + public function loggable(): MorphTo { - if ($this->entity_type === '') { - $this->entity_type = null; - } - - return $this->morphTo('entity'); + return $this->morphTo('loggable'); } /** @@ -47,8 +45,8 @@ class Activity extends Model public function jointPermissions(): HasMany { - return $this->hasMany(JointPermission::class, 'entity_id', 'entity_id') - ->whereColumn('activities.entity_type', '=', 'joint_permissions.entity_type'); + return $this->hasMany(JointPermission::class, 'entity_id', 'loggable_id') + ->whereColumn('activities.loggable_type', '=', 'joint_permissions.entity_type'); } /** @@ -74,6 +72,6 @@ class Activity extends Model */ public function isSimilarTo(self $activityB): bool { - return [$this->type, $this->entity_type, $this->entity_id] === [$activityB->type, $activityB->entity_type, $activityB->entity_id]; + return [$this->type, $this->loggable_type, $this->loggable_id] === [$activityB->type, $activityB->loggable_type, $activityB->loggable_id]; } } diff --git a/app/Activity/TagRepo.php b/app/Activity/TagRepo.php index 4f2dbed59..82c26b00e 100644 --- a/app/Activity/TagRepo.php +++ b/app/Activity/TagRepo.php @@ -38,7 +38,8 @@ class TagRepo DB::raw('SUM(IF(entity_type = \'book\', 1, 0)) as book_count'), DB::raw('SUM(IF(entity_type = \'bookshelf\', 1, 0)) as shelf_count'), ]) - ->orderBy($sort, $listOptions->getOrder()); + ->orderBy($sort, $listOptions->getOrder()) + ->whereHas('entity'); if ($nameFilter) { $query->where('name', '=', $nameFilter); diff --git a/app/Activity/Tools/ActivityLogger.php b/app/Activity/Tools/ActivityLogger.php index adda36c1b..415d11084 100644 --- a/app/Activity/Tools/ActivityLogger.php +++ b/app/Activity/Tools/ActivityLogger.php @@ -32,8 +32,8 @@ class ActivityLogger $activity->detail = $detailToStore; if ($detail instanceof Entity) { - $activity->entity_id = $detail->id; - $activity->entity_type = $detail->getMorphClass(); + $activity->loggable_id = $detail->id; + $activity->loggable_type = $detail->getMorphClass(); } $activity->save(); @@ -64,9 +64,9 @@ class ActivityLogger public function removeEntity(Entity $entity): void { $entity->activity()->update([ - 'detail' => $entity->name, - 'entity_id' => null, - 'entity_type' => null, + 'detail' => $entity->name, + 'loggable_id' => null, + 'loggable_type' => null, ]); } diff --git a/app/App/HomeController.php b/app/App/HomeController.php index 116f5c8a4..0585e0af5 100644 --- a/app/App/HomeController.php +++ b/app/App/HomeController.php @@ -9,7 +9,6 @@ use BookStack\Entities\Queries\QueryRecentlyViewed; use BookStack\Entities\Queries\QueryTopFavourites; use BookStack\Entities\Tools\PageContent; use BookStack\Http\Controller; -use BookStack\Uploads\FaviconHandler; use BookStack\Util\SimpleListOptions; use Illuminate\Http\Request; @@ -112,48 +111,4 @@ class HomeController extends Controller return view('home.default', $commonData); } - - /** - * Show the view for /robots.txt. - */ - public function robots() - { - $sitePublic = setting('app-public', false); - $allowRobots = config('app.allow_robots'); - - if ($allowRobots === null) { - $allowRobots = $sitePublic; - } - - return response() - ->view('misc.robots', ['allowRobots' => $allowRobots]) - ->header('Content-Type', 'text/plain'); - } - - /** - * Show the route for 404 responses. - */ - public function notFound() - { - return response()->view('errors.404', [], 404); - } - - /** - * Serve the application favicon. - * Ensures a 'favicon.ico' file exists at the web root location (if writable) to be served - * directly by the webserver in the future. - */ - 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/App/MetaController.php b/app/App/MetaController.php new file mode 100644 index 000000000..1515b4f7e --- /dev/null +++ b/app/App/MetaController.php @@ -0,0 +1,67 @@ +view('misc.robots', ['allowRobots' => $allowRobots]) + ->header('Content-Type', 'text/plain'); + } + + /** + * Show the route for 404 responses. + */ + public function notFound() + { + return response()->view('errors.404', [], 404); + } + + /** + * Serve the application favicon. + * Ensures a 'favicon.ico' file exists at the web root location (if writable) to be served + * directly by the webserver in the future. + */ + 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()); + } + + /** + * Show license information for the application. + */ + public function licenses() + { + $this->setPageTitle(trans('settings.licenses')); + + return view('help.licenses', [ + 'license' => file_get_contents(base_path('LICENSE')), + 'phpLibData' => file_get_contents(base_path('dev/licensing/php-library-licenses.txt')), + 'jsLibData' => file_get_contents(base_path('dev/licensing/js-library-licenses.txt')), + ]); + } +} diff --git a/app/App/Providers/AppServiceProvider.php b/app/App/Providers/AppServiceProvider.php index 0f4dc55dd..9012a07eb 100644 --- a/app/App/Providers/AppServiceProvider.php +++ b/app/App/Providers/AppServiceProvider.php @@ -25,7 +25,7 @@ class AppServiceProvider extends ServiceProvider * Custom container bindings to register. * @var string[] */ - public $bindings = [ + public array $bindings = [ ExceptionRenderer::class => BookStackExceptionHandlerPage::class, ]; @@ -33,7 +33,7 @@ class AppServiceProvider extends ServiceProvider * Custom singleton bindings to register. * @var string[] */ - public $singletons = [ + public array $singletons = [ 'activity' => ActivityLogger::class, SettingService::class => SettingService::class, SocialDriverManager::class => SocialDriverManager::class, @@ -42,11 +42,19 @@ class AppServiceProvider extends ServiceProvider ]; /** - * Bootstrap any application services. - * - * @return void + * Register any application services. */ - public function boot() + public function register(): void + { + $this->app->singleton(PermissionApplicator::class, function ($app) { + return new PermissionApplicator(null); + }); + } + + /** + * Bootstrap any application services. + */ + public function boot(): void { // Set root URL $appUrl = config('app.url'); @@ -67,16 +75,4 @@ class AppServiceProvider extends ServiceProvider 'page' => Page::class, ]); } - - /** - * Register any application services. - * - * @return void - */ - public function register() - { - $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 26d180310..23c339079 100644 --- a/app/App/Providers/AuthServiceProvider.php +++ b/app/App/Providers/AuthServiceProvider.php @@ -18,10 +18,8 @@ class AuthServiceProvider extends ServiceProvider { /** * Bootstrap the application services. - * - * @return void */ - public function boot() + public function boot(): void { // Password Configuration // Changes here must be reflected in ApiDocsGenerate@getValidationAsString. @@ -58,10 +56,8 @@ class AuthServiceProvider extends ServiceProvider /** * Register the application services. - * - * @return void */ - public function register() + public function register(): void { Auth::provider('external-users', function ($app, array $config) { return new ExternalBaseUserProvider($config['model']); diff --git a/app/App/Providers/EventServiceProvider.php b/app/App/Providers/EventServiceProvider.php index 4ec9facdf..4cd527ba4 100644 --- a/app/App/Providers/EventServiceProvider.php +++ b/app/App/Providers/EventServiceProvider.php @@ -29,20 +29,16 @@ class EventServiceProvider extends ServiceProvider /** * Register any events for your application. - * - * @return void */ - public function boot() + public function boot(): void { // } /** * Determine if events and listeners should be automatically discovered. - * - * @return bool */ - public function shouldDiscoverEvents() + public function shouldDiscoverEvents(): bool { return false; } diff --git a/app/App/Providers/RouteServiceProvider.php b/app/App/Providers/RouteServiceProvider.php index abd556244..3a155920e 100644 --- a/app/App/Providers/RouteServiceProvider.php +++ b/app/App/Providers/RouteServiceProvider.php @@ -24,10 +24,8 @@ class RouteServiceProvider extends ServiceProvider /** * Define your route model bindings, pattern filters, etc. - * - * @return void */ - public function boot() + public function boot(): void { $this->configureRateLimiting(); @@ -41,10 +39,8 @@ class RouteServiceProvider extends ServiceProvider * Define the "web" routes for the application. * * These routes all receive session state, CSRF protection, etc. - * - * @return void */ - protected function mapWebRoutes() + protected function mapWebRoutes(): void { Route::group([ 'middleware' => 'web', @@ -65,10 +61,8 @@ class RouteServiceProvider extends ServiceProvider * Define the "api" routes for the application. * * These routes are typically stateless. - * - * @return void */ - protected function mapApiRoutes() + protected function mapApiRoutes(): void { Route::group([ 'middleware' => 'api', @@ -81,10 +75,8 @@ class RouteServiceProvider extends ServiceProvider /** * Configure the rate limiters for the application. - * - * @return void */ - protected function configureRateLimiting() + protected function configureRateLimiting(): void { RateLimiter::for('api', function (Request $request) { return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); diff --git a/app/App/Providers/ThemeServiceProvider.php b/app/App/Providers/ThemeServiceProvider.php index 4c657d912..2cf581d38 100644 --- a/app/App/Providers/ThemeServiceProvider.php +++ b/app/App/Providers/ThemeServiceProvider.php @@ -10,10 +10,8 @@ class ThemeServiceProvider extends ServiceProvider { /** * Register services. - * - * @return void */ - public function register() + public function register(): void { // Register the ThemeService as a singleton $this->app->singleton(ThemeService::class, fn ($app) => new ThemeService()); @@ -21,10 +19,8 @@ class ThemeServiceProvider extends ServiceProvider /** * Bootstrap services. - * - * @return void */ - public function boot() + public function boot(): void { // Boot up the theme system $themeService = $this->app->make(ThemeService::class); diff --git a/app/App/Providers/TranslationServiceProvider.php b/app/App/Providers/TranslationServiceProvider.php index c1752f38e..b838129a6 100644 --- a/app/App/Providers/TranslationServiceProvider.php +++ b/app/App/Providers/TranslationServiceProvider.php @@ -11,10 +11,8 @@ class TranslationServiceProvider extends BaseProvider { /** * Register the service provider. - * - * @return void */ - public function register() + public function register(): void { $this->registerLoader(); @@ -41,10 +39,8 @@ class TranslationServiceProvider extends BaseProvider /** * Register the translation line loader. * Overrides the default register action from Laravel so a custom loader can be used. - * - * @return void */ - protected function registerLoader() + protected function registerLoader(): void { $this->app->singleton('translation.loader', function ($app) { return new FileLoader($app['files'], $app['path.lang']); diff --git a/app/App/Providers/ViewTweaksServiceProvider.php b/app/App/Providers/ViewTweaksServiceProvider.php index 10593ac8b..7115dcb51 100644 --- a/app/App/Providers/ViewTweaksServiceProvider.php +++ b/app/App/Providers/ViewTweaksServiceProvider.php @@ -12,10 +12,8 @@ class ViewTweaksServiceProvider extends ServiceProvider { /** * Bootstrap services. - * - * @return void */ - public function boot() + public function boot(): void { // Set paginator to use bootstrap-style pagination Paginator::useBootstrap(); diff --git a/app/Config/app.php b/app/Config/app.php index fc913eb8f..b96d0bdb7 100644 --- a/app/Config/app.php +++ b/app/Config/app.php @@ -9,6 +9,7 @@ */ use Illuminate\Support\Facades\Facade; +use Illuminate\Support\ServiceProvider; return [ @@ -113,46 +114,20 @@ return [ ], // Application Service Providers - 'providers' => [ - - // Laravel Framework Service Providers... - Illuminate\Auth\AuthServiceProvider::class, - Illuminate\Broadcasting\BroadcastServiceProvider::class, - Illuminate\Bus\BusServiceProvider::class, - Illuminate\Cache\CacheServiceProvider::class, - Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, - Illuminate\Cookie\CookieServiceProvider::class, - Illuminate\Database\DatabaseServiceProvider::class, - Illuminate\Encryption\EncryptionServiceProvider::class, - Illuminate\Filesystem\FilesystemServiceProvider::class, - Illuminate\Foundation\Providers\FoundationServiceProvider::class, - Illuminate\Hashing\HashServiceProvider::class, - Illuminate\Mail\MailServiceProvider::class, - Illuminate\Notifications\NotificationServiceProvider::class, - Illuminate\Pagination\PaginationServiceProvider::class, - Illuminate\Pipeline\PipelineServiceProvider::class, - Illuminate\Queue\QueueServiceProvider::class, - Illuminate\Redis\RedisServiceProvider::class, - Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, - Illuminate\Session\SessionServiceProvider::class, - Illuminate\Validation\ValidationServiceProvider::class, - Illuminate\View\ViewServiceProvider::class, - + 'providers' => ServiceProvider::defaultProviders()->merge([ // Third party service providers - Barryvdh\DomPDF\ServiceProvider::class, - Barryvdh\Snappy\ServiceProvider::class, SocialiteProviders\Manager\ServiceProvider::class, // BookStack custom service providers - \BookStack\App\Providers\ThemeServiceProvider::class, - \BookStack\App\Providers\AppServiceProvider::class, - \BookStack\App\Providers\AuthServiceProvider::class, - \BookStack\App\Providers\EventServiceProvider::class, - \BookStack\App\Providers\RouteServiceProvider::class, - \BookStack\App\Providers\TranslationServiceProvider::class, - \BookStack\App\Providers\ValidationRuleServiceProvider::class, - \BookStack\App\Providers\ViewTweaksServiceProvider::class, - ], + BookStack\App\Providers\ThemeServiceProvider::class, + BookStack\App\Providers\AppServiceProvider::class, + BookStack\App\Providers\AuthServiceProvider::class, + BookStack\App\Providers\EventServiceProvider::class, + BookStack\App\Providers\RouteServiceProvider::class, + BookStack\App\Providers\TranslationServiceProvider::class, + BookStack\App\Providers\ValidationRuleServiceProvider::class, + BookStack\App\Providers\ViewTweaksServiceProvider::class, + ])->toArray(), // Class Aliases // This array of class aliases to be registered on application start. diff --git a/app/Config/cache.php b/app/Config/cache.php index d1d47ab16..2ba16059a 100644 --- a/app/Config/cache.php +++ b/app/Config/cache.php @@ -53,7 +53,8 @@ return [ 'file' => [ 'driver' => 'file', - 'path' => storage_path('framework/cache'), + 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), ], 'memcached' => [ diff --git a/app/Config/dompdf.php b/app/Config/exports.php similarity index 91% rename from app/Config/dompdf.php rename to app/Config/exports.php index 09dd91bcc..88dc08cba 100644 --- a/app/Config/dompdf.php +++ b/app/Config/exports.php @@ -1,23 +1,45 @@ 'A4', + 'letter' => 'Letter', +]; + $dompdfPaperSizeMap = [ 'a4' => 'a4', 'letter' => 'letter', ]; +$exportPageSize = env('EXPORT_PAGE_SIZE', 'a4'); + return [ - 'show_warnings' => false, // Throw an Exception on warnings from dompdf + // Set a command which can be used to convert a HTML file into a PDF file. + // When false this will not be used. + // String values represent the command to be called for conversion. + // Supports '{input_html_path}' and '{output_pdf_path}' placeholder values. + // Example: EXPORT_PDF_COMMAND="/scripts/convert.sh {input_html_path} {output_pdf_path}" + 'pdf_command' => env('EXPORT_PDF_COMMAND', false), - 'options' => [ + // 2024-04: Snappy/WKHTMLtoPDF now considered deprecated in regard to BookStack support. + 'snappy' => [ + 'pdf_binary' => env('WKHTMLTOPDF', false), + 'options' => [ + 'print-media-type' => true, + 'outline' => true, + 'page-size' => $snappyPaperSizeMap[$exportPageSize] ?? 'A4', + ], + ], + + 'dompdf' => [ /** * The location of the DOMPDF font directory. * @@ -101,7 +123,7 @@ return [ /** * Whether to enable font subsetting or not. */ - 'enable_fontsubsetting' => false, + 'enable_font_subsetting' => false, /** * The PDF rendering backend to use. @@ -165,7 +187,7 @@ return [ * * @see CPDF_Adapter::PAPER_SIZES for valid sizes ('letter', 'legal', 'A4', etc.) */ - 'default_paper_size' => $dompdfPaperSizeMap[env('EXPORT_PAGE_SIZE', 'a4')] ?? 'a4', + 'default_paper_size' => $dompdfPaperSizeMap[$exportPageSize] ?? 'a4', /** * The default paper orientation. @@ -268,15 +290,6 @@ return [ */ 'font_height_ratio' => 1.1, - /** - * Enable CSS float. - * - * Allows people to disabled CSS float support - * - * @var bool - */ - 'enable_css_float' => true, - /** * Use the HTML5 Lib parser. * @@ -286,5 +299,4 @@ return [ */ 'enable_html5_parser' => true, ], - ]; diff --git a/app/Config/hashing.php b/app/Config/hashing.php index 585ee094c..91d0db16b 100644 --- a/app/Config/hashing.php +++ b/app/Config/hashing.php @@ -21,7 +21,8 @@ return [ // passwords are hashed using the Bcrypt algorithm. This will allow you // to control the amount of time it takes to hash the given password. 'bcrypt' => [ - 'rounds' => env('BCRYPT_ROUNDS', 10), + 'rounds' => env('BCRYPT_ROUNDS', 12), + 'verify' => true, ], // Argon Options diff --git a/app/Config/logging.php b/app/Config/logging.php index d49cd727d..f5cbd5ffc 100644 --- a/app/Config/logging.php +++ b/app/Config/logging.php @@ -4,6 +4,7 @@ use Monolog\Formatter\LineFormatter; use Monolog\Handler\ErrorLogHandler; use Monolog\Handler\NullHandler; use Monolog\Handler\StreamHandler; +use Monolog\Processor\PsrLogMessageProcessor; /** * Logging configuration options. @@ -49,6 +50,7 @@ return [ 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', 'days' => 14, + 'replace_placeholders' => true, ], 'daily' => [ @@ -56,6 +58,7 @@ return [ 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', 'days' => 7, + 'replace_placeholders' => true, ], 'stderr' => [ @@ -65,16 +68,20 @@ return [ 'with' => [ 'stream' => 'php://stderr', ], + 'processors' => [PsrLogMessageProcessor::class], ], 'syslog' => [ 'driver' => 'syslog', 'level' => 'debug', + 'facility' => LOG_USER, + 'replace_placeholders' => true, ], 'errorlog' => [ 'driver' => 'errorlog', 'level' => 'debug', + 'replace_placeholders' => true, ], // Custom errorlog implementation that logs out a plain, @@ -88,6 +95,7 @@ return [ 'formatter_with' => [ 'format' => '%message%', ], + 'replace_placeholders' => true, ], 'null' => [ diff --git a/app/Config/oidc.php b/app/Config/oidc.php index 7f8f40d41..8b5470931 100644 --- a/app/Config/oidc.php +++ b/app/Config/oidc.php @@ -35,6 +35,7 @@ return [ // OAuth2 endpoints. 'authorization_endpoint' => env('OIDC_AUTH_ENDPOINT', null), 'token_endpoint' => env('OIDC_TOKEN_ENDPOINT', null), + 'userinfo_endpoint' => env('OIDC_USERINFO_ENDPOINT', null), // OIDC RP-Initiated Logout endpoint URL. // A false value force-disables RP-Initiated Logout. diff --git a/app/Config/queue.php b/app/Config/queue.php index a14799f35..795a79325 100644 --- a/app/Config/queue.php +++ b/app/Config/queue.php @@ -40,6 +40,12 @@ return [ ], + // Job batching + 'batching' => [ + 'database' => 'mysql', + 'table' => 'job_batches', + ], + // Failed queue job logging 'failed' => [ 'driver' => 'database-uuids', diff --git a/app/Config/services.php b/app/Config/services.php index a035f1056..d73458231 100644 --- a/app/Config/services.php +++ b/app/Config/services.php @@ -123,7 +123,7 @@ return [ 'dn' => env('LDAP_DN', false), 'pass' => env('LDAP_PASS', false), 'base_dn' => env('LDAP_BASE_DN', false), - 'user_filter' => env('LDAP_USER_FILTER', '(&(uid=${user}))'), + 'user_filter' => env('LDAP_USER_FILTER', '(&(uid={user}))'), 'version' => env('LDAP_VERSION', false), 'id_attribute' => env('LDAP_ID_ATTRIBUTE', 'uid'), 'email_attribute' => env('LDAP_EMAIL_ATTRIBUTE', 'mail'), @@ -133,6 +133,7 @@ return [ 'group_attribute' => env('LDAP_GROUP_ATTRIBUTE', 'memberOf'), 'remove_from_groups' => env('LDAP_REMOVE_FROM_GROUPS', false), 'tls_insecure' => env('LDAP_TLS_INSECURE', false), + 'tls_ca_cert' => env('LDAP_TLS_CA_CERT', false), 'start_tls' => env('LDAP_START_TLS', false), 'thumbnail_attribute' => env('LDAP_THUMBNAIL_ATTRIBUTE', null), ], diff --git a/app/Config/session.php b/app/Config/session.php index a00d75807..f2ec2509f 100644 --- a/app/Config/session.php +++ b/app/Config/session.php @@ -85,4 +85,11 @@ return [ // do not enable this as other CSRF protection services are in place. // Options: lax, strict, none 'same_site' => 'lax', + + + // Partitioned Cookies + // Setting this value to true will tie the cookie to the top-level site for + // a cross-site context. Partitioned cookies are accepted by the browser + // when flagged "secure" and the Same-Site attribute is set to "none". + 'partitioned' => false, ]; diff --git a/app/Config/snappy.php b/app/Config/snappy.php deleted file mode 100644 index a87ce805f..000000000 --- a/app/Config/snappy.php +++ /dev/null @@ -1,34 +0,0 @@ - 'A4', - 'letter' => 'Letter', -]; - -return [ - 'pdf' => [ - 'enabled' => true, - 'binary' => file_exists(base_path('wkhtmltopdf')) ? base_path('wkhtmltopdf') : env('WKHTMLTOPDF', false), - 'timeout' => false, - 'options' => [ - 'outline' => true, - 'page-size' => $snappyPaperSizeMap[env('EXPORT_PAGE_SIZE', 'a4')] ?? 'A4', - ], - 'env' => [], - ], - 'image' => [ - 'enabled' => false, - 'binary' => '/usr/local/bin/wkhtmltoimage', - 'timeout' => false, - 'options' => [], - 'env' => [], - ], -]; diff --git a/app/Console/Commands/ClearActivityCommand.php b/app/Console/Commands/ClearActivityCommand.php index 54085c12b..6ec2e1a2a 100644 --- a/app/Console/Commands/ClearActivityCommand.php +++ b/app/Console/Commands/ClearActivityCommand.php @@ -19,7 +19,7 @@ class ClearActivityCommand extends Command * * @var string */ - protected $description = 'Clear user activity from the system'; + protected $description = 'Clear user (audit-log) activity from the system'; /** * Execute the console command. diff --git a/app/Entities/Models/Entity.php b/app/Entities/Models/Entity.php index f07d372c3..0de83c938 100644 --- a/app/Entities/Models/Entity.php +++ b/app/Entities/Models/Entity.php @@ -137,7 +137,7 @@ abstract class Entity extends Model implements Sluggable, Favouritable, Viewable */ public function activity(): MorphMany { - return $this->morphMany(Activity::class, 'entity') + return $this->morphMany(Activity::class, 'loggable') ->orderBy('created_at', 'desc'); } diff --git a/app/Entities/Tools/PdfGenerator.php b/app/Entities/Tools/PdfGenerator.php index d0c9158a9..7c6dfaa6e 100644 --- a/app/Entities/Tools/PdfGenerator.php +++ b/app/Entities/Tools/PdfGenerator.php @@ -2,27 +2,28 @@ namespace BookStack\Entities\Tools; -use Barryvdh\DomPDF\Facade\Pdf as DomPDF; -use Barryvdh\Snappy\Facades\SnappyPdf; +use BookStack\Exceptions\PdfExportException; +use Knp\Snappy\Pdf as SnappyPdf; +use Dompdf\Dompdf; +use Symfony\Component\Process\Process; class PdfGenerator { const ENGINE_DOMPDF = 'dompdf'; const ENGINE_WKHTML = 'wkhtml'; + const ENGINE_COMMAND = 'command'; /** * Generate PDF content from the given HTML content. + * @throws PdfExportException */ public function fromHtml(string $html): string { - if ($this->getActiveEngine() === self::ENGINE_WKHTML) { - $pdf = SnappyPDF::loadHTML($html); - $pdf->setOption('print-media-type', true); - } else { - $pdf = DomPDF::loadHTML($html); - } - - return $pdf->output(); + return match ($this->getActiveEngine()) { + self::ENGINE_COMMAND => $this->renderUsingCommand($html), + self::ENGINE_WKHTML => $this->renderUsingWkhtml($html), + default => $this->renderUsingDomPdf($html) + }; } /** @@ -31,8 +32,101 @@ class PdfGenerator */ public function getActiveEngine(): string { - $useWKHTML = config('snappy.pdf.binary') !== false && config('app.allow_untrusted_server_fetching') === true; + if (config('exports.pdf_command')) { + return self::ENGINE_COMMAND; + } - return $useWKHTML ? self::ENGINE_WKHTML : self::ENGINE_DOMPDF; + if ($this->getWkhtmlBinaryPath() && config('app.allow_untrusted_server_fetching') === true) { + return self::ENGINE_WKHTML; + } + + return self::ENGINE_DOMPDF; + } + + protected function getWkhtmlBinaryPath(): string + { + $wkhtmlBinaryPath = config('exports.snappy.pdf_binary'); + if (file_exists(base_path('wkhtmltopdf'))) { + $wkhtmlBinaryPath = base_path('wkhtmltopdf'); + } + + return $wkhtmlBinaryPath ?: ''; + } + + protected function renderUsingDomPdf(string $html): string + { + $options = config('exports.dompdf'); + $domPdf = new Dompdf($options); + $domPdf->setBasePath(base_path('public')); + + $domPdf->loadHTML($this->convertEntities($html)); + $domPdf->render(); + + return (string) $domPdf->output(); + } + + /** + * @throws PdfExportException + */ + protected function renderUsingCommand(string $html): string + { + $command = config('exports.pdf_command'); + $inputHtml = tempnam(sys_get_temp_dir(), 'bs-pdfgen-html-'); + $outputPdf = tempnam(sys_get_temp_dir(), 'bs-pdfgen-output-'); + + $replacementsByPlaceholder = [ + '{input_html_path}' => $inputHtml, + '{output_pdf_path}' => $outputPdf, + ]; + + foreach ($replacementsByPlaceholder as $placeholder => $replacement) { + $command = str_replace($placeholder, escapeshellarg($replacement), $command); + } + + file_put_contents($inputHtml, $html); + + $process = Process::fromShellCommandline($command); + $process->setTimeout(15); + $process->run(); + + if (!$process->isSuccessful()) { + throw new PdfExportException("PDF Export via command failed with exit code {$process->getExitCode()}, stdout: {$process->getOutput()}, stderr: {$process->getErrorOutput()}"); + } + + $pdfContents = file_get_contents($outputPdf); + unlink($outputPdf); + + if ($pdfContents === false) { + throw new PdfExportException("PDF Export via command failed, unable to read PDF output file"); + } else if (empty($pdfContents)) { + throw new PdfExportException("PDF Export via command failed, PDF output file is empty"); + } + + return $pdfContents; + } + + protected function renderUsingWkhtml(string $html): string + { + $snappy = new SnappyPdf($this->getWkhtmlBinaryPath()); + $options = config('exports.snappy.options'); + return $snappy->getOutputFromHtml($html, $options); + } + + /** + * Taken from https://github.com/barryvdh/laravel-dompdf/blob/v2.1.1/src/PDF.php + * Copyright (c) 2021 barryvdh, MIT License + * https://github.com/barryvdh/laravel-dompdf/blob/v2.1.1/LICENSE + */ + protected function convertEntities(string $subject): string + { + $entities = [ + '€' => '€', + '£' => '£', + ]; + + foreach ($entities as $search => $replace) { + $subject = str_replace($search, $replace, $subject); + } + return $subject; } } diff --git a/app/Exceptions/PdfExportException.php b/app/Exceptions/PdfExportException.php new file mode 100644 index 000000000..beeda814f --- /dev/null +++ b/app/Exceptions/PdfExportException.php @@ -0,0 +1,7 @@ + \BookStack\Http\Middleware\Authenticate::class, 'can' => \BookStack\Http\Middleware\CheckUserHasPermission::class, 'guest' => \BookStack\Http\Middleware\RedirectIfAuthenticated::class, diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index 069973a95..745f7196d 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -6,19 +6,16 @@ use BookStack\App\Providers\RouteServiceProvider; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Symfony\Component\HttpFoundation\Response; class RedirectIfAuthenticated { /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request - * @param \Closure $next - * @param string|null ...$guards - * - * @return mixed + * @param Closure(Request): (Response) $next */ - public function handle(Request $request, Closure $next, ...$guards) + public function handle(Request $request, Closure $next, string ...$guards): Response { $guards = empty($guards) ? [null] : $guards; diff --git a/app/Http/Middleware/ThrottleApiRequests.php b/app/Http/Middleware/ThrottleApiRequests.php index c63d0c603..cef2d3906 100644 --- a/app/Http/Middleware/ThrottleApiRequests.php +++ b/app/Http/Middleware/ThrottleApiRequests.php @@ -9,7 +9,7 @@ class ThrottleApiRequests extends Middleware /** * Resolve the number of attempts if the user is authenticated or not. */ - protected function resolveMaxAttempts($request, $maxAttempts) + protected function resolveMaxAttempts($request, $maxAttempts): int { return (int) config('api.requests_per_minute'); } diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php index 7bd89ee51..c13d631fe 100644 --- a/app/Http/Middleware/TrustHosts.php +++ b/app/Http/Middleware/TrustHosts.php @@ -9,9 +9,9 @@ class TrustHosts extends Middleware /** * Get the host patterns that should be trusted. * - * @return array + * @return array */ - public function hosts() + public function hosts(): array { return [ $this->allSubdomainsOfApplicationUrl(), diff --git a/app/Translation/FileLoader.php b/app/Translation/FileLoader.php index de1124046..1fec4d18b 100644 --- a/app/Translation/FileLoader.php +++ b/app/Translation/FileLoader.php @@ -8,16 +8,22 @@ class FileLoader extends BaseLoader { /** * Load the messages for the given locale. + * * Extends Laravel's translation FileLoader to look in multiple directories * so that we can load in translation overrides from the theme file if wanted. * + * Note: As of using Laravel 10, this may now be redundant since Laravel's + * file loader supports multiple paths. This needs further testing though + * to confirm if Laravel works how we expect, since we specifically need + * the theme folder to be able to partially override core lang files. + * * @param string $locale * @param string $group * @param string|null $namespace * * @return array */ - public function load($locale, $group, $namespace = null) + public function load($locale, $group, $namespace = null): array { if ($group === '*' && $namespace === '*') { return $this->loadJsonPaths($locale); @@ -25,8 +31,8 @@ class FileLoader extends BaseLoader if (is_null($namespace) || $namespace === '*') { $themePath = theme_path('lang'); - $themeTranslations = $themePath ? $this->loadPath($themePath, $locale, $group) : []; - $originalTranslations = $this->loadPath($this->path, $locale, $group); + $themeTranslations = $themePath ? $this->loadPaths([$themePath], $locale, $group) : []; + $originalTranslations = $this->loadPaths($this->paths, $locale, $group); return array_merge($originalTranslations, $themeTranslations); } diff --git a/app/Uploads/ImageResizer.php b/app/Uploads/ImageResizer.php index 4dc1b0b99..d09177fff 100644 --- a/app/Uploads/ImageResizer.php +++ b/app/Uploads/ImageResizer.php @@ -6,8 +6,12 @@ use BookStack\Exceptions\ImageUploadException; use Exception; use GuzzleHttp\Psr7\Utils; use Illuminate\Support\Facades\Cache; -use Intervention\Image\Gd\Driver; -use Intervention\Image\Image as InterventionImage; +use Intervention\Image\Decoders\BinaryImageDecoder; +use Intervention\Image\Drivers\Gd\Driver; +use Intervention\Image\Encoders\AutoEncoder; +use Intervention\Image\Encoders\PngEncoder; +use Intervention\Image\Interfaces\ImageInterface as InterventionImage; +use Intervention\Image\ImageManager; class ImageResizer { @@ -124,15 +128,17 @@ class ImageResizer $this->orientImageToOriginalExif($thumb, $imageData); if ($keepRatio) { - $thumb->resize($width, $height, function ($constraint) { - $constraint->aspectRatio(); - $constraint->upsize(); - }); + $thumb->scaleDown($width, $height); } else { - $thumb->fit($width, $height); + $thumb->cover($width, $height); } - $thumbData = (string) $thumb->encode($format); + $encoder = match ($format) { + 'png' => new PngEncoder(), + default => new AutoEncoder(), + }; + + $thumbData = (string) $thumb->encode($encoder); // Use original image data if we're keeping the ratio // and the resizing does not save any space. @@ -150,8 +156,9 @@ class ImageResizer */ protected function interventionFromImageData(string $imageData): InterventionImage { - $driver = new Driver(); - return $driver->decoder->initFromBinary($imageData); + $manager = new ImageManager(new Driver()); + + return $manager->read($imageData, BinaryImageDecoder::class); } /** diff --git a/composer.json b/composer.json index 85bb3cbae..b90ab224e 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,7 @@ "license": "MIT", "type": "project", "require": { - "php": "^8.0.2", + "php": "^8.1.0", "ext-curl": "*", "ext-dom": "*", "ext-fileinfo": "*", @@ -17,14 +17,14 @@ "ext-mbstring": "*", "ext-xml": "*", "bacon/bacon-qr-code": "^2.0", - "barryvdh/laravel-dompdf": "^2.0", - "barryvdh/laravel-snappy": "^1.0", "doctrine/dbal": "^3.5", + "dompdf/dompdf": "^2.0", "guzzlehttp/guzzle": "^7.4", - "intervention/image": "^2.7", - "laravel/framework": "^9.0", + "intervention/image": "^3.5", + "knplabs/knp-snappy": "^1.5", + "laravel/framework": "^10.10", "laravel/socialite": "^5.10", - "laravel/tinker": "^2.6", + "laravel/tinker": "^2.8", "league/commonmark": "^2.3", "league/flysystem-aws-s3-v3": "^3.0", "league/html-to-markdown": "^5.0.0", @@ -39,17 +39,17 @@ "socialiteproviders/okta": "^4.2", "socialiteproviders/twitch": "^5.3", "ssddanbrown/htmldiff": "^1.0.2", - "ssddanbrown/symfony-mailer": "6.0.x-dev" + "ssddanbrown/symfony-mailer": "6.4.x-dev" }, "require-dev": { "fakerphp/faker": "^1.21", "itsgoingd/clockwork": "^5.1", "mockery/mockery": "^1.5", - "nunomaduro/collision": "^6.4", + "nunomaduro/collision": "^7.0", "larastan/larastan": "^2.7", - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "^10.0", "squizlabs/php_codesniffer": "^3.7", - "ssddanbrown/asserthtml": "^2.0" + "ssddanbrown/asserthtml": "^3.0" }, "autoload": { "psr-4": { @@ -72,6 +72,10 @@ "lint": "phpcs", "test": "phpunit", "t-reset": "@php artisan test --recreate-databases", + "build-licenses": [ + "@php ./dev/licensing/gen-js-licenses", + "@php ./dev/licensing/gen-php-licenses" + ], "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" @@ -99,7 +103,7 @@ "preferred-install": "dist", "sort-packages": true, "platform": { - "php": "8.0.2" + "php": "8.1.0" } }, "extra": { diff --git a/composer.lock b/composer.lock index e1033b5b2..b5b08a902 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7c64775f79832d552a2ef40e11f79c40", + "content-hash": "97259e40ffe5518cfcdf1e32eacbb175", "packages": [ { "name": "aws/aws-crt-php", - "version": "v1.2.4", + "version": "v1.2.5", "source": { "type": "git", "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "eb0c6e4e142224a10b08f49ebf87f32611d162b2" + "reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/eb0c6e4e142224a10b08f49ebf87f32611d162b2", - "reference": "eb0c6e4e142224a10b08f49ebf87f32611d162b2", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/0ea1f04ec5aa9f049f97e012d1ed63b76834a31b", + "reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b", "shasum": "" }, "require": { @@ -56,22 +56,22 @@ ], "support": { "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.4" + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.5" }, - "time": "2023-11-08T00:42:13+00:00" + "time": "2024-04-19T21:30:56+00:00" }, { "name": "aws/aws-sdk-php", - "version": "3.300.6", + "version": "3.305.9", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "957ccef631684d612d01ced2fa3b0506f2ec78c3" + "reference": "a611af9a40a5d93f2f04427b322dbb6044e90327" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/957ccef631684d612d01ced2fa3b0506f2ec78c3", - "reference": "957ccef631684d612d01ced2fa3b0506f2ec78c3", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/a611af9a40a5d93f2f04427b322dbb6044e90327", + "reference": "a611af9a40a5d93f2f04427b322dbb6044e90327", "shasum": "" }, "require": { @@ -151,9 +151,9 @@ "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.300.6" + "source": "https://github.com/aws/aws-sdk-php/tree/3.305.9" }, - "time": "2024-02-27T19:05:27+00:00" + "time": "2024-05-03T18:09:03+00:00" }, { "name": "bacon/bacon-qr-code", @@ -209,182 +209,27 @@ }, "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", + "version": "0.12.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", "shasum": "" }, "require": { - "php": "^8.0" + "php": "^8.1" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" }, "type": "library", "autoload": { @@ -404,12 +249,17 @@ "arithmetic", "bigdecimal", "bignum", + "bignumber", "brick", - "math" + "decimal", + "integer", + "math", + "mathematics", + "rational" ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.11.0" + "source": "https://github.com/brick/math/tree/0.12.1" }, "funding": [ { @@ -417,7 +267,7 @@ "type": "github" } ], - "time": "2023-01-15T23:15:59+00:00" + "time": "2023-11-29T23:19:16+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -708,16 +558,16 @@ }, { "name": "doctrine/dbal", - "version": "3.8.2", + "version": "3.8.4", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "a19a1d05ca211f41089dffcc387733a6875196cb" + "reference": "b05e48a745f722801f55408d0dbd8003b403dbbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/a19a1d05ca211f41089dffcc387733a6875196cb", - "reference": "a19a1d05ca211f41089dffcc387733a6875196cb", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/b05e48a745f722801f55408d0dbd8003b403dbbd", + "reference": "b05e48a745f722801f55408d0dbd8003b403dbbd", "shasum": "" }, "require": { @@ -733,12 +583,12 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.57", + "phpstan/phpstan": "1.10.58", "phpstan/phpstan-strict-rules": "^1.5", "phpunit/phpunit": "9.6.16", "psalm/plugin-phpunit": "0.18.4", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.8.1", + "squizlabs/php_codesniffer": "3.9.0", "symfony/cache": "^5.4|^6.0|^7.0", "symfony/console": "^4.4|^5.4|^6.0|^7.0", "vimeo/psalm": "4.30.0" @@ -801,7 +651,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.8.2" + "source": "https://github.com/doctrine/dbal/tree/3.8.4" }, "funding": [ { @@ -817,7 +667,7 @@ "type": "tidelift" } ], - "time": "2024-02-12T18:36:36+00:00" + "time": "2024-04-25T07:04:44+00:00" }, { "name": "doctrine/deprecations", @@ -868,30 +718,29 @@ }, { "name": "doctrine/event-manager", - "version": "1.2.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", "shasum": "" }, "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "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" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.28" }, "type": "library", "autoload": { @@ -940,7 +789,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + "source": "https://github.com/doctrine/event-manager/tree/2.0.0" }, "funding": [ { @@ -956,7 +805,7 @@ "type": "tidelift" } ], - "time": "2022-10-12T20:51:15+00:00" + "time": "2022-10-12T20:59:15+00:00" }, { "name": "doctrine/inflector", @@ -1051,28 +900,27 @@ }, { "name": "doctrine/lexer", - "version": "2.1.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", - "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.21" + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { @@ -1109,7 +957,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.1" + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -1125,20 +973,20 @@ "type": "tidelift" } ], - "time": "2024-02-05T11:35:39+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "dompdf/dompdf", - "version": "v2.0.4", + "version": "v2.0.8", "source": { "type": "git", "url": "https://github.com/dompdf/dompdf.git", - "reference": "093f2d9739cec57428e39ddadedfd4f3ae862c0f" + "reference": "c20247574601700e1f7c8dab39310fca1964dc52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/093f2d9739cec57428e39ddadedfd4f3ae862c0f", - "reference": "093f2d9739cec57428e39ddadedfd4f3ae862c0f", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/c20247574601700e1f7c8dab39310fca1964dc52", + "reference": "c20247574601700e1f7c8dab39310fca1964dc52", "shasum": "" }, "require": { @@ -1146,7 +994,7 @@ "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", + "phenx/php-svg-lib": ">=0.5.2 <1.0.0", "php": "^7.1 || ^8.0" }, "require-dev": { @@ -1185,9 +1033,9 @@ "homepage": "https://github.com/dompdf/dompdf", "support": { "issues": "https://github.com/dompdf/dompdf/issues", - "source": "https://github.com/dompdf/dompdf/tree/v2.0.4" + "source": "https://github.com/dompdf/dompdf/tree/v2.0.8" }, - "time": "2023-12-12T20:19:39+00:00" + "time": "2024-04-29T13:06:17+00:00" }, { "name": "dragonmantank/cron-expression", @@ -1252,26 +1100,26 @@ }, { "name": "egulias/email-validator", - "version": "3.2.6", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7" + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", - "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", "shasum": "" }, "require": { - "doctrine/lexer": "^1.2|^2", - "php": ">=7.2", - "symfony/polyfill-intl-idn": "^1.15" + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" }, "require-dev": { - "phpunit/phpunit": "^8.5.8|^9.3.3", - "vimeo/psalm": "^4" + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -1279,7 +1127,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -1307,7 +1155,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/3.2.6" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" }, "funding": [ { @@ -1315,7 +1163,70 @@ "type": "github" } ], - "time": "2023-06-01T07:04:22+00:00" + "time": "2023-10-06T06:47:41+00:00" + }, + { + "name": "firebase/php-jwt", + "version": "v6.10.0", + "source": { + "type": "git", + "url": "https://github.com/firebase/php-jwt.git", + "reference": "a49db6f0a5033aef5143295342f1c95521b075ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/a49db6f0a5033aef5143295342f1c95521b075ff", + "reference": "a49db6f0a5033aef5143295342f1c95521b075ff", + "shasum": "" + }, + "require": { + "php": "^7.4||^8.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^6.5||^7.4", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psr/cache": "^1.0||^2.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0" + }, + "suggest": { + "ext-sodium": "Support EdDSA (Ed25519) signatures", + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" + }, + "type": "library", + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "keywords": [ + "jwt", + "php" + ], + "support": { + "issues": "https://github.com/firebase/php-jwt/issues", + "source": "https://github.com/firebase/php-jwt/tree/v6.10.0" + }, + "time": "2023-12-01T16:26:39+00:00" }, { "name": "fruitcake/php-cors", @@ -1862,50 +1773,32 @@ "time": "2023-12-03T19:50:20+00:00" }, { - "name": "intervention/image", - "version": "2.7.2", + "name": "intervention/gif", + "version": "4.1.0", "source": { "type": "git", - "url": "https://github.com/Intervention/image.git", - "reference": "04be355f8d6734c826045d02a1079ad658322dad" + "url": "https://github.com/Intervention/gif.git", + "reference": "3a2b5f8a8856e8877cdab5c47e51aab2d4cb23a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad", - "reference": "04be355f8d6734c826045d02a1079ad658322dad", + "url": "https://api.github.com/repos/Intervention/gif/zipball/3a2b5f8a8856e8877cdab5c47e51aab2d4cb23a3", + "reference": "3a2b5f8a8856e8877cdab5c47e51aab2d4cb23a3", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "guzzlehttp/psr7": "~1.1 || ^2.0", - "php": ">=5.4.0" + "php": "^8.1" }, "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" + "phpstan/phpstan": "^1", + "phpunit/phpunit": "^10.0", + "slevomat/coding-standard": "~8.0", + "squizlabs/php_codesniffer": "^3.8" }, "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" + "Intervention\\Gif\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1919,19 +1812,17 @@ "homepage": "https://intervention.io/" } ], - "description": "Image handling and manipulation library with support for Laravel integration", - "homepage": "http://image.intervention.io/", + "description": "Native PHP GIF Encoder/Decoder", + "homepage": "https://github.com/intervention/gif", "keywords": [ + "animation", "gd", - "image", - "imagick", - "laravel", - "thumbnail", - "watermark" + "gif", + "image" ], "support": { - "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/2.7.2" + "issues": "https://github.com/Intervention/gif/issues", + "source": "https://github.com/Intervention/gif/tree/4.1.0" }, "funding": [ { @@ -1943,40 +1834,105 @@ "type": "github" } ], - "time": "2022-05-21T17:30:32+00:00" + "time": "2024-03-26T17:23:47+00:00" }, { - "name": "knplabs/knp-snappy", - "version": "v1.4.4", + "name": "intervention/image", + "version": "3.6.3", "source": { "type": "git", - "url": "https://github.com/KnpLabs/snappy.git", - "reference": "3db13fe45d12a7bccb2b83f622e5a90f7e40b111" + "url": "https://github.com/Intervention/image.git", + "reference": "2dbfb53bf8909257e710cf6091d10a9ca7500742" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/KnpLabs/snappy/zipball/3db13fe45d12a7bccb2b83f622e5a90f7e40b111", - "reference": "3db13fe45d12a7bccb2b83f622e5a90f7e40b111", + "url": "https://api.github.com/repos/Intervention/image/zipball/2dbfb53bf8909257e710cf6091d10a9ca7500742", + "reference": "2dbfb53bf8909257e710cf6091d10a9ca7500742", "shasum": "" }, "require": { - "php": ">=7.1", - "psr/log": "^1.0||^2.0||^3.0", - "symfony/process": "~3.4||~4.3||~5.0||~6.0" + "ext-mbstring": "*", + "intervention/gif": "^4.1", + "php": "^8.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16||^3.0", + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^1", + "phpunit/phpunit": "^10.0", + "slevomat/coding-standard": "~8.0", + "squizlabs/php_codesniffer": "^3.8" + }, + "suggest": { + "ext-exif": "Recommended to be able to read EXIF data properly." + }, + "type": "library", + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@intervention.io", + "homepage": "https://intervention.io/" + } + ], + "description": "PHP image manipulation", + "homepage": "https://image.intervention.io/", + "keywords": [ + "gd", + "image", + "imagick", + "resize", + "thumbnail", + "watermark" + ], + "support": { + "issues": "https://github.com/Intervention/image/issues", + "source": "https://github.com/Intervention/image/tree/3.6.3" + }, + "funding": [ + { + "url": "https://paypal.me/interventionio", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + } + ], + "time": "2024-05-02T09:03:18+00:00" + }, + { + "name": "knplabs/knp-snappy", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/snappy.git", + "reference": "98468898b50c09f26d56d905b79b0f52a2215da6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/snappy/zipball/98468898b50c09f26d56d905b79b0f52a2215da6", + "reference": "98468898b50c09f26d56d905b79b0f52a2215da6", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0||^3.0", + "symfony/process": "^5.0||^6.0||^7.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^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" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -2015,26 +1971,27 @@ ], "support": { "issues": "https://github.com/KnpLabs/snappy/issues", - "source": "https://github.com/KnpLabs/snappy/tree/v1.4.4" + "source": "https://github.com/KnpLabs/snappy/tree/v1.5.0" }, - "time": "2023-09-13T12:18:19+00:00" + "time": "2023-12-18T09:12:11+00:00" }, { "name": "laravel/framework", - "version": "v9.52.16", + "version": "v10.48.10", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "082345d76fc6a55b649572efe10b11b03e279d24" + "reference": "91e2b9e218afa4e5c377510faa11957042831ba3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/082345d76fc6a55b649572efe10b11b03e279d24", - "reference": "082345d76fc6a55b649572efe10b11b03e279d24", + "url": "https://api.github.com/repos/laravel/framework/zipball/91e2b9e218afa4e5c377510faa11957042831ba3", + "reference": "91e2b9e218afa4e5c377510faa11957042831ba3", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11", + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.3.2", "egulias/email-validator": "^3.2.1|^4.0", @@ -2047,33 +2004,38 @@ "ext-tokenizer": "*", "fruitcake/php-cors": "^1.2", "guzzlehttp/uri-template": "^1.0", - "laravel/serializable-closure": "^1.2.2", + "laravel/prompts": "^0.1.9", + "laravel/serializable-closure": "^1.3", "league/commonmark": "^2.2.1", "league/flysystem": "^3.8.0", - "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.62.1", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.67", "nunomaduro/termwind": "^1.13", - "php": "^8.0.2", + "php": "^8.1", "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", + "symfony/console": "^6.2", + "symfony/error-handler": "^6.2", + "symfony/finder": "^6.2", + "symfony/http-foundation": "^6.4", + "symfony/http-kernel": "^6.2", + "symfony/mailer": "^6.2", + "symfony/mime": "^6.2", + "symfony/process": "^6.2", + "symfony/routing": "^6.2", + "symfony/uid": "^6.2", + "symfony/var-dumper": "^6.2", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.4.1", "voku/portable-ascii": "^2.0" }, "conflict": { + "carbonphp/carbon-doctrine-types": ">=3.0", + "doctrine/dbal": ">=4.0", + "mockery/mockery": "1.6.8", + "phpunit/phpunit": ">=11.0.0", "tightenco/collect": "<5.5.33" }, "provide": { @@ -2104,6 +2066,7 @@ "illuminate/notifications": "self.version", "illuminate/pagination": "self.version", "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", "illuminate/queue": "self.version", "illuminate/redis": "self.version", "illuminate/routing": "self.version", @@ -2117,7 +2080,7 @@ "require-dev": { "ably/ably-php": "^1.0", "aws/aws-sdk-php": "^3.235.5", - "doctrine/dbal": "^2.13.3|^3.1.4", + "doctrine/dbal": "^3.5.1", "ext-gmp": "*", "fakerphp/faker": "^1.21", "guzzlehttp/guzzle": "^7.5", @@ -2127,20 +2090,21 @@ "league/flysystem-read-only": "^3.3", "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.24", + "nyholm/psr7": "^1.2", + "orchestra/testbench-core": "^8.23.4", "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" + "phpunit/phpunit": "^10.0.7", + "predis/predis": "^2.0.2", + "symfony/cache": "^6.2", + "symfony/http-client": "^6.2.4", + "symfony/psr-http-message-bridge": "^2.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).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", "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.", @@ -2162,27 +2126,28 @@ "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).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8|^10.0.7).", + "predis/predis": "Required to use the predis connector (^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/cache": "Required to PSR-6 cache bridge (^6.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { "files": [ "src/Illuminate/Collections/helpers.php", "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Support/helpers.php" ], @@ -2215,7 +2180,65 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-10-03T13:02:30+00:00" + "time": "2024-04-30T12:52:59+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.1.21", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "23ea808e8a145653e0ab29e30d4385e49f40a920" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/23ea808e8a145653e0ab29e30d4385e49f40a920", + "reference": "23ea808e8a145653e0ab29e30d4385e49f40a920", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.1.21" + }, + "time": "2024-04-30T12:46:16+00:00" }, { "name": "laravel/serializable-closure", @@ -2279,26 +2302,28 @@ }, { "name": "laravel/socialite", - "version": "v5.12.1", + "version": "v5.13.2", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "7dae1b072573809f32ab6dcf4aebb57c8b3e8acf" + "reference": "278d4615f68205722b3a129135774b3764b28a90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/7dae1b072573809f32ab6dcf4aebb57c8b3e8acf", - "reference": "7dae1b072573809f32ab6dcf4aebb57c8b3e8acf", + "url": "https://api.github.com/repos/laravel/socialite/zipball/278d4615f68205722b3a129135774b3764b28a90", + "reference": "278d4615f68205722b3a129135774b3764b28a90", "shasum": "" }, "require": { "ext-json": "*", + "firebase/php-jwt": "^6.4", "guzzlehttp/guzzle": "^6.0|^7.0", "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", "league/oauth1-client": "^1.10.1", - "php": "^7.2|^8.0" + "php": "^7.2|^8.0", + "phpseclib/phpseclib": "^3.0" }, "require-dev": { "mockery/mockery": "^1.0", @@ -2345,7 +2370,7 @@ "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" }, - "time": "2024-02-16T08:58:20+00:00" + "time": "2024-04-26T13:48:16+00:00" }, { "name": "laravel/tinker", @@ -2603,16 +2628,16 @@ }, { "name": "league/flysystem", - "version": "3.24.0", + "version": "3.27.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "b25a361508c407563b34fac6f64a8a17a8819675" + "reference": "4729745b1ab737908c7d055148c9a6b3e959832f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b25a361508c407563b34fac6f64a8a17a8819675", - "reference": "b25a361508c407563b34fac6f64a8a17a8819675", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/4729745b1ab737908c7d055148c9a6b3e959832f", + "reference": "4729745b1ab737908c7d055148c9a6b3e959832f", "shasum": "" }, "require": { @@ -2640,7 +2665,7 @@ "friendsofphp/php-cs-fixer": "^3.5", "google/cloud-storage": "^1.23", "microsoft/azure-storage-blob": "^1.1", - "phpseclib/phpseclib": "^3.0.34", + "phpseclib/phpseclib": "^3.0.36", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5.11|^10.0", "sabre/dav": "^4.6.0" @@ -2677,7 +2702,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.24.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.27.0" }, "funding": [ { @@ -2689,20 +2714,20 @@ "type": "github" } ], - "time": "2024-02-04T12:10:17+00:00" + "time": "2024-04-07T19:17:50+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.24.0", + "version": "3.27.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "809474e37b7fb1d1f8bcc0f8a98bc1cae99aa513" + "reference": "3e6ce2f972f1470db779f04d29c289dcd2c32837" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/809474e37b7fb1d1f8bcc0f8a98bc1cae99aa513", - "reference": "809474e37b7fb1d1f8bcc0f8a98bc1cae99aa513", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/3e6ce2f972f1470db779f04d29c289dcd2c32837", + "reference": "3e6ce2f972f1470db779f04d29c289dcd2c32837", "shasum": "" }, "require": { @@ -2742,7 +2767,7 @@ "storage" ], "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.24.0" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.27.0" }, "funding": [ { @@ -2754,20 +2779,20 @@ "type": "github" } ], - "time": "2024-01-26T18:43:21+00:00" + "time": "2024-04-07T19:16:54+00:00" }, { "name": "league/flysystem-local", - "version": "3.23.1", + "version": "3.25.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00" + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/b884d2bf9b53bb4804a56d2df4902bb51e253f00", - "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/61a6a90d6e999e4ddd9ce5adb356de0939060b92", + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92", "shasum": "" }, "require": { @@ -2801,8 +2826,7 @@ "local" ], "support": { - "issues": "https://github.com/thephpleague/flysystem-local/issues", - "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.1" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.25.1" }, "funding": [ { @@ -2814,7 +2838,7 @@ "type": "github" } ], - "time": "2024-01-26T18:25:23+00:00" + "time": "2024-03-15T19:58:44+00:00" }, { "name": "league/html-to-markdown", @@ -3109,16 +3133,16 @@ }, { "name": "masterminds/html5", - "version": "2.8.1", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", - "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", "shasum": "" }, "require": { @@ -3126,7 +3150,7 @@ "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" }, "type": "library", "extra": { @@ -3170,48 +3194,47 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" + "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" }, - "time": "2023-05-10T11:58:31+00:00" + "time": "2024-03-31T07:05:07+00:00" }, { "name": "monolog/monolog", - "version": "2.9.2", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f" + "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/437cb3628f4cf6042cc10ae97fc2b8472e48ca1f", - "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", + "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", "shasum": "" }, "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + "psr/log-implementation": "3.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "aws/aws-sdk-php": "^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", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", "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", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^10.5.17", + "predis/predis": "^1.1 || ^2", "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -3234,7 +3257,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -3262,7 +3285,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.2" + "source": "https://github.com/Seldaek/monolog/tree/3.6.0" }, "funding": [ { @@ -3274,7 +3297,7 @@ "type": "tidelift" } ], - "time": "2023-10-27T15:25:26+00:00" + "time": "2024-04-12T21:02:21+00:00" }, { "name": "mtdowling/jmespath.php", @@ -3451,31 +3474,31 @@ }, { "name": "nette/schema", - "version": "v1.2.5", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", - "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", + "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", "shasum": "" }, "require": { - "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": "7.1 - 8.3" + "nette/utils": "^4.0", + "php": "8.1 - 8.3" }, "require-dev": { - "nette/tester": "^2.3 || ^2.4", + "nette/tester": "^2.4", "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.7" + "tracy/tracy": "^2.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -3507,9 +3530,9 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.5" + "source": "https://github.com/nette/schema/tree/v1.3.0" }, - "time": "2023-10-05T20:37:59+00:00" + "time": "2023-12-11T11:54:22+00:00" }, { "name": "nette/utils", @@ -3599,16 +3622,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.0.1", + "version": "v5.0.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "2218c2252c874a4624ab2f613d86ac32d227bc69" + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/2218c2252c874a4624ab2f613d86ac32d227bc69", - "reference": "2218c2252c874a4624ab2f613d86ac32d227bc69", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", "shasum": "" }, "require": { @@ -3651,9 +3674,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" }, - "time": "2024-02-21T19:24:10+00:00" + "time": "2024-03-05T20:51:40+00:00" }, { "name": "nunomaduro/termwind", @@ -3960,16 +3983,16 @@ }, { "name": "phenx/php-svg-lib", - "version": "0.5.2", + "version": "0.5.4", "source": { "type": "git", "url": "https://github.com/dompdf/php-svg-lib.git", - "reference": "732faa9fb4309221e2bd9b2fda5de44f947133aa" + "reference": "46b25da81613a9cf43c83b2a8c2c1bdab27df691" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/732faa9fb4309221e2bd9b2fda5de44f947133aa", - "reference": "732faa9fb4309221e2bd9b2fda5de44f947133aa", + "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/46b25da81613a9cf43c83b2a8c2c1bdab27df691", + "reference": "46b25da81613a9cf43c83b2a8c2c1bdab27df691", "shasum": "" }, "require": { @@ -3988,7 +4011,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0" + "LGPL-3.0-or-later" ], "authors": [ { @@ -4000,9 +4023,9 @@ "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.2" + "source": "https://github.com/dompdf/php-svg-lib/tree/0.5.4" }, - "time": "2024-02-07T12:49:40+00:00" + "time": "2024-04-08T12:52:34+00:00" }, { "name": "phpoption/phpoption", @@ -4081,16 +4104,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.36", + "version": "3.0.37", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "c2fb5136162d4be18fdd4da9980696f3aee96d7b" + "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c2fb5136162d4be18fdd4da9980696f3aee96d7b", - "reference": "c2fb5136162d4be18fdd4da9980696f3aee96d7b", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cfa2013d0f68c062055180dd4328cc8b9d1f30b8", + "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8", "shasum": "" }, "require": { @@ -4171,7 +4194,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.36" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.37" }, "funding": [ { @@ -4187,7 +4210,7 @@ "type": "tidelift" } ], - "time": "2024-02-26T05:13:14+00:00" + "time": "2024-03-03T02:14:58+00:00" }, { "name": "pragmarx/google2fa", @@ -4765,16 +4788,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.0", + "version": "v0.12.3", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d" + "reference": "b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/750bf031a48fd07c673dbe3f11f72362ea306d0d", - "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73", + "reference": "b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73", "shasum": "" }, "require": { @@ -4838,9 +4861,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.0" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.3" }, - "time": "2023-12-20T15:28:09+00:00" + "time": "2024-04-02T15:57:53+00:00" }, { "name": "ralouphie/getallheaders", @@ -4888,21 +4911,20 @@ }, { "name": "ramsey/collection", - "version": "1.3.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4" + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/ad7475d1c9e70b190ecffc58f2d989416af339b4", - "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0", - "symfony/polyfill-php81": "^1.23" + "php": "^8.1" }, "require-dev": { "captainhook/plugin-composer": "^5.3", @@ -4962,7 +4984,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.3.0" + "source": "https://github.com/ramsey/collection/tree/2.0.0" }, "funding": [ { @@ -4974,24 +4996,24 @@ "type": "tidelift" } ], - "time": "2022-12-27T19:12:24+00:00" + "time": "2022-12-31T21:50:55+00:00" }, { "name": "ramsey/uuid", - "version": "4.7.5", + "version": "4.7.6", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -5054,7 +5076,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.5" + "source": "https://github.com/ramsey/uuid/tree/4.7.6" }, "funding": [ { @@ -5066,7 +5088,7 @@ "type": "tidelift" } ], - "time": "2023-11-08T05:53:05+00:00" + "time": "2024-04-27T21:32:50+00:00" }, { "name": "robrichards/xmlseclibs", @@ -5268,21 +5290,21 @@ }, { "name": "socialiteproviders/manager", - "version": "v4.5.1", + "version": "v4.6.0", "source": { "type": "git", "url": "https://github.com/SocialiteProviders/Manager.git", - "reference": "a67f194f0f4c4c7616c549afc697b78df9658d44" + "reference": "dea5190981c31b89e52259da9ab1ca4e2b258b21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/a67f194f0f4c4c7616c549afc697b78df9658d44", - "reference": "a67f194f0f4c4c7616c549afc697b78df9658d44", + "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/dea5190981c31b89e52259da9ab1ca4e2b258b21", + "reference": "dea5190981c31b89e52259da9ab1ca4e2b258b21", "shasum": "" }, "require": { "illuminate/support": "^8.0 || ^9.0 || ^10.0 || ^11.0", - "laravel/socialite": "^5.2", + "laravel/socialite": "^5.5", "php": "^8.0" }, "require-dev": { @@ -5338,26 +5360,26 @@ "issues": "https://github.com/socialiteproviders/manager/issues", "source": "https://github.com/socialiteproviders/manager" }, - "time": "2024-02-17T08:58:03+00:00" + "time": "2024-05-04T07:57:39+00:00" }, { "name": "socialiteproviders/microsoft-azure", - "version": "5.1.0", + "version": "5.2.0", "source": { "type": "git", "url": "https://github.com/SocialiteProviders/Microsoft-Azure.git", - "reference": "7522b27cd8518706b50e03b40a396fb0a6891feb" + "reference": "453d62c9d7e3b3b76e94c913fb46e68a33347b16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SocialiteProviders/Microsoft-Azure/zipball/7522b27cd8518706b50e03b40a396fb0a6891feb", - "reference": "7522b27cd8518706b50e03b40a396fb0a6891feb", + "url": "https://api.github.com/repos/SocialiteProviders/Microsoft-Azure/zipball/453d62c9d7e3b3b76e94c913fb46e68a33347b16", + "reference": "453d62c9d7e3b3b76e94c913fb46e68a33347b16", "shasum": "" }, "require": { "ext-json": "*", - "php": "^7.2 || ^8.0", - "socialiteproviders/manager": "~4.0" + "php": "^8.0", + "socialiteproviders/manager": "^4.4" }, "type": "library", "autoload": { @@ -5389,7 +5411,7 @@ "issues": "https://github.com/socialiteproviders/providers/issues", "source": "https://github.com/socialiteproviders/providers" }, - "time": "2022-03-15T21:17:43+00:00" + "time": "2024-03-15T03:02:10+00:00" }, { "name": "socialiteproviders/okta", @@ -5443,22 +5465,22 @@ }, { "name": "socialiteproviders/twitch", - "version": "5.3.1", + "version": "5.4.0", "source": { "type": "git", "url": "https://github.com/SocialiteProviders/Twitch.git", - "reference": "7accf30ae7a3139b757b4ca8f34989c09a3dbee7" + "reference": "c8791b9d208195b5f02bea432de89d0e612b955d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SocialiteProviders/Twitch/zipball/7accf30ae7a3139b757b4ca8f34989c09a3dbee7", - "reference": "7accf30ae7a3139b757b4ca8f34989c09a3dbee7", + "url": "https://api.github.com/repos/SocialiteProviders/Twitch/zipball/c8791b9d208195b5f02bea432de89d0e612b955d", + "reference": "c8791b9d208195b5f02bea432de89d0e612b955d", "shasum": "" }, "require": { "ext-json": "*", - "php": "^7.2 || ^8.0", - "socialiteproviders/manager": "~4.0" + "php": "^8.0", + "socialiteproviders/manager": "^4.4" }, "type": "library", "autoload": { @@ -5477,23 +5499,32 @@ } ], "description": "Twitch OAuth2 Provider for Laravel Socialite", + "keywords": [ + "laravel", + "oauth", + "provider", + "socialite", + "twitch" + ], "support": { - "source": "https://github.com/SocialiteProviders/Twitch/tree/5.3.1" + "docs": "https://socialiteproviders.com/twitch", + "issues": "https://github.com/socialiteproviders/providers/issues", + "source": "https://github.com/socialiteproviders/providers" }, - "time": "2020-12-01T23:10:59+00:00" + "time": "2024-04-01T01:15:35+00:00" }, { "name": "ssddanbrown/htmldiff", - "version": "v1.0.2", + "version": "v1.0.3", "source": { "type": "git", "url": "https://github.com/ssddanbrown/HtmlDiff.git", - "reference": "58f81857c02b50b199273edb4cc339876b5a4038" + "reference": "92da405f8138066834b71ac7bedebbda6327761b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ssddanbrown/HtmlDiff/zipball/58f81857c02b50b199273edb4cc339876b5a4038", - "reference": "58f81857c02b50b199273edb4cc339876b5a4038", + "url": "https://api.github.com/repos/ssddanbrown/HtmlDiff/zipball/92da405f8138066834b71ac7bedebbda6327761b", + "reference": "92da405f8138066834b71ac7bedebbda6327761b", "shasum": "" }, "require": { @@ -5525,7 +5556,7 @@ "homepage": "https://github.com/ssddanbrown/htmldiff", "support": { "issues": "https://github.com/ssddanbrown/HtmlDiff/issues", - "source": "https://github.com/ssddanbrown/HtmlDiff/tree/v1.0.2" + "source": "https://github.com/ssddanbrown/HtmlDiff/tree/v1.0.3" }, "funding": [ { @@ -5533,40 +5564,46 @@ "type": "github" } ], - "time": "2022-01-24T20:12:20+00:00" + "time": "2024-03-29T16:51:55+00:00" }, { "name": "ssddanbrown/symfony-mailer", - "version": "6.0.x-dev", + "version": "6.4.x-dev", "source": { "type": "git", "url": "https://github.com/ssddanbrown/symfony-mailer.git", - "reference": "2219dcdc5f58e4f382ce8f1e6942d16982aa3012" + "reference": "0497d6eb2734fe22b9550f88ae6526611c9df7ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ssddanbrown/symfony-mailer/zipball/2219dcdc5f58e4f382ce8f1e6942d16982aa3012", - "reference": "2219dcdc5f58e4f382ce8f1e6942d16982aa3012", + "url": "https://api.github.com/repos/ssddanbrown/symfony-mailer/zipball/0497d6eb2734fe22b9550f88ae6526611c9df7ae", + "reference": "0497d6eb2734fe22b9550f88ae6526611c9df7ae", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.0.2", + "php": ">=8.1", "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" + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/mime": "^6.2|^7.0", + "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/http-kernel": "<5.4" + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" }, "replace": { "symfony/mailer": "^6.0" }, "require-dev": { - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/messenger": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.2|^7.0", + "symfony/twig-bridge": "^6.2|^7.0" }, "default-branch": true, "type": "library", @@ -5599,29 +5636,30 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/ssddanbrown/symfony-mailer/tree/6.0" + "source": "https://github.com/ssddanbrown/symfony-mailer/tree/6.4" }, - "time": "2023-07-04T14:10:33+00:00" + "time": "2024-03-17T16:25:21+00:00" }, { "name": "symfony/console", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed" + "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed", - "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed", + "url": "https://api.github.com/repos/symfony/console/zipball/a170e64ae10d00ba89e2acbb590dc2e54da8ad8f", + "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.4|^6.0" + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { "symfony/dependency-injection": "<5.4", @@ -5635,18 +5673,16 @@ }, "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": "" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -5675,12 +5711,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.0.19" + "source": "https://github.com/symfony/console/tree/v6.4.7" }, "funding": [ { @@ -5696,24 +5732,24 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/css-selector", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "f1d00bddb83a4cb2138564b2150001cb6ce272b1" + "reference": "1c5d5c2103c3762aff27a27e1e2409e30a79083b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/f1d00bddb83a4cb2138564b2150001cb6ce272b1", - "reference": "f1d00bddb83a4cb2138564b2150001cb6ce272b1", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c5d5c2103c3762aff27a27e1e2409e30a79083b", + "reference": "1c5d5c2103c3762aff27a27e1e2409e30a79083b", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -5745,7 +5781,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.0.19" + "source": "https://github.com/symfony/css-selector/tree/v6.4.7" }, "funding": [ { @@ -5761,29 +5797,29 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.0.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -5812,7 +5848,7 @@ "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" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" }, "funding": [ { @@ -5828,31 +5864,35 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/error-handler", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c7df52182f43a68522756ac31a532dd5b1e6db67" + "reference": "667a072466c6a53827ed7b119af93806b884cbb3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c7df52182f43a68522756ac31a532dd5b1e6db67", - "reference": "c7df52182f43a68522756ac31a532dd5b1e6db67", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/667a072466c6a53827ed7b119af93806b884cbb3", + "reference": "667a072466c6a53827ed7b119af93806b884cbb3", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -5883,7 +5923,7 @@ "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" + "source": "https://github.com/symfony/error-handler/tree/v6.4.7" }, "funding": [ { @@ -5899,28 +5939,29 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a" + "reference": "d84384f3f67de3cb650db64d685d70395dacfc3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", - "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d84384f3f67de3cb650db64d685d70395dacfc3f", + "reference": "d84384f3f67de3cb650db64d685d70395dacfc3f", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/event-dispatcher-contracts": "^2|^3" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", @@ -5928,17 +5969,13 @@ }, "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": "" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -5966,7 +6003,7 @@ "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" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.7" }, "funding": [ { @@ -5982,33 +6019,30 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.0.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -6045,7 +6079,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" }, "funding": [ { @@ -6061,24 +6095,27 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/finder", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11" + "reference": "511c48990be17358c23bf45c5d71ab85d40fb764" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11", - "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11", + "url": "https://api.github.com/repos/symfony/finder/zipball/511c48990be17358c23bf45c5d71ab85d40fb764", + "reference": "511c48990be17358c23bf45c5d71ab85d40fb764", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", "autoload": { @@ -6106,7 +6143,7 @@ "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" + "source": "https://github.com/symfony/finder/tree/v6.4.7" }, "funding": [ { @@ -6122,38 +6159,40 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:44:14+00:00" + "time": "2024-04-23T10:36:43+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.0.20", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e16b2676a4b3b1fa12378a20b29c364feda2a8d6" + "reference": "b4db6b833035477cb70e18d0ae33cb7c2b521759" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e16b2676a4b3b1fa12378a20b29c364feda2a8d6", - "reference": "e16b2676a4b3b1fa12378a20b29c364feda2a8d6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b4db6b833035477cb70e18d0ae33cb7c2b521759", + "reference": "b4db6b833035477cb70e18d0ae33cb7c2b521759", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "symfony/cache": "<6.3" }, "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" + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.3|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -6181,7 +6220,7 @@ "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" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.7" }, "funding": [ { @@ -6197,44 +6236,48 @@ "type": "tidelift" } ], - "time": "2023-01-30T15:41:07+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.0.20", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6dc70833fd0ef5e861e17c7854c12d7d86679349" + "reference": "b7b5e6cdef670a0c82d015a966ffc7e855861a98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6dc70833fd0ef5e861e17c7854c12d7d86679349", - "reference": "6dc70833fd0ef5e861e17c7854c12d7d86679349", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b7b5e6cdef670a0c82d015a966ffc7e855861a98", + "reference": "b7b5e6cdef670a0c82d015a966ffc7e855861a98", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "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/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "symfony/browser-kit": "<5.4", "symfony/cache": "<5.4", - "symfony/config": "<5.4", + "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", + "symfony/http-client-contracts": "<2.5", "symfony/mailer": "<5.4", "symfony/messenger": "<5.4", "symfony/translation": "<5.4", + "symfony/translation-contracts": "<2.5", "symfony/twig-bridge": "<5.4", - "symfony/validator": "<5.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, "provide": { @@ -6242,28 +6285,29 @@ }, "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", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", "twig/twig": "^2.13|^3.0.4" }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, "type": "library", "autoload": { "psr-4": { @@ -6290,7 +6334,7 @@ "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" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.7" }, "funding": [ { @@ -6306,24 +6350,25 @@ "type": "tidelift" } ], - "time": "2023-02-01T08:22:55+00:00" + "time": "2024-04-29T11:24:44+00:00" }, { "name": "symfony/mime", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "d7052547a0070cbeadd474e172b527a00d657301" + "reference": "decadcf3865918ecfcbfa90968553994ce935a5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d7052547a0070cbeadd474e172b527a00d657301", - "reference": "d7052547a0070cbeadd474e172b527a00d657301", + "url": "https://api.github.com/repos/symfony/mime/zipball/decadcf3865918ecfcbfa90968553994ce935a5e", + "reference": "decadcf3865918ecfcbfa90968553994ce935a5e", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -6332,15 +6377,17 @@ "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" + "symfony/serializer": "<6.3.2" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", "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" + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.4|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3.2|^7.0" }, "type": "library", "autoload": { @@ -6372,7 +6419,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.0.19" + "source": "https://github.com/symfony/mime/tree/v6.4.7" }, "funding": [ { @@ -6388,7 +6435,7 @@ "type": "tidelift" } ], - "time": "2023-01-11T11:50:03+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/polyfill-ctype", @@ -6946,21 +6993,22 @@ "time": "2024-01-29T20:11:03+00:00" }, { - "name": "symfony/polyfill-php81", + "name": "symfony/polyfill-php83", "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" }, "type": "library", "extra": { @@ -6974,7 +7022,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Polyfill\\Php83\\": "" }, "classmap": [ "Resources/stubs" @@ -6994,7 +7042,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -7003,7 +7051,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" }, "funding": [ { @@ -7102,20 +7150,20 @@ }, { "name": "symfony/process", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "2114fd60f26a296cc403a7939ab91478475a33d4" + "reference": "cdb1c81c145fd5aa9b0038bab694035020943381" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4", - "reference": "2114fd60f26a296cc403a7939ab91478475a33d4", + "url": "https://api.github.com/repos/symfony/process/zipball/cdb1c81c145fd5aa9b0038bab694035020943381", + "reference": "cdb1c81c145fd5aa9b0038bab694035020943381", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -7143,7 +7191,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.0.19" + "source": "https://github.com/symfony/process/tree/v6.4.7" }, "funding": [ { @@ -7159,45 +7207,40 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/routing", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "e56ca9b41c1ec447193474cd86ad7c0b547755ac" + "reference": "276e06398f71fa2a973264d94f28150f93cfb907" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e56ca9b41c1ec447193474cd86ad7c0b547755ac", - "reference": "e56ca9b41c1ec447193474cd86ad7c0b547755ac", + "url": "https://api.github.com/repos/symfony/routing/zipball/276e06398f71fa2a973264d94f28150f93cfb907", + "reference": "276e06398f71fa2a973264d94f28150f93cfb907", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "doctrine/annotations": "<1.12", - "symfony/config": "<5.4", + "symfony/config": "<6.2", "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" + "symfony/config": "^6.2|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -7231,7 +7274,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.0.19" + "source": "https://github.com/symfony/routing/tree/v6.4.7" }, "funding": [ { @@ -7247,36 +7290,34 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.0.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66" + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66", - "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", "shasum": "" }, "require": { - "php": ">=8.0.2", - "psr/container": "^2.0" + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -7286,7 +7327,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7313,7 +7357,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" }, "funding": [ { @@ -7329,37 +7373,38 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:58+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/string", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a" + "reference": "ffeb9591c61f65a68d47f77d12b83fa530227a69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a", - "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a", + "url": "https://api.github.com/repos/symfony/string/zipball/ffeb9591c61f65a68d47f77d12b83fa530227a69", + "reference": "ffeb9591c61f65a68d47f77d12b83fa530227a69", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "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" + "symfony/translation-contracts": "<2.5" }, "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" + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -7398,7 +7443,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.19" + "source": "https://github.com/symfony/string/tree/v6.4.7" }, "funding": [ { @@ -7414,32 +7459,35 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/translation", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f" + "reference": "7495687c58bfd88b7883823747b0656d90679123" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f", - "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f", + "url": "https://api.github.com/repos/symfony/translation/zipball/7495687c58bfd88b7883823747b0656d90679123", + "reference": "7495687c58bfd88b7883823747b0656d90679123", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.3|^3.0" + "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { "symfony/config": "<5.4", "symfony/console": "<5.4", "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", "symfony/twig-bundle": "<5.4", "symfony/yaml": "<5.4" }, @@ -7447,22 +7495,19 @@ "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { + "nikic/php-parser": "^4.18|^5.0", "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/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.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": "" + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -7493,7 +7538,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.19" + "source": "https://github.com/symfony/translation/tree/v6.4.7" }, "funding": [ { @@ -7509,32 +7554,29 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.0.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282" + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/acbfbb274e730e5a0236f619b6168d9dedb3e282", - "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", "shasum": "" }, "require": { - "php": ">=8.0.2" - }, - "suggest": { - "symfony/translation-implementation": "" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -7544,7 +7586,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7571,7 +7616,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" }, "funding": [ { @@ -7587,28 +7632,28 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:10:44+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/uid", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d" + "reference": "a66efcb71d8bc3a207d9d78e0bd67f3321510355" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d", - "reference": "6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d", + "url": "https://api.github.com/repos/symfony/uid/zipball/a66efcb71d8bc3a207d9d78e0bd67f3321510355", + "reference": "a66efcb71d8bc3a207d9d78e0bd67f3321510355", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -7645,7 +7690,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.0.19" + "source": "https://github.com/symfony/uid/tree/v6.4.7" }, "funding": [ { @@ -7661,42 +7706,39 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52" + "reference": "7a9cd977cd1c5fed3694bee52990866432af07d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eb980457fa6899840fe1687e8627a03a7d8a3d52", - "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7a9cd977cd1c5fed3694bee52990866432af07d7", + "reference": "7a9cd977cd1c5fed3694bee52990866432af07d7", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "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", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.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" ], @@ -7733,7 +7775,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.0.19" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.7" }, "funding": [ { @@ -7749,7 +7791,7 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:44:14+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -8022,76 +8064,6 @@ } ], "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.1", @@ -8279,16 +8251,16 @@ }, { "name": "itsgoingd/clockwork", - "version": "v5.2.0", + "version": "v5.2.2", "source": { "type": "git", "url": "https://github.com/itsgoingd/clockwork.git", - "reference": "df52c7c4d8d60443ea1d14bcf9b182d4eaaeec26" + "reference": "29bc4cedfbe742b419544c30b7b6e15cd9da08ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/df52c7c4d8d60443ea1d14bcf9b182d4eaaeec26", - "reference": "df52c7c4d8d60443ea1d14bcf9b182d4eaaeec26", + "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/29bc4cedfbe742b419544c30b7b6e15cd9da08ef", + "reference": "29bc4cedfbe742b419544c30b7b6e15cd9da08ef", "shasum": "" }, "require": { @@ -8342,7 +8314,7 @@ ], "support": { "issues": "https://github.com/itsgoingd/clockwork/issues", - "source": "https://github.com/itsgoingd/clockwork/tree/v5.2.0" + "source": "https://github.com/itsgoingd/clockwork/tree/v5.2.2" }, "funding": [ { @@ -8350,20 +8322,20 @@ "type": "github" } ], - "time": "2024-02-20T22:36:44+00:00" + "time": "2024-04-14T10:49:22+00:00" }, { "name": "larastan/larastan", - "version": "v2.9.1", + "version": "v2.9.5", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "467113c58d110ad617cf9e07ff49b0948d1c03cc" + "reference": "101f1a4470f87326f4d3995411d28679d8800abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/467113c58d110ad617cf9e07ff49b0948d1c03cc", - "reference": "467113c58d110ad617cf9e07ff49b0948d1c03cc", + "url": "https://api.github.com/repos/larastan/larastan/zipball/101f1a4470f87326f4d3995411d28679d8800abe", + "reference": "101f1a4470f87326f4d3995411d28679d8800abe", "shasum": "" }, "require": { @@ -8376,14 +8348,15 @@ "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0", "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0", "php": "^8.0.2", - "phpmyadmin/sql-parser": "^5.8.2", - "phpstan/phpstan": "^1.10.50" + "phpmyadmin/sql-parser": "^5.9.0", + "phpstan/phpstan": "^1.10.66" }, "require-dev": { - "nikic/php-parser": "^4.17.1", - "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.0", - "orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.0", - "phpunit/phpunit": "^9.6.13 || ^10.5" + "doctrine/coding-standard": "^12.0", + "nikic/php-parser": "^4.19.1", + "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2", + "orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.3", + "phpunit/phpunit": "^9.6.13 || ^10.5.16" }, "suggest": { "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" @@ -8431,7 +8404,7 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v2.9.1" + "source": "https://github.com/larastan/larastan/tree/v2.9.5" }, "funding": [ { @@ -8451,20 +8424,20 @@ "type": "patreon" } ], - "time": "2024-02-26T14:10:20+00:00" + "time": "2024-04-16T19:13:34+00:00" }, { "name": "mockery/mockery", - "version": "1.6.7", + "version": "1.6.11", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06" + "reference": "81a161d0b135df89951abd52296adf97deb0723d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", - "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", + "url": "https://api.github.com/repos/mockery/mockery/zipball/81a161d0b135df89951abd52296adf97deb0723d", + "reference": "81a161d0b135df89951abd52296adf97deb0723d", "shasum": "" }, "require": { @@ -8476,8 +8449,8 @@ "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.10", - "symplify/easy-coding-standard": "^12.0.8" + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" }, "type": "library", "autoload": { @@ -8534,7 +8507,7 @@ "security": "https://github.com/mockery/mockery/security/advisories", "source": "https://github.com/mockery/mockery" }, - "time": "2023-12-10T02:24:34+00:00" + "time": "2024-03-21T18:34:15+00:00" }, { "name": "myclabs/deep-copy", @@ -8597,38 +8570,43 @@ }, { "name": "nunomaduro/collision", - "version": "v6.4.0", + "version": "v7.10.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "f05978827b9343cba381ca05b8c7deee346b6015" + "reference": "49ec67fa7b002712da8526678abd651c09f375b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f05978827b9343cba381ca05b8c7deee346b6015", - "reference": "f05978827b9343cba381ca05b8c7deee346b6015", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/49ec67fa7b002712da8526678abd651c09f375b2", + "reference": "49ec67fa7b002712da8526678abd651c09f375b2", "shasum": "" }, "require": { - "filp/whoops": "^2.14.5", - "php": "^8.0.0", - "symfony/console": "^6.0.2" + "filp/whoops": "^2.15.3", + "nunomaduro/termwind": "^1.15.1", + "php": "^8.1.0", + "symfony/console": "^6.3.4" + }, + "conflict": { + "laravel/framework": ">=11.0.0" }, "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" + "brianium/paratest": "^7.3.0", + "laravel/framework": "^10.28.0", + "laravel/pint": "^1.13.3", + "laravel/sail": "^1.25.0", + "laravel/sanctum": "^3.3.1", + "laravel/tinker": "^2.8.2", + "nunomaduro/larastan": "^2.6.4", + "orchestra/testbench-core": "^8.13.0", + "pestphp/pest": "^2.23.2", + "phpunit/phpunit": "^10.4.1", + "sebastian/environment": "^6.0.1", + "spatie/laravel-ignition": "^2.3.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-develop": "6.x-dev" - }, "laravel": { "providers": [ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" @@ -8636,6 +8614,9 @@ } }, "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], "psr-4": { "NunoMaduro\\Collision\\": "src/" } @@ -8681,24 +8662,25 @@ "type": "patreon" } ], - "time": "2023-01-03T12:54:54+00:00" + "time": "2023-10-11T15:45:01+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -8739,9 +8721,15 @@ "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" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -8884,16 +8872,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.59", + "version": "1.10.67", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "e607609388d3a6d418a50a49f7940e8086798281" + "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e607609388d3a6d418a50a49f7940e8086798281", - "reference": "e607609388d3a6d418a50a49f7940e8086798281", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493", + "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493", "shasum": "" }, "require": { @@ -8936,26 +8924,22 @@ { "url": "https://github.com/phpstan", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" } ], - "time": "2024-02-20T13:59:13+00:00" + "time": "2024-04-16T07:22:02+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.30", + "version": "10.1.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089" + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca2bd87d2f9215904682a9cb9bb37dda98e76089", - "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", "shasum": "" }, "require": { @@ -8963,18 +8947,18 @@ "ext-libxml": "*", "ext-xmlwriter": "*", "nikic/php-parser": "^4.18 || ^5.0", - "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", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.1" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -8983,7 +8967,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "10.1-dev" } }, "autoload": { @@ -9012,7 +8996,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.30" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14" }, "funding": [ { @@ -9020,32 +9004,32 @@ "type": "github" } ], - "time": "2023-12-22T06:47:57+00:00" + "time": "2024-03-12T15:33:41+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -9072,7 +9056,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, "funding": [ { @@ -9080,28 +9065,28 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2023-08-31T06:24:48+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-pcntl": "*" @@ -9109,7 +9094,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -9135,7 +9120,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { @@ -9143,32 +9128,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -9194,7 +9179,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { @@ -9202,32 +9188,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -9253,7 +9239,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, "funding": [ { @@ -9261,24 +9247,23 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "9.6.17", + "version": "10.5.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd" + "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1a156980d78a6666721b7e8e8502fe210b587fcd", - "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/547d314dc24ec1e177720d45c6263fb226cc2ae3", + "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -9288,27 +9273,26 @@ "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" + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.5", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.1", + "sebastian/global-state": "^6.0.1", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" }, "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" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -9316,7 +9300,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.6-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -9348,7 +9332,7 @@ "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.17" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.20" }, "funding": [ { @@ -9364,32 +9348,32 @@ "type": "tidelift" } ], - "time": "2024-02-23T13:14:51+00:00" + "time": "2024-04-24T06:32:35+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -9412,7 +9396,8 @@ "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" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { @@ -9420,32 +9405,32 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -9468,7 +9453,7 @@ "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" + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { @@ -9476,32 +9461,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -9523,7 +9508,7 @@ "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" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -9531,34 +9516,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.8", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -9597,7 +9584,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" }, "funding": [ { @@ -9605,33 +9593,33 @@ "type": "github" } ], - "time": "2022-09-14T12:41:17+00:00" + "time": "2023-08-14T13:18:12+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.3", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -9654,7 +9642,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -9662,33 +9651,33 @@ "type": "github" } ], - "time": "2023-12-22T06:19:30+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "4.0.5", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -9720,7 +9709,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -9728,27 +9718,27 @@ "type": "github" } ], - "time": "2023-05-07T05:35:17+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.5", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -9756,7 +9746,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -9775,7 +9765,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -9783,7 +9773,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -9791,34 +9782,34 @@ "type": "github" } ], - "time": "2023-02-03T06:03:51+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -9860,7 +9851,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" }, "funding": [ { @@ -9868,38 +9860,35 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2024-03-02T07:17:12+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.6", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bde739e7565280bda77be70044ac1047bc007e34" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", - "reference": "bde739e7565280bda77be70044ac1047bc007e34", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -9918,13 +9907,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://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" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { @@ -9932,33 +9922,33 @@ "type": "github" } ], - "time": "2023-08-02T09:26:13+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.4", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -9981,7 +9971,8 @@ "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.4" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -9989,34 +9980,34 @@ "type": "github" } ], - "time": "2023-12-22T06:20:34+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10038,7 +10029,7 @@ "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" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -10046,32 +10037,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -10093,7 +10084,7 @@ "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" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -10101,32 +10092,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.5", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10156,7 +10147,7 @@ "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" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { @@ -10164,87 +10155,32 @@ "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" + "time": "2023-02-03T07:05:40+00:00" }, { "name": "sebastian/type", - "version": "3.2.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -10267,7 +10203,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -10275,29 +10211,29 @@ "type": "github" } ], - "time": "2023-02-03T06:13:03+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { "name": "sebastian/version", - "version": "3.0.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -10320,7 +10256,7 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -10328,20 +10264,20 @@ "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.9.0", + "version": "3.9.2", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "d63cee4890a8afaf86a22e51ad4d97c91dd4579b" + "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/d63cee4890a8afaf86a22e51ad4d97c91dd4579b", - "reference": "d63cee4890a8afaf86a22e51ad4d97c91dd4579b", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/aac1f6f347a5c5ac6bc98ad395007df00990f480", + "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480", "shasum": "" }, "require": { @@ -10408,32 +10344,32 @@ "type": "open_collective" } ], - "time": "2024-02-16T15:06:51+00:00" + "time": "2024-04-23T20:25:34+00:00" }, { "name": "ssddanbrown/asserthtml", - "version": "v2.0.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/ssddanbrown/asserthtml.git", - "reference": "6baf3ef2087f5928ae34f0d41db27aefcdf60414" + "reference": "a2cf9394dfc4138b8d9691e1bd128ccc3d8fcc5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ssddanbrown/asserthtml/zipball/6baf3ef2087f5928ae34f0d41db27aefcdf60414", - "reference": "6baf3ef2087f5928ae34f0d41db27aefcdf60414", + "url": "https://api.github.com/repos/ssddanbrown/asserthtml/zipball/a2cf9394dfc4138b8d9691e1bd128ccc3d8fcc5d", + "reference": "a2cf9394dfc4138b8d9691e1bd128ccc3d8fcc5d", "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" + "php": ">=8.1", + "phpunit/phpunit": "^10.0", + "symfony/css-selector": "^6.0", + "symfony/dom-crawler": "^6.0" }, "require-dev": { - "vimeo/psalm": "^4.10" + "phpstan/phpstan": "^1.10" }, "type": "library", "autoload": { @@ -10448,7 +10384,7 @@ "authors": [ { "name": "Dan Brown", - "email": "ssddanbrown@googlemail.com", + "homepage": "https://danb.me", "role": "Developer" } ], @@ -10456,7 +10392,7 @@ "homepage": "https://github.com/ssddanbrown/asserthtml", "support": { "issues": "https://github.com/ssddanbrown/asserthtml/issues", - "source": "https://github.com/ssddanbrown/asserthtml/tree/v2.0.0" + "source": "https://github.com/ssddanbrown/asserthtml/tree/v3.0.0" }, "funding": [ { @@ -10464,36 +10400,30 @@ "type": "github" } ], - "time": "2023-03-01T16:48:08+00:00" + "time": "2023-05-11T14:26:12+00:00" }, { "name": "symfony/dom-crawler", - "version": "v6.0.19", + "version": "v6.4.7", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "622578ff158318b1b49d95068bd6b66c713601e9" + "reference": "2088c5da700b1e7a8689fffc10dda6c1f643deea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/622578ff158318b1b49d95068bd6b66c713601e9", - "reference": "622578ff158318b1b49d95068bd6b66c713601e9", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2088c5da700b1e7a8689fffc10dda6c1f643deea", + "reference": "2088c5da700b1e7a8689fffc10dda6c1f643deea", "shasum": "" }, "require": { - "php": ">=8.0.2", + "masterminds/html5": "^2.6", + "php": ">=8.1", "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": "" + "symfony/css-selector": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -10521,7 +10451,7 @@ "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" + "source": "https://github.com/symfony/dom-crawler/tree/v6.4.7" }, "funding": [ { @@ -10537,20 +10467,20 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:44:14+00:00" + "time": "2024-04-18T09:22:46+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.2", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -10579,7 +10509,7 @@ "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.2" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -10587,7 +10517,7 @@ "type": "github" } ], - "time": "2023-11-20T00:12:19+00:00" + "time": "2024-03-03T12:36:25+00:00" } ], "aliases": [], @@ -10598,7 +10528,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.0.2", + "php": "^8.1.0", "ext-curl": "*", "ext-dom": "*", "ext-fileinfo": "*", @@ -10609,7 +10539,7 @@ }, "platform-dev": [], "platform-overrides": { - "php": "8.0.2" + "php": "8.1.0" }, "plugin-api-version": "2.3.0" } diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 61b73b7f2..638394df6 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -1,16 +1,17 @@ increments('id'); @@ -26,17 +27,15 @@ return new class extends Migration 'name' => 'Admin', 'email' => 'admin@admin.com', 'password' => bcrypt('password'), - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); } /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('users'); } diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php index f29aff42b..f53370009 100644 --- a/database/migrations/2014_10_12_100000_create_password_resets_table.php +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('password_resets', function (Blueprint $table) { $table->string('email')->index(); @@ -21,10 +20,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('password_resets'); } diff --git a/database/migrations/2015_07_12_114933_create_books_table.php b/database/migrations/2015_07_12_114933_create_books_table.php index 959169458..98d043365 100644 --- a/database/migrations/2015_07_12_114933_create_books_table.php +++ b/database/migrations/2015_07_12_114933_create_books_table.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('books', function (Blueprint $table) { $table->increments('id'); @@ -23,10 +22,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('books'); } diff --git a/database/migrations/2015_07_12_190027_create_pages_table.php b/database/migrations/2015_07_12_190027_create_pages_table.php index d9b266813..8ef5fc971 100644 --- a/database/migrations/2015_07_12_190027_create_pages_table.php +++ b/database/migrations/2015_07_12_190027_create_pages_table.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('pages', function (Blueprint $table) { $table->increments('id'); @@ -27,10 +26,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('pages'); } diff --git a/database/migrations/2015_07_13_172121_create_images_table.php b/database/migrations/2015_07_13_172121_create_images_table.php index 8814d079e..ae57fc80d 100644 --- a/database/migrations/2015_07_13_172121_create_images_table.php +++ b/database/migrations/2015_07_13_172121_create_images_table.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('images', function (Blueprint $table) { $table->increments('id'); @@ -22,10 +21,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('images'); } diff --git a/database/migrations/2015_07_27_172342_create_chapters_table.php b/database/migrations/2015_07_27_172342_create_chapters_table.php index bfccd6fac..fca92429c 100644 --- a/database/migrations/2015_07_27_172342_create_chapters_table.php +++ b/database/migrations/2015_07_27_172342_create_chapters_table.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('chapters', function (Blueprint $table) { $table->increments('id'); @@ -25,10 +24,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('chapters'); } diff --git a/database/migrations/2015_08_08_200447_add_users_to_entities.php b/database/migrations/2015_08_08_200447_add_users_to_entities.php index 8acfd360a..51dfafc6a 100644 --- a/database/migrations/2015_08_08_200447_add_users_to_entities.php +++ b/database/migrations/2015_08_08_200447_add_users_to_entities.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('pages', function (Blueprint $table) { $table->integer('created_by'); @@ -32,10 +31,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('pages', function (Blueprint $table) { $table->dropColumn('created_by'); diff --git a/database/migrations/2015_08_09_093534_create_page_revisions_table.php b/database/migrations/2015_08_09_093534_create_page_revisions_table.php index b8264fd29..af9104edc 100644 --- a/database/migrations/2015_08_09_093534_create_page_revisions_table.php +++ b/database/migrations/2015_08_09_093534_create_page_revisions_table.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('page_revisions', function (Blueprint $table) { $table->increments('id'); @@ -25,10 +24,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('page_revisions'); } diff --git a/database/migrations/2015_08_16_142133_create_activities_table.php b/database/migrations/2015_08_16_142133_create_activities_table.php index 742a4a40d..316d52ced 100644 --- a/database/migrations/2015_08_16_142133_create_activities_table.php +++ b/database/migrations/2015_08_16_142133_create_activities_table.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('activities', function (Blueprint $table) { $table->increments('id'); @@ -26,10 +25,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('activities'); } diff --git a/database/migrations/2015_08_29_105422_add_roles_and_permissions.php b/database/migrations/2015_08_29_105422_add_roles_and_permissions.php index 517cfaf43..a2a8ae9d6 100644 --- a/database/migrations/2015_08_29_105422_add_roles_and_permissions.php +++ b/database/migrations/2015_08_29_105422_add_roles_and_permissions.php @@ -10,17 +10,18 @@ * @url https://github.com/Zizaco/entrust */ +use Carbon\Carbon; use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { // Create table for storing roles Schema::create('roles', function (Blueprint $table) { @@ -71,22 +72,22 @@ return new class extends Migration 'name' => 'admin', 'display_name' => 'Admin', 'description' => 'Administrator of the whole application', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); $editorId = DB::table('roles')->insertGetId([ 'name' => 'editor', 'display_name' => 'Editor', 'description' => 'User can edit Books, Chapters & Pages', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); $viewerId = DB::table('roles')->insertGetId([ 'name' => 'viewer', 'display_name' => 'Viewer', 'description' => 'User can view books & their content behind authentication', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); // Create default CRUD permissions and allocate to admins and editors @@ -97,8 +98,8 @@ return new class extends Migration $newPermId = DB::table('permissions')->insertGetId([ 'name' => strtolower($entity) . '-' . strtolower($op), 'display_name' => $op . ' ' . $entity . 's', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); DB::table('permission_role')->insert([ ['permission_id' => $newPermId, 'role_id' => $adminId], @@ -115,8 +116,8 @@ return new class extends Migration $newPermId = DB::table('permissions')->insertGetId([ 'name' => strtolower($entity) . '-' . strtolower($op), 'display_name' => $op . ' ' . $entity, - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); DB::table('permission_role')->insert([ 'permission_id' => $newPermId, @@ -138,10 +139,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('permission_role'); Schema::drop('permissions'); diff --git a/database/migrations/2015_08_30_125859_create_settings_table.php b/database/migrations/2015_08_30_125859_create_settings_table.php index 45c9c08b3..d1273bf09 100644 --- a/database/migrations/2015_08_30_125859_create_settings_table.php +++ b/database/migrations/2015_08_30_125859_create_settings_table.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('settings', function (Blueprint $table) { $table->string('setting_key')->primary()->indexed(); @@ -21,10 +20,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('settings'); } diff --git a/database/migrations/2015_08_31_175240_add_search_indexes.php b/database/migrations/2015_08_31_175240_add_search_indexes.php index 6097fd13e..4d58d9409 100644 --- a/database/migrations/2015_08_31_175240_add_search_indexes.php +++ b/database/migrations/2015_08_31_175240_add_search_indexes.php @@ -2,13 +2,13 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ public function up() { @@ -23,15 +23,14 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { $sm = Schema::getConnection()->getDoctrineSchemaManager(); - $pages = $sm->listTableDetails('pages'); - $books = $sm->listTableDetails('books'); - $chapters = $sm->listTableDetails('chapters'); + $prefix = DB::getTablePrefix(); + $pages = $sm->introspectTable($prefix . 'pages'); + $books = $sm->introspectTable($prefix . 'books'); + $chapters = $sm->introspectTable($prefix . 'chapters'); if ($pages->hasIndex('search')) { Schema::table('pages', function (Blueprint $table) { diff --git a/database/migrations/2015_09_04_165821_create_social_accounts_table.php b/database/migrations/2015_09_04_165821_create_social_accounts_table.php index bea901136..7a9b1a496 100644 --- a/database/migrations/2015_09_04_165821_create_social_accounts_table.php +++ b/database/migrations/2015_09_04_165821_create_social_accounts_table.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('social_accounts', function (Blueprint $table) { $table->increments('id'); @@ -24,10 +23,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('social_accounts'); } diff --git a/database/migrations/2015_09_05_164707_add_email_confirmation_table.php b/database/migrations/2015_09_05_164707_add_email_confirmation_table.php index a28a5728e..9e58493c7 100644 --- a/database/migrations/2015_09_05_164707_add_email_confirmation_table.php +++ b/database/migrations/2015_09_05_164707_add_email_confirmation_table.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('users', function (Blueprint $table) { $table->boolean('email_confirmed')->default(true); @@ -26,10 +25,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('users', function (Blueprint $table) { $table->dropColumn('email_confirmed'); diff --git a/database/migrations/2015_11_21_145609_create_views_table.php b/database/migrations/2015_11_21_145609_create_views_table.php index bb8c373d8..00ccc7ac3 100644 --- a/database/migrations/2015_11_21_145609_create_views_table.php +++ b/database/migrations/2015_11_21_145609_create_views_table.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('views', function (Blueprint $table) { $table->increments('id'); @@ -24,10 +23,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('views'); } diff --git a/database/migrations/2015_11_26_221857_add_entity_indexes.php b/database/migrations/2015_11_26_221857_add_entity_indexes.php index 3203eb8a7..3f1882447 100644 --- a/database/migrations/2015_11_26_221857_add_entity_indexes.php +++ b/database/migrations/2015_11_26_221857_add_entity_indexes.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('books', function (Blueprint $table) { $table->index('slug'); @@ -48,10 +47,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('books', function (Blueprint $table) { $table->dropIndex('books_slug_index'); diff --git a/database/migrations/2015_12_05_145049_fulltext_weighting.php b/database/migrations/2015_12_05_145049_fulltext_weighting.php index a18508c45..b20c04520 100644 --- a/database/migrations/2015_12_05_145049_fulltext_weighting.php +++ b/database/migrations/2015_12_05_145049_fulltext_weighting.php @@ -2,13 +2,13 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ public function up() { @@ -23,15 +23,14 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { $sm = Schema::getConnection()->getDoctrineSchemaManager(); - $pages = $sm->listTableDetails('pages'); - $books = $sm->listTableDetails('books'); - $chapters = $sm->listTableDetails('chapters'); + $prefix = DB::getTablePrefix(); + $pages = $sm->introspectTable($prefix . 'pages'); + $books = $sm->introspectTable($prefix . 'books'); + $chapters = $sm->introspectTable($prefix . 'chapters'); if ($pages->hasIndex('name_search')) { Schema::table('pages', function (Blueprint $table) { diff --git a/database/migrations/2015_12_07_195238_add_image_upload_types.php b/database/migrations/2015_12_07_195238_add_image_upload_types.php index c9f9675c7..ce6e5d6b6 100644 --- a/database/migrations/2015_12_07_195238_add_image_upload_types.php +++ b/database/migrations/2015_12_07_195238_add_image_upload_types.php @@ -3,15 +3,14 @@ use BookStack\Uploads\Image; use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('images', function (Blueprint $table) { $table->string('path', 400); @@ -27,10 +26,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('images', function (Blueprint $table) { $table->dropColumn('type'); diff --git a/database/migrations/2015_12_09_195748_add_user_avatars.php b/database/migrations/2015_12_09_195748_add_user_avatars.php index 950526ddc..dd8bcf0b4 100644 --- a/database/migrations/2015_12_09_195748_add_user_avatars.php +++ b/database/migrations/2015_12_09_195748_add_user_avatars.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('users', function (Blueprint $table) { $table->integer('image_id')->default(0); @@ -19,10 +18,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('users', function (Blueprint $table) { $table->dropColumn('image_id'); diff --git a/database/migrations/2016_01_11_210908_add_external_auth_to_users.php b/database/migrations/2016_01_11_210908_add_external_auth_to_users.php index ff889d867..413a8a29d 100644 --- a/database/migrations/2016_01_11_210908_add_external_auth_to_users.php +++ b/database/migrations/2016_01_11_210908_add_external_auth_to_users.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('users', function (Blueprint $table) { $table->string('external_auth_id')->index(); @@ -19,10 +18,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('users', function (Blueprint $table) { $table->dropColumn('external_auth_id'); diff --git a/database/migrations/2016_02_25_184030_add_slug_to_revisions.php b/database/migrations/2016_02_25_184030_add_slug_to_revisions.php index a083e10b5..86a08f2c8 100644 --- a/database/migrations/2016_02_25_184030_add_slug_to_revisions.php +++ b/database/migrations/2016_02_25_184030_add_slug_to_revisions.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('page_revisions', function (Blueprint $table) { $table->string('slug'); @@ -22,10 +21,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('page_revisions', function (Blueprint $table) { $table->dropColumn('slug'); diff --git a/database/migrations/2016_02_27_120329_update_permissions_and_roles.php b/database/migrations/2016_02_27_120329_update_permissions_and_roles.php index dd62301d6..c0d86086d 100644 --- a/database/migrations/2016_02_27_120329_update_permissions_and_roles.php +++ b/database/migrations/2016_02_27_120329_update_permissions_and_roles.php @@ -1,15 +1,15 @@ where('name', '=', 'admin')->first()->id; @@ -30,8 +30,8 @@ return new class extends Migration $permissionId = DB::table('permissions')->insertGetId([ 'name' => $name, 'display_name' => $displayName, - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); DB::table('permission_role')->insert([ 'role_id' => $adminRoleId, @@ -47,8 +47,8 @@ return new class extends Migration $permissionId = DB::table('permissions')->insertGetId([ 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), 'display_name' => $op . ' ' . $entity . 's', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); DB::table('permission_role')->insert([ 'role_id' => $adminRoleId, @@ -66,10 +66,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { // Get roles with permissions we need to change $adminRoleId = DB::table('roles')->where('name', '=', 'admin')->first()->id; @@ -85,8 +83,8 @@ return new class extends Migration $permissionId = DB::table('permissions')->insertGetId([ 'name' => strtolower($entity) . '-' . strtolower($op), 'display_name' => $op . ' ' . $entity . 's', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); DB::table('permission_role')->insert([ 'role_id' => $adminRoleId, @@ -103,8 +101,8 @@ return new class extends Migration $permissionId = DB::table('permissions')->insertGetId([ 'name' => strtolower($entity) . '-' . strtolower($op), 'display_name' => $op . ' ' . $entity, - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); DB::table('permission_role')->insert([ 'role_id' => $adminRoleId, diff --git a/database/migrations/2016_02_28_084200_add_entity_access_controls.php b/database/migrations/2016_02_28_084200_add_entity_access_controls.php index 7a796e728..cf8ba5f30 100644 --- a/database/migrations/2016_02_28_084200_add_entity_access_controls.php +++ b/database/migrations/2016_02_28_084200_add_entity_access_controls.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('images', function (Blueprint $table) { $table->integer('uploaded_to')->default(0); @@ -46,10 +45,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('images', function (Blueprint $table) { $table->dropColumn('uploaded_to'); diff --git a/database/migrations/2016_03_09_203143_add_page_revision_types.php b/database/migrations/2016_03_09_203143_add_page_revision_types.php index 2fc630437..566f2fdeb 100644 --- a/database/migrations/2016_03_09_203143_add_page_revision_types.php +++ b/database/migrations/2016_03_09_203143_add_page_revision_types.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('page_revisions', function (Blueprint $table) { $table->string('type')->default('version'); @@ -20,10 +19,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('page_revisions', function (Blueprint $table) { $table->dropColumn('type'); diff --git a/database/migrations/2016_03_13_082138_add_page_drafts.php b/database/migrations/2016_03_13_082138_add_page_drafts.php index ce5979632..a8690513f 100644 --- a/database/migrations/2016_03_13_082138_add_page_drafts.php +++ b/database/migrations/2016_03_13_082138_add_page_drafts.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('pages', function (Blueprint $table) { $table->boolean('draft')->default(false); @@ -20,10 +19,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('pages', function (Blueprint $table) { $table->dropColumn('draft'); diff --git a/database/migrations/2016_03_25_123157_add_markdown_support.php b/database/migrations/2016_03_25_123157_add_markdown_support.php index a89fc273d..f0b42b645 100644 --- a/database/migrations/2016_03_25_123157_add_markdown_support.php +++ b/database/migrations/2016_03_25_123157_add_markdown_support.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('pages', function (Blueprint $table) { $table->longText('markdown')->default(''); @@ -23,10 +22,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('pages', function (Blueprint $table) { $table->dropColumn('markdown'); diff --git a/database/migrations/2016_04_09_100730_add_view_permissions_to_roles.php b/database/migrations/2016_04_09_100730_add_view_permissions_to_roles.php index 411c24007..481ac785f 100644 --- a/database/migrations/2016_04_09_100730_add_view_permissions_to_roles.php +++ b/database/migrations/2016_04_09_100730_add_view_permissions_to_roles.php @@ -1,15 +1,15 @@ get(); @@ -21,8 +21,8 @@ return new class extends Migration $permId = DB::table('permissions')->insertGetId([ 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), 'display_name' => $op . ' ' . $entity . 's', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); // Assign view permission to all current roles foreach ($currentRoles as $role) { @@ -37,10 +37,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { // Delete the new view permission $entities = ['Book', 'Page', 'Chapter']; diff --git a/database/migrations/2016_04_20_192649_create_joint_permissions_table.php b/database/migrations/2016_04_20_192649_create_joint_permissions_table.php index 745e156bc..ba9f615e4 100644 --- a/database/migrations/2016_04_20_192649_create_joint_permissions_table.php +++ b/database/migrations/2016_04_20_192649_create_joint_permissions_table.php @@ -1,17 +1,18 @@ increments('id'); @@ -48,8 +49,8 @@ return new class extends Migration 'description' => 'The role given to public visitors if allowed', 'system_name' => 'public', 'hidden' => true, - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]; // Ensure unique name @@ -79,10 +80,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('joint_permissions'); diff --git a/database/migrations/2016_05_06_185215_create_tags_table.php b/database/migrations/2016_05_06_185215_create_tags_table.php index b065a052f..1be9a389f 100644 --- a/database/migrations/2016_05_06_185215_create_tags_table.php +++ b/database/migrations/2016_05_06_185215_create_tags_table.php @@ -2,15 +2,14 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('tags', function (Blueprint $table) { $table->increments('id'); @@ -30,10 +29,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::drop('tags'); } diff --git a/database/migrations/2016_07_07_181521_add_summary_to_page_revisions.php b/database/migrations/2016_07_07_181521_add_summary_to_page_revisions.php index 03942b17a..562e6415f 100644 --- a/database/migrations/2016_07_07_181521_add_summary_to_page_revisions.php +++ b/database/migrations/2016_07_07_181521_add_summary_to_page_revisions.php @@ -1,15 +1,14 @@ string('summary')->nullable(); @@ -18,10 +17,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('page_revisions', function ($table) { $table->dropColumn('summary'); diff --git a/database/migrations/2016_09_29_101449_remove_hidden_roles.php b/database/migrations/2016_09_29_101449_remove_hidden_roles.php index 2f729673f..fa0a5fe92 100644 --- a/database/migrations/2016_09_29_101449_remove_hidden_roles.php +++ b/database/migrations/2016_09_29_101449_remove_hidden_roles.php @@ -1,17 +1,17 @@ 'Guest', 'system_name' => 'public', 'email_confirmed' => true, - 'created_at' => \Carbon\Carbon::now(), - 'updated_at' => \Carbon\Carbon::now(), + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), ]); // Get the public role @@ -45,10 +45,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('roles', function (Blueprint $table) { $table->boolean('hidden')->default(false); diff --git a/database/migrations/2016_10_09_142037_create_attachments_table.php b/database/migrations/2016_10_09_142037_create_attachments_table.php index 41db5723d..278051c8b 100644 --- a/database/migrations/2016_10_09_142037_create_attachments_table.php +++ b/database/migrations/2016_10_09_142037_create_attachments_table.php @@ -1,17 +1,17 @@ increments('id'); @@ -40,8 +40,8 @@ return new class extends Migration $permissionId = DB::table('role_permissions')->insertGetId([ 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), 'display_name' => $op . ' ' . $entity . 's', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); DB::table('permission_role')->insert([ 'role_id' => $adminRoleId, @@ -52,10 +52,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('attachments'); diff --git a/database/migrations/2017_01_21_163556_create_cache_table.php b/database/migrations/2017_01_21_163556_create_cache_table.php index abff912f2..7c07c0cb8 100644 --- a/database/migrations/2017_01_21_163556_create_cache_table.php +++ b/database/migrations/2017_01_21_163556_create_cache_table.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('cache', function (Blueprint $table) { $table->string('key')->unique(); @@ -22,10 +20,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('cache'); } diff --git a/database/migrations/2017_01_21_163602_create_sessions_table.php b/database/migrations/2017_01_21_163602_create_sessions_table.php index c32838a8c..3f52752c2 100644 --- a/database/migrations/2017_01_21_163602_create_sessions_table.php +++ b/database/migrations/2017_01_21_163602_create_sessions_table.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('sessions', function (Blueprint $table) { $table->string('id')->unique(); @@ -25,10 +23,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('sessions'); } diff --git a/database/migrations/2017_03_19_091553_create_search_index_table.php b/database/migrations/2017_03_19_091553_create_search_index_table.php index 03a63392a..56281741e 100644 --- a/database/migrations/2017_03_19_091553_create_search_index_table.php +++ b/database/migrations/2017_03_19_091553_create_search_index_table.php @@ -2,16 +2,15 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('search_terms', function (Blueprint $table) { $table->increments('id'); @@ -27,9 +26,10 @@ return new class extends Migration }); $sm = Schema::getConnection()->getDoctrineSchemaManager(); - $pages = $sm->listTableDetails('pages'); - $books = $sm->listTableDetails('books'); - $chapters = $sm->listTableDetails('chapters'); + $prefix = DB::getTablePrefix(); + $pages = $sm->introspectTable($prefix . 'pages'); + $books = $sm->introspectTable($prefix . 'books'); + $chapters = $sm->introspectTable($prefix . 'chapters'); if ($pages->hasIndex('search')) { Schema::table('pages', function (Blueprint $table) { @@ -55,10 +55,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { // This was removed for v0.24 since these indexes are removed anyway // and will cause issues for db engines that don't support such indexes. diff --git a/database/migrations/2017_04_20_185112_add_revision_counts.php b/database/migrations/2017_04_20_185112_add_revision_counts.php index 891ff8e0a..182d95c75 100644 --- a/database/migrations/2017_04_20_185112_add_revision_counts.php +++ b/database/migrations/2017_04_20_185112_add_revision_counts.php @@ -2,16 +2,15 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('pages', function (Blueprint $table) { $table->integer('revision_count'); @@ -29,10 +28,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('pages', function (Blueprint $table) { $table->dropColumn('revision_count'); diff --git a/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php b/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php index 7805be700..178cb584f 100644 --- a/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php +++ b/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php @@ -6,8 +6,6 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ public function up() { @@ -18,8 +16,6 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ public function down() { diff --git a/database/migrations/2017_08_01_130541_create_comments_table.php b/database/migrations/2017_08_01_130541_create_comments_table.php index f654ebf65..d14785476 100644 --- a/database/migrations/2017_08_01_130541_create_comments_table.php +++ b/database/migrations/2017_08_01_130541_create_comments_table.php @@ -1,17 +1,17 @@ increments('id')->unsigned(); @@ -37,8 +37,8 @@ return new class extends Migration $permissionId = DB::table('role_permissions')->insertGetId([ 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), 'display_name' => $op . ' ' . $entity . 's', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); DB::table('permission_role')->insert([ 'role_id' => $adminRoleId, @@ -50,10 +50,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('comments'); // Delete comment role permissions diff --git a/database/migrations/2017_08_29_102650_add_cover_image_display.php b/database/migrations/2017_08_29_102650_add_cover_image_display.php index 5ba3145f2..0f7b7d82a 100644 --- a/database/migrations/2017_08_29_102650_add_cover_image_display.php +++ b/database/migrations/2017_08_29_102650_add_cover_image_display.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('books', function (Blueprint $table) { $table->integer('image_id')->nullable()->default(null); @@ -20,10 +18,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('books', function (Blueprint $table) { $table->dropColumn('image_id'); diff --git a/database/migrations/2018_07_15_173514_add_role_external_auth_id.php b/database/migrations/2018_07_15_173514_add_role_external_auth_id.php index eb2bf91fc..586947656 100644 --- a/database/migrations/2018_07_15_173514_add_role_external_auth_id.php +++ b/database/migrations/2018_07_15_173514_add_role_external_auth_id.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('roles', function (Blueprint $table) { $table->string('external_auth_id', 180)->default(''); @@ -21,10 +19,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('roles', function (Blueprint $table) { $table->dropColumn('external_auth_id'); diff --git a/database/migrations/2018_08_04_115700_create_bookshelves_table.php b/database/migrations/2018_08_04_115700_create_bookshelves_table.php index bd3478bc7..54ccfb6ba 100644 --- a/database/migrations/2018_08_04_115700_create_bookshelves_table.php +++ b/database/migrations/2018_08_04_115700_create_bookshelves_table.php @@ -1,5 +1,6 @@ insertGetId([ 'name' => 'bookshelf-' . $dbOpName, 'display_name' => $op . ' ' . 'BookShelves', - 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), - 'updated_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), ]); $rowsToInsert = $roleIdsWithBookPermission->filter(function ($roleId) { @@ -103,10 +102,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { // Drop created permissions $ops = ['bookshelf-create-all', 'bookshelf-create-own', 'bookshelf-delete-all', 'bookshelf-delete-own', 'bookshelf-update-all', 'bookshelf-update-own', 'bookshelf-view-all', 'bookshelf-view-own']; diff --git a/database/migrations/2019_07_07_112515_add_template_support.php b/database/migrations/2019_07_07_112515_add_template_support.php index 423e02827..cabde549e 100644 --- a/database/migrations/2019_07_07_112515_add_template_support.php +++ b/database/migrations/2019_07_07_112515_add_template_support.php @@ -3,16 +3,15 @@ use Carbon\Carbon; use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('pages', function (Blueprint $table) { $table->boolean('template')->default(false); @@ -35,10 +34,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('pages', function (Blueprint $table) { $table->dropColumn('template'); diff --git a/database/migrations/2019_08_17_140214_add_user_invites_table.php b/database/migrations/2019_08_17_140214_add_user_invites_table.php index ce88a2894..1ab4c72f8 100644 --- a/database/migrations/2019_08_17_140214_add_user_invites_table.php +++ b/database/migrations/2019_08_17_140214_add_user_invites_table.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('user_invites', function (Blueprint $table) { $table->increments('id'); @@ -23,10 +21,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('user_invites'); } diff --git a/database/migrations/2019_12_29_120917_add_api_auth.php b/database/migrations/2019_12_29_120917_add_api_auth.php index 2cf970a8a..99ce8d27c 100644 --- a/database/migrations/2019_12_29_120917_add_api_auth.php +++ b/database/migrations/2019_12_29_120917_add_api_auth.php @@ -3,16 +3,15 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Carbon; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { // Add API tokens table @@ -42,10 +41,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { // Remove API tokens table Schema::dropIfExists('api_tokens'); diff --git a/database/migrations/2020_08_04_111754_drop_joint_permissions_id.php b/database/migrations/2020_08_04_111754_drop_joint_permissions_id.php index 902d3c227..882001cad 100644 --- a/database/migrations/2020_08_04_111754_drop_joint_permissions_id.php +++ b/database/migrations/2020_08_04_111754_drop_joint_permissions_id.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('joint_permissions', function (Blueprint $table) { $table->dropColumn('id'); @@ -21,10 +19,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('joint_permissions', function (Blueprint $table) { $table->dropPrimary(['role_id', 'entity_type', 'entity_id', 'action']); diff --git a/database/migrations/2020_08_04_131052_remove_role_name_field.php b/database/migrations/2020_08_04_131052_remove_role_name_field.php index cd9f64697..10800e11f 100644 --- a/database/migrations/2020_08_04_131052_remove_role_name_field.php +++ b/database/migrations/2020_08_04_131052_remove_role_name_field.php @@ -9,10 +9,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('roles', function (Blueprint $table) { $table->dropColumn('name'); @@ -21,10 +19,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('roles', function (Blueprint $table) { $table->string('name')->index(); diff --git a/database/migrations/2020_09_19_094251_add_activity_indexes.php b/database/migrations/2020_09_19_094251_add_activity_indexes.php index f7f35b62b..ca1afb1da 100644 --- a/database/migrations/2020_09_19_094251_add_activity_indexes.php +++ b/database/migrations/2020_09_19_094251_add_activity_indexes.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('activities', function (Blueprint $table) { $table->index('key'); @@ -21,10 +19,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('activities', function (Blueprint $table) { $table->dropIndex('activities_key_index'); diff --git a/database/migrations/2020_09_27_210059_add_entity_soft_deletes.php b/database/migrations/2020_09_27_210059_add_entity_soft_deletes.php index 9cc12acdc..bc6c3f18f 100644 --- a/database/migrations/2020_09_27_210059_add_entity_soft_deletes.php +++ b/database/migrations/2020_09_27_210059_add_entity_soft_deletes.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('bookshelves', function (Blueprint $table) { $table->softDeletes(); @@ -29,10 +27,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('bookshelves', function (Blueprint $table) { $table->dropSoftDeletes(); diff --git a/database/migrations/2020_09_27_210528_create_deletions_table.php b/database/migrations/2020_09_27_210528_create_deletions_table.php index 3b1098175..96c6c0b0d 100644 --- a/database/migrations/2020_09_27_210528_create_deletions_table.php +++ b/database/migrations/2020_09_27_210528_create_deletions_table.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('deletions', function (Blueprint $table) { $table->increments('id'); @@ -28,10 +26,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('deletions'); } diff --git a/database/migrations/2020_11_07_232321_simplify_activities_table.php b/database/migrations/2020_11_07_232321_simplify_activities_table.php index 6ebe3fad0..c128a3235 100644 --- a/database/migrations/2020_11_07_232321_simplify_activities_table.php +++ b/database/migrations/2020_11_07_232321_simplify_activities_table.php @@ -9,10 +9,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('activities', function (Blueprint $table) { $table->renameColumn('key', 'type'); @@ -32,10 +30,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { DB::table('activities') ->whereNull('entity_id') diff --git a/database/migrations/2020_12_30_173528_add_owned_by_field_to_entities.php b/database/migrations/2020_12_30_173528_add_owned_by_field_to_entities.php index d9fab7f02..965a061d8 100644 --- a/database/migrations/2020_12_30_173528_add_owned_by_field_to_entities.php +++ b/database/migrations/2020_12_30_173528_add_owned_by_field_to_entities.php @@ -9,10 +9,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { $tables = ['pages', 'books', 'chapters', 'bookshelves']; foreach ($tables as $table) { @@ -30,10 +28,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { $tables = ['pages', 'books', 'chapters', 'bookshelves']; foreach ($tables as $table) { diff --git a/database/migrations/2021_01_30_225441_add_settings_type_column.php b/database/migrations/2021_01_30_225441_add_settings_type_column.php index 5d83d15f1..367b93a89 100644 --- a/database/migrations/2021_01_30_225441_add_settings_type_column.php +++ b/database/migrations/2021_01_30_225441_add_settings_type_column.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('settings', function (Blueprint $table) { $table->string('type', 50)->default('string'); @@ -20,10 +18,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('settings', function (Blueprint $table) { $table->dropColumn('type'); diff --git a/database/migrations/2021_03_08_215138_add_user_slug.php b/database/migrations/2021_03_08_215138_add_user_slug.php index c0e1313a7..af01d6672 100644 --- a/database/migrations/2021_03_08_215138_add_user_slug.php +++ b/database/migrations/2021_03_08_215138_add_user_slug.php @@ -2,6 +2,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Str; @@ -9,10 +10,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('users', function (Blueprint $table) { $table->string('slug', 180); @@ -38,10 +37,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('users', function (Blueprint $table) { $table->dropColumn('slug'); diff --git a/database/migrations/2021_05_15_173110_create_favourites_table.php b/database/migrations/2021_05_15_173110_create_favourites_table.php index cdd7f4f64..73fa1b24b 100644 --- a/database/migrations/2021_05_15_173110_create_favourites_table.php +++ b/database/migrations/2021_05_15_173110_create_favourites_table.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('favourites', function (Blueprint $table) { $table->increments('id'); @@ -26,10 +24,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('favourites'); } diff --git a/database/migrations/2021_06_30_173111_create_mfa_values_table.php b/database/migrations/2021_06_30_173111_create_mfa_values_table.php index d145bf4ae..ea45b8ce1 100644 --- a/database/migrations/2021_06_30_173111_create_mfa_values_table.php +++ b/database/migrations/2021_06_30_173111_create_mfa_values_table.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('mfa_values', function (Blueprint $table) { $table->increments('id'); @@ -24,10 +22,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('mfa_values'); } diff --git a/database/migrations/2021_07_03_085038_add_mfa_enforced_to_roles_table.php b/database/migrations/2021_07_03_085038_add_mfa_enforced_to_roles_table.php index 8a180f088..b8f8b1cff 100644 --- a/database/migrations/2021_07_03_085038_add_mfa_enforced_to_roles_table.php +++ b/database/migrations/2021_07_03_085038_add_mfa_enforced_to_roles_table.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('roles', function (Blueprint $table) { $table->boolean('mfa_enforced'); @@ -20,10 +18,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('roles', function (Blueprint $table) { $table->dropColumn('mfa_enforced'); diff --git a/database/migrations/2021_08_28_161743_add_export_role_permission.php b/database/migrations/2021_08_28_161743_add_export_role_permission.php index 3bacab20b..21f45aa06 100644 --- a/database/migrations/2021_08_28_161743_add_export_role_permission.php +++ b/database/migrations/2021_08_28_161743_add_export_role_permission.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { // Create new templates-manage permission and assign to admin role $roles = DB::table('roles')->get('id'); @@ -34,10 +32,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { // Remove content-export permission $contentExportPermission = DB::table('role_permissions') diff --git a/database/migrations/2021_09_26_044614_add_activities_ip_column.php b/database/migrations/2021_09_26_044614_add_activities_ip_column.php index 5f8a95002..6c21f4b26 100644 --- a/database/migrations/2021_09_26_044614_add_activities_ip_column.php +++ b/database/migrations/2021_09_26_044614_add_activities_ip_column.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('activities', function (Blueprint $table) { $table->string('ip', 45)->after('user_id'); @@ -20,10 +18,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('activities', function (Blueprint $table) { $table->dropColumn('ip'); diff --git a/database/migrations/2021_11_26_070438_add_index_for_user_ip.php b/database/migrations/2021_11_26_070438_add_index_for_user_ip.php index 564e68a6d..9a0171bde 100644 --- a/database/migrations/2021_11_26_070438_add_index_for_user_ip.php +++ b/database/migrations/2021_11_26_070438_add_index_for_user_ip.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('activities', function (Blueprint $table) { $table->index('ip', 'activities_ip_index'); @@ -20,10 +18,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('activities', function (Blueprint $table) { $table->dropIndex('activities_ip_index'); diff --git a/database/migrations/2021_12_07_111343_create_webhooks_table.php b/database/migrations/2021_12_07_111343_create_webhooks_table.php index 15d4851d6..69be2273d 100644 --- a/database/migrations/2021_12_07_111343_create_webhooks_table.php +++ b/database/migrations/2021_12_07_111343_create_webhooks_table.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('webhooks', function (Blueprint $table) { $table->increments('id'); @@ -37,10 +35,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('webhooks'); Schema::dropIfExists('webhook_tracked_events'); diff --git a/database/migrations/2021_12_13_152024_create_jobs_table.php b/database/migrations/2021_12_13_152024_create_jobs_table.php index a786a8910..6098d9b12 100644 --- a/database/migrations/2021_12_13_152024_create_jobs_table.php +++ b/database/migrations/2021_12_13_152024_create_jobs_table.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('jobs', function (Blueprint $table) { $table->bigIncrements('id'); @@ -26,10 +24,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('jobs'); } diff --git a/database/migrations/2021_12_13_152120_create_failed_jobs_table.php b/database/migrations/2021_12_13_152120_create_failed_jobs_table.php index 17191986b..249da8171 100644 --- a/database/migrations/2021_12_13_152120_create_failed_jobs_table.php +++ b/database/migrations/2021_12_13_152120_create_failed_jobs_table.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('failed_jobs', function (Blueprint $table) { $table->id(); @@ -26,10 +24,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('failed_jobs'); } diff --git a/database/migrations/2022_01_03_154041_add_webhooks_timeout_error_columns.php b/database/migrations/2022_01_03_154041_add_webhooks_timeout_error_columns.php index cb26fa26a..968568d33 100644 --- a/database/migrations/2022_01_03_154041_add_webhooks_timeout_error_columns.php +++ b/database/migrations/2022_01_03_154041_add_webhooks_timeout_error_columns.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('webhooks', function (Blueprint $table) { $table->unsignedInteger('timeout')->default(3); @@ -23,10 +21,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('webhooks', function (Blueprint $table) { $table->dropColumn('timeout'); diff --git a/database/migrations/2022_04_17_101741_add_editor_change_field_and_permission.php b/database/migrations/2022_04_17_101741_add_editor_change_field_and_permission.php index 17ed0fba0..568e26512 100644 --- a/database/migrations/2022_04_17_101741_add_editor_change_field_and_permission.php +++ b/database/migrations/2022_04_17_101741_add_editor_change_field_and_permission.php @@ -10,10 +10,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { // Add the new 'editor' column to the pages table Schema::table('pages', function (Blueprint $table) { @@ -46,10 +44,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { // Drop the new column from the pages table Schema::table('pages', function (Blueprint $table) { diff --git a/database/migrations/2022_04_25_140741_update_polymorphic_types.php b/database/migrations/2022_04_25_140741_update_polymorphic_types.php index 2ec45e7d1..00e1e0688 100644 --- a/database/migrations/2022_04_25_140741_update_polymorphic_types.php +++ b/database/migrations/2022_04_25_140741_update_polymorphic_types.php @@ -32,10 +32,8 @@ return new class extends Migration /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { foreach ($this->columnsByTable as $table => $column) { foreach ($this->changeMap as $oldVal => $newVal) { @@ -48,10 +46,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { foreach ($this->columnsByTable as $table => $column) { foreach ($this->changeMap as $oldVal => $newVal) { diff --git a/database/migrations/2022_07_16_170051_drop_joint_permission_type.php b/database/migrations/2022_07_16_170051_drop_joint_permission_type.php index ac52af2a6..a05290e8a 100644 --- a/database/migrations/2022_07_16_170051_drop_joint_permission_type.php +++ b/database/migrations/2022_07_16_170051_drop_joint_permission_type.php @@ -9,10 +9,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { DB::table('joint_permissions') ->where('action', '!=', 'view') @@ -27,10 +25,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('joint_permissions', function (Blueprint $table) { $table->string('action'); diff --git a/database/migrations/2022_08_17_092941_create_references_table.php b/database/migrations/2022_08_17_092941_create_references_table.php index 4b688c43e..e2580289d 100644 --- a/database/migrations/2022_08_17_092941_create_references_table.php +++ b/database/migrations/2022_08_17_092941_create_references_table.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('references', function (Blueprint $table) { $table->id(); @@ -24,10 +22,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('references'); } diff --git a/database/migrations/2022_09_02_082910_fix_shelf_cover_image_types.php b/database/migrations/2022_09_02_082910_fix_shelf_cover_image_types.php index b8c23671d..aecb4bca3 100644 --- a/database/migrations/2022_09_02_082910_fix_shelf_cover_image_types.php +++ b/database/migrations/2022_09_02_082910_fix_shelf_cover_image_types.php @@ -7,10 +7,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { // This updates the 'type' field for images, uploaded as shelf cover images, // to be cover_bookshelf instead of cover_book. @@ -32,10 +30,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { DB::table('images') ->where('type', '=', 'cover_bookshelf') diff --git a/database/migrations/2022_10_07_091406_flatten_entity_permissions_table.php b/database/migrations/2022_10_07_091406_flatten_entity_permissions_table.php index f1072102f..a086796e9 100644 --- a/database/migrations/2022_10_07_091406_flatten_entity_permissions_table.php +++ b/database/migrations/2022_10_07_091406_flatten_entity_permissions_table.php @@ -10,10 +10,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { // Remove entries for non-existing roles (Caused by previous lack of deletion handling) $roleIds = DB::table('roles')->pluck('id'); @@ -63,10 +61,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { // Create old table structure for entity_permissions Schema::create('old_entity_permissions', function (Blueprint $table) { diff --git a/database/migrations/2022_10_08_104202_drop_entity_restricted_field.php b/database/migrations/2022_10_08_104202_drop_entity_restricted_field.php index b2987674d..8e45d9ea5 100644 --- a/database/migrations/2022_10_08_104202_drop_entity_restricted_field.php +++ b/database/migrations/2022_10_08_104202_drop_entity_restricted_field.php @@ -11,10 +11,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { // Remove entity-permissions on non-restricted entities $deleteInactiveEntityPermissions = function (string $table, string $morphClass) { @@ -61,10 +59,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { // Create restricted columns $createRestrictedColumn = fn(Blueprint $table) => $table->boolean('restricted')->index()->default(0); diff --git a/database/migrations/2023_01_24_104625_refactor_joint_permissions_storage.php b/database/migrations/2023_01_24_104625_refactor_joint_permissions_storage.php index 53994c52b..0e25c1d60 100644 --- a/database/migrations/2023_01_24_104625_refactor_joint_permissions_storage.php +++ b/database/migrations/2023_01_24_104625_refactor_joint_permissions_storage.php @@ -10,10 +10,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { // Truncate before schema changes to avoid performance issues // since we'll need to rebuild anyway. @@ -34,10 +32,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { DB::table('joint_permissions')->truncate(); diff --git a/database/migrations/2023_01_28_141230_copy_color_settings_for_dark_mode.php b/database/migrations/2023_01_28_141230_copy_color_settings_for_dark_mode.php index 5187dabf4..6f137eca7 100644 --- a/database/migrations/2023_01_28_141230_copy_color_settings_for_dark_mode.php +++ b/database/migrations/2023_01_28_141230_copy_color_settings_for_dark_mode.php @@ -7,10 +7,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { $colorSettings = [ 'app-color', @@ -45,10 +43,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { $colorSettings = [ 'app-color-dark', diff --git a/database/migrations/2023_02_20_093655_increase_attachments_path_length.php b/database/migrations/2023_02_20_093655_increase_attachments_path_length.php index f7cb64ce6..b2a81d49e 100644 --- a/database/migrations/2023_02_20_093655_increase_attachments_path_length.php +++ b/database/migrations/2023_02_20_093655_increase_attachments_path_length.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('attachments', function (Blueprint $table) { $table->text('path')->change(); @@ -20,10 +18,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('attachments', function (Blueprint $table) { $table->string('path')->change(); diff --git a/database/migrations/2023_02_23_200227_add_updated_at_index_to_pages.php b/database/migrations/2023_02_23_200227_add_updated_at_index_to_pages.php index 115bbb0c0..c3dc3fb0a 100644 --- a/database/migrations/2023_02_23_200227_add_updated_at_index_to_pages.php +++ b/database/migrations/2023_02_23_200227_add_updated_at_index_to_pages.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('pages', function (Blueprint $table) { $table->index('updated_at', 'pages_updated_at_index'); @@ -20,10 +18,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('pages', function (Blueprint $table) { $table->dropIndex('pages_updated_at_index'); diff --git a/database/migrations/2023_06_10_071823_remove_guest_user_secondary_roles.php b/database/migrations/2023_06_10_071823_remove_guest_user_secondary_roles.php index 8d04efdd9..05f6be4a1 100644 --- a/database/migrations/2023_06_10_071823_remove_guest_user_secondary_roles.php +++ b/database/migrations/2023_06_10_071823_remove_guest_user_secondary_roles.php @@ -7,10 +7,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { $guestUserId = DB::table('users') ->where('system_name', '=', 'public') @@ -36,8 +34,6 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ public function down() { diff --git a/database/migrations/2023_06_25_181952_remove_bookshelf_create_entity_permissions.php b/database/migrations/2023_06_25_181952_remove_bookshelf_create_entity_permissions.php index b5dcaee75..540491d3b 100644 --- a/database/migrations/2023_06_25_181952_remove_bookshelf_create_entity_permissions.php +++ b/database/migrations/2023_06_25_181952_remove_bookshelf_create_entity_permissions.php @@ -7,8 +7,6 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ public function up() { @@ -20,8 +18,6 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ public function down() { diff --git a/database/migrations/2023_07_25_124945_add_receive_notifications_role_permissions.php b/database/migrations/2023_07_25_124945_add_receive_notifications_role_permissions.php index 4872e421e..79e45a762 100644 --- a/database/migrations/2023_07_25_124945_add_receive_notifications_role_permissions.php +++ b/database/migrations/2023_07_25_124945_add_receive_notifications_role_permissions.php @@ -2,15 +2,14 @@ use Carbon\Carbon; use Illuminate\Database\Migrations\Migration; +use Illuminate\Support\Facades\DB; return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { // Create new receive-notifications permission and assign to admin role $permissionId = DB::table('role_permissions')->insertGetId([ @@ -29,10 +28,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { $permission = DB::table('role_permissions') ->where('name', '=', 'receive-notifications') diff --git a/database/migrations/2023_07_31_104430_create_watches_table.php b/database/migrations/2023_07_31_104430_create_watches_table.php index e2a5c20d0..cf2c7f105 100644 --- a/database/migrations/2023_07_31_104430_create_watches_table.php +++ b/database/migrations/2023_07_31_104430_create_watches_table.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::create('watches', function (Blueprint $table) { $table->increments('id'); @@ -27,10 +25,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::dropIfExists('watches'); } diff --git a/database/migrations/2023_08_21_174248_increase_cache_size.php b/database/migrations/2023_08_21_174248_increase_cache_size.php index 865472c2e..bca7f9fc3 100644 --- a/database/migrations/2023_08_21_174248_increase_cache_size.php +++ b/database/migrations/2023_08_21_174248_increase_cache_size.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('cache', function (Blueprint $table) { $table->mediumText('value')->change(); @@ -20,10 +18,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('cache', function (Blueprint $table) { $table->text('value')->change(); diff --git a/database/migrations/2023_12_02_104541_add_default_template_to_books.php b/database/migrations/2023_12_02_104541_add_default_template_to_books.php index c23bebc2e..bfc480a2e 100644 --- a/database/migrations/2023_12_02_104541_add_default_template_to_books.php +++ b/database/migrations/2023_12_02_104541_add_default_template_to_books.php @@ -8,10 +8,8 @@ class AddDefaultTemplateToBooks extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('books', function (Blueprint $table) { $table->integer('default_template_id')->nullable()->default(null); @@ -20,10 +18,8 @@ class AddDefaultTemplateToBooks extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('books', function (Blueprint $table) { $table->dropColumn('default_template_id'); diff --git a/database/migrations/2023_12_17_140913_add_description_html_to_entities.php b/database/migrations/2023_12_17_140913_add_description_html_to_entities.php index 68c52e81b..781197e60 100644 --- a/database/migrations/2023_12_17_140913_add_description_html_to_entities.php +++ b/database/migrations/2023_12_17_140913_add_description_html_to_entities.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { $addColumn = fn(Blueprint $table) => $table->text('description_html'); @@ -22,10 +20,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { $removeColumn = fn(Blueprint $table) => $table->removeColumn('description_html'); diff --git a/database/migrations/2024_01_01_104542_add_default_template_to_chapters.php b/database/migrations/2024_01_01_104542_add_default_template_to_chapters.php index b3a103a01..77df82272 100644 --- a/database/migrations/2024_01_01_104542_add_default_template_to_chapters.php +++ b/database/migrations/2024_01_01_104542_add_default_template_to_chapters.php @@ -8,10 +8,8 @@ class AddDefaultTemplateToChapters extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('chapters', function (Blueprint $table) { $table->integer('default_template_id')->nullable()->default(null); @@ -20,10 +18,8 @@ class AddDefaultTemplateToChapters extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('chapters', function (Blueprint $table) { $table->dropColumn('default_template_id'); diff --git a/database/migrations/2024_02_04_141358_add_views_updated_index.php b/database/migrations/2024_02_04_141358_add_views_updated_index.php index a643b3a1e..bc7538678 100644 --- a/database/migrations/2024_02_04_141358_add_views_updated_index.php +++ b/database/migrations/2024_02_04_141358_add_views_updated_index.php @@ -8,10 +8,8 @@ return new class extends Migration { /** * Run the migrations. - * - * @return void */ - public function up() + public function up(): void { Schema::table('views', function (Blueprint $table) { $table->index(['updated_at'], 'views_updated_at_index'); @@ -20,10 +18,8 @@ return new class extends Migration /** * Reverse the migrations. - * - * @return void */ - public function down() + public function down(): void { Schema::table('views', function (Blueprint $table) { $table->dropIndex('views_updated_at_index'); diff --git a/database/migrations/2024_05_04_154409_rename_activity_relation_columns.php b/database/migrations/2024_05_04_154409_rename_activity_relation_columns.php new file mode 100644 index 000000000..ee3358d73 --- /dev/null +++ b/database/migrations/2024_05_04_154409_rename_activity_relation_columns.php @@ -0,0 +1,30 @@ +renameColumn('entity_id', 'loggable_id'); + $table->renameColumn('entity_type', 'loggable_type'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('activities', function (Blueprint $table) { + $table->renameColumn('loggable_id', 'entity_id'); + $table->renameColumn('loggable_type', 'entity_type'); + }); + } +}; diff --git a/dev/api/responses/audit-log-list.json b/dev/api/responses/audit-log-list.json new file mode 100644 index 000000000..15a25e106 --- /dev/null +++ b/dev/api/responses/audit-log-list.json @@ -0,0 +1,80 @@ +{ + "data": [ + { + "id": 1, + "type": "bookshelf_create", + "detail": "", + "user_id": 1, + "loggable_id": 1, + "loggable_type": "bookshelf", + "ip": "124.4.x.x", + "created_at": "2021-09-29T12:32:02.000000Z", + "user": { + "id": 1, + "name": "Admins", + "slug": "admins" + } + }, + { + "id": 2, + "type": "auth_login", + "detail": "standard; (1) Admin", + "user_id": 1, + "loggable_id": null, + "loggable_type": null, + "ip": "127.0.x.x", + "created_at": "2021-09-29T12:32:04.000000Z", + "user": { + "id": 1, + "name": "Admins", + "slug": "admins" + } + }, + { + "id": 3, + "type": "bookshelf_update", + "detail": "", + "user_id": 1, + "loggable_id": 1, + "loggable_type": "bookshelf", + "ip": "127.0.x.x", + "created_at": "2021-09-29T12:32:07.000000Z", + "user": { + "id": 1, + "name": "Admins", + "slug": "admins" + } + }, + { + "id": 4, + "type": "page_create", + "detail": "", + "user_id": 1, + "loggable_id": 1, + "loggable_type": "page", + "ip": "127.0.x.x", + "created_at": "2021-09-29T12:32:13.000000Z", + "user": { + "id": 1, + "name": "Admins", + "slug": "admins" + } + }, + { + "id": 5, + "type": "page_update", + "detail": "", + "user_id": 1, + "loggable_id": 1, + "loggable_type": "page", + "ip": "127.0.x.x", + "created_at": "2021-09-29T12:37:27.000000Z", + "user": { + "id": 1, + "name": "Admins", + "slug": "admins" + } + } + ], + "total": 6088 +} \ No newline at end of file diff --git a/dev/build/esbuild.js b/dev/build/esbuild.js index c47727c2c..c5b3c9ef3 100644 --- a/dev/build/esbuild.js +++ b/dev/build/esbuild.js @@ -13,6 +13,7 @@ const entryPoints = { app: path.join(__dirname, '../../resources/js/app.js'), code: path.join(__dirname, '../../resources/js/code/index.mjs'), 'legacy-modes': path.join(__dirname, '../../resources/js/code/legacy-modes.mjs'), + markdown: path.join(__dirname, '../../resources/js/markdown/index.mjs'), }; // Locate our output directory @@ -30,6 +31,10 @@ esbuild.build({ format: 'esm', minify: isProd, logLevel: 'info', + banner: { + js: '// See the "/licenses" URI for full package license details', + css: '/* See the "/licenses" URI for full package license details */', + }, }).then(result => { fs.writeFileSync('esbuild-meta.json', JSON.stringify(result.metafile)); }).catch(() => process.exit(1)); diff --git a/dev/docker/Dockerfile b/dev/docker/Dockerfile index 349e315d2..fe497e9e6 100644 --- a/dev/docker/Dockerfile +++ b/dev/docker/Dockerfile @@ -3,23 +3,32 @@ FROM php:8.1-apache ENV APACHE_DOCUMENT_ROOT /app/public WORKDIR /app -# Install additional dependacnies and configure apache -RUN apt-get update -y \ - && apt-get install -y git zip unzip libpng-dev libldap2-dev libzip-dev wait-for-it \ - && docker-php-ext-configure ldap --with-libdir="lib/$(gcc -dumpmachine)" \ - && docker-php-ext-install pdo_mysql gd ldap zip \ - && pecl install xdebug \ - && docker-php-ext-enable xdebug \ - && a2enmod rewrite \ - && sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \ - && sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf +RUN <name}"]; + + $license = $package->license ?? ''; + if ($license) { + $output[] = "License: {$license}"; + } else { + warn("Package {$package->name}: No license found"); + } + + $licenseFile = findLicenseFile($package->name, $packagePath); + if ($licenseFile) { + $relLicenseFile = str_replace("{$rootPath}/", '', $licenseFile); + $output[] = "License File: {$relLicenseFile}"; + $copyright = findCopyright($licenseFile); + if ($copyright) { + $output[] = "Copyright: {$copyright}"; + } else { + warn("Package {$package->name}: no copyright found in its license"); + } + } + + $source = $package->repository->url ?? $package->repository ?? ''; + if ($source) { + $output[] = "Source: {$source}"; + } + + $link = $package->homepage ?? $source; + if ($link) { + $output[] = "Link: {$link}"; + } + + return implode("\n", $output); +} diff --git a/dev/licensing/gen-licenses-shared.php b/dev/licensing/gen-licenses-shared.php new file mode 100644 index 000000000..a8ad350f2 --- /dev/null +++ b/dev/licensing/gen-licenses-shared.php @@ -0,0 +1,66 @@ + 1) { + warn("Package {$packageName}: more than one license file found"); + } + + if (count($foundLicenses) > 0) { + $fileName = basename($foundLicenses[0]); + return "{$packageDir}/{$fileName}"; + } + + warn("Package {$packageName}: no license files found"); + return ''; +} + +function findCopyright(string $licenseFile): string +{ + $fileContents = file_get_contents($licenseFile); + $pattern = '/^.*?copyright (\(c\)|\d{4})[\s\S]*?(\n\n|\.\n)/mi'; + $matches = []; + preg_match($pattern, $fileContents, $matches); + $copyright = trim($matches[0] ?? ''); + + if (str_contains($copyright, 'i.e.')) { + return ''; + } + + $emailPattern = '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/i'; + return preg_replace_callback($emailPattern, obfuscateEmail(...), $copyright); +} + +function obfuscateEmail(array $matches): string +{ + return preg_replace('/[^@.]/', '*', $matches[1]); +} + +function warn(string $text): void +{ + global $warnings; + $warnings[] = "WARN:" . $text; +} + +function getWarnings(): array +{ + global $warnings; + return $warnings; +} diff --git a/dev/licensing/gen-php-licenses b/dev/licensing/gen-php-licenses new file mode 100644 index 000000000..79f4c2ff6 --- /dev/null +++ b/dev/licensing/gen-php-licenses @@ -0,0 +1,55 @@ +#!/usr/bin/env php +packages; +$packageOutput = array_map(packageToOutput(...), $packages); + +$licenseInfo = implode($outputSeparator, $packageOutput) . "\n"; +file_put_contents($outputPath, $licenseInfo); + +echo "License information written to {$outputPath}\n"; +echo implode("\n", getWarnings()) . "\n"; + +function packageToOutput(stdClass $package) : string { + global $rootPath; + $output = ["{$package->name}"]; + + $licenses = is_array($package->license) ? $package->license : [$package->license]; + $output[] = "License: " . implode(' ', $licenses); + + $packagePath = "{$rootPath}/vendor/{$package->name}/package.json"; + $licenseFile = findLicenseFile($package->name, $packagePath); + if ($licenseFile) { + $relLicenseFile = str_replace("{$rootPath}/", '', $licenseFile); + $output[] = "License File: {$relLicenseFile}"; + $copyright = findCopyright($licenseFile); + if ($copyright) { + $output[] = "Copyright: {$copyright}"; + } else { + warn("Package {$package->name}: no copyright found in its license"); + } + } + + $source = $package->source->url; + if ($source) { + $output[] = "Source: {$source}"; + } + + $link = $package->homepage ?? $package->source->url ?? ''; + if ($link) { + $output[] = "Link: {$link}"; + } + + return implode("\n", $output); +} \ No newline at end of file diff --git a/dev/licensing/js-library-licenses.txt b/dev/licensing/js-library-licenses.txt new file mode 100644 index 000000000..8211a4a44 --- /dev/null +++ b/dev/licensing/js-library-licenses.txt @@ -0,0 +1,2006 @@ +acorn-jsx +License: MIT +License File: node_modules/acorn-jsx/LICENSE +Copyright: Copyright (C) 2012-2017 by Ingvar Stepanyan +Source: https://github.com/acornjs/acorn-jsx +Link: https://github.com/acornjs/acorn-jsx +----------- +acorn +License: MIT +License File: node_modules/acorn/LICENSE +Copyright: Copyright (C) 2012-2022 by various contributors (see AUTHORS) +Source: https://github.com/acornjs/acorn.git +Link: https://github.com/acornjs/acorn +----------- +ajv +License: MIT +License File: node_modules/ajv/LICENSE +Copyright: Copyright (c) 2015-2017 Evgeny Poberezkin +Source: https://github.com/ajv-validator/ajv.git +Link: https://github.com/ajv-validator/ajv +----------- +ansi-regex +License: MIT +License File: node_modules/ansi-regex/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: chalk/ansi-regex +Link: chalk/ansi-regex +----------- +ansi-styles +License: MIT +License File: node_modules/ansi-styles/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: chalk/ansi-styles +Link: chalk/ansi-styles +----------- +anymatch +License: ISC +License File: node_modules/anymatch/LICENSE +Copyright: Copyright (c) 2019 Elan Shanker, Paul Miller (https://paulmillr.com) +Source: https://github.com/micromatch/anymatch +Link: https://github.com/micromatch/anymatch +----------- +argparse +License: Python-2.0 +License File: node_modules/argparse/LICENSE +Source: nodeca/argparse +Link: nodeca/argparse +----------- +array-buffer-byte-length +License: MIT +License File: node_modules/array-buffer-byte-length/LICENSE +Copyright: Copyright (c) 2023 Inspect JS +Source: git+https://github.com/inspect-js/array-buffer-byte-length.git +Link: https://github.com/inspect-js/array-buffer-byte-length#readme +----------- +array-includes +License: MIT +License File: node_modules/array-includes/LICENSE +Copyright: Copyright (C) 2015 Jordan Harband +Source: git://github.com/es-shims/array-includes.git +Link: git://github.com/es-shims/array-includes.git +----------- +array.prototype.findlastindex +License: MIT +License File: node_modules/array.prototype.findlastindex/LICENSE +Copyright: Copyright (c) 2021 ECMAScript Shims +Source: git+https://github.com/es-shims/Array.prototype.findLastIndex.git +Link: https://github.com/es-shims/Array.prototype.findLastIndex#readme +----------- +array.prototype.flat +License: MIT +License File: node_modules/array.prototype.flat/LICENSE +Copyright: Copyright (c) 2017 ECMAScript Shims +Source: git://github.com/es-shims/Array.prototype.flat.git +Link: git://github.com/es-shims/Array.prototype.flat.git +----------- +array.prototype.flatmap +License: MIT +License File: node_modules/array.prototype.flatmap/LICENSE +Copyright: Copyright (c) 2017 ECMAScript Shims +Source: git://github.com/es-shims/Array.prototype.flatMap.git +Link: git://github.com/es-shims/Array.prototype.flatMap.git +----------- +arraybuffer.prototype.slice +License: MIT +License File: node_modules/arraybuffer.prototype.slice/LICENSE +Copyright: Copyright (c) 2023 ECMAScript Shims +Source: git+https://github.com/es-shims/ArrayBuffer.prototype.slice.git +Link: https://github.com/es-shims/ArrayBuffer.prototype.slice#readme +----------- +available-typed-arrays +License: MIT +License File: node_modules/available-typed-arrays/LICENSE +Copyright: Copyright (c) 2020 Inspect JS +Source: git+https://github.com/inspect-js/available-typed-arrays.git +Link: https://github.com/inspect-js/available-typed-arrays#readme +----------- +balanced-match +License: MIT +License File: node_modules/balanced-match/LICENSE.md +Copyright: Copyright (c) 2013 Julian Gruber <******@************.***> +Source: git://github.com/juliangruber/balanced-match.git +Link: https://github.com/juliangruber/balanced-match +----------- +binary-extensions +License: MIT +License File: node_modules/binary-extensions/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com) +Copyright (c) Paul Miller (https://paulmillr.com) +Source: sindresorhus/binary-extensions +Link: sindresorhus/binary-extensions +----------- +brace-expansion +License: MIT +License File: node_modules/brace-expansion/LICENSE +Copyright: Copyright (c) 2013 Julian Gruber <******@************.***> +Source: git://github.com/juliangruber/brace-expansion.git +Link: https://github.com/juliangruber/brace-expansion +----------- +braces +License: MIT +License File: node_modules/braces/LICENSE +Copyright: Copyright (c) 2014-2018, Jon Schlinkert. +Source: micromatch/braces +Link: https://github.com/micromatch/braces +----------- +call-bind +License: MIT +License File: node_modules/call-bind/LICENSE +Copyright: Copyright (c) 2020 Jordan Harband +Source: git+https://github.com/ljharb/call-bind.git +Link: https://github.com/ljharb/call-bind#readme +----------- +callsites +License: MIT +License File: node_modules/callsites/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/callsites +Link: sindresorhus/callsites +----------- +camelcase +License: MIT +License File: node_modules/camelcase/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/camelcase +Link: sindresorhus/camelcase +----------- +chalk +License: MIT +License File: node_modules/chalk/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: chalk/chalk +Link: chalk/chalk +----------- +chokidar-cli +License: MIT +License File: node_modules/chokidar-cli/LICENSE +Copyright: Copyright (c) 2015 Kimmo Brunfeldt +Source: https://github.com/open-npm-tools/chokidar-cli.git +Link: https://github.com/open-npm-tools/chokidar-cli +----------- +chokidar +License: MIT +License File: node_modules/chokidar/LICENSE +Copyright: Copyright (c) 2012-2019 Paul Miller (https://paulmillr.com), Elan Shanker +Source: git+https://github.com/paulmillr/chokidar.git +Link: https://github.com/paulmillr/chokidar +----------- +cliui +License: ISC +License File: node_modules/cliui/LICENSE.txt +Copyright: Copyright (c) 2015, Contributors +Source: http://github.com/yargs/cliui.git +Link: http://github.com/yargs/cliui.git +----------- +codemirror +License: MIT +License File: node_modules/codemirror/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <*******@*****.***> and others +Source: https://github.com/codemirror/basic-setup.git +Link: https://github.com/codemirror/basic-setup.git +----------- +color-convert +License: MIT +License File: node_modules/color-convert/LICENSE +Copyright: Copyright (c) 2011-2016 Heather Arthur <**********@*****.***> +Source: Qix-/color-convert +Link: Qix-/color-convert +----------- +color-name +License: MIT +License File: node_modules/color-name/LICENSE +Source: git@github.com:colorjs/color-name.git +Link: https://github.com/colorjs/color-name +----------- +concat-map +License: MIT +License File: node_modules/concat-map/LICENSE +Source: git://github.com/substack/node-concat-map.git +Link: git://github.com/substack/node-concat-map.git +----------- +confusing-browser-globals +License: MIT +License File: node_modules/confusing-browser-globals/LICENSE +Copyright: Copyright (c) 2013-present, Facebook, Inc. +Source: https://github.com/facebook/create-react-app.git +Link: https://github.com/facebook/create-react-app.git +----------- +crelt +License: MIT +License File: node_modules/crelt/LICENSE +Copyright: Copyright (C) 2020 by Marijn Haverbeke <******@*********.******> +Source: git+https://github.com/marijnh/crelt.git +Link: https://github.com/marijnh/crelt#readme +----------- +cross-spawn +License: MIT +License File: node_modules/cross-spawn/LICENSE +Copyright: Copyright (c) 2018 Made With MOXY Lda <*****@****.******> +Source: git@github.com:moxystudio/node-cross-spawn.git +Link: https://github.com/moxystudio/node-cross-spawn +----------- +data-view-buffer +License: MIT +License File: node_modules/data-view-buffer/LICENSE +Copyright: Copyright (c) 2023 Jordan Harband +Source: git+https://github.com/ljharb/data-view-buffer.git +Link: https://github.com/ljharb/data-view-buffer#readme +----------- +data-view-byte-length +License: MIT +License File: node_modules/data-view-byte-length/LICENSE +Copyright: Copyright (c) 2024 Jordan Harband +Source: git+https://github.com/ljharb/data-view-byte-length.git +Link: https://github.com/ljharb/data-view-byte-length#readme +----------- +data-view-byte-offset +License: MIT +License File: node_modules/data-view-byte-offset/LICENSE +Copyright: Copyright (c) 2024 Jordan Harband +Source: git+https://github.com/ljharb/data-view-byte-offset.git +Link: https://github.com/ljharb/data-view-byte-offset#readme +----------- +debug +License: MIT +License File: node_modules/debug/LICENSE +Copyright: Copyright (c) 2014-2017 TJ Holowaychuk <**@************.**> +Copyright (c) 2018-2021 Josh Junon +Source: git://github.com/debug-js/debug.git +Link: git://github.com/debug-js/debug.git +----------- +decamelize +License: MIT +License File: node_modules/decamelize/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/decamelize +Link: sindresorhus/decamelize +----------- +deep-is +License: MIT +License File: node_modules/deep-is/LICENSE +Copyright: Copyright (c) 2012, 2013 Thorsten Lorenz <********@***.**> +Copyright (c) 2012 James Halliday <****@********.***> +Copyright (c) 2009 Thomas Robinson <280north.com> +Source: http://github.com/thlorenz/deep-is.git +Link: http://github.com/thlorenz/deep-is.git +----------- +define-data-property +License: MIT +License File: node_modules/define-data-property/LICENSE +Copyright: Copyright (c) 2023 Jordan Harband +Source: git+https://github.com/ljharb/define-data-property.git +Link: https://github.com/ljharb/define-data-property#readme +----------- +define-properties +License: MIT +License File: node_modules/define-properties/LICENSE +Copyright: Copyright (C) 2015 Jordan Harband +Source: git://github.com/ljharb/define-properties.git +Link: git://github.com/ljharb/define-properties.git +----------- +doctrine +License: Apache-2.0 +License File: node_modules/doctrine/LICENSE +Source: eslint/doctrine +Link: https://github.com/eslint/doctrine +----------- +emoji-regex +License: MIT +License File: node_modules/emoji-regex/LICENSE-MIT.txt +Source: https://github.com/mathiasbynens/emoji-regex.git +Link: https://mths.be/emoji-regex +----------- +entities +License: BSD-2-Clause +License File: node_modules/entities/LICENSE +Copyright: Copyright (c) Felix Böhm +All rights reserved. +Source: git://github.com/fb55/entities.git +Link: git://github.com/fb55/entities.git +----------- +error-ex +License: MIT +License File: node_modules/error-ex/LICENSE +Copyright: Copyright (c) 2015 JD Ballard +Source: qix-/node-error-ex +Link: qix-/node-error-ex +----------- +es-abstract +License: MIT +License File: node_modules/es-abstract/LICENSE +Copyright: Copyright (C) 2015 Jordan Harband +Source: git://github.com/ljharb/es-abstract.git +Link: git://github.com/ljharb/es-abstract.git +----------- +es-define-property +License: MIT +License File: node_modules/es-define-property/LICENSE +Copyright: Copyright (c) 2024 Jordan Harband +Source: git+https://github.com/ljharb/es-define-property.git +Link: https://github.com/ljharb/es-define-property#readme +----------- +es-errors +License: MIT +License File: node_modules/es-errors/LICENSE +Copyright: Copyright (c) 2024 Jordan Harband +Source: git+https://github.com/ljharb/es-errors.git +Link: https://github.com/ljharb/es-errors#readme +----------- +es-object-atoms +License: MIT +License File: node_modules/es-object-atoms/LICENSE +Copyright: Copyright (c) 2024 Jordan Harband +Source: git+https://github.com/ljharb/es-object-atoms.git +Link: https://github.com/ljharb/es-object-atoms#readme +----------- +es-set-tostringtag +License: MIT +License File: node_modules/es-set-tostringtag/LICENSE +Copyright: Copyright (c) 2022 ECMAScript Shims +Source: git+https://github.com/es-shims/es-set-tostringtag.git +Link: https://github.com/es-shims/es-set-tostringtag#readme +----------- +es-shim-unscopables +License: MIT +License File: node_modules/es-shim-unscopables/LICENSE +Copyright: Copyright (c) 2022 Jordan Harband +Source: git+https://github.com/ljharb/es-shim-unscopables.git +Link: https://github.com/ljharb/es-shim-unscopables#readme +----------- +es-to-primitive +License: MIT +License File: node_modules/es-to-primitive/LICENSE +Copyright: Copyright (c) 2015 Jordan Harband +Source: git://github.com/ljharb/es-to-primitive.git +Link: git://github.com/ljharb/es-to-primitive.git +----------- +esbuild +License: MIT +License File: node_modules/esbuild/LICENSE.md +Copyright: Copyright (c) 2020 Evan Wallace +Source: git+https://github.com/evanw/esbuild.git +Link: git+https://github.com/evanw/esbuild.git +----------- +escape-string-regexp +License: MIT +License File: node_modules/escape-string-regexp/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com) +Source: sindresorhus/escape-string-regexp +Link: sindresorhus/escape-string-regexp +----------- +eslint-config-airbnb-base +License: MIT +License File: node_modules/eslint-config-airbnb-base/LICENSE.md +Copyright: Copyright (c) 2012 Airbnb +Source: https://github.com/airbnb/javascript +Link: https://github.com/airbnb/javascript +----------- +eslint-import-resolver-node +License: MIT +License File: node_modules/eslint-import-resolver-node/LICENSE +Copyright: Copyright (c) 2015 Ben Mosher +Source: https://github.com/import-js/eslint-plugin-import +Link: https://github.com/import-js/eslint-plugin-import +----------- +eslint-module-utils +License: MIT +License File: node_modules/eslint-module-utils/LICENSE +Copyright: Copyright (c) 2015 Ben Mosher +Source: git+https://github.com/import-js/eslint-plugin-import.git +Link: https://github.com/import-js/eslint-plugin-import#readme +----------- +eslint-plugin-import +License: MIT +License File: node_modules/eslint-plugin-import/LICENSE +Copyright: Copyright (c) 2015 Ben Mosher +Source: https://github.com/import-js/eslint-plugin-import +Link: https://github.com/import-js/eslint-plugin-import +----------- +eslint-scope +License: BSD-2-Clause +License File: node_modules/eslint-scope/LICENSE +Copyright: Copyright (C) 2012-2013 Yusuke Suzuki (twitter: @Constellation) and other contributors. +Source: eslint/eslint-scope +Link: http://github.com/eslint/eslint-scope +----------- +eslint-visitor-keys +License: Apache-2.0 +License File: node_modules/eslint-visitor-keys/LICENSE +Source: eslint/eslint-visitor-keys +Link: https://github.com/eslint/eslint-visitor-keys#readme +----------- +eslint +License: MIT +License File: node_modules/eslint/LICENSE +Source: eslint/eslint +Link: https://eslint.org +----------- +espree +License: BSD-2-Clause +License File: node_modules/espree/LICENSE +Copyright: Copyright (c) Open JS Foundation +All rights reserved. +Source: eslint/espree +Link: https://github.com/eslint/espree +----------- +esquery +License: BSD-3-Clause +License File: node_modules/esquery/license.txt +Copyright: Copyright (c) 2013, Joel Feenstra +All rights reserved. +Source: https://github.com/estools/esquery.git +Link: https://github.com/estools/esquery/ +----------- +esrecurse +License: BSD-2-Clause +Source: https://github.com/estools/esrecurse.git +Link: https://github.com/estools/esrecurse +----------- +estraverse +License: BSD-2-Clause +License File: node_modules/estraverse/LICENSE.BSD +Source: http://github.com/estools/estraverse.git +Link: https://github.com/estools/estraverse +----------- +esutils +License: BSD-2-Clause +License File: node_modules/esutils/LICENSE.BSD +Source: http://github.com/estools/esutils.git +Link: https://github.com/estools/esutils +----------- +fast-deep-equal +License: MIT +License File: node_modules/fast-deep-equal/LICENSE +Copyright: Copyright (c) 2017 Evgeny Poberezkin +Source: git+https://github.com/epoberezkin/fast-deep-equal.git +Link: https://github.com/epoberezkin/fast-deep-equal#readme +----------- +fast-json-stable-stringify +License: MIT +License File: node_modules/fast-json-stable-stringify/LICENSE +Copyright: Copyright (c) 2017 Evgeny Poberezkin +Copyright (c) 2013 James Halliday +Source: git://github.com/epoberezkin/fast-json-stable-stringify.git +Link: https://github.com/epoberezkin/fast-json-stable-stringify +----------- +fast-levenshtein +License: MIT +License File: node_modules/fast-levenshtein/LICENSE.md +Copyright: Copyright (c) 2013 [Ramesh Nair](http://www.hiddentao.com/) +Source: https://github.com/hiddentao/fast-levenshtein.git +Link: https://github.com/hiddentao/fast-levenshtein.git +----------- +fastq +License: ISC +License File: node_modules/fastq/LICENSE +Copyright: Copyright (c) 2015-2020, Matteo Collina <******.*******@*****.***> +Source: git+https://github.com/mcollina/fastq.git +Link: https://github.com/mcollina/fastq#readme +----------- +file-entry-cache +License: MIT +License File: node_modules/file-entry-cache/LICENSE +Copyright: Copyright (c) 2015 Roy Riojas +Source: royriojas/file-entry-cache +Link: royriojas/file-entry-cache +----------- +fill-range +License: MIT +License File: node_modules/fill-range/LICENSE +Copyright: Copyright (c) 2014-present, Jon Schlinkert. +Source: jonschlinkert/fill-range +Link: https://github.com/jonschlinkert/fill-range +----------- +find-up +License: MIT +License File: node_modules/find-up/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com) +Source: sindresorhus/find-up +Link: sindresorhus/find-up +----------- +flat-cache +License: MIT +License File: node_modules/flat-cache/LICENSE +Copyright: Copyright (c) Roy Riojas and Jared Wray +Source: jaredwray/flat-cache +Link: jaredwray/flat-cache +----------- +flatted +License: ISC +License File: node_modules/flatted/LICENSE +Copyright: Copyright (c) 2018-2020, Andrea Giammarchi, @WebReflection +Source: git+https://github.com/WebReflection/flatted.git +Link: https://github.com/WebReflection/flatted#readme +----------- +for-each +License: MIT +License File: node_modules/for-each/LICENSE +Copyright: Copyright (c) 2012 Raynos. +Source: git://github.com/Raynos/for-each.git +Link: https://github.com/Raynos/for-each +----------- +fs.realpath +License: ISC +License File: node_modules/fs.realpath/LICENSE +Copyright: Copyright (c) Isaac Z. Schlueter and Contributors +Source: git+https://github.com/isaacs/fs.realpath.git +Link: git+https://github.com/isaacs/fs.realpath.git +----------- +function-bind +License: MIT +License File: node_modules/function-bind/LICENSE +Copyright: Copyright (c) 2013 Raynos. +Source: https://github.com/Raynos/function-bind.git +Link: https://github.com/Raynos/function-bind +----------- +function.prototype.name +License: MIT +License File: node_modules/function.prototype.name/LICENSE +Copyright: Copyright (c) 2016 Jordan Harband +Source: git://github.com/es-shims/Function.prototype.name.git +Link: git://github.com/es-shims/Function.prototype.name.git +----------- +functions-have-names +License: MIT +License File: node_modules/functions-have-names/LICENSE +Copyright: Copyright (c) 2019 Jordan Harband +Source: git+https://github.com/inspect-js/functions-have-names.git +Link: https://github.com/inspect-js/functions-have-names#readme +----------- +get-caller-file +License: ISC +License File: node_modules/get-caller-file/LICENSE.md +Copyright: Copyright 2018 Stefan Penner +Source: git+https://github.com/stefanpenner/get-caller-file.git +Link: https://github.com/stefanpenner/get-caller-file#readme +----------- +get-intrinsic +License: MIT +License File: node_modules/get-intrinsic/LICENSE +Copyright: Copyright (c) 2020 Jordan Harband +Source: git+https://github.com/ljharb/get-intrinsic.git +Link: https://github.com/ljharb/get-intrinsic#readme +----------- +get-symbol-description +License: MIT +License File: node_modules/get-symbol-description/LICENSE +Copyright: Copyright (c) 2021 Inspect JS +Source: git+https://github.com/inspect-js/get-symbol-description.git +Link: https://github.com/inspect-js/get-symbol-description#readme +----------- +glob-parent +License: ISC +License File: node_modules/glob-parent/LICENSE +Copyright: Copyright (c) 2015, 2019 Elan Shanker +Source: gulpjs/glob-parent +Link: gulpjs/glob-parent +----------- +glob +License: ISC +License File: node_modules/glob/LICENSE +Copyright: Copyright (c) Isaac Z. Schlueter and Contributors +Source: git://github.com/isaacs/node-glob.git +Link: git://github.com/isaacs/node-glob.git +----------- +globals +License: MIT +License File: node_modules/globals/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com) +Source: sindresorhus/globals +Link: sindresorhus/globals +----------- +globalthis +License: MIT +License File: node_modules/globalthis/LICENSE +Copyright: Copyright (c) 2016 Jordan Harband +Source: git://github.com/ljharb/System.global.git +Link: git://github.com/ljharb/System.global.git +----------- +gopd +License: MIT +License File: node_modules/gopd/LICENSE +Copyright: Copyright (c) 2022 Jordan Harband +Source: git+https://github.com/ljharb/gopd.git +Link: https://github.com/ljharb/gopd#readme +----------- +graceful-fs +License: ISC +License File: node_modules/graceful-fs/LICENSE +Copyright: Copyright (c) 2011-2022 Isaac Z. Schlueter, Ben Noordhuis, and Contributors +Source: https://github.com/isaacs/node-graceful-fs +Link: https://github.com/isaacs/node-graceful-fs +----------- +graphemer +License: MIT +License File: node_modules/graphemer/LICENSE +Copyright: Copyright 2020 Filament (Anomalous Technologies Limited) +Source: https://github.com/flmnt/graphemer.git +Link: https://github.com/flmnt/graphemer +----------- +has-bigints +License: MIT +License File: node_modules/has-bigints/LICENSE +Copyright: Copyright (c) 2019 Jordan Harband +Source: git+https://github.com/ljharb/has-bigints.git +Link: https://github.com/ljharb/has-bigints#readme +----------- +has-flag +License: MIT +License File: node_modules/has-flag/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/has-flag +Link: sindresorhus/has-flag +----------- +has-property-descriptors +License: MIT +License File: node_modules/has-property-descriptors/LICENSE +Copyright: Copyright (c) 2022 Inspect JS +Source: git+https://github.com/inspect-js/has-property-descriptors.git +Link: https://github.com/inspect-js/has-property-descriptors#readme +----------- +has-proto +License: MIT +License File: node_modules/has-proto/LICENSE +Copyright: Copyright (c) 2022 Inspect JS +Source: git+https://github.com/inspect-js/has-proto.git +Link: https://github.com/inspect-js/has-proto#readme +----------- +has-symbols +License: MIT +License File: node_modules/has-symbols/LICENSE +Copyright: Copyright (c) 2016 Jordan Harband +Source: git://github.com/inspect-js/has-symbols.git +Link: https://github.com/ljharb/has-symbols#readme +----------- +has-tostringtag +License: MIT +License File: node_modules/has-tostringtag/LICENSE +Copyright: Copyright (c) 2021 Inspect JS +Source: git+https://github.com/inspect-js/has-tostringtag.git +Link: https://github.com/inspect-js/has-tostringtag#readme +----------- +hasown +License: MIT +License File: node_modules/hasown/LICENSE +Copyright: Copyright (c) Jordan Harband and contributors +Source: git+https://github.com/inspect-js/hasOwn.git +Link: https://github.com/inspect-js/hasOwn#readme +----------- +hosted-git-info +License: ISC +License File: node_modules/hosted-git-info/LICENSE +Copyright: Copyright (c) 2015, Rebecca Turner +Source: git+https://github.com/npm/hosted-git-info.git +Link: https://github.com/npm/hosted-git-info +----------- +idb-keyval +License: Apache-2.0 +Source: git+https://github.com/jakearchibald/idb-keyval.git +Link: https://github.com/jakearchibald/idb-keyval#readme +----------- +ignore +License: MIT +Source: git@github.com:kaelzhang/node-ignore.git +Link: git@github.com:kaelzhang/node-ignore.git +----------- +immutable +License: MIT +License File: node_modules/immutable/LICENSE +Copyright: Copyright (c) 2014-present, Lee Byron and other contributors. +Source: git://github.com/immutable-js/immutable-js.git +Link: https://immutable-js.com +----------- +import-fresh +License: MIT +License File: node_modules/import-fresh/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com) +Source: sindresorhus/import-fresh +Link: sindresorhus/import-fresh +----------- +imurmurhash +License: MIT +Source: https://github.com/jensyt/imurmurhash-js +Link: https://github.com/jensyt/imurmurhash-js +----------- +inflight +License: ISC +License File: node_modules/inflight/LICENSE +Copyright: Copyright (c) Isaac Z. Schlueter +Source: https://github.com/npm/inflight.git +Link: https://github.com/isaacs/inflight +----------- +inherits +License: ISC +License File: node_modules/inherits/LICENSE +Copyright: Copyright (c) Isaac Z. Schlueter +Source: git://github.com/isaacs/inherits +Link: git://github.com/isaacs/inherits +----------- +internal-slot +License: MIT +License File: node_modules/internal-slot/LICENSE +Copyright: Copyright (c) 2019 Jordan Harband +Source: git+https://github.com/ljharb/internal-slot.git +Link: https://github.com/ljharb/internal-slot#readme +----------- +is-array-buffer +License: MIT +License File: node_modules/is-array-buffer/LICENSE +Copyright: Copyright (c) 2015 Chen Gengyuan, Inspect JS +Source: git+https://github.com/inspect-js/is-array-buffer.git +Link: https://github.com/inspect-js/is-array-buffer#readme +----------- +is-arrayish +License: MIT +License File: node_modules/is-arrayish/LICENSE +Copyright: Copyright (c) 2015 JD Ballard +Source: https://github.com/qix-/node-is-arrayish.git +Link: https://github.com/qix-/node-is-arrayish.git +----------- +is-bigint +License: MIT +License File: node_modules/is-bigint/LICENSE +Copyright: Copyright (c) 2018 Jordan Harband +Source: git+https://github.com/inspect-js/is-bigint.git +Link: https://github.com/inspect-js/is-bigint#readme +----------- +is-binary-path +License: MIT +License File: node_modules/is-binary-path/license +Copyright: Copyright (c) 2019 Sindre Sorhus <************@*****.***> (https://sindresorhus.com), Paul Miller (https://paulmillr.com) +Source: sindresorhus/is-binary-path +Link: sindresorhus/is-binary-path +----------- +is-boolean-object +License: MIT +License File: node_modules/is-boolean-object/LICENSE +Copyright: Copyright (c) 2015 Jordan Harband +Source: git://github.com/inspect-js/is-boolean-object.git +Link: git://github.com/inspect-js/is-boolean-object.git +----------- +is-callable +License: MIT +License File: node_modules/is-callable/LICENSE +Copyright: Copyright (c) 2015 Jordan Harband +Source: git://github.com/inspect-js/is-callable.git +Link: git://github.com/inspect-js/is-callable.git +----------- +is-core-module +License: MIT +License File: node_modules/is-core-module/LICENSE +Copyright: Copyright (c) 2014 Dave Justice +Source: git+https://github.com/inspect-js/is-core-module.git +Link: https://github.com/inspect-js/is-core-module +----------- +is-data-view +License: MIT +License File: node_modules/is-data-view/LICENSE +Copyright: Copyright (c) 2024 Inspect JS +Source: git+https://github.com/inspect-js/is-data-view.git +Link: https://github.com/inspect-js/is-data-view#readme +----------- +is-date-object +License: MIT +License File: node_modules/is-date-object/LICENSE +Copyright: Copyright (c) 2015 Jordan Harband +Source: git://github.com/inspect-js/is-date-object.git +Link: git://github.com/inspect-js/is-date-object.git +----------- +is-extglob +License: MIT +License File: node_modules/is-extglob/LICENSE +Copyright: Copyright (c) 2014-2016, Jon Schlinkert +Source: jonschlinkert/is-extglob +Link: https://github.com/jonschlinkert/is-extglob +----------- +is-fullwidth-code-point +License: MIT +License File: node_modules/is-fullwidth-code-point/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/is-fullwidth-code-point +Link: sindresorhus/is-fullwidth-code-point +----------- +is-glob +License: MIT +License File: node_modules/is-glob/LICENSE +Copyright: Copyright (c) 2014-2017, Jon Schlinkert. +Source: micromatch/is-glob +Link: https://github.com/micromatch/is-glob +----------- +is-negative-zero +License: MIT +License File: node_modules/is-negative-zero/LICENSE +Copyright: Copyright (c) 2014 Jordan Harband +Source: git://github.com/inspect-js/is-negative-zero.git +Link: https://github.com/inspect-js/is-negative-zero +----------- +is-number-object +License: MIT +License File: node_modules/is-number-object/LICENSE +Copyright: Copyright (c) 2015 Jordan Harband +Source: git://github.com/inspect-js/is-number-object.git +Link: https://github.com/inspect-js/is-number-object#readme +----------- +is-number +License: MIT +License File: node_modules/is-number/LICENSE +Copyright: Copyright (c) 2014-present, Jon Schlinkert. +Source: jonschlinkert/is-number +Link: https://github.com/jonschlinkert/is-number +----------- +is-path-inside +License: MIT +License File: node_modules/is-path-inside/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/is-path-inside +Link: sindresorhus/is-path-inside +----------- +is-regex +License: MIT +License File: node_modules/is-regex/LICENSE +Copyright: Copyright (c) 2014 Jordan Harband +Source: git://github.com/inspect-js/is-regex.git +Link: https://github.com/inspect-js/is-regex +----------- +is-shared-array-buffer +License: MIT +License File: node_modules/is-shared-array-buffer/LICENSE +Copyright: Copyright (c) 2021 Inspect JS +Source: git+https://github.com/inspect-js/is-shared-array-buffer.git +Link: https://github.com/inspect-js/is-shared-array-buffer#readme +----------- +is-string +License: MIT +License File: node_modules/is-string/LICENSE +Copyright: Copyright (c) 2015 Jordan Harband +Source: git://github.com/ljharb/is-string.git +Link: git://github.com/ljharb/is-string.git +----------- +is-symbol +License: MIT +License File: node_modules/is-symbol/LICENSE +Copyright: Copyright (c) 2015 Jordan Harband +Source: git://github.com/inspect-js/is-symbol.git +Link: git://github.com/inspect-js/is-symbol.git +----------- +is-typed-array +License: MIT +License File: node_modules/is-typed-array/LICENSE +Copyright: Copyright (c) 2015 Jordan Harband +Source: git://github.com/inspect-js/is-typed-array.git +Link: git://github.com/inspect-js/is-typed-array.git +----------- +is-weakref +License: MIT +License File: node_modules/is-weakref/LICENSE +Copyright: Copyright (c) 2020 Inspect JS +Source: git+https://github.com/inspect-js/is-weakref.git +Link: https://github.com/inspect-js/is-weakref#readme +----------- +isarray +License: MIT +License File: node_modules/isarray/LICENSE +Copyright: Copyright (c) 2013 Julian Gruber <******@************.***> +Source: git://github.com/juliangruber/isarray.git +Link: https://github.com/juliangruber/isarray +----------- +isexe +License: ISC +License File: node_modules/isexe/LICENSE +Copyright: Copyright (c) Isaac Z. Schlueter and Contributors +Source: git+https://github.com/isaacs/isexe.git +Link: https://github.com/isaacs/isexe#readme +----------- +js-yaml +License: MIT +License File: node_modules/js-yaml/LICENSE +Copyright: Copyright (C) 2011-2015 by Vitaly Puzrin +Source: nodeca/js-yaml +Link: nodeca/js-yaml +----------- +json-buffer +License: MIT +License File: node_modules/json-buffer/LICENSE +Copyright: Copyright (c) 2013 Dominic Tarr +Source: git://github.com/dominictarr/json-buffer.git +Link: https://github.com/dominictarr/json-buffer +----------- +json-parse-better-errors +License: MIT +License File: node_modules/json-parse-better-errors/LICENSE.md +Copyright: Copyright 2017 Kat Marchán +Source: https://github.com/zkat/json-parse-better-errors +Link: https://github.com/zkat/json-parse-better-errors +----------- +json-schema-traverse +License: MIT +License File: node_modules/json-schema-traverse/LICENSE +Copyright: Copyright (c) 2017 Evgeny Poberezkin +Source: git+https://github.com/epoberezkin/json-schema-traverse.git +Link: https://github.com/epoberezkin/json-schema-traverse#readme +----------- +json-stable-stringify-without-jsonify +License: MIT +License File: node_modules/json-stable-stringify-without-jsonify/LICENSE +Source: git://github.com/samn/json-stable-stringify.git +Link: https://github.com/samn/json-stable-stringify +----------- +json5 +License: MIT +License File: node_modules/json5/LICENSE.md +Copyright: Copyright (c) 2012-2018 Aseem Kishore, and [others]. +Source: git+https://github.com/json5/json5.git +Link: http://json5.org/ +----------- +keyv +License: MIT +Source: git+https://github.com/jaredwray/keyv.git +Link: https://github.com/jaredwray/keyv +----------- +levn +License: MIT +License File: node_modules/levn/LICENSE +Copyright: Copyright (c) George Zahariev +Source: git://github.com/gkz/levn.git +Link: https://github.com/gkz/levn +----------- +linkify-it +License: MIT +License File: node_modules/linkify-it/LICENSE +Copyright: Copyright (c) 2015 Vitaly Puzrin. +Source: markdown-it/linkify-it +Link: markdown-it/linkify-it +----------- +livereload-js +License: MIT +License File: node_modules/livereload-js/LICENSE +Copyright: Copyright (c) 2010-2012 Andrey Tarantsov +Source: git://github.com/livereload/livereload-js.git +Link: https://github.com/livereload/livereload-js +----------- +livereload +License: MIT +License File: node_modules/livereload/LICENSE +Copyright: Copyright (c) 2010 Joshua Peek +Source: http://github.com/napcs/node-livereload.git +Link: http://github.com/napcs/node-livereload.git +----------- +load-json-file +License: MIT +License File: node_modules/load-json-file/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/load-json-file +Link: sindresorhus/load-json-file +----------- +locate-path +License: MIT +License File: node_modules/locate-path/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com) +Source: sindresorhus/locate-path +Link: sindresorhus/locate-path +----------- +lodash.debounce +License: MIT +License File: node_modules/lodash.debounce/LICENSE +Source: lodash/lodash +Link: https://lodash.com/ +----------- +lodash.merge +License: MIT +License File: node_modules/lodash.merge/LICENSE +Source: lodash/lodash +Link: https://lodash.com/ +----------- +lodash.throttle +License: MIT +License File: node_modules/lodash.throttle/LICENSE +Source: lodash/lodash +Link: https://lodash.com/ +----------- +markdown-it-task-lists +License: ISC +License File: node_modules/markdown-it-task-lists/LICENSE +Copyright: Copyright (c) 2016, Revin Guillen +Source: git@github.com:revin/markdown-it-task-lists.git +Link: https://github.com/revin/markdown-it-task-lists#readme +----------- +markdown-it +License: MIT +License File: node_modules/markdown-it/LICENSE +Copyright: Copyright (c) 2014 Vitaly Puzrin, Alex Kocharin. +Source: markdown-it/markdown-it +Link: markdown-it/markdown-it +----------- +mdurl +License: MIT +License File: node_modules/mdurl/LICENSE +Copyright: Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin. +Source: markdown-it/mdurl +Link: markdown-it/mdurl +----------- +memorystream +License File: node_modules/memorystream/LICENSE +Copyright: Copyright (C) 2011 Dmitry Nizovtsev +Source: https://github.com/JSBizon/node-memorystream.git +Link: https://github.com/JSBizon/node-memorystream +----------- +minimatch +License: ISC +License File: node_modules/minimatch/LICENSE +Copyright: Copyright (c) Isaac Z. Schlueter and Contributors +Source: git://github.com/isaacs/minimatch.git +Link: git://github.com/isaacs/minimatch.git +----------- +minimist +License: MIT +License File: node_modules/minimist/LICENSE +Source: git://github.com/minimistjs/minimist.git +Link: https://github.com/minimistjs/minimist +----------- +ms +License: MIT +License File: node_modules/ms/license.md +Copyright: Copyright (c) 2016 Zeit, Inc. +Source: zeit/ms +Link: zeit/ms +----------- +natural-compare +License: MIT +Source: git://github.com/litejs/natural-compare-lite.git +Link: git://github.com/litejs/natural-compare-lite.git +----------- +nice-try +License: MIT +License File: node_modules/nice-try/LICENSE +Copyright: Copyright (c) 2018 Tobias Reich +Source: https://github.com/electerious/nice-try.git +Link: https://github.com/electerious/nice-try +----------- +normalize-package-data +License: BSD-2-Clause +License File: node_modules/normalize-package-data/LICENSE +Copyright: Copyright (c) Meryn Stol ("Author") +All rights reserved. +Source: git://github.com/npm/normalize-package-data.git +Link: git://github.com/npm/normalize-package-data.git +----------- +normalize-path +License: MIT +License File: node_modules/normalize-path/LICENSE +Copyright: Copyright (c) 2014-2018, Jon Schlinkert. +Source: jonschlinkert/normalize-path +Link: https://github.com/jonschlinkert/normalize-path +----------- +npm-run-all +License: MIT +License File: node_modules/npm-run-all/LICENSE +Copyright: Copyright (c) 2015 Toru Nagashima +Source: mysticatea/npm-run-all +Link: https://github.com/mysticatea/npm-run-all +----------- +object-inspect +License: MIT +License File: node_modules/object-inspect/LICENSE +Copyright: Copyright (c) 2013 James Halliday +Source: git://github.com/inspect-js/object-inspect.git +Link: https://github.com/inspect-js/object-inspect +----------- +object-keys +License: MIT +License File: node_modules/object-keys/LICENSE +Copyright: Copyright (C) 2013 Jordan Harband +Source: git://github.com/ljharb/object-keys.git +Link: git://github.com/ljharb/object-keys.git +----------- +object.assign +License: MIT +License File: node_modules/object.assign/LICENSE +Copyright: Copyright (c) 2014 Jordan Harband +Source: git://github.com/ljharb/object.assign.git +Link: git://github.com/ljharb/object.assign.git +----------- +object.entries +License: MIT +License File: node_modules/object.entries/LICENSE +Copyright: Copyright (c) 2015 Jordan Harband +Source: git://github.com/es-shims/Object.entries.git +Link: git://github.com/es-shims/Object.entries.git +----------- +object.fromentries +License: MIT +License File: node_modules/object.fromentries/LICENSE +Copyright: Copyright (c) 2018 Jordan Harband +Source: git://github.com/es-shims/Object.fromEntries.git +Link: git://github.com/es-shims/Object.fromEntries.git +----------- +object.groupby +License: MIT +License File: node_modules/object.groupby/LICENSE +Copyright: Copyright (c) 2023 ECMAScript Shims +Source: git+https://github.com/es-shims/Object.groupBy.git +Link: https://github.com/es-shims/Object.groupBy#readme +----------- +object.values +License: MIT +License File: node_modules/object.values/LICENSE +Copyright: Copyright (c) 2015 Jordan Harband +Source: git://github.com/es-shims/Object.values.git +Link: git://github.com/es-shims/Object.values.git +----------- +once +License: ISC +License File: node_modules/once/LICENSE +Copyright: Copyright (c) Isaac Z. Schlueter and Contributors +Source: git://github.com/isaacs/once +Link: git://github.com/isaacs/once +----------- +optionator +License: MIT +License File: node_modules/optionator/LICENSE +Copyright: Copyright (c) George Zahariev +Source: git://github.com/gkz/optionator.git +Link: https://github.com/gkz/optionator +----------- +opts +License: BSD-2-Clause +License File: node_modules/opts/LICENSE.txt +Copyright: Copyright (c) 2010, Joey Mazzarelli +All rights reserved. +Source: github:khtdr/opts +Link: http://khtdr.com/opts +----------- +p-limit +License: MIT +License File: node_modules/p-limit/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com) +Source: sindresorhus/p-limit +Link: sindresorhus/p-limit +----------- +p-locate +License: MIT +License File: node_modules/p-locate/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com) +Source: sindresorhus/p-locate +Link: sindresorhus/p-locate +----------- +p-try +License: MIT +License File: node_modules/p-try/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/p-try +Link: sindresorhus/p-try +----------- +parent-module +License: MIT +License File: node_modules/parent-module/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/parent-module +Link: sindresorhus/parent-module +----------- +parse-json +License: MIT +License File: node_modules/parse-json/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/parse-json +Link: sindresorhus/parse-json +----------- +path-exists +License: MIT +License File: node_modules/path-exists/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/path-exists +Link: sindresorhus/path-exists +----------- +path-is-absolute +License: MIT +License File: node_modules/path-is-absolute/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/path-is-absolute +Link: sindresorhus/path-is-absolute +----------- +path-key +License: MIT +License File: node_modules/path-key/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/path-key +Link: sindresorhus/path-key +----------- +path-parse +License: MIT +License File: node_modules/path-parse/LICENSE +Copyright: Copyright (c) 2015 Javier Blanco +Source: https://github.com/jbgutierrez/path-parse.git +Link: https://github.com/jbgutierrez/path-parse#readme +----------- +path-type +License: MIT +License File: node_modules/path-type/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/path-type +Link: sindresorhus/path-type +----------- +picomatch +License: MIT +License File: node_modules/picomatch/LICENSE +Copyright: Copyright (c) 2017-present, Jon Schlinkert. +Source: micromatch/picomatch +Link: https://github.com/micromatch/picomatch +----------- +pidtree +License: MIT +License File: node_modules/pidtree/license +Copyright: Copyright (c) 2018 Simone Primarosa +Source: github:simonepri/pidtree +Link: http://github.com/simonepri/pidtree#readme +----------- +pify +License: MIT +License File: node_modules/pify/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/pify +Link: sindresorhus/pify +----------- +possible-typed-array-names +License: MIT +License File: node_modules/possible-typed-array-names/LICENSE +Copyright: Copyright (c) 2024 Jordan Harband +Source: git+https://github.com/ljharb/possible-typed-array-names.git +Link: https://github.com/ljharb/possible-typed-array-names#readme +----------- +prelude-ls +License: MIT +License File: node_modules/prelude-ls/LICENSE +Copyright: Copyright (c) George Zahariev +Source: git://github.com/gkz/prelude-ls.git +Link: http://preludels.com +----------- +punycode.js +License: MIT +License File: node_modules/punycode.js/LICENSE-MIT.txt +Source: https://github.com/mathiasbynens/punycode.js.git +Link: https://mths.be/punycode +----------- +punycode +License: MIT +License File: node_modules/punycode/LICENSE-MIT.txt +Source: https://github.com/mathiasbynens/punycode.js.git +Link: https://mths.be/punycode +----------- +queue-microtask +License: MIT +License File: node_modules/queue-microtask/LICENSE +Copyright: Copyright (c) Feross Aboukhadijeh +Source: git://github.com/feross/queue-microtask.git +Link: https://github.com/feross/queue-microtask +----------- +read-pkg +License: MIT +License File: node_modules/read-pkg/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/read-pkg +Link: sindresorhus/read-pkg +----------- +readdirp +License: MIT +License File: node_modules/readdirp/LICENSE +Copyright: Copyright (c) 2012-2019 Thorsten Lorenz, Paul Miller (https://paulmillr.com) +Source: git://github.com/paulmillr/readdirp.git +Link: https://github.com/paulmillr/readdirp +----------- +regexp.prototype.flags +License: MIT +License File: node_modules/regexp.prototype.flags/LICENSE +Copyright: Copyright (C) 2014 Jordan Harband +Source: git://github.com/es-shims/RegExp.prototype.flags.git +Link: git://github.com/es-shims/RegExp.prototype.flags.git +----------- +require-directory +License: MIT +License File: node_modules/require-directory/LICENSE +Copyright: Copyright (c) 2011 Troy Goode <*********@*****.***> +Source: git://github.com/troygoode/node-require-directory.git +Link: https://github.com/troygoode/node-require-directory/ +----------- +require-main-filename +License: ISC +License File: node_modules/require-main-filename/LICENSE.txt +Copyright: Copyright (c) 2016, Contributors +Source: git+ssh://git@github.com/yargs/require-main-filename.git +Link: https://github.com/yargs/require-main-filename#readme +----------- +resolve-from +License: MIT +License File: node_modules/resolve-from/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/resolve-from +Link: sindresorhus/resolve-from +----------- +resolve +License: MIT +License File: node_modules/resolve/LICENSE +Copyright: Copyright (c) 2012 James Halliday +Source: git://github.com/browserify/resolve.git +Link: git://github.com/browserify/resolve.git +----------- +reusify +License: MIT +License File: node_modules/reusify/LICENSE +Copyright: Copyright (c) 2015 Matteo Collina +Source: git+https://github.com/mcollina/reusify.git +Link: https://github.com/mcollina/reusify#readme +----------- +rimraf +License: ISC +License File: node_modules/rimraf/LICENSE +Copyright: Copyright (c) Isaac Z. Schlueter and Contributors +Source: git://github.com/isaacs/rimraf.git +Link: git://github.com/isaacs/rimraf.git +----------- +run-parallel +License: MIT +License File: node_modules/run-parallel/LICENSE +Copyright: Copyright (c) Feross Aboukhadijeh +Source: git://github.com/feross/run-parallel.git +Link: https://github.com/feross/run-parallel +----------- +safe-array-concat +License: MIT +License File: node_modules/safe-array-concat/LICENSE +Copyright: Copyright (c) 2023 Jordan Harband +Source: git+https://github.com/ljharb/safe-array-concat.git +Link: https://github.com/ljharb/safe-array-concat#readme +----------- +safe-regex-test +License: MIT +License File: node_modules/safe-regex-test/LICENSE +Copyright: Copyright (c) 2022 Jordan Harband +Source: git+https://github.com/ljharb/safe-regex-test.git +Link: https://github.com/ljharb/safe-regex-test#readme +----------- +sass +License: MIT +License File: node_modules/sass/LICENSE +Copyright: Copyright (c) 2016, Google Inc. +Source: https://github.com/sass/dart-sass +Link: https://github.com/sass/dart-sass +----------- +semver +License: ISC +License File: node_modules/semver/LICENSE +Copyright: Copyright (c) Isaac Z. Schlueter and Contributors +Source: https://github.com/npm/node-semver.git +Link: https://github.com/npm/node-semver.git +----------- +set-blocking +License: ISC +License File: node_modules/set-blocking/LICENSE.txt +Copyright: Copyright (c) 2016, Contributors +Source: git+https://github.com/yargs/set-blocking.git +Link: https://github.com/yargs/set-blocking#readme +----------- +set-function-length +License: MIT +License File: node_modules/set-function-length/LICENSE +Copyright: Copyright (c) Jordan Harband and contributors +Source: git+https://github.com/ljharb/set-function-length.git +Link: https://github.com/ljharb/set-function-length#readme +----------- +set-function-name +License: MIT +License File: node_modules/set-function-name/LICENSE +Copyright: Copyright (c) Jordan Harband and contributors +Source: git+https://github.com/ljharb/set-function-name.git +Link: https://github.com/ljharb/set-function-name#readme +----------- +shebang-command +License: MIT +License File: node_modules/shebang-command/license +Copyright: Copyright (c) Kevin Mårtensson <***************@*****.***> (github.com/kevva) +Source: kevva/shebang-command +Link: kevva/shebang-command +----------- +shebang-regex +License: MIT +License File: node_modules/shebang-regex/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/shebang-regex +Link: sindresorhus/shebang-regex +----------- +shell-quote +License: MIT +License File: node_modules/shell-quote/LICENSE +Copyright: Copyright (c) 2013 James Halliday (****@********.***) +Source: http://github.com/ljharb/shell-quote.git +Link: https://github.com/ljharb/shell-quote +----------- +side-channel +License: MIT +License File: node_modules/side-channel/LICENSE +Copyright: Copyright (c) 2019 Jordan Harband +Source: git+https://github.com/ljharb/side-channel.git +Link: https://github.com/ljharb/side-channel#readme +----------- +snabbdom +License: MIT +License File: node_modules/snabbdom/LICENSE +Copyright: Copyright (c) 2015 Simon Friis Vindum +Source: git+https://github.com/snabbdom/snabbdom.git +Link: https://github.com/snabbdom/snabbdom#readme +----------- +sortablejs +License: MIT +License File: node_modules/sortablejs/LICENSE +Source: git://github.com/SortableJS/Sortable.git +Link: git://github.com/SortableJS/Sortable.git +----------- +source-map-js +License: BSD-3-Clause +License File: node_modules/source-map-js/LICENSE +Copyright: Copyright (c) 2009-2011, Mozilla Foundation and contributors +All rights reserved. +Source: 7rulnik/source-map-js +Link: https://github.com/7rulnik/source-map-js +----------- +spdx-correct +License: Apache-2.0 +License File: node_modules/spdx-correct/LICENSE +Source: jslicense/spdx-correct.js +Link: jslicense/spdx-correct.js +----------- +spdx-exceptions +License: CC-BY-3.0 +Source: kemitchell/spdx-exceptions.json +Link: kemitchell/spdx-exceptions.json +----------- +spdx-expression-parse +License: MIT +License File: node_modules/spdx-expression-parse/LICENSE +Copyright: Copyright (c) 2015 Kyle E. Mitchell & other authors listed in AUTHORS +Source: jslicense/spdx-expression-parse.js +Link: jslicense/spdx-expression-parse.js +----------- +spdx-license-ids +License: CC0-1.0 +Source: jslicense/spdx-license-ids +Link: jslicense/spdx-license-ids +----------- +string-width +License: MIT +License File: node_modules/string-width/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/string-width +Link: sindresorhus/string-width +----------- +string.prototype.padend +License: MIT +License File: node_modules/string.prototype.padend/LICENSE +Copyright: Copyright (c) 2015 EcmaScript Shims +Source: git://github.com/es-shims/String.prototype.padEnd.git +Link: git://github.com/es-shims/String.prototype.padEnd.git +----------- +string.prototype.trim +License: MIT +License File: node_modules/string.prototype.trim/LICENSE +Copyright: Copyright (c) 2015 Jordan Harband +Source: git://github.com/es-shims/String.prototype.trim.git +Link: git://github.com/es-shims/String.prototype.trim.git +----------- +string.prototype.trimend +License: MIT +License File: node_modules/string.prototype.trimend/LICENSE +Copyright: Copyright (c) 2017 Khaled Al-Ansari +Source: git://github.com/es-shims/String.prototype.trimEnd.git +Link: git://github.com/es-shims/String.prototype.trimEnd.git +----------- +string.prototype.trimstart +License: MIT +License File: node_modules/string.prototype.trimstart/LICENSE +Copyright: Copyright (c) 2017 Khaled Al-Ansari +Source: git://github.com/es-shims/String.prototype.trimStart.git +Link: git://github.com/es-shims/String.prototype.trimStart.git +----------- +strip-ansi +License: MIT +License File: node_modules/strip-ansi/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: chalk/strip-ansi +Link: chalk/strip-ansi +----------- +strip-bom +License: MIT +License File: node_modules/strip-bom/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: sindresorhus/strip-bom +Link: sindresorhus/strip-bom +----------- +strip-json-comments +License: MIT +License File: node_modules/strip-json-comments/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com) +Source: sindresorhus/strip-json-comments +Link: sindresorhus/strip-json-comments +----------- +style-mod +License: MIT +License File: node_modules/style-mod/LICENSE +Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others +Source: git+https://github.com/marijnh/style-mod.git +Link: git+https://github.com/marijnh/style-mod.git +----------- +supports-color +License: MIT +License File: node_modules/supports-color/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: chalk/supports-color +Link: chalk/supports-color +----------- +supports-preserve-symlinks-flag +License: MIT +License File: node_modules/supports-preserve-symlinks-flag/LICENSE +Copyright: Copyright (c) 2022 Inspect JS +Source: git+https://github.com/inspect-js/node-supports-preserve-symlinks-flag.git +Link: https://github.com/inspect-js/node-supports-preserve-symlinks-flag#readme +----------- +text-table +License: MIT +License File: node_modules/text-table/LICENSE +Source: git://github.com/substack/text-table.git +Link: https://github.com/substack/text-table +----------- +to-regex-range +License: MIT +License File: node_modules/to-regex-range/LICENSE +Copyright: Copyright (c) 2015-present, Jon Schlinkert. +Source: micromatch/to-regex-range +Link: https://github.com/micromatch/to-regex-range +----------- +tsconfig-paths +License: MIT +License File: node_modules/tsconfig-paths/LICENSE +Copyright: Copyright (c) 2016 Jonas Kello +Source: https://github.com/dividab/tsconfig-paths +Link: https://github.com/dividab/tsconfig-paths +----------- +type-check +License: MIT +License File: node_modules/type-check/LICENSE +Copyright: Copyright (c) George Zahariev +Source: git://github.com/gkz/type-check.git +Link: https://github.com/gkz/type-check +----------- +type-fest +License: (MIT OR CC0-1.0) +License File: node_modules/type-fest/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https:/sindresorhus.com) +Source: sindresorhus/type-fest +Link: sindresorhus/type-fest +----------- +typed-array-buffer +License: MIT +License File: node_modules/typed-array-buffer/LICENSE +Copyright: Copyright (c) 2023 Jordan Harband +Source: git+https://github.com/ljharb/typed-array-buffer.git +Link: https://github.com/ljharb/typed-array-buffer#readme +----------- +typed-array-byte-length +License: MIT +License File: node_modules/typed-array-byte-length/LICENSE +Copyright: Copyright (c) 2020 Inspect JS +Source: git+https://github.com/inspect-js/typed-array-byte-length.git +Link: https://github.com/inspect-js/typed-array-byte-length#readme +----------- +typed-array-byte-offset +License: MIT +License File: node_modules/typed-array-byte-offset/LICENSE +Copyright: Copyright (c) 2020 Inspect JS +Source: git+https://github.com/inspect-js/typed-array-byte-offset.git +Link: https://github.com/inspect-js/typed-array-byte-offset#readme +----------- +typed-array-length +License: MIT +License File: node_modules/typed-array-length/LICENSE +Copyright: Copyright (c) 2020 Inspect JS +Source: git+https://github.com/inspect-js/typed-array-length.git +Link: https://github.com/inspect-js/typed-array-length#readme +----------- +uc.micro +License: MIT +License File: node_modules/uc.micro/LICENSE.txt +Source: markdown-it/uc.micro +Link: markdown-it/uc.micro +----------- +unbox-primitive +License: MIT +License File: node_modules/unbox-primitive/LICENSE +Copyright: Copyright (c) 2019 Jordan Harband +Source: git+https://github.com/ljharb/unbox-primitive.git +Link: https://github.com/ljharb/unbox-primitive#readme +----------- +uri-js +License: BSD-2-Clause +License File: node_modules/uri-js/LICENSE +Copyright: Copyright 2011 Gary Court. All rights reserved. +Source: http://github.com/garycourt/uri-js +Link: https://github.com/garycourt/uri-js +----------- +validate-npm-package-license +License: Apache-2.0 +License File: node_modules/validate-npm-package-license/LICENSE +Source: kemitchell/validate-npm-package-license.js +Link: kemitchell/validate-npm-package-license.js +----------- +w3c-keyname +License: MIT +License File: node_modules/w3c-keyname/LICENSE +Copyright: Copyright (C) 2016 by Marijn Haverbeke <******@*********.******> and others +Source: git+https://github.com/marijnh/w3c-keyname.git +Link: https://github.com/marijnh/w3c-keyname#readme +----------- +which-boxed-primitive +License: MIT +License File: node_modules/which-boxed-primitive/LICENSE +Copyright: Copyright (c) 2019 Jordan Harband +Source: git+https://github.com/inspect-js/which-boxed-primitive.git +Link: https://github.com/inspect-js/which-boxed-primitive#readme +----------- +which-module +License: ISC +License File: node_modules/which-module/LICENSE +Copyright: Copyright (c) 2016, Contributors +Source: git+https://github.com/nexdrew/which-module.git +Link: https://github.com/nexdrew/which-module#readme +----------- +which-typed-array +License: MIT +License File: node_modules/which-typed-array/LICENSE +Copyright: Copyright (c) 2015 Jordan Harband +Source: git://github.com/inspect-js/which-typed-array.git +Link: git://github.com/inspect-js/which-typed-array.git +----------- +which +License: ISC +License File: node_modules/which/LICENSE +Copyright: Copyright (c) Isaac Z. Schlueter and Contributors +Source: git://github.com/isaacs/node-which.git +Link: git://github.com/isaacs/node-which.git +----------- +wrap-ansi +License: MIT +License File: node_modules/wrap-ansi/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (sindresorhus.com) +Source: chalk/wrap-ansi +Link: chalk/wrap-ansi +----------- +wrappy +License: ISC +License File: node_modules/wrappy/LICENSE +Copyright: Copyright (c) Isaac Z. Schlueter and Contributors +Source: https://github.com/npm/wrappy +Link: https://github.com/npm/wrappy +----------- +ws +License: MIT +License File: node_modules/ws/LICENSE +Copyright: Copyright (c) 2011 Einar Otto Stangvik <*******@*****.***> +Source: websockets/ws +Link: https://github.com/websockets/ws +----------- +y18n +License: ISC +License File: node_modules/y18n/LICENSE +Copyright: Copyright (c) 2015, Contributors +Source: git@github.com:yargs/y18n.git +Link: https://github.com/yargs/y18n +----------- +yargs-parser +License: ISC +License File: node_modules/yargs-parser/LICENSE.txt +Copyright: Copyright (c) 2016, Contributors +Source: git@github.com:yargs/yargs-parser.git +Link: git@github.com:yargs/yargs-parser.git +----------- +yargs +License: MIT +License File: node_modules/yargs/LICENSE +Copyright: Copyright 2010 James Halliday (****@********.***) +Modified work Copyright 2014 Contributors (***@*****.***) +Source: https://github.com/yargs/yargs.git +Link: https://yargs.js.org/ +----------- +yocto-queue +License: MIT +License File: node_modules/yocto-queue/license +Copyright: Copyright (c) Sindre Sorhus <************@*****.***> (https://sindresorhus.com) +Source: sindresorhus/yocto-queue +Link: sindresorhus/yocto-queue +----------- +@aashutoshrathi/word-wrap +License: MIT +License File: node_modules/@aashutoshrathi/word-wrap/LICENSE +Copyright: Copyright (c) 2014-2016, Jon Schlinkert +Source: git+https://github.com/aashutoshrathi/word-wrap.git +Link: https://github.com/aashutoshrathi/word-wrap +----------- +@codemirror/autocomplete +License: MIT +License File: node_modules/@codemirror/autocomplete/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/autocomplete.git +Link: https://github.com/codemirror/autocomplete.git +----------- +@codemirror/commands +License: MIT +License File: node_modules/@codemirror/commands/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/commands.git +Link: https://github.com/codemirror/commands.git +----------- +@codemirror/lang-css +License: MIT +License File: node_modules/@codemirror/lang-css/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/lang-css.git +Link: https://github.com/codemirror/lang-css.git +----------- +@codemirror/lang-html +License: MIT +License File: node_modules/@codemirror/lang-html/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/lang-html.git +Link: https://github.com/codemirror/lang-html.git +----------- +@codemirror/lang-javascript +License: MIT +License File: node_modules/@codemirror/lang-javascript/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/lang-javascript.git +Link: https://github.com/codemirror/lang-javascript.git +----------- +@codemirror/lang-json +License: MIT +License File: node_modules/@codemirror/lang-json/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <*******@*****.***> and others +Source: https://github.com/codemirror/lang-json.git +Link: https://github.com/codemirror/lang-json.git +----------- +@codemirror/lang-markdown +License: MIT +License File: node_modules/@codemirror/lang-markdown/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/lang-markdown.git +Link: https://github.com/codemirror/lang-markdown.git +----------- +@codemirror/lang-php +License: MIT +License File: node_modules/@codemirror/lang-php/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <*******@*****.***> and others +Source: https://github.com/codemirror/lang-php.git +Link: https://github.com/codemirror/lang-php.git +----------- +@codemirror/lang-xml +License: MIT +License File: node_modules/@codemirror/lang-xml/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/lang-xml.git +Link: https://github.com/codemirror/lang-xml.git +----------- +@codemirror/language +License: MIT +License File: node_modules/@codemirror/language/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/language.git +Link: https://github.com/codemirror/language.git +----------- +@codemirror/legacy-modes +License: MIT +License File: node_modules/@codemirror/legacy-modes/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/legacy-modes.git +Link: https://github.com/codemirror/legacy-modes.git +----------- +@codemirror/lint +License: MIT +License File: node_modules/@codemirror/lint/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/lint.git +Link: https://github.com/codemirror/lint.git +----------- +@codemirror/search +License: MIT +License File: node_modules/@codemirror/search/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/search.git +Link: https://github.com/codemirror/search.git +----------- +@codemirror/state +License: MIT +License File: node_modules/@codemirror/state/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/state.git +Link: https://github.com/codemirror/state.git +----------- +@codemirror/theme-one-dark +License: MIT +License File: node_modules/@codemirror/theme-one-dark/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/theme-one-dark.git +Link: https://github.com/codemirror/theme-one-dark.git +----------- +@codemirror/view +License: MIT +License File: node_modules/@codemirror/view/LICENSE +Copyright: Copyright (C) 2018-2021 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/codemirror/view.git +Link: https://github.com/codemirror/view.git +----------- +@esbuild/linux-x64 +License: MIT +Source: git+https://github.com/evanw/esbuild.git +Link: git+https://github.com/evanw/esbuild.git +----------- +@eslint-community/eslint-utils +License: MIT +License File: node_modules/@eslint-community/eslint-utils/LICENSE +Copyright: Copyright (c) 2018 Toru Nagashima +Source: https://github.com/eslint-community/eslint-utils +Link: https://github.com/eslint-community/eslint-utils#readme +----------- +@eslint-community/regexpp +License: MIT +License File: node_modules/@eslint-community/regexpp/LICENSE +Copyright: Copyright (c) 2018 Toru Nagashima +Source: https://github.com/eslint-community/regexpp +Link: https://github.com/eslint-community/regexpp#readme +----------- +@eslint/eslintrc +License: MIT +License File: node_modules/@eslint/eslintrc/LICENSE +Source: eslint/eslintrc +Link: https://github.com/eslint/eslintrc#readme +----------- +@eslint/js +License: MIT +License File: node_modules/@eslint/js/LICENSE +Source: https://github.com/eslint/eslint.git +Link: https://eslint.org +----------- +@humanwhocodes/config-array +License: Apache-2.0 +License File: node_modules/@humanwhocodes/config-array/LICENSE +Source: git+https://github.com/humanwhocodes/config-array.git +Link: https://github.com/humanwhocodes/config-array#readme +----------- +@humanwhocodes/module-importer +License: Apache-2.0 +License File: node_modules/@humanwhocodes/module-importer/LICENSE +Source: git+https://github.com/humanwhocodes/module-importer.git +Link: git+https://github.com/humanwhocodes/module-importer.git +----------- +@humanwhocodes/object-schema +License: BSD-3-Clause +License File: node_modules/@humanwhocodes/object-schema/LICENSE +Copyright: Copyright (c) 2019, Human Who Codes +All rights reserved. +Source: git+https://github.com/humanwhocodes/object-schema.git +Link: https://github.com/humanwhocodes/object-schema#readme +----------- +@lezer/common +License: MIT +License File: node_modules/@lezer/common/LICENSE +Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/lezer-parser/common.git +Link: https://github.com/lezer-parser/common.git +----------- +@lezer/css +License: MIT +License File: node_modules/@lezer/css/LICENSE +Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/lezer-parser/css.git +Link: https://github.com/lezer-parser/css.git +----------- +@lezer/generator +License: MIT +License File: node_modules/@lezer/generator/LICENSE +Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/lezer-parser/generator.git +Link: https://github.com/lezer-parser/generator.git +----------- +@lezer/highlight +License: MIT +License File: node_modules/@lezer/highlight/LICENSE +Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/lezer-parser/highlight.git +Link: https://github.com/lezer-parser/highlight.git +----------- +@lezer/html +License: MIT +License File: node_modules/@lezer/html/LICENSE +Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/lezer-parser/html.git +Link: https://github.com/lezer-parser/html.git +----------- +@lezer/javascript +License: MIT +License File: node_modules/@lezer/javascript/LICENSE +Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/lezer-parser/javascript.git +Link: https://github.com/lezer-parser/javascript.git +----------- +@lezer/json +License: MIT +License File: node_modules/@lezer/json/LICENSE +Copyright: Copyright (C) 2020 by Marijn Haverbeke <******@*********.******>, Arun Srinivasan <*******@*****.***>, and others +Source: https://github.com/lezer-parser/json.git +Link: https://github.com/lezer-parser/json.git +----------- +@lezer/lr +License: MIT +License File: node_modules/@lezer/lr/LICENSE +Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/lezer-parser/lr.git +Link: https://github.com/lezer-parser/lr.git +----------- +@lezer/markdown +License: MIT +License File: node_modules/@lezer/markdown/LICENSE +Copyright: Copyright (C) 2020 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/lezer-parser/markdown.git +Link: https://github.com/lezer-parser/markdown.git +----------- +@lezer/php +License: MIT +License File: node_modules/@lezer/php/LICENSE +Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/lezer-parser/php.git +Link: https://github.com/lezer-parser/php.git +----------- +@lezer/xml +License: MIT +License File: node_modules/@lezer/xml/LICENSE +Copyright: Copyright (C) 2018 by Marijn Haverbeke <******@*********.******> and others +Source: https://github.com/lezer-parser/xml.git +Link: https://github.com/lezer-parser/xml.git +----------- +@nodelib/fs.scandir +License: MIT +License File: node_modules/@nodelib/fs.scandir/LICENSE +Copyright: Copyright (c) Denis Malinochkin +Source: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir +Link: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir +----------- +@nodelib/fs.stat +License: MIT +License File: node_modules/@nodelib/fs.stat/LICENSE +Copyright: Copyright (c) Denis Malinochkin +Source: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat +Link: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat +----------- +@nodelib/fs.walk +License: MIT +License File: node_modules/@nodelib/fs.walk/LICENSE +Copyright: Copyright (c) Denis Malinochkin +Source: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk +Link: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk +----------- +@ssddanbrown/codemirror-lang-smarty +License: MIT +License File: node_modules/@ssddanbrown/codemirror-lang-smarty/LICENSE +Copyright: Copyright (C) 2023 by Dan Brown, Marijn Haverbeke and others +----------- +@ssddanbrown/codemirror-lang-twig +License: MIT +License File: node_modules/@ssddanbrown/codemirror-lang-twig/LICENSE +Copyright: Copyright (C) 2023 by Dan Brown, Marijn Haverbeke and others +----------- +@types/json5 +License: MIT +Source: https://www.github.com/DefinitelyTyped/DefinitelyTyped.git +Link: https://www.github.com/DefinitelyTyped/DefinitelyTyped.git +----------- +@ungap/structured-clone +License: ISC +License File: node_modules/@ungap/structured-clone/LICENSE +Copyright: Copyright (c) 2021, Andrea Giammarchi, @WebReflection +Source: git+https://github.com/ungap/structured-clone.git +Link: https://github.com/ungap/structured-clone#readme diff --git a/dev/licensing/php-library-licenses.txt b/dev/licensing/php-library-licenses.txt new file mode 100644 index 000000000..045d64670 --- /dev/null +++ b/dev/licensing/php-library-licenses.txt @@ -0,0 +1,789 @@ +aws/aws-crt-php +License: Apache-2.0 +License File: vendor/aws/aws-crt-php/LICENSE +Source: https://github.com/awslabs/aws-crt-php.git +Link: https://github.com/awslabs/aws-crt-php +----------- +aws/aws-sdk-php +License: Apache-2.0 +License File: vendor/aws/aws-sdk-php/LICENSE +Source: https://github.com/aws/aws-sdk-php.git +Link: http://aws.amazon.com/sdkforphp +----------- +bacon/bacon-qr-code +License: BSD-2-Clause +License File: vendor/bacon/bacon-qr-code/LICENSE +Copyright: Copyright (c) 2017, Ben Scholzen 'DASPRiD' +All rights reserved. +Source: https://github.com/Bacon/BaconQrCode.git +Link: https://github.com/Bacon/BaconQrCode +----------- +brick/math +License: MIT +License File: vendor/brick/math/LICENSE +Copyright: Copyright (c) 2013-present Benjamin Morel +Source: https://github.com/brick/math.git +Link: https://github.com/brick/math.git +----------- +carbonphp/carbon-doctrine-types +License: MIT +License File: vendor/carbonphp/carbon-doctrine-types/LICENSE +Copyright: Copyright (c) 2023 Carbon +Source: https://github.com/CarbonPHP/carbon-doctrine-types.git +Link: https://github.com/CarbonPHP/carbon-doctrine-types.git +----------- +dasprid/enum +License: BSD-2-Clause +License File: vendor/dasprid/enum/LICENSE +Copyright: Copyright (c) 2017, Ben Scholzen 'DASPRiD' +All rights reserved. +Source: https://github.com/DASPRiD/Enum.git +Link: https://github.com/DASPRiD/Enum.git +----------- +dflydev/dot-access-data +License: MIT +License File: vendor/dflydev/dot-access-data/LICENSE +Copyright: Copyright (c) 2012 Dragonfly Development Inc. +Source: https://github.com/dflydev/dflydev-dot-access-data.git +Link: https://github.com/dflydev/dflydev-dot-access-data +----------- +doctrine/cache +License: MIT +License File: vendor/doctrine/cache/LICENSE +Copyright: Copyright (c) 2006-2015 Doctrine Project +Source: https://github.com/doctrine/cache.git +Link: https://www.doctrine-project.org/projects/cache.html +----------- +doctrine/dbal +License: MIT +License File: vendor/doctrine/dbal/LICENSE +Copyright: Copyright (c) 2006-2018 Doctrine Project +Source: https://github.com/doctrine/dbal.git +Link: https://www.doctrine-project.org/projects/dbal.html +----------- +doctrine/deprecations +License: MIT +License File: vendor/doctrine/deprecations/LICENSE +Copyright: Copyright (c) 2020-2021 Doctrine Project +Source: https://github.com/doctrine/deprecations.git +Link: https://www.doctrine-project.org/ +----------- +doctrine/event-manager +License: MIT +License File: vendor/doctrine/event-manager/LICENSE +Copyright: Copyright (c) 2006-2015 Doctrine Project +Source: https://github.com/doctrine/event-manager.git +Link: https://www.doctrine-project.org/projects/event-manager.html +----------- +doctrine/inflector +License: MIT +License File: vendor/doctrine/inflector/LICENSE +Copyright: Copyright (c) 2006-2015 Doctrine Project +Source: https://github.com/doctrine/inflector.git +Link: https://www.doctrine-project.org/projects/inflector.html +----------- +doctrine/lexer +License: MIT +License File: vendor/doctrine/lexer/LICENSE +Copyright: Copyright (c) 2006-2018 Doctrine Project +Source: https://github.com/doctrine/lexer.git +Link: https://www.doctrine-project.org/projects/lexer.html +----------- +dompdf/dompdf +License: LGPL-2.1 +License File: vendor/dompdf/dompdf/LICENSE.LGPL +Copyright: Copyright (C) 1991, 1999 Free Software Foundation, Inc. +Source: https://github.com/dompdf/dompdf.git +Link: https://github.com/dompdf/dompdf +----------- +dragonmantank/cron-expression +License: MIT +License File: vendor/dragonmantank/cron-expression/LICENSE +Copyright: Copyright (c) 2011 Michael Dowling <*********@*****.***>, 2016 Chris Tankersley <*****@***********.***>, and contributors +Source: https://github.com/dragonmantank/cron-expression.git +Link: https://github.com/dragonmantank/cron-expression.git +----------- +egulias/email-validator +License: MIT +License File: vendor/egulias/email-validator/LICENSE +Copyright: Copyright (c) 2013-2023 Eduardo Gulias Davis +Source: https://github.com/egulias/EmailValidator.git +Link: https://github.com/egulias/EmailValidator +----------- +firebase/php-jwt +License: BSD-3-Clause +License File: vendor/firebase/php-jwt/LICENSE +Copyright: Copyright (c) 2011, Neuman Vong +Source: https://github.com/firebase/php-jwt.git +Link: https://github.com/firebase/php-jwt +----------- +fruitcake/php-cors +License: MIT +License File: vendor/fruitcake/php-cors/LICENSE +Copyright: Copyright (c) 2013-2017 Alexander <***.*****@*****.***> +Copyright (c) 2017-2022 Barryvdh <********@*****.***> +Source: https://github.com/fruitcake/php-cors.git +Link: https://github.com/fruitcake/php-cors +----------- +graham-campbell/result-type +License: MIT +License File: vendor/graham-campbell/result-type/LICENSE +Copyright: Copyright (c) 2020-2023 Graham Campbell <*****@**********.**.**> +Source: https://github.com/GrahamCampbell/Result-Type.git +Link: https://github.com/GrahamCampbell/Result-Type.git +----------- +guzzlehttp/guzzle +License: MIT +License File: vendor/guzzlehttp/guzzle/LICENSE +Copyright: Copyright (c) 2011 Michael Dowling <*********@*****.***> +Copyright (c) 2012 Jeremy Lindblom <**********@*****.***> +Copyright (c) 2014 Graham Campbell <*****@**********.**.**> +Copyright (c) 2015 Márk Sági-Kazár <****.*********@*****.***> +Copyright (c) 2015 Tobias Schultze <*********@**********.**> +Copyright (c) 2016 Tobias Nyholm <******.******@*****.***> +Copyright (c) 2016 George Mponos <*******@*****.***> +Source: https://github.com/guzzle/guzzle.git +Link: https://github.com/guzzle/guzzle.git +----------- +guzzlehttp/promises +License: MIT +License File: vendor/guzzlehttp/promises/LICENSE +Copyright: Copyright (c) 2015 Michael Dowling <*********@*****.***> +Copyright (c) 2015 Graham Campbell <*****@**********.**.**> +Copyright (c) 2017 Tobias Schultze <*********@**********.**> +Copyright (c) 2020 Tobias Nyholm <******.******@*****.***> +Source: https://github.com/guzzle/promises.git +Link: https://github.com/guzzle/promises.git +----------- +guzzlehttp/psr7 +License: MIT +License File: vendor/guzzlehttp/psr7/LICENSE +Copyright: Copyright (c) 2015 Michael Dowling <*********@*****.***> +Copyright (c) 2015 Márk Sági-Kazár <****.*********@*****.***> +Copyright (c) 2015 Graham Campbell <*****@**********.**.**> +Copyright (c) 2016 Tobias Schultze <*********@**********.**> +Copyright (c) 2016 George Mponos <*******@*****.***> +Copyright (c) 2018 Tobias Nyholm <******.******@*****.***> +Source: https://github.com/guzzle/psr7.git +Link: https://github.com/guzzle/psr7.git +----------- +guzzlehttp/uri-template +License: MIT +License File: vendor/guzzlehttp/uri-template/LICENSE +Copyright: Copyright (c) 2014 Michael Dowling <*********@*****.***> +Copyright (c) 2020 George Mponos <*******@*****.***> +Copyright (c) 2020 Graham Campbell <*****@**********.**.**> +Source: https://github.com/guzzle/uri-template.git +Link: https://github.com/guzzle/uri-template.git +----------- +intervention/gif +License: MIT +License File: vendor/intervention/gif/LICENSE +Copyright: Copyright (c) 2020-2024 Oliver Vogel +Source: https://github.com/Intervention/gif.git +Link: https://github.com/intervention/gif +----------- +intervention/image +License: MIT +License File: vendor/intervention/image/LICENSE +Copyright: Copyright (c) 2013-2024 Oliver Vogel +Source: https://github.com/Intervention/image.git +Link: https://image.intervention.io/ +----------- +knplabs/knp-snappy +License: MIT +License File: vendor/knplabs/knp-snappy/LICENSE +Copyright: Copyright (c) 2010 Matthieu Bontemps +Source: https://github.com/KnpLabs/snappy.git +Link: http://github.com/KnpLabs/snappy +----------- +laravel/framework +License: MIT +License File: vendor/laravel/framework/LICENSE.md +Copyright: Copyright (c) Taylor Otwell +Source: https://github.com/laravel/framework.git +Link: https://laravel.com +----------- +laravel/prompts +License: MIT +License File: vendor/laravel/prompts/LICENSE.md +Copyright: Copyright (c) Taylor Otwell +Source: https://github.com/laravel/prompts.git +Link: https://github.com/laravel/prompts.git +----------- +laravel/serializable-closure +License: MIT +License File: vendor/laravel/serializable-closure/LICENSE.md +Copyright: Copyright (c) Taylor Otwell +Source: https://github.com/laravel/serializable-closure.git +Link: https://github.com/laravel/serializable-closure.git +----------- +laravel/socialite +License: MIT +License File: vendor/laravel/socialite/LICENSE.md +Copyright: Copyright (c) Taylor Otwell +Source: https://github.com/laravel/socialite.git +Link: https://laravel.com +----------- +laravel/tinker +License: MIT +License File: vendor/laravel/tinker/LICENSE.md +Copyright: Copyright (c) Taylor Otwell +Source: https://github.com/laravel/tinker.git +Link: https://github.com/laravel/tinker.git +----------- +league/commonmark +License: BSD-3-Clause +License File: vendor/league/commonmark/LICENSE +Copyright: Copyright (c) 2014-2022, Colin O'Dell. All rights reserved. Some code based on commonmark.js (copyright 2014-2018, John MacFarlane) and commonmark-java (copyright 2015-2016, Atlassian Pty Ltd) +Source: https://github.com/thephpleague/commonmark.git +Link: https://commonmark.thephpleague.com +----------- +league/config +License: BSD-3-Clause +License File: vendor/league/config/LICENSE.md +Copyright: Copyright (c) 2022, Colin O'Dell. All rights reserved. +Source: https://github.com/thephpleague/config.git +Link: https://config.thephpleague.com +----------- +league/flysystem +License: MIT +License File: vendor/league/flysystem/LICENSE +Copyright: Copyright (c) 2013-2024 Frank de Jonge +Source: https://github.com/thephpleague/flysystem.git +Link: https://github.com/thephpleague/flysystem.git +----------- +league/flysystem-aws-s3-v3 +License: MIT +License File: vendor/league/flysystem-aws-s3-v3/LICENSE +Copyright: Copyright (c) 2013-2024 Frank de Jonge +Source: https://github.com/thephpleague/flysystem-aws-s3-v3.git +Link: https://github.com/thephpleague/flysystem-aws-s3-v3.git +----------- +league/flysystem-local +License: MIT +License File: vendor/league/flysystem-local/LICENSE +Copyright: Copyright (c) 2013-2024 Frank de Jonge +Source: https://github.com/thephpleague/flysystem-local.git +Link: https://github.com/thephpleague/flysystem-local.git +----------- +league/html-to-markdown +License: MIT +License File: vendor/league/html-to-markdown/LICENSE +Copyright: Copyright (c) 2015 Colin O'Dell; Originally created by Nick Cernis +Source: https://github.com/thephpleague/html-to-markdown.git +Link: https://github.com/thephpleague/html-to-markdown +----------- +league/mime-type-detection +License: MIT +License File: vendor/league/mime-type-detection/LICENSE +Copyright: Copyright (c) 2013-2023 Frank de Jonge +Source: https://github.com/thephpleague/mime-type-detection.git +Link: https://github.com/thephpleague/mime-type-detection.git +----------- +league/oauth1-client +License: MIT +License File: vendor/league/oauth1-client/LICENSE +Copyright: Copyright (c) 2013 Ben Corlett <**********@**.***> +Source: https://github.com/thephpleague/oauth1-client.git +Link: https://github.com/thephpleague/oauth1-client.git +----------- +league/oauth2-client +License: MIT +License File: vendor/league/oauth2-client/LICENSE +Copyright: Copyright (c) 2013-2020 Alex Bilbie <*****@**********.***> +Source: https://github.com/thephpleague/oauth2-client.git +Link: https://github.com/thephpleague/oauth2-client.git +----------- +masterminds/html5 +License: MIT +License File: vendor/masterminds/html5/LICENSE.txt +Copyright: Copyright (c) 2013 The Authors of HTML5-PHP +Source: https://github.com/Masterminds/html5-php.git +Link: http://masterminds.github.io/html5-php +----------- +monolog/monolog +License: MIT +License File: vendor/monolog/monolog/LICENSE +Copyright: Copyright (c) 2011-2020 Jordi Boggiano +Source: https://github.com/Seldaek/monolog.git +Link: https://github.com/Seldaek/monolog +----------- +mtdowling/jmespath.php +License: MIT +License File: vendor/mtdowling/jmespath.php/LICENSE +Copyright: Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling +Source: https://github.com/jmespath/jmespath.php.git +Link: https://github.com/jmespath/jmespath.php.git +----------- +nesbot/carbon +License: MIT +License File: vendor/nesbot/carbon/LICENSE +Copyright: Copyright (C) Brian Nesbitt +Source: https://github.com/briannesbitt/Carbon.git +Link: https://carbon.nesbot.com +----------- +nette/schema +License: BSD-3-Clause GPL-2.0-only GPL-3.0-only +License File: vendor/nette/schema/license.md +Copyright: Copyright (c) 2004, 2014 David Grudl (https://davidgrudl.com) +All rights reserved. +Source: https://github.com/nette/schema.git +Link: https://nette.org +----------- +nette/utils +License: BSD-3-Clause GPL-2.0-only GPL-3.0-only +License File: vendor/nette/utils/license.md +Copyright: Copyright (c) 2004, 2014 David Grudl (https://davidgrudl.com) +All rights reserved. +Source: https://github.com/nette/utils.git +Link: https://nette.org +----------- +nikic/php-parser +License: BSD-3-Clause +License File: vendor/nikic/php-parser/LICENSE +Copyright: Copyright (c) 2011, Nikita Popov +All rights reserved. +Source: https://github.com/nikic/PHP-Parser.git +Link: https://github.com/nikic/PHP-Parser.git +----------- +nunomaduro/termwind +License: MIT +License File: vendor/nunomaduro/termwind/LICENSE.md +Copyright: Copyright (c) Nuno Maduro <***********@*****.***> +Source: https://github.com/nunomaduro/termwind.git +Link: https://github.com/nunomaduro/termwind.git +----------- +onelogin/php-saml +License: MIT +License File: vendor/onelogin/php-saml/LICENSE +Copyright: Copyright (c) 2010-2016 OneLogin, Inc. +Source: https://github.com/onelogin/php-saml.git +Link: https://developers.onelogin.com/saml/php +----------- +paragonie/constant_time_encoding +License: MIT +License File: vendor/paragonie/constant_time_encoding/LICENSE.txt +Copyright: Copyright (c) 2016 - 2022 Paragon Initiative Enterprises +Source: https://github.com/paragonie/constant_time_encoding.git +Link: https://github.com/paragonie/constant_time_encoding.git +----------- +paragonie/random_compat +License: MIT +License File: vendor/paragonie/random_compat/LICENSE +Copyright: Copyright (c) 2015 Paragon Initiative Enterprises +Source: https://github.com/paragonie/random_compat.git +Link: https://github.com/paragonie/random_compat.git +----------- +phenx/php-font-lib +License: LGPL-2.1-or-later +License File: vendor/phenx/php-font-lib/LICENSE +Copyright: Copyright (C) 1991, 1999 Free Software Foundation, Inc. +Source: https://github.com/dompdf/php-font-lib.git +Link: https://github.com/PhenX/php-font-lib +----------- +phenx/php-svg-lib +License: LGPL-3.0-or-later +License File: vendor/phenx/php-svg-lib/LICENSE +Copyright: Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. +Source: https://github.com/dompdf/php-svg-lib.git +Link: https://github.com/PhenX/php-svg-lib +----------- +phpoption/phpoption +License: Apache-2.0 +License File: vendor/phpoption/phpoption/LICENSE +Source: https://github.com/schmittjoh/php-option.git +Link: https://github.com/schmittjoh/php-option.git +----------- +phpseclib/phpseclib +License: MIT +License File: vendor/phpseclib/phpseclib/LICENSE +Copyright: Copyright (c) 2011-2019 TerraFrost and other contributors +Source: https://github.com/phpseclib/phpseclib.git +Link: http://phpseclib.sourceforge.net +----------- +pragmarx/google2fa +License: MIT +License File: vendor/pragmarx/google2fa/LICENSE.md +Copyright: Copyright 2014-2018 Phil, Antonio Carlos Ribeiro and All Contributors +Source: https://github.com/antonioribeiro/google2fa.git +Link: https://github.com/antonioribeiro/google2fa.git +----------- +predis/predis +License: MIT +License File: vendor/predis/predis/LICENSE +Copyright: Copyright (c) 2009-2020 Daniele Alessandri (original work) +Copyright (c) 2021-2023 Till Krüss (modified work) +Source: https://github.com/predis/predis.git +Link: http://github.com/predis/predis +----------- +psr/cache +License: MIT +License File: vendor/psr/cache/LICENSE.txt +Copyright: Copyright (c) 2015 PHP Framework Interoperability Group +Source: https://github.com/php-fig/cache.git +Link: https://github.com/php-fig/cache.git +----------- +psr/clock +License: MIT +License File: vendor/psr/clock/LICENSE +Copyright: Copyright (c) 2017 PHP Framework Interoperability Group +Source: https://github.com/php-fig/clock.git +Link: https://github.com/php-fig/clock +----------- +psr/container +License: MIT +License File: vendor/psr/container/LICENSE +Copyright: Copyright (c) 2013-2016 container-interop +Copyright (c) 2016 PHP Framework Interoperability Group +Source: https://github.com/php-fig/container.git +Link: https://github.com/php-fig/container +----------- +psr/event-dispatcher +License: MIT +License File: vendor/psr/event-dispatcher/LICENSE +Copyright: Copyright (c) 2018 PHP-FIG +Source: https://github.com/php-fig/event-dispatcher.git +Link: https://github.com/php-fig/event-dispatcher.git +----------- +psr/http-client +License: MIT +License File: vendor/psr/http-client/LICENSE +Copyright: Copyright (c) 2017 PHP Framework Interoperability Group +Source: https://github.com/php-fig/http-client.git +Link: https://github.com/php-fig/http-client +----------- +psr/http-factory +License: MIT +License File: vendor/psr/http-factory/LICENSE +Copyright: Copyright (c) 2018 PHP-FIG +Source: https://github.com/php-fig/http-factory.git +Link: https://github.com/php-fig/http-factory.git +----------- +psr/http-message +License: MIT +License File: vendor/psr/http-message/LICENSE +Copyright: Copyright (c) 2014 PHP Framework Interoperability Group +Source: https://github.com/php-fig/http-message.git +Link: https://github.com/php-fig/http-message +----------- +psr/log +License: MIT +License File: vendor/psr/log/LICENSE +Copyright: Copyright (c) 2012 PHP Framework Interoperability Group +Source: https://github.com/php-fig/log.git +Link: https://github.com/php-fig/log +----------- +psr/simple-cache +License: MIT +License File: vendor/psr/simple-cache/LICENSE.md +Copyright: Copyright (c) 2016 PHP Framework Interoperability Group +Source: https://github.com/php-fig/simple-cache.git +Link: https://github.com/php-fig/simple-cache.git +----------- +psy/psysh +License: MIT +License File: vendor/psy/psysh/LICENSE +Copyright: Copyright (c) 2012-2023 Justin Hileman +Source: https://github.com/bobthecow/psysh.git +Link: http://psysh.org +----------- +ralouphie/getallheaders +License: MIT +License File: vendor/ralouphie/getallheaders/LICENSE +Copyright: Copyright (c) 2014 Ralph Khattar +Source: https://github.com/ralouphie/getallheaders.git +Link: https://github.com/ralouphie/getallheaders.git +----------- +ramsey/collection +License: MIT +License File: vendor/ramsey/collection/LICENSE +Copyright: Copyright (c) 2015-2022 Ben Ramsey <***@*********.***> +Source: https://github.com/ramsey/collection.git +Link: https://github.com/ramsey/collection.git +----------- +ramsey/uuid +License: MIT +License File: vendor/ramsey/uuid/LICENSE +Copyright: Copyright (c) 2012-2023 Ben Ramsey <***@*********.***> +Source: https://github.com/ramsey/uuid.git +Link: https://github.com/ramsey/uuid.git +----------- +robrichards/xmlseclibs +License: BSD-3-Clause +License File: vendor/robrichards/xmlseclibs/LICENSE +Copyright: Copyright (c) 2007-2019, Robert Richards <*********@*********.***>. +Source: https://github.com/robrichards/xmlseclibs.git +Link: https://github.com/robrichards/xmlseclibs +----------- +sabberworm/php-css-parser +License: MIT +License File: vendor/sabberworm/php-css-parser/LICENSE +Copyright: Copyright (c) 2011 Raphael Schweikert, https://www.sabberworm.com/ +Source: https://github.com/MyIntervals/PHP-CSS-Parser.git +Link: https://www.sabberworm.com/blog/2010/6/10/php-css-parser +----------- +socialiteproviders/discord +License: MIT +Source: https://github.com/SocialiteProviders/Discord.git +Link: https://github.com/SocialiteProviders/Discord.git +----------- +socialiteproviders/gitlab +License: MIT +Source: https://github.com/SocialiteProviders/GitLab.git +Link: https://github.com/SocialiteProviders/GitLab.git +----------- +socialiteproviders/manager +License: MIT +License File: vendor/socialiteproviders/manager/LICENSE +Copyright: Copyright (c) 2015 Andy Wendt +Source: https://github.com/SocialiteProviders/Manager.git +Link: https://socialiteproviders.com +----------- +socialiteproviders/microsoft-azure +License: MIT +Source: https://github.com/SocialiteProviders/Microsoft-Azure.git +Link: https://github.com/SocialiteProviders/Microsoft-Azure.git +----------- +socialiteproviders/okta +License: MIT +Source: https://github.com/SocialiteProviders/Okta.git +Link: https://github.com/SocialiteProviders/Okta.git +----------- +socialiteproviders/twitch +License: MIT +Source: https://github.com/SocialiteProviders/Twitch.git +Link: https://github.com/SocialiteProviders/Twitch.git +----------- +ssddanbrown/htmldiff +License: MIT +License File: vendor/ssddanbrown/htmldiff/license.md +Copyright: Copyright (c) 2020 Nathan Herald, Rohland de Charmoy, Dan Brown +Source: https://github.com/ssddanbrown/HtmlDiff.git +Link: https://github.com/ssddanbrown/htmldiff +----------- +ssddanbrown/symfony-mailer +License: MIT +License File: vendor/ssddanbrown/symfony-mailer/LICENSE +Copyright: Copyright (c) 2019-present Fabien Potencier +Source: https://github.com/ssddanbrown/symfony-mailer.git +Link: https://symfony.com +----------- +symfony/console +License: MIT +License File: vendor/symfony/console/LICENSE +Copyright: Copyright (c) 2004-present Fabien Potencier +Source: https://github.com/symfony/console.git +Link: https://symfony.com +----------- +symfony/css-selector +License: MIT +License File: vendor/symfony/css-selector/LICENSE +Copyright: Copyright (c) 2004-present Fabien Potencier +Source: https://github.com/symfony/css-selector.git +Link: https://symfony.com +----------- +symfony/deprecation-contracts +License: MIT +License File: vendor/symfony/deprecation-contracts/LICENSE +Copyright: Copyright (c) 2020-present Fabien Potencier +Source: https://github.com/symfony/deprecation-contracts.git +Link: https://symfony.com +----------- +symfony/error-handler +License: MIT +License File: vendor/symfony/error-handler/LICENSE +Copyright: Copyright (c) 2019-present Fabien Potencier +Source: https://github.com/symfony/error-handler.git +Link: https://symfony.com +----------- +symfony/event-dispatcher +License: MIT +License File: vendor/symfony/event-dispatcher/LICENSE +Copyright: Copyright (c) 2004-present Fabien Potencier +Source: https://github.com/symfony/event-dispatcher.git +Link: https://symfony.com +----------- +symfony/event-dispatcher-contracts +License: MIT +License File: vendor/symfony/event-dispatcher-contracts/LICENSE +Copyright: Copyright (c) 2018-present Fabien Potencier +Source: https://github.com/symfony/event-dispatcher-contracts.git +Link: https://symfony.com +----------- +symfony/finder +License: MIT +License File: vendor/symfony/finder/LICENSE +Copyright: Copyright (c) 2004-present Fabien Potencier +Source: https://github.com/symfony/finder.git +Link: https://symfony.com +----------- +symfony/http-foundation +License: MIT +License File: vendor/symfony/http-foundation/LICENSE +Copyright: Copyright (c) 2004-present Fabien Potencier +Source: https://github.com/symfony/http-foundation.git +Link: https://symfony.com +----------- +symfony/http-kernel +License: MIT +License File: vendor/symfony/http-kernel/LICENSE +Copyright: Copyright (c) 2004-present Fabien Potencier +Source: https://github.com/symfony/http-kernel.git +Link: https://symfony.com +----------- +symfony/mime +License: MIT +License File: vendor/symfony/mime/LICENSE +Copyright: Copyright (c) 2010-present Fabien Potencier +Source: https://github.com/symfony/mime.git +Link: https://symfony.com +----------- +symfony/polyfill-ctype +License: MIT +License File: vendor/symfony/polyfill-ctype/LICENSE +Copyright: Copyright (c) 2018-present Fabien Potencier +Source: https://github.com/symfony/polyfill-ctype.git +Link: https://symfony.com +----------- +symfony/polyfill-intl-grapheme +License: MIT +License File: vendor/symfony/polyfill-intl-grapheme/LICENSE +Copyright: Copyright (c) 2015-present Fabien Potencier +Source: https://github.com/symfony/polyfill-intl-grapheme.git +Link: https://symfony.com +----------- +symfony/polyfill-intl-idn +License: MIT +License File: vendor/symfony/polyfill-intl-idn/LICENSE +Copyright: Copyright (c) 2018-present Fabien Potencier and Trevor Rowbotham <******.*********@**.**> +Source: https://github.com/symfony/polyfill-intl-idn.git +Link: https://symfony.com +----------- +symfony/polyfill-intl-normalizer +License: MIT +License File: vendor/symfony/polyfill-intl-normalizer/LICENSE +Copyright: Copyright (c) 2015-present Fabien Potencier +Source: https://github.com/symfony/polyfill-intl-normalizer.git +Link: https://symfony.com +----------- +symfony/polyfill-mbstring +License: MIT +License File: vendor/symfony/polyfill-mbstring/LICENSE +Copyright: Copyright (c) 2015-present Fabien Potencier +Source: https://github.com/symfony/polyfill-mbstring.git +Link: https://symfony.com +----------- +symfony/polyfill-php72 +License: MIT +License File: vendor/symfony/polyfill-php72/LICENSE +Copyright: Copyright (c) 2015-present Fabien Potencier +Source: https://github.com/symfony/polyfill-php72.git +Link: https://symfony.com +----------- +symfony/polyfill-php80 +License: MIT +License File: vendor/symfony/polyfill-php80/LICENSE +Copyright: Copyright (c) 2020-present Fabien Potencier +Source: https://github.com/symfony/polyfill-php80.git +Link: https://symfony.com +----------- +symfony/polyfill-php83 +License: MIT +License File: vendor/symfony/polyfill-php83/LICENSE +Copyright: Copyright (c) 2022-present Fabien Potencier +Source: https://github.com/symfony/polyfill-php83.git +Link: https://symfony.com +----------- +symfony/polyfill-uuid +License: MIT +License File: vendor/symfony/polyfill-uuid/LICENSE +Copyright: Copyright (c) 2018-present Fabien Potencier +Source: https://github.com/symfony/polyfill-uuid.git +Link: https://symfony.com +----------- +symfony/process +License: MIT +License File: vendor/symfony/process/LICENSE +Copyright: Copyright (c) 2004-present Fabien Potencier +Source: https://github.com/symfony/process.git +Link: https://symfony.com +----------- +symfony/routing +License: MIT +License File: vendor/symfony/routing/LICENSE +Copyright: Copyright (c) 2004-present Fabien Potencier +Source: https://github.com/symfony/routing.git +Link: https://symfony.com +----------- +symfony/service-contracts +License: MIT +License File: vendor/symfony/service-contracts/LICENSE +Copyright: Copyright (c) 2018-present Fabien Potencier +Source: https://github.com/symfony/service-contracts.git +Link: https://symfony.com +----------- +symfony/string +License: MIT +License File: vendor/symfony/string/LICENSE +Copyright: Copyright (c) 2019-present Fabien Potencier +Source: https://github.com/symfony/string.git +Link: https://symfony.com +----------- +symfony/translation +License: MIT +License File: vendor/symfony/translation/LICENSE +Copyright: Copyright (c) 2004-present Fabien Potencier +Source: https://github.com/symfony/translation.git +Link: https://symfony.com +----------- +symfony/translation-contracts +License: MIT +License File: vendor/symfony/translation-contracts/LICENSE +Copyright: Copyright (c) 2018-present Fabien Potencier +Source: https://github.com/symfony/translation-contracts.git +Link: https://symfony.com +----------- +symfony/uid +License: MIT +License File: vendor/symfony/uid/LICENSE +Copyright: Copyright (c) 2020-present Fabien Potencier +Source: https://github.com/symfony/uid.git +Link: https://symfony.com +----------- +symfony/var-dumper +License: MIT +License File: vendor/symfony/var-dumper/LICENSE +Copyright: Copyright (c) 2014-present Fabien Potencier +Source: https://github.com/symfony/var-dumper.git +Link: https://symfony.com +----------- +tijsverkoyen/css-to-inline-styles +License: BSD-3-Clause +License File: vendor/tijsverkoyen/css-to-inline-styles/LICENSE.md +Copyright: Copyright (c) Tijs Verkoyen. All rights reserved. +Source: https://github.com/tijsverkoyen/CssToInlineStyles.git +Link: https://github.com/tijsverkoyen/CssToInlineStyles +----------- +vlucas/phpdotenv +License: BSD-3-Clause +License File: vendor/vlucas/phpdotenv/LICENSE +Copyright: Copyright (c) 2014, Graham Campbell. +Source: https://github.com/vlucas/phpdotenv.git +Link: https://github.com/vlucas/phpdotenv.git +----------- +voku/portable-ascii +License: MIT +License File: vendor/voku/portable-ascii/LICENSE.txt +Copyright: Copyright (C) 2019 Lars Moelleken +Source: https://github.com/voku/portable-ascii.git +Link: https://github.com/voku/portable-ascii +----------- +webmozart/assert +License: MIT +License File: vendor/webmozart/assert/LICENSE +Copyright: Copyright (c) 2014 Bernhard Schussek +Source: https://github.com/webmozarts/assert.git +Link: https://github.com/webmozarts/assert.git diff --git a/lang/ar/preferences.php b/lang/ar/preferences.php index 2b88f9671..2872f5f3c 100644 --- a/lang/ar/preferences.php +++ b/lang/ar/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/ar/settings.php b/lang/ar/settings.php index 287e6a166..f2405e9d5 100644 --- a/lang/ar/settings.php +++ b/lang/ar/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Last Error Message:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/bg/preferences.php b/lang/bg/preferences.php index 963f1f04c..f954340e2 100644 --- a/lang/bg/preferences.php +++ b/lang/bg/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/bg/settings.php b/lang/bg/settings.php index bf0c8b3bc..97de55b36 100644 --- a/lang/bg/settings.php +++ b/lang/bg/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Последна грешка на:', 'webhooks_last_error_message' => 'Последно съобщение за грешка:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/bs/preferences.php b/lang/bs/preferences.php index 2b88f9671..2872f5f3c 100644 --- a/lang/bs/preferences.php +++ b/lang/bs/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/bs/settings.php b/lang/bs/settings.php index 7b7f5d2a2..f4c84092c 100644 --- a/lang/bs/settings.php +++ b/lang/bs/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Last Error Message:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/ca/preferences.php b/lang/ca/preferences.php index b56b8b3bb..9d9ed8aa1 100644 --- a/lang/ca/preferences.php +++ b/lang/ca/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => 'Desa les preferències', 'notifications_update_success' => 'S’han actualitzat les preferències de notificacions!', 'notifications_watched' => 'Elements seguits i ignorats', - 'notifications_watched_desc' => ' A continuació hi ha els elements que tenen aplicades preferències de seguiment personalitzades. Per a actualitzar-ne les preferències, consulteu l’element i seleccioneu les opcions de seguiment a la barra lateral.', + 'notifications_watched_desc' => 'A continuació hi ha els elements que tenen aplicades preferències de seguiment personalitzades. Per a actualitzar-ne les preferències, consulteu l’element i seleccioneu les opcions de seguiment a la barra lateral.', 'auth' => 'Accés i seguretat', 'auth_change_password' => 'Canvia la contrasenya', diff --git a/lang/ca/settings.php b/lang/ca/settings.php index d39174c9b..5fe9d3bff 100644 --- a/lang/ca/settings.php +++ b/lang/ca/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Error per darrera vegada:', 'webhooks_last_error_message' => 'Darrer missatge d’error:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/cs/preferences.php b/lang/cs/preferences.php index 295fb5ca1..9a127601e 100644 --- a/lang/cs/preferences.php +++ b/lang/cs/preferences.php @@ -27,7 +27,7 @@ return [ '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.', + '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.', 'auth' => 'Přístup a zabezpečení', 'auth_change_password' => 'Změnit heslo', diff --git a/lang/cs/settings.php b/lang/cs/settings.php index 75331834e..23820fe87 100644 --- a/lang/cs/settings.php +++ b/lang/cs/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Poslední chyba:', 'webhooks_last_error_message' => 'Poslední chybová zpráva', + // Licensing + 'licenses' => 'Licence', + 'licenses_desc' => 'Na této stránce naleznete kromě informací o projektech a knihovnách, které se v rámci BookStacku používají, také informace o licencích pro BookStack. Mnoho uvedených projektů lze používat pouze ve vývojovém kontextu.', + 'licenses_bookstack' => 'BookStack licence', + 'licenses_php' => 'Licence PHP knihoven', + 'licenses_js' => 'Licence JavaScript knihoven', + 'licenses_other' => 'Ostatní licence', + 'license_details' => 'Podrobnosti o licenci', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/cy/preferences.php b/lang/cy/preferences.php index 2b88f9671..2872f5f3c 100644 --- a/lang/cy/preferences.php +++ b/lang/cy/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/cy/settings.php b/lang/cy/settings.php index 7b7f5d2a2..f4c84092c 100644 --- a/lang/cy/settings.php +++ b/lang/cy/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Last Error Message:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/da/activities.php b/lang/da/activities.php index 7478e18bf..f374d799a 100644 --- a/lang/da/activities.php +++ b/lang/da/activities.php @@ -15,7 +15,7 @@ return [ 'page_restore' => 'gendannede side', 'page_restore_notification' => 'Siden blev gendannet', 'page_move' => 'flyttede side', - 'page_move_notification' => 'Page successfully moved', + 'page_move_notification' => 'Siden blev flyttet', // Chapters 'chapter_create' => 'oprettede kapitel', @@ -25,7 +25,7 @@ return [ 'chapter_delete' => 'slettede kapitel', 'chapter_delete_notification' => 'Kapitel blev slettet', 'chapter_move' => 'flyttede kapitel', - 'chapter_move_notification' => 'Chapter successfully moved', + 'chapter_move_notification' => 'Kapitlet blev flyttet', // Books 'book_create' => 'oprettede bog', @@ -40,19 +40,19 @@ return [ 'book_sort_notification' => 'Bogen blev re-sorteret', // Bookshelves - 'bookshelf_create' => 'created shelf', - 'bookshelf_create_notification' => 'Shelf successfully created', - 'bookshelf_create_from_book' => 'converted book to shelf', + 'bookshelf_create' => 'oprettede reol', + 'bookshelf_create_notification' => 'Reolen blev oprettet', + 'bookshelf_create_from_book' => 'omdannede bog til reol', 'bookshelf_create_from_book_notification' => 'Bogen blev omdannet til en bogreal', - 'bookshelf_update' => 'updated shelf', - 'bookshelf_update_notification' => 'Shelf successfully updated', - 'bookshelf_delete' => 'deleted shelf', - 'bookshelf_delete_notification' => 'Shelf successfully deleted', + 'bookshelf_update' => 'opdaterede reolen', + 'bookshelf_update_notification' => 'Reolen blev opdateret', + 'bookshelf_delete' => 'slettede reol', + 'bookshelf_delete_notification' => 'Reolen blev slettet', // Revisions - 'revision_restore' => 'restored revision', - 'revision_delete' => 'deleted revision', - 'revision_delete_notification' => 'Revision successfully deleted', + 'revision_restore' => 'gendannede version', + 'revision_delete' => 'slettede version', + 'revision_delete_notification' => 'Versionen blev slettet', // Favourites 'favourite_add_notification' => '":name" er blevet tilføjet til dine favoritter', @@ -62,7 +62,7 @@ return [ 'watch_update_level_notification' => 'Watch preferences successfully updated', // Auth - 'auth_login' => 'logged in', + 'auth_login' => 'loggede ind', 'auth_register' => 'registered as new user', 'auth_password_reset_request' => 'requested user password reset', 'auth_password_reset_update' => 'reset user password', diff --git a/lang/da/auth.php b/lang/da/auth.php index 2d2b7bebb..090e0751e 100644 --- a/lang/da/auth.php +++ b/lang/da/auth.php @@ -39,9 +39,9 @@ return [ 'register_success' => 'Tak for din registrering. Du er nu registeret og logget ind.', // 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' => 'Forsøger Login', + 'auto_init_starting_desc' => 'Vi kontakter dit godkendelsessystem for at starte loginprocessen. Hvis der ikke er nogen fremskridt efter 5 sekunder, kan du prøve at klikke på linket nedenfor.', + 'auto_init_start_link' => 'Fortsæt med godkendelse', // Password Reset 'reset_password' => 'Nulstil adgangskode', @@ -61,7 +61,7 @@ return [ 'email_confirm_send_error' => 'E-Mail-bekræftelse kræves, men systemet kunne ikke sende E-Mailen. Kontakt administratoren for at sikre, at E-Mail er konfigureret korrekt.', 'email_confirm_success' => 'Din email er blevet bekræftet! Du bør nu kune logge ind med denne emailadresse.', 'email_confirm_resent' => 'Bekræftelsesmail sendt, tjek venligst din indboks.', - 'email_confirm_thanks' => 'Thanks for confirming!', + 'email_confirm_thanks' => 'Tak for bekræftelsen!', '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' => 'E-Mail adresse ikke bekræftet', @@ -103,7 +103,7 @@ return [ 'mfa_gen_totp_verify_setup' => 'Verificer Opsætning', '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' => 'Bekræft Adgang', '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' => 'Ingen Metoder Konfigureret', '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.', diff --git a/lang/da/common.php b/lang/da/common.php index 5b4c0e822..8c6fa105c 100644 --- a/lang/da/common.php +++ b/lang/da/common.php @@ -6,7 +6,7 @@ return [ // Buttons 'cancel' => 'Annuller', - 'close' => 'Close', + 'close' => 'Luk', 'confirm' => 'Bekræft', 'back' => 'Tilbage', 'save' => 'Gem', @@ -20,13 +20,13 @@ return [ 'description' => 'Beskrivelse', 'role' => 'Rolle', 'cover_image' => 'Coverbillede', - 'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.', + 'cover_image_description' => 'Dette billede skal være omkring 440x250px selvom det vil være fleksibelt skaleret & beskåret for at passe til brugergrænsefladen i forskellige scenarier efter behov. Så de faktiske dimensioner for visning vil være forskellige.', // Actions 'actions' => 'Handlinger', 'view' => 'Vis', 'view_all' => 'Vis alle', - 'new' => 'New', + 'new' => 'Ny', 'create' => 'Opret', 'update' => 'Opdater', 'edit' => 'Rediger', @@ -42,7 +42,7 @@ return [ 'remove' => 'Fjern', 'add' => 'Tilføj', 'configure' => 'Konfigurer', - 'manage' => 'Manage', + 'manage' => 'Administrer', 'fullscreen' => 'Fuld skærm', 'favourite' => 'Foretrukken', 'unfavourite' => 'Fjern som foretrukken', @@ -52,7 +52,7 @@ return [ 'filter_clear' => 'Nulstil Filter', 'download' => 'Hent', 'open_in_tab' => 'Åben i ny fane', - 'open' => 'Open', + 'open' => 'Åbn', // Sort Options 'sort_options' => 'Sorteringsindstillinger', @@ -84,14 +84,14 @@ return [ 'none' => 'Ingen', // Header - 'homepage' => 'Homepage', + 'homepage' => 'Forside', 'header_menu_expand' => 'Udvid header menu', 'profile_menu' => 'Profilmenu', 'view_profile' => 'Vis profil', 'edit_profile' => 'Redigér Profil', 'dark_mode' => 'Mørk tilstand', 'light_mode' => 'Lys tilstand', - 'global_search' => 'Global Search', + 'global_search' => 'Global søgning', // Layout tabs 'tab_info' => 'Info', diff --git a/lang/da/components.php b/lang/da/components.php index bcbf11672..410ed4fc5 100644 --- a/lang/da/components.php +++ b/lang/da/components.php @@ -6,36 +6,36 @@ return [ // Image Manager 'image_select' => 'Billedselektion', - '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' => 'Billede Liste', + 'image_details' => 'Billede Detaljer', + 'image_upload' => 'Upload billede', + 'image_intro' => 'Her kan du vælge og administrere billeder, der tidligere er blevet uploadet til systemet.', + 'image_intro_upload' => 'Upload et nyt billede ved at trække en billedfil ind i dette vindue, eller ved at bruge knappen "Upload billede" ovenfor.', 'image_all' => 'Alt', 'image_all_title' => 'Se alle billeder', 'image_book_title' => 'Vis billeder uploadet til denne bog', 'image_page_title' => 'Vis billeder uploadet til denne side', 'image_search_hint' => 'Søg efter billednavn', 'image_uploaded' => 'Uploadet :uploadedDate', - 'image_uploaded_by' => 'Uploaded by :userName', - 'image_uploaded_to' => 'Uploaded to :pageLink', - 'image_updated' => 'Updated :updateDate', + 'image_uploaded_by' => 'Uploadet af :userName', + 'image_uploaded_to' => 'Uploadet til :pageLink', + 'image_updated' => 'Opdateret :updateDate', 'image_load_more' => 'Indlæse mere', 'image_image_name' => 'Billednavn', 'image_delete_used' => 'Dette billede er brugt på siderne nedenfor.', 'image_delete_confirm_text' => 'Er du sikker på at du vil slette dette billede?', 'image_select_image' => 'Vælg billede', 'image_dropzone' => 'Træk-og-slip billede eller klik her for at uploade', - 'image_dropzone_drop' => 'Drop images here to upload', + 'image_dropzone_drop' => 'Slip billeder her for at uploade', 'images_deleted' => 'Billede slettet', 'image_preview' => 'Billedeksempel', 'image_upload_success' => 'Foto uploadet', 'image_update_success' => 'Billeddetaljer succesfuldt opdateret', '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!', + 'image_replace' => 'Erstat billede', + 'image_replace_success' => 'Billedfil blev opdateret', + 'image_rebuild_thumbs' => 'Regenerer størrelsesvariationer', + 'image_rebuild_thumbs_success' => 'Variationer i billedstørrelse blev genopbygget!', // Code Editor 'code_editor' => 'Rediger kode', diff --git a/lang/da/editor.php b/lang/da/editor.php index bf45899a8..973c8a902 100644 --- a/lang/da/editor.php +++ b/lang/da/editor.php @@ -14,7 +14,7 @@ return [ 'save' => 'Gem', 'close' => 'Luk', 'undo' => 'Fortryd', - 'redo' => 'Redo', + 'redo' => 'Gendan', 'left' => 'Venstre', 'center' => 'Midten', 'right' => 'Højre', @@ -31,7 +31,7 @@ return [ 'header_large' => 'Stor Overskrift', 'header_medium' => 'Mellemstor Overskrift', 'header_small' => 'Lille Overskrift', - 'header_tiny' => 'Tiny Header', + 'header_tiny' => 'Lille Header', 'paragraph' => 'Paragraf', 'blockquote' => 'Citat', 'inline_code' => 'Inline kode', @@ -125,8 +125,8 @@ return [ 'paste_column_after' => 'Indsæt kolonne efter', 'cell_padding' => 'Cell padding', 'cell_spacing' => 'Cell spacing', - 'caption' => 'Caption', - 'show_caption' => 'Show caption', + 'caption' => 'Citat', + 'show_caption' => 'Vis citat', 'constrain' => 'Constrain proportions', 'cell_border_solid' => 'Solid', 'cell_border_dotted' => 'Prikket', diff --git a/lang/da/entities.php b/lang/da/entities.php index c952f147b..1e8b38fa9 100644 --- a/lang/da/entities.php +++ b/lang/da/entities.php @@ -34,7 +34,7 @@ return [ 'no_pages_viewed' => 'Du har ikke besøgt nogle sider', 'no_pages_recently_created' => 'Ingen sider er blevet oprettet for nyligt', 'no_pages_recently_updated' => 'Ingen sider er blevet opdateret for nyligt', - 'export' => 'Exporter', + 'export' => 'Eksporter', 'export_html' => 'Indeholdt webfil', 'export_pdf' => 'PDF-fil', 'export_text' => 'Almindelig tekstfil', @@ -155,14 +155,14 @@ return [ 'books_sort_show_other' => 'Vis andre bøger', 'books_sort_save' => 'Gem ny ordre', '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_up' => 'Flyt op', + 'books_sort_move_down' => 'Flyt ned', + 'books_sort_move_prev_book' => 'Flyt til forrige bog', + 'books_sort_move_next_book' => 'Flyt til næste bog', + 'books_sort_move_prev_chapter' => 'Flyt Til Foregående Kapitel', + 'books_sort_move_next_chapter' => 'Flyt Til Næste Kapitel', + 'books_sort_move_book_start' => 'Flyt til Start af bog', + 'books_sort_move_book_end' => 'Flyt til slutningen af bogen', 'books_sort_move_before_chapter' => 'Move to Before Chapter', 'books_sort_move_after_chapter' => 'Move to After Chapter', 'books_copy' => 'Kopier Bog', @@ -229,7 +229,7 @@ return [ 'pages_edit_enter_changelog' => 'Indtast ændringsoversigt', 'pages_editor_switch_title' => 'Skift 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_consider_following' => 'Overvej følgende ved skift af redaktører:', '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.', @@ -241,7 +241,7 @@ return [ 'pages_md_insert_image' => 'Indsæt billede', 'pages_md_insert_link' => 'Indsæt emnelink', 'pages_md_insert_drawing' => 'Indsæt tegning', - 'pages_md_show_preview' => 'Show preview', + 'pages_md_show_preview' => 'Vis forhåndsvisning', '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?', @@ -261,7 +261,7 @@ return [ 'pages_revisions_created_by' => 'Oprettet af', 'pages_revisions_date' => 'Revisionsdato', 'pages_revisions_number' => '#', - 'pages_revisions_sort_number' => 'Revision Number', + 'pages_revisions_sort_number' => 'Revisionsnummer', 'pages_revisions_numbered' => 'Revision #:id', 'pages_revisions_numbered_changes' => 'Revision #:id ændringer', 'pages_revisions_editor' => 'Editor Type', @@ -299,7 +299,7 @@ return [ 'pages_is_template' => 'Sideskabelon', // Editor Sidebar - 'toggle_sidebar' => 'Toggle Sidebar', + 'toggle_sidebar' => 'Sidebjælke til/fra', 'page_tags' => 'Sidetags', 'chapter_tags' => 'Kapiteltags', 'book_tags' => 'Bogtags', @@ -412,7 +412,7 @@ return [ 'references_to_desc' => 'Listed below is all the known content in the system that links to this item.', // Watch Options - 'watch' => 'Watch', + 'watch' => 'Overvåg', 'watch_title_default' => 'Default Preferences', 'watch_desc_default' => 'Revert watching to just your default notification preferences.', 'watch_title_ignore' => 'Ignore', diff --git a/lang/da/notifications.php b/lang/da/notifications.php index 61a44f1f0..00b0c464f 100644 --- a/lang/da/notifications.php +++ b/lang/da/notifications.php @@ -20,7 +20,7 @@ return [ 'detail_updated_by' => 'Updated By:', 'action_view_comment' => 'View Comment', - 'action_view_page' => 'View Page', + 'action_view_page' => 'Vis Side', '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/da/preferences.php b/lang/da/preferences.php index 2b88f9671..9b9436dba 100644 --- a/lang/da/preferences.php +++ b/lang/da/preferences.php @@ -5,47 +5,47 @@ */ return [ - 'my_account' => 'My Account', + 'my_account' => 'Min konto', - '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' => 'Genveje', + 'shortcuts_interface' => 'Genveje', + 'shortcuts_toggle_desc' => 'Her kan du aktivere eller deaktivere genveje, der bruges til navigation og handlinger.', + 'shortcuts_customize_desc' => 'Du kan tilpasse hver af genvejene nedenfor. Tryk på din ønskede tastekombination efter at have valgt feltet for genvejen.', + 'shortcuts_toggle_label' => 'Tastaturgenveje aktiveret', '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_section_actions' => 'Almindelige handlinger', + 'shortcuts_save' => 'Gem Genveje', + 'shortcuts_overlay_desc' => 'Bemærk: Når genveje er aktiveret kan du altid se de tilgængelige genveje ved at trykke på "?" på dit tastatur.', + 'shortcuts_update_success' => 'Genvejspræferencer er blevet opdateret!', + 'shortcuts_overview_desc' => 'Håndtér tastaturgenveje, du kan bruge til at navigere i systemets brugergrænseflade.', - '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' => 'Notifikationer', + 'notifications_desc' => 'Administrer de e-mail-notifikationer, du modtager, når visse aktiviteter udføres i systemet.', + 'notifications_opt_own_page_changes' => 'Adviser ved ændringer af sider, jeg ejer', + 'notifications_opt_own_page_comments' => 'Adviser ved kommentarer på sider, jeg ejer', + 'notifications_opt_comment_replies' => 'Adviser ved svar på mine kommentarer', + 'notifications_save' => 'Gem Indstillinger', + 'notifications_update_success' => 'Indstillinger for notifikationer er blevet opdateret!', + 'notifications_watched' => 'Overvågede & Ignorerede', + 'notifications_watched_desc' => 'Nedenfor er de elementer, der har brugerdefinerede overvågning aktivt. For at opdatere dine præferencer for disse, gå til elementet og find derefter overvågning i sidepanelet.', - '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!', + 'auth' => 'Adgang & Sikkerhed', + 'auth_change_password' => 'Skift adgangskode', + 'auth_change_password_desc' => 'Skift den adgangskode, du bruger til at logge ind med. Den skal være mindst 8 tegn lang.', + 'auth_change_password_success' => 'Adgangskoden er blevet opdateret!', - '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.', + 'profile' => 'Profil', + 'profile_desc' => 'Administrer detaljerne på din konto, som repræsenterer dig over for andre brugere.', + 'profile_view_public' => 'Vis offentlig profil', + 'profile_name_desc' => 'Konfigurer dit visningsnavn, som vil være synligt for andre brugere i systemet gennem den aktivitet, du udfører, og indhold du ejer.', + 'profile_email_desc' => 'Denne e-mail vil blive brugt til notifikationer og, afhængigt af aktiv systemgodkendelse, systemadgang.', + 'profile_email_no_permission' => 'Desværre har du ikke tilladelse til at ændre din e-mailadresse. Hvis du ønsker at ændre dette, skal du bede en administrator om at ændre dette for dig.', + 'profile_avatar_desc' => 'Vælg et billede som vil blive brugt til at repræsentere dig selv over for andre i systemet. Ideelt set bør dette billede være kvadrat og omkring 256px i bredde og højde.', + 'profile_admin_options' => 'Administrator Indstillinger', + 'profile_admin_options_desc' => 'Yderligere indstillinger på administratorniveau, såsom dem der håndterer rolleopgaver, kan findes for din brugerkonto i området "Indstillinger > Brugere".', - '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?', + 'delete_account' => 'Slet konto', + 'delete_my_account' => 'Slet min konto', + 'delete_my_account_desc' => 'Dette vil fuldt ud slette din brugerkonto fra systemet. Du vil ikke være i stand til at gendanne denne konto eller fortryde denne handling. Indhold, du har oprettet, såsom oprettede sider og uploadede billeder, vil ikke blive slettet.', + 'delete_my_account_warning' => 'Er du sikker at du vil slette din konto?', ]; diff --git a/lang/da/settings.php b/lang/da/settings.php index b777ea14a..276bb4995 100644 --- a/lang/da/settings.php +++ b/lang/da/settings.php @@ -51,8 +51,8 @@ return [ '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', + 'app_color' => 'Primær farve', + 'link_color' => 'Standard Link Farve', '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' => 'Bogreolfarve', 'book_color' => 'Bogfarve', @@ -92,7 +92,7 @@ return [ 'maint_send_test_email_mail_text' => 'Tillykke! Da du har modtaget denne mailnotifikation, ser det ud som om, at dine mailindstillinger er opsat korrekt.', 'maint_recycle_bin_desc' => 'Slettede hylder, bøger, kapitler og sider overføres til papirkurven, så de kan gendannes eller slettes permanent. Ældre elementer i papirkurven fjernes automatisk efter et stykke tid afhængigt af systemets konfiguration.', 'maint_recycle_bin_open' => 'Åbn papirkurven', - 'maint_regen_references' => 'Regenerate References', + 'maint_regen_references' => 'Regenerer Referencer', '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.', @@ -139,7 +139,7 @@ return [ '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_assigned_users' => 'Tildelte brugere', 'roles_permissions_provided' => 'Provided Permissions', 'role_create' => 'Opret en ny rolle', 'role_delete' => 'Slet rolle', @@ -214,8 +214,8 @@ return [ '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_status_connected' => 'Tilsuttet', + 'users_social_status_disconnected' => 'Afbrudt', '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', @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Sidst Fejlet:', 'webhooks_last_error_message' => 'Sidste fejlmeddelelse:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/de/preferences.php b/lang/de/preferences.php index 66c7f6f12..291e0f9f6 100644 --- a/lang/de/preferences.php +++ b/lang/de/preferences.php @@ -27,7 +27,7 @@ return [ '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 Ihre Einstellungen für diese Elemente zu aktualisieren, sehen Sie sich das Element an und suchen dann die Überwachungsoptionen in der Seitenleiste.', 'auth' => 'Zugang & Sicherheit', 'auth_change_password' => 'Passwort ändern', diff --git a/lang/de/settings.php b/lang/de/settings.php index f25576e27..f237ea532 100644 --- a/lang/de/settings.php +++ b/lang/de/settings.php @@ -277,6 +277,14 @@ Hinweis: Benutzer können ihre E-Mail-Adresse nach erfolgreicher Registrierung 'webhooks_last_errored' => 'Letzter Fehler:', 'webhooks_last_error_message' => 'Letzte Fehlermeldung:', + // Licensing + 'licenses' => 'Lizenzen', + 'licenses_desc' => 'Diese Seite beschreibt Lizenzinformationen für BookStack zusätzlich zu den Projekten und Bibliotheken, die in BookStack verwendet werden. Viele aufgelistete Projekte dürfen nur in einem Entwicklungskontext verwendet werden.', + 'licenses_bookstack' => 'BookStack-Lizenz', + 'licenses_php' => 'PHP-Bibliothekslizenzen', + 'licenses_js' => 'JavaScript-Bibliothekslizenzen', + 'licenses_other' => 'Andere Lizenzen', + 'license_details' => 'Lizenzdetails', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/de_informal/entities.php b/lang/de_informal/entities.php index 9ed27c9d1..f65e15ee8 100644 --- a/lang/de_informal/entities.php +++ b/lang/de_informal/entities.php @@ -398,7 +398,7 @@ return [ 'convert_to_shelf' => 'In Regal umwandeln', 'convert_to_shelf_contents_desc' => 'Du kannst dieses Buch in ein neues Regal mit demselben Inhalt umwandeln. Die in diesem Buch enthaltenen Kapitel werden in neue Bücher umgewandelt. Wenn dieses Buch Seiten enthält, die nicht in einem Kapitel enthalten sind, wird das Buch umbenannt und enthält diese Seiten, und das Buch wird Teil des neuen Regals.', 'convert_to_shelf_permissions_desc' => 'Alle Berechtigungen, die für dieses Buch festgelegt wurden, werden in das neue Regal und in alle neuen untergeordneten Bücher kopiert, für die keine eigenen Berechtigungen festgelegt wurden. Beachte, dass Berechtigungen für Regale nicht automatisch auf den Inhalt übertragen werden, wie es bei Büchern der Fall ist.', - 'convert_book' => 'In Buch umwandeln', + 'convert_book' => 'Buch umwandeln', 'convert_book_confirm' => 'Bist du dir sicher, dass du dieses Buch umwandelt möchtest?', 'convert_undo_warning' => 'Das kann nicht so einfach rückgängig gemacht werden.', 'convert_to_book' => 'In Buch umwandeln', diff --git a/lang/de_informal/preferences.php b/lang/de_informal/preferences.php index a2fc60a14..8211e2336 100644 --- a/lang/de_informal/preferences.php +++ b/lang/de_informal/preferences.php @@ -27,7 +27,7 @@ return [ '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 deine Einstellungen für diese Elemente zu aktualisieren, sieh dir das Element an und suche 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.', 'auth' => 'Zugang & Sicherheit', 'auth_change_password' => 'Passwort ändern', diff --git a/lang/de_informal/settings.php b/lang/de_informal/settings.php index ea65bef55..4398edebd 100644 --- a/lang/de_informal/settings.php +++ b/lang/de_informal/settings.php @@ -277,6 +277,14 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung 'webhooks_last_errored' => 'Letzter Fehler:', 'webhooks_last_error_message' => 'Letzte Fehlermeldung:', + // Licensing + 'licenses' => 'Lizenzen', + 'licenses_desc' => 'Diese Seite beschreibt Lizenzinformationen für BookStack zusätzlich zu den Projekten und Bibliotheken, die in BookStack verwendet werden. Viele aufgelistete Projekte dürfen nur in einem Entwicklungskontext verwendet werden.', + 'licenses_bookstack' => 'BookStack-Lizenz', + 'licenses_php' => 'PHP-Bibliothekslizenzen', + 'licenses_js' => 'JavaScript-Bibliothekslizenzen', + 'licenses_other' => 'Andere Lizenzen', + 'license_details' => 'Lizenzdetails', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/el/preferences.php b/lang/el/preferences.php index a06aff547..4f7e97d52 100644 --- a/lang/el/preferences.php +++ b/lang/el/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/el/settings.php b/lang/el/settings.php index 43a27b13b..8f0e20bac 100644 --- a/lang/el/settings.php +++ b/lang/el/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Τελευταίο σφάλμα:', 'webhooks_last_error_message' => 'Τελευταίο μήνυμα λάθους:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/en/preferences.php b/lang/en/preferences.php index 2b88f9671..2872f5f3c 100644 --- a/lang/en/preferences.php +++ b/lang/en/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/en/settings.php b/lang/en/settings.php index 7b7f5d2a2..f4c84092c 100644 --- a/lang/en/settings.php +++ b/lang/en/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Last Error Message:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/es/activities.php b/lang/es/activities.php index bd1e0dbd0..9431eeb9f 100644 --- a/lang/es/activities.php +++ b/lang/es/activities.php @@ -6,7 +6,7 @@ return [ // Pages - 'page_create' => 'página creada', + 'page_create' => 'Página creada', 'page_create_notification' => 'Página creada correctamente', 'page_update' => 'página actualizada', 'page_update_notification' => 'Página actualizada correctamente', @@ -72,7 +72,7 @@ return [ 'mfa_remove_method_notification' => 'Método de Autenticación en Dos Pasos eliminado correctamente', // Settings - 'settings_update' => 'ajustes actualizados', + 'settings_update' => 'configuración actualizada', 'settings_update_notification' => 'Configuración actualizada correctamente', 'maintenance_action_run' => 'ejecutada acción de mantenimiento', diff --git a/lang/es/preferences.php b/lang/es/preferences.php index 3974683f7..13af93d29 100644 --- a/lang/es/preferences.php +++ b/lang/es/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => 'Guardar preferencias', 'notifications_update_success' => '¡Se han actualizado las preferencias de notificaciones!', '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.', + 'notifications_watched_desc' => 'A continuación se muestran los elementos que tienen preferencias personalizadas de monitorización. Para actualizar sus preferencias, vea el elemento y las opciones se mostrarán en la barra lateral.', 'auth' => 'Acceso y seguridad', 'auth_change_password' => 'Cambiar contraseña', diff --git a/lang/es/settings.php b/lang/es/settings.php index 0d0cf221e..b040fda12 100644 --- a/lang/es/settings.php +++ b/lang/es/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Último error:', 'webhooks_last_error_message' => 'Último mensaje de error:', + // Licensing + 'licenses' => 'Licencias', + 'licenses_desc' => 'Esta página detalla información sobre la licencia de BookStack además de los proyectos y bibliotecas que se utilizan en BookStack. Muchos proyectos enumerados aquí pueden ser utilizados solo en un contexto de desarrollo.', + 'licenses_bookstack' => 'Licencia BookStack', + 'licenses_php' => 'Licencias de la biblioteca PHP', + 'licenses_js' => 'Licencias de la biblioteca JavaScript', + 'licenses_other' => 'Otras Licencias', + 'license_details' => 'Datos de la licencia', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/es_AR/activities.php b/lang/es_AR/activities.php index 41c26d2c4..f0afe2d43 100644 --- a/lang/es_AR/activities.php +++ b/lang/es_AR/activities.php @@ -59,7 +59,7 @@ return [ 'favourite_remove_notification' => '".name" se eliminó de sus favoritos', // Watching - 'watch_update_level_notification' => 'Preferencias de suscripciones actualizadas correctamente', + 'watch_update_level_notification' => 'Preferencias de visualización actualizadas con éxito', // Auth 'auth_login' => 'sesión iniciada', diff --git a/lang/es_AR/notifications.php b/lang/es_AR/notifications.php index 5ebc42129..a75b30f55 100644 --- a/lang/es_AR/notifications.php +++ b/lang/es_AR/notifications.php @@ -10,11 +10,11 @@ return [ 'new_page_intro' => 'Una nueva página ha sido creada en :appName:', 'updated_page_subject' => 'Página actualizada: :pageName', 'updated_page_intro' => 'Una página ha sido actualizada en :appName:', - 'updated_page_debounce' => 'Para prevenir notificaciones en masa, durante un tiempo no se enviarán notificaciones para futuras ediciones de esta página por el mismo editor.', + 'updated_page_debounce' => 'Para evitar una avalancha de notificaciones, durante un tiempo no se enviarán notificaciones sobre más ediciones de esta página por el mismo editor.', - 'detail_page_name' => 'Nombre de página:', + 'detail_page_name' => 'Nombre de la página:', 'detail_page_path' => 'Ruta de la página:', - 'detail_commenter' => 'Autor del comentario:', + 'detail_commenter' => 'Comentarista:', 'detail_comment' => 'Comentario:', 'detail_created_by' => 'Creado por:', 'detail_updated_by' => 'Actualizado por:', @@ -22,6 +22,6 @@ return [ 'action_view_comment' => 'Ver comentario', 'action_view_page' => 'Ver página', - 'footer_reason' => 'Esta notificación fue enviada porque :link cubre este tipo de actividad para este artículo.', - 'footer_reason_link' => 'sus preferencias de notificación', + 'footer_reason' => 'Esta notificación le fue enviada porque :link cubre este tipo de actividad para este elemento.', + 'footer_reason_link' => 'nuestras preferencias de notificación', ]; diff --git a/lang/es_AR/preferences.php b/lang/es_AR/preferences.php index f037d0d92..2bf3f3f96 100644 --- a/lang/es_AR/preferences.php +++ b/lang/es_AR/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => 'Guardar preferencias', 'notifications_update_success' => '¡Se han actualizado las preferencias de notificaciones!', '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.', + '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.', 'auth' => 'Acceso y seguridad', 'auth_change_password' => 'Cambiar contraseña', diff --git a/lang/es_AR/settings.php b/lang/es_AR/settings.php index 344a9c87b..10da1a0a6 100644 --- a/lang/es_AR/settings.php +++ b/lang/es_AR/settings.php @@ -195,7 +195,7 @@ return [ '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' => '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_password_warning' => 'Solo complete lo siguiente si desea cambiar la contraseña para 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,7 +211,7 @@ return [ '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_desc' => 'Vea el estado de las cuentas sociales conectadas para este usuario. Las cuentas sociales se pueden usar además del sistema de autenticación principal 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', @@ -220,7 +220,7 @@ return [ '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_desc' => 'Cree y administre los tokens de acceso utilizados para autenticarse con la API REST de BookStack. Los permisos para la API se gestionan 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', @@ -277,6 +277,14 @@ return [ 'webhooks_last_errored' => 'Último error:', 'webhooks_last_error_message' => 'Último mensaje de error:', + // Licensing + 'licenses' => 'Licencias', + 'licenses_desc' => 'Esta página detalla información sobre la licencia de BookStack además de los proyectos y bibliotecas que se utilizan en BookStack. Muchos proyectos enumerados aquí pueden ser utilizados solo en un contexto de desarrollo.', + 'licenses_bookstack' => 'Licencia BookStack', + 'licenses_php' => 'Licencias de la biblioteca PHP', + 'licenses_js' => 'Licencias de la biblioteca JavaScript', + 'licenses_other' => 'Otras Licencias', + 'license_details' => 'Datos de la licencia', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/et/preferences.php b/lang/et/preferences.php index 9ac77a965..f4ba5e6ae 100644 --- a/lang/et/preferences.php +++ b/lang/et/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => 'Salvesta eelistused', 'notifications_update_success' => 'Teavituste eelistused on salvestatud!', '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.', + '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.', 'auth' => 'Ligipääs ja turvalisus', 'auth_change_password' => 'Muuda parool', diff --git a/lang/et/settings.php b/lang/et/settings.php index 3eefefe56..e73cde10b 100644 --- a/lang/et/settings.php +++ b/lang/et/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Viimati ebaõnnestunud:', 'webhooks_last_error_message' => 'Viimane veateade:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/eu/preferences.php b/lang/eu/preferences.php index 3e83a9784..da7638593 100644 --- a/lang/eu/preferences.php +++ b/lang/eu/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/eu/settings.php b/lang/eu/settings.php index 441e53bd5..0bd0d8257 100644 --- a/lang/eu/settings.php +++ b/lang/eu/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Last Error Message:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/fa/settings.php b/lang/fa/settings.php index 4df6e99a0..d2df873a9 100644 --- a/lang/fa/settings.php +++ b/lang/fa/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'آخرین خطا:', 'webhooks_last_error_message' => 'آخرین پیغام خطا:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/fi/settings.php b/lang/fi/settings.php index eceb41d1f..ee47d30d0 100644 --- a/lang/fi/settings.php +++ b/lang/fi/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Viimeisin virhe:', 'webhooks_last_error_message' => 'Viimeisin virheviesti:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/fr/passwords.php b/lang/fr/passwords.php index e209c2178..17dd15d01 100644 --- a/lang/fr/passwords.php +++ b/lang/fr/passwords.php @@ -7,8 +7,8 @@ return [ 'password' => 'Les mots de passe doivent faire au moins 8 caractères et correspondre à la confirmation.', - 'user' => "Nous n'avons pas trouvé d'utilisateur avec cette adresse.", - 'token' => 'Le mot de passe reset du token n\'est pas valide pour cette adresse e-mail.', + 'user' => "Nous n'avons pas trouvé d'utilisateur avec cette adresse e-mail.", + 'token' => 'Le jeton de réinitialisation du mot de passe n\'est pas valide pour cette adresse e-mail.', 'sent' => 'Nous vous avons envoyé un lien de réinitialisation de mot de passe par e-mail !', 'reset' => 'Votre mot de passe a été réinitialisé !', diff --git a/lang/fr/preferences.php b/lang/fr/preferences.php index f26972d7c..2180ed70c 100644 --- a/lang/fr/preferences.php +++ b/lang/fr/preferences.php @@ -8,7 +8,7 @@ return [ 'my_account' => 'Mon compte', 'shortcuts' => 'Raccourcis', - 'shortcuts_interface' => 'Préférences de raccourci de l\'interface utilisateur', + 'shortcuts_interface' => 'Préférences de raccourcis 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', @@ -27,7 +27,7 @@ return [ '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.', + '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.', 'auth' => 'Accès et sécurité', 'auth_change_password' => 'Changer le mot de passe', diff --git a/lang/fr/settings.php b/lang/fr/settings.php index 928fed4b3..fa7433c48 100644 --- a/lang/fr/settings.php +++ b/lang/fr/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Dernier en erreur :', 'webhooks_last_error_message' => 'Dernier message d\'erreur : ', + // Licensing + 'licenses' => 'Licences', + 'licenses_desc' => 'Cette page détaille les informations de licence pour BookStack ainsi que les projets et librairies utilisées dans BookStack. Nombre des projets listés peuvent n\'être utilisés que dans un contexte de développement.', + 'licenses_bookstack' => 'Licences BookStack', + 'licenses_php' => 'Licences de librairies PHP', + 'licenses_js' => 'Licences de librairies JavaScript', + 'licenses_other' => 'Autres Licences', + 'license_details' => 'Détails de la licence', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/he/preferences.php b/lang/he/preferences.php index 28c8b127c..f0f997f26 100644 --- a/lang/he/preferences.php +++ b/lang/he/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/he/settings.php b/lang/he/settings.php index e16fdb299..b8bbfbe26 100644 --- a/lang/he/settings.php +++ b/lang/he/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Last Error Message:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/hr/preferences.php b/lang/hr/preferences.php index 520d9da73..2f409f8d3 100644 --- a/lang/hr/preferences.php +++ b/lang/hr/preferences.php @@ -29,7 +29,7 @@ Obavijesti o komentarima na stranicama koje posjedujem', '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.', + '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', diff --git a/lang/hr/settings.php b/lang/hr/settings.php index 42c033a29..4d010ba78 100644 --- a/lang/hr/settings.php +++ b/lang/hr/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Zadnja pogreška:', 'webhooks_last_error_message' => 'Posljednja poruka o pogrešci:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/hu/preferences.php b/lang/hu/preferences.php index 65f6088ec..11d145064 100644 --- a/lang/hu/preferences.php +++ b/lang/hu/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => 'Beállítások mentése', 'notifications_update_success' => 'Az értesítési beállítások frissítve lettek!', 'notifications_watched' => 'Megfigyelt és figyelmen kívül hagyott elemek', - 'notifications_watched_desc' => ' Az alábbi elemekre egyedi figyelési beállítások vannak alkalmazva. A beállítások frissítéséhez tekintsd meg az elemet, majd keress a figyelési lehetőségeket az oldalsávban.', + 'notifications_watched_desc' => 'Az alábbi elemekre egyedi figyelési beállítások vannak alkalmazva. A beállítások frissítéséhez tekintsd meg az elemet, majd keress a figyelési lehetőségeket az oldalsávban.', 'auth' => 'Hozzáférés és Biztonság', 'auth_change_password' => 'Jelszó módosítása', diff --git a/lang/hu/settings.php b/lang/hu/settings.php index a7a3d0f19..9bf8880d3 100644 --- a/lang/hu/settings.php +++ b/lang/hu/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Utolsó hiba:', 'webhooks_last_error_message' => 'Utolsó hibaüzenet:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/id/preferences.php b/lang/id/preferences.php index 2b88f9671..2872f5f3c 100644 --- a/lang/id/preferences.php +++ b/lang/id/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/id/settings.php b/lang/id/settings.php index 540133628..3b57776f0 100644 --- a/lang/id/settings.php +++ b/lang/id/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Last Error Message:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/it/activities.php b/lang/it/activities.php index 518ffb269..39b6859e4 100644 --- a/lang/it/activities.php +++ b/lang/it/activities.php @@ -6,7 +6,7 @@ return [ // Pages - 'page_create' => 'pagina creata', + 'page_create' => 'ha creato la pagina', 'page_create_notification' => 'Pagina creata con successo', 'page_update' => 'ha aggiornato la pagina', 'page_update_notification' => 'Pagina aggiornata con successo', @@ -14,7 +14,7 @@ return [ 'page_delete_notification' => 'Pagina eliminata con successo', 'page_restore' => 'ha ripristinato la pagina', 'page_restore_notification' => 'Pagina ripristinata con successo', - 'page_move' => 'ha mosso la pagina', + 'page_move' => 'ha spostato la pagina', 'page_move_notification' => 'Pagina spostata con successo', // Chapters @@ -30,7 +30,7 @@ return [ // Books 'book_create' => 'ha creato il libro', 'book_create_notification' => 'Libro creato con successo', - 'book_create_from_chapter' => 'convertito da capitolo a libro', + 'book_create_from_chapter' => 'ha convertito da capitolo a libro', 'book_create_from_chapter_notification' => 'Capitolo convertito con successo in libro', 'book_update' => 'ha aggiornato il libro', 'book_update_notification' => 'Libro aggiornato con successo', @@ -40,18 +40,18 @@ return [ 'book_sort_notification' => 'Libro reindicizzato con successo', // Bookshelves - 'bookshelf_create' => 'libreria creata', + 'bookshelf_create' => 'ha creato la libreria', 'bookshelf_create_notification' => 'Libreria creata con successo', - 'bookshelf_create_from_book' => 'libro convertito in libreria', + 'bookshelf_create_from_book' => 'ha convertito libro in libreria', 'bookshelf_create_from_book_notification' => 'Libro convertito con successo in libreria', - 'bookshelf_update' => 'libreria aggiornata', + 'bookshelf_update' => 'ha aggiornato la libreria', 'bookshelf_update_notification' => 'Libreria aggiornata con successo', - 'bookshelf_delete' => 'Iibreria eliminata', + 'bookshelf_delete' => 'ha eliminato la libreria', 'bookshelf_delete_notification' => 'Libreria eliminata con successo', // Revisions - 'revision_restore' => 'revisione ripristinata', - 'revision_delete' => 'revisione eliminata', + 'revision_restore' => 'ha ripristinato la revisione', + 'revision_delete' => 'ha eliminato la revisione', 'revision_delete_notification' => 'Revisione eliminata con successo', // Favourites @@ -64,11 +64,11 @@ return [ // Auth 'auth_login' => 'connesso', 'auth_register' => 'registrato come nuovo utente', - 'auth_password_reset_request' => 'richiesta di reimpostazione della password utente', - 'auth_password_reset_update' => 'reimposta password utente', - 'mfa_setup_method' => 'metodo MFA configurato', + 'auth_password_reset_request' => 'ha richiesto di reimpostare la password utente', + 'auth_password_reset_update' => 'ha reimpostato la password utente', + 'mfa_setup_method' => 'ha configurato un metodo multi-fattore', 'mfa_setup_method_notification' => 'Metodo multi-fattore impostato con successo', - 'mfa_remove_method' => 'metodo MFA rimosso', + 'mfa_remove_method' => 'ha rimosso un metodo multi-fattore', 'mfa_remove_method_notification' => 'Metodo multi-fattore rimosso con successo', // Settings diff --git a/lang/it/auth.php b/lang/it/auth.php index b9bc685aa..00ecf9443 100644 --- a/lang/it/auth.php +++ b/lang/it/auth.php @@ -25,15 +25,15 @@ return [ 'forgot_password' => 'Password dimenticata?', 'remember_me' => 'Ricordami', 'ldap_email_hint' => 'Inserisci un email per usare quest\'account.', - 'create_account' => 'Crea Account', + 'create_account' => 'Crea un account', 'already_have_account' => 'Hai già un account?', 'dont_have_account' => 'Non hai un account?', 'social_login' => 'Login Social', 'social_registration' => 'Registrazione Social', - 'social_registration_text' => 'Registrati usando un altro servizio.', + 'social_registration_text' => 'Registrati e accedi utilizzando un altro servizio.', 'register_thanks' => 'Grazie per esserti registrato!', - 'register_confirm' => 'Controlla la tua mail e clicca il bottone di conferma per accedere a :appName.', + 'register_confirm' => 'Controlla la tua mail e clicca il pulsante di conferma per accedere a :appName.', 'registrations_disabled' => 'La registrazione è disabilitata', 'registration_email_domain_invalid' => 'Questo dominio della mail non ha accesso a questa applicazione', 'register_success' => 'Grazie per la registrazione! Sei registrato e loggato.', diff --git a/lang/it/common.php b/lang/it/common.php index b886ac35c..6410081d2 100644 --- a/lang/it/common.php +++ b/lang/it/common.php @@ -35,16 +35,16 @@ return [ 'copy' => 'Copia', 'reply' => 'Rispondi', 'delete' => 'Elimina', - 'delete_confirm' => 'Conferma Eliminazione', + 'delete_confirm' => 'Conferma eliminazione', 'search' => 'Cerca', - 'search_clear' => 'Pulisci Ricerca', + 'search_clear' => 'Pulisci ricerca', 'reset' => 'Azzera', 'remove' => 'Rimuovi', 'add' => 'Aggiungi', 'configure' => 'Configura', 'manage' => 'Gestisci', 'fullscreen' => 'Schermo intero', - 'favourite' => 'Aggiungi ai Preferiti', + 'favourite' => 'Aggiungi ai preferiti', 'unfavourite' => 'Rimuovi dai preferiti', 'next' => 'Successivo', 'previous' => 'Precedente', @@ -56,9 +56,9 @@ return [ // Sort Options 'sort_options' => 'Opzioni Ordinamento', - 'sort_direction_toggle' => 'Inverti Direzione Ordinamento', - 'sort_ascending' => 'Ordine Ascendente', - 'sort_descending' => 'Ordine Discendente', + 'sort_direction_toggle' => 'Inverti direzione ordinamento', + 'sort_ascending' => 'Ordine ascendente', + 'sort_descending' => 'Ordine discendente', 'sort_name' => 'Nome', 'sort_default' => 'Predefinito', 'sort_created_at' => 'Data Creazione', diff --git a/lang/it/entities.php b/lang/it/entities.php index 4c49dae5e..22bc359ba 100644 --- a/lang/it/entities.php +++ b/lang/it/entities.php @@ -39,8 +39,8 @@ return [ 'export_pdf' => 'File PDF', 'export_text' => 'File di testo', 'export_md' => 'File Markdown', - 'default_template' => 'Modello Di Pagina Predefinito', - 'default_template_explain' => 'Assegna un modello di pagina che sarà usato come contenuto predefinito per tutte le pagine create in questo elemento. Tenere presente che questo verrà utilizzato solo se il creatore della pagina ha accesso alla pagina del modello scelto.', + 'default_template' => 'Modello di Pagina Predefinito', + 'default_template_explain' => 'Assegna un modello di pagina che sarà usato come contenuto predefinito per tutte le pagine create in questo elemento. Tieni presente che questo verrà utilizzato solo se il creatore della pagina ha accesso alla pagina del modello scelto.', 'default_template_select' => 'Seleziona una pagina modello', // Permissions and restrictions @@ -61,15 +61,15 @@ return [ 'search_clear' => 'Pulisci Ricerca', 'search_no_pages' => 'Nessuna pagina corrisponde alla ricerca', 'search_for_term' => 'Ricerca per :term', - 'search_more' => 'Più Risultati', + 'search_more' => 'Più risultati', 'search_advanced' => 'Ricerca Avanzata', 'search_terms' => 'Termini Ricerca', 'search_content_type' => 'Tipo di Contenuto', 'search_exact_matches' => 'Corrispondenza Esatta', 'search_tags' => 'Ricerche Tag', 'search_options' => 'Opzioni', - 'search_viewed_by_me' => 'Visti', - 'search_not_viewed_by_me' => 'Non visti', + 'search_viewed_by_me' => 'Visti da me', + 'search_not_viewed_by_me' => 'Non visti da me', 'search_permissions_set' => 'Permessi impostati', 'search_created_by_me' => 'Creati da me', 'search_updated_by_me' => 'Aggiornati da me', @@ -112,7 +112,7 @@ return [ 'shelves_permissions_create' => 'Le autorizzazioni per la creazione di librerie sono utilizzate solo per copiare le autorizzazioni ai libri figli utilizzando l\'azione sottostante. Non controllano la capacità di creare libri.', 'shelves_copy_permissions_to_books' => 'Copia Permessi ai Libri', 'shelves_copy_permissions' => 'Copia Permessi', - 'shelves_copy_permissions_explain' => 'Verranno applicati tutti i permessi della libreria ai libri al suo interno. Prima dell\'attivazione, assicurati che ogni permesso di questa libreria sia salvato.', + 'shelves_copy_permissions_explain' => 'Verranno applicati tutti i permessi della libreria ai libri al suo interno. Prima dell\'attivazione, assicurati di aver salvato le modifiche ai permessi di questa libreria.', 'shelves_copy_permission_success' => 'Permessi della libreria copiati in :count libri', // Books @@ -145,7 +145,7 @@ return [ 'books_search_this' => 'Cerca in questo libro', 'books_navigation' => 'Navigazione Libro', 'books_sort' => 'Ordina il contenuto del libro', - 'books_sort_desc' => 'Spostare capitoli e pagine all\'interno di un libro per riorganizzarne il contenuto. È possibile aggiungere altri libri, per spostare facilmente capitoli e pagine da un libro all\'altro.', + 'books_sort_desc' => 'Sposta capitoli e pagine all\'interno di un libro per riorganizzarne il contenuto. È possibile aggiungere altri libri, per spostare facilmente capitoli e pagine da un libro all\'altro.', 'books_sort_named' => 'Ordina il libro :bookName', 'books_sort_name' => 'Ordina per Nome', 'books_sort_created' => 'Ordina per Data di Creazione', @@ -154,17 +154,17 @@ return [ 'books_sort_chapters_last' => 'Capitoli Per Ultimi', 'books_sort_show_other' => 'Mostra Altri Libri', 'books_sort_save' => 'Salva il nuovo ordine', - 'books_sort_show_other_desc' => 'Aggiungere qui altri libri per includerli nell\'operazione di ordinamento e consentire una facile riorganizzazione incrociata dei libri.', + 'books_sort_show_other_desc' => 'Aggiungi qui altri libri per includerli nell\'operazione di ordinamento e consentire una facile riorganizzazione incrociata dei libri.', 'books_sort_move_up' => 'Muovi su', 'books_sort_move_down' => 'Muovi giù', - 'books_sort_move_prev_book' => 'Passare al libro precedente', - 'books_sort_move_next_book' => 'Passare al libro successivo', - 'books_sort_move_prev_chapter' => 'Passare al capitolo precedente', - 'books_sort_move_next_chapter' => 'Passare al capitolo successivo', - 'books_sort_move_book_start' => 'Spostarsi all\'inizio del libro', - 'books_sort_move_book_end' => 'Spostarsi alla fine del libro', - 'books_sort_move_before_chapter' => 'Passare al capitolo precedente', - 'books_sort_move_after_chapter' => 'Passare al capitolo successivo', + 'books_sort_move_prev_book' => 'Passa al libro precedente', + 'books_sort_move_next_book' => 'Passa al libro successivo', + 'books_sort_move_prev_chapter' => 'Passa al capitolo precedente', + 'books_sort_move_next_chapter' => 'Passa al capitolo successivo', + 'books_sort_move_book_start' => 'Passa all\'inizio del libro', + 'books_sort_move_book_end' => 'Passa alla fine del libro', + 'books_sort_move_before_chapter' => 'Passa al capitolo precedente', + 'books_sort_move_after_chapter' => 'Passa al capitolo successivo', 'books_copy' => 'Copia Libro', 'books_copy_success' => 'Libro copiato con successo', @@ -177,7 +177,7 @@ return [ 'chapters_create' => 'Crea un nuovo capitolo', 'chapters_delete' => 'Elimina Capitolo', 'chapters_delete_named' => 'Elimina il capitolo :chapterName', - 'chapters_delete_explain' => 'Procedendo si eliminerà il capitolo denominato \':chapterName\'. Anche le pagine in esso contenute saranno eliminate.', + 'chapters_delete_explain' => 'Procedendo si eliminerà il capitolo denominato \':chapterName\'. Anche le pagine all\'interno saranno eliminate.', 'chapters_delete_confirm' => 'Sei sicuro di voler eliminare questo capitolo?', 'chapters_edit' => 'Elimina Capitolo', 'chapters_edit_named' => 'Modifica il capitolo :chapterName', @@ -207,7 +207,7 @@ return [ 'pages_delete_draft' => 'Elimina Bozza Pagina', 'pages_delete_success' => 'Pagina eliminata', 'pages_delete_draft_success' => 'Bozza di una pagina eliminata', - 'pages_delete_warning_template' => 'Questa pagina è in uso attivo come modello di pagina predefinito del libro o del capitolo. Questi libri o capitoli non avranno più un modello di pagina predefinito assegnato dopo che questa pagina è stata eliminata.', + 'pages_delete_warning_template' => 'Questa pagina è in uso come modello di pagina predefinito del libro o del capitolo. Questi libri o capitoli non avranno più un modello di pagina predefinito assegnato dopo che questa pagina sarà eliminata.', 'pages_delete_confirm' => 'Sei sicuro di voler eliminare questa pagina?', 'pages_delete_draft_confirm' => 'Sei sicuro di voler eliminare la bozza di questa pagina?', 'pages_editing_named' => 'Modifica :pageName', @@ -229,8 +229,8 @@ return [ 'pages_edit_enter_changelog' => 'Inserisci Changelog', 'pages_editor_switch_title' => 'Cambia Editor', 'pages_editor_switch_are_you_sure' => 'Sei sicuro di voler cambiare l\'editor di questa pagina?', - 'pages_editor_switch_consider_following' => 'Considerare quanto segue quando si cambia editor:', - 'pages_editor_switch_consideration_a' => 'Una volta salvata, la nuova opzione di editor sarà utilizzata da qualsiasi editor futuro, inclusi quelli che potrebbero non essere in grado di cambiare il tipo di editor da solo.', + 'pages_editor_switch_consider_following' => 'Considera quanto segue quando si cambia editor:', + 'pages_editor_switch_consideration_a' => 'Una volta salvata, la nuova opzione di editor sarà utilizzata da chi modificherà in futuro, inclusi quelli che potrebbero non essere in grado di cambiare il tipo di editor da soli.', 'pages_editor_switch_consideration_b' => 'Ciò può potenzialmente portare a una perdita di dettagli e sintassi in determinate circostanze.', 'pages_editor_switch_consideration_c' => 'Le modifiche al tag o al changelog, fatte dall\'ultimo salvataggio, non persisteranno in questa modifica.', 'pages_save' => 'Salva Pagina', @@ -277,19 +277,19 @@ return [ 'pages_pointer_label' => 'Opzioni Sezione Pagina', 'pages_pointer_permalink' => 'Permalink Sezione Pagina', 'pages_pointer_include_tag' => 'Sezione Pagina Includi Tag', - 'pages_pointer_toggle_link' => 'Modalità Permalink, Premi per mostrare il tag includi', - 'pages_pointer_toggle_include' => 'Modo includi tag, premi per mostrare permalink', + 'pages_pointer_toggle_link' => 'Modalità Permalink, Premi per mostrare includi tag', + 'pages_pointer_toggle_include' => 'Modalità includi tag, premi per mostrare permalink', 'pages_permissions_active' => 'Permessi Pagina Attivi', 'pages_initial_revision' => 'Pubblicazione iniziale', 'pages_references_update_revision' => 'Aggiornamento automatico di sistema dei collegamenti interni', 'pages_initial_name' => 'Nuova Pagina', 'pages_editing_draft_notification' => 'Stai modificando una bozza che è stata salvata il :timeDiff.', - 'pages_draft_edited_notification' => 'Questa pagina è stata aggiornata. È consigliabile scartare questa bozza.', - 'pages_draft_page_changed_since_creation' => 'Questa pagina è stata aggiornata da quando è stata creata questa bozza. Si consiglia di scartare questa bozza o fare attenzione a non sovrascrivere alcun cambiamento di pagina.', + 'pages_draft_edited_notification' => 'Questa pagina è stata aggiornata. Si consiglia di scartare questa bozza.', + 'pages_draft_page_changed_since_creation' => 'Questa pagina è stata aggiornata da quando è stata creata questa bozza. Si consiglia di scartare questa bozza o di fare attenzione a non sovrascrivere alcun cambiamento alla pagina.', 'pages_draft_edit_active' => [ - 'start_a' => ':count hanno iniziato a modificare questa pagina', + 'start_a' => ':count utenti hanno iniziato a modificare questa pagina', 'start_b' => ':userName ha iniziato a modificare questa pagina', - 'time_a' => 'da quando le pagine sono state aggiornate', + 'time_a' => 'dall\'ultimo aggiornamento della pagina', 'time_b' => 'negli ultimi :minCount minuti', 'message' => ':start :time. Assicurati di non sovrascrivere le modifiche degli altri!', ], @@ -299,31 +299,31 @@ return [ 'pages_is_template' => 'Template Pagina', // Editor Sidebar - 'toggle_sidebar' => 'Attiva/Disattiva Barra Laterale', + 'toggle_sidebar' => 'Attiva/disattiva barra laterale', 'page_tags' => 'Tag Pagina', 'chapter_tags' => 'Tag Capitolo', 'book_tags' => 'Tag Libro', 'shelf_tags' => 'Tag Libreria', 'tag' => 'Tag', 'tags' => 'Tag', - 'tags_index_desc' => 'I tag possono essere applicati ai contenuti del sistema per applicare una forma flessibile di categorizzazione. I tag possono avere contemporaneamente una chiave e un valore, mentre il valore è opzionale. Una volta applicati, i contenuti possono essere interrogati utilizzando il nome e il valore del tag.', - 'tag_name' => 'Nome Tag', - 'tag_value' => 'Valore (Opzionale)', + 'tags_index_desc' => 'I tag possono essere applicati ai contenuti del sistema per applicare una forma flessibile di categorizzazione. I tag possono avere una chiave e un valore, il valore è opzionale. Una volta applicati, i contenuti possono essere cercati utilizzando il nome e il valore del tag.', + 'tag_name' => 'Nome del tag', + 'tag_value' => 'Valore tag (opzionale)', 'tags_explain' => "Aggiungi tag per categorizzare meglio il contenuto. \n Puoi assegnare un valore ai tag per una migliore organizzazione.", 'tags_add' => 'Aggiungi un altro tag', 'tags_remove' => 'Rimuovi questo tag', 'tags_usages' => 'Utilizzo totale dei tag', - 'tags_assigned_pages' => 'Assegnato alle Pagine', + 'tags_assigned_pages' => 'Assegnato alle pagine', 'tags_assigned_chapters' => 'Assegnato ai capitoli', - 'tags_assigned_books' => 'Assegnato a Libri', - 'tags_assigned_shelves' => 'Assegnato alle Librerie', + 'tags_assigned_books' => 'Assegnato ai libri', + 'tags_assigned_shelves' => 'Assegnato alle librerie', 'tags_x_unique_values' => ':count valori univoci', 'tags_all_values' => 'Tutti i valori', 'tags_view_tags' => 'Visualizza tag', 'tags_view_existing_tags' => 'Usa i tag esistenti', - 'tags_list_empty_hint' => 'I tag possono essere assegnati tramite la barra laterale dell\'editor di pagina o durante la modifica dei dettagli di un libro, capitolo o libreria.', + 'tags_list_empty_hint' => 'I tag possono essere assegnati tramite la barra laterale dell\'editor di pagina o durante la modifica dei dettagli di un libro, di un capitolo o di una libreria.', 'attachments' => 'Allegati', - 'attachments_explain' => 'Carica alcuni file o allega link per visualizzarli nella pagina. Questi sono visibili nella sidebar della pagina.', + 'attachments_explain' => 'Carica alcuni file o allega link per visualizzarli nella pagina. Questi sono visibili nella barra laterale della pagina.', 'attachments_explain_instant_save' => 'I cambiamenti qui sono salvati istantaneamente.', 'attachments_upload' => 'Carica File', 'attachments_link' => 'Allega Link', @@ -338,10 +338,10 @@ return [ 'attachments_link_url' => 'Link al file', 'attachments_link_url_hint' => 'Url del sito o del file', 'attach' => 'Allega', - 'attachments_insert_link' => 'Aggiungi Link Allegato alla Pagina', - 'attachments_edit_file' => 'Modifica File', - 'attachments_edit_file_name' => 'Nome File', - 'attachments_edit_drop_upload' => 'Rilascia file o clicca qui per caricare e sovrascrivere', + 'attachments_insert_link' => 'Aggiungi link allegato alla pagina', + 'attachments_edit_file' => 'Modifica file', + 'attachments_edit_file_name' => 'Nome file', + 'attachments_edit_drop_upload' => 'Trascina file qui o clicca per caricare e sovrascrivere', 'attachments_order_updated' => 'Ordine allegato aggiornato', 'attachments_updated_success' => 'Dettagli allegato aggiornati', 'attachments_deleted' => 'Allegato eliminato', @@ -349,11 +349,11 @@ return [ 'attachments_file_updated' => 'File aggiornato correttamente', 'attachments_link_attached' => 'Link allegato correttamente alla pagina', 'templates' => 'Modello', - 'templates_set_as_template' => 'La pagina è un template', - 'templates_explain_set_as_template' => 'Puoi impostare questa pagina come template in modo che il suo contenuto sia utilizzato quando si creano altre pagine. Gli altri utenti potranno utilizzare questo template se avranno i permessi di visualizzazione per questa pagina.', + 'templates_set_as_template' => 'La pagina è un modello', + 'templates_explain_set_as_template' => 'Puoi impostare questa pagina come modello in modo da utilizzare il suo contenuto quando si creano altre pagine. Gli altri utenti potranno utilizzare questo modello se avranno i permessi di visualizzazione per questa pagina.', 'templates_replace_content' => 'Rimpiazza contenuto della pagina', 'templates_append_content' => 'Appendi al contenuto della pagina', - 'templates_prepend_content' => 'Prependi al contenuto della pagina', + 'templates_prepend_content' => 'Anteponi al contenuto della pagina', // Profile View 'profile_user_for_x' => 'Utente da :time', @@ -361,7 +361,7 @@ return [ 'profile_not_created_pages' => ':userName non ha creato pagine', 'profile_not_created_chapters' => ':userName non ha creato capitoli', 'profile_not_created_books' => ':userName non ha creato libri', - 'profile_not_created_shelves' => ':userName non ha creato alcuna libreria', + 'profile_not_created_shelves' => ':userName non ha creato librerie', // Comments 'comment' => 'Commento', @@ -387,17 +387,17 @@ return [ 'revision_cannot_delete_latest' => 'Impossibile eliminare l\'ultima revisione.', // Copy view - 'copy_consider' => 'Per favore, considerate quanto segue quando copiate il contenuto.', + 'copy_consider' => 'Considera quanto segue quando copi il contenuto.', 'copy_consider_permissions' => 'Le impostazioni dei permessi personalizzati non saranno copiate.', 'copy_consider_owner' => 'Diventerai il proprietario di tutti i contenuti copiati.', 'copy_consider_images' => 'I file delle immagini delle pagine non saranno duplicati e le immagini originali manterranno la loro relazione con la pagina su cui sono state originariamente caricate.', 'copy_consider_attachments' => 'Gli allegati della pagina non saranno copiati.', - 'copy_consider_access' => 'Un cambiamento di luogo, di proprietario o di autorizzazioni può far sì che questo contenuto sia accessibile a chi prima non aveva accesso.', + 'copy_consider_access' => 'Un cambiamento di posizione, di proprietario o di autorizzazioni può far sì che questo contenuto sia accessibile a chi prima non aveva accesso.', // Conversions 'convert_to_shelf' => 'Converti in Libreria', - 'convert_to_shelf_contents_desc' => 'È possibile convertire questo libro in una nuova libreria con gli stessi contenuti. I capitoli contenuti in questo libro saranno convertiti in nuovi libri. Se il libro contiene pagine che non fanno parte di un capitolo, questo libro verrà rinominato e conterrà tali pagine e diventerà parte della nuova libreria.', - 'convert_to_shelf_permissions_desc' => 'Tutti i permessi impostati su questo libro saranno copiati sulla nuova libreria e su tutti i nuovi libri figli che non hanno i loro permessi applicati. Si noti che i permessi delle librerie non si trasmettono automaticamente ai contenuti al loro interno, come avviene per i libri.', + 'convert_to_shelf_contents_desc' => 'Puoi convertire questo libro in una nuova libreria con gli stessi contenuti. I capitoli contenuti in questo libro saranno convertiti in nuovi libri. Se il libro contiene pagine che non fanno parte di un capitolo, questo libro verrà rinominato e conterrà tali pagine e diventerà parte della nuova libreria.', + 'convert_to_shelf_permissions_desc' => 'Tutti i permessi impostati su questo libro saranno copiati sulla nuova libreria e su tutti i nuovi libri figli che non hanno i loro permessi applicati. Nota che i permessi delle librerie non si trasmettono automaticamente ai contenuti al loro interno, come avviene per i libri.', 'convert_book' => 'Converti Libro', 'convert_book_confirm' => 'Sei sicuro di voler convertire questo libro?', 'convert_undo_warning' => 'Questo non può essere annullato con la stessa facilità.', diff --git a/lang/it/errors.php b/lang/it/errors.php index ea24eeeab..05bf5373f 100644 --- a/lang/it/errors.php +++ b/lang/it/errors.php @@ -27,7 +27,7 @@ return [ 'oidc_no_email_address' => 'Impossibile trovare un indirizzo email, per questo utente, nei dati forniti dal sistema di autenticazione esterno', 'oidc_fail_authed' => 'Accesso con :system non riuscito, il sistema non ha fornito l\'autorizzazione', 'social_no_action_defined' => 'Nessuna azione definita', - 'social_login_bad_response' => "Ricevuto error durante il login con :socialAccount : \n:error", + 'social_login_bad_response' => "Ricevuto errore durante il login con :socialAccount : \n:error", 'social_account_in_use' => 'Questo account :socialAccount è già utilizzato, prova a loggarti usando l\'opzione :socialAccount.', 'social_account_email_in_use' => 'La mail :email è già in uso. Se hai già un account puoi connettere il tuo account :socialAccount dalle impostazioni del tuo profilo.', 'social_account_existing' => 'Questo account :socialAccount è già connesso al tuo profilo.', @@ -41,13 +41,13 @@ return [ // System 'path_not_writable' => 'Il percorso :filePath non è scrivibile. Controlla che abbia i permessi corretti.', '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.', + 'cannot_create_thumbs' => 'Il server non può creare miniature. 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_error' => 'Si è verificato un errore nel caricamento dell\'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.', @@ -71,7 +71,7 @@ return [ 'page_not_found' => 'Pagina non trovata', 'chapter_not_found' => 'Capitolo non trovato', 'selected_book_not_found' => 'Il libro selezionato non è stato trovato', - 'selected_book_chapter_not_found' => 'Il libro selezionato o il capitolo non sono stati trovati', + 'selected_book_chapter_not_found' => 'Il libro o il capitolo selezionati non sono stati trovati', 'guests_cannot_save_drafts' => 'Gli ospiti non possono salvare bozze', // Users @@ -81,27 +81,27 @@ return [ // Roles 'role_cannot_be_edited' => 'Questo ruolo non può essere modificato', 'role_system_cannot_be_deleted' => 'Questo ruolo è di sistema e non può essere eliminato', - 'role_registration_default_cannot_delete' => 'Questo ruolo non può essere eliminato finchè è impostato come default alla registrazione', - 'role_cannot_remove_only_admin' => 'Questo utente è l\'unico con assegnato il ruolo di amministratore. Assegna il ruolo di amministratore ad un altro utente prima di rimuoverlo qui.', + 'role_registration_default_cannot_delete' => 'Questo ruolo non può essere eliminato finchè è impostato come ruolo di registrazione predefinito', + 'role_cannot_remove_only_admin' => 'Questo utente è l\'unico con assegnato il ruolo di amministratore. Assegna il ruolo di amministratore ad un altro utente prima di rimuoverlo.', // Comments - 'comment_list' => 'C\'è stato un errore scaricando i commenti.', + 'comment_list' => 'Si è verificato un errore durante il recupero dei commenti.', 'cannot_add_comment_to_draft' => 'Non puoi aggiungere commenti a una bozza.', - 'comment_add' => 'C\'è stato un errore aggiungendo / aggiornando il commento.', - 'comment_delete' => 'C\'è stato un errore eliminando il commento.', + 'comment_add' => 'Si è verificato un errore durante l\'aggiunta / l\'aggiornamento del commento.', + 'comment_delete' => 'Si è verificato un errore durante l’eliminazione del commento.', 'empty_comment' => 'Impossibile aggiungere un commento vuoto.', // Error pages - '404_page_not_found' => 'Pagina Non Trovata', - 'sorry_page_not_found' => 'La pagina che stavi cercando non è stata trovata.', + '404_page_not_found' => 'Pagina non trovata', + 'sorry_page_not_found' => 'Siamo spiacenti, la pagina che stavi cercando non è stata trovata.', 'sorry_page_not_found_permission_warning' => 'Se pensi che questa pagina possa esistere, potresti non avere i permessi per visualizzarla.', 'image_not_found' => 'Immagine non trovata', 'image_not_found_subtitle' => 'Spiacente, l\'immagine che stai cercando non è stata trovata.', - 'image_not_found_details' => 'Se ti aspettavi che questa immagine esistesse, potrebbe essere stata cancellata.', + 'image_not_found_details' => 'Se pensi che questa immagine possa esistere, potrebbe essere stata cancellata.', 'return_home' => 'Ritorna alla home', - 'error_occurred' => 'C\'è Stato un errore', - 'app_down' => ':appName è offline', - 'back_soon' => 'Ritornerà presto.', + 'error_occurred' => 'Si è verificato un errore', + 'app_down' => ':appName è offline al momento', + 'back_soon' => 'Tornerà presto online.', // API errors 'api_no_authorization_found' => 'Nessun token di autorizzazione trovato nella richiesta', diff --git a/lang/it/notifications.php b/lang/it/notifications.php index 3b902600f..6b8932ebe 100644 --- a/lang/it/notifications.php +++ b/lang/it/notifications.php @@ -4,23 +4,23 @@ */ return [ - 'new_comment_subject' => 'Nuovo commento alla pagina: :pageName', + 'new_comment_subject' => 'Nuovo commento sulla pagina: :pageName', 'new_comment_intro' => 'Un utente ha commentato una pagina in :appName:', 'new_page_subject' => 'Nuova pagina: :pageName', 'new_page_intro' => 'Una nuova pagina è stata creata in :appName:', 'updated_page_subject' => 'Pagina aggiornata: :pageName', 'updated_page_intro' => 'Una pagina è stata aggiornata in :appName:', - 'updated_page_debounce' => 'Per evitare una massa di notifiche, per un po \'non verranno inviate notifiche per ulteriori modifiche a questa pagina dallo stesso editor.', + 'updated_page_debounce' => 'Per evitare una massa di notifiche, per un po\' non ti verranno inviate notifiche per ulteriori modifiche a questa pagina dallo stesso editor.', - 'detail_page_name' => 'Nome Della Pagina:', + 'detail_page_name' => 'Nome della pagina:', 'detail_page_path' => 'Percorso della pagina:', 'detail_commenter' => 'Commentatore:', 'detail_comment' => 'Commento:', - 'detail_created_by' => 'Creato Da:', - 'detail_updated_by' => 'Aggiornato Da:', + 'detail_created_by' => 'Creato da:', + 'detail_updated_by' => 'Aggiornato da:', - 'action_view_comment' => 'Visualizza Commento', - 'action_view_page' => 'Visualizza Pagina', + 'action_view_comment' => 'Vedi commento', + 'action_view_page' => 'Vedi pagina', 'footer_reason' => 'Questa notifica è stata inviata perché :link copre questo tipo di attività per questo elemento.', 'footer_reason_link' => 'le tue preferenze di notifica', diff --git a/lang/it/passwords.php b/lang/it/passwords.php index 7099d54f3..ac46ca06f 100644 --- a/lang/it/passwords.php +++ b/lang/it/passwords.php @@ -6,8 +6,8 @@ */ return [ - 'password' => 'La password deve avere almeno sei caratteri e corrispondere alla conferma.', - 'user' => "Non possiamo trovare un utente per quella mail.", + 'password' => 'La password deve avere almeno otto caratteri e corrispondere alla conferma.', + 'user' => "Nessun utente trovato per quella mail.", 'token' => 'Il token per reimpostare la password non è valido per questo indirizzo email.', 'sent' => 'Ti abbiamo inviato via mail il link per reimpostare la password!', 'reset' => 'La tua password è stata reimpostata!', diff --git a/lang/it/preferences.php b/lang/it/preferences.php index c06374e69..f25138401 100644 --- a/lang/it/preferences.php +++ b/lang/it/preferences.php @@ -5,47 +5,47 @@ */ return [ - 'my_account' => 'Il Mio Account', + 'my_account' => 'Il mio account', 'shortcuts' => 'Scorciatoie', '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_customize_desc' => 'È possibile personalizzare ciascuna delle scorciatoie riportate di seguito. È sufficiente premere la combinazione di tasti desiderata dopo aver selezionato l\'input per una scorciatoia.', 'shortcuts_toggle_label' => 'Scorciatoie da tastiera attivate', 'shortcuts_section_navigation' => 'Navigazione', - 'shortcuts_section_actions' => 'Azioni Comuni', - 'shortcuts_save' => 'Salva Scorciatoie', + 'shortcuts_section_actions' => 'Azioni comuni', + 'shortcuts_save' => 'Salva scorciatoie', 'shortcuts_overlay_desc' => 'Nota: quando le scorciatoie sono abilitate, premendo "?" è possibile visualizzare le scorciatoie disponibili per le azioni attualmente visibili sullo schermo.', 'shortcuts_update_success' => 'Le preferenze delle scorciatoie sono state aggiornate!', 'shortcuts_overview_desc' => 'Gestisci le scorciatoie da tastiera che puoi usare per navigare nell\'interfaccia utente di sistema.', - 'notifications' => 'Preferenze Di Notifica', + 'notifications' => 'Preferenze notifiche', 'notifications_desc' => 'Controlla le notifiche email che ricevi quando viene eseguita una determinata attività all\'interno del sistema.', 'notifications_opt_own_page_changes' => 'Notifica in caso di modifiche alle pagine che possiedo', 'notifications_opt_own_page_comments' => 'Notifica i commenti sulle pagine che possiedo', 'notifications_opt_comment_replies' => 'Notificare le risposte ai miei commenti', - 'notifications_save' => 'Salva Preferenze', + 'notifications_save' => 'Salva preferenze', 'notifications_update_success' => 'Le preferenze di notifica sono state aggiornate!', - '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.', + 'notifications_watched' => 'Oggetti osservati e ignorati', + 'notifications_watched_desc' => 'Di seguito sono riportati gli elementi a cui sono state applicate le preferenze di monitoraggio personalizzate. Per aggiornare le preferenze, visualizza l\'elemento e usa le opzioni di monitoraggio nella barra laterale.', - 'auth' => 'Accesso E Sicurezza', + '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_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_email_no_permission' => 'Purtroppo non hai il permesso di modificare il tuo indirizzo email. Se vuoi modificarlo, devi chiedere a 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' => '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_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 a6e5537be..ccbc505b7 100644 --- a/lang/it/settings.php +++ b/lang/it/settings.php @@ -8,63 +8,63 @@ return [ // Common Messages 'settings' => 'Impostazioni', - 'settings_save' => 'Salva Impostazioni', - 'system_version' => 'Versione Del Sistema', + 'settings_save' => 'Salva impostazioni', + 'system_version' => 'Versione del sistema', 'categories' => 'Categorie', // App Settings 'app_customization' => 'Personalizzazione', - 'app_features_security' => 'Funzioni & Sicurezza', + 'app_features_security' => 'Funzioni e sicurezza', 'app_name' => 'Nome applicazione', - 'app_name_desc' => 'Questo nome è mostrato nell\'header e in tutte le mail.', - 'app_name_header' => 'Mostrare il nome nell\'header', - 'app_public_access' => 'Accesso Pubblico', + 'app_name_desc' => 'Questo nome è mostrato nell\'intestazione e in tutte le email inviate dal sistema.', + 'app_name_header' => 'Mostra il nome nell\'header', + 'app_public_access' => 'Accesso pubblico', 'app_public_access_desc' => 'Abilitando questa opzione, i visitatori, che non sono loggati, potranno accedere ai contenuti nella tua istanza BookStack.', 'app_public_access_desc_guest' => 'L\'accesso ai visitatori pubblici può essere controllato attraverso l\'utente "Guest".', 'app_public_access_toggle' => 'Permetti accesso pubblico', 'app_public_viewing' => 'Consentire la visione pubblica?', - 'app_secure_images' => 'Abilitare una sicurezza maggiore per le immagini caricate?', - 'app_secure_images_toggle' => 'Abilita sicurezza aggiuntiva negli upload delle immagini', - 'app_secure_images_desc' => 'Per una ragione di prestazioni, tutte le immagini sono pubbliche. Questa opzione aaggiunge una stringa, difficile da indovinare, random negli url delle immagini. Assicurati che il listing delle cartelle non sia abilitato per prevenire un accesso semplice.', - 'app_default_editor' => 'Editor Di Pagina Predefinito', - 'app_default_editor_desc' => 'Seleziona quale editor sarà usato per impostazione predefinita quando modifichi nuove pagine. Questa impostazione potrà essere sovrascritta a livello di pagina dove i permessi lo permettano.', - 'app_custom_html' => 'Contenuto Head HTML Custom', + 'app_secure_images' => 'Sicurezza aggiuntiva per le immagini caricate', + 'app_secure_images_toggle' => 'Abilita sicurezza aggiuntiva per le immagini caricate', + 'app_secure_images_desc' => 'Per ragioni di prestazioni, tutte le immagini sono pubbliche. Questa opzione aggiunge una stringa casuale, difficile da indovinare, davanti agli url delle immagini. Assicurati che l\'indicizzazione delle cartelle non sia abilitato per prevenire un accesso semplice.', + 'app_default_editor' => 'Editor di pagina predefinito', + 'app_default_editor_desc' => 'Seleziona quale editor sarà usato per impostazione predefinita quando modifichi nuove pagine. Questa impostazione potrà essere sovrascritta a livello di pagina dove i permessi lo consentono.', + 'app_custom_html' => 'Contenuto Head HTML personalizzato', 'app_custom_html_desc' => 'Qualsiasi contenuto aggiunto qui verrà inserito alla fine della sezione di tutte le pagine. Questo è utile per sovrascrivere lo stile o aggiungere il codice per gli analytics.', - 'app_custom_html_disabled_notice' => 'Il contenuto HTML personalizzato è disabilitato su questa pagina impostazioni per garantire che eventuali modifiche possano essere ripristinate.', + 'app_custom_html_disabled_notice' => 'Il contenuto Head HTML personalizzato è disabilitato su questa pagina delle impostazioni per garantire che eventuali modifiche distruttive possano essere annullate.', 'app_logo' => 'Logo applicazione', 'app_logo_desc' => 'Viene utilizzata nella barra di intestazione dell\'applicazione, tra le altre aree. L\'immagine deve avere un\'altezza di 86px. Le immagini più grandi saranno ridimensionate.', - 'app_icon' => 'Icona Applicazione', + 'app_icon' => 'Icona applicazione', 'app_icon_desc' => 'Questa icona viene utilizzata per le schede del browser e per le icone di collegamento. Deve essere un\'immagine PNG quadrata di 256px.', - 'app_homepage' => 'Homepage Applicazione', - 'app_homepage_desc' => 'Seleziona una pagina da mostrare nella home anzichè quella di default. I permessi della pagina sono ignorati per quella selezionata.', + 'app_homepage' => 'Homepage applicazione', + 'app_homepage_desc' => 'Seleziona una pagina da mostrare nella home anzichè quella di default. I permessi della pagina sono ignorati per le pagine selezionate.', 'app_homepage_select' => 'Seleziona una pagina', - 'app_footer_links' => 'Link in basso', + 'app_footer_links' => 'Link a piè di pagina', 'app_footer_links_desc' => 'Aggiungi link da mostrare in basso nel sito. Questi saranno visibili in fondo alla maggior parte delle pagine, incluse quelle che non richiedono un autenticazione. Puoi usare l\'etichetta "trans::" per utilizzare le traduzioni implementate nella piattaforma. Esempio: usando "trans::common.privacy_policy" mostrerà il testo tradotto "Norme sulla privacy" e "trans::common.terms_of_service" mostrerà il testo tradotto "Condizioni del Servizio".', - 'app_footer_links_label' => 'Etichetta del Link', - 'app_footer_links_url' => 'URL del Link', - 'app_footer_links_add' => 'Aggiungi Link in basso', - 'app_disable_comments' => 'Disattiva commenti', - 'app_disable_comments_toggle' => 'Disabilita commenti', - 'app_disable_comments_desc' => 'Disabilita i commenti su tutte le pagine nell\'applicazione. I commenti esistenti non sono mostrati. ', + 'app_footer_links_label' => 'Etichetta del link', + 'app_footer_links_url' => 'URL del link', + 'app_footer_links_add' => 'Aggiungi link in basso', + 'app_disable_comments' => 'Disabilita commenti', + 'app_disable_comments_toggle' => 'Disabilita i commenti', + 'app_disable_comments_desc' => 'Disabilita i commenti su tutte le pagine dell\'applicazione.
I commenti esistenti non sono mostrati.', // Color settings 'color_scheme' => 'Schema di colore dell\'applicazione', - 'color_scheme_desc' => 'Impostare i colori da utilizzare nell\'interfaccia utente dell\'applicazione. I colori possono essere configurati separatamente per le modalità scura e chiara, per adattarsi al meglio al tema e garantire la leggibilità.', + 'color_scheme_desc' => 'Imposta i colori da utilizzare nell\'interfaccia utente dell\'applicazione. I colori possono essere configurati separatamente per le modalità scura e chiara, per adattarsi al meglio al tema e garantire la leggibilità.', 'ui_colors_desc' => 'Imposta il colore primario dell\'applicazione e il colore predefinito dei collegamenti. Il colore primario è utilizzato principalmente per il banner dell\'intestazione, i pulsanti e le decorazioni dell\'interfaccia. Il colore predefinito dei collegamenti viene utilizzato per i collegamenti e le azioni basate sul testo, sia all\'interno dei contenuti scritti che nell\'interfaccia dell\'applicazione.', - 'app_color' => 'Colore Principale', + 'app_color' => 'Colore principale', 'link_color' => 'Colore preferito del link', 'content_colors_desc' => 'Impostare i colori per tutti gli elementi nella gerarchia dell\'organizzazione della pagina. Si consiglia di scegliere colori con una luminosità simile a quella dei colori predefiniti per garantire la leggibilità.', 'bookshelf_color' => 'Colore della libreria', 'book_color' => 'Colore del libro', 'chapter_color' => 'Colore del capitolo', - 'page_color' => 'Colore della Pagina', + 'page_color' => 'Colore della pagina', 'page_draft_color' => 'Colore della bozza', // Registration Settings - 'reg_settings' => 'Impostazioni Registrazione', - 'reg_enable' => 'Abilita Registrazione', + 'reg_settings' => 'Impostazioni registrazione', + 'reg_enable' => 'Abilita registrazione', 'reg_enable_toggle' => 'Abilita registrazione', - 'reg_enable_desc' => 'Quando la registrazione è abilitata, l\utente sarà in grado di registrarsi all\'applicazione. Al momento della registrazione gli verrà associato un ruolo utente predefinito.', + 'reg_enable_desc' => 'Quando la registrazione è abilitata, l\utente sarà in grado di registrarsi autonomamente all\'applicazione. Al momento della registrazione gli verrà associato un ruolo utente predefinito.', 'reg_default_role' => 'Ruolo predefinito dopo la registrazione', 'reg_enable_external_warning' => 'L\'opzione precedente viene ignorata se l\'autenticazione esterna tramite LDAP o SAML è attiva. Se l\'autenticazione (effettuata sul sistema esterno) sarà valida, gli account di eventuali membri non registrati saranno creati in automatico.', 'reg_email_confirmation' => 'Conferma Email', @@ -76,42 +76,42 @@ return [ // Maintenance settings 'maint' => 'Manutenzione', - 'maint_image_cleanup' => 'Pulizia Immagini', - 'maint_image_cleanup_desc' => 'Esegue la scansione del contenuto delle pagine e delle revisioni per verificare quali immagini e disegni sono attualmente in uso e quali immagini sono ridondanti. Assicurati di creare backup completo del database e delle immagini prima di eseguire la pulizia.', + 'maint_image_cleanup' => 'Pulizia immagini', + 'maint_image_cleanup_desc' => 'Esegue la scansione del contenuto delle pagine e delle revisioni per verificare quali immagini e disegni sono attualmente in uso e quali immagini sono ridondanti. Assicurati di creare un backup completo del database e delle immagini prima di eseguire la pulizia.', 'maint_delete_images_only_in_revisions' => 'Elimina anche le immagini che esistono solo nelle vecchie revisioni della pagina', - 'maint_image_cleanup_run' => 'Esegui Pulizia', - 'maint_image_cleanup_warning' => ':count immagini potenzialmente inutilizzate sono state trovate. Sei sicuro di voler eliminare queste immagini?', + 'maint_image_cleanup_run' => 'Esegui pulizia', + 'maint_image_cleanup_warning' => 'Sono state trovate :count immagini potenzialmente inutilizzate. Sei sicuro di voler eliminare queste immagini?', 'maint_image_cleanup_success' => ':count immagini potenzialmente inutilizzate trovate e eliminate!', - 'maint_image_cleanup_nothing_found' => 'Nessuna immagine non utilizzata trovata, Nulla è stato cancellato!', - 'maint_send_test_email' => 'Invia un Email di Test', - 'maint_send_test_email_desc' => 'Questo invia un\'email di prova al tuo indirizzo email specificato nel tuo profilo.', + 'maint_image_cleanup_nothing_found' => 'Nessuna immagine non utilizzata trovata, non è stato cancellato nulla!', + 'maint_send_test_email' => 'Invia un\'email di test', + 'maint_send_test_email_desc' => 'Questo comando invia un\'email di prova al tuo indirizzo email specificato nel tuo profilo.', 'maint_send_test_email_run' => 'Invia email di test', 'maint_send_test_email_success' => 'Email inviata a :address', - 'maint_send_test_email_mail_subject' => 'Email di Test', + 'maint_send_test_email_mail_subject' => 'Email di test', 'maint_send_test_email_mail_greeting' => 'L\'invio delle email sembra funzionare!', 'maint_send_test_email_mail_text' => 'Congratulazioni! Siccome hai ricevuto questa notifica email, le tue impostazioni sembrano essere configurate correttamente.', 'maint_recycle_bin_desc' => 'Le librerie, i libri, i capitoli e le pagine cancellati vengono inviati al cestino in modo che possano essere ripristinati o eliminati definitivamente. Gli elementi più vecchi nel cestino possono essere automaticamente rimossi dopo un certo periodo, a seconda della configurazione del sistema.', 'maint_recycle_bin_open' => 'Apri il Cestino', - 'maint_regen_references' => 'Rigenera Riferimenti', + 'maint_regen_references' => 'Rigenera riferimenti', 'maint_regen_references_desc' => 'Questa azione ricostruirà l\'indice dei riferimenti incrociati all\'interno del database. Di solito questa operazione è gestita automaticamente, ma può essere utile per indicizzare contenuti vecchi o aggiunti con metodi non ufficiali.', 'maint_regen_references_success' => 'L\'indice di riferimento è stato rigenerato!', - 'maint_timeout_command_note' => 'Nota: Questa azione può richiedere del tempo per essere eseguita e può causare problemi di timeout in alcuni ambienti Web. In alternativa, questa azione può essere eseguita usando un comando da terminale.', + 'maint_timeout_command_note' => 'Nota: Questa azione può richiedere del tempo per essere eseguita e può causare problemi di timeout in alcuni ambienti web. In alternativa, questa azione può essere eseguita usando un comando da terminale.', // Recycle Bin 'recycle_bin' => 'Cestino', 'recycle_bin_desc' => 'Qui è possibile ripristinare gli elementi che sono stati eliminati o scegliere di rimuoverli definitivamente dal sistema. Questo elenco non è filtrato a differenza di elenchi di attività simili nel sistema in cui vengono applicati i filtri autorizzazioni.', - 'recycle_bin_deleted_item' => 'Elimina Elemento', + 'recycle_bin_deleted_item' => 'Elemento eliminato', 'recycle_bin_deleted_parent' => 'Superiore', 'recycle_bin_deleted_by' => 'Cancellato da', 'recycle_bin_deleted_at' => 'Orario Cancellazione', - 'recycle_bin_permanently_delete' => 'Elimina Definitivamente', + 'recycle_bin_permanently_delete' => 'Elimina definitivamente', 'recycle_bin_restore' => 'Ripristina', 'recycle_bin_contents_empty' => 'Al momento il cestino è vuoto', 'recycle_bin_empty' => 'Svuota Cestino', 'recycle_bin_empty_confirm' => 'Questa operazione cancellerà definitivamente tutti gli elementi presenti nel cestino, inclusi i contenuti relativi a ciascun elemento. Sei sicuro di voler svuotare il cestino?', 'recycle_bin_destroy_confirm' => 'Questa azione eliminerà definitivamente questo elemento dal sistema, insieme a qualsiasi elemento figlio elencato di seguito, e non sarai in grado di ripristinare questo contenuto. Sei sicuro di voler eliminare definitivamente questo elemento?', - 'recycle_bin_destroy_list' => 'Elementi da Eliminare definitivamente', - 'recycle_bin_restore_list' => 'Elementi da Ripristinare', + 'recycle_bin_destroy_list' => 'Elementi da eliminare definitivamente', + 'recycle_bin_restore_list' => 'Elementi da ripristinare', 'recycle_bin_restore_confirm' => 'Questa azione ripristinerà l\'elemento eliminato, compresi gli elementi figli, nella loro posizione originale. Se la posizione originale è stata eliminata, ed è ora nel cestino, anche l\'elemento padre dovrà essere ripristinato.', 'recycle_bin_restore_deleted_parent' => 'L\'elemento padre di questo elemento è stato eliminato. Questo elemento rimarrà eliminato fino a che l\'elemento padre non sarà ripristinato.', 'recycle_bin_restore_parent' => 'Ripristina Superiore', @@ -121,13 +121,13 @@ return [ // Audit Log 'audit' => 'Registro di Controllo', 'audit_desc' => 'Questo registro di controllo mostra la lista delle attività registrate dal sistema. Questa lista, a differenza di altre liste del sistema a cui vengono applicate dei filtri, è integrale.', - 'audit_event_filter' => 'Filtra Eventi', - 'audit_event_filter_no_filter' => 'Nessun Filtro', - 'audit_deleted_item' => 'Elimina Elemento', + 'audit_event_filter' => 'Filtro eventi', + 'audit_event_filter_no_filter' => 'Nessun filtro', + 'audit_deleted_item' => 'Elemento eliminato', 'audit_deleted_item_name' => 'Nome: :name', 'audit_table_user' => 'Utente', 'audit_table_event' => 'Evento', - 'audit_table_related' => 'Elemento o Dettaglio correlato', + 'audit_table_related' => 'Elemento o dettaglio correlato', 'audit_table_ip' => 'Indirizzo IP', 'audit_table_date' => 'Data attività', 'audit_date_from' => 'Dalla data', @@ -139,89 +139,89 @@ return [ 'roles_index_desc' => 'I ruoli sono utilizzati per raggruppare gli utenti e fornire ai loro membri i permessi di sistema. Quando un utente è membro di più ruoli, i privilegi concessi si sovrappongono e l\'utente eredita tutte le abilità.', 'roles_x_users_assigned' => ':count utente assegnato|:count utenti assegnati', 'roles_x_permissions_provided' => ':count permesso|:count permessi', - 'roles_assigned_users' => 'Utenti Assegnati', + 'roles_assigned_users' => 'Utenti assegnati', 'roles_permissions_provided' => 'Autorizzazioni fornite', - 'role_create' => 'Crea Nuovo Ruolo', - 'role_delete' => 'Elimina Ruolo', + 'role_create' => 'Crea nuovo ruolo', + 'role_delete' => 'Elimina ruolo', 'role_delete_confirm' => 'Questo eliminerà il ruolo con il nome \':roleName\'.', 'role_delete_users_assigned' => 'Questo ruolo ha :userCount utenti assegnati. Se vuoi migrare gli utenti da questo ruolo selezionane uno nuovo sotto.', 'role_delete_no_migration' => "Non migrare gli utenti", 'role_delete_sure' => 'Sei sicuro di voler eliminare questo ruolo?', - 'role_edit' => 'Modifica Ruolo', - 'role_details' => 'Dettagli Ruolo', - 'role_name' => 'Nome Ruolo', - 'role_desc' => 'Breve Descrizione del Ruolo', + 'role_edit' => 'Modifica ruolo', + 'role_details' => 'Dettagli ruolo', + 'role_name' => 'Nome ruolo', + 'role_desc' => 'Breve descrizione del ruolo', 'role_mfa_enforced' => 'Richiesta autenticazione multi-fattore', - 'role_external_auth_id' => 'ID Autenticazione Esterna', - 'role_system' => 'Permessi di Sistema', + 'role_external_auth_id' => 'ID autenticazione esterna', + 'role_system' => 'Permessi di sistema', 'role_manage_users' => 'Gestire gli utenti', - 'role_manage_roles' => 'Gestire ruoli e permessi di essi', + 'role_manage_roles' => 'Gestire ruoli e permessi di ruoli', 'role_manage_entity_permissions' => 'Gestire tutti i permessi di libri, capitoli e pagine', 'role_manage_own_entity_permissions' => 'Gestire i permessi sui propri libri, capitoli e pagine', - 'role_manage_page_templates' => 'Gestisci modelli di pagina', - 'role_access_api' => 'API sistema d\'accesso', + 'role_manage_page_templates' => 'Gestire modelli di pagina', + 'role_access_api' => 'Accedere alle API di sistema', 'role_manage_settings' => 'Gestire impostazioni app', - 'role_export_content' => 'Esporta contenuto', - 'role_editor_change' => 'Cambia editor di pagina', - 'role_notifications' => 'Ricevi & gestisci le notifiche', - 'role_asset' => 'Permessi Entità', - 'roles_system_warning' => 'Siate consapevoli che l\'accesso a uno dei tre permessi qui sopra, può consentire a un utente di modificare i propri privilegi o i privilegi di altri nel sistema. Assegna ruoli con questi permessi solo ad utenti fidati.', - 'role_asset_desc' => 'Questi permessi controllano l\'accesso di default alle entità. I permessi nei Libri, Capitoli e Pagine sovrascriveranno questi.', + 'role_export_content' => 'Esportare contenuto', + 'role_editor_change' => 'Cambiare editor di pagina', + 'role_notifications' => 'Ricevere e gestire le notifiche', + 'role_asset' => 'Permessi entità', + 'roles_system_warning' => 'Siate consapevoli che l\'accesso a uno dei tre permessi qui sopra può consentire a un utente di modificare i propri privilegi o i privilegi di altri nel sistema. Assegna ruoli con questi permessi solo ad utenti fidati.', + 'role_asset_desc' => 'Questi permessi controllano l\'accesso predefinito alle entità. I permessi in libri, capitoli e pagine sovrascriveranno questi.', 'role_asset_admins' => 'Gli amministratori hanno automaticamente accesso a tutti i contenuti ma queste opzioni possono mostrare o nascondere le opzioni della UI.', - 'role_asset_image_view_note' => 'Questo si riferisce alla visibilità all\'interno del gestore di immagini. L\'accesso effettivo ai file di immagine caricati dipenderà dall\'opzione di archiviazione delle immagini di sistema.', + 'role_asset_image_view_note' => 'Questo si riferisce alla visibilità all\'interno del gestore delle immagini. L\'accesso effettivo ai file di immagine caricati dipenderà dall\'opzione di archiviazione delle immagini di sistema.', 'role_all' => 'Tutti', 'role_own' => 'Propri', 'role_controlled_by_asset' => 'Controllato dall\'entità in cui sono caricati', - 'role_save' => 'Salva Ruolo', + 'role_save' => 'Salva ruolo', 'role_users' => 'Utenti in questo ruolo', 'role_users_none' => 'Nessun utente assegnato a questo ruolo', // Users 'users' => 'Utenti', 'users_index_desc' => 'Crea e gestisci account utente individuali all\'interno del sistema. Gli account utente sono utilizzati per il login e l\'attribuzione di contenuti e attività. Le autorizzazioni di accesso sono principalmente basate sui ruoli, ma la proprietà dei contenuti dell\'utente, insieme ad altri fattori, può influenzare le autorizzazioni e l\'accesso.', - 'user_profile' => 'Profilo Utente', + 'user_profile' => 'Profilo utente', 'users_add_new' => 'Aggiungi Nuovo Utente', - 'users_search' => 'Cerca Utenti', - 'users_latest_activity' => 'Ultima Attività', - 'users_details' => 'Dettagli Utente', + 'users_search' => 'Cerca utenti', + 'users_latest_activity' => 'Ultima attività', + 'users_details' => 'Dettagli utente', 'users_details_desc' => 'Imposta un nome e un indirizzo email per questo utente. L\'indirizzo email verrà utilizzato per accedere all\'applicazione.', 'users_details_desc_no_email' => 'Imposta un nome per questo utente così gli altri possono riconoscerlo.', - 'users_role' => 'Ruoli Utente', + 'users_role' => 'Ruoli utente', 'users_role_desc' => 'Seleziona a quali ruoli verrà assegnato questo utente. Se un utente è assegnato a più ruoli riceverà tutte le abilità dei ruoli assegnati.', - 'users_password' => 'Password Utente', + 'users_password' => 'Password utente', 'users_password_desc' => 'Imposta una password usata per accedere all\'applicazione. Deve essere lunga almeno 8 caratteri.', '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' => 'ID autenticazione esterna', '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' => 'Elimina utente', 'users_delete_named' => 'Elimina l\'utente :userName', 'users_delete_warning' => 'Questo eliminerà completamente l\'utente \':userName\' dal sistema.', 'users_delete_confirm' => 'Sei sicuro di voler eliminare questo utente?', - 'users_migrate_ownership' => 'Cambia Proprietario', + 'users_migrate_ownership' => 'Cambia proprietario', 'users_migrate_ownership_desc' => 'Seleziona qui un utente se vuoi che un altro utente diventi il proprietario di tutti gli elementi attualmente di proprietà di questo utente.', 'users_none_selected' => 'Nessun utente selezionato', - 'users_edit' => 'Modifica Utente', - 'users_edit_profile' => 'Modifica Profilo', - 'users_avatar' => 'Avatar Utente', - 'users_avatar_desc' => 'Quest\'immagine dovrebbe essere approssimativamente 256px quadrata.', - 'users_preferred_language' => 'Lingua Preferita', + 'users_edit' => 'Modifica utente', + 'users_edit_profile' => 'Modifica profilo', + 'users_avatar' => 'Avatar utente', + 'users_avatar_desc' => 'Quest\'immagine dovrebbe essere quadrata e alta circa 256px.', + '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' => '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_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_desc' => 'Crea e gestisci 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_create' => 'Crea token', 'users_api_tokens_expires' => 'Scade', 'users_api_tokens_docs' => 'Documentazione API', 'users_mfa' => 'Autenticazione multi-fattore', @@ -230,52 +230,60 @@ return [ 'users_mfa_configure' => 'Configura metodi', // API Tokens - 'user_api_token_create' => 'Crea Token API', + 'user_api_token_create' => 'Crea token API', 'user_api_token_name' => 'Nome', 'user_api_token_name_desc' => 'Assegna al tuo token un nome leggibile per ricordarne la funzionalità in futuro.', 'user_api_token_expiry' => 'Data di scadenza', 'user_api_token_expiry_desc' => 'Imposta una data di scadenza per questo token. Dopo questa data, le richieste che utilizzeranno questo token non funzioneranno più. Lasciando questo campo vuoto si imposterà la scadenza tra 100 anni.', - 'user_api_token_create_secret_message' => 'Immediatamente dopo aver creato questo token, un "Token ID" e un "Segreto Token" saranno generati e mostrati. Il segreto verrà mostrato unicamente questa volta, assicurati, quindi, di copiare il valore in un posto sicuro prima di procedere.', + 'user_api_token_create_secret_message' => 'Immediatamente dopo aver creato questo token, un "ID del Token" e una "Chiave segreta Token" saranno generati e mostrati. La chiave segreta verrà mostrata unicamente questa volta, assicurati, quindi, di copiare il valore in un posto sicuro prima di procedere.', 'user_api_token' => 'Token API', - 'user_api_token_id' => 'Token ID', + 'user_api_token_id' => 'ID del Token', 'user_api_token_id_desc' => 'Questo è un identificativo non modificabile generato dal sistema per questo token e che sarà necessario fornire per le richieste tramite API.', - 'user_api_token_secret' => 'Token Segreto', - 'user_api_token_secret_desc' => 'Questo è un segreto generato dal sistema per questo token che sarà necessario fornire per le richieste via API. Questo valore sarà visibile unicamente in questo momento pertanto copialo in un posto sicuro.', + 'user_api_token_secret' => 'Chiave segreta token', + 'user_api_token_secret_desc' => 'Questo è una chiave segreta generata dal sistema per questo token che sarà necessario fornire per le richieste via API. Questo valore sarà visibile unicamente in questo momento pertanto copialo in un posto sicuro.', 'user_api_token_created' => 'Token Aggiornato :timeAgo', - 'user_api_token_updated' => 'Token Aggiornato :timeAgo', - 'user_api_token_delete' => 'Elimina Token', + 'user_api_token_updated' => 'Token aggiornato :timeAgo', + 'user_api_token_delete' => 'Elimina token', 'user_api_token_delete_warning' => 'Questa operazione eliminerà irreversibilmente dal sistema il token API denominato \':tokenName\'.', 'user_api_token_delete_confirm' => 'Sei sicuri di voler eliminare questo token API?', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_index_desc' => 'I webhook sono un modo per inviare dati a URL esterne quando si verificano determinate azioni ed eventi all\'interno del sistema, consentendo l\'integrazione basata sugli eventi con piattaforme esterne, come sistemi di messaggistica o di notifica.', + 'webhooks' => 'Webhook', + 'webhooks_index_desc' => 'I webhook sono un modo per inviare dati a URL esterni quando si verificano determinate azioni ed eventi all\'interno del sistema, consentendo l\'integrazione basata sugli eventi con piattaforme esterne, come sistemi di messaggistica o di notifica.', 'webhooks_x_trigger_events' => ':count evento trigger|:count eventi trigger', - 'webhooks_create' => 'Crea Nuovo Webhook', + 'webhooks_create' => 'Crea nuovo webhook', 'webhooks_none_created' => 'Nessun webhook è stato creato.', - 'webhooks_edit' => 'Modifica Webhook', - 'webhooks_save' => 'Salva Webhook', - 'webhooks_details' => 'Dettagli Webhook', - 'webhooks_details_desc' => 'Fornire un nome di facile utilizzo e un endpoint POST come posizione per i dati del webhook da inviare.', - 'webhooks_events' => 'Eventi Webhook', + 'webhooks_edit' => 'Modifica webhook', + 'webhooks_save' => 'Salva webhook', + 'webhooks_details' => 'Dettagli webhook', + 'webhooks_details_desc' => 'Fornisci un nome di facile utilizzo e un endpoint POST come posizione per i dati del webhook da inviare.', + 'webhooks_events' => 'Eventi webhook', 'webhooks_events_desc' => 'Seleziona tutti gli eventi che dovrebbero attivare questo webhook da chiamare.', - 'webhooks_events_warning' => 'Tieni presente che questi eventi saranno attivati per tutti gli eventi selezionati, anche se vengono applicati permessi personalizzati. Assicurarsi che l\'uso di questo webhook non esporrà contenuti riservati.', + 'webhooks_events_warning' => 'Tieni presente che questi eventi saranno attivati per tutti gli eventi selezionati, anche se vengono applicati permessi personalizzati. Assicurati che l\'uso di questo webhook non esporrà contenuti riservati.', 'webhooks_events_all' => 'Tutti gli eventi di sistema', - 'webhooks_name' => 'Nome Webhook', - 'webhooks_timeout' => 'Timeout Richiesta Webhook (Secondi)', - 'webhooks_endpoint' => 'Endpoint Webhook', - 'webhooks_active' => 'Webhook Attivo', + 'webhooks_name' => 'Nome webhook', + 'webhooks_timeout' => 'Timeout richiesta webhook (secondi)', + 'webhooks_endpoint' => 'Endpoint webhook', + 'webhooks_active' => 'Webhook attivo', 'webhook_events_table_header' => 'Eventi', - 'webhooks_delete' => 'Elimina Webhook', - 'webhooks_delete_warning' => 'Questo eliminerà completamente questo webhook, con il nome \':webhookName\', dal sistema.', + 'webhooks_delete' => 'Elimina webhook', + 'webhooks_delete_warning' => 'Questo eliminerà completamente questo webhook chiamato \':webhookName\' dal sistema.', 'webhooks_delete_confirm' => 'Sei sicuro di voler eliminare questo webhook?', - 'webhooks_format_example' => 'Esempio Di Formato Webhook', - 'webhooks_format_example_desc' => 'I dati Webhook vengono inviati come richiesta POST all\'endpoint configurato come JSON seguendo il formato sottostante. Le proprietà "related_item" e "url" sono opzionali e dipenderanno dal tipo di evento attivato.', - 'webhooks_status' => 'Stato Webhook', - 'webhooks_last_called' => 'Ultima Chiamata:', - 'webhooks_last_errored' => 'Ultimo Errore:', - 'webhooks_last_error_message' => 'Ultimo Messaggio Di Errore:', + 'webhooks_format_example' => 'Esempio di formato webhook', + 'webhooks_format_example_desc' => 'I dati del webhook vengono inviati come richiesta POST all\'endpoint configurato come JSON seguendo il formato sottostante. Le proprietà "related_item" e "url" sono opzionali e dipenderanno dal tipo di evento attivato.', + 'webhooks_status' => 'Stato webhook', + 'webhooks_last_called' => 'Ultima chiamata:', + 'webhooks_last_errored' => 'Ultimo errore:', + 'webhooks_last_error_message' => 'Ultimo messaggio di errore:', + // Licensing + 'licenses' => 'Licenze', + 'licenses_desc' => 'Questa pagina contiene informazioni dettagliate sulle licenze di BookStack, oltre ai progetti e alle librerie utilizzate all\'interno di BookStack. Molti dei progetti elencati possono essere utilizzati solo in un contesto di sviluppo.', + 'licenses_bookstack' => 'Licenza BookStack', + 'licenses_php' => 'Licenze Librerie PHP', + 'licenses_js' => 'Licenze Librerie JavaScript', + 'licenses_other' => 'Altre Licenze', + 'license_details' => 'Dettagli Licenza', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/it/validation.php b/lang/it/validation.php index a782986bf..f8f59a3ac 100644 --- a/lang/it/validation.php +++ b/lang/it/validation.php @@ -12,18 +12,18 @@ return [ 'active_url' => ':attribute non è uno URL valido.', 'after' => ':attribute deve essere una data dopo il :date.', 'alpha' => ':attribute deve contenere solo lettere.', - 'alpha_dash' => ':attribute deve contenere solo lettere, numeri e meno.', + 'alpha_dash' => ':attribute deve contenere solo lettere, numeri, trattini e trattini bassi.', 'alpha_num' => ':attribute deve contenere solo lettere e numeri.', 'array' => ':attribute deve essere un array.', 'backup_codes' => 'Il codice fornito non è valido o è già stato utilizzato.', 'before' => ':attribute deve essere una data prima del :date.', 'between' => [ 'numeric' => 'Il campo :attribute deve essere tra :min e :max.', - 'file' => 'Il campo :attribute deve essere tra :min e :max kilobytes.', + 'file' => 'Il campo :attribute deve essere tra :min e :max kilobyte.', 'string' => 'Il campo :attribute deve essere tra :min e :max caratteri.', - 'array' => 'Il campo :attribute deve essere tra :min e :max oggetti.', + 'array' => 'Il campo :attribute deve avere tra :min e :max oggetti.', ], - 'boolean' => ':attribute deve contenere vero o falso.', + 'boolean' => ':attribute deve essere vero o falso.', 'confirmed' => 'La conferma di :attribute non corrisponde.', 'date' => ':attribute non è una data valida.', 'date_format' => 'Il campo :attribute non corrisponde al formato :format.', @@ -36,17 +36,17 @@ return [ 'filled' => 'Il campo :attribute field is required.', 'gt' => [ 'numeric' => ':attribute deve essere maggiore di :value.', - 'file' => ':attribute deve essere maggiore di :value kilobytes.', + 'file' => ':attribute deve essere maggiore di :value kilobyte.', 'string' => ':attribute deve essere maggiore di :value caratteri.', 'array' => ':attribute deve avere più di :value elementi.', ], 'gte' => [ 'numeric' => ':attribute deve essere maggiore o uguale a :value.', - 'file' => ':attribute deve essere maggiore o uguale a :value kilobytes.', + 'file' => ':attribute deve essere maggiore o uguale a :value kilobyte.', 'string' => ':attribute deve essere maggiore o uguale a :value caratteri.', - 'array' => ':attribute deve avere :value elementi o più.', + 'array' => ':attribute deve avere :value o più elementi.', ], - 'exists' => 'Il campo :attribute non è valido.', + 'exists' => 'Il campo :attribute selezionato non è valido.', 'image' => 'Il campo :attribute deve essere un\'immagine.', 'image_extension' => ':attribute deve avere un\'estensione immagine valida e supportata.', 'in' => 'Il campo :attribute selezionato non è valido.', @@ -57,26 +57,26 @@ return [ 'json' => ':attribute deve essere una stringa JSON valida.', 'lt' => [ 'numeric' => ':attribute deve essere inferiore a :value.', - 'file' => ':attribute deve essere inferiore a :value kilobytes.', + 'file' => ':attribute deve essere inferiore a :value kilobyte.', 'string' => ':attribute deve essere inferiore a :value caratteri.', 'array' => ':attribute deve avere meno di :value elementi.', ], 'lte' => [ 'numeric' => ':attribute deve essere minore o uguale :value.', - 'file' => ':attribute deve essere minore o uguale a :value kilobytes.', + 'file' => ':attribute deve essere minore o uguale a :value kilobyte.', 'string' => ':attribute deve essere minore o uguale a :value caratteri.', 'array' => ':attribute non deve avere più di :value elementi.', ], 'max' => [ 'numeric' => 'Il campo :attribute non deve essere maggiore di :max.', - 'file' => 'Il campo :attribute non deve essere maggiore di :max kilobytes.', + 'file' => 'Il campo :attribute non deve essere maggiore di :max kilobyte.', 'string' => 'Il campo :attribute non deve essere maggiore di :max caratteri.', 'array' => 'Il campo :attribute non deve avere più di :max oggetti.', ], 'mimes' => 'Il campo :attribute deve essere: :values.', 'min' => [ 'numeric' => 'Il campo :attribute deve essere almeno :min.', - 'file' => 'Il campo :attribute deve essere almeno :min kilobytes.', + 'file' => 'Il campo :attribute deve essere almeno :min kilobyte.', 'string' => 'Il campo :attribute deve essere almeno :min caratteri.', 'array' => 'Il campo :attribute deve contenere almeno :min elementi.', ], @@ -94,14 +94,14 @@ return [ 'safe_url' => 'Il link inserito potrebbe non essere sicuro.', 'size' => [ 'numeric' => 'Il campo :attribute deve essere :size.', - 'file' => 'Il campo :attribute deve essere :size kilobytes.', + 'file' => 'Il campo :attribute deve essere :size kilobyte.', 'string' => 'Il campo :attribute deve essere di :size caratteri.', 'array' => 'Il campo :attribute deve contenere :size elementi.', ], 'string' => ':attribute deve essere una stringa.', 'timezone' => ':attribute deve essere una zona valida.', 'totp' => 'Il codice fornito non è valido o è scaduto.', - 'unique' => ':attribute è già preso.', + 'unique' => ':attribute è già usato.', 'url' => 'Il formato :attribute non è valido.', 'uploaded' => 'Il file non può essere caricato. Il server potrebbe non accettare file di questa dimensione.', diff --git a/lang/ja/preferences.php b/lang/ja/preferences.php index 0e5685260..0207596a9 100644 --- a/lang/ja/preferences.php +++ b/lang/ja/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => '設定を保存', 'notifications_update_success' => '通知設定を更新しました。', 'notifications_watched' => 'ウォッチ/通知無効 項目', - 'notifications_watched_desc' => ' 以下はカスタムウォッチの設定が適用されている項目です。 これらの設定を更新するには、項目を表示してサイドバーのウォッチオプションを参照してください。', + 'notifications_watched_desc' => '以下はカスタムウォッチの設定が適用されている項目です。 これらの設定を更新するには、項目を表示してサイドバーのウォッチオプションを参照してください。', 'auth' => 'アクセス & セキュリティ', 'auth_change_password' => 'パスワードの変更', diff --git a/lang/ja/settings.php b/lang/ja/settings.php index c88fa106a..9e992d480 100644 --- a/lang/ja/settings.php +++ b/lang/ja/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => '最後のエラー:', 'webhooks_last_error_message' => '最後のエラーのメッセージ:', + // Licensing + 'licenses' => 'ライセンス', + 'licenses_desc' => 'このページではBookStackとBookStackで使用されるプロジェクトやライブラリのライセンス情報を詳しく説明します。開発環境でのみ使用するものも多数含まれています。', + 'licenses_bookstack' => 'BookStack ライセンス', + 'licenses_php' => 'PHPライブラリライセンス', + 'licenses_js' => 'JavaScriptライブラリライセンス', + 'licenses_other' => 'その他のライセンス', + 'license_details' => 'ライセンス詳細', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/ka/preferences.php b/lang/ka/preferences.php index 2b88f9671..2872f5f3c 100644 --- a/lang/ka/preferences.php +++ b/lang/ka/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/ka/settings.php b/lang/ka/settings.php index 7b7f5d2a2..f4c84092c 100644 --- a/lang/ka/settings.php +++ b/lang/ka/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Last Error Message:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/ko/preferences.php b/lang/ko/preferences.php index ccc09e7a3..ded933923 100644 --- a/lang/ko/preferences.php +++ b/lang/ko/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => '환경설정 저장', 'notifications_update_success' => '알림 환경설정이 업데이트되었습니다!', 'notifications_watched' => '주시 및 무시한 항목', - 'notifications_watched_desc' => ' 아래는 사용자 지정 시계 환경설정이 적용된 항목입니다. 이러한 항목에 대한 환경설정을 업데이트하려면 해당 항목을 본 다음 사이드바에서 시계 옵션을 찾습니다.', + 'notifications_watched_desc' => '아래는 사용자 지정 시계 환경설정이 적용된 항목입니다. 이러한 항목에 대한 환경설정을 업데이트하려면 해당 항목을 본 다음 사이드바에서 시계 옵션을 찾습니다.', 'auth' => '액세스 및 보안', 'auth_change_password' => '패스워드 변경', diff --git a/lang/ko/settings.php b/lang/ko/settings.php index 70a15a5af..d52e5064f 100644 --- a/lang/ko/settings.php +++ b/lang/ko/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => '마지막 에러:', 'webhooks_last_error_message' => '마지막 에러 메시지:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/lt/common.php b/lang/lt/common.php index b4fd096d3..052b6cdec 100644 --- a/lang/lt/common.php +++ b/lang/lt/common.php @@ -6,7 +6,7 @@ return [ // Buttons 'cancel' => 'Atšaukti', - 'close' => 'Close', + 'close' => 'Uždaryti', 'confirm' => 'Patvirtinti', 'back' => 'Grįžti', 'save' => 'Išsaugoti', diff --git a/lang/lt/preferences.php b/lang/lt/preferences.php index 2b88f9671..5c38d191c 100644 --- a/lang/lt/preferences.php +++ b/lang/lt/preferences.php @@ -5,14 +5,14 @@ */ return [ - 'my_account' => 'My Account', + 'my_account' => 'Mano paskyra', '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_navigation' => 'Navigacija', '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.', @@ -27,16 +27,16 @@ return [ '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_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!', + 'auth' => 'Prieiga ir saugumas', + 'auth_change_password' => 'Pasikeisti slaptažodį', + 'auth_change_password_desc' => 'Pakeistas slaptažodis bus naudojamas prisijungti prie aplikacijos. Slaptažodis turi būti bent 8 simbolių ilgio.', + 'auth_change_password_success' => 'Slaptažodis atnaujintas!', - 'profile' => 'Profile Details', + 'profile' => 'Profilio informacija', '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_view_public' => 'Rodyti viešąjį profilį', '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.', @@ -44,8 +44,8 @@ return [ '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_account' => 'Ištrinti paskyrą', + 'delete_my_account' => 'Ištrinti mano paskyrą', '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 db985e9aa..cd7205140 100644 --- a/lang/lt/settings.php +++ b/lang/lt/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Last Error Message:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/lv/activities.php b/lang/lv/activities.php index b28295639..f7db090d8 100644 --- a/lang/lv/activities.php +++ b/lang/lv/activities.php @@ -93,11 +93,11 @@ return [ 'user_delete_notification' => 'Lietotājs veiksmīgi dzēsts', // API Tokens - 'api_token_create' => 'created API token', + 'api_token_create' => 'izveidoja API žetonu', 'api_token_create_notification' => 'API žetons veiksmīgi izveidots', - 'api_token_update' => 'updated API token', + 'api_token_update' => 'atjaunoja API žetonu', 'api_token_update_notification' => 'API žetons veiksmīgi atjaunināts', - 'api_token_delete' => 'deleted API token', + 'api_token_delete' => 'izdzēsa API žetonu', 'api_token_delete_notification' => 'API žetons veiksmīgi dzēsts', // Roles diff --git a/lang/lv/preferences.php b/lang/lv/preferences.php index ac820f61e..18def9f5c 100644 --- a/lang/lv/preferences.php +++ b/lang/lv/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => 'Saglabāt iestatījumus', 'notifications_update_success' => 'Paziņojumu iestatījumi ir atjaunoti!', 'notifications_watched' => 'Vērotie un ignorētie vienumi', - '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_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' => 'Piekļuve un drošība', 'auth_change_password' => 'Mainīt paroli', diff --git a/lang/lv/settings.php b/lang/lv/settings.php index 53c764ed6..cb38482da 100644 --- a/lang/lv/settings.php +++ b/lang/lv/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Pedējoreiz kļūda:', 'webhooks_last_error_message' => 'Pēdējais kļūdas paziņojums:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/nb/preferences.php b/lang/nb/preferences.php index 502a34342..245c9c954 100644 --- a/lang/nb/preferences.php +++ b/lang/nb/preferences.php @@ -27,7 +27,7 @@ return [ '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.', + '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 sikkerhet', 'auth_change_password' => 'Endre passord', diff --git a/lang/nb/settings.php b/lang/nb/settings.php index f1f2adbe8..e426eca4a 100644 --- a/lang/nb/settings.php +++ b/lang/nb/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Siste feil:', 'webhooks_last_error_message' => 'Siste feilmelding:', + // Licensing + 'licenses' => 'Lisenser', + 'licenses_desc' => 'Denne siden detaljerer lisensinformasjonen for BookStack, i tillegg til prosjektene & bibliotekene som brukes i BookStack. Mange av de oppførte prosjektene kan bare brukes i utviklingssammenheng.', + 'licenses_bookstack' => 'BookStack lisens', + 'licenses_php' => 'PHP Bibliotek lisenser', + 'licenses_js' => 'JavaScript bibliotek-lisenser', + 'licenses_other' => 'Andre lisenser', + 'license_details' => 'Lisens detaljer', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/nl/auth.php b/lang/nl/auth.php index e81d31ccb..a0dc79ab1 100644 --- a/lang/nl/auth.php +++ b/lang/nl/auth.php @@ -40,7 +40,7 @@ return [ // Login auto-initiation 'auto_init_starting' => 'Poging tot inloggen', - 'auto_init_starting_desc' => 'We maken contact met uw authenticatiesysteem om het inlogproces te starten. Als er na 5 seconden geen vooruitgang is, kunt u proberen op de onderstaande link te klikken.', + 'auto_init_starting_desc' => 'We maken contact met jouw authenticatiesysteem om het inlogproces te starten. Als er na 5 seconden geen vooruitgang is, kun je proberen op de onderstaande link te klikken.', 'auto_init_start_link' => 'Ga verder met authenticatie', // Password Reset @@ -59,10 +59,10 @@ return [ 'email_confirm_text' => 'Bevestig je e-mailadres door op onderstaande knop te drukken:', 'email_confirm_action' => 'Bevestig je e-mail', 'email_confirm_send_error' => 'Een e-mailbevestiging is vereist, maar het systeem kon de e-mail niet verzenden. Neem contact op met de beheerder.', - 'email_confirm_success' => 'Uw e-mailadres is bevestigd! U zou nu moeten kunnen inloggen met dit e-mailadres.', + 'email_confirm_success' => 'Je e-mailadres is bevestigd! Je zou nu moeten kunnen inloggen met dit e-mailadres.', 'email_confirm_resent' => 'Bevestigingsmail opnieuw verzonden, controleer je inbox.', 'email_confirm_thanks' => 'Bedankt voor de bevestiging!', - 'email_confirm_thanks_desc' => 'Wacht even terwijl uw bevestiging wordt behandeld. Als u na 3 seconden niet wordt doorverwezen, drukt u op de onderstaande link "Doorgaan" om verder te gaan.', + 'email_confirm_thanks_desc' => 'Wacht even terwijl jouw bevestiging wordt behandeld. Als je na 3 seconden niet wordt doorverwezen, druk dan op de onderstaande link "Doorgaan" om verder te gaan.', 'email_not_confirmed' => 'E-mailadres nog niet bevestigd', 'email_not_confirmed_text' => 'Je e-mailadres is nog niet bevestigd.', @@ -78,40 +78,40 @@ return [ 'user_invite_page_welcome' => 'Welkom bij :appName!', 'user_invite_page_text' => 'Om je account af te ronden en toegang te krijgen moet je een wachtwoord instellen dat gebruikt wordt om in te loggen op :appName bij toekomstige bezoeken.', 'user_invite_page_confirm_button' => 'Bevestig wachtwoord', - 'user_invite_success_login' => 'Wachtwoord ingesteld, u zou nu moeten kunnen inloggen met uw ingestelde wachtwoord om toegang te krijgen tot :appName!', + 'user_invite_success_login' => 'Wachtwoord ingesteld, je zou nu moeten kunnen inloggen met je ingestelde wachtwoord om toegang te krijgen tot :appName!', // Multi-factor Authentication 'mfa_setup' => 'Multi-factor authenticatie instellen', - 'mfa_setup_desc' => 'Stel multi-factor authenticatie in als een extra beveiligingslaag voor uw gebruikersaccount.', + 'mfa_setup_desc' => 'Stel multi-factor authenticatie in als een extra beveiligingslaag voor je gebruikersaccount.', 'mfa_setup_configured' => 'Reeds geconfigureerd', 'mfa_setup_reconfigure' => 'Herconfigureren', 'mfa_setup_remove_confirmation' => 'Weet je zeker dat je deze multi-factor authenticatie methode wilt verwijderen?', 'mfa_setup_action' => 'Instellen', - 'mfa_backup_codes_usage_limit_warning' => 'U heeft minder dan 5 back-upcodes over. Genereer en sla een nieuwe set op voordat je geen codes meer hebt om te voorkomen dat je buiten je account wordt gesloten.', + 'mfa_backup_codes_usage_limit_warning' => 'Je hebt minder dan 5 back-upcodes over. Genereer en sla een nieuwe set op voordat je geen codes meer hebt om te voorkomen dat je buiten je account wordt gesloten.', 'mfa_option_totp_title' => 'Mobiele app', - 'mfa_option_totp_desc' => 'Om multi-factor authenticatie te gebruiken heeft u een mobiele applicatie nodig die TOTP ondersteunt, zoals Google Authenticator, Authy of Microsoft Authenticator.', + 'mfa_option_totp_desc' => 'Om multi-factor authenticatie te gebruiken heb je een mobiele applicatie nodig die TOTP ondersteunt, zoals Google Authenticator, Authy of Microsoft Authenticator.', 'mfa_option_backup_codes_title' => 'Back-up Codes', - 'mfa_option_backup_codes_desc' => 'Bewaar veilig een set eenmalige back-upcodes die u kunt invoeren om uw identiteit te verifiëren.', + 'mfa_option_backup_codes_desc' => 'Bewaar veilig een set eenmalige back-upcodes die je kunt invoeren om je identiteit te verifiëren.', 'mfa_gen_confirm_and_enable' => 'Bevestigen en inschakelen', 'mfa_gen_backup_codes_title' => 'Back-up codes instellen', 'mfa_gen_backup_codes_desc' => 'Bewaar de onderstaande lijst met codes op een veilige plaats. Bij toegang tot het systeem kun je een van de codes gebruiken als tweede verificatiemechanisme.', 'mfa_gen_backup_codes_download' => 'Download Codes', 'mfa_gen_backup_codes_usage_warning' => 'Elke code kan slechts eenmaal gebruikt worden', 'mfa_gen_totp_title' => 'Mobiele app installatie', - 'mfa_gen_totp_desc' => 'Om multi-factor authenticatie te gebruiken heeft u een mobiele applicatie nodig die TOTP ondersteunt, zoals Google Authenticator, Authy of Microsoft Authenticator.', - 'mfa_gen_totp_scan' => 'Scan de onderstaande QR-code door gebruik te maken van uw favoriete authenticatie app om aan de slag te gaan.', + 'mfa_gen_totp_desc' => 'Om multi-factor authenticatie te gebruiken heb je een mobiele applicatie nodig die TOTP ondersteunt, zoals Google Authenticator, Authy of Microsoft Authenticator.', + 'mfa_gen_totp_scan' => 'Scan de onderstaande QR-code door gebruik te maken van je favoriete authenticatie-app om aan de slag te gaan.', 'mfa_gen_totp_verify_setup' => 'Installatie verifiëren', - 'mfa_gen_totp_verify_setup_desc' => 'Controleer of alles werkt door het invoeren van een code, die wordt gegenereerd binnen uw authenticatie-app, in het onderstaande invoerveld:', - 'mfa_gen_totp_provide_code_here' => 'Geef uw app gegenereerde code hier', + 'mfa_gen_totp_verify_setup_desc' => 'Controleer of alles werkt door het invoeren van een code, die wordt gegenereerd binnen je authenticatie-app, in het onderstaande invoerveld:', + 'mfa_gen_totp_provide_code_here' => 'Vul je app-gegenereerde code hier in', 'mfa_verify_access' => 'Verifieer toegang', - 'mfa_verify_access_desc' => 'Uw gebruikersaccount vereist dat u uw identiteit bevestigt via een extra verificatieniveau voordat u toegang krijgt. Verifieer met een van de door u geconfigureerde methoden om verder te gaan.', + 'mfa_verify_access_desc' => 'Je moet jouw identiteit bevestigen via een extra verificatieniveau voordat je toegang krijgt tot je gebruikersaccount. Verifieer met een van de door u geconfigureerde methoden om verder te gaan.', 'mfa_verify_no_methods' => 'Geen methode geconfigureerd', - 'mfa_verify_no_methods_desc' => 'Er konden geen meervoudige verificatie methoden voor uw account gevonden worden. Je zult minstens één methode moeten instellen voordat u toegang krijgt.', + 'mfa_verify_no_methods_desc' => 'Er konden geen meervoudige verificatie methoden voor je account gevonden worden. Je zult minstens één methode moeten instellen voordat je toegang krijgt.', 'mfa_verify_use_totp' => 'Verifieer met een mobiele app', 'mfa_verify_use_backup_codes' => 'Verifieer met een back-up code', 'mfa_verify_backup_code' => 'Back-up code', - 'mfa_verify_backup_code_desc' => 'Voer een van uw resterende back-up codes hieronder in:', + 'mfa_verify_backup_code_desc' => 'Voer één van je resterende back-up codes hieronder in:', 'mfa_verify_backup_code_enter_here' => 'Voer hier de back-up code in', - 'mfa_verify_totp_desc' => 'Voer de code, gegenereerd met uw mobiele app, hieronder in:', + 'mfa_verify_totp_desc' => 'Voer de code, gegenereerd met je mobiele app, hieronder in:', 'mfa_setup_login_notification' => 'Meervoudige verificatie methode geconfigureerd, Gelieve opnieuw in te loggen met de geconfigureerde methode.', ]; diff --git a/lang/nl/components.php b/lang/nl/components.php index 852a7ea85..a7fdc3725 100644 --- a/lang/nl/components.php +++ b/lang/nl/components.php @@ -23,7 +23,7 @@ return [ 'image_load_more' => 'Laad meer', 'image_image_name' => 'Afbeeldingsnaam', 'image_delete_used' => 'Deze afbeelding is op onderstaande pagina\'s in gebruik.', - 'image_delete_confirm_text' => 'Weet u zeker dat u deze afbeelding wilt verwijderen?', + 'image_delete_confirm_text' => 'Weet je zeker dat je deze afbeelding wilt verwijderen?', 'image_select_image' => 'Kies afbeelding', 'image_dropzone' => 'Sleep afbeeldingen naar hier of klik hier om te uploaden', 'image_dropzone_drop' => 'Sleep hier de afbeeldingen naar toe', diff --git a/lang/nl/editor.php b/lang/nl/editor.php index 4c20c8ea2..481f99ded 100644 --- a/lang/nl/editor.php +++ b/lang/nl/editor.php @@ -143,7 +143,7 @@ return [ 'source' => 'Bron', 'alt_desc' => 'Alternatieve beschrijving', 'embed' => 'Insluiten', - 'paste_embed' => 'Plak uw insluitcode hieronder:', + 'paste_embed' => 'Plak jouw insluitcode hieronder:', 'url' => 'URL', 'text_to_display' => 'Weer te geven tekst', 'title' => 'Titel', diff --git a/lang/nl/entities.php b/lang/nl/entities.php index 8236a6a8e..23e5c9750 100644 --- a/lang/nl/entities.php +++ b/lang/nl/entities.php @@ -104,7 +104,7 @@ return [ 'shelves_delete' => 'Verwijder Boekenplank', 'shelves_delete_named' => 'Verwijder Boekenplank :name', 'shelves_delete_explain' => "Dit zal de boekenplank met de naam ':naam' verwijderen. Boeken die op deze plank staan worden echter niet verwijderd.", - 'shelves_delete_confirmation' => 'Weet u zeker dat u deze boekenplank wilt verwijderen?', + 'shelves_delete_confirmation' => 'Weet je zeker dat je deze boekenplank wilt verwijderen?', 'shelves_permissions' => 'Boekenplank Machtigingen', 'shelves_permissions_updated' => 'Boekenplank Machtigingen Bijgewerkt', 'shelves_permissions_active' => 'Machtigingen op Boekenplank Actief', @@ -228,7 +228,7 @@ return [ 'pages_edit_enter_changelog_desc' => 'Geef een korte omschrijving van de wijzigingen die je gemaakt hebt', 'pages_edit_enter_changelog' => 'Voeg toe aan logboek', 'pages_editor_switch_title' => 'Schakel Bewerker', - 'pages_editor_switch_are_you_sure' => 'Weet u zeker dat u de bewerker voor deze pagina wilt wijzigen?', + 'pages_editor_switch_are_you_sure' => 'Weet je zeker dat je de bewerker voor deze pagina wilt wijzigen?', 'pages_editor_switch_consider_following' => 'Houd rekening met het volgende als u van bewerker verandert:', 'pages_editor_switch_consideration_a' => 'Eenmaal opgeslagen, zal de nieuwe bewerker keuze gebruikt worden door alle toekomstige gebruikers, ook diegene die zelf niet van bewerker type kunnen veranderen.', 'pages_editor_switch_consideration_b' => 'Dit kan mogelijks tot een verlies van detail en syntax leiden in bepaalde omstandigheden.', @@ -244,7 +244,7 @@ return [ 'pages_md_show_preview' => 'Toon voorbeeld', 'pages_md_sync_scroll' => 'Synchroniseer scrollen van voorbeeld', '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_drawing_unsaved_confirm' => 'Er zijn niet-opgeslagen tekeninggegevens gevonden van een eerdere mislukte poging om de tekening op te slaan. Wil je deze niet-opgeslagen tekening herstellen en verder bewerken?', 'pages_not_in_chapter' => 'Pagina is niet in een hoofdstuk', 'pages_move' => 'Pagina verplaatsten', 'pages_copy' => 'Pagina kopiëren', @@ -254,7 +254,7 @@ return [ 'pages_permissions_success' => 'Pagina machtigingen bijgewerkt', 'pages_revision' => 'Revisie', 'pages_revisions' => 'Pagina revisies', - 'pages_revisions_desc' => 'Hieronder staan alle vorige versies van deze pagina. U kunt oude paginaversies terugkijken, vergelijken en herstellen indien de rechten dit toelaten. De volledige geschiedenis van de pagina wordt hier mogelijk niet volledig weergegeven omdat, afhankelijk van de systeemconfiguratie, oude versies al automatisch verwijderd kunnen zijn.', + 'pages_revisions_desc' => 'Hieronder staan alle vorige versies van deze pagina. Je kunt oude paginaversies terugkijken, vergelijken en herstellen indien de rechten dit toelaten. De volledige geschiedenis van de pagina wordt hier mogelijk niet volledig weergegeven omdat, afhankelijk van de systeemconfiguratie, oude versies al automatisch verwijderd kunnen zijn.', 'pages_revisions_named' => 'Pagina revisies voor :pageName', 'pages_revision_named' => 'Pagina revisie voor :pageName', 'pages_revision_restored_from' => 'Hersteld van #:id; :samenvatting', @@ -284,7 +284,7 @@ return [ 'pages_references_update_revision' => 'Automatische systeemupdate van interne links', 'pages_initial_name' => 'Nieuwe pagina', 'pages_editing_draft_notification' => 'U bewerkt momenteel een concept dat voor het laatst is opgeslagen op :timeDiff.', - 'pages_draft_edited_notification' => 'Deze pagina is sindsdien bijgewerkt. Het wordt aanbevolen dat u dit concept verwijderd.', + 'pages_draft_edited_notification' => 'Deze pagina is sindsdien bijgewerkt. Het wordt aanbevolen dat je dit concept verwijderd.', 'pages_draft_page_changed_since_creation' => 'Deze pagina is bijgewerkt sinds het aanmaken van dit concept. Het wordt aanbevolen dat u dit concept verwijdert of ervoor zorgt dat u wijzigingen op de pagina niet overschrijft.', 'pages_draft_edit_active' => [ 'start_a' => ':count gebruikers zijn begonnen deze pagina te bewerken', @@ -309,7 +309,7 @@ return [ 'tags_index_desc' => 'Labels kunnen worden toegepast op inhoud binnen het systeem om een flexibele vorm van categorisering toe te passen. Labels kunnen zowel een sleutel als een waarde hebben, waarbij de waarde optioneel is. Eenmaal toegepast, kan de inhoud worden opgevraagd aan de hand van de naam en de waarde van het label.', 'tag_name' => 'Labelnaam', 'tag_value' => 'Labelwaarde (Optioneel)', - 'tags_explain' => "Voeg enkele labels toe om uw inhoud beter te categoriseren. \nJe kunt een waarde aan een label toekennen voor een meer gedetailleerde organisatie.", + 'tags_explain' => "Voeg enkele labels toe om jouw inhoud beter te categoriseren. \nJe kunt een waarde aan een label toekennen voor een meer gedetailleerde organisatie.", 'tags_add' => 'Voeg nog een label toe', 'tags_remove' => 'Verwijder deze label', 'tags_usages' => 'Totaal aantal label-toepassingen', @@ -327,9 +327,9 @@ return [ 'attachments_explain_instant_save' => 'Wijzigingen worden meteen opgeslagen.', 'attachments_upload' => 'Bestand uploaden', 'attachments_link' => 'Link toevoegen', - 'attachments_upload_drop' => 'Je kan ook een bestand hiernaartoe slepen om het als bijlage to uploaden.', + 'attachments_upload_drop' => 'Je kan ook een bestand hiernaartoe slepen om het als bijlage te uploaden.', 'attachments_set_link' => 'Zet link', - 'attachments_delete' => 'Weet u zeker dat u deze bijlage wilt verwijderen?', + 'attachments_delete' => 'Weet je zeker dat je deze bijlage wilt verwijderen?', 'attachments_dropzone' => 'Sleep hier de bestanden naar toe', 'attachments_no_files' => 'Er zijn geen bestanden geüpload', 'attachments_explain_link' => 'Je kunt een hyperlink toevoegen als je geen bestanden wilt uploaden. Dit kan een link naar een andere pagina op deze website zijn, maar ook een link naar een andere website.', @@ -382,8 +382,8 @@ return [ 'comment_editor_explain' => 'Hier zijn de opmerkingen die zijn achtergelaten op deze pagina. Opmerkingen kunnen worden toegevoegd en beheerd wanneer u de opgeslagen pagina bekijkt.', // Revision - 'revision_delete_confirm' => 'Weet u zeker dat u deze revisie wilt verwijderen?', - 'revision_restore_confirm' => 'Weet u zeker dat u deze revisie wilt herstellen? De huidige pagina-inhoud wordt vervangen.', + 'revision_delete_confirm' => 'Weet je zeker dat je deze revisie wilt verwijderen?', + 'revision_restore_confirm' => 'Weet je zeker dat je deze revisie wilt herstellen? De huidige pagina-inhoud wordt vervangen.', 'revision_cannot_delete_latest' => 'Kan de laatste revisie niet verwijderen.', // Copy view @@ -396,7 +396,7 @@ return [ // Conversions 'convert_to_shelf' => 'Converteer naar Boekenplank', - 'convert_to_shelf_contents_desc' => 'U kunt dit boek converteren naar een nieuwe boekenplank met dezelfde inhoud. Hoofdstukken in dit boek zullen worden geconverteerd naar nieuwe boeken. Als dit boek pagina\'s bevat, die niet in een hoofdstuk staan, zal dit boek een nieuwe naam krijgen en deze pagina\'s bevatten, en zal dit boek deel gaan uitmaken van de nieuwe boekenplank.', + 'convert_to_shelf_contents_desc' => 'Je kunt dit boek converteren naar een nieuwe boekenplank met dezelfde inhoud. Hoofdstukken in dit boek zullen worden geconverteerd naar nieuwe boeken. Als dit boek pagina\'s bevat, die niet in een hoofdstuk staan, zal dit boek een nieuwe naam krijgen en deze pagina\'s bevatten, en zal dit boek deel gaan uitmaken van de nieuwe boekenplank.', 'convert_to_shelf_permissions_desc' => 'Elke machtiging ingesteld op dit boek zal gekopieerd worden naar de nieuwe boekenplank en naar alle nieuwe onderliggende boeken die geen eigen machtiging hebben afgedwongen. Merk op dat boekenplank-machtigingen niet automatisch overdragen naar inhoud binnenin de boekenplank, zoals dat wel gebeurd bij boeken.', 'convert_book' => 'Converteer Boek', 'convert_book_confirm' => 'Weet je zeker dat je dit boek wil converteren?', diff --git a/lang/nl/errors.php b/lang/nl/errors.php index ba39e0a69..74b14e08d 100644 --- a/lang/nl/errors.php +++ b/lang/nl/errors.php @@ -5,8 +5,8 @@ return [ // Permissions - 'permission' => 'U heeft geen machtiging om de gevraagde pagina te openen.', - 'permissionJson' => 'U heeft geen machtiging om de gevraagde actie uit te voeren.', + 'permission' => 'Je hebt geen machtiging om de gevraagde pagina te openen.', + 'permissionJson' => 'Je hebt geen machtiging om de gevraagde actie uit te voeren.', // Auth 'error_user_exists_different_creds' => 'Er bestaat al een gebruiker met het e-mailadres :email, maar met andere inloggegevens.', @@ -36,7 +36,7 @@ return [ 'social_account_register_instructions' => 'Als je nog geen account hebt, kun je je registreren met de :socialAccount optie.', 'social_driver_not_found' => 'Social driver niet gevonden', 'social_driver_not_configured' => 'Je :socialAccount instellingen zijn niet correct geconfigureerd.', - 'invite_token_expired' => 'Deze uitnodigingslink is verlopen. U kunt in plaats daarvan proberen uw wachtwoord opnieuw in te stellen.', + 'invite_token_expired' => 'Deze uitnodigingslink is verlopen. Je kunt in plaats daarvan proberen je wachtwoord opnieuw in te stellen.', // System 'path_not_writable' => 'Bestandspad :filePath kon niet naar geüpload worden. Zorg dat je schrijfrechten op de server hebt.', @@ -53,7 +53,7 @@ return [ '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.', + 'drawing_data_not_found' => 'De gegevens van de tekening konden niet worden geladen. Het tekenbestand bestaat misschien niet meer of je hebt geen machtiging om het te openen.', // Attachments 'attachment_not_found' => 'Bijlage niet gevonden', @@ -86,7 +86,7 @@ return [ // Comments 'comment_list' => 'Er is een fout opgetreden tijdens het ophalen van de reacties.', - 'cannot_add_comment_to_draft' => 'U kunt geen reacties toevoegen aan een concept.', + 'cannot_add_comment_to_draft' => 'Je kunt geen reacties toevoegen aan een concept.', 'comment_add' => 'Er is een fout opgetreden tijdens het aanpassen / toevoegen van de reactie.', 'comment_delete' => 'Er is een fout opgetreden tijdens het verwijderen van de reactie.', 'empty_comment' => 'Kan geen lege reactie toevoegen.', @@ -94,10 +94,10 @@ return [ // Error pages '404_page_not_found' => 'Pagina Niet Gevonden', 'sorry_page_not_found' => 'Sorry, de pagina die je zocht kan niet gevonden worden.', - 'sorry_page_not_found_permission_warning' => 'Als u verwachtte dat deze pagina zou bestaan, hebt u misschien geen machtiging om deze te bekijken.', + 'sorry_page_not_found_permission_warning' => 'Als je verwachtte dat deze pagina zou bestaan, heb je misschien geen machtiging om deze te bekijken.', 'image_not_found' => 'Afbeelding niet gevonden', 'image_not_found_subtitle' => 'Sorry, de afbeelding die je zocht is niet beschikbaar.', - 'image_not_found_details' => 'Als u verwachtte dat deze afbeelding zou bestaan, dan is deze misschien verwijderd.', + 'image_not_found_details' => 'Als je verwachtte dat deze afbeelding zou bestaan, dan is deze misschien verwijderd.', 'return_home' => 'Terug naar home', 'error_occurred' => 'Er Ging Iets Fout', 'app_down' => ':appName is nu niet beschikbaar', diff --git a/lang/nl/notifications.php b/lang/nl/notifications.php index 79c7e7e8b..bc5f380c3 100644 --- a/lang/nl/notifications.php +++ b/lang/nl/notifications.php @@ -22,6 +22,6 @@ return [ 'action_view_comment' => 'Bekijk Opmerking', 'action_view_page' => 'Bekijk Pagina', - 'footer_reason' => 'Deze melding is naar u verzonden omdat :link dit type activiteit voor dit artikel dekt.', + 'footer_reason' => 'Deze melding is naar je verzonden omdat :link dit type activiteit voor dit artikel dekt.', 'footer_reason_link' => 'je meldingsvoorkeuren', ]; diff --git a/lang/nl/passwords.php b/lang/nl/passwords.php index 1f1d71925..1781256f2 100644 --- a/lang/nl/passwords.php +++ b/lang/nl/passwords.php @@ -8,7 +8,7 @@ return [ 'password' => 'Wachtwoorden moeten uit ten minste acht tekens bestaan en overeenkomen met de bevestiging.', 'user' => "We kunnen niemand vinden met dat e-mailadres.", - 'token' => 'Het wachtwoord reset token is ongeldig voor dit e-mailadres.', + 'token' => 'De wachtwoord reset token is ongeldig voor dit e-mailadres.', 'sent' => 'We hebben je een link gestuurd om je wachtwoord te herstellen!', 'reset' => 'Je wachtwoord is hersteld!', diff --git a/lang/nl/preferences.php b/lang/nl/preferences.php index 41ed3c547..5e385276c 100644 --- a/lang/nl/preferences.php +++ b/lang/nl/preferences.php @@ -9,8 +9,8 @@ return [ 'shortcuts' => 'Snelkoppelingen', '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_desc' => 'Hier kun je toetscombinaties voor de gebruikersinterface in- of uitschakelen voor navigatie en acties.', + 'shortcuts_customize_desc' => 'Je 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', 'shortcuts_section_navigation' => 'Navigatie', 'shortcuts_section_actions' => 'Gebruikelijke acties', @@ -27,11 +27,11 @@ return [ 'notifications_save' => 'Voorkeuren opslaan', 'notifications_update_success' => 'Voorkeuren voor meldingen zijn bijgewerkt!', '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.', + '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.', '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_desc' => 'Wijzig hier je wachtwoord die je gebruikt om in te loggen op de applicatie. Gebruik minimaal 8 tekens.', 'auth_change_password_success' => 'Wachtwoord is bijgewerkt!', 'profile' => 'Profielgegevens', diff --git a/lang/nl/settings.php b/lang/nl/settings.php index 340d1d899..828036c1b 100644 --- a/lang/nl/settings.php +++ b/lang/nl/settings.php @@ -39,7 +39,7 @@ return [ 'app_homepage_desc' => 'Selecteer een weergave om weer te geven op de startpagina in plaats van de standaard weergave. Paginamachtigingen worden genegeerd voor geselecteerde pagina\'s.', 'app_homepage_select' => 'Selecteer een pagina', 'app_footer_links' => 'Voettekst hyperlinks', - 'app_footer_links_desc' => 'Voeg hyperlinks toe aan de voettekst van de applicatie. Deze zullen onderaan de meeste pagina\'s getoond worden, ook aan pagina\'s die geen login vereisen. U kunt een label van "trans::" gebruiken om systeem-gedefinieerde vertalingen te gebruiken. Bijvoorbeeld: Het gebruik van "trans::common.privacy_policy" zal de vertaalde tekst "Privacy Policy" opleveren en "trans::common.terms_of_service" zal de vertaalde tekst "Gebruiksvoorwaarden" opleveren.', + 'app_footer_links_desc' => 'Voeg hyperlinks toe aan de voettekst van de applicatie. Deze zullen onderaan de meeste pagina\'s getoond worden, ook aan pagina\'s die geen login vereisen. Je kunt een label van "trans::" gebruiken om systeem-gedefinieerde vertalingen te gebruiken. Bijvoorbeeld: Het gebruik van "trans::common.privacy_policy" zal de vertaalde tekst "Privacy Policy" opleveren en "trans::common.terms_of_service" zal de vertaalde tekst "Gebruiksvoorwaarden" opleveren.', 'app_footer_links_label' => 'Link label', 'app_footer_links_url' => 'Link URL', 'app_footer_links_add' => 'Voettekst link toevoegen', @@ -80,7 +80,7 @@ return [ 'maint_image_cleanup_desc' => 'Scant pagina- en revisie inhoud om te controleren welke afbeeldingen en tekeningen momenteel worden gebruikt en welke afbeeldingen overbodig zijn. Zorg ervoor dat je een volledige database- en afbeelding back-up maakt voordat je dit uitvoert.', 'maint_delete_images_only_in_revisions' => 'Ook afbeeldingen verwijderen die alleen in oude pagina revisies bestaan', 'maint_image_cleanup_run' => 'Opschonen uitvoeren', - 'maint_image_cleanup_warning' => ':count potentieel ongebruikte afbeeldingen gevonden. Weet u zeker dat u deze afbeeldingen wilt verwijderen?', + 'maint_image_cleanup_warning' => ':count potentieel ongebruikte afbeeldingen gevonden. Weet je zeker dat je deze afbeeldingen wilt verwijderen?', 'maint_image_cleanup_success' => ':count potentieel ongebruikte afbeeldingen gevonden en verwijderd!', 'maint_image_cleanup_nothing_found' => 'Geen ongebruikte afbeeldingen gevonden, niets verwijderd!', 'maint_send_test_email' => 'Stuur een test e-mail', @@ -99,7 +99,7 @@ return [ // Recycle Bin 'recycle_bin' => 'Prullenbak', - 'recycle_bin_desc' => 'Hier kunt u items herstellen die zijn verwijderd of ervoor kiezen om ze permanent uit het systeem te verwijderen. Deze lijst is ongefilterd, in tegenstelling tot vergelijkbare activiteitenlijsten in het systeem waar machtigingenfilters worden toegepast.', + 'recycle_bin_desc' => 'Hier kun je items herstellen die zijn verwijderd of ervoor kiezen om ze permanent uit het systeem te verwijderen. Deze lijst is ongefilterd, in tegenstelling tot vergelijkbare activiteitenlijsten in het systeem waar machtigingenfilters worden toegepast.', 'recycle_bin_deleted_item' => 'Verwijderde Item', 'recycle_bin_deleted_parent' => 'Bovenliggende', 'recycle_bin_deleted_by' => 'Verwijderd door', @@ -108,7 +108,7 @@ return [ 'recycle_bin_restore' => 'Herstellen', 'recycle_bin_contents_empty' => 'De prullenbak is momenteel leeg', 'recycle_bin_empty' => 'Prullenbak legen', - 'recycle_bin_empty_confirm' => 'Dit zal permanent alle items in de prullenbak vernietigen, inclusief de inhoud die in elk item zit. Weet u zeker dat u de prullenbak wilt legen?', + 'recycle_bin_empty_confirm' => 'Dit zal permanent alle items in de prullenbak vernietigen, inclusief de inhoud die in elk item zit. Weet je zeker dat je de prullenbak wil legen?', 'recycle_bin_destroy_confirm' => 'Deze actie zal dit item permanent verwijderen uit het systeem, samen met onderstaande onderliggende elementen, en u zal deze inhoud niet kunnen herstellen. Bent u zeker dat u dit item permanent wilt verwijderen?', 'recycle_bin_destroy_list' => 'Te vernietigen items', 'recycle_bin_restore_list' => 'Items te herstellen', @@ -190,7 +190,7 @@ return [ 'users_role_desc' => 'Selecteer aan welke rollen deze gebruiker zal worden toegewezen. Als een gebruiker aan meerdere rollen wordt toegewezen, worden de machtigingen van die rollen samengevoegd en krijgt hij alle mogelijkheden van de toegewezen rollen.', 'users_password' => 'Wachtwoord gebruiker', 'users_password_desc' => 'Stel een wachtwoord in om op de applicatie in te loggen. Dit moet minstens 8 tekens lang zijn.', - '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_text' => 'Je kunt ervoor kiezen om deze gebruiker een uitnodigingsmail te sturen waarmee hij zijn eigen wachtwoord kan instellen, anders kun je 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' => '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.', @@ -211,7 +211,7 @@ return [ '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_accounts_info' => 'Hier kun je je andere accounts koppelen om sneller en eenvoudiger in te loggen. Als je hier een account loskoppelt, wordt de eerder gemachtigde toegang niet ingetrokken. Je kunt de toegang intrekken via je profielinstellingen op het gekoppelde socialemedia-account zelf.', 'users_social_connect' => 'Account Verbinden', 'users_social_disconnect' => 'Account Ontkoppelen', 'users_social_status_connected' => 'Verbonden', @@ -225,7 +225,7 @@ return [ 'users_api_tokens_expires' => 'Verloopt', 'users_api_tokens_docs' => 'API-Documentatie', 'users_mfa' => 'Meervoudige Verificatie', - 'users_mfa_desc' => 'Stel meervoudige verificatie in als extra beveiligingslaag voor uw gebruikersaccount.', + 'users_mfa_desc' => 'Stel meervoudige verificatie in als extra beveiligingslaag voor je gebruikersaccount.', 'users_mfa_x_methods' => ':count methode geconfigureerd|:count methoden geconfigureerd', 'users_mfa_configure' => 'Configureer methoden', @@ -245,7 +245,7 @@ return [ 'user_api_token_updated' => 'Token :timeAgo geleden bijgewerkt', 'user_api_token_delete' => 'Token Verwijderen', 'user_api_token_delete_warning' => 'Dit zal de API-token met de naam \':tokenName\' volledig uit het systeem verwijderen.', - 'user_api_token_delete_confirm' => 'Weet u zeker dat u deze API-token wilt verwijderen?', + 'user_api_token_delete_confirm' => 'Weet je zeker dat je deze API-token wilt verwijderen?', // Webhooks 'webhooks' => 'Webhooks', @@ -268,7 +268,7 @@ return [ 'webhook_events_table_header' => 'Gebeurtenissen', 'webhooks_delete' => 'Verwijder Webhook', 'webhooks_delete_warning' => 'Dit zal de webhook met naam \':webhookName\' volledig verwijderen van het systeem.', - 'webhooks_delete_confirm' => 'Weet u zeker dat u deze webhook wil verwijderen?', + 'webhooks_delete_confirm' => 'Weet je zeker dat je deze webhook wilt verwijderen?', 'webhooks_format_example' => 'Voorbeeld Webhook Formaat', 'webhooks_format_example_desc' => 'Webhook gegevens worden verzonden als een POST verzoek naar het geconfigureerde eindpunt als JSON volgens het onderstaande formaat. De "related_item" en "url" eigenschappen zijn optioneel en hangen af van het type gebeurtenis die geactiveerd wordt.', 'webhooks_status' => 'Webhook Status', @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Laatst Gefaald:', 'webhooks_last_error_message' => 'Laatste Foutmelding:', + // Licensing + 'licenses' => 'Licenties', + 'licenses_desc' => 'Deze pagina beschrijft licentie-informatie voor BookStack naast de projecten & bibliotheken die binnen BookStack worden gebruikt. Veel van de vermelde projecten worden alleen in een ontwikkelingscontext gebruikt.', + 'licenses_bookstack' => 'BookStack Licentie', + 'licenses_php' => 'PHP Bibliotheek Licenties', + 'licenses_js' => 'JavaScript Bibliotheek Licenties', + 'licenses_other' => 'Andere Licenties', + 'license_details' => 'Licentie Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/nn/preferences.php b/lang/nn/preferences.php index 4e6e6c1ff..ac6dc1b77 100644 --- a/lang/nn/preferences.php +++ b/lang/nn/preferences.php @@ -27,7 +27,7 @@ return [ '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.', + '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', diff --git a/lang/nn/settings.php b/lang/nn/settings.php index ba8586ce2..df5399f90 100644 --- a/lang/nn/settings.php +++ b/lang/nn/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Siste feil:', 'webhooks_last_error_message' => 'Siste feilmelding:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/pl/activities.php b/lang/pl/activities.php index fffb5499e..25f9e23c6 100644 --- a/lang/pl/activities.php +++ b/lang/pl/activities.php @@ -93,11 +93,11 @@ return [ 'user_delete_notification' => 'Użytkownik pomyślnie usunięty', // API Tokens - 'api_token_create' => 'created API token', + 'api_token_create' => 'utworzył token API', 'api_token_create_notification' => 'Token API został poprawnie utworzony', - 'api_token_update' => 'updated API token', + 'api_token_update' => 'zaktualizował token API', 'api_token_update_notification' => 'Token API został pomyślnie zaktualizowany', - 'api_token_delete' => 'deleted API token', + 'api_token_delete' => 'usunął token API', 'api_token_delete_notification' => 'Token API został pomyślnie usunięty', // Roles diff --git a/lang/pl/common.php b/lang/pl/common.php index 2c176ff94..e3feb2f02 100644 --- a/lang/pl/common.php +++ b/lang/pl/common.php @@ -20,7 +20,7 @@ return [ 'description' => 'Opis', 'role' => 'Rola', 'cover_image' => 'Okładka', - 'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.', + 'cover_image_description' => 'Ten obraz powinien być o rozmiarze około 440x250px, chociaż zostanie elastycznie przeskalowany i przycięty, aby dopasować interfejs użytkownika do różnych scenariuszy w zależności od potrzeb, więc faktyczne wymiary wyświetlania będą się różnić.', // Actions 'actions' => 'Akcje', diff --git a/lang/pl/editor.php b/lang/pl/editor.php index ca18521c2..f4ed4b5f2 100644 --- a/lang/pl/editor.php +++ b/lang/pl/editor.php @@ -81,9 +81,9 @@ return [ 'table_properties' => 'Właściwości tabeli', 'table_properties_title' => 'Właściwości Tabeli', 'delete_table' => 'Usuń tabelę', - 'table_clear_formatting' => 'Clear table formatting', - 'resize_to_contents' => 'Resize to contents', - 'row_header' => 'Row header', + 'table_clear_formatting' => 'Wyczyść formatowanie tabeli', + 'resize_to_contents' => 'Dostosuj rozmiar do zawartości', + 'row_header' => 'Wiersz nagłówka', 'insert_row_before' => 'Wstaw wiersz przed', 'insert_row_after' => 'Wstaw wiersz za', 'delete_row' => 'Usuń wiersz', diff --git a/lang/pl/entities.php b/lang/pl/entities.php index b178f680f..b99de72be 100644 --- a/lang/pl/entities.php +++ b/lang/pl/entities.php @@ -23,7 +23,7 @@ return [ 'meta_updated' => 'Zaktualizowano :timeLength', 'meta_updated_name' => 'Zaktualizowano :timeLength przez :user', 'meta_owned_name' => 'Właściciel: :user', - 'meta_reference_count' => 'Referenced by :count item|Referenced by :count items', + 'meta_reference_count' => 'Odniesienie w :count elemencie|Odniesienia w :count elementach', 'entity_select' => 'Wybór obiektu', 'entity_select_lack_permission' => 'Nie masz wymaganych uprawnień do wybrania tej pozycji', 'images' => 'Obrazki', @@ -39,9 +39,9 @@ return [ 'export_pdf' => 'Plik PDF', 'export_text' => 'Plik tekstowy', 'export_md' => 'Pliki Markdown', - 'default_template' => 'Default Page Template', - 'default_template_explain' => 'Assign a page template that will be used as the default content for all pages created within this item. Keep in mind this will only be used if the page creator has view access to the chosen template page.', - 'default_template_select' => 'Select a template page', + 'default_template' => 'Domyślny szablon strony', + 'default_template_explain' => 'Przypisz szablon strony, który będzie używany jako domyślna zawartość dla wszystkich stron utworzonych w tym elemencie. Pamiętaj, że będzie to używane tylko wtedy, gdy twórca strony ma dostęp do wybranej strony szablonu.', + 'default_template_select' => 'Wybierz stronę szablonu', // Permissions and restrictions 'permissions' => 'Uprawnienia', @@ -207,7 +207,7 @@ return [ 'pages_delete_draft' => 'Usuń wersje roboczą', 'pages_delete_success' => 'Strona usunięta pomyślnie', 'pages_delete_draft_success' => 'Werjsa robocza usunięta pomyślnie', - 'pages_delete_warning_template' => 'This page is in active use as a book or chapter default page template. These books or chapters will no longer have a default page template assigned after this page is deleted.', + 'pages_delete_warning_template' => 'Ta strona jest aktualnie używana jako domyślny szablon strony książki lub rozdziału. Po usunięciu tej strony te książki lub rozdziały nie będą już miały przypisanego domyślnego szablonu strony.', 'pages_delete_confirm' => 'Czy na pewno chcesz usunąć tę stronę?', 'pages_delete_draft_confirm' => 'Czy na pewno chcesz usunąć wersje roboczą strony?', 'pages_editing_named' => 'Edytowanie strony :pageName', @@ -409,7 +409,7 @@ return [ // References 'references' => 'Odniesienia', 'references_none' => 'Brak śledzonych odwołań do tego elementu.', - 'references_to_desc' => 'Listed below is all the known content in the system that links to this item.', + 'references_to_desc' => 'Wymienione poniżej są wszystkie znane treści w systemie, które nawiązują do tego elementu.', // Watch Options 'watch' => 'Obserwuj', diff --git a/lang/pl/errors.php b/lang/pl/errors.php index eb7435424..8b1ae1608 100644 --- a/lang/pl/errors.php +++ b/lang/pl/errors.php @@ -10,7 +10,7 @@ return [ // Auth 'error_user_exists_different_creds' => 'Użytkownik o adresie :email już istnieje, ale używa innych poświadczeń.', - 'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details', + 'auth_pre_register_theme_prevention' => 'Konto użytkownika nie może być zarejestrowane z podanymi danymi', 'email_already_confirmed' => 'E-mail został potwierdzony, spróbuj się zalogować.', 'email_confirmation_invalid' => 'Ten token jest nieprawidłowy lub został już wykorzystany. Spróbuj zarejestrować się ponownie.', 'email_confirmation_expired' => 'Ten token potwierdzający wygasł. Wysłaliśmy Ci kolejny.', diff --git a/lang/pl/preferences.php b/lang/pl/preferences.php index 6d67dc1b3..dd3482102 100644 --- a/lang/pl/preferences.php +++ b/lang/pl/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => 'Zapisz preferencje', 'notifications_update_success' => 'Preferencje powiadomień zostały zaktualizowane!', '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.', + '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.', 'auth' => 'Dostęp i bezpieczeństwo', 'auth_change_password' => 'Zmień hasło', diff --git a/lang/pl/settings.php b/lang/pl/settings.php index 295bb5dd9..89bbba377 100644 --- a/lang/pl/settings.php +++ b/lang/pl/settings.php @@ -109,7 +109,7 @@ return [ 'recycle_bin_contents_empty' => 'Kosz jest pusty', 'recycle_bin_empty' => 'Opróżnij kosz', 'recycle_bin_empty_confirm' => 'To na stałe zniszczy wszystkie przedmioty w koszu, w tym zawartość w każdym elemencie. Czy na pewno chcesz opróżnić kosz?', - 'recycle_bin_destroy_confirm' => 'This action will permanently delete this item from the system, along with any child elements listed below, and you will not be able to restore this content. Are you sure you want to permanently delete this item?', + 'recycle_bin_destroy_confirm' => 'Ta akcja trwale usunie ten element z systemu, wraz z elementami podrzędnymi wymienionymi poniżej i nie będziesz już mógł przywrócić tej zawartości. Czy na pewno chcesz trwale usunąć ten element?', 'recycle_bin_destroy_list' => 'Elementy do usunięcia', 'recycle_bin_restore_list' => 'Elementy do przywrócenia', 'recycle_bin_restore_confirm' => 'Ta akcja przywróci usunięty element, w tym elementy podrzędne, do ich oryginalnej lokalizacji. Jeśli oryginalna lokalizacja została od tego czasu usunięta, a teraz znajduje się w koszu, element nadrzędny będzie również musiał zostać przywrócony.', @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Ostatni błąd:', 'webhooks_last_error_message' => 'Ostatni komunikat o błędzie:', + // Licensing + 'licenses' => 'Licencje', + 'licenses_desc' => 'Ta strona podaje szczegóły dotyczące licencji dla BookStack w powiązaniu z projektami i bibliotekami używanymi w BookStack. Wiele wymienionych projektów może zezwalać na wykorzystanie wyłącznie w kontekście rozwoju oprogramowania.', + 'licenses_bookstack' => 'Licencja BookStack', + 'licenses_php' => 'Licencje bibliotek PHP', + 'licenses_js' => 'Licencje bibliotek JavaScript', + 'licenses_other' => 'Inne licencje', + 'license_details' => 'Szczegóły licencji', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/pt/preferences.php b/lang/pt/preferences.php index 1d6ec7d4c..ec5e54bba 100644 --- a/lang/pt/preferences.php +++ b/lang/pt/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => 'Guardar preferências', '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_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' => 'Acesso e Segurança', 'auth_change_password' => 'Alterar Palavra-passe', diff --git a/lang/pt/settings.php b/lang/pt/settings.php index eb637d8bd..7a25d635e 100644 --- a/lang/pt/settings.php +++ b/lang/pt/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Último erro:', 'webhooks_last_error_message' => 'Última mensagem de erro:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/pt_BR/preferences.php b/lang/pt_BR/preferences.php index aa354a9ad..28d0e4978 100644 --- a/lang/pt_BR/preferences.php +++ b/lang/pt_BR/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => 'Salvar Preferências', 'notifications_update_success' => 'Preferências de notificação foram atualizadas!', '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.', + '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.', 'auth' => 'Acesso & Segurança', 'auth_change_password' => 'Mudar a senha', diff --git a/lang/pt_BR/settings.php b/lang/pt_BR/settings.php index cd30b9e20..1107855a6 100644 --- a/lang/pt_BR/settings.php +++ b/lang/pt_BR/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Último Erro:', 'webhooks_last_error_message' => 'Última mensagem de erro:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/ro/preferences.php b/lang/ro/preferences.php index 893b44eaf..f7529305c 100644 --- a/lang/ro/preferences.php +++ b/lang/ro/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => 'Salvează Preferințe', 'notifications_update_success' => 'Preferințele de notificare au fost actualizate!', '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ă.', + '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ă.', 'auth' => 'Acces & Securitate', 'auth_change_password' => 'Schimbă Parola', diff --git a/lang/ro/settings.php b/lang/ro/settings.php index 508ab595a..32954a8ea 100644 --- a/lang/ro/settings.php +++ b/lang/ro/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Ultima eroare:', 'webhooks_last_error_message' => 'Ultimul mesaj de eroare:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/ru/activities.php b/lang/ru/activities.php index 1c4fd5da1..df6ae9062 100644 --- a/lang/ru/activities.php +++ b/lang/ru/activities.php @@ -66,7 +66,7 @@ return [ 'auth_register' => 'зарегистрировался как новый пользователь', 'auth_password_reset_request' => 'запросил смену пароля пользователя', 'auth_password_reset_update' => 'сбросил пароль пользователя', - 'mfa_setup_method' => 'ностроил метод МФА', + 'mfa_setup_method' => 'настроил метод МФА', 'mfa_setup_method_notification' => 'Многофакторный метод аутентификации успешно настроен', 'mfa_remove_method' => 'удалил метод МФА', 'mfa_remove_method_notification' => 'Многофакторный метод аутентификации успешно удален', @@ -93,11 +93,11 @@ return [ 'user_delete_notification' => 'Пользователь успешно удален', // API Tokens - 'api_token_create' => 'created API token', + 'api_token_create' => 'создан API токен', 'api_token_create_notification' => 'API токен успешно создан', - 'api_token_update' => 'updated API token', + 'api_token_update' => 'обновлён API токен', 'api_token_update_notification' => 'API токен успешно обновлен', - 'api_token_delete' => 'deleted API token', + 'api_token_delete' => 'обновил API токен', 'api_token_delete_notification' => 'API токен успешно удален', // Roles diff --git a/lang/ru/common.php b/lang/ru/common.php index b2af5fdef..26b725ebc 100644 --- a/lang/ru/common.php +++ b/lang/ru/common.php @@ -20,7 +20,7 @@ return [ 'description' => 'Описание', 'role' => 'Роль', 'cover_image' => 'Обложка', - 'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.', + 'cover_image_description' => 'Это изображение должно быть приблизительно 440x250px, хотя оно и будет гибко масштабироваться и обрезаться, чтобы соответствовать пользовательскому интерфейсу в различных необходимых сценариях. Так что фактические размеры дисплея будут отличаться.', // Actions 'actions' => 'Действия', diff --git a/lang/ru/editor.php b/lang/ru/editor.php index 756925f58..b93bd8840 100644 --- a/lang/ru/editor.php +++ b/lang/ru/editor.php @@ -81,9 +81,9 @@ return [ 'table_properties' => 'Свойства таблицы', 'table_properties_title' => 'Свойства таблицы', 'delete_table' => 'Удалить таблицу', - 'table_clear_formatting' => 'Clear table formatting', - 'resize_to_contents' => 'Resize to contents', - 'row_header' => 'Row header', + 'table_clear_formatting' => 'Очистить форматирование таблицы', + 'resize_to_contents' => 'Изменить размер содержимого', + 'row_header' => 'Заголовок строки', 'insert_row_before' => 'Вставить строку выше', 'insert_row_after' => 'Вставить строку ниже', 'delete_row' => 'Удалить строку', diff --git a/lang/ru/entities.php b/lang/ru/entities.php index deafa2e85..c18c00e79 100644 --- a/lang/ru/entities.php +++ b/lang/ru/entities.php @@ -23,7 +23,7 @@ return [ 'meta_updated' => 'Обновлено :timeLength', 'meta_updated_name' => ':user обновил :timeLength', 'meta_owned_name' => 'Владелец :user', - 'meta_reference_count' => 'Referenced by :count item|Referenced by :count items', + 'meta_reference_count' => 'Ссылается :count элемент|Ссылается :count элементов', 'entity_select' => 'Выбор объекта', 'entity_select_lack_permission' => 'У вас нет разрешения на выбор этого элемента', 'images' => 'Изображения', @@ -39,9 +39,9 @@ return [ 'export_pdf' => 'PDF файл', 'export_text' => 'Текстовый файл', 'export_md' => 'Файл Markdown', - 'default_template' => 'Default Page Template', - 'default_template_explain' => 'Assign a page template that will be used as the default content for all pages created within this item. Keep in mind this will only be used if the page creator has view access to the chosen template page.', - 'default_template_select' => 'Select a template page', + 'default_template' => 'Шаблон страницы по умолчанию', + 'default_template_explain' => 'Назначить шаблон страницы, который будет использоваться в качестве содержимого по умолчанию для всех страниц, созданных в этом элементе. Имейте в виду, что это будет работать, только если создатель страницы имеет доступ к выбранной странице шаблона.', + 'default_template_select' => 'Выберите страницу шаблона', // Permissions and restrictions 'permissions' => 'Разрешения', @@ -207,7 +207,7 @@ return [ 'pages_delete_draft' => 'Удалить черновик', 'pages_delete_success' => 'Страница удалена', 'pages_delete_draft_success' => 'Черновик удален', - 'pages_delete_warning_template' => 'This page is in active use as a book or chapter default page template. These books or chapters will no longer have a default page template assigned after this page is deleted.', + 'pages_delete_warning_template' => 'Эта страница активно используется как шаблон страницы по умолчанию для книги или главы. Эти книги или главы больше не будут иметь шаблон страницы по умолчанию, назначенный после удаления этой страницы.', 'pages_delete_confirm' => 'Вы действительно хотите удалить эту страницу?', 'pages_delete_draft_confirm' => 'Вы действительно хотите удалить этот черновик?', 'pages_editing_named' => 'Редактирование страницы :pageName', @@ -243,8 +243,8 @@ return [ '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' => 'Скопировать страницу', @@ -273,12 +273,12 @@ return [ 'pages_revisions_none' => 'У этой страницы нет других версий', 'pages_copy_link' => 'Копировать ссылку', 'pages_edit_content_link' => 'Перейти к разделу в редакторе', - 'pages_pointer_enter_mode' => 'Enter section select mode', + 'pages_pointer_enter_mode' => 'Войти в режим выбора раздела', 'pages_pointer_label' => 'Настройки раздела страницы', 'pages_pointer_permalink' => 'Постоянная ссылка на раздел страницы', 'pages_pointer_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_toggle_link' => 'Режим постоянной ссылки. Нажмите, чтобы показать включение тега', + 'pages_pointer_toggle_include' => 'Включить режим тега. Нажмите для отображения постоянной ссылки', 'pages_permissions_active' => 'Действующие разрешения на страницу', 'pages_initial_revision' => 'Первоначальное издание', 'pages_references_update_revision' => 'Система автоматически обновила внутренние ссылки', @@ -299,7 +299,7 @@ return [ 'pages_is_template' => 'Шаблон страницы', // Editor Sidebar - 'toggle_sidebar' => 'Toggle Sidebar', + 'toggle_sidebar' => 'Переключить боковую панель', 'page_tags' => 'Теги страницы', 'chapter_tags' => 'Теги главы', 'book_tags' => 'Теги книги', @@ -409,25 +409,25 @@ return [ // References 'references' => 'Ссылки', 'references_none' => 'Нет отслеживаемых ссылок на этот элемент.', - 'references_to_desc' => 'Listed below is all the known content in the system that links to this item.', + 'references_to_desc' => 'Ниже перечислены все известные материалы в системе, которые ссылаются на этот элемент.', // Watch Options - 'watch' => 'Watch', + 'watch' => 'Наблюдать', 'watch_title_default' => 'Свойства по умолчанию', - 'watch_desc_default' => 'Revert watching to just your default notification preferences.', + 'watch_desc_default' => 'Вернуть просмотр только ваших настроек уведомлений по умолчанию.', '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_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' => 'Watching for new pages', + 'watch_detail_new' => 'Наблюдение за новыми страницами', 'watch_detail_updates' => 'Просмотр новых страниц и обновлений', 'watch_detail_comments' => 'Просмотр новых страниц, обновлений и комментариев', 'watch_detail_parent_book' => 'Просмотр через родительскую книгу', diff --git a/lang/ru/errors.php b/lang/ru/errors.php index 0ff14e9f5..1fe57af2f 100644 --- a/lang/ru/errors.php +++ b/lang/ru/errors.php @@ -10,7 +10,7 @@ return [ // Auth 'error_user_exists_different_creds' => 'Пользователь с электронной почтой :email уже существует, но с другими учетными данными.', - 'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details', + 'auth_pre_register_theme_prevention' => 'Пользователь не может быть зарегистрирован по предоставленной информации', 'email_already_confirmed' => 'Адрес электронной почты уже был подтвержден, попробуйте войти в систему.', 'email_confirmation_invalid' => 'Этот токен подтверждения недействителен или уже используется. Повторите попытку регистрации.', 'email_confirmation_expired' => 'Истек срок действия токена. Отправлено новое письмо с подтверждением.', @@ -43,16 +43,16 @@ return [ '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.', + 'server_post_limit' => 'Сервер не может получить указанный объем данных. Повторите попытку, используя меньшее количество данных или файл меньшего размера.', '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.', + 'image_upload_memory_limit' => 'Не удалось выполнить загрузку изображений и/или создать эскизы из-за ограничения системных ресурсов.', + 'image_thumbnail_memory_limit' => 'Не удалось создать вариации размера изображения из-за ограничений системных ресурсов.', + 'image_gallery_thumbnail_memory_limit' => 'Не удалось создать эскизы галереи из-за ограниченности системных ресурсов.', 'drawing_data_not_found' => 'Данные чертежа не могут быть загружены. Возможно, файл чертежа больше не существует или у вас нет разрешения на доступ к нему.', // Attachments diff --git a/lang/ru/notifications.php b/lang/ru/notifications.php index f37f11986..c5e98da80 100644 --- a/lang/ru/notifications.php +++ b/lang/ru/notifications.php @@ -10,10 +10,10 @@ return [ '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.', + 'updated_page_debounce' => 'Чтобы предотвратить массовые уведомления, в течение некоторого времени вы не будете получать уведомления о дальнейших правках этой страницы этим же редактором.', 'detail_page_name' => 'Имя страницы:', - 'detail_page_path' => 'Page Path:', + 'detail_page_path' => 'Путь страницы:', 'detail_commenter' => 'Комментатор:', 'detail_comment' => 'Комментарий:', 'detail_created_by' => 'Создано:', @@ -22,6 +22,6 @@ return [ 'action_view_comment' => 'Просмотреть комментарий', 'action_view_page' => 'Посмотреть страницу', - 'footer_reason' => 'This notification was sent to you because :link cover this type of activity for this item.', + 'footer_reason' => 'Это уведомление было отправлено, потому что :link покрывает этот тип активности для этого элемента.', 'footer_reason_link' => 'ваши настройки уведомлений', ]; diff --git a/lang/ru/preferences.php b/lang/ru/preferences.php index 1cfd1c24b..27217815d 100644 --- a/lang/ru/preferences.php +++ b/lang/ru/preferences.php @@ -8,7 +8,7 @@ return [ 'my_account' => 'Моя учетная запись', 'shortcuts' => 'Горячие клавиши', - 'shortcuts_interface' => 'UI Shortcut Preferences', + 'shortcuts_interface' => 'Настройки горячих клавиш', 'shortcuts_toggle_desc' => 'Здесь вы можете включить или отключить горячие клавиши системного интерфейса, используемые для навигации и действий.', 'shortcuts_customize_desc' => 'Вы можете настроить каждую из горячих клавиш ниже. Просто нажмите комбинацию клавиш после выбора вставки для горячих клавиш.', 'shortcuts_toggle_label' => 'Горячие клавиши включены', @@ -26,8 +26,8 @@ return [ 'notifications_opt_comment_replies' => 'Уведомлять об ответах на мои комментарии', 'notifications_save' => 'Сохранить настройки', 'notifications_update_success' => 'Настройки уведомлений были обновлены!', - '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_watched' => 'Просмотренные и игнорированные элементы', + 'notifications_watched_desc' => 'Ниже приведены элементы, которые имеют пользовательские настройки наблюдения. Чтобы обновить ваши предпочтения, посмотрите этот пункт и найдите варианты наблюдения в боковой панели.', 'auth' => 'Доступ и безопасность', 'auth_change_password' => 'Изменить пароль', @@ -35,9 +35,9 @@ return [ 'auth_change_password_success' => 'Пароль был обновлен!', 'profile' => 'Детали профиля', - '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_desc' => 'Управляйте деталями вашей учетной записи, что представляют вас другим пользователям, в дополнение к деталям, используемым для персонализации коммуникации и системы.', 'profile_view_public' => 'Просмотреть публичный профиль', - '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_name_desc' => 'Настройте отображаемое имя, видимое другим пользователям системы через действия, что вы выполняете, и контент, которым вы владеете.', 'profile_email_desc' => 'Этот адрес электронной почты будет использоваться для уведомлений и, в зависимости от активной системы аутентификации, для доступа к системе.', 'profile_email_no_permission' => 'К сожалению, у вас нет разрешения на изменение адреса электронной почты. Если вам действительно необходимо его изменить, нужно попросить администратора сделать это.', 'profile_avatar_desc' => 'Выберите изображение, которое будет использоваться для представления себя другим в системе. По возможности это изображение должно быть квадратным и около 256 пикселей по ширине и высоте.', diff --git a/lang/ru/settings.php b/lang/ru/settings.php index e78b2869f..238a1da6b 100644 --- a/lang/ru/settings.php +++ b/lang/ru/settings.php @@ -86,7 +86,7 @@ return [ 'maint_send_test_email' => 'Отправить тестовое письмо', 'maint_send_test_email_desc' => 'Отправить тестовое письмо на адрес электронной почты, указанный в профиле.', 'maint_send_test_email_run' => 'Отправить письмо', - 'maint_send_test_email_success' => 'На адрес :address отравлено письмо', + 'maint_send_test_email_success' => 'Письмо отправлено на :address', 'maint_send_test_email_mail_subject' => 'Проверка электронной почты', 'maint_send_test_email_mail_greeting' => 'Доставка электронной почты работает!', 'maint_send_test_email_mail_text' => 'Поздравляем! Поскольку вы получили это письмо, электронная почта настроена правильно.', @@ -109,7 +109,7 @@ return [ 'recycle_bin_contents_empty' => 'На данный момент корзина пуста', 'recycle_bin_empty' => 'Очистить корзину', 'recycle_bin_empty_confirm' => 'Это действие навсегда уничтожит все элементы в корзине, включая содержимое, содержащееся в каждом элементе. Вы уверены, что хотите очистить корзину?', - 'recycle_bin_destroy_confirm' => 'This action will permanently delete this item from the system, along with any child elements listed below, and you will not be able to restore this content. Are you sure you want to permanently delete this item?', + 'recycle_bin_destroy_confirm' => 'Это действие навсегда удалит этот элемент из системы, вместе с любыми дочерними элементами, перечисленными ниже, и вы не сможете восстановить этот контент. Вы уверены, что хотите навсегда удалить этот элемент?', 'recycle_bin_destroy_list' => 'Элементы для удаления', 'recycle_bin_restore_list' => 'Элементы для восстановления', 'recycle_bin_restore_confirm' => 'Это действие восстановит удаленный элемент, включая дочерние, в исходное место. Если исходное место было удалено и теперь находится в корзине, родительский элемент также необходимо будет восстановить.', @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Последняя ошибка:', 'webhooks_last_error_message' => 'Последнее сообщение об ошибке:', + // Licensing + 'licenses' => 'Лицензии', + 'licenses_desc' => 'Эта страница содержит сведения о лицензиях для BookStack в дополнение к проектам и библиотекам, которые используются в BookStack. Многие перечисленные проекты могут использоваться только в контексте разработки.', + 'licenses_bookstack' => 'Лицензия BookStack', + 'licenses_php' => 'Лицензии PHP библиотек', + 'licenses_js' => 'Лицензии JavaScript библиотек', + 'licenses_other' => 'Прочие лицензии', + 'license_details' => 'Подробности о лицензии', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/sk/activities.php b/lang/sk/activities.php index 2422ea7f6..6dad803e0 100644 --- a/lang/sk/activities.php +++ b/lang/sk/activities.php @@ -15,7 +15,7 @@ return [ 'page_restore' => 'obnovil(a) stránku', 'page_restore_notification' => 'Stránka úspešne obnovená', 'page_move' => 'presunul(a) stránku', - 'page_move_notification' => 'Page successfully moved', + 'page_move_notification' => 'Stránka bola úspešne presunutá', // Chapters 'chapter_create' => 'vytvoril(a) kapitolu', @@ -25,7 +25,7 @@ return [ 'chapter_delete' => 'odstránil(a) kapitolu', 'chapter_delete_notification' => 'Kapitola úspešne odstránená', 'chapter_move' => 'presunul(a) kapitolu', - 'chapter_move_notification' => 'Chapter successfully moved', + 'chapter_move_notification' => 'Kapitola bola úspešne presunutá', // Books 'book_create' => 'vytvoril(a) knihu', @@ -72,8 +72,8 @@ return [ 'mfa_remove_method_notification' => 'Viacúrovňový spôsob overenia úspešne odstránený', // Settings - 'settings_update' => 'updated settings', - 'settings_update_notification' => 'Settings successfully updated', + 'settings_update' => 'aktualizované nastavenia', + 'settings_update_notification' => 'Nastavenia boli úspešne aktualizované', 'maintenance_action_run' => 'ran maintenance action', // Webhooks @@ -85,11 +85,11 @@ return [ 'webhook_delete_notification' => 'Webhook úspešne odstránený', // Users - 'user_create' => 'created user', + 'user_create' => 'užívateľ vytvorený', 'user_create_notification' => 'User successfully created', - 'user_update' => 'updated user', + 'user_update' => 'používateľ aktualizovaný', 'user_update_notification' => 'Používateľ úspešne upravený', - 'user_delete' => 'deleted user', + 'user_delete' => 'odstránený používateľ', 'user_delete_notification' => 'Používateľ úspešne zmazaný', // API Tokens @@ -105,7 +105,7 @@ return [ 'role_create_notification' => 'Rola úspešne vytvorená', 'role_update' => 'updated role', 'role_update_notification' => 'Rola úspešne aktualizovaná', - 'role_delete' => 'deleted role', + 'role_delete' => 'odstrániť rolu', 'role_delete_notification' => 'Rola úspešne zmazaná', // Recycle Bin @@ -117,7 +117,7 @@ return [ 'commented_on' => 'komentoval(a)', 'comment_create' => 'added comment', 'comment_update' => 'updated comment', - 'comment_delete' => 'deleted comment', + 'comment_delete' => 'odstrániť komentár', // Other 'permissions_update' => 'aktualizované oprávnenia', diff --git a/lang/sk/preferences.php b/lang/sk/preferences.php index b3152848f..85da4f331 100644 --- a/lang/sk/preferences.php +++ b/lang/sk/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/sk/settings.php b/lang/sk/settings.php index b6beb5e6a..d2190f851 100644 --- a/lang/sk/settings.php +++ b/lang/sk/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Posledná chyba:', 'webhooks_last_error_message' => 'Posledná chybová správa:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/sl/activities.php b/lang/sl/activities.php index e82b174c9..027c17f87 100644 --- a/lang/sl/activities.php +++ b/lang/sl/activities.php @@ -93,11 +93,11 @@ return [ 'user_delete_notification' => 'Uporabnik uspešno izbrisan', // API Tokens - 'api_token_create' => 'created API token', + 'api_token_create' => 'ustvarjen žeton API', 'api_token_create_notification' => 'Žeton API uspešno ustvarjen', - 'api_token_update' => 'updated API token', + 'api_token_update' => 'posodobljen žeton API', 'api_token_update_notification' => 'Žeton API uspešno posodobljen', - 'api_token_delete' => 'deleted API token', + 'api_token_delete' => 'izbrisan žeton API', 'api_token_delete_notification' => 'Žeton API uspešno izbrisan', // Roles diff --git a/lang/sl/editor.php b/lang/sl/editor.php index de9aa0ece..b6f462eb5 100644 --- a/lang/sl/editor.php +++ b/lang/sl/editor.php @@ -7,105 +7,105 @@ */ 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' => 'Splošno', + 'advanced' => 'Napredno', + 'none' => 'Brez', + 'cancel' => 'Prekliči', + 'save' => 'Shrani', + 'close' => 'Zapri', + 'undo' => 'Razveljavi', + 'redo' => 'Ponovi', + 'left' => 'Levo', + 'center' => 'Sredinsko', + 'right' => 'Desno', + 'top' => 'Zgoraj', + 'middle' => 'Sredina', + 'bottom' => 'Spodaj', + 'width' => 'Širina', + 'height' => 'Višina', + 'More' => 'Več', + 'select' => 'Izberi ...', // 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', + 'formats' => 'Oblike', + 'header_large' => 'Velika glava', + 'header_medium' => 'Srednja glava', + 'header_small' => 'Majhna glava', + 'header_tiny' => 'Drobna glava', + 'paragraph' => 'Odstavek', + 'blockquote' => 'Navedek', + 'inline_code' => 'Vgrajena koda', + 'callouts' => 'Opombe', + 'callout_information' => 'Informacija', + 'callout_success' => 'Uspešno', + 'callout_warning' => 'Opozorilo', + 'callout_danger' => 'Nevarnost', + 'bold' => 'Krepko', + 'italic' => 'Ležeče', + 'underline' => 'Podčrtano', + 'strikethrough' => 'Prečrtano', + 'superscript' => 'Nadpisano', + 'subscript' => 'Podpisano', + 'text_color' => 'Barva besedila', + 'custom_color' => 'Barva po meri', + 'remove_color' => 'Odstrani barvo', + 'background_color' => 'Barva ozadja', + 'align_left' => 'Poravnaj levo', + 'align_center' => 'Poravnaj na sredino', + 'align_right' => 'Poravnaj desno', + 'align_justify' => 'Poravnaj obojestransko', + 'list_bullet' => 'Seznam z oznakami', + 'list_numbered' => 'Oštevilčen seznam', + 'list_task' => 'Seznam opravil', + 'indent_increase' => 'Povečaj zamik', + 'indent_decrease' => 'Zmanjšaj zamik', + 'table' => 'Tabela', + 'insert_image' => 'Vstavi sliko', + 'insert_image_title' => 'Vstavi/Obdelaj sliko', + 'insert_link' => 'Vstavi/Obdelaj povezavo', + 'insert_link_title' => 'Vstavi/obdelaj povezavo', + 'insert_horizontal_line' => 'Vstavi vodoravno črto', 'insert_code_block' => 'Insert code block', 'edit_code_block' => 'Edit code block', - 'insert_drawing' => 'Insert/edit drawing', + 'insert_drawing' => 'Vstavi/Obdelaj risbo', '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', + 'clear_formatting' => 'Odstrani oblikovanje', + 'source_code' => 'Izvorna koda', + 'source_code_title' => 'Izvorna koda', + 'fullscreen' => 'Celozaslonski način', + 'image_options' => 'Možnosti za slike', // Tables - 'table_properties' => 'Table properties', - 'table_properties_title' => 'Table Properties', - 'delete_table' => 'Delete table', - 'table_clear_formatting' => 'Clear table formatting', - 'resize_to_contents' => 'Resize to contents', - 'row_header' => 'Row header', - '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', + 'table_properties' => 'Lastnosti tabele', + 'table_properties_title' => 'Lastnosti tabele', + 'delete_table' => 'Izbriši tabelo', + 'table_clear_formatting' => 'Odstrani oblikovanje tabele', + 'resize_to_contents' => 'Prilagodi vsebini', + 'row_header' => 'Glava vrstice', + 'insert_row_before' => 'Vstavi vrstico pred', + 'insert_row_after' => 'Vstavi vrstico po', + 'delete_row' => 'Izbriši vrstico', + 'insert_column_before' => 'Vstavi stolpec pred', + 'insert_column_after' => 'Vstavi stolpec po', + 'delete_column' => 'Izbriši stolpec', + 'table_cell' => 'Celica', + 'table_row' => 'Vrstica', + 'table_column' => 'Stolpec', + 'cell_properties' => 'Lastnosti celice', + 'cell_properties_title' => 'Lastnosti celice', + 'cell_type' => 'Vrsta celice', + 'cell_type_cell' => 'Celica', + 'cell_scope' => 'Obseg', + 'cell_type_header' => 'Naslovna celica', + 'merge_cells' => 'Združi celice', + 'split_cell' => 'Razdeli celice', + 'table_row_group' => 'Skupina vrstic', + 'table_column_group' => 'Skupina stolpcev', + 'horizontal_align' => 'Vodoravna poravnava', + 'vertical_align' => 'Navpična poravnava', + 'border_width' => 'Debelina roba', 'border_style' => 'Border style', 'border_color' => 'Border color', 'row_properties' => 'Row properties', @@ -153,25 +153,25 @@ return [ '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', + 'collapsible_unwrap' => 'Odpri', + 'edit_label' => 'Uredi oznako', + 'toggle_open_closed' => 'Odpri/Zapri', + 'collapsible_edit' => 'Uredi zložljivi blok', + 'toggle_label' => 'Preklopi oznako', // 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' => 'O urejevalniku', + 'about_title' => 'O Urejevalniku WYSIWYG', + 'editor_license' => 'Licenca in avtorske pravice Urejevalnika', + 'editor_tiny_license' => 'Urejevalnik je ustvarjen z uporabo :tinyLink pod pogoji licence MIT.', + 'editor_tiny_license_link' => 'Podrobnosti o avtorskih pravicah in licenci za TinyMCE lahko preberete tukaj.', + 'save_continue' => 'Shrani stran in Nadaljuj', + 'callouts_cycle' => '(Večkrat pritisnite, da preklopite med vrstami opomb)', + 'link_selector' => 'Povezava do vsebine', + 'shortcuts' => 'Bližnjice', + 'shortcut' => 'Bližnjica', + 'shortcuts_intro' => 'Sledeče bližnjice so na voljo v urejevalniku:', 'windows_linux' => '(Windows/Linux)', 'mac' => '(Mac)', - 'description' => 'Description', + 'description' => 'Opis', ]; diff --git a/lang/sl/preferences.php b/lang/sl/preferences.php index 2b88f9671..2872f5f3c 100644 --- a/lang/sl/preferences.php +++ b/lang/sl/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/sl/settings.php b/lang/sl/settings.php index 272f1b114..72a45a14b 100644 --- a/lang/sl/settings.php +++ b/lang/sl/settings.php @@ -277,6 +277,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Last Error Message:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/sl/validation.php b/lang/sl/validation.php index 92060dd6d..012bfe4a7 100644 --- a/lang/sl/validation.php +++ b/lang/sl/validation.php @@ -12,10 +12,10 @@ return [ 'active_url' => ':attribute ni veljaven URL.', 'after' => ':attribute mora biti datum po :date.', 'alpha' => ':attribute lahko vsebuje samo črke.', - 'alpha_dash' => ':attribute lahko vsebuje samo ?rke, ?tevilke in ?rtice.', + 'alpha_dash' => ':attribute lahko vsebuje samo črke, številke, pomišljaje in podčrtaje.', 'alpha_num' => ':attribute lahko vsebuje samo črke in številke.', 'array' => ':attribute mora biti niz.', - 'backup_codes' => 'The provided code is not valid or has already been used.', + 'backup_codes' => 'Podana koda ni veljavna ali je že uporabljena.', 'before' => ':attribute mora biti datum pred :date.', 'between' => [ 'numeric' => ':attribute mora biti med :min in :max.', @@ -32,7 +32,7 @@ return [ 'digits_between' => ':attribute mora biti med :min in :max števkami.', 'email' => ':attribute mora biti veljaven e-naslov.', 'ends_with' => 'The :attribute se mora končati z eno od določenih: :vrednost/values', - 'file' => 'The :attribute must be provided as a valid file.', + 'file' => ':attribute ni veljavna datoteka.', 'filled' => 'Polje ne sme biti prazno.', 'gt' => [ 'numeric' => ':attribute mora biti večji kot :vrednost.', @@ -100,7 +100,7 @@ return [ ], 'string' => ':attribute mora biti niz.', 'timezone' => ':attribute mora biti veljavna cona.', - 'totp' => 'The provided code is not valid or has expired.', + 'totp' => 'Podana koda ni veljavna ali je zapadla.', 'unique' => ':attribute je že zaseden.', 'url' => ':attribute oblika ni veljavna.', 'uploaded' => 'Datoteke ni bilo mogoče naložiti. Strežnik morda ne sprejema datotek te velikosti.', diff --git a/lang/sq/preferences.php b/lang/sq/preferences.php index 2b88f9671..2872f5f3c 100644 --- a/lang/sq/preferences.php +++ b/lang/sq/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/sq/settings.php b/lang/sq/settings.php index 7b7f5d2a2..f4c84092c 100644 --- a/lang/sq/settings.php +++ b/lang/sq/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Last Error Message:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/sr/editor.php b/lang/sr/editor.php index ad670af98..b376e542c 100644 --- a/lang/sr/editor.php +++ b/lang/sr/editor.php @@ -102,58 +102,58 @@ return [ 'merge_cells' => 'Обједини ћелије', 'split_cell' => 'Подели ћелију', 'table_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', + 'table_column_group' => 'Група колона', + 'horizontal_align' => 'Хоризонтално поравнање', + 'vertical_align' => 'Вертикално поравнати', + 'border_width' => 'Ширина ивице', + 'border_style' => 'Стил ивице', + 'border_color' => 'Боја ивице', + 'row_properties' => 'Својства реда', + 'row_properties_title' => 'Својства реда', + 'cut_row' => 'Пресеци ред', + 'copy_row' => 'Копирај ред', + 'paste_row_before' => 'Налепите ред пре', + 'paste_row_after' => 'Налепите ред после', + 'row_type' => 'Врста реда', + 'row_type_header' => 'Заглавље', + 'row_type_body' => 'Садржај', + 'row_type_footer' => 'Подножје', + 'alignment' => 'Поравнавање', + 'cut_column' => 'Изрежите колону', + 'copy_column' => 'Копирај колону', + 'paste_column_before' => 'Налепите колону пре', + 'paste_column_after' => 'Налепите колону после', + 'cell_padding' => 'Попуна ћелија', + 'cell_spacing' => 'Размак ћелија', + 'caption' => 'Опис', + 'show_caption' => 'Прикажи титл', + 'constrain' => 'Ограничавају размере', + 'cell_border_solid' => 'Чврсто тело', + 'cell_border_dotted' => 'Тачкасто', + 'cell_border_dashed' => 'Испрекидана', + 'cell_border_double' => 'Двострук', + 'cell_border_groove' => 'Жлеб', + 'cell_border_ridge' => 'Гребен', + 'cell_border_inset' => 'Уметак', + 'cell_border_outset' => 'Почетак', + 'cell_border_none' => 'Без', + 'cell_border_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', + 'source' => 'Извор', + 'alt_desc' => 'Алтернативни опис', + 'embed' => 'Угради', + 'paste_embed' => 'Налепите свој код за уградњу испод:', + 'url' => 'УРЛ', + 'text_to_display' => 'Текст за приказ', + 'title' => 'Наслов', + 'open_link' => 'Отвори везу', + 'open_link_in' => 'Отвори везу у...', + 'open_link_current' => 'Тренутни прозор', + 'open_link_new' => 'Нови Прозор', + 'remove_link' => 'Уклони везу', + 'insert_collapsible' => 'Уредите склопиви блок', + 'collapsible_unwrap' => 'Одмотати', 'edit_label' => 'Уреди ознаку', 'toggle_open_closed' => 'Отварање/затварање', 'collapsible_edit' => 'Уредите склопиви блок', @@ -166,12 +166,12 @@ return [ 'editor_tiny_license' => 'Овај уређивач је направљен помоћу :tinyLink који је обезбеђен под МИТ лиценцом.', 'editor_tiny_license_link' => 'Детаље о ауторским правима и лиценци за ТиниМЦЕ можете пронаћи овде.', 'save_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:', + 'callouts_cycle' => '(Наставите да притискате да бисте прелазили између типова)', + 'link_selector' => 'Линк до садржаја', + 'shortcuts' => 'Пречице', + 'shortcut' => 'Пречица', + 'shortcuts_intro' => 'Следеће пречице су доступне у уређивачу:', 'windows_linux' => '(Windows/Linux)', 'mac' => '(Mac)', - 'description' => 'Description', + 'description' => 'Опис', ]; diff --git a/lang/sr/preferences.php b/lang/sr/preferences.php index 2b88f9671..2872f5f3c 100644 --- a/lang/sr/preferences.php +++ b/lang/sr/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/sr/settings.php b/lang/sr/settings.php index 5d02cc89a..3ae7d7607 100644 --- a/lang/sr/settings.php +++ b/lang/sr/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Last Error Message:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/sv/preferences.php b/lang/sv/preferences.php index 9ca2c40b7..e06c0fbaa 100644 --- a/lang/sv/preferences.php +++ b/lang/sv/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/sv/settings.php b/lang/sv/settings.php index 30b099977..3ce6567b0 100644 --- a/lang/sv/settings.php +++ b/lang/sv/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Senast felande:', 'webhooks_last_error_message' => 'Senaste felmeddelande:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/tr/preferences.php b/lang/tr/preferences.php index 94a25df73..1ce7b01fd 100644 --- a/lang/tr/preferences.php +++ b/lang/tr/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/tr/settings.php b/lang/tr/settings.php index 6daca434e..36c52e52a 100644 --- a/lang/tr/settings.php +++ b/lang/tr/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Last Errored:', 'webhooks_last_error_message' => 'Son Hata Mesajı:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/uk/activities.php b/lang/uk/activities.php index f7d6d284c..1ab0eca61 100644 --- a/lang/uk/activities.php +++ b/lang/uk/activities.php @@ -93,11 +93,11 @@ return [ 'user_delete_notification' => 'Користувача успішно видалено', // API Tokens - 'api_token_create' => 'created API token', + 'api_token_create' => 'створений APi токен', 'api_token_create_notification' => 'API токен успішно створений', - 'api_token_update' => 'updated API token', + 'api_token_update' => 'оновлено API токен', 'api_token_update_notification' => 'Токен API успішно оновлено', - 'api_token_delete' => 'deleted API token', + 'api_token_delete' => 'видалено API токен', 'api_token_delete_notification' => 'API-токен успішно видалено', // Roles diff --git a/lang/uk/common.php b/lang/uk/common.php index c173e81d2..6e372914c 100644 --- a/lang/uk/common.php +++ b/lang/uk/common.php @@ -20,7 +20,7 @@ return [ 'description' => 'Опис', 'role' => 'Роль', 'cover_image' => 'Обкладинка', - 'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.', + 'cover_image_description' => 'Це зображення має бути приблизно 440х250пікс, щоб його було легко масштабувати та обводити відповідно до інтерфейсу користувача у різних сценаріях, як це необхідно, тому реальні розміри для відображення відрізняються.', // Actions 'actions' => 'Дії', diff --git a/lang/uk/editor.php b/lang/uk/editor.php index fb0d420b7..176f7fab7 100644 --- a/lang/uk/editor.php +++ b/lang/uk/editor.php @@ -81,9 +81,9 @@ return [ 'table_properties' => 'Властивості таблиці', 'table_properties_title' => 'Властивості таблиці', 'delete_table' => 'Видалити таблицю', - 'table_clear_formatting' => 'Clear table formatting', - 'resize_to_contents' => 'Resize to contents', - 'row_header' => 'Row header', + 'table_clear_formatting' => 'Очистити форматування таблиці', + 'resize_to_contents' => 'Змінити розмір до вмісту', + 'row_header' => 'Заголовок рядка', 'insert_row_before' => 'Вставити рядок перед', 'insert_row_after' => 'Вставити рядок після', 'delete_row' => 'Видалити рядок', diff --git a/lang/uk/entities.php b/lang/uk/entities.php index c26848d75..f2af67768 100644 --- a/lang/uk/entities.php +++ b/lang/uk/entities.php @@ -39,9 +39,9 @@ return [ 'export_pdf' => 'PDF файл', 'export_text' => 'Текстовий файл', 'export_md' => 'Файл розмітки', - 'default_template' => 'Default Page Template', - 'default_template_explain' => 'Assign a page template that will be used as the default content for all pages created within this item. Keep in mind this will only be used if the page creator has view access to the chosen template page.', - 'default_template_select' => 'Select a template page', + 'default_template' => 'Типовий шаблон сторінки', + 'default_template_explain' => 'Призначити шаблон сторінки, який буде використовуватися як типовий вміст для всіх сторінок, створених у цьому елементі. Майте на увазі, що ця сторінка буде використана лише у випадку, якщо вона має доступ до обраної сторінки шаблону.', + 'default_template_select' => 'Виберіть сторінку шаблону', // Permissions and restrictions 'permissions' => 'Дозволи', @@ -207,7 +207,7 @@ return [ 'pages_delete_draft' => 'Видалити чернетку', 'pages_delete_success' => 'Сторінка видалена', 'pages_delete_draft_success' => 'Чернетка видалена', - 'pages_delete_warning_template' => 'This page is in active use as a book or chapter default page template. These books or chapters will no longer have a default page template assigned after this page is deleted.', + 'pages_delete_warning_template' => 'Ця сторінка використовується в якості шаблону сторінки за промовчанням. У цих книгах або розділах більше не буде встановлено шаблон стандартної сторінки, який використовується після того, як ця сторінка буде видалена.', 'pages_delete_confirm' => 'Ви впевнені, що хочете видалити цю сторінку?', 'pages_delete_draft_confirm' => 'Ви впевнені, що хочете видалити цю чернетку?', 'pages_editing_named' => 'Редагування сторінки :pageName', diff --git a/lang/uk/errors.php b/lang/uk/errors.php index ece86cf89..92d91c183 100644 --- a/lang/uk/errors.php +++ b/lang/uk/errors.php @@ -10,7 +10,7 @@ return [ // Auth 'error_user_exists_different_creds' => 'Користувач з електронною адресою: електронна адреса вже існує, але з іншими обліковими даними.', - 'auth_pre_register_theme_prevention' => 'User account could not be registered for the provided details', + 'auth_pre_register_theme_prevention' => 'Обліковий запис користувача не може бути зареєстрований за наданими деталями', 'email_already_confirmed' => 'Електронна пошта вже підтверджена, спробуйте увійти.', 'email_confirmation_invalid' => 'Цей токен підтвердження недійсний або вже був використаний, будь ласка, спробуйте знову зареєструватися.', 'email_confirmation_expired' => 'Термін дії токена підтвердження минув, новий електронний лист підтвердження був відправлений.', diff --git a/lang/uk/preferences.php b/lang/uk/preferences.php index 2383c6793..14989d2a7 100644 --- a/lang/uk/preferences.php +++ b/lang/uk/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => 'Зберегти налаштування', 'notifications_update_success' => 'Налаштування сповіщень було оновлено!', 'notifications_watched' => 'Переглянуті та ігноровані елементи', - 'notifications_watched_desc' => ' Нижче наведені предмети, які мають застосовані налаштування перегляду. Щоб оновити ваші налаштування для них, перегляньте елемент, а потім знайдіть параметри перегляду на бічній панелі.', + 'notifications_watched_desc' => 'Нижче наведені предмети, які мають застосовані налаштування перегляду. Щоб оновити ваші налаштування для них, перегляньте елемент, а потім знайдіть параметри перегляду на бічній панелі.', 'auth' => 'Доступ і безпека', 'auth_change_password' => 'Змінити пароль', diff --git a/lang/uk/settings.php b/lang/uk/settings.php index 3aaed0ef4..fb04a2930 100644 --- a/lang/uk/settings.php +++ b/lang/uk/settings.php @@ -109,7 +109,7 @@ return [ 'recycle_bin_contents_empty' => 'Зараз кошик порожній', 'recycle_bin_empty' => 'Очистити кошик', 'recycle_bin_empty_confirm' => 'Це назавжди знищить усі елементи в кошику, включаючи вміст кожного елементу. Ви впевнені, що хочете очистити кошик?', - 'recycle_bin_destroy_confirm' => 'This action will permanently delete this item from the system, along with any child elements listed below, and you will not be able to restore this content. Are you sure you want to permanently delete this item?', + 'recycle_bin_destroy_confirm' => 'Ця дія назавжди видалить цей елемент з системи, разом з будь-яким дочірнім елементом, перерахованим нижче, і ви не зможете відновити цей контент. Ви дійсно бажаєте остаточно видалити цей елемент?', 'recycle_bin_destroy_list' => 'Елементи для знищення', 'recycle_bin_restore_list' => 'Елементи для відновлення', 'recycle_bin_restore_confirm' => 'Ця дія відновить видалений елемент у початкове місце, включаючи всі дочірні елементи. Якщо вихідне розташування відтоді було видалено, і знаходиться у кошику, батьківський елемент також потрібно буде відновити.', @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Остання помилка:', 'webhooks_last_error_message' => 'Останнє повідомлення про помилку:', + // Licensing + 'licenses' => 'Ліцензії', + 'licenses_desc' => 'На цій сторінці детально описано ліцензійну інформацію для BookStack на додаток до проектів і бібліотек, які використовуються в BookStack. Багато проектів із списку можна використовувати лише в контексті розробки.', + 'licenses_bookstack' => 'Ліцензія BookStack', + 'licenses_php' => 'Ліцензії на бібліотеки PHP', + 'licenses_js' => 'Ліцензії бібліотеки JavaScript', + 'licenses_other' => 'Інші ліцензії', + 'license_details' => 'Про ліцензію', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/uz/preferences.php b/lang/uz/preferences.php index 9dedb0fb5..de36b953e 100644 --- a/lang/uz/preferences.php +++ b/lang/uz/preferences.php @@ -27,7 +27,7 @@ return [ '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.', + '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.', 'auth' => 'Access & Security', 'auth_change_password' => 'Change Password', diff --git a/lang/uz/settings.php b/lang/uz/settings.php index 07bbb2485..0d7c0415b 100644 --- a/lang/uz/settings.php +++ b/lang/uz/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Oxirgi xato:', 'webhooks_last_error_message' => 'Oxirgi xato xabari:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/vi/preferences.php b/lang/vi/preferences.php index 8c5fc5230..76bc0be16 100644 --- a/lang/vi/preferences.php +++ b/lang/vi/preferences.php @@ -27,7 +27,7 @@ return [ '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_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', diff --git a/lang/vi/settings.php b/lang/vi/settings.php index 3ffb37fd3..a15128c2b 100644 --- a/lang/vi/settings.php +++ b/lang/vi/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => 'Lần cuối xảy ra lỗi:', 'webhooks_last_error_message' => 'Nội dung lỗi gần nhất:', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack License', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => 'Other Licenses', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/zh_CN/preferences.php b/lang/zh_CN/preferences.php index 0b5044137..f1ef3957d 100644 --- a/lang/zh_CN/preferences.php +++ b/lang/zh_CN/preferences.php @@ -27,7 +27,7 @@ return [ 'notifications_save' => '保存偏好设置', 'notifications_update_success' => '通知偏好设置已更新!', 'notifications_watched' => '已关注和忽略的项目', - 'notifications_watched_desc' => ' 下面是已应用自定义关注选项的项目。要更新您的关注设置,请查看该项目,然后在该项目的侧边栏中找到关注选项。', + 'notifications_watched_desc' => '下面是已应用自定义关注选项的项目。要更新您的关注设置,请查看该项目,然后在该项目的侧边栏中找到关注选项。', 'auth' => '访问与安全', 'auth_change_password' => '更改密码', diff --git a/lang/zh_CN/settings.php b/lang/zh_CN/settings.php index 4bf868af6..f5fcacdf1 100644 --- a/lang/zh_CN/settings.php +++ b/lang/zh_CN/settings.php @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => '最后一个错误:', 'webhooks_last_error_message' => '最后一个错误消息:', + // Licensing + 'licenses' => '许可证', + 'licenses_desc' => '除了 BookStack 中使用的项目和库之外,此页面还详细介绍了 BookStack 的许可证信息。列出的许多项目只能在开发环境中使用。', + 'licenses_bookstack' => 'BookStack 许可证', + 'licenses_php' => 'PHP 库许可证', + 'licenses_js' => 'JavaScript 库许可证', + 'licenses_other' => '其他许可证', + 'license_details' => '许可证细节', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/lang/zh_TW/activities.php b/lang/zh_TW/activities.php index 597131e77..dddca399a 100644 --- a/lang/zh_TW/activities.php +++ b/lang/zh_TW/activities.php @@ -50,31 +50,31 @@ return [ 'bookshelf_delete_notification' => '書棧已刪除', // Revisions - 'revision_restore' => 'restored revision', - 'revision_delete' => 'deleted revision', - 'revision_delete_notification' => 'Revision successfully deleted', + 'revision_restore' => '還原的版本', + 'revision_delete' => '刪除的版本', + 'revision_delete_notification' => '修訂已成功刪除', // Favourites 'favourite_add_notification' => '":name" 已加入到你的最愛', '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' => '建立 Webhook', @@ -85,39 +85,39 @@ return [ 'webhook_delete_notification' => 'Webhook 已刪除成功', // Users - 'user_create' => 'created user', - 'user_create_notification' => 'User successfully created', - 'user_update' => 'updated user', + 'user_create' => '建立使用者', + 'user_create_notification' => '使用者已成功建立。', + '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_restore' => 'restored from recycle bin', - 'recycle_bin_destroy' => 'removed from 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/zh_TW/common.php b/lang/zh_TW/common.php index 72f5969b8..1532d69dd 100644 --- a/lang/zh_TW/common.php +++ b/lang/zh_TW/common.php @@ -20,7 +20,7 @@ return [ 'description' => '描述', 'role' => '角色', 'cover_image' => '封面圖片', - 'cover_image_description' => 'This image should be approximately 440x250px although it will be flexibly scaled & cropped to fit the user interface in different scenarios as required, so actual dimensions for display will differ.', + 'cover_image_description' => '雖然圖片會在不同情境下自動調整顯示方式,但應接近 440x250 像素', // Actions 'actions' => '動作', diff --git a/lang/zh_TW/entities.php b/lang/zh_TW/entities.php index 3eb77f030..44f6e4754 100644 --- a/lang/zh_TW/entities.php +++ b/lang/zh_TW/entities.php @@ -327,7 +327,7 @@ return [ 'attachments_explain_instant_save' => '此處的變動將會立刻儲存。', 'attachments_upload' => '上傳檔案', 'attachments_link' => '附加連結', - 'attachments_upload_drop' => 'Alternatively you can drag and drop a file here to upload it as an attachment.', + 'attachments_upload_drop' => '你也可以將檔案拖曳到此來上傳附加檔案', 'attachments_set_link' => '設定連結', 'attachments_delete' => '您確定要刪除此附件嗎?', 'attachments_dropzone' => 'Drop files here to upload', @@ -379,7 +379,7 @@ return [ 'comment_updated_success' => '評論已更新', 'comment_delete_confirm' => '您確定要刪除這則評論?', 'comment_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_editor_explain' => '此為頁面上的評論。在查看檢視與儲存頁面的同時,可以新增和管理評論。', // Revision 'revision_delete_confirm' => '您確定要刪除此修訂版本嗎?', @@ -412,7 +412,7 @@ return [ 'references_to_desc' => 'Listed below is all the known content in the system that links to this item.', // Watch Options - 'watch' => 'Watch', + 'watch' => '追蹤', 'watch_title_default' => '預設偏好設定', 'watch_desc_default' => 'Revert watching to just your default notification preferences.', 'watch_title_ignore' => 'Ignore', diff --git a/lang/zh_TW/errors.php b/lang/zh_TW/errors.php index 4345d1613..05f7b035c 100644 --- a/lang/zh_TW/errors.php +++ b/lang/zh_TW/errors.php @@ -49,7 +49,7 @@ return [ // 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.', diff --git a/lang/zh_TW/preferences.php b/lang/zh_TW/preferences.php index 9bed83fd1..4900ca152 100644 --- a/lang/zh_TW/preferences.php +++ b/lang/zh_TW/preferences.php @@ -5,10 +5,10 @@ */ return [ - 'my_account' => 'My Account', + 'my_account' => '帳號設定', 'shortcuts' => '快捷鍵', - 'shortcuts_interface' => 'UI Shortcut Preferences', + 'shortcuts_interface' => '快速鍵設定', 'shortcuts_toggle_desc' => '您可以在此處啟用或停用鍵盤系統介面快捷鍵,這些快捷鍵用於導覽與操作。', 'shortcuts_customize_desc' => '您可以自訂下方的每個快捷鍵。只要在選取快捷鍵輸入後按下您想要使用的按鍵組合即可。', 'shortcuts_toggle_label' => '鍵盤快捷鍵已啟用', @@ -17,35 +17,35 @@ return [ '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' => '通知設定', + 'notifications_desc' => '控制在系統有特定活動時,是否要接收電子郵件通知', + 'notifications_opt_own_page_changes' => '當我的頁面有異動時發送通知', + 'notifications_opt_own_page_comments' => '當我的頁面有評論時發送通知', + 'notifications_opt_comment_replies' => '當我的評論有新的回覆時發送通知', '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.', + 'notifications_update_success' => '通知設定已更新', + 'notifications_watched' => '追蹤與忽略的項目', + 'notifications_watched_desc' => '以下是已經套用自訂追蹤設定的項目。若要調整,請至該項目側邊欄中的「追蹤」更新設定', - '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!', + 'auth' => '存取、安全', + 'auth_change_password' => '變更密碼', + 'auth_change_password_desc' => '修改登入時使用的密碼,密碼長度至少需要有 8 個字', + 'auth_change_password_success' => '密碼已更新', - '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.', + 'profile' => '個人檔案', + 'profile_desc' => '管理欲呈現給其他使用的個人資料,另外資料也用於交流與系統個人化', + 'profile_view_public' => '檢視公開的個人檔案', + 'profile_name_desc' => '設定欲公開顯示的名稱,系統中的其他使用者將會透過內容、活動記錄看到您設定的名稱', + 'profile_email_desc' => 'Email 將用於使用者通知以及系統存取授權 (若有啟用)', + 'profile_email_no_permission' => '很遺憾您沒有權限變更您的 email,如果有需要,請洽詢系統管理員協助變更 email', + 'profile_avatar_desc' => ' 選一張圖片供顯示給其他使用者看,理想的圖片大小為 256x256 像素', + 'profile_admin_options' => '管理選項', + 'profile_admin_options_desc' => '系統管理層選項可在「設定」=>「使用者」找到,像是角色管理等', - '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?', + 'delete_account' => '刪除帳號', + 'delete_my_account' => '刪除我的帳號', + 'delete_my_account_desc' => '將從系統中刪除所有帳號資料,此動作無法復原。你所建立的內容、頁面以及上傳的圖片將會保留。', + 'delete_my_account_warning' => '您確定要刪除您的帳戶嗎?', ]; diff --git a/lang/zh_TW/settings.php b/lang/zh_TW/settings.php index df7b0821b..938a1000c 100644 --- a/lang/zh_TW/settings.php +++ b/lang/zh_TW/settings.php @@ -34,7 +34,7 @@ return [ 'app_logo' => '應用程式圖示', 'app_logo_desc' => '這個設定會被使用在應用程式標題欄等區域;圖片的高度應為 86 像素,大型圖片將會按比例縮小。', 'app_icon' => '應用程式圖示', - 'app_icon_desc' => 'This icon is used for browser tabs and shortcut icons. This should be a 256px square PNG image.', + 'app_icon_desc' => '這個圖示將顯示在瀏覽器分頁以及捷徑,應為 256 像素的的正方形 PNG 圖片', 'app_homepage' => '應用程式首頁', 'app_homepage_desc' => '選取要作為首頁的頁面,這將會取代預設首頁。選定頁面的頁面權限將會被忽略。', 'app_homepage_select' => '選取頁面', @@ -276,6 +276,14 @@ return [ 'webhooks_last_errored' => '上次錯誤', 'webhooks_last_error_message' => '上次錯誤信息', + // Licensing + 'licenses' => 'Licenses', + 'licenses_desc' => 'This page details license information for BookStack in addition to the projects & libraries that are used within BookStack. Many projects listed may only be used in a development context.', + 'licenses_bookstack' => 'BookStack 授權', + 'licenses_php' => 'PHP Library Licenses', + 'licenses_js' => 'JavaScript Library Licenses', + 'licenses_other' => '其它授權', + 'license_details' => 'License Details', //! If editing translations files directly please ignore this in all //! languages apart from en. Content will be auto-copied from en. diff --git a/package-lock.json b/package-lock.json index 134911378..63b0d2478 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "@ssddanbrown/codemirror-lang-twig": "^1.0.0", "codemirror": "^6.0.1", "idb-keyval": "^6.2.1", - "markdown-it": "^13.0.2", + "markdown-it": "^14.1.0", "markdown-it-task-lists": "^2.1.1", "snabbdom": "^3.5.1", "sortablejs": "^1.15.1" @@ -37,7 +37,6 @@ "eslint-plugin-import": "^2.29.0", "livereload": "^0.9.3", "npm-run-all": "^4.1.5", - "punycode": "^2.3.1", "sass": "^1.69.5" } }, @@ -51,9 +50,9 @@ } }, "node_modules/@codemirror/autocomplete": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.12.0.tgz", - "integrity": "sha512-r4IjdYFthwbCQyvqnSlx0WBHRHi8nBvU+WjJxFUij81qsBfhNudf/XKKmmC2j3m0LaOYUQTf3qiEK1J8lO1sdg==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.15.0.tgz", + "integrity": "sha512-G2Zm0mXznxz97JhaaOdoEG2cVupn4JjPaS4AcNvZzhOsnnG9YVN68VzfoUw6dYTsIxT6a/cmoFEN47KAWhXaOg==", "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -156,13 +155,14 @@ } }, "node_modules/@codemirror/lang-xml": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.0.2.tgz", - "integrity": "sha512-JQYZjHL2LAfpiZI2/qZ/qzDuSqmGKMwyApYmEUUCTxLM4MWS7sATUEfIguZQr9Zjx/7gcdnewb039smF6nC2zw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz", + "integrity": "sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==", "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", "@lezer/common": "^1.0.0", "@lezer/xml": "^1.0.0" } @@ -181,9 +181,9 @@ } }, "node_modules/@codemirror/legacy-modes": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-6.3.3.tgz", - "integrity": "sha512-X0Z48odJ0KIoh/HY8Ltz75/4tDYc9msQf1E/2trlxFaFFhgjpVHjZ/BCXe1Lk7s4Gd67LL/CeEEHNI+xHOiESg==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-6.4.0.tgz", + "integrity": "sha512-5m/K+1A6gYR0e+h/dEde7LoGimMjRtWXZFg4Lo70cc8HzjSdHe3fLwjWMR0VRl5KFT1SxalSap7uMgPKF28wBA==", "dependencies": { "@codemirror/language": "^6.0.0" } @@ -225,9 +225,9 @@ } }, "node_modules/@codemirror/view": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.24.1.tgz", - "integrity": "sha512-sBfP4rniPBRQzNakwuQEqjEuiJDWJyF2kqLLqij4WXRoVwPPJfjx966Eq3F7+OPQxDtMt/Q9MWLoZLWjeveBlg==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.26.1.tgz", + "integrity": "sha512-wLw0t3R9AwOSQThdZ5Onw8QQtem5asE7+bPlnzc57eubPqiuJKIzwjMZ+C42vQett+iva+J8VgFV4RYWDBh5FA==", "dependencies": { "@codemirror/state": "^6.4.0", "style-mod": "^4.1.0", @@ -235,9 +235,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", - "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "cpu": [ "ppc64" ], @@ -251,9 +251,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", - "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "cpu": [ "arm" ], @@ -267,9 +267,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", - "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "cpu": [ "arm64" ], @@ -283,9 +283,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", - "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "cpu": [ "x64" ], @@ -299,9 +299,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", - "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "cpu": [ "arm64" ], @@ -315,9 +315,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", - "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "cpu": [ "x64" ], @@ -331,9 +331,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", - "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "cpu": [ "arm64" ], @@ -347,9 +347,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", - "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "cpu": [ "x64" ], @@ -363,9 +363,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", - "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", "cpu": [ "arm" ], @@ -379,9 +379,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", - "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", "cpu": [ "arm64" ], @@ -395,9 +395,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", - "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", "cpu": [ "ia32" ], @@ -411,9 +411,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", - "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", "cpu": [ "loong64" ], @@ -427,9 +427,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", - "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", "cpu": [ "mips64el" ], @@ -443,9 +443,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", - "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", "cpu": [ "ppc64" ], @@ -459,9 +459,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", - "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", "cpu": [ "riscv64" ], @@ -475,9 +475,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", - "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", "cpu": [ "s390x" ], @@ -491,9 +491,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", - "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", "cpu": [ "x64" ], @@ -507,9 +507,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", - "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", "cpu": [ "x64" ], @@ -523,9 +523,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", - "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", "cpu": [ "x64" ], @@ -539,9 +539,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", - "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", "cpu": [ "x64" ], @@ -555,9 +555,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", - "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", "cpu": [ "arm64" ], @@ -571,9 +571,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", - "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", "cpu": [ "ia32" ], @@ -587,9 +587,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", - "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "cpu": [ "x64" ], @@ -650,9 +650,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -686,9 +686,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@lezer/common": { @@ -707,9 +707,9 @@ } }, "node_modules/@lezer/generator": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@lezer/generator/-/generator-1.6.0.tgz", - "integrity": "sha512-mDwFNchv4jBEoZBaZbr5GlKR7BM6W/ZanTOZN6p4avuzcmYHTZ0nIbwtBqvXoeBrqmFSvL2zHL5TX9FWkXKc2w==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@lezer/generator/-/generator-1.7.0.tgz", + "integrity": "sha512-IJ16tx3biLKlCXUzcK4v8S10AVa2BSM2rB12rtAL6f1hL2TS/HQQlGCoWRvanlL2J4mCYEEIv9uG7n4kVMkVDA==", "dev": true, "dependencies": { "@lezer/common": "^1.1.0", @@ -728,9 +728,9 @@ } }, "node_modules/@lezer/html": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.8.tgz", - "integrity": "sha512-EXseJ3pUzWxE6XQBQdqWHZqqlGQRSuNMBcLb6mZWS2J2v+QZhOObD+3ZIKIcm59ntTzyor4LqFTb72iJc3k23Q==", + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.9.tgz", + "integrity": "sha512-MXxeCMPyrcemSLGaTQEZx0dBUH0i+RPl8RN5GwMAzo53nTsd/Unc/t5ZxACeQoyPUM5/GkPLRUs2WliOImzkRA==", "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", @@ -738,9 +738,9 @@ } }, "node_modules/@lezer/javascript": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.13.tgz", - "integrity": "sha512-5IBr8LIO3xJdJH1e9aj/ZNLE4LSbdsx25wFmGRAZsj2zSmwAYjx26JyU/BYOCpRQlu1jcv1z3vy4NB9+UkfRow==", + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.14.tgz", + "integrity": "sha512-GEdUyspTRgc5dwIGebUk+f3BekvqEWVIYsIuAC3pA8e8wcikGwBZRWRa450L0s8noGWuULwnmi4yjxTnYz9PpA==", "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.1.3", @@ -766,9 +766,9 @@ } }, "node_modules/@lezer/markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.2.0.tgz", - "integrity": "sha512-d7MwsfAukZJo1GpPrcPGa3MxaFFOqNp0gbqF+3F7pTeNDOgeJN1muXzx1XXDPt+Ac+/voCzsH7qXqnn+xReG/g==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.3.0.tgz", + "integrity": "sha512-ErbEQ15eowmJUyT095e9NJc3BI9yZ894fjSDtHftD0InkfUBGgnKSU6dvan9jqsZuNHg2+ag/1oyDRxNsENupQ==", "dependencies": { "@lezer/common": "^1.0.0", "@lezer/highlight": "^1.0.0" @@ -785,9 +785,9 @@ } }, "node_modules/@lezer/xml": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.4.tgz", - "integrity": "sha512-WmXKb5eX8+rRfZYSNRR5TPee/ZoDgBdVS/rj1VCJGDKa5gNldIctQYibCoFVyNhvZsyL/8nHbZJZPM4gnXN2Vw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.5.tgz", + "integrity": "sha512-VFouqOzmUWfIg+tfmpcdV33ewtK+NSwd4ngSe1aG7HFb4BN0ExyY1b8msp+ndFrnlG4V4iC8yXacjFtrwERnaw==", "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", @@ -952,34 +952,16 @@ } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -990,15 +972,16 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", - "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { @@ -1088,12 +1071,15 @@ "dev": true }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/brace-expansion": { @@ -1308,6 +1294,57 @@ "node": ">= 8" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1393,9 +1430,9 @@ "dev": true }, "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { "node": ">=0.12" }, @@ -1413,18 +1450,22 @@ } }, "node_modules/es-abstract": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", - "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.6", + "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.2", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", @@ -1432,15 +1473,16 @@ "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.1", + "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", @@ -1448,17 +1490,17 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", + "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.1", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -1467,12 +1509,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -1494,15 +1530,27 @@ "node": ">= 0.4" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -1535,9 +1583,9 @@ } }, "node_modules/esbuild": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", - "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "dev": true, "hasInstallScript": true, "bin": { @@ -1547,29 +1595,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.1", - "@esbuild/android-arm": "0.20.1", - "@esbuild/android-arm64": "0.20.1", - "@esbuild/android-x64": "0.20.1", - "@esbuild/darwin-arm64": "0.20.1", - "@esbuild/darwin-x64": "0.20.1", - "@esbuild/freebsd-arm64": "0.20.1", - "@esbuild/freebsd-x64": "0.20.1", - "@esbuild/linux-arm": "0.20.1", - "@esbuild/linux-arm64": "0.20.1", - "@esbuild/linux-ia32": "0.20.1", - "@esbuild/linux-loong64": "0.20.1", - "@esbuild/linux-mips64el": "0.20.1", - "@esbuild/linux-ppc64": "0.20.1", - "@esbuild/linux-riscv64": "0.20.1", - "@esbuild/linux-s390x": "0.20.1", - "@esbuild/linux-x64": "0.20.1", - "@esbuild/netbsd-x64": "0.20.1", - "@esbuild/openbsd-x64": "0.20.1", - "@esbuild/sunos-x64": "0.20.1", - "@esbuild/win32-arm64": "0.20.1", - "@esbuild/win32-ia32": "0.20.1", - "@esbuild/win32-x64": "0.20.1" + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, "node_modules/escape-string-regexp": { @@ -1585,16 +1633,16 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -1679,9 +1727,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -1937,9 +1985,9 @@ } }, "node_modules/flatted": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.0.tgz", - "integrity": "sha512-noqGuLw158+DuD9UPRKHpJ2hGxpFyDlYYrfM0mWt4XhT4n0lwzTLh70Tkdyy4kyTmyTT9Bv7bWAJqw7cgkEXDg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/for-each": { @@ -2208,9 +2256,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -2386,6 +2434,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -2493,12 +2556,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2644,11 +2710,11 @@ } }, "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dependencies": { - "uc.micro": "^1.0.1" + "uc.micro": "^2.0.0" } }, "node_modules/livereload": { @@ -2724,18 +2790,19 @@ "dev": true }, "node_modules/markdown-it": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", - "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dependencies": { "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, "bin": { - "markdown-it": "bin/markdown-it.js" + "markdown-it": "bin/markdown-it.mjs" } }, "node_modules/markdown-it-task-lists": { @@ -2744,9 +2811,9 @@ "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==" }, "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" }, "node_modules/memorystream": { "version": "0.3.1", @@ -3026,28 +3093,29 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3057,27 +3125,28 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", - "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3287,6 +3356,14 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "engines": { + "node": ">=6" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3441,13 +3518,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -3476,9 +3553,9 @@ } }, "node_modules/sass": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.0.tgz", - "integrity": "sha512-HKKIKf49Vkxlrav3F/w6qRuPcmImGVbIXJ2I3Kg0VMA+3Bav+8yE9G5XmP5lMj6nl4OlqbPftGAscNaNu28b8w==", + "version": "1.74.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.74.1.tgz", + "integrity": "sha512-w0Z9p/rWZWelb88ISOLyvqTWGmtmu2QJICqDBGyNnfG4OUnPX9BBjjYIXUpXCMOOg5MQWNpqzt876la1fsTvUA==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -3508,17 +3585,17 @@ "dev": true }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3570,12 +3647,12 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -3601,9 +3678,9 @@ "integrity": "sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA==" }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3677,14 +3754,15 @@ } }, "node_modules/string.prototype.padend": { - "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==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3694,14 +3772,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3711,28 +3790,31 @@ } }, "node_modules/string.prototype.trimend": { - "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==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3772,9 +3854,9 @@ } }, "node_modules/style-mod": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz", - "integrity": "sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==" + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==" }, "node_modules/supports-color": { "version": "7.2.0", @@ -3869,15 +3951,16 @@ } }, "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -3907,9 +3990,9 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { "call-bind": "^1.0.7", @@ -3927,9 +4010,9 @@ } }, "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" }, "node_modules/unbox-primitive": { "version": "1.0.2", @@ -4008,16 +4091,16 @@ "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" diff --git a/package.json b/package.json index 0ec36c129..ba2de38ba 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ "eslint-plugin-import": "^2.29.0", "livereload": "^0.9.3", "npm-run-all": "^4.1.5", - "punycode": "^2.3.1", "sass": "^1.69.5" }, "dependencies": { @@ -47,7 +46,7 @@ "@ssddanbrown/codemirror-lang-twig": "^1.0.0", "codemirror": "^6.0.1", "idb-keyval": "^6.2.1", - "markdown-it": "^13.0.2", + "markdown-it": "^14.1.0", "markdown-it-task-lists": "^2.1.1", "snabbdom": "^3.5.1", "sortablejs": "^1.15.1" diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 5fec36c2f..bcf4e5aa2 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -9,7 +9,7 @@ parameters: # The level 8 is the highest level level: 1 - phpVersion: 80002 + phpVersion: 80200 bootstrapFiles: - bootstrap/phpstan.php @@ -19,5 +19,6 @@ parameters: excludePaths: - ./Config/**/*.php + - ./dev/**/*.php checkMissingIterableValueType: false \ No newline at end of file diff --git a/phpunit.xml b/phpunit.xml index 183e45637..21f17685b 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,13 +1,5 @@ - - - - app/ - - + ./tests/ @@ -59,7 +51,13 @@ + + + + app/ + + diff --git a/public/book_default_cover.png b/public/book_default_cover.png index 7b6c9953e..6d088d8b8 100644 Binary files a/public/book_default_cover.png and b/public/book_default_cover.png differ diff --git a/public/icon-128.png b/public/icon-128.png index 46cc2811b..f271e849d 100644 Binary files a/public/icon-128.png and b/public/icon-128.png differ diff --git a/public/icon-180.png b/public/icon-180.png index 6533a05b3..4d4ceac34 100644 Binary files a/public/icon-180.png and b/public/icon-180.png differ diff --git a/public/icon-32.png b/public/icon-32.png index 7307ed8f1..deac72d89 100644 Binary files a/public/icon-32.png and b/public/icon-32.png differ diff --git a/public/icon-64.png b/public/icon-64.png index 854d80faa..afe4b766d 100644 Binary files a/public/icon-64.png and b/public/icon-64.png differ diff --git a/public/icon.ico b/public/icon.ico index 41655ccba..2581b9b33 100644 Binary files a/public/icon.ico and b/public/icon.ico differ diff --git a/public/icon.png b/public/icon.png index b9f0125a8..939b97e4f 100644 Binary files a/public/icon.png and b/public/icon.png differ diff --git a/public/loading.gif b/public/loading.gif index 5bcdebec3..9efe6b216 100644 Binary files a/public/loading.gif and b/public/loading.gif differ diff --git a/public/loading_error.png b/public/loading_error.png index 4f588fbe1..e50039352 100644 Binary files a/public/loading_error.png and b/public/loading_error.png differ diff --git a/public/logo.png b/public/logo.png index 585f8895b..f58b0d57b 100644 Binary files a/public/logo.png and b/public/logo.png differ diff --git a/public/user_avatar.png b/public/user_avatar.png index 26440a9cc..b906805d0 100644 Binary files a/public/user_avatar.png and b/public/user_avatar.png differ diff --git a/readme.md b/readme.md index a32e22931..11bf2c888 100644 --- a/readme.md +++ b/readme.md @@ -7,10 +7,10 @@ [![Lint Status](https://github.com/BookStackApp/BookStack/workflows/lint-php/badge.svg)](https://github.com/BookStackApp/BookStack/actions) [![Maintainability](https://api.codeclimate.com/v1/badges/5551731994dd22fa1f4f/maintainability)](https://codeclimate.com/github/BookStackApp/BookStack/maintainability) +[![Alternate Source](https://img.shields.io/static/v1?label=Alt+Source&message=Git&color=ef391a&logo=git)](https://source.bookstackapp.com/) [![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) -[![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) @@ -29,12 +29,14 @@ A platform for storing and organising information and documentation. Details for ## 📚 Project Definition -BookStack is an opinionated wiki system that provides a pleasant and simple out-of-the-box experience. New users to an instance should find the experience intuitive and only basic word-processing skills should be required to get involved in creating content on BookStack. The platform should provide advanced power features to those that desire it but they should not interfere with the core simple user experience. +BookStack is an opinionated documentation platform that provides a pleasant and simple out-of-the-box experience. New users to an instance should find the experience intuitive and only basic word-processing skills should be required to get involved in creating content on BookStack. The platform should provide advanced power features to those that desire it but they should not interfere with the core simple user experience. BookStack is not designed as an extensible platform to be used for purposes that differ to the statement above. In regard to development philosophy, BookStack has a relaxed, open & positive approach. At the end of the day this is free software developed and maintained by people donating their own free time. +You can read more about the project and its origins in [our FAQ here](https://www.bookstackapp.com/about/project-faq/). + ## 🌟 Project Sponsors Shown below are our bronze, silver and gold project sponsors. @@ -47,7 +49,7 @@ Big thanks to these companies for supporting the project.
- Diagrams.net + Federated.computer
@@ -148,8 +150,7 @@ Note: This is not an exhaustive list of all libraries and projects that would be * [Google Material Icons](https://github.com/google/material-design-icons) - _[Apache-2.0](https://github.com/google/material-design-icons/blob/master/LICENSE)_ * [markdown-it](https://github.com/markdown-it/markdown-it) and [markdown-it-task-lists](https://github.com/revin/markdown-it-task-lists) - _[MIT](https://github.com/markdown-it/markdown-it/blob/master/LICENSE) and [ISC](https://github.com/revin/markdown-it-task-lists/blob/master/LICENSE)_ * [Dompdf](https://github.com/dompdf/dompdf) - _[LGPL v2.1](https://github.com/dompdf/dompdf/blob/master/LICENSE.LGPL)_ -* [BarryVD/Dompdf](https://github.com/barryvdh/laravel-dompdf) - _[MIT](https://github.com/barryvdh/laravel-dompdf/blob/master/LICENSE)_ -* [BarryVD/Snappy (WKHTML2PDF)](https://github.com/barryvdh/laravel-snappy) - _[MIT](https://github.com/barryvdh/laravel-snappy/blob/master/LICENSE)_ +* [KnpLabs/snappy](https://github.com/KnpLabs/snappy) - _[MIT](https://github.com/KnpLabs/snappy/blob/master/LICENSE)_ * [WKHTMLtoPDF](http://wkhtmltopdf.org/index.html) - _[LGPL v3.0](https://github.com/wkhtmltopdf/wkhtmltopdf/blob/master/LICENSE)_ * [diagrams.net](https://github.com/jgraph/drawio) - _[Embedded Version Terms](https://www.diagrams.net/trust/) / [Source Project - Apache-2.0](https://github.com/jgraph/drawio/blob/dev/LICENSE)_ * [OneLogin's SAML PHP Toolkit](https://github.com/onelogin/php-saml) - _[MIT](https://github.com/onelogin/php-saml/blob/master/LICENSE)_ @@ -164,3 +165,5 @@ Note: This is not an exhaustive list of all libraries and projects that would be * [PHPStan](https://phpstan.org/) & [Larastan](https://github.com/nunomaduro/larastan) - _[MIT](https://github.com/phpstan/phpstan/blob/master/LICENSE) and [MIT](https://github.com/nunomaduro/larastan/blob/master/LICENSE.md)_ * [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) - _[BSD 3-Clause](https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt)_ * [JakeArchibald/IDB-Keyval](https://github.com/jakearchibald/idb-keyval) - _[Apache-2.0](https://github.com/jakearchibald/idb-keyval/blob/main/LICENCE)_ + +For a detailed breakdown of the JavaScript & PHP projects imported & used via NPM & composer package managers, along with their licenses, please see the [dev/licensing/js-library-licenses.txt](dev/licensing/js-library-licenses.txt) and [dev/licensing/php-library-licenses.txt](dev/licensing/php-library-licenses.txt) files. \ No newline at end of file diff --git a/resources/icons/add-circle.svg b/resources/icons/add-circle.svg index efa0a03ae..af125af43 100644 --- a/resources/icons/add-circle.svg +++ b/resources/icons/add-circle.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/attach.svg b/resources/icons/attach.svg index 49c9d57a8..7b666f8c4 100644 --- a/resources/icons/attach.svg +++ b/resources/icons/attach.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/auth/discord.svg b/resources/icons/auth/discord.svg index 7fbbeb792..2d3d277af 100644 --- a/resources/icons/auth/discord.svg +++ b/resources/icons/auth/discord.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/auth/github.svg b/resources/icons/auth/github.svg index ae6dc6f7f..a341e8d4d 100644 --- a/resources/icons/auth/github.svg +++ b/resources/icons/auth/github.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/auth/gitlab.svg b/resources/icons/auth/gitlab.svg index fa1e92a56..6e7d1c5f4 100644 --- a/resources/icons/auth/gitlab.svg +++ b/resources/icons/auth/gitlab.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/resources/icons/auth/google.svg b/resources/icons/auth/google.svg index 34ed1603b..0e416d493 100644 --- a/resources/icons/auth/google.svg +++ b/resources/icons/auth/google.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/auth/okta.svg b/resources/icons/auth/okta.svg index b5f3b1d3f..5bf8d86d4 100644 --- a/resources/icons/auth/okta.svg +++ b/resources/icons/auth/okta.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/auth/slack.svg b/resources/icons/auth/slack.svg index 98e5a32f5..a4ca4a084 100644 --- a/resources/icons/auth/slack.svg +++ b/resources/icons/auth/slack.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/auth/twitch.svg b/resources/icons/auth/twitch.svg index 5dbc76bb9..2736ccfa8 100644 --- a/resources/icons/auth/twitch.svg +++ b/resources/icons/auth/twitch.svg @@ -1 +1 @@ -Glitch \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/auth/twitter.svg b/resources/icons/auth/twitter.svg index fa4d59efd..e926b370d 100644 --- a/resources/icons/auth/twitter.svg +++ b/resources/icons/auth/twitter.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/back.svg b/resources/icons/back.svg index 22aa9d24a..9b3ab40d5 100644 --- a/resources/icons/back.svg +++ b/resources/icons/back.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/book.svg b/resources/icons/book.svg index ce6cd5d94..2f451bec9 100644 --- a/resources/icons/book.svg +++ b/resources/icons/book.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/books.svg b/resources/icons/books.svg index a485a01da..70a9e23f5 100644 --- a/resources/icons/books.svg +++ b/resources/icons/books.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/bookshelf.svg b/resources/icons/bookshelf.svg index f1e45eaf9..c6377d8d1 100644 --- a/resources/icons/bookshelf.svg +++ b/resources/icons/bookshelf.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/cancel.svg b/resources/icons/cancel.svg index a35f16d75..6ea45e3eb 100644 --- a/resources/icons/cancel.svg +++ b/resources/icons/cancel.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/caret-down.svg b/resources/icons/caret-down.svg index 000f58963..bf988ca9f 100644 --- a/resources/icons/caret-down.svg +++ b/resources/icons/caret-down.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/caret-left-circle.svg b/resources/icons/caret-left-circle.svg index a92e0630d..49da4c24a 100644 --- a/resources/icons/caret-left-circle.svg +++ b/resources/icons/caret-left-circle.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/caret-right-circle.svg b/resources/icons/caret-right-circle.svg index bcf16cf66..1cd435dea 100644 --- a/resources/icons/caret-right-circle.svg +++ b/resources/icons/caret-right-circle.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/chapter.svg b/resources/icons/chapter.svg index 199917db7..e5d83be5c 100644 --- a/resources/icons/chapter.svg +++ b/resources/icons/chapter.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/check-circle.svg b/resources/icons/check-circle.svg index 669a74872..ad1e0bbd9 100644 --- a/resources/icons/check-circle.svg +++ b/resources/icons/check-circle.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/check.svg b/resources/icons/check.svg index 93607ef7e..134fd657c 100644 --- a/resources/icons/check.svg +++ b/resources/icons/check.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/chevron-up.svg b/resources/icons/chevron-up.svg index 37335dd03..8d308dbff 100644 --- a/resources/icons/chevron-up.svg +++ b/resources/icons/chevron-up.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/close.svg b/resources/icons/close.svg index a0da9e677..c2ef46510 100644 --- a/resources/icons/close.svg +++ b/resources/icons/close.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/comment.svg b/resources/icons/comment.svg index 09e950803..3c4762b2e 100644 --- a/resources/icons/comment.svg +++ b/resources/icons/comment.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/copy.svg b/resources/icons/copy.svg index 3a52e2314..2e1820f0f 100644 --- a/resources/icons/copy.svg +++ b/resources/icons/copy.svg @@ -1,3 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/danger.svg b/resources/icons/danger.svg index 5265957a2..6aabc9609 100644 --- a/resources/icons/danger.svg +++ b/resources/icons/danger.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/dark-mode.svg b/resources/icons/dark-mode.svg index 8b00d72a5..d905dccc8 100644 --- a/resources/icons/dark-mode.svg +++ b/resources/icons/dark-mode.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/delete.svg b/resources/icons/delete.svg index fdaba0111..cb0089969 100644 --- a/resources/icons/delete.svg +++ b/resources/icons/delete.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/download.svg b/resources/icons/download.svg index 6299571d6..4b0a289da 100644 --- a/resources/icons/download.svg +++ b/resources/icons/download.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/drawing.svg b/resources/icons/drawing.svg index c07f99271..7ebe067a6 100644 --- a/resources/icons/drawing.svg +++ b/resources/icons/drawing.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/edit.svg b/resources/icons/edit.svg index d4be98b38..9c184a0f4 100644 --- a/resources/icons/edit.svg +++ b/resources/icons/edit.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/expand-text.svg b/resources/icons/expand-text.svg index 9cc7bc168..18bf54f22 100644 --- a/resources/icons/expand-text.svg +++ b/resources/icons/expand-text.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/export.svg b/resources/icons/export.svg index 97e217fd0..a02220929 100644 --- a/resources/icons/export.svg +++ b/resources/icons/export.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/file.svg b/resources/icons/file.svg index 2e87f2ca6..9d65579be 100644 --- a/resources/icons/file.svg +++ b/resources/icons/file.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/folder.svg b/resources/icons/folder.svg index cc56c6fad..f2cb814ff 100644 --- a/resources/icons/folder.svg +++ b/resources/icons/folder.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/fullscreen.svg b/resources/icons/fullscreen.svg index d00b574ff..2691715e6 100644 --- a/resources/icons/fullscreen.svg +++ b/resources/icons/fullscreen.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/grid.svg b/resources/icons/grid.svg index b94b8852a..d6929e11a 100644 --- a/resources/icons/grid.svg +++ b/resources/icons/grid.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/grip.svg b/resources/icons/grip.svg index 7bf189232..86eb08049 100644 --- a/resources/icons/grip.svg +++ b/resources/icons/grip.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/groups.svg b/resources/icons/groups.svg index c99a6b503..474237a0f 100644 --- a/resources/icons/groups.svg +++ b/resources/icons/groups.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/history.svg b/resources/icons/history.svg index ba6c4177e..3f5d475b8 100644 --- a/resources/icons/history.svg +++ b/resources/icons/history.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/image.svg b/resources/icons/image.svg index fcb5e8e85..55454fd75 100644 --- a/resources/icons/image.svg +++ b/resources/icons/image.svg @@ -1 +1 @@ - + \ No newline at end of file diff --git a/resources/icons/images.svg b/resources/icons/images.svg index 4dd3cf4e6..9966f4772 100644 --- a/resources/icons/images.svg +++ b/resources/icons/images.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/include.svg b/resources/icons/include.svg index 48d2f0f5b..30a2c495b 100644 --- a/resources/icons/include.svg +++ b/resources/icons/include.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/info-filled.svg b/resources/icons/info-filled.svg index 0597dbdf2..20b8f3b42 100644 --- a/resources/icons/info-filled.svg +++ b/resources/icons/info-filled.svg @@ -1,3 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/info.svg b/resources/icons/info.svg index 1a24e012d..4082f2cde 100644 --- a/resources/icons/info.svg +++ b/resources/icons/info.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/leaderboard.svg b/resources/icons/leaderboard.svg index 9083330dc..1231490a2 100644 --- a/resources/icons/leaderboard.svg +++ b/resources/icons/leaderboard.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/light-mode.svg b/resources/icons/light-mode.svg index cf2961d2e..6ee1f2c93 100644 --- a/resources/icons/light-mode.svg +++ b/resources/icons/light-mode.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/link.svg b/resources/icons/link.svg index 3e8be1ce7..10117bc1e 100644 --- a/resources/icons/link.svg +++ b/resources/icons/link.svg @@ -1,3 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/list.svg b/resources/icons/list.svg index 3cfcee9e4..5dadaf1fa 100644 --- a/resources/icons/list.svg +++ b/resources/icons/list.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/lock-open.svg b/resources/icons/lock-open.svg index 20ff5b686..6855dd563 100644 --- a/resources/icons/lock-open.svg +++ b/resources/icons/lock-open.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/lock.svg b/resources/icons/lock.svg index 594763f58..cf10b4e57 100644 --- a/resources/icons/lock.svg +++ b/resources/icons/lock.svg @@ -1,9 +1 @@ - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/login.svg b/resources/icons/login.svg index b122b44a2..f6601cfdc 100644 --- a/resources/icons/login.svg +++ b/resources/icons/login.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/logout.svg b/resources/icons/logout.svg index b113f5a3a..b6d20b450 100644 --- a/resources/icons/logout.svg +++ b/resources/icons/logout.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/more.svg b/resources/icons/more.svg index 53ffb6554..5dc0c7cfb 100644 --- a/resources/icons/more.svg +++ b/resources/icons/more.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/new-user.svg b/resources/icons/new-user.svg index b58fcd548..76b450a84 100644 --- a/resources/icons/new-user.svg +++ b/resources/icons/new-user.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/notifications.svg b/resources/icons/notifications.svg index 52786954d..54bd7456c 100644 --- a/resources/icons/notifications.svg +++ b/resources/icons/notifications.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/oidc.svg b/resources/icons/oidc.svg index a9a2994a7..66a10efaf 100644 --- a/resources/icons/oidc.svg +++ b/resources/icons/oidc.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/open-book.svg b/resources/icons/open-book.svg index 5987d14e5..2e2f24da4 100644 --- a/resources/icons/open-book.svg +++ b/resources/icons/open-book.svg @@ -1,9 +1 @@ - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/page.svg b/resources/icons/page.svg index 1df12d85d..ab3985c73 100644 --- a/resources/icons/page.svg +++ b/resources/icons/page.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/palette.svg b/resources/icons/palette.svg index 114386302..903fa51d8 100644 --- a/resources/icons/palette.svg +++ b/resources/icons/palette.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/permission.svg b/resources/icons/permission.svg index a9a2994a7..66a10efaf 100644 --- a/resources/icons/permission.svg +++ b/resources/icons/permission.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/popular.svg b/resources/icons/popular.svg index 2ac44f151..84f4c180b 100644 --- a/resources/icons/popular.svg +++ b/resources/icons/popular.svg @@ -1,3 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/reference.svg b/resources/icons/reference.svg index 560ec5f37..b83dcafd1 100644 --- a/resources/icons/reference.svg +++ b/resources/icons/reference.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/icons/reply.svg b/resources/icons/reply.svg index a50ddad7a..ab7119c97 100644 --- a/resources/icons/reply.svg +++ b/resources/icons/reply.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/role.svg b/resources/icons/role.svg index e7cad506d..5a274a8d0 100644 --- a/resources/icons/role.svg +++ b/resources/icons/role.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/saml2.svg b/resources/icons/saml2.svg index a9a2994a7..66a10efaf 100644 --- a/resources/icons/saml2.svg +++ b/resources/icons/saml2.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/save.svg b/resources/icons/save.svg index e8acc6594..7be214ab6 100644 --- a/resources/icons/save.svg +++ b/resources/icons/save.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/search.svg b/resources/icons/search.svg index 490937044..c19bbf001 100644 --- a/resources/icons/search.svg +++ b/resources/icons/search.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/security.svg b/resources/icons/security.svg index 4fc0d20b9..0febc8301 100644 --- a/resources/icons/security.svg +++ b/resources/icons/security.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/settings.svg b/resources/icons/settings.svg index dc2d75f0e..b9b62e643 100644 --- a/resources/icons/settings.svg +++ b/resources/icons/settings.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/shortcuts.svg b/resources/icons/shortcuts.svg index 8d23aac2b..f3736f536 100644 --- a/resources/icons/shortcuts.svg +++ b/resources/icons/shortcuts.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/sort.svg b/resources/icons/sort.svg index 9a2e98f64..fa935ffcf 100644 --- a/resources/icons/sort.svg +++ b/resources/icons/sort.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/spanner.svg b/resources/icons/spanner.svg index 8ab25a247..d3eefb67d 100644 --- a/resources/icons/spanner.svg +++ b/resources/icons/spanner.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/icons/star-circle.svg b/resources/icons/star-circle.svg index a7667e48f..cd50c44b5 100644 --- a/resources/icons/star-circle.svg +++ b/resources/icons/star-circle.svg @@ -1,3 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/star-outline.svg b/resources/icons/star-outline.svg index 4e83ab42b..ff50719b3 100644 --- a/resources/icons/star-outline.svg +++ b/resources/icons/star-outline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/star.svg b/resources/icons/star.svg index c7686389d..60ffbf266 100644 --- a/resources/icons/star.svg +++ b/resources/icons/star.svg @@ -1,5 +1 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/swap-vertical.svg b/resources/icons/swap-vertical.svg index 35a362c0b..d5166c082 100644 --- a/resources/icons/swap-vertical.svg +++ b/resources/icons/swap-vertical.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/tag.svg b/resources/icons/tag.svg index 1d92d2b18..6e976dfd5 100644 --- a/resources/icons/tag.svg +++ b/resources/icons/tag.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/template.svg b/resources/icons/template.svg index 7c142124f..faee3c275 100644 --- a/resources/icons/template.svg +++ b/resources/icons/template.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/time.svg b/resources/icons/time.svg index 2b6e2820e..42cf02e4c 100644 --- a/resources/icons/time.svg +++ b/resources/icons/time.svg @@ -1,5 +1 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/upload.svg b/resources/icons/upload.svg index c9b0346a1..2c1318be2 100644 --- a/resources/icons/upload.svg +++ b/resources/icons/upload.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/user-preferences.svg b/resources/icons/user-preferences.svg index 5ae1773ca..6d1dc2259 100644 --- a/resources/icons/user-preferences.svg +++ b/resources/icons/user-preferences.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/user.svg b/resources/icons/user.svg index bdfbc5096..1e9c998bf 100644 --- a/resources/icons/user.svg +++ b/resources/icons/user.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/users-add.svg b/resources/icons/users-add.svg index ea568f2ff..c09ad550a 100644 --- a/resources/icons/users-add.svg +++ b/resources/icons/users-add.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/users.svg b/resources/icons/users.svg index e7cad506d..5a274a8d0 100644 --- a/resources/icons/users.svg +++ b/resources/icons/users.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/warning.svg b/resources/icons/warning.svg index b1d1ad02c..b8e8ba404 100644 --- a/resources/icons/warning.svg +++ b/resources/icons/warning.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/watch-ignore.svg b/resources/icons/watch-ignore.svg index 2c6ffc24a..4363a7127 100644 --- a/resources/icons/watch-ignore.svg +++ b/resources/icons/watch-ignore.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/watch.svg b/resources/icons/watch.svg index 0be661912..71fc7fe8c 100644 --- a/resources/icons/watch.svg +++ b/resources/icons/watch.svg @@ -1,3 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/icons/webhooks.svg b/resources/icons/webhooks.svg index fff081413..8f97cd436 100644 --- a/resources/icons/webhooks.svg +++ b/resources/icons/webhooks.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/js/code/index.mjs b/resources/js/code/index.mjs index ab31e3f74..d2ea12a4c 100644 --- a/resources/js/code/index.mjs +++ b/resources/js/code/index.mjs @@ -38,6 +38,23 @@ function addCopyIcon(editorView) { }); } +/** + * @param {HTMLElement} codeElem + * @returns {String} + */ +function getDirectionFromCodeBlock(codeElem) { + let dir = ''; + const innerCodeElem = codeElem.querySelector('code'); + + if (innerCodeElem && innerCodeElem.hasAttribute('dir')) { + dir = innerCodeElem.getAttribute('dir'); + } else if (codeElem.hasAttribute('dir')) { + dir = codeElem.getAttribute('dir'); + } + + return dir; +} + /** * Add code highlighting to a single element. * @param {HTMLElement} elem @@ -48,16 +65,14 @@ function highlightElem(elem) { const content = elem.textContent.trimEnd(); let langName = ''; - let innerCodeDirection = ''; if (innerCodeElem !== null) { langName = innerCodeElem.className.replace('language-', ''); - innerCodeDirection = innerCodeElem.getAttribute('dir'); } const wrapper = document.createElement('div'); elem.parentNode.insertBefore(wrapper, elem); - const direction = innerCodeDirection || elem.getAttribute('dir') || ''; + const direction = getDirectionFromCodeBlock(elem); if (direction) { wrapper.setAttribute('dir', direction); } diff --git a/resources/js/components/code-editor.js b/resources/js/components/code-editor.js index 1c68c2048..091c3483f 100644 --- a/resources/js/components/code-editor.js +++ b/resources/js/components/code-editor.js @@ -129,7 +129,7 @@ export class CodeEditor extends Component { this.hide(); } - async open(code, language, saveCallback, cancelCallback) { + async open(code, language, direction, saveCallback, cancelCallback) { this.languageInput.value = language; this.saveCallback = saveCallback; this.cancelCallback = cancelCallback; @@ -137,6 +137,7 @@ export class CodeEditor extends Component { await this.show(); this.languageInputChange(language); this.editor.setContent(code); + this.setDirection(direction); } async show() { @@ -156,6 +157,15 @@ export class CodeEditor extends Component { }); } + setDirection(direction) { + const target = this.editorInput.parentElement; + if (direction) { + target.setAttribute('dir', direction); + } else { + target.removeAttribute('dir'); + } + } + hide() { this.getPopup().hide(); this.addHistory(); diff --git a/resources/js/components/markdown-editor.js b/resources/js/components/markdown-editor.js index fa06807a5..cd928de9f 100644 --- a/resources/js/components/markdown-editor.js +++ b/resources/js/components/markdown-editor.js @@ -1,5 +1,4 @@ import {Component} from './component'; -import {init as initEditor} from '../markdown/editor'; export class MarkdownEditor extends Component { @@ -20,17 +19,19 @@ export class MarkdownEditor extends Component { const settingInputs = settingContainer.querySelectorAll('input[type="checkbox"]'); this.editor = null; - initEditor({ - pageId: this.pageId, - container: this.elem, - displayEl: this.display, - inputEl: this.input, - drawioUrl: this.getDrawioUrl(), - settingInputs: Array.from(settingInputs), - text: { - serverUploadLimit: this.serverUploadLimitText, - imageUploadError: this.imageUploadErrorText, - }, + window.importVersioned('markdown').then(markdown => { + return markdown.init({ + pageId: this.pageId, + container: this.elem, + displayEl: this.display, + inputEl: this.input, + drawioUrl: this.getDrawioUrl(), + settingInputs: Array.from(settingInputs), + text: { + serverUploadLimit: this.serverUploadLimitText, + imageUploadError: this.imageUploadErrorText, + }, + }); }).then(editor => { this.editor = editor; this.setupListeners(); diff --git a/resources/js/markdown/codemirror.js b/resources/js/markdown/codemirror.js index 9d54c19d7..2ea944865 100644 --- a/resources/js/markdown/codemirror.js +++ b/resources/js/markdown/codemirror.js @@ -44,6 +44,10 @@ export async function init(editor) { editor.actions.insertClipboardImages(clipboardImages, event.pageX, event.pageY); } }, + // Handle dragover event to allow as drop-target in chrome + dragover: event => { + event.preventDefault(); + }, // Handle image paste paste: event => { const clipboard = new Clipboard(event.clipboardData || event.dataTransfer); diff --git a/resources/js/markdown/editor.js b/resources/js/markdown/index.mjs similarity index 100% rename from resources/js/markdown/editor.js rename to resources/js/markdown/index.mjs diff --git a/resources/js/wysiwyg/drop-paste-handling.js b/resources/js/wysiwyg/drop-paste-handling.js index 9668692c8..172ad970f 100644 --- a/resources/js/wysiwyg/drop-paste-handling.js +++ b/resources/js/wysiwyg/drop-paste-handling.js @@ -149,11 +149,26 @@ function drop(editor, options, event) { wrap = null; } +/** + * @param {Editor} editor + * @param {DragEvent} event + */ +function dragOver(editor, event) { + // This custom handling essentially emulates the default TinyMCE behaviour while allowing us + // to specifically call preventDefault on the event to allow the drop of custom elements. + event.preventDefault(); + editor.focus(); + const rangeUtils = window.tinymce.dom.RangeUtils; + const range = rangeUtils.getCaretRangeFromPoint(event.clientX ?? 0, event.clientY ?? 0, editor.getDoc()); + editor.selection.setRng(range); +} + /** * @param {Editor} editor * @param {WysiwygConfigOptions} options */ export function listenForDragAndPaste(editor, options) { + editor.on('dragover', event => dragOver(editor, event)); editor.on('dragstart', () => dragStart(editor)); editor.on('drop', event => drop(editor, options, event)); editor.on('paste', event => paste(editor, options, event)); diff --git a/resources/js/wysiwyg/fixes.js b/resources/js/wysiwyg/fixes.js index 7f87d4378..61cace660 100644 --- a/resources/js/wysiwyg/fixes.js +++ b/resources/js/wysiwyg/fixes.js @@ -29,12 +29,13 @@ export function handleEmbedAlignmentChanges(editor) { editor.on('FormatApply', event => { const isAlignment = event.format.startsWith('align'); - if (!event.node || !event.node.matches('.mce-preview-object')) { + const isElement = event.node instanceof editor.dom.doc.defaultView.HTMLElement; + if (!isElement || !isAlignment || !event.node.matches('.mce-preview-object')) { return; } const realTarget = event.node.querySelector('iframe, video'); - if (isAlignment && realTarget) { + if (realTarget) { const className = (editor.formatter.get(event.format)[0]?.classes || [])[0]; const toAdd = !realTarget.classList.contains(className); @@ -94,10 +95,12 @@ export function handleTableCellRangeEvents(editor) { // are selected. Here we watch for clear formatting events, so some manual // cleanup can be performed. const attrsToRemove = ['class', 'style', 'width', 'height']; - editor.on('FormatRemove', () => { - for (const cell of selectedCells) { - for (const attr of attrsToRemove) { - cell.removeAttribute(attr); + editor.on('ExecCommand', event => { + if (event.command === 'RemoveFormat') { + for (const cell of selectedCells) { + for (const attr of attrsToRemove) { + cell.removeAttribute(attr); + } } } }); diff --git a/resources/js/wysiwyg/plugin-codeeditor.js b/resources/js/wysiwyg/plugin-codeeditor.js index f86760214..c01a7eca0 100644 --- a/resources/js/wysiwyg/plugin-codeeditor.js +++ b/resources/js/wysiwyg/plugin-codeeditor.js @@ -6,13 +6,14 @@ function elemIsCodeBlock(elem) { * @param {Editor} editor * @param {String} code * @param {String} language + * @param {String} direction * @param {function(string, string)} callback (Receives (code: string,language: string) */ -function showPopup(editor, code, language, callback) { +function showPopup(editor, code, language, direction, callback) { /** @var {CodeEditor} codeEditor * */ const codeEditor = window.$components.first('code-editor'); const bookMark = editor.selection.getBookmark(); - codeEditor.open(code, language, (newCode, newLang) => { + codeEditor.open(code, language, direction, (newCode, newLang) => { callback(newCode, newLang); editor.focus(); editor.selection.moveToBookmark(bookMark); @@ -27,7 +28,8 @@ function showPopup(editor, code, language, callback) { * @param {CodeBlockElement} codeBlock */ function showPopupForCodeBlock(editor, codeBlock) { - showPopup(editor, codeBlock.getContent(), codeBlock.getLanguage(), (newCode, newLang) => { + const direction = codeBlock.getAttribute('dir') || ''; + showPopup(editor, codeBlock.getContent(), codeBlock.getLanguage(), direction, (newCode, newLang) => { codeBlock.setContent(newCode, newLang); }); } @@ -179,13 +181,17 @@ function register(editor) { showPopupForCodeBlock(editor, selectedNode); } else { const textContent = editor.selection.getContent({format: 'text'}); - showPopup(editor, textContent, '', (newCode, newLang) => { + const direction = document.dir === 'rtl' ? 'ltr' : ''; + showPopup(editor, textContent, '', direction, (newCode, newLang) => { const pre = doc.createElement('pre'); const code = doc.createElement('code'); code.classList.add(`language-${newLang}`); code.innerText = newCode; - pre.append(code); + if (direction) { + pre.setAttribute('dir', direction); + } + pre.append(code); editor.insertContent(pre.outerHTML); }); } @@ -205,7 +211,8 @@ function register(editor) { contenteditable: 'false', }); - const direction = el.attr('dir'); + const childCodeBlock = el.children().filter(child => child.name === 'code')[0] || null; + const direction = el.attr('dir') || (childCodeBlock && childCodeBlock.attr('dir')) || ''; if (direction) { wrapper.attr('dir', direction); } diff --git a/resources/js/wysiwyg/toolbars.js b/resources/js/wysiwyg/toolbars.js index bd1ff1b6d..897aa9f06 100644 --- a/resources/js/wysiwyg/toolbars.js +++ b/resources/js/wysiwyg/toolbars.js @@ -60,7 +60,7 @@ function registerLinkContextToolbar(editor) { function registerImageContextToolbar(editor) { editor.ui.registry.addContextToolbar('imagecontexttoolbar', { predicate(node) { - return node.closest('img') !== null; + return node.closest('img') !== null && !node.hasAttribute('data-mce-object'); }, position: 'node', scope: 'node', @@ -68,6 +68,20 @@ function registerImageContextToolbar(editor) { }); } +/** + * @param {Editor} editor + */ +function registerObjectContextToolbar(editor) { + editor.ui.registry.addContextToolbar('objectcontexttoolbar', { + predicate(node) { + return node.closest('img') !== null && node.hasAttribute('data-mce-object'); + }, + position: 'node', + scope: 'node', + items: 'media', + }); +} + /** * @param {Editor} editor */ @@ -75,4 +89,5 @@ export function registerAdditionalToolbars(editor) { registerPrimaryToolbarGroups(editor); registerLinkContextToolbar(editor); registerImageContextToolbar(editor); + registerObjectContextToolbar(editor); } diff --git a/resources/sass/_components.scss b/resources/sass/_components.scss index ae899357c..fc4ddeba4 100644 --- a/resources/sass/_components.scss +++ b/resources/sass/_components.scss @@ -182,7 +182,7 @@ flex: 0; .popup-title { color: #FFF; - margin-right: auto; + margin-inline-end: auto; padding: 8px $-m; } &.flex-container-row { diff --git a/resources/sass/_content.scss b/resources/sass/_content.scss index bde52bb77..3aa4ac653 100644 --- a/resources/sass/_content.scss +++ b/resources/sass/_content.scss @@ -32,10 +32,6 @@ margin-left: auto; margin-right: auto; } - img { - max-width: 100%; - height:auto; - } h1, h2, h3, h4, h5, h6, pre { clear: left; } @@ -113,6 +109,20 @@ video { max-width: 100%; } + + a { + text-decoration: underline; + } +} + +// This is seperated out so we can target it out-of-editor by default +// and use advanced (:not) syntax, not supported by things like PDF gen, +// to target in-editor scenarios to handle edge-case of TinyMCE using an +// image for data placeholders where we'd want height attributes to take effect. +body .page-content img, +.page-content img:not([data-mce-object]) { + max-width: 100%; + height:auto; } /** diff --git a/resources/sass/_forms.scss b/resources/sass/_forms.scss index e480531fc..e6d062ce8 100644 --- a/resources/sass/_forms.scss +++ b/resources/sass/_forms.scss @@ -389,6 +389,20 @@ input[type=color] { } } +.form-group.ambrosia-container, .form-group.ambrosia-container * { + position:absolute !important; + height:1px !important; + width:1px !important; + margin:-1px !important; + padding:0 !important; + background:transparent !important; + color:transparent !important; + border:none !important; + overflow: hidden !important; + clip: rect(0,0,0,0) !important; + white-space: nowrap !important; +} + .title-input input[type="text"] { display: block; width: 100%; @@ -538,4 +552,4 @@ input.shortcut-input { width: auto; max-width: 120px; height: auto; -} \ No newline at end of file +} diff --git a/resources/sass/_tinymce.scss b/resources/sass/_tinymce.scss index 29843e424..95294cdf2 100644 --- a/resources/sass/_tinymce.scss +++ b/resources/sass/_tinymce.scss @@ -46,11 +46,6 @@ display: block; } -// In editor line height override -.page-content.mce-content-body p { - line-height: 1.6; -} - // Pad out bottom of editor body.page-content.mce-content-body { padding-bottom: 5rem; diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index d345b037a..1ea712e1d 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -13,8 +13,14 @@
{!! csrf_field() !!} + {{-- Simple honeypot field --}} + +
- + @include('form.text', ['name' => 'name'])
diff --git a/resources/views/common/activity-item.blade.php b/resources/views/common/activity-item.blade.php index 89d44b152..1c970084f 100644 --- a/resources/views/common/activity-item.blade.php +++ b/resources/views/common/activity-item.blade.php @@ -16,12 +16,12 @@ {{ $activity->getText() }} - @if($activity->entity && is_null($activity->entity->deleted_at)) - {{ $activity->entity->name }} + @if($activity->loggable && is_null($activity->loggable->deleted_at)) + {{ $activity->loggable->name }} @endif - @if($activity->entity && !is_null($activity->entity->deleted_at)) - "{{ $activity->entity->name }}" + @if($activity->loggable && !is_null($activity->loggable->deleted_at)) + "{{ $activity->loggable->name }}" @endif
diff --git a/resources/views/help/licenses.blade.php b/resources/views/help/licenses.blade.php new file mode 100644 index 000000000..1eb293523 --- /dev/null +++ b/resources/views/help/licenses.blade.php @@ -0,0 +1,61 @@ +@extends('layouts.simple') + +@section('body') + +
+ +
 
+ + + +
+

{{ trans('settings.licenses_bookstack') }}

+
{{ $license }}
+

BookStack® is a UK registered trade mark of Daniel Brown.

+
+ +
+

{{ trans('settings.licenses_php') }}

+
{{ $phpLibData }}
+
+ +
+

{{ trans('settings.licenses_js') }}

+
{{ $jsLibData }}
+
+ +
+

{{ trans('settings.licenses_other') }}

+
BookStack makes heavy use of PHP: + License: PHP License, version 3.01 + License File: https://www.php.net/license/3_01.txt + Copyright: Copyright (c) 1999 - 2019 The PHP Group. All rights reserved. + Link: https://www.php.net/ + ----------- + BookStack uses Icons from Google Material Icons: + License: Apache License Version 2.0 + License File: https://github.com/google/material-design-icons/blob/master/LICENSE + Copyright: Copyright 2020 Google LLC + Link: https://github.com/google/material-design-icons + ----------- + BookStack is distributed with TinyMCE: + License: MIT + License File: https://github.com/tinymce/tinymce/blob/release/6.7/LICENSE.TXT + Copyright: Copyright (c) 2022 Ephox Corporation DBA Tiny Technologies, Inc. + Link: https://github.com/tinymce/tinymce +
+
+
+ +@endsection \ No newline at end of file diff --git a/resources/views/pages/parts/code-editor.blade.php b/resources/views/pages/parts/code-editor.blade.php index 8700a4ccb..688fe67ef 100644 --- a/resources/views/pages/parts/code-editor.blade.php +++ b/resources/views/pages/parts/code-editor.blade.php @@ -24,9 +24,10 @@ @php $languages = [ 'Bash', 'CSS', 'C', 'C++', 'C#', 'Clojure', 'Dart', 'Diff', 'Fortran', 'F#', 'Go', 'Haskell', 'HTML', 'INI', - 'Java', 'JavaScript', 'JSON', 'Julia', 'Kotlin', 'LaTeX', 'Lua', 'MarkDown', 'MATLAB', 'MSSQL', 'MySQL', 'Nginx', 'OCaml', - 'Octave', 'Pascal', 'Perl', 'PHP', 'PL/SQL', 'PostgreSQL', 'Powershell', 'Python', 'Ruby', 'Rust', 'Scheme', 'Shell', 'Smarty', - 'SQL', 'SQLite', 'Swift', 'Twig', 'TypeScript', 'VBScript', 'VB.NET', 'XML', 'YAML', + 'Java', 'JavaScript', 'JSON', 'Julia', 'Kotlin', 'LaTeX', 'Lua', 'MarkDown', 'MATLAB', 'MSSQL', 'MySQL', + 'Nginx', 'OCaml', 'Octave', 'Pascal', 'Perl', 'PHP', 'PL/SQL', 'PostgreSQL', 'Powershell', 'Python', + 'Ruby', 'Rust', 'Scala', 'Scheme', 'Shell', 'Smarty', 'SQL', 'SQLite', 'Swift', + 'Twig', 'TypeScript', 'VBScript', 'VB.NET', 'XML', 'YAML', ]; @endphp diff --git a/resources/views/settings/audit.blade.php b/resources/views/settings/audit.blade.php index 89d743fdc..28cdeb8a5 100644 --- a/resources/views/settings/audit.blade.php +++ b/resources/views/settings/audit.blade.php @@ -94,8 +94,8 @@ class="mr-xs hide-over-m">{{ trans('settings.audit_table_event') }} : {{ $activity->type }}
- @if($activity->entity) - @include('entities.icon-link', ['entity' => $activity->entity]) + @if($activity->loggable instanceof \BookStack\Entities\Models\Entity) + @include('entities.icon-link', ['entity' => $activity->loggable]) @elseif($activity->detail && $activity->isForEntity())
{{ trans('settings.audit_deleted_item') }}
diff --git a/resources/views/settings/layout.blade.php b/resources/views/settings/layout.blade.php index 94a8f7725..a59b58d53 100644 --- a/resources/views/settings/layout.blade.php +++ b/resources/views/settings/layout.blade.php @@ -18,8 +18,10 @@
{{ trans('settings.system_version') }}
diff --git a/routes/api.php b/routes/api.php index 04c94a966..c0919d324 100644 --- a/routes/api.php +++ b/routes/api.php @@ -6,6 +6,7 @@ * Controllers all end with "ApiController" */ +use BookStack\Activity\Controllers\AuditLogApiController; use BookStack\Api\ApiDocsController; use BookStack\Entities\Controllers as EntityControllers; use BookStack\Permissions\ContentPermissionApiController; @@ -89,3 +90,5 @@ Route::delete('recycle-bin/{deletionId}', [EntityControllers\RecycleBinApiContro Route::get('content-permissions/{contentType}/{contentId}', [ContentPermissionApiController::class, 'read']); Route::put('content-permissions/{contentType}/{contentId}', [ContentPermissionApiController::class, 'update']); + +Route::get('audit-log', [AuditLogApiController::class, 'list']); diff --git a/routes/web.php b/routes/web.php index 4620cd08b..03595288f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -5,6 +5,7 @@ use BookStack\Activity\Controllers as ActivityControllers; use BookStack\Api\ApiDocsController; use BookStack\Api\UserApiTokenController; use BookStack\App\HomeController; +use BookStack\App\MetaController; use BookStack\Entities\Controllers as EntityControllers; use BookStack\Http\Middleware\VerifyCsrfToken; use BookStack\Permissions\PermissionsController; @@ -18,9 +19,10 @@ use Illuminate\Support\Facades\Route; use Illuminate\View\Middleware\ShareErrorsFromSession; Route::get('/status', [SettingControllers\StatusController::class, 'show']); -Route::get('/robots.txt', [HomeController::class, 'robots']); -Route::get('/favicon.ico', [HomeController::class, 'favicon']); -Route::get('/manifest.json', [HomeController::class, 'pwaManifest']); +Route::get('/robots.txt', [MetaController::class, 'robots']); +Route::get('/favicon.ico', [MetaController::class, 'favicon']); +Route::get('/manifest.json', [MetaController::class, 'pwaManifest']); +Route::get('/licenses', [MetaController::class, 'licenses']); // Authenticated routes... Route::middleware('auth')->group(function () { @@ -350,4 +352,4 @@ Route::post('/password/reset', [AccessControllers\ResetPasswordController::class // Metadata routes Route::view('/help/wysiwyg', 'help.wysiwyg'); -Route::fallback([HomeController::class, 'notFound'])->name('fallback'); +Route::fallback([MetaController::class, 'notFound'])->name('fallback'); diff --git a/tests/Activity/AuditLogApiTest.php b/tests/Activity/AuditLogApiTest.php new file mode 100644 index 000000000..75cc364f8 --- /dev/null +++ b/tests/Activity/AuditLogApiTest.php @@ -0,0 +1,60 @@ +users->editor(); + + $assertPermissionErrorOnCall = function () use ($editor) { + $resp = $this->actingAsForApi($editor)->getJson('/api/audit-log'); + $resp->assertStatus(403); + $resp->assertJson($this->permissionErrorResponse()); + }; + + $assertPermissionErrorOnCall(); + $this->permissions->grantUserRolePermissions($editor, ['users-manage']); + $assertPermissionErrorOnCall(); + $this->permissions->removeUserRolePermissions($editor, ['users-manage']); + $this->permissions->grantUserRolePermissions($editor, ['settings-manage']); + $assertPermissionErrorOnCall(); + + $this->permissions->grantUserRolePermissions($editor, ['settings-manage', 'users-manage']); + $resp = $this->actingAsForApi($editor)->getJson('/api/audit-log'); + $resp->assertOk(); + } + + public function test_index_endpoint_returns_expected_data() + { + $page = $this->entities->page(); + $admin = $this->users->admin(); + $this->actingAsForApi($admin); + Activity::add(ActivityType::PAGE_UPDATE, $page); + + $resp = $this->get("/api/audit-log?filter[loggable_id]={$page->id}"); + $resp->assertJson(['data' => [ + [ + 'type' => 'page_update', + 'detail' => "({$page->id}) {$page->name}", + 'user_id' => $admin->id, + 'loggable_id' => $page->id, + 'loggable_type' => 'page', + 'ip' => '127.0.0.1', + 'user' => [ + 'id' => $admin->id, + 'name' => $admin->name, + 'slug' => $admin->slug, + ], + ] + ]]); + } +} diff --git a/tests/Actions/AuditLogTest.php b/tests/Activity/AuditLogTest.php similarity index 98% rename from tests/Actions/AuditLogTest.php rename to tests/Activity/AuditLogTest.php index 5e355ca09..350cd9287 100644 --- a/tests/Actions/AuditLogTest.php +++ b/tests/Activity/AuditLogTest.php @@ -1,6 +1,6 @@ ActivityType::PAGE_UPDATE, 'ip' => '192.123.45.1', 'user_id' => $editor->id, - 'entity_id' => $page->id, + 'loggable_id' => $page->id, ]); $resp = $this->asAdmin()->get('/settings/audit'); @@ -207,7 +207,7 @@ class AuditLogTest extends TestCase 'type' => ActivityType::PAGE_UPDATE, 'ip' => '127.0.0.1', 'user_id' => $editor->id, - 'entity_id' => $page->id, + 'loggable_id' => $page->id, ]); } @@ -229,7 +229,7 @@ class AuditLogTest extends TestCase 'type' => ActivityType::PAGE_UPDATE, 'ip' => '192.123.x.x', 'user_id' => $editor->id, - 'entity_id' => $page->id, + 'loggable_id' => $page->id, ]); } } diff --git a/tests/Actions/WebhookCallTest.php b/tests/Activity/WebhookCallTest.php similarity index 99% rename from tests/Actions/WebhookCallTest.php rename to tests/Activity/WebhookCallTest.php index 16986ba2e..37c87267a 100644 --- a/tests/Actions/WebhookCallTest.php +++ b/tests/Activity/WebhookCallTest.php @@ -1,6 +1,6 @@ 'uid', 'services.ldap.user_to_groups' => false, 'services.ldap.version' => '3', - 'services.ldap.user_filter' => '(&(uid=${user}))', + 'services.ldap.user_filter' => '(&(uid={user}))', 'services.ldap.follow_referrals' => false, 'services.ldap.tls_insecure' => false, + 'services.ldap.tls_ca_cert' => false, 'services.ldap.thumbnail_attribute' => null, ]); $this->mockLdap = $this->mock(Ldap::class); @@ -178,6 +180,38 @@ class LdapTest extends TestCase $this->assertDatabaseHas('users', ['email' => $this->mockUser->email, 'email_confirmed' => false, 'external_auth_id' => 'cooluser456']); } + public function test_user_filter_default_placeholder_format() + { + config()->set('services.ldap.user_filter', '(&(uid={user}))'); + $this->mockUser->name = 'barryldapuser'; + $expectedFilter = '(&(uid=\62\61\72\72\79\6c\64\61\70\75\73\65\72))'; + + $this->commonLdapMocks(1, 1, 1, 1, 1); + $this->mockLdap->shouldReceive('searchAndGetEntries') + ->once() + ->with($this->resourceId, config('services.ldap.base_dn'), $expectedFilter, \Mockery::type('array')) + ->andReturn(['count' => 0, 0 => []]); + + $resp = $this->mockUserLogin(); + $resp->assertRedirect('/login'); + } + + public function test_user_filter_old_placeholder_format() + { + config()->set('services.ldap.user_filter', '(&(username=${user}))'); + $this->mockUser->name = 'barryldapuser'; + $expectedFilter = '(&(username=\62\61\72\72\79\6c\64\61\70\75\73\65\72))'; + + $this->commonLdapMocks(1, 1, 1, 1, 1); + $this->mockLdap->shouldReceive('searchAndGetEntries') + ->once() + ->with($this->resourceId, config('services.ldap.base_dn'), $expectedFilter, \Mockery::type('array')) + ->andReturn(['count' => 0, 0 => []]); + + $resp = $this->mockUserLogin(); + $resp->assertRedirect('/login'); + } + public function test_initial_incorrect_credentials() { $this->commonLdapMocks(1, 1, 1, 0, 1); @@ -767,4 +801,34 @@ EBEQCgwSExIQEw8QEBD/yQALCAABAAEBAREA/8wABgAQEAX/2gAIAQEAAD8A0s8g/9k=')], $this->assertNotNull($user->avatar); $this->assertEquals('8c90748342f19b195b9c6b4eff742ded', md5_file(public_path($user->avatar->path))); } + + public function test_tls_ca_cert_option_throws_if_set_to_invalid_location() + { + $path = 'non_found_' . time(); + config()->set(['services.ldap.tls_ca_cert' => $path]); + + $this->commonLdapMocks(0, 0, 0, 0, 0); + + $this->assertThrows(function () { + $this->withoutExceptionHandling()->mockUserLogin(); + }, LdapException::class, "Provided path [{$path}] for LDAP TLS CA certs could not be resolved to an existing location"); + } + + public function test_tls_ca_cert_option_used_if_set_to_a_folder() + { + $path = $this->files->testFilePath(''); + config()->set(['services.ldap.tls_ca_cert' => $path]); + + $this->mockLdap->shouldReceive('setOption')->once()->with(null, LDAP_OPT_X_TLS_CACERTDIR, rtrim($path, '/'))->andReturn(true); + $this->runFailedAuthLogin(); + } + + public function test_tls_ca_cert_option_used_if_set_to_a_file() + { + $path = $this->files->testFilePath('test-file.txt'); + config()->set(['services.ldap.tls_ca_cert' => $path]); + + $this->mockLdap->shouldReceive('setOption')->once()->with(null, LDAP_OPT_X_TLS_CACERTFILE, $path)->andReturn(true); + $this->runFailedAuthLogin(); + } } diff --git a/tests/Auth/OidcTest.php b/tests/Auth/OidcTest.php index 345d1dc78..9bde71c80 100644 --- a/tests/Auth/OidcTest.php +++ b/tests/Auth/OidcTest.php @@ -37,6 +37,7 @@ class OidcTest extends TestCase 'oidc.issuer' => OidcJwtHelper::defaultIssuer(), 'oidc.authorization_endpoint' => 'https://oidc.local/auth', 'oidc.token_endpoint' => 'https://oidc.local/token', + 'oidc.userinfo_endpoint' => 'https://oidc.local/userinfo', 'oidc.discover' => false, 'oidc.dump_user_details' => false, 'oidc.additional_scopes' => '', @@ -208,6 +209,8 @@ class OidcTest extends TestCase public function test_auth_fails_if_no_email_exists_in_user_data() { + config()->set('oidc.userinfo_endpoint', null); + $this->runLogin([ 'email' => '', 'sub' => 'benny505', @@ -270,10 +273,38 @@ class OidcTest extends TestCase ]); $resp = $this->followRedirects($resp); - $resp->assertSeeText('ID token validate failed with error: Missing token subject value'); + $resp->assertSeeText('ID token validation failed with error: Missing token subject value'); $this->assertFalse(auth()->check()); } + public function test_auth_fails_if_endpoints_start_with_https() + { + $endpointConfigKeys = [ + 'oidc.token_endpoint' => 'tokenEndpoint', + 'oidc.authorization_endpoint' => 'authorizationEndpoint', + 'oidc.userinfo_endpoint' => 'userinfoEndpoint', + ]; + + foreach ($endpointConfigKeys as $endpointConfigKey => $endpointName) { + $logger = $this->withTestLogger(); + $original = config()->get($endpointConfigKey); + $new = str_replace('https://', 'http://', $original); + config()->set($endpointConfigKey, $new); + + $this->withoutExceptionHandling(); + $err = null; + try { + $resp = $this->runLogin(); + $resp->assertRedirect('/login'); + } catch (\Exception $exception) { + $err = $exception; + } + $this->assertEquals("Endpoint value for \"{$endpointName}\" must start with https://", $err->getMessage()); + + config()->set($endpointConfigKey, $original); + } + } + public function test_auth_login_with_autodiscovery() { $this->withAutodiscovery(); @@ -594,10 +625,16 @@ class OidcTest extends TestCase { config()->set(['oidc.end_session_endpoint' => 'https://example.com/logout']); - $this->runLogin(); + // Fix times so our token is predictable + $claimOverrides = [ + 'iat' => time(), + 'exp' => time() + 720, + 'auth_time' => time() + ]; + $this->runLogin($claimOverrides); $resp = $this->asEditor()->post('/oidc/logout'); - $query = 'id_token_hint=' . urlencode(OidcJwtHelper::idToken()) . '&post_logout_redirect_uri=' . urlencode(url('/')); + $query = 'id_token_hint=' . urlencode(OidcJwtHelper::idToken($claimOverrides)) . '&post_logout_redirect_uri=' . urlencode(url('/')); $resp->assertRedirect('https://example.com/logout?' . $query); } @@ -683,22 +720,152 @@ class OidcTest extends TestCase $this->assertEquals($pkceCode, $bodyParams['code_verifier']); } - protected function withAutodiscovery() + public function test_userinfo_endpoint_used_if_missing_claims_in_id_token() + { + config()->set('oidc.display_name_claims', 'first_name|last_name'); + $this->post('/oidc/login'); + $state = session()->get('oidc_state'); + + $client = $this->mockHttpClient([ + $this->getMockAuthorizationResponse(['name' => null]), + new Response(200, [ + 'Content-Type' => 'application/json', + ], json_encode([ + 'sub' => OidcJwtHelper::defaultPayload()['sub'], + 'first_name' => 'Barry', + 'last_name' => 'Userinfo', + ])) + ]); + + $resp = $this->get('/oidc/callback?code=SplxlOBeZQQYbYS6WxSbIA&state=' . $state); + $resp->assertRedirect('/'); + $this->assertEquals(2, $client->requestCount()); + + $userinfoRequest = $client->requestAt(1); + $this->assertEquals('GET', $userinfoRequest->getMethod()); + $this->assertEquals('https://oidc.local/userinfo', (string) $userinfoRequest->getUri()); + + $this->assertEquals('Barry Userinfo', user()->name); + } + + public function test_userinfo_endpoint_fetch_with_different_sub_throws_error() + { + $userinfoResponseData = ['sub' => 'dcba4321']; + $userinfoResponse = new Response(200, ['Content-Type' => 'application/json'], json_encode($userinfoResponseData)); + $resp = $this->runLogin(['name' => null], [$userinfoResponse]); + $resp->assertRedirect('/login'); + $this->assertSessionError('Userinfo endpoint response validation failed with error: Subject value provided in the userinfo endpoint does not match the provided ID token value'); + } + + public function test_userinfo_endpoint_fetch_returning_no_sub_throws_error() + { + $userinfoResponseData = ['name' => 'testing']; + $userinfoResponse = new Response(200, ['Content-Type' => 'application/json'], json_encode($userinfoResponseData)); + $resp = $this->runLogin(['name' => null], [$userinfoResponse]); + $resp->assertRedirect('/login'); + $this->assertSessionError('Userinfo endpoint response validation failed with error: No valid subject value found in userinfo data'); + } + + public function test_userinfo_endpoint_fetch_can_parsed_nested_groups() + { + config()->set([ + 'oidc.user_to_groups' => true, + 'oidc.groups_claim' => 'my.nested.groups.attr', + 'oidc.remove_from_groups' => false, + ]); + + $roleA = Role::factory()->create(['display_name' => 'Ducks']); + $userinfoResponseData = [ + 'sub' => OidcJwtHelper::defaultPayload()['sub'], + 'my' => ['nested' => ['groups' => ['attr' => ['Ducks', 'Donkeys']]]] + ]; + $userinfoResponse = new Response(200, ['Content-Type' => 'application/json'], json_encode($userinfoResponseData)); + $resp = $this->runLogin(['groups' => null], [$userinfoResponse]); + $resp->assertRedirect('/'); + + $user = User::where('email', OidcJwtHelper::defaultPayload()['email'])->first(); + $this->assertTrue($user->hasRole($roleA->id)); + } + + public function test_userinfo_endpoint_jwks_response_handled() + { + $userinfoResponseData = OidcJwtHelper::idToken(['name' => 'Barry Jwks']); + $userinfoResponse = new Response(200, ['Content-Type' => 'application/jwt'], $userinfoResponseData); + + $resp = $this->runLogin(['name' => null], [$userinfoResponse]); + $resp->assertRedirect('/'); + + $user = User::where('email', OidcJwtHelper::defaultPayload()['email'])->first(); + $this->assertEquals('Barry Jwks', $user->name); + } + + public function test_userinfo_endpoint_jwks_response_returning_no_sub_throws() + { + $userinfoResponseData = OidcJwtHelper::idToken(['sub' => null]); + $userinfoResponse = new Response(200, ['Content-Type' => 'application/jwt'], $userinfoResponseData); + + $resp = $this->runLogin(['name' => null], [$userinfoResponse]); + $resp->assertRedirect('/login'); + $this->assertSessionError('Userinfo endpoint response validation failed with error: No valid subject value found in userinfo data'); + } + + public function test_userinfo_endpoint_jwks_response_returning_non_matching_sub_throws() + { + $userinfoResponseData = OidcJwtHelper::idToken(['sub' => 'zzz123']); + $userinfoResponse = new Response(200, ['Content-Type' => 'application/jwt'], $userinfoResponseData); + + $resp = $this->runLogin(['name' => null], [$userinfoResponse]); + $resp->assertRedirect('/login'); + $this->assertSessionError('Userinfo endpoint response validation failed with error: Subject value provided in the userinfo endpoint does not match the provided ID token value'); + } + + public function test_userinfo_endpoint_jwks_response_with_invalid_signature_throws() + { + $userinfoResponseData = OidcJwtHelper::idToken(); + $exploded = explode('.', $userinfoResponseData); + $exploded[2] = base64_encode(base64_decode($exploded[2]) . 'ABC'); + $userinfoResponse = new Response(200, ['Content-Type' => 'application/jwt'], implode('.', $exploded)); + + $resp = $this->runLogin(['name' => null], [$userinfoResponse]); + $resp->assertRedirect('/login'); + $this->assertSessionError('Userinfo endpoint response validation failed with error: Token signature could not be validated using the provided keys'); + } + + public function test_userinfo_endpoint_jwks_response_with_invalid_signature_alg_throws() + { + $userinfoResponseData = OidcJwtHelper::idToken([], ['alg' => 'ZZ512']); + $userinfoResponse = new Response(200, ['Content-Type' => 'application/jwt'], $userinfoResponseData); + + $resp = $this->runLogin(['name' => null], [$userinfoResponse]); + $resp->assertRedirect('/login'); + $this->assertSessionError('Userinfo endpoint response validation failed with error: Only RS256 signature validation is supported. Token reports using ZZ512'); + } + + public function test_userinfo_endpoint_response_with_invalid_content_type_throws() + { + $userinfoResponse = new Response(200, ['Content-Type' => 'application/beans'], json_encode(OidcJwtHelper::defaultPayload())); + $resp = $this->runLogin(['name' => null], [$userinfoResponse]); + $resp->assertRedirect('/login'); + $this->assertSessionError('Userinfo endpoint response validation failed with error: No valid subject value found in userinfo data'); + } + + protected function withAutodiscovery(): void { config()->set([ 'oidc.issuer' => OidcJwtHelper::defaultIssuer(), 'oidc.discover' => true, 'oidc.authorization_endpoint' => null, 'oidc.token_endpoint' => null, + 'oidc.userinfo_endpoint' => null, 'oidc.jwt_public_key' => null, ]); } - protected function runLogin($claimOverrides = []): TestResponse + protected function runLogin($claimOverrides = [], $additionalHttpResponses = []): TestResponse { $this->post('/oidc/login'); $state = session()->get('oidc_state'); - $this->mockHttpClient([$this->getMockAuthorizationResponse($claimOverrides)]); + $this->mockHttpClient([$this->getMockAuthorizationResponse($claimOverrides), ...$additionalHttpResponses]); return $this->get('/oidc/callback?code=SplxlOBeZQQYbYS6WxSbIA&state=' . $state); } @@ -712,6 +879,7 @@ class OidcTest extends TestCase ], json_encode(array_merge([ 'token_endpoint' => OidcJwtHelper::defaultIssuer() . '/oidc/token', 'authorization_endpoint' => OidcJwtHelper::defaultIssuer() . '/oidc/authorize', + 'userinfo_endpoint' => OidcJwtHelper::defaultIssuer() . '/oidc/userinfo', 'jwks_uri' => OidcJwtHelper::defaultIssuer() . '/oidc/keys', 'issuer' => OidcJwtHelper::defaultIssuer(), 'end_session_endpoint' => OidcJwtHelper::defaultIssuer() . '/oidc/logout', diff --git a/tests/Auth/RegistrationTest.php b/tests/Auth/RegistrationTest.php index ff1a9d66b..60ae17573 100644 --- a/tests/Auth/RegistrationTest.php +++ b/tests/Auth/RegistrationTest.php @@ -184,4 +184,23 @@ class RegistrationTest extends TestCase $resp->assertSee('The email must be a valid email address.'); $resp->assertSee('The password must be at least 8 characters.'); } + + public function test_registration_simple_honeypot_active() + { + $this->setSettings(['registration-enabled' => 'true']); + + $resp = $this->get('/register'); + $this->withHtml($resp)->assertElementExists('form input[name="username"]'); + + $resp = $this->post('/register', [ + 'name' => 'Barry', + 'email' => 'barrybot@example.com', + 'password' => 'barryIsTheBestBot', + 'username' => 'MyUsername' + ]); + $resp->assertRedirect('/register'); + + $resp = $this->followRedirects($resp); + $this->withHtml($resp)->assertElementExists('form input[name="username"].text-neg'); + } } diff --git a/tests/Auth/ResetPasswordTest.php b/tests/Auth/ResetPasswordTest.php index e60ac5643..d2af17b9c 100644 --- a/tests/Auth/ResetPasswordTest.php +++ b/tests/Auth/ResetPasswordTest.php @@ -95,7 +95,7 @@ class ResetPasswordTest extends TestCase $resp = $this->followingRedirects()->post('/password/email', [ 'email' => $editor->email, ]); - Notification::assertTimesSent(1, ResetPasswordNotification::class); + Notification::assertSentTimes(ResetPasswordNotification::class, 1); $resp->assertSee('A password reset link will be sent to ' . $editor->email . ' if that email address is found in the system.'); } } diff --git a/tests/Commands/ClearActivityCommandTest.php b/tests/Commands/ClearActivityCommandTest.php index 410a39aa8..a3d7456b6 100644 --- a/tests/Commands/ClearActivityCommandTest.php +++ b/tests/Commands/ClearActivityCommandTest.php @@ -18,7 +18,7 @@ class ClearActivityCommandTest extends TestCase $this->assertDatabaseHas('activities', [ 'type' => 'page_update', - 'entity_id' => $page->id, + 'loggable_id' => $page->id, 'user_id' => $this->users->editor()->id, ]); diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php index b1cefbb65..3258d05bc 100644 --- a/tests/CreatesApplication.php +++ b/tests/CreatesApplication.php @@ -3,15 +3,14 @@ namespace Tests; use Illuminate\Contracts\Console\Kernel; +use Illuminate\Foundation\Application; trait CreatesApplication { /** * Creates the application. - * - * @return \Illuminate\Foundation\Application */ - public function createApplication() + public function createApplication(): Application { $app = require __DIR__ . '/../bootstrap/app.php'; $app->make(Kernel::class)->bootstrap(); diff --git a/tests/Entity/ExportTest.php b/tests/Entity/ExportTest.php index eedcb672c..040f69013 100644 --- a/tests/Entity/ExportTest.php +++ b/tests/Entity/ExportTest.php @@ -6,8 +6,8 @@ use BookStack\Entities\Models\Book; use BookStack\Entities\Models\Chapter; use BookStack\Entities\Models\Page; use BookStack\Entities\Tools\PdfGenerator; +use BookStack\Exceptions\PdfExportException; use Illuminate\Support\Facades\Storage; -use Illuminate\Support\Str; use Tests\TestCase; class ExportTest extends TestCase @@ -483,7 +483,7 @@ class ExportTest extends TestCase { $page = $this->entities->page(); - config()->set('snappy.pdf.binary', '/abc123'); + config()->set('exports.snappy.pdf_binary', '/abc123'); config()->set('app.allow_untrusted_server_fetching', false); $resp = $this->asEditor()->get($page->getUrl('/export/pdf')); @@ -494,6 +494,41 @@ class ExportTest extends TestCase $resp->assertStatus(500); // Bad response indicates wkhtml usage } + public function test_pdf_command_option_used_if_set() + { + $page = $this->entities->page(); + $command = 'cp {input_html_path} {output_pdf_path}'; + config()->set('exports.pdf_command', $command); + + $resp = $this->asEditor()->get($page->getUrl('/export/pdf')); + $download = $resp->getContent(); + + $this->assertStringContainsString(e($page->name), $download); + $this->assertStringContainsString('set('exports.pdf_command', $command); + + $this->assertThrows(function () use ($page) { + $this->withoutExceptionHandling()->asEditor()->get($page->getUrl('/export/pdf')); + }, PdfExportException::class); + } + + public function test_pdf_command_option_errors_if_command_returns_error_status() + { + $page = $this->entities->page(); + $command = 'exit 1'; + config()->set('exports.pdf_command', $command); + + $this->assertThrows(function () use ($page) { + $this->withoutExceptionHandling()->asEditor()->get($page->getUrl('/export/pdf')); + }, PdfExportException::class); + } + public function test_html_exports_contain_csp_meta_tag() { $entities = [ diff --git a/tests/Entity/TagTest.php b/tests/Entity/TagTest.php index c1240e955..729f93903 100644 --- a/tests/Entity/TagTest.php +++ b/tests/Entity/TagTest.php @@ -9,7 +9,7 @@ use Tests\TestCase; class TagTest extends TestCase { - protected $defaultTagCount = 20; + protected int $defaultTagCount = 20; /** * Get an instance of a page that has many tags. @@ -193,6 +193,24 @@ class TagTest extends TestCase $resp->assertSee('Tags can be assigned via the page editor sidebar'); } + public function test_tag_index_does_not_include_tags_on_recycle_bin_items() + { + $page = $this->entities->page(); + $page->tags()->create(['name' => 'DeleteRecord', 'value' => 'itemToDeleteTest']); + + $resp = $this->asEditor()->get('/tags'); + $resp->assertSee('DeleteRecord'); + $resp = $this->asEditor()->get('/tags?name=DeleteRecord'); + $resp->assertSee('itemToDeleteTest'); + + $this->entities->sendToRecycleBin($page); + + $resp = $this->asEditor()->get('/tags'); + $resp->assertDontSee('DeleteRecord'); + $resp = $this->asEditor()->get('/tags?name=DeleteRecord'); + $resp->assertDontSee('itemToDeleteTest'); + } + public function test_tag_classes_visible_on_entities() { $this->asEditor(); diff --git a/tests/Helpers/EntityProvider.php b/tests/Helpers/EntityProvider.php index 982063421..1897abefa 100644 --- a/tests/Helpers/EntityProvider.php +++ b/tests/Helpers/EntityProvider.php @@ -207,6 +207,29 @@ class EntityProvider return $draftPage; } + /** + * Send an entity to the recycle bin. + */ + public function sendToRecycleBin(Entity $entity) + { + $trash = app()->make(TrashCan::class); + + if ($entity instanceof Page) { + $trash->softDestroyPage($entity); + } elseif ($entity instanceof Chapter) { + $trash->softDestroyChapter($entity); + } elseif ($entity instanceof Book) { + $trash->softDestroyBook($entity); + } elseif ($entity instanceof Bookshelf) { + $trash->softDestroyBookshelf($entity); + } + + $entity->refresh(); + if (is_null($entity->deleted_at)) { + throw new \Exception("Could not send entity type [{$entity->getMorphClass()}] to the recycle bin"); + } + } + /** * Fully destroy the given entity from the system, bypassing the recycle bin * stage. Still runs through main app deletion logic. diff --git a/tests/LicensesTest.php b/tests/LicensesTest.php new file mode 100644 index 000000000..a7fb803c0 --- /dev/null +++ b/tests/LicensesTest.php @@ -0,0 +1,24 @@ +get('/licenses'); + $resp->assertOk(); + $resp->assertSee('Licenses'); + $resp->assertSee('PHP Library Licenses'); + $resp->assertSee('Dan Brown and the BookStack Project contributors'); + $resp->assertSee('doctrine/dbal'); + $resp->assertSee('@codemirror/lang-html'); + } + + public function test_licenses_linked_to_from_settings() + { + $resp = $this->asAdmin()->get('/settings/features'); + $html = $this->withHtml($resp); + $html->assertLinkExists(url('/licenses'), 'License Details'); + } +} diff --git a/tests/Settings/RecycleBinTest.php b/tests/Settings/RecycleBinTest.php index 8adc92f25..33284b4b3 100644 --- a/tests/Settings/RecycleBinTest.php +++ b/tests/Settings/RecycleBinTest.php @@ -153,22 +153,22 @@ class RecycleBinTest extends TestCase $this->assertDatabaseHas('activities', [ 'type' => 'page_delete', - 'entity_id' => $page->id, - 'entity_type' => $page->getMorphClass(), + 'loggable_id' => $page->id, + 'loggable_type' => $page->getMorphClass(), ]); $this->asAdmin()->delete("/settings/recycle-bin/{$deletion->id}"); $this->assertDatabaseMissing('activities', [ 'type' => 'page_delete', - 'entity_id' => $page->id, - 'entity_type' => $page->getMorphClass(), + 'loggable_id' => $page->id, + 'loggable_type' => $page->getMorphClass(), ]); $this->assertDatabaseHas('activities', [ 'type' => 'page_delete', - 'entity_id' => null, - 'entity_type' => null, + 'loggable_id' => null, + 'loggable_type' => null, 'detail' => $page->name, ]); } diff --git a/tests/TestCase.php b/tests/TestCase.php index c59f843e9..b63de3076 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -248,8 +248,8 @@ abstract class TestCase extends BaseTestCase $detailsToCheck = ['type' => $type]; if ($entity) { - $detailsToCheck['entity_type'] = $entity->getMorphClass(); - $detailsToCheck['entity_id'] = $entity->id; + $detailsToCheck['loggable_type'] = $entity->getMorphClass(); + $detailsToCheck['loggable_id'] = $entity->id; } if ($detail) { diff --git a/tests/Unit/ConfigTest.php b/tests/Unit/ConfigTest.php index 2de32c1b8..d5c74392f 100644 --- a/tests/Unit/ConfigTest.php +++ b/tests/Unit/ConfigTest.php @@ -80,22 +80,22 @@ class ConfigTest extends TestCase public function test_dompdf_remote_fetching_controlled_by_allow_untrusted_server_fetching_false() { - $this->checkEnvConfigResult('ALLOW_UNTRUSTED_SERVER_FETCHING', 'false', 'dompdf.options.enable_remote', false); - $this->checkEnvConfigResult('ALLOW_UNTRUSTED_SERVER_FETCHING', 'true', 'dompdf.options.enable_remote', true); + $this->checkEnvConfigResult('ALLOW_UNTRUSTED_SERVER_FETCHING', 'false', 'exports.dompdf.enable_remote', false); + $this->checkEnvConfigResult('ALLOW_UNTRUSTED_SERVER_FETCHING', 'true', 'exports.dompdf.enable_remote', true); } public function test_dompdf_paper_size_options_are_limited() { - $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'cat', 'dompdf.options.default_paper_size', 'a4'); - $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'letter', 'dompdf.options.default_paper_size', 'letter'); - $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'a4', 'dompdf.options.default_paper_size', 'a4'); + $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'cat', 'exports.dompdf.default_paper_size', 'a4'); + $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'letter', 'exports.dompdf.default_paper_size', 'letter'); + $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'a4', 'exports.dompdf.default_paper_size', 'a4'); } public function test_snappy_paper_size_options_are_limited() { - $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'cat', 'snappy.pdf.options.page-size', 'A4'); - $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'letter', 'snappy.pdf.options.page-size', 'Letter'); - $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'a4', 'snappy.pdf.options.page-size', 'A4'); + $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'cat', 'exports.snappy.options.page-size', 'A4'); + $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'letter', 'exports.snappy.options.page-size', 'Letter'); + $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'a4', 'exports.snappy.options.page-size', 'A4'); } public function test_sendmail_command_is_configurable() @@ -132,7 +132,7 @@ class ConfigTest extends TestCase public function test_smtp_scheme_and_certain_port_forces_tls_usage() { $isMailTlsRequired = function () { - /** @var \BookStack\App\Mail\EsmtpTransport $transport */ + /** @var EsmtpTransport $transport */ $transport = Mail::mailer('smtp')->getSymfonyTransport(); Mail::purge('smtp'); return $transport->getTlsRequirement(); diff --git a/tests/Unit/OidcIdTokenTest.php b/tests/Unit/OidcIdTokenTest.php index 6302f84c7..739323266 100644 --- a/tests/Unit/OidcIdTokenTest.php +++ b/tests/Unit/OidcIdTokenTest.php @@ -113,7 +113,7 @@ class OidcIdTokenTest extends TestCase // 2. aud claim present ['Missing token audience value', ['aud' => null]], // 2. aud claim validates all values against those expected (Only expect single) - ['Token audience value has 2 values, Expected 1', ['aud' => ['abc', 'def']]], + ['Token audience value has 2 values, Expected 1', ['aud' => ['xxyyzz.aaa.bbccdd.123', 'def']]], // 2. aud claim matches client id ['Token audience value did not match the expected client_id', ['aud' => 'xxyyzz.aaa.bbccdd.456']], // 4. azp claim matches client id if present diff --git a/tests/User/UserProfileTest.php b/tests/User/UserProfileTest.php index 4bfb3c878..065ae8dc8 100644 --- a/tests/User/UserProfileTest.php +++ b/tests/User/UserProfileTest.php @@ -2,8 +2,8 @@ namespace Tests\User; -use Activity; use BookStack\Activity\ActivityType; +use BookStack\Facades\Activity; use BookStack\Users\Models\User; use Tests\TestCase; diff --git a/version b/version index 4860fe4d0..4bf7b7d12 100644 --- a/version +++ b/version @@ -1 +1 @@ -v24.02.3 +v24.05