diff options
Diffstat (limited to 'core')
45 files changed, 618 insertions, 472 deletions
diff --git a/core/AppInfo/ConfigLexicon.php b/core/AppInfo/ConfigLexicon.php index 5dad229267d..df8243019ad 100644 --- a/core/AppInfo/ConfigLexicon.php +++ b/core/AppInfo/ConfigLexicon.php @@ -10,6 +10,7 @@ namespace OC\Core\AppInfo; use OCP\Config\Lexicon\Entry; use OCP\Config\Lexicon\ILexicon; +use OCP\Config\Lexicon\Preset; use OCP\Config\Lexicon\Strictness; use OCP\Config\ValueType; @@ -20,6 +21,9 @@ use OCP\Config\ValueType; */ class ConfigLexicon implements ILexicon { public const SHAREAPI_ALLOW_FEDERATION_ON_PUBLIC_SHARES = 'shareapi_allow_federation_on_public_shares'; + public const SHARE_CUSTOM_TOKEN = 'shareapi_allow_custom_tokens'; + public const USER_LANGUAGE = 'lang'; + public const LASTCRON_TIMESTAMP = 'lastcron'; public function getStrictness(): Strictness { return Strictness::IGNORE; @@ -34,10 +38,24 @@ class ConfigLexicon implements ILexicon { definition: 'adds share permission to public shares to allow adding them to your Nextcloud (federation)', lazy: true, ), + new Entry( + key: self::SHARE_CUSTOM_TOKEN, + type: ValueType::BOOL, + defaultRaw: fn (Preset $p): bool => match ($p) { + Preset::FAMILY, Preset::PRIVATE => true, + default => false, + }, + definition: 'Allow users to set custom share link tokens', + lazy: true, + note: 'Shares with guessable tokens may be accessed easily. Shares with custom tokens will continue to be accessible after this setting has been disabled.', + ), + new Entry(self::LASTCRON_TIMESTAMP, ValueType::INT, 0, 'timestamp of last cron execution'), ]; } public function getUserConfigs(): array { - return []; + return [ + new Entry(self::USER_LANGUAGE, ValueType::STRING, null, 'language'), + ]; } } diff --git a/core/Command/Base.php b/core/Command/Base.php index c9b6337b64a..6ab2765b0f9 100644 --- a/core/Command/Base.php +++ b/core/Command/Base.php @@ -170,6 +170,8 @@ class Base extends Command implements CompletionAwareInterface { return 'true'; } elseif ($value === null) { return $returnNull ? null : 'null'; + } if ($value instanceof \UnitEnum) { + return $value->value; } else { return $value; } diff --git a/core/Command/Config/App/GetConfig.php b/core/Command/Config/App/GetConfig.php index b68476a2e91..af0c5648232 100644 --- a/core/Command/Config/App/GetConfig.php +++ b/core/Command/Config/App/GetConfig.php @@ -38,6 +38,12 @@ class GetConfig extends Base { 'returns complete details about the app config value' ) ->addOption( + '--key-details', + null, + InputOption::VALUE_NONE, + 'returns complete details about the app config key' + ) + ->addOption( 'default-value', null, InputOption::VALUE_OPTIONAL, @@ -66,6 +72,12 @@ class GetConfig extends Base { return 0; } + if ($input->getOption('key-details')) { + $details = $this->appConfig->getKeyDetails($appName, $configName); + $this->writeArrayInOutputFormat($input, $output, $details); + return 0; + } + try { $configValue = $this->appConfig->getDetails($appName, $configName)['value']; } catch (AppConfigUnknownKeyException $e) { diff --git a/core/Command/Config/App/SetConfig.php b/core/Command/Config/App/SetConfig.php index 1f4ab81bf05..c818404fc0e 100644 --- a/core/Command/Config/App/SetConfig.php +++ b/core/Command/Config/App/SetConfig.php @@ -199,6 +199,11 @@ class SetConfig extends Base { $current['lazy'] ? 'lazy cache' : 'fast cache' ) ); + $keyDetails = $this->appConfig->getKeyDetails($appName, $configName); + if (($keyDetails['note'] ?? '') !== '') { + $output->writeln('<comment>Note:</comment> ' . $keyDetails['note']); + } + } else { $output->writeln('<info>Config value were not updated</info>'); } diff --git a/core/Command/Config/Preset.php b/core/Command/Config/Preset.php index 4f0278896db..ebd8aaa5cdf 100644 --- a/core/Command/Config/Preset.php +++ b/core/Command/Config/Preset.php @@ -8,10 +8,9 @@ declare(strict_types=1); */ namespace OC\Core\Command\Config; -use OC\Config\ConfigManager; +use OC\Config\PresetManager; use OC\Core\Command\Base; use OCP\Config\Lexicon\Preset as ConfigLexiconPreset; -use OCP\IConfig; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; @@ -19,8 +18,7 @@ use Symfony\Component\Console\Output\OutputInterface; class Preset extends Base { public function __construct( - private readonly IConfig $config, - private readonly ConfigManager $configManager, + private readonly PresetManager $presetManager, ) { parent::__construct(); } @@ -49,10 +47,10 @@ class Preset extends Base { return self::INVALID; } - $this->configManager->setLexiconPreset($preset); + $this->presetManager->setLexiconPreset($preset); } - $current = ConfigLexiconPreset::tryFrom($this->config->getSystemValueInt(ConfigManager::PRESET_CONFIGKEY, 0)) ?? ConfigLexiconPreset::NONE; + $current = $this->presetManager->getLexiconPreset(); $this->writeArrayInOutputFormat($input, $output, [$current->name], 'current preset: '); return self::SUCCESS; } diff --git a/core/Command/TaskProcessing/EnabledCommand.php b/core/Command/TaskProcessing/EnabledCommand.php index 7195d19a7a4..0d4b831812c 100644 --- a/core/Command/TaskProcessing/EnabledCommand.php +++ b/core/Command/TaskProcessing/EnabledCommand.php @@ -7,7 +7,7 @@ namespace OC\Core\Command\TaskProcessing; use OC\Core\Command\Base; -use OCP\IConfig; +use OCP\IAppConfig; use OCP\TaskProcessing\IManager; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -16,7 +16,7 @@ use Symfony\Component\Console\Output\OutputInterface; class EnabledCommand extends Base { public function __construct( protected IManager $taskProcessingManager, - private IConfig $config, + private IAppConfig $appConfig, ) { parent::__construct(); } @@ -41,7 +41,7 @@ class EnabledCommand extends Base { protected function execute(InputInterface $input, OutputInterface $output): int { $enabled = (bool)$input->getArgument('enabled'); $taskType = $input->getArgument('task-type-id'); - $json = $this->config->getAppValue('core', 'ai.taskprocessing_type_preferences'); + $json = $this->appConfig->getValueString('core', 'ai.taskprocessing_type_preferences', lazy: true); try { if ($json === '') { $taskTypeSettings = []; @@ -51,7 +51,7 @@ class EnabledCommand extends Base { $taskTypeSettings[$taskType] = $enabled; - $this->config->setAppValue('core', 'ai.taskprocessing_type_preferences', json_encode($taskTypeSettings)); + $this->appConfig->setValueString('core', 'ai.taskprocessing_type_preferences', json_encode($taskTypeSettings), lazy: true); $this->writeArrayInOutputFormat($input, $output, $taskTypeSettings); return 0; } catch (\JsonException $e) { diff --git a/core/Listener/AddMissingIndicesListener.php b/core/Listener/AddMissingIndicesListener.php index f54dc7e17fe..89c96648b99 100644 --- a/core/Listener/AddMissingIndicesListener.php +++ b/core/Listener/AddMissingIndicesListener.php @@ -210,5 +210,11 @@ class AddMissingIndicesListener implements IEventListener { 'systag_objecttype', ['objecttype'] ); + + $event->addMissingUniqueIndex( + 'vcategory', + 'unique_category_per_user', + ['uid', 'type', 'category'] + ); } } diff --git a/core/Migrations/Version13000Date20170718121200.php b/core/Migrations/Version13000Date20170718121200.php index d33d489c579..35c2d1730bc 100644 --- a/core/Migrations/Version13000Date20170718121200.php +++ b/core/Migrations/Version13000Date20170718121200.php @@ -658,6 +658,7 @@ class Version13000Date20170718121200 extends SimpleMigrationStep { $table->addIndex(['uid'], 'uid_index'); $table->addIndex(['type'], 'type_index'); $table->addIndex(['category'], 'category_index'); + $table->addUniqueIndex(['uid', 'type', 'category'], 'unique_category_per_user'); } if (!$schema->hasTable('vcategory_to_object')) { diff --git a/core/Migrations/Version32000Date20250731062008.php b/core/Migrations/Version32000Date20250731062008.php new file mode 100644 index 00000000000..bf15e4a0b22 --- /dev/null +++ b/core/Migrations/Version32000Date20250731062008.php @@ -0,0 +1,106 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OC\Core\Migrations; + +use Closure; +use OCP\DB\ISchemaWrapper; +use OCP\IDBConnection; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; +use Override; + +/** + * Make sure vcategory entries are unique per user and type + * This migration will clean up existing duplicates + * and add a unique constraint to prevent future duplicates. + */ +class Version32000Date20250731062008 extends SimpleMigrationStep { + public function __construct( + private IDBConnection $connection, + ) { + } + + /** + * @param IOutput $output + * @param Closure(): ISchemaWrapper $schemaClosure + * @param array $options + */ + #[Override] + public function preSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void { + // Clean up duplicate categories before adding unique constraint + $this->cleanupDuplicateCategories($output); + } + + /** + * Clean up duplicate categories + */ + private function cleanupDuplicateCategories(IOutput $output) { + $output->info('Starting cleanup of duplicate vcategory records...'); + + // Find all categories, ordered to identify duplicates + $qb = $this->connection->getQueryBuilder(); + $qb->select('id', 'uid', 'type', 'category') + ->from('vcategory') + ->orderBy('uid') + ->addOrderBy('type') + ->addOrderBy('category') + ->addOrderBy('id'); + + $result = $qb->executeQuery(); + + $seen = []; + $duplicateCount = 0; + + while ($category = $result->fetch()) { + $key = $category['uid'] . '|' . $category['type'] . '|' . $category['category']; + $categoryId = (int)$category['id']; + + if (!isset($seen[$key])) { + // First occurrence - keep this one + $seen[$key] = $categoryId; + continue; + } + + // Duplicate found + $keepId = $seen[$key]; + $duplicateCount++; + + $output->info("Found duplicate: keeping ID $keepId, removing ID $categoryId"); + + // Update object references + $updateQb = $this->connection->getQueryBuilder(); + $updateQb->update('vcategory_to_object') + ->set('categoryid', $updateQb->createNamedParameter($keepId)) + ->where($updateQb->expr()->eq('categoryid', $updateQb->createNamedParameter($categoryId))); + + $affectedRows = $updateQb->executeStatement(); + if ($affectedRows > 0) { + $output->info(" - Updated $affectedRows object references from category $categoryId to $keepId"); + } + + // Remove duplicate category record + $deleteQb = $this->connection->getQueryBuilder(); + $deleteQb->delete('vcategory') + ->where($deleteQb->expr()->eq('id', $deleteQb->createNamedParameter($categoryId))); + + $deleteQb->executeStatement(); + $output->info(" - Deleted duplicate category record ID $categoryId"); + + } + + $result->closeCursor(); + + if ($duplicateCount === 0) { + $output->info('No duplicate categories found'); + } else { + $output->info("Duplicate cleanup completed - processed $duplicateCount duplicates"); + } + } +} diff --git a/core/css/header.css b/core/css/header.css index bfa1f475ba6..1c748610023 100644 --- a/core/css/header.css +++ b/core/css/header.css @@ -2,7 +2,4 @@ * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2016 ownCloud, Inc. * SPDX-License-Identifier: AGPL-3.0-or-later - *//*! - * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors - * SPDX-License-Identifier: AGPL-3.0-or-later - */#header,#expanddiv{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#header #nextcloud:focus-visible,#header .app-menu-entry a:focus-visible,#header .header-menu button:first-of-type:focus-visible,#expanddiv #nextcloud:focus-visible,#expanddiv .app-menu-entry a:focus-visible,#expanddiv .header-menu button:first-of-type:focus-visible{outline:none}#header #nextcloud:focus-visible::after,#header .app-menu-entry a:focus-visible::after,#header .header-menu button:first-of-type:focus-visible::after,#expanddiv #nextcloud:focus-visible::after,#expanddiv .app-menu-entry a:focus-visible::after,#expanddiv .header-menu button:first-of-type:focus-visible::after{content:" ";position:absolute;inset-block-end:2px;transform:translateX(-50%);width:12px;height:2px;border-radius:3px;background-color:var(--color-background-plain-text);inset-inline-start:50%;opacity:1}#header .header-end,#expanddiv .header-end{margin-inline-end:calc(3*var(--default-grid-baseline))}#header .header-end a:not(.button):focus-visible::after,#header .header-end div[role=button]:focus-visible::after,#expanddiv .header-end a:not(.button):focus-visible::after,#expanddiv .header-end div[role=button]:focus-visible::after{bottom:4px}#header .header-end #expand.menutoggle:focus-visible::after,#expanddiv .header-end #expand.menutoggle:focus-visible::after{inset-inline-start:40%}#body-user #header,#body-settings #header,#body-public #header{display:inline-flex;position:absolute;top:0;width:100%;z-index:2000;height:50px;box-sizing:border-box;justify-content:space-between}#nextcloud{padding:5px 0;padding-inline-start:86px;position:relative;height:calc(100% - 4px);box-sizing:border-box;opacity:1;align-items:center;display:flex;flex-wrap:wrap;overflow:hidden;margin:2px}#nextcloud:hover,#nextcloud:active{opacity:1}#header .header-end>div>.menu{background-color:var(--color-main-background);filter:drop-shadow(0 1px 5px var(--color-box-shadow));border-radius:var(--border-radius-large);box-sizing:border-box;z-index:2000;position:absolute;max-width:350px;min-height:66px;max-height:calc(100vh - 50px - 8px);inset-inline-end:8px;top:50px;margin:0;overflow-y:auto}#header .header-end>div>.menu:not(.popovermenu){display:none}#header .header-end>div>.menu:after{border:10px solid rgba(0,0,0,0);border-bottom-color:var(--color-main-background);bottom:100%;content:" ";height:0;width:0;position:absolute;pointer-events:none;inset-inline-end:10px}#header .header-end>div>.menu>div,#header .header-end>div>.menu>ul{-webkit-overflow-scrolling:touch;min-height:66px;max-height:calc(100vh - 50px - 8px)}#header .logo{display:inline-flex;background-image:var(--image-logoheader, var(--image-logo, url("../img/logo/logo.svg")));background-repeat:no-repeat;background-size:contain;background-position:center;width:62px;position:absolute;inset-inline-start:12px;top:1px;bottom:1px;filter:var(--image-logoheader-custom, var(--background-image-invert-if-bright))}#header .header-appname-container{display:none;padding-inline-end:10px;flex-shrink:0}#header #header-start,#header .header-start,#header #header-end,#header .header-end{display:inline-flex;align-items:center}#header #header-start,#header .header-start{flex:1 0;white-space:nowrap;min-width:0}#header #header-end,#header .header-end{justify-content:flex-end;flex-shrink:1}#header .header-end>.header-menu__trigger img{filter:var(--background-image-invert-if-bright)}#header .header-end>div,#header .header-end>form{height:100%;position:relative}#header .header-end>div>.menutoggle,#header .header-end>form>.menutoggle{display:flex;justify-content:center;align-items:center;width:50px;height:44px;cursor:pointer;opacity:.85;padding:0;margin:2px 0}#header .header-end>div>.menutoggle:focus,#header .header-end>form>.menutoggle:focus{opacity:1}#header .header-end>div>.menutoggle:focus-visible,#header .header-end>form>.menutoggle:focus-visible{outline:none}.header-appname-container .header-appname{opacity:.75}.header-appname{color:var(--color-background-plain-text);font-size:16px;font-weight:bold;margin:0;padding:0;padding-inline-end:5px;overflow:hidden;text-overflow:ellipsis;flex:1 1 100%}.header-info{display:flex;flex-direction:column;overflow:hidden}.header-title{overflow:hidden;text-overflow:ellipsis}.header-shared-by{color:var(--color-background-plain-text);position:relative;font-weight:300;font-size:11px;line-height:11px;overflow:hidden;text-overflow:ellipsis}#skip-actions{position:absolute;overflow:hidden;z-index:9999;top:-999px;inset-inline-start:3px;padding:11px;display:flex;flex-wrap:wrap;gap:11px}#skip-actions:focus-within{top:50px}header #emptycontent h2,header .emptycontent h2{font-weight:normal;font-size:16px}header #emptycontent [class^=icon-],header #emptycontent [class*=icon-],header .emptycontent [class^=icon-],header .emptycontent [class*=icon-]{background-size:48px;height:48px;width:48px}/*# sourceMappingURL=header.css.map */ + */#skip-actions{position:absolute;overflow:hidden;z-index:9999;top:-999px;inset-inline-start:3px;padding:11px;display:flex;flex-wrap:wrap;gap:11px}#skip-actions:focus-within{top:var(--header-height)}#header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#header:not(.header-guest){display:inline-flex;position:absolute;top:0;width:100%;z-index:2000;height:var(--header-height);box-sizing:border-box;justify-content:space-between}#header #nextcloud{padding:5px 0;padding-inline-start:86px;position:relative;height:calc(100% - var(--default-grid-baseline));box-sizing:border-box;opacity:1;align-items:center;display:flex;flex-wrap:wrap;overflow:hidden;margin:2px}#header #nextcloud:hover,#header #nextcloud:active{opacity:1}#header #nextcloud .logo{display:inline-flex;background-image:var(--image-logoheader, var(--image-logo, url("../img/logo/logo.svg")));background-repeat:no-repeat;background-size:contain;background-position:center;width:62px;position:absolute;inset-inline-start:12px;top:1px;bottom:1px;filter:var(--image-logoheader-custom, var(--background-image-invert-if-bright))}#header #nextcloud:focus-visible,#header .app-menu-entry a:focus-visible,#header .header-menu button:first-of-type:focus-visible{outline:none}#header #nextcloud:focus-visible::after,#header .app-menu-entry a:focus-visible::after,#header .header-menu button:first-of-type:focus-visible::after{content:" ";position:absolute;inset-block-end:2px;transform:translateX(-50%);width:12px;height:2px;border-radius:3px;background-color:var(--color-background-plain-text);inset-inline-start:50%;opacity:1}#header .header-start{display:inline-flex;align-items:center;flex:1 0;white-space:nowrap;min-width:0}#header .header-end{display:inline-flex;align-items:center;justify-content:flex-end;flex-shrink:1;margin-inline-end:calc(3*var(--default-grid-baseline))}#header .header-end>div,#header .header-end>form{height:100%;position:relative}#header .header-end>div>.menutoggle,#header .header-end>form>.menutoggle{display:flex;justify-content:center;align-items:center;width:var(--header-height);height:var(--header-menu-item-height);cursor:pointer;opacity:.85;padding:0;margin:2px 0}#header .header-end>div>.menutoggle:focus,#header .header-end>form>.menutoggle:focus{opacity:1}#header .header-end>div>.menutoggle:focus-visible,#header .header-end>form>.menutoggle:focus-visible{outline:none}#header .header-end>div>.menu,#header .header-end>form>.menu{background-color:var(--color-main-background);filter:drop-shadow(0 1px 5px var(--color-box-shadow));border-radius:var(--border-radius-large);box-sizing:border-box;z-index:2000;position:absolute;max-width:350px;min-height:calc(var(--default-clickable-area)*1.5);max-height:calc(100vh - var(--header-height) - 2*var(--default-grid-baseline));inset-inline-end:8px;top:var(--header-height);margin:0;overflow-y:auto}#header .header-end>div>.menu:not(.popovermenu),#header .header-end>form>.menu:not(.popovermenu){display:none}#header .header-end>div>.menu:after,#header .header-end>form>.menu:after{border:10px solid rgba(0,0,0,0);border-bottom-color:var(--color-main-background);bottom:100%;content:" ";height:0;width:0;position:absolute;pointer-events:none;inset-inline-end:10px}#header .header-end>div>.menu>div,#header .header-end>div>.menu>ul,#header .header-end>form>.menu>div,#header .header-end>form>.menu>ul{-webkit-overflow-scrolling:touch;min-height:calc(var(--default-clickable-area)*1.5);max-height:calc(100vh - var(--header-height) - 2*var(--default-grid-baseline))}#header .header-end>div .emptycontent h2,#header .header-end>form .emptycontent h2{font-weight:normal;font-size:16px}#header .header-end>div .emptycontent [class^=icon-],#header .header-end>div .emptycontent [class*=icon-],#header .header-end>form .emptycontent [class^=icon-],#header .header-end>form .emptycontent [class*=icon-]{background-size:48px;height:48px;width:48px}#header .header-appname{color:var(--color-background-plain-text);font-size:16px;font-weight:bold;margin:0;padding:0;padding-inline-end:5px;overflow:hidden;text-overflow:ellipsis;flex:1 1 100%}#header .header-appname .header-info{display:flex;flex-direction:column;overflow:hidden}#header .header-appname .header-info .header-title{overflow:hidden;text-overflow:ellipsis}#header .header-appname .header-info .header-shared-by{color:var(--color-background-plain-text);position:relative;font-weight:300;font-size:var(--font-size-small);line-height:var(--font-size-small);overflow:hidden;text-overflow:ellipsis}@media(display-mode: standalone)or (display-mode: minimal-ui){#header:not(.header-guest){display:none !important}#content,#content-vue{margin-top:var(--body-container-margin)}:root{--body-height: calc(100% - env(safe-area-inset-bottom) - var(--body-container-margin) * 2) !important}}/*# sourceMappingURL=header.css.map */ diff --git a/core/css/header.css.map b/core/css/header.css.map index 5aa4a9249e0..50d096529d9 100644 --- a/core/css/header.css.map +++ b/core/css/header.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["header.scss","variables.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA,GCEA;AAAA;AAAA;AAAA,GDMA,mBAEC,yBACA,sBACA,qBACA,iBAEA,2QAGC,aAEA,qTACC,YACA,kBACA,oBACA,2BACA,WACA,WACA,kBACA,oDACA,uBACA,UAIF,2CAEC,uDAEA,0OACC,WAGD,2HACC,uBAOH,+DAGC,oBACA,kBACA,MACA,WACA,aACA,OCiCe,KDhCf,sBACA,8BAID,WACC,cACA,0BACA,kBACA,wBACA,sBACA,UACA,mBACA,aACA,eACA,gBACA,WAEA,mCACC,UAaD,8BACC,8CACA,sDACA,yCACA,sBACA,aACA,kBACA,gBAfD,gBACA,oCAgBC,qBACA,ICVc,KDWd,SACA,gBAEA,gDACC,aAID,oCACC,gCACA,iDACA,YACA,YACA,SACA,QACA,kBACA,oBACA,sBAGD,mEAEC,iCAzCF,gBACA,oCA4CA,cACC,oBACA,yFACA,4BACA,wBACA,2BACA,WACA,kBACA,wBACA,QACA,WAEA,gFAGD,kCACC,aACA,wBACA,cAGD,oFAEC,oBACA,mBAGD,4CACC,SACA,mBACA,YAGD,wCACC,yBACA,cAKA,8CACC,gDAED,iDAEC,YACA,kBACA,yEACC,aACA,uBACA,mBACA,MCxFY,KDyFZ,YACA,eACA,YACA,UACA,aAEA,qFACC,UAGD,qGACC,aASL,0CACC,YAKD,gBACC,yCACA,eACA,iBACA,SACA,UACA,uBACA,gBACA,uBAEA,cAGD,aACC,aACA,sBACA,gBAGD,cACC,gBACA,uBAGD,kBACC,yCACA,kBACA,gBACA,eACA,iBACA,gBACA,uBAID,cACC,kBACA,gBACA,aACA,WACA,uBACA,aACA,aACA,eACA,SAEA,2BACC,IClKc,KDyKf,gDACC,mBACA,eAED,gJAEC,qBACA,YACA","file":"header.css"}
\ No newline at end of file +{"version":3,"sourceRoot":"","sources":["header.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA,GAYA,cACC,kBACA,gBACA,aACA,WACA,uBACA,aACA,aACA,eACA,SAEA,2BACC,yBAKF,QAEC,yBACA,sBACA,qBACA,iBAGA,2BACC,oBACA,kBACA,MACA,WACA,aACA,4BACA,sBACA,8BAID,mBACC,cACA,0BACA,kBACA,iDACA,sBACA,UACA,mBACA,aACA,eACA,gBACA,WAEA,mDACC,UAID,yBACC,oBACA,yFACA,4BACA,wBACA,2BACA,WACA,kBACA,wBACA,QACA,WAEA,gFAMF,iIAGC,aAEA,sJACC,YACA,kBACA,oBACA,2BACA,WACA,WACA,kBACA,oDACA,uBACA,UAOF,sBACC,oBACA,mBACA,SACA,mBACA,YAKD,oBACC,oBACA,mBACA,yBACA,cAEA,uDAIA,iDAEC,YACA,kBACA,yEACC,aACA,uBACA,mBACA,2BACA,sCACA,eACA,YACA,UACA,aAEA,qFACC,UAGD,qGACC,aAIF,6DACC,8CACA,sDACA,yCACA,sBACA,aACA,kBACA,gBAvJH,mDACA,+EAwJG,qBACA,yBACA,SACA,gBAEA,iGACC,aAID,yEACC,gCACA,iDACA,YACA,YACA,SACA,QACA,kBACA,oBACA,sBAGD,wIAEC,iCAjLJ,mDACA,+EAsLG,mFACC,mBACA,eAED,sNAEC,qBACA,YACA,WAQJ,wBACC,yCACA,eACA,iBACA,SACA,UACA,uBACA,gBACA,uBAEA,cAGA,qCACC,aACA,sBACA,gBAEA,mDACC,gBACA,uBAGD,uDACC,yCACA,kBACA,gBACA,iCACA,mCACA,gBACA,uBAMJ,8DACC,2BACC,wBAGD,sBACC,wCAGD,MAEC","file":"header.css"}
\ No newline at end of file diff --git a/core/css/header.scss b/core/css/header.scss index 722a743df6a..e14e1eecb11 100644 --- a/core/css/header.scss +++ b/core/css/header.scss @@ -3,16 +3,86 @@ * SPDX-FileCopyrightText: 2016 ownCloud, Inc. * SPDX-License-Identifier: AGPL-3.0-or-later */ -@use 'variables'; -/* prevent ugly selection effect on accidental selection */ -#header, -#expanddiv { +@mixin header-menu-height() { + min-height: calc(var(--default-clickable-area) * 1.5); // show at least 1.5 entries + max-height: calc(100vh - var(--header-height) - (2 * var(--default-grid-baseline))); +} + +/* Skip navigation links – show only on keyboard focus */ +#skip-actions { + position: absolute; + overflow: hidden; + z-index: 9999; + top: -999px; + inset-inline-start: 3px; + padding: 11px; + display: flex; + flex-wrap: wrap; + gap: 11px; + + &:focus-within { + top: var(--header-height); + } +} + +/* HEADERS ------------------------------------------------------------------ */ +#header { + // prevent ugly selection effect on accidental selection -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; + // for legacy the reasons the guest layout also uses the same id, so we need to exclude it as it uses a different layout. + &:not(.header-guest) { + display: inline-flex; + position: absolute; + top: 0; + width: 100%; + z-index: 2000; + height: var(--header-height); + box-sizing: border-box; + justify-content: space-between; + } + + // This is the first entry in the header, it represents the "home"-link + #nextcloud { + padding: 5px 0; + padding-inline-start: 86px; // logo width + 2 * the inset (padding) + position: relative; + height: calc(100% - var(--default-grid-baseline)); + box-sizing: border-box; + opacity: 1; + align-items: center; + display: flex; + flex-wrap: wrap; + overflow: hidden; + margin: 2px; + + &:hover, &:active { + opacity: 1; + } + + // the actual logo within the home-link entry + .logo { + display: inline-flex; + background-image: var(--image-logoheader, var(--image-logo, url('../img/logo/logo.svg'))); + background-repeat: no-repeat; + background-size: contain; + background-position: center; + width: 62px; + position: absolute; + inset-inline-start: 12px; + top: 1px; + bottom: 1px; + // Invert if not customized and background is bright + filter: var(--image-logoheader-custom, var(--background-image-invert-if-bright)); + } + } + + // focus visible styles + // this adds a small line below all entries when visually focussed #nextcloud:focus-visible, .app-menu-entry a:focus-visible, .header-menu button:first-of-type:focus-visible { @@ -32,143 +102,29 @@ } } - .header-end { - // Add some spacing so the last entry looks ok - margin-inline-end: calc(3 * var(--default-grid-baseline)); - - a:not(.button):focus-visible::after, div[role=button]:focus-visible::after { - bottom: 4px; - } - - #expand.menutoggle:focus-visible::after { - inset-inline-start: 40%; - } - } - -} - -/* HEADERS ------------------------------------------------------------------ */ -#body-user #header, -#body-settings #header, -#body-public #header { - display: inline-flex; - position: absolute; - top: 0; - width: 100%; - z-index: 2000; - height: variables.$header-height; - box-sizing: border-box; - justify-content: space-between; -} - -/* LOGO and APP NAME -------------------------------------------------------- */ -#nextcloud { - padding: 5px 0; - padding-inline-start: 86px; // logo width + 2* pa - position: relative; - height: calc(100% - 4px); - box-sizing: border-box; - opacity: 1; - align-items: center; - display: flex; - flex-wrap: wrap; - overflow: hidden; - margin: 2px; - - &:hover, &:active { - opacity: 1; - } -} - -@mixin header-menu-height() { - min-height: calc(44px * 1.5); // show at least 1.5 entries - max-height: calc(100vh - #{variables.$header-height} - 8px); -} - -#header { - /* Header menu */ - $header-menu-entry-height: 44px; - - .header-end > div > .menu { - background-color: var(--color-main-background); - filter: drop-shadow(0 1px 5px var(--color-box-shadow)); - border-radius: var(--border-radius-large); - box-sizing: border-box; - z-index: 2000; - position: absolute; - max-width: 350px; - @include header-menu-height(); - inset-inline-end: 8px; // relative to parent - top: variables.$header-height; - margin: 0; - overflow-y: auto; - - &:not(.popovermenu) { - display: none; - } - - /* Dropdown arrow */ - &:after { - border: 10px solid transparent; - border-bottom-color: var(--color-main-background); - bottom: 100%; - content: ' '; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - inset-inline-end: 10px; - } - - & > div, - & > ul { - -webkit-overflow-scrolling: touch; - @include header-menu-height(); - } - } - .logo { - display: inline-flex; - background-image: var(--image-logoheader, var(--image-logo, url('../img/logo/logo.svg'))); - background-repeat: no-repeat; - background-size: contain; - background-position: center; - width: 62px; - position: absolute; - inset-inline-start: 12px; - top: 1px; - bottom: 1px; - // Invert if not customized and background is bright - filter: var(--image-logoheader-custom, var(--background-image-invert-if-bright)); - } - - .header-appname-container { - display: none; - padding-inline-end: 10px; - flex-shrink: 0; - } - - #header-start, .header-start, - #header-end, .header-end { + // This is the first part of the header + // for the user template it contains the application icons (app menu) + // for public templates this contains e.g. share information + .header-start { display: inline-flex; align-items: center; - } - - #header-start, .header-start { flex: 1 0; white-space: nowrap; min-width: 0; } - #header-end, .header-end { + // This is the last part of the header + // It contains the short cuts like unified search, contacts-, or account menu + .header-end { + display: inline-flex; + align-items: center; justify-content: flex-end; flex-shrink: 1; - } + // Add some spacing so the last entry looks ok + margin-inline-end: calc(3 * var(--default-grid-baseline)); - /* Right header standard */ - .header-end { - > .header-menu__trigger img { - filter: var(--background-image-invert-if-bright); - } + // legacy JQuery header menus + // TODO: we already migrated our own code and deprecated it - can be removed together with global jQuery > div, > form { height: 100%; @@ -177,8 +133,8 @@ display: flex; justify-content: center; align-items: center; - width: variables.$header-height; - height: 44px; + width: var(--header-height); + height: var(--header-menu-item-height); cursor: pointer; opacity: 0.85; padding: 0; @@ -192,80 +148,109 @@ outline: none; } } - } - } -} -/* hover effect for app switcher label */ + > .menu { + background-color: var(--color-main-background); + filter: drop-shadow(0 1px 5px var(--color-box-shadow)); + border-radius: var(--border-radius-large); + box-sizing: border-box; + z-index: 2000; + position: absolute; + max-width: 350px; + @include header-menu-height(); + inset-inline-end: 8px; // relative to parent + top: var(--header-height); + margin: 0; + overflow-y: auto; + + &:not(.popovermenu) { + display: none; + } -.header-appname-container .header-appname { - opacity: .75; -} + /* Dropdown arrow */ + &:after { + border: 10px solid transparent; + border-bottom-color: var(--color-main-background); + bottom: 100%; + content: ' '; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + inset-inline-end: 10px; + } -/* TODO: move into minimal css file for public shared template */ -/* only used for public share pages now as we have the app icons when logged in */ -.header-appname { - color: var(--color-background-plain-text); - font-size: 16px; - font-weight: bold; - margin: 0; - padding: 0; - padding-inline-end: 5px; - overflow: hidden; - text-overflow: ellipsis; - // Take full width to push the header-shared-by bellow (if any) - flex: 1 1 100%; -} + & > div, + & > ul { + -webkit-overflow-scrolling: touch; + @include header-menu-height(); + } + } -.header-info { - display: flex; - flex-direction: column; - overflow: hidden; -} + .emptycontent { + h2 { + font-weight: normal; + font-size: 16px; + } + [class^='icon-'], + [class*='icon-'] { + background-size: 48px; + height: 48px; + width: 48px; + } + } + } + } -.header-title { - overflow: hidden; - text-overflow: ellipsis; -} + // Public layout related headers + // app related header container ONLY on public shares (layout.public.php) + .header-appname { + color: var(--color-background-plain-text); + font-size: 16px; + font-weight: bold; + margin: 0; + padding: 0; + padding-inline-end: 5px; + overflow: hidden; + text-overflow: ellipsis; + // Take full width to push the header-shared-by bellow (if any) + flex: 1 1 100%; + + // container for the public template header information + .header-info { + display: flex; + flex-direction: column; + overflow: hidden; + + .header-title { + overflow: hidden; + text-overflow: ellipsis; + } -.header-shared-by { - color: var(--color-background-plain-text); - position: relative; - font-weight: 300; - font-size: 11px; - line-height: 11px; - overflow: hidden; - text-overflow: ellipsis; + .header-shared-by { + color: var(--color-background-plain-text); + position: relative; + font-weight: 300; + font-size: var(--font-size-small); + line-height: var(--font-size-small); + overflow: hidden; + text-overflow: ellipsis; + } + } + } } -/* Skip navigation links – show only on keyboard focus */ -#skip-actions { - position: absolute; - overflow: hidden; - z-index: 9999; - top: -999px; - inset-inline-start: 3px; - padding: 11px; - display: flex; - flex-wrap: wrap; - gap: 11px; - - &:focus-within { - top: variables.$header-height; +@media (display-mode: standalone) or (display-mode: minimal-ui) { + #header:not(.header-guest) { + display: none !important; } -} -/* Empty content messages in the header e.g. notifications, contacts menu, … */ -header #emptycontent, -header .emptycontent { - h2 { - font-weight: normal; - font-size: 16px; + #content, #content-vue { + margin-top: var(--body-container-margin); } - [class^='icon-'], - [class*='icon-'] { - background-size: 48px; - height: 48px; - width: 48px; + + :root { + // Override the body height to make up for the additional height due to the missing header. + --body-height: calc(100% - env(safe-area-inset-bottom) - var(--body-container-margin) * 2) !important; } } diff --git a/core/css/server.css b/core/css/server.css index c4cf5ceaf97..6abf729eb05 100644 --- a/core/css/server.css +++ b/core/css/server.css @@ -22,7 +22,7 @@ * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2016 ownCloud, Inc. * SPDX-License-Identifier: AGPL-3.0-or-later - */#header,#expanddiv{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#header #nextcloud:focus-visible,#header .app-menu-entry a:focus-visible,#header .header-menu button:first-of-type:focus-visible,#expanddiv #nextcloud:focus-visible,#expanddiv .app-menu-entry a:focus-visible,#expanddiv .header-menu button:first-of-type:focus-visible{outline:none}#header #nextcloud:focus-visible::after,#header .app-menu-entry a:focus-visible::after,#header .header-menu button:first-of-type:focus-visible::after,#expanddiv #nextcloud:focus-visible::after,#expanddiv .app-menu-entry a:focus-visible::after,#expanddiv .header-menu button:first-of-type:focus-visible::after{content:" ";position:absolute;inset-block-end:2px;transform:translateX(-50%);width:12px;height:2px;border-radius:3px;background-color:var(--color-background-plain-text);inset-inline-start:50%;opacity:1}#header .header-end,#expanddiv .header-end{margin-inline-end:calc(3*var(--default-grid-baseline))}#header .header-end a:not(.button):focus-visible::after,#header .header-end div[role=button]:focus-visible::after,#expanddiv .header-end a:not(.button):focus-visible::after,#expanddiv .header-end div[role=button]:focus-visible::after{bottom:4px}#header .header-end #expand.menutoggle:focus-visible::after,#expanddiv .header-end #expand.menutoggle:focus-visible::after{inset-inline-start:40%}#body-user #header,#body-settings #header,#body-public #header{display:inline-flex;position:absolute;top:0;width:100%;z-index:2000;height:50px;box-sizing:border-box;justify-content:space-between}#nextcloud{padding:5px 0;padding-inline-start:86px;position:relative;height:calc(100% - 4px);box-sizing:border-box;opacity:1;align-items:center;display:flex;flex-wrap:wrap;overflow:hidden;margin:2px}#nextcloud:hover,#nextcloud:active{opacity:1}#header .header-end>div>.menu{background-color:var(--color-main-background);filter:drop-shadow(0 1px 5px var(--color-box-shadow));border-radius:var(--border-radius-large);box-sizing:border-box;z-index:2000;position:absolute;max-width:350px;min-height:66px;max-height:calc(100vh - 50px - 8px);inset-inline-end:8px;top:50px;margin:0;overflow-y:auto}#header .header-end>div>.menu:not(.popovermenu){display:none}#header .header-end>div>.menu:after{border:10px solid rgba(0,0,0,0);border-bottom-color:var(--color-main-background);bottom:100%;content:" ";height:0;width:0;position:absolute;pointer-events:none;inset-inline-end:10px}#header .header-end>div>.menu>div,#header .header-end>div>.menu>ul{-webkit-overflow-scrolling:touch;min-height:66px;max-height:calc(100vh - 50px - 8px)}#header .logo{display:inline-flex;background-image:var(--image-logoheader, var(--image-logo, url("../img/logo/logo.svg")));background-repeat:no-repeat;background-size:contain;background-position:center;width:62px;position:absolute;inset-inline-start:12px;top:1px;bottom:1px;filter:var(--image-logoheader-custom, var(--background-image-invert-if-bright))}#header .header-appname-container{display:none;padding-inline-end:10px;flex-shrink:0}#header #header-start,#header .header-start,#header #header-end,#header .header-end{display:inline-flex;align-items:center}#header #header-start,#header .header-start{flex:1 0;white-space:nowrap;min-width:0}#header #header-end,#header .header-end{justify-content:flex-end;flex-shrink:1}#header .header-end>.header-menu__trigger img{filter:var(--background-image-invert-if-bright)}#header .header-end>div,#header .header-end>form{height:100%;position:relative}#header .header-end>div>.menutoggle,#header .header-end>form>.menutoggle{display:flex;justify-content:center;align-items:center;width:50px;height:44px;cursor:pointer;opacity:.85;padding:0;margin:2px 0}#header .header-end>div>.menutoggle:focus,#header .header-end>form>.menutoggle:focus{opacity:1}#header .header-end>div>.menutoggle:focus-visible,#header .header-end>form>.menutoggle:focus-visible{outline:none}.header-appname-container .header-appname{opacity:.75}.header-appname{color:var(--color-background-plain-text);font-size:16px;font-weight:bold;margin:0;padding:0;padding-inline-end:5px;overflow:hidden;text-overflow:ellipsis;flex:1 1 100%}.header-info{display:flex;flex-direction:column;overflow:hidden}.header-title{overflow:hidden;text-overflow:ellipsis}.header-shared-by{color:var(--color-background-plain-text);position:relative;font-weight:300;font-size:11px;line-height:11px;overflow:hidden;text-overflow:ellipsis}#skip-actions{position:absolute;overflow:hidden;z-index:9999;top:-999px;inset-inline-start:3px;padding:11px;display:flex;flex-wrap:wrap;gap:11px}#skip-actions:focus-within{top:50px}header #emptycontent h2,header .emptycontent h2{font-weight:normal;font-size:16px}header #emptycontent [class^=icon-],header #emptycontent [class*=icon-],header .emptycontent [class^=icon-],header .emptycontent [class*=icon-]{background-size:48px;height:48px;width:48px}/*! + */#skip-actions{position:absolute;overflow:hidden;z-index:9999;top:-999px;inset-inline-start:3px;padding:11px;display:flex;flex-wrap:wrap;gap:11px}#skip-actions:focus-within{top:var(--header-height)}#header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#header:not(.header-guest){display:inline-flex;position:absolute;top:0;width:100%;z-index:2000;height:var(--header-height);box-sizing:border-box;justify-content:space-between}#header #nextcloud{padding:5px 0;padding-inline-start:86px;position:relative;height:calc(100% - var(--default-grid-baseline));box-sizing:border-box;opacity:1;align-items:center;display:flex;flex-wrap:wrap;overflow:hidden;margin:2px}#header #nextcloud:hover,#header #nextcloud:active{opacity:1}#header #nextcloud .logo{display:inline-flex;background-image:var(--image-logoheader, var(--image-logo, url("../img/logo/logo.svg")));background-repeat:no-repeat;background-size:contain;background-position:center;width:62px;position:absolute;inset-inline-start:12px;top:1px;bottom:1px;filter:var(--image-logoheader-custom, var(--background-image-invert-if-bright))}#header #nextcloud:focus-visible,#header .app-menu-entry a:focus-visible,#header .header-menu button:first-of-type:focus-visible{outline:none}#header #nextcloud:focus-visible::after,#header .app-menu-entry a:focus-visible::after,#header .header-menu button:first-of-type:focus-visible::after{content:" ";position:absolute;inset-block-end:2px;transform:translateX(-50%);width:12px;height:2px;border-radius:3px;background-color:var(--color-background-plain-text);inset-inline-start:50%;opacity:1}#header .header-start{display:inline-flex;align-items:center;flex:1 0;white-space:nowrap;min-width:0}#header .header-end{display:inline-flex;align-items:center;justify-content:flex-end;flex-shrink:1;margin-inline-end:calc(3*var(--default-grid-baseline))}#header .header-end>div,#header .header-end>form{height:100%;position:relative}#header .header-end>div>.menutoggle,#header .header-end>form>.menutoggle{display:flex;justify-content:center;align-items:center;width:var(--header-height);height:var(--header-menu-item-height);cursor:pointer;opacity:.85;padding:0;margin:2px 0}#header .header-end>div>.menutoggle:focus,#header .header-end>form>.menutoggle:focus{opacity:1}#header .header-end>div>.menutoggle:focus-visible,#header .header-end>form>.menutoggle:focus-visible{outline:none}#header .header-end>div>.menu,#header .header-end>form>.menu{background-color:var(--color-main-background);filter:drop-shadow(0 1px 5px var(--color-box-shadow));border-radius:var(--border-radius-large);box-sizing:border-box;z-index:2000;position:absolute;max-width:350px;min-height:calc(var(--default-clickable-area)*1.5);max-height:calc(100vh - var(--header-height) - 2*var(--default-grid-baseline));inset-inline-end:8px;top:var(--header-height);margin:0;overflow-y:auto}#header .header-end>div>.menu:not(.popovermenu),#header .header-end>form>.menu:not(.popovermenu){display:none}#header .header-end>div>.menu:after,#header .header-end>form>.menu:after{border:10px solid rgba(0,0,0,0);border-bottom-color:var(--color-main-background);bottom:100%;content:" ";height:0;width:0;position:absolute;pointer-events:none;inset-inline-end:10px}#header .header-end>div>.menu>div,#header .header-end>div>.menu>ul,#header .header-end>form>.menu>div,#header .header-end>form>.menu>ul{-webkit-overflow-scrolling:touch;min-height:calc(var(--default-clickable-area)*1.5);max-height:calc(100vh - var(--header-height) - 2*var(--default-grid-baseline))}#header .header-end>div .emptycontent h2,#header .header-end>form .emptycontent h2{font-weight:normal;font-size:16px}#header .header-end>div .emptycontent [class^=icon-],#header .header-end>div .emptycontent [class*=icon-],#header .header-end>form .emptycontent [class^=icon-],#header .header-end>form .emptycontent [class*=icon-]{background-size:48px;height:48px;width:48px}#header .header-appname{color:var(--color-background-plain-text);font-size:16px;font-weight:bold;margin:0;padding:0;padding-inline-end:5px;overflow:hidden;text-overflow:ellipsis;flex:1 1 100%}#header .header-appname .header-info{display:flex;flex-direction:column;overflow:hidden}#header .header-appname .header-info .header-title{overflow:hidden;text-overflow:ellipsis}#header .header-appname .header-info .header-shared-by{color:var(--color-background-plain-text);position:relative;font-weight:300;font-size:var(--font-size-small);line-height:var(--font-size-small);overflow:hidden;text-overflow:ellipsis}@media(display-mode: standalone)or (display-mode: minimal-ui){#header:not(.header-guest){display:none !important}#content,#content-vue{margin-top:var(--body-container-margin)}:root{--body-height: calc(100% - env(safe-area-inset-bottom) - var(--body-container-margin) * 2) !important}}/*! * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2016 ownCloud, Inc. * SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/core/css/server.css.map b/core/css/server.css.map index d7220b36198..4a1b3a13ba4 100644 --- a/core/css/server.css.map +++ b/core/css/server.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["server.scss","icons.scss","variables.scss","styles.scss","inputs.scss","functions.scss","header.scss","apps.scss","global.scss","fixes.scss","mobile.scss","tooltip.scss","../../node_modules/@nextcloud/dialogs/dist/style.css","public.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GCwHQ,8BCtHR;AAAA;AAAA;AAAA,GCMA,MACC,mCACA,uCAGD,yQACC,SACA,UACA,SACA,oBACA,eACA,oBACA,wBACA,eACA,uCAGD,6CACC,aAID,0CACC,wDACA,aAGD,UACC,YAEA,8BAGD,6DACC,cAGD,MACC,yBACA,iBACA,mBAGD,cACC,iBACA,mBAGD,YACC,sBAGD,EACC,SACA,6BACA,qBACA,eACA,IACC,eAIF,WACC,aACA,0BAGD,MACC,eACA,QACC,eAIF,0BACC,eAGD,GACC,gBAGD,KACC,mBAEA,mCACA,uCACA,6BACA,6BAGD,mBACC,kBAGD,qBACC,kBACA,sBACA,qBACA,2BACA,2DACA,uBAGD,iBACC,qBACA,aACA,gCAGD,eACC,YACA,aAGD,cACC,eACA,MACA,SACA,qBACA,YACA,WACA,aACA,kBACA,gDACA,wCACA,iBACA,eACA,kBACC,cACA,kBACA,UACA,QACA,gBAED,gBACC,wCACA,sDACA,4CACC,6CAOH,oBACC,WACA,YAGD,2BACC,+BAGD,gCACC,+BAGD,0BACC,kCACA,yCACA,+BACA,4BAMD,YACC,8CACA,wCAMD,kBACC,sBAKD,4BAEC,oCACA,kBACA,gBACA,WACA,sDACC,gBAED,sEACC,gBAED,kCACC,mBAED,oHAEC,qBACA,YACA,WACA,mBACA,gcAEC,WAOH,sBACC,WASD,oCACC,kBACA,yBACA,sBACA,qBACA,iBAID,kBAEC,kBACA,qBACA,SAEA,YAGD,8CAGC,WAGD,8BACC,sBACA,oBACA,wBACA,wBAGD,2EACC,WAGD,oGACC,kDACA,UACA,qBAGD,mDACC,6BACA,YACA,WACA,yCACA,4BACA,2BACA,WAOA,qEACC,UAED,qEACC,UAIF,wEACC,aAGD,2CACC,wBAGD,yBACC,kBACA,qBACA,sBAGD,qBACC,cACA,mBACA,iBACA,uBACA,aAKD,4CACC,eACA,YACA,mCACA,6BACA,qDAIA,2BACC,4BAKD,wBACC,sBACA,4BACA,+BACC,2CACA,qBACA,kBAGF,0BACC,qBACA,iBAIF,YACC,YACA,sCACA,oBACC,sBAIF,eACC,2CAUD,mBACC,kBACA,cACA,2BACC,kBACA,cAIF,UACC,gBAGD,8CACC,UAIA,WACC,WACA,YAGD,8CAEC,UAGD,oGAGC,WAIF,mBACC,WACA,kBACA,QAEA,kDACC,UAKD,kDACC,UAIF,eACC,WAEA,0CACC,UAKD,uGACC,8CAIF,KACC,mFAGD,OACC,gBACA,YACA,eACA,qBACA,UACC,qBAIF,2FACC,gBACA,uBAGD,2BACC,yDAGD,2BACC,6DAID,yBACC,gBACA,gBACA,WACA,mCACA,YACA,wBAEA,sKAGC,+BACA,mBAED,2CACC,YACA,eACA,YACA,8CACA,6BAEA,gEACC,cACA,mBAED,oDACC,WAEA,4JAEC,kCACA,4BAGF,oEACC,UAID,oDACC,mBACA,gCACA,WACA,WACA,YAED,0DACC,yBAGA,+FACC,gDAGD,wOAGC,8CACA,wCACA,iBAGD,yNAEC,gCACA,WAOH,4FACC,iDAED,4FACC,gDAKD,4FACC,gDAED,4FACC,iDAIF,wCACC,gCACA,wCAKD,yBACC,2BACA,sBACA,mCACA,wBAEA,4CACC,uBAGD,sKAGC,+BACA,mBAED,2CACC,YACA,eACA,YACA,8CACA,6BAEA,gEACC,cACA,mBAIF,qFACC,yBAGA,iDACC,mBACA,gCACA,WACA,yDACC,UACA,WACA,iBAGF,uDACC,yBAGA,0TAIC,8CACA,wCACA,iBAGD,4FACC,gCAGD,qEACC,gDASH,oGACC,aACA,iBACA,8BACA,0GACC,cACA,SACA,YACA,YACA,WACA,aACA,mBACA,uBACA,8GACC,kBACA,kBACA,mBACA,6BACA,cACA,iBACA,WACA,YACA,YACA,eAOJ,WACC,0BAGD,aACC,WACA,sBACA,oBAKD,YACC,kCAMA,qBACC,WACA,aAED,wBACC,cACA,gDACA,WACA,aAED,2BACC,WACA,YACA,6BACC,WAGF,wBACC,wCACA,kBACA,mBACA,gBACA,uBACA,0CACA,kCACA,6DACC,0CAGF,sBACC,UACA,WAKF,YACC,oBACA,YAGD,SACC,oBACA,kDACA,4BACA,iCACA,YACA,0BACA,cACA,QACA,uBACA,mBACC,QACA,kBACA,qBACC,WAIA,wFACC,cAIF,gCACC,SACA,sBACA,mCACC,iBACA,gBACA,kBACA,uBACA,+DACC,+EAGF,+CACC,aAIH,gBACC,aACA,uBACC,QAGF,yBAEC,kBACA,aACA,WACA,uBACA,mBACA,gBACA,cAEA,gBAEA,8FAGC,oBAGF,yBACC,UACA,WAGD,oBACC,iBACA,uBAEA,2BACC,uBAGF,+DACC,UAEA,0JAEC,WAOH,QACC,UACA,yCACA,sCACA,qCACA,oCACA,iCACA,oBACC,UAOD,+CACC,SACA,kBAED,mDACC,gBAKF,cACC,mBAMD,mBACC,aACA,QACA,SACA,UCz0BD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUA,kFACC,6BAGD,uGACC,wCAGD,sDACC,kCAMD,iHAUC,YACA,yCACA,sBAYA,oFACC,eACA,oCACA,sCACA,QA/BiB,GAmCnB,wBACC,aAID,yJAUC,iBACA,8CACA,6BACA,0CACA,mCACA,aACA,mCACA,YACA,uYACC,WACA,sBAOC,kxDAIC,oCACA,aAED,gmBACC,aACA,8CACA,6BAGF,maACC,6DACA,oDAGF,wNACC,8CACA,6BACA,eACA,WAED,wNACC,gBAED,oPACC,mDAGD,iNACC,8CACA,0CACA,wCACA,eAGA,kvBAEC,+CAIA,mjCAGC,oDACA,gDAED,gwBAEC,4CAED,2WACC,6CAGF,gRAEC,8CACA,6CACA,eAKH,2BACC,WACA,sBACA,gBACA,eACA,gDACA,aACA,mCAEA,8CACA,oCACA,eACA,WAKA,4KACC,6BACA,0BACA,qBAEA,qCAED,0EAIC,YACA,WAID,kBACC,WACA,cACA,gBACA,WACA,eAED,mBACC,SACA,QAED,iBACC,cAKF,6GASC,2FACA,mCACA,WACA,yCACA,eACA,sBACA,8CACA,oDACA,YAEA,kSAEC,0DAGD,mKACC,eAIF,qMAcC,WACA,sBACA,eACA,mCACA,8CACA,6BACA,iDACA,YACA,aACA,yCACA,uBACA,eACA,+0BACC,8CACA,kDAED,yRACC,YAIF,mCACC,8CACA,6BAGD,mCACC,aACA,YAID,OACC,iDACA,gBACA,8CACA,mCAGD,qBACC,qCAGD,qBACC,oCASA,2DACC,eAIA,sFACC,eAMH,sGAQC,iBACA,2CAGA,gMACC,SAGD,oIACC,+CACA,2CACA,sBACA,kKACC,qDACA,+CAaD,4MAEC,qBACA,2BACA,WASF,kGACC,qCACA,mDACA,mFACA,iBACA,4BAEA,yDACA,UACA,qCACA,oCACA,gBACA,eACA,oBACA,6HACC,eCzUF,+CDiVE,yOACC,gCAID,4qBAGC,qDACA,8CACA,6vBACC,uDAQH,+VACC,qDACA,mDAEA,UAOH,uBAEC,eAGD,2BAEC,mBASA,4GAEC,kBACA,4BACA,SACA,UACA,WACA,gBACA,oIACC,iBAED,4WAEC,eAED,gKACC,WACA,qBACA,OAvBmB,KAwBnB,MAxBmB,KAyBnB,sBACA,kBACA,aACA,sBACA,+CAED,oeAEC,0CAED,4LACC,oBACA,qCACA,kBACA,mBAED,4bAIC,8DACA,8CACA,0CAED,oMACC,+CACA,0DAED,oOACC,+CAID,gJACC,qBACA,yBAED,oMACC,cA/DmB,KAmEpB,mFACC,kBACA,OArEmB,KAsEnB,MAtEmB,KAuEnB,2BACA,2BAED,mGACC,yDAED,+GACC,0DAOD,gZAEC,2BAED,wUACC,aAzF0B,KA2F3B,4NACC,8DACA,+BACA,2BAED,gOACC,0CACA,2CAED,gQACC,8DACA,2CACA,+BAID,8OAEC,0CACA,6BACA,+DAED,6HACC,gEAED,mHACC,WAMH,iBACC,gBACA,8CACA,qCACC,sCAED,yBACC,qBACA,sBACA,sBACA,6BACC,eAGF,uCACC,gBACA,wDACA,yCAED,kCACC,iBACA,SACA,UACA,wDACC,mBACA,gBACA,uBACA,6DACC,eACA,gEACC,eACA,iBAIH,6JAGC,kBACA,kBACA,aACA,+BACA,eACA,oCAGA,mEACC,8CAGF,uDACE,8CACA,6BAKJ,qDACC,4CAGD,qDACC,2CAKA,oGAEC,eAKD,mHAEC,gBACA,mBACA,uBACA,wCACA,+CACA,uBACA,yCACA,0CACA,SACA,YACA,gBACA,6IACC,0CAED,iKACC,iBACA,yBACA,stBAIC,sBACA,8CACA,oCACA,0CAED,2NACC,aAGF,2KACC,iBACA,gBACA,gBACA,6BACA,yMACC,2BAMJ,sBACC,WACA,sBACA,+DACC,aACA,eACA,kEACC,WAGF,uCACC,gBACA,mBACA,uBACA,wCACA,+CACA,uBACA,yCACA,0CACA,SACA,iBACA,gBACA,oDACC,0CAED,8DACC,iBACA,yBACA,sBACA,8CACA,0CACA,2FACC,aAED,8JAEC,qCACA,iCAGF,sDACC,gBACA,gBACA,YACA,wDACC,mEACA,WAGF,2LAGC,WAED,mEACC,iBAMH,UACC,WACA,sBACA,qBACA,2BACC,wBACA,eACA,yCACC,iBACA,yBACA,sBACA,8CACA,oCACA,0CACA,oBACA,mBACA,gDACC,wBAIH,yBACC,UACA,4BACC,YACA,kBACA,kBACA,+BACA,eACA,oCACA,8BACC,mBACA,gBACA,uBACA,YACA,sBACA,uBACA,SACA,eACA,eACA,2BACA,yBACA,sBACA,qBACA,iBACA,oBACA,mBACA,0CACA,yBACA,sCACC,YACA,4CACA,4BACA,2BACA,eACA,gBACA,cACA,WACA,sBACA,kBAGF,sCACC,6BAED,qCACC,8CACA,6BACA,6CACC,mBAQL,mBACC,cACA,WACA,UACA,cACA,8CACA,mCACA,gBACA,WACA,gBAEC,2CACC,8BAED,gDACC,8BAGF,yCACC,yBAED,sCACC,mCACA,wCACA,iCAED,2CACC,mCACA,wCACA,iCAKF,iBACC,QAEC,0BAED,QAEC,yBAED,YAGC,0BAED,QAEC,0BAIF,OACC,qBACA,uBACA,mCAKD,cACC,kBACA,4BACA,aACA,UACA,WACA,gBAWD,cAJC,oCACA,mCAOD,wBARC,oCACA,mCAWD,4BAZC,oCACA,mCEl3BD;AAAA;AAAA;AAAA;AAAA,GAQA,mBAEC,yBACA,sBACA,qBACA,iBAEA,2QAGC,aAEA,qTACC,YACA,kBACA,oBACA,2BACA,WACA,WACA,kBACA,oDACA,uBACA,UAIF,2CAEC,uDAEA,0OACC,WAGD,2HACC,uBAOH,+DAGC,oBACA,kBACA,MACA,WACA,aACA,OJiCe,KIhCf,sBACA,8BAID,WACC,cACA,0BACA,kBACA,wBACA,sBACA,UACA,mBACA,aACA,eACA,gBACA,WAEA,mCACC,UAaD,8BACC,8CACA,sDACA,yCACA,sBACA,aACA,kBACA,gBAfD,gBACA,oCAgBC,qBACA,IJVc,KIWd,SACA,gBAEA,gDACC,aAID,oCACC,gCACA,iDACA,YACA,YACA,SACA,QACA,kBACA,oBACA,sBAGD,mEAEC,iCAzCF,gBACA,oCA4CA,cACC,oBACA,yFACA,4BACA,wBACA,2BACA,WACA,kBACA,wBACA,QACA,WAEA,gFAGD,kCACC,aACA,wBACA,cAGD,oFAEC,oBACA,mBAGD,4CACC,SACA,mBACA,YAGD,wCACC,yBACA,cAKA,8CACC,gDAED,iDAEC,YACA,kBACA,yEACC,aACA,uBACA,mBACA,MJxFY,KIyFZ,YACA,eACA,YACA,UACA,aAEA,qFACC,UAGD,qGACC,aASL,0CACC,YAKD,gBACC,yCACA,eACA,iBACA,SACA,UACA,uBACA,gBACA,uBAEA,cAGD,aACC,aACA,sBACA,gBAGD,cACC,gBACA,uBAGD,kBACC,yCACA,kBACA,gBACA,eACA,iBACA,gBACA,uBAID,cACC,kBACA,gBACA,aACA,WACA,uBACA,aACA,aACA,eACA,SAEA,2BACC,IJlKc,KIyKf,gDACC,mBACA,eAED,gJAEC,qBACA,YACA,WF5QF;AAAA;AAAA;AAAA;AAAA,GHQA,iCACC,4BACA,2BACA,eACA,gBAGD,iBACC,kDAID,sGAMC,kBACA,0IACC,UACA,WACA,YACA,WACA,uBACA,kBACA,QACA,uBACA,mBACA,6CACA,qCACA,gCACA,4BACA,wBACA,4CACA,2CAEA,wCAEA,gYAGC,uCAKH,wDAEC,2CACA,4CAGD,yDAEC,YACA,WACA,qBAKA,yJACC,2CAED,iMACC,gDAED,yMACC,iDAED,iPACC,sDAIF,kBACC,KACC,uBAED,GACC,0BAIF,SACC,gCAGD,yKAQC,wDGzGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GGSA,sCAEC,MACC,wCACA,yCAKF,KACC,WACA,YACA,kBAEA,6EAGD,KAEC,6EAEA,yCACA,sBACA,2BACA,eACA,WACA,iDAKD,eAKC,gBACA,gBACA,gBACA,mBACA,6BAGD,GACC,gBAGD,GACC,gBAGD,GACC,gBAGD,GACC,iBAGD,GACC,gBAID,GACC,kBACA,oCAGD,GACC,eAGD,MAEC,qBACA,aACA,uBAGD,GACC,YACA,mBACA,eAGD,IACC,iBACA,sBACA,kCACA,mCACA,qBACA,mBAMD,wBACC,sBAKD,0BAEC,gGACA,MLxBkB,MKyBlB,YACA,gBACA,kBACA,mDACA,8CACA,+EACA,gBACA,YACA,sBACA,qBACA,iBACA,aACA,sBACA,YACA,cAEA,kDACC,iBACA,0CACA,2EACA,mBACA,uBACA,2BACA,iBACA,oBACA,yBAQD,gGACC,cACA,6CACA,8GACC,qBACA,WACA,aACA,0BACA,iBACA,SAIF,8DACC,kBAED,8DACC,kBACA,YACA,WACA,kBACA,gBACA,sBACA,aACA,sBACA,6CACA,iBAEA,oFACC,oDAGD,oEACC,oBACA,eACA,QACA,cACA,SACA,kBACA,WACA,2CAGA,kFACC,QACA,4GACC,2BAIF,gIAEC,8DAED,0HAIC,0EAKA,wVAEC,+CAGF,oGACC,kDACA,yCAMA,gsBAEC,8CACA,wCAEA,g8BACC,qCAMH,sHACC,wBACA,SAMA,kNAEC,aAKF,0EACC,cACA,WACA,kBACA,gFACC,oBACA,eACA,mDACA,WACA,kBAIC,wXAEC,2CACA,+CAKD,gZAEC,2CACA,oDACA,ghBACC,qCAMH,kIACC,yDAGD,4IAEC,wBACA,0BAGD,sIAEC,wBAGA,6EAMJ,oJAEC,kBACA,sBAGC,4jBAGC,oCAIF,4JACC,0BACA,4BACA,cACA,8BACA,0CACA,yCACA,gBACA,oDACA,gBACA,sBACA,mBACA,uBACA,2CACA,6BACA,aACA,YAGA,4KACC,gBACA,kDACA,wOACC,gBACA,6DAGF,4NACC,kEACA,WACA,YAEA,wCAID,4QACC,qBAEA,4ZACC,gCAKH,wQACC,kBACA,cACA,YACA,WACA,YACA,YACA,kBACA,eACA,wCAEA,gRAEC,oCAKF,gQACC,kCAID,gSACC,UACA,YAED,4SACC,wBACA,YAIH,sEACC,aAMD,4YAEC,SACA,WACA,+BACA,4BACA,2BACA,w0BAEC,+BACA,UAUD,sGACC,UACA,kBACA,oCACA,qCACA,SACA,YAIA,qBAEA,kIACC,UACA,eACA,wDACA,gBAGF,gGACC,kBACA,qCACA,oCACA,SACA,UACA,gBFjZF,6CEmZE,qBACA,4BACA,2BACA,YACA,wBACA,gBACA,YACA,UACA,iCACA,6BACA,yBACA,YACA,kBACA,qCAMD,8GACC,mDAIA,wNACC,UAED,oMACC,sBAED,gTACC,oCAID,0GACC,4BACA,wBACA,oBAQH,gHACC,cACA,sHACC,wBACA,mBACA,yBAED,sHACC,+CACA,qCAED,8HACC,YACA,WACA,SACA,gBAIA,oSFpdF,uCEudE,obAEC,+BACA,UAGF,wLACC,gBACA,eACA,cACA,0CACA,eAEA,gNACC,UACA,kBACA,0NACC,gBACA,mBACA,8CACA,wCASJ,8GACC,mBACA,cACA,uBACA,qCACA,UACA,kBACA,8CACA,WACA,8OAEC,oBACA,WAED,0HACC,YACA,oBACA,YACA,4QAGC,UAGF,gJACC,WACA,YACA,wBACA,0BAED,wRAEC,WACA,YACA,cACA,4VACC,2BAED,gWACC,yBAED,oUACC,2CACA,6CACA,0BACA,4BAQH,oHACC,oBACA,mDACA,4BACA,wMACC,kBACA,mBACA,uBACA,gBACA,aACA,0CAED,8LACC,SACA,qCACA,oCACA,0CACA,oZAEC,UAQH,kOAEC,uBACA,2FAGA,kBACA,qBACA,8CACA,sBAMD,sFACC,gDACA,wCACA,oBAGD,sEACC,yBAGD,0OAEC,qBASA,0IACC,qCAGD,gHACC,qCAEA,wKACC,YASF,0IACC,sCAGD,gHACC,sCAEA,wKACC,WAOJ,SACC,sBACA,gBACA,oCACA,gCACA,UACA,aACA,kDACA,0BACA,2CACA,cAEA,kCACC,eAIF,2CACC,SACC,qDACA,mDAED,gBACC,qDAED,aACC,oDAcF,aACC,aACA,8CACA,iBACA,cACA,iBACA,YAGA,kCACC,gBAID,kCACC,aACA,kBACA,oBAGA,gBAGA,uDAEC,eACA,mFACC,aAKH,uCACC,oCASF,aACC,WACA,UL/qBmB,MKgrBnB,UL/qBmB,MKgrBnB,cACA,wBACA,gBACA,ILtrBe,KKurBf,mBACA,gBACA,kBACA,aACA,aACA,0BACA,wCACA,kDACA,cAEA,uBACC,aAOF,cAEC,gBAGC,oFACC,cAKH,sBACC,aACA,6CACA,cACA,0DAEA,iBACA,gBACA,sBAGA,uCACC,UAGD,iCACC,sBACA,sBACA,gCAOE,4NACC,qBACA,WACA,cAOL,qBACC,sBACA,+BACA,gBACA,oDACA,6CACA,cAEA,sCACC,aACA,mBACA,qCACA,WACA,UACA,SACA,+BACA,gBACA,SACA,oDACA,iBACA,mBACA,eACA,WAGA,6BAEA,6CACC,yCACA,8CACA,eAED,wFAEC,+CAGD,8CACC,2CACA,4BACA,WACA,oCACA,qCACA,MACA,qBACA,cAGD,oDACC,mEAOF,4DACC,qCAED,kEACC,qCAKD,4DACC,sCAED,kEACC,sCAIF,SACC,cACA,aACA,mBACA,gBACC,wBAIA,yDAEC,oBACA,sBAKH,aACC,kBACA,gBACA,yBACA,mBAGD,QACC,UACA,yCACA,sCACA,qCACA,oCACA,iCACA,oBACC,UAKF,YACC,aACA,mBAEA,uBACC,aACA,sBACA,YACA,kBACA,mBACA,gBACA,uBACA,eACA,gCACA,kBACA,YAEA,8BACC,aAID,mCACC,0BAED,kCACC,wBAGD,6BACC,qBACA,WACA,YACA,qBACA,sBACA,gBACA,sBACA,WACA,eAGD,yBACC,gCACA,kBACA,gBACA,uBAED,gCACC,iBAED,0FAGC,kBACA,6BACA,kDAMF,oBACC,oBAKF,6BACC,WAGD,6BACC,YASA,0JAGC,wCAIA,2LACC,YAKH,gDAGC,kBACA,8CACA,6BACA,yCACA,YACA,YACA,WACA,gBACA,mBACA,sDACA,aACA,mBAEA,kEACC,YAKA,qBAEA,2BACA,YACA,SACA,QACA,kBACA,oBACA,iDACA,iBAGD,oFACC,0BACA,qBACA,oBACA,sGACC,qBACA,0BAIF,8EACC,oBACA,oBACA,gGACC,sBAIF,+DACC,cAGD,+GACC,SAGD,yDAEC,wBACA,sBAED,yDACC,aACA,cAEA,8EACC,aAGD,oOAGC,eACA,YA/FkB,KAgGlB,SACA,yCACA,+BACA,aACA,uBACA,YACA,SACA,mBACA,gBACA,WACA,6BACA,mBAEA,whDAIC,YACA,aACA,+BACA,gBAnHe,KAqHhB,yzBAIC,yBAOC,gvGACC,oBAlIe,KAsIlB,+tBAEC,gCAED,ojBAEC,+CAED,4nBAEC,kDAED,mSACC,2CACA,oDAGD,mSACC,2BAED,iRACC,eACA,mBAED,sPACC,YACA,kBACA,cACA,mBAED,mSACC,SACA,wBAGD,gVACC,kCAID,wQACC,MA9Ke,KA+Kf,YAGD,uyBAEC,qBACA,WAED,yeACC,mBAED,8cACC,mBAED,2xBACC,YAED,iRACC,aACA,cAGA,mBACA,mbACC,wBAIF,04BAEC,sBAGD,0RACC,UAlNiB,KAmNjB,gBACA,aACA,cAEA,4bACC,wBAQA,2hDACC,eAMD,ygDACC,kBAKJ,8EACC,UACA,6FACC,UAcD,+EACC,MA/PiB,KAgQjB,OAhQiB,KAyQlB,6CACC,WACA,YAOJ,kBACC,wBACA,kBACA,MACA,gDACA,aACA,sBACA,uCACA,gBACA,gBACA,gBACA,kBACA,eACA,UL5sCgB,MK6sChB,UL5sCgB,MK+sChB,yCACC,kBACA,YACA,eACA,iBACA,aACA,eACA,mBACA,cAKC,8RAEC,QACA,WACA,YACA,YACA,aACA,WACA,eACA,4mBAEC,WAED,wtBAEC,WACA,ghDAEC,UAIF,kVACC,UAKH,8IAGC,8CAEA,2RACC,aAIF,6JAEC,kBACA,YACA,WACA,WAQC,2XAEC,aAEA,2eACC,WAIH,wFACC,SACA,uBAEA,aACA,gGACC,SAGD,oHACC,aAKH,qEACC,aACA,SACA,wBACA,qBACA,YACA,WACA,SACA,UAGD,qEACC,kBACA,qBACA,YACA,WACA,iBACA,kBACA,sBACA,uBACA,WACA,kBACA,gBACA,0BACA,iBACA,iBACA,eACA,QACA,iBAGD,kJAEC,cACA,yBACA,mBACA,gBACA,uBACA,QACA,aACA,eAGD,yEACC,WACA,QACA,SACA,sDAGD,wEACC,QACA,mBACA,gBACA,uBACA,gBACA,WACA,cACA,iBAGD,qEACC,QACA,kBACA,kFACC,SAGA,sBAIH,2EACC,aAIF,8CACC,6DACA,oDCt9CD;AAAA;AAAA;AAAA;AAAA;AAAA,GAcC,mDAEC,WAGD,kDAEC,YAGD,qDAEC,WAGD,oDAEC,YAKD,mDAEC,YAGD,kDAEC,WAGD,qDAEC,YAGD,oDAEC,WAIF,YACC,WAGD,QACC,aAGD,iBACC,kBACA,4BACA,aACA,UACA,WACA,gBAGD,MACC,gBAGD,QACC,kBAGD,aACC,qBCnFD;AAAA;AAAA;AAAA,GAOA,mBACC,SCRD;AAAA;AAAA;AAAA,GAMA,wCAGC,UACC,iCACA,qBAID,iBACC,wBAID,YACC,WACA,iCACA,sBAID,0BACC,6BACA,eACA,0BAGA,6BACC,wBAIF,0CACC,sBAGD,8BACC,uBACA,sBAID,kBACC,wCACA,cAEA,iBAEA,eACA,uCACC,aAED,8BACC,aACA,mDACC,gBAOF,gDACC,4BAED,qDACC,eACA,gCACA,IRiBa,KQhBb,qBACA,WACA,YACA,aACA,oCACA,eACA,WACA,wBAED,2CACC,4BAKF,uBACC,eACA,gCACA,qBACA,WACA,YACA,aACA,eACA,WAED,0DAEC,UAID,6CACC,0BAID,kDACC,kCAED,8CACC,wBAGD,wBACC,gCAID,gBACC,aAED,+BACC,6BAMF,0CACC,8BACC,6BACA,eACA,qCACC,wBAMA,0CACC,cAGF,+BACC,gCACA,iDACA,SACA,YACA,SACA,QACA,kBACA,oBACA,sBACA,aACA,aAID,wCACC,uBCpKH;AAAA;AAAA;AAAA;AAAA,GAMA,SACI,kBACA,cACA,6BACA,kBACA,mBACA,sBACA,gBACA,gBACA,iBACA,qBACA,iBACA,oBACA,mBACA,kBACA,oBACA,iBACA,uBACA,eACA,UACA,eAEA,gBACA,eACA,uDACA,8DAGI,mBACA,UACA,wBAEJ,uDAEI,uBACA,0BAEJ,8CAEI,eACA,eAEJ,4CAEI,wBACA,eACA,0EACI,QACA,qBACA,iBACA,8BACA,qDAGR,0CAEI,yBACA,cACA,wEACI,QACA,mBACA,iBACA,8BACA,uDAQJ,kPACI,SACA,yBACA,8CAGR,iCACI,sBACA,oBAEJ,kCACI,wBACA,oBAOA,0QACI,MACA,yBACA,iDAGR,4EAEI,uBACA,0BAEJ,oCACI,sBACA,iBAEJ,qCACI,wBACA,iBAIR,eACI,gBACA,gBACA,8CACA,6BACA,kBACA,mCAGJ,+BACI,kBACA,QACA,SACA,2BACA,mBCnIJ;AAAA;AAAA;AAAA,GAIA,kBACE,gBACA,gBACA,8CACA,6BACA,6CACA,eACA,gBACA,eACA,cACA,mCACA,aACA,mBACA,gBAEF,kFAEE,aACA,mBACA,WAEF,oEAEE,gBACA,gBACA,sBACA,eACA,YACA,aACA,mBACA,4BACA,2BACA,6BACA,aAEF,4FAEE,cACA,WACA,YACA,gBACA,iBACA,YAGF,4GAEE,sfACA,YACA,wCACA,qBACA,WACA,YAEF,wGAEE,WACA,wBACA,iBAEF,kPAIE,eACA,UAEF,+BACE,WAEF,mCACE,eAEF,8BACE,yCAEF,6BACE,2CAEF,gCACE,2CAEF,gCACE,2CAEF,6BACE,2CAEF,gCACE,2CAEF,8CACE,qBACA,WACA,YACA,iEACA,iBAOF,gEACE,kgBAEF,oCACC,8BACA,4BAED;AAAA;AAAA;AAAA,GAQA,iCACE,kBACA,WACA,YACA,eACA,gBACA,4BACA,wBACA,aACA,uBAGF,2CACE,mCAGF,0CACE,wCACA,kBACA,uBACD;AAAA;AAAA;AAAA,EAID,qCACE,+BAEF,wCACE,eACA,gBACA,uBACA,mBAEF,qDACE,cAEF,2DACE,sBAEF,iDACE,eACA,sBAEF,iDACE,qBAEF,6BACA,GACI,2BAEJ,IACI,6BAEJ,KACI,4BAGJ,4CACE,6BAEF,mCACE,qBACA,YACA,oIACA,2BACA,mCACA,8CAEF,2CACE,oBACA,mBAEF,iDACE,WAEF,0DACE,wBACA,YAEF,6CACE,WAEF,iDACE,WACD;AAAA;AAAA;AAAA,EAID,qCACE,+BAEF,wCACE,eACA,gBACA,uBACA,mBAEF,qDACE,cAEF,2DACE,sBAEF,iDACE,eACA,sBAEF,iDACE,qBAEF,6CACE,8CAEF,yCACE,+CAEF,8CACE,aACA,sBACA,mBACA,YAEF,yCACE,yBACA,YACA,gBACA,uBAEF,8CACE,oCACA,sBACD,8CACC,WACA,YACA,cAEF,qCACE,WACA,yBACA,qBAEF,2CACE,WACA,gBACA,mBAEF,wCACE,gBACA,UACA,MACA,8CACA,YAEF,wDACE,aAEF,qDACE,WAEF,iDACE,YAEF,iDACE,YAEF,qDACE,YAEF,4EACE,sBACA,2BAEF,mEACE,wBAEF,sEACE,oBAEF,6DACE,oCAEF,+EACE,mBACD,2CACC,uBACD,oCACC,aACA,sBACA,oBACA,UACA,gBACA,YACA,uBACA,cAEF,yDACE,sBAEF,4CACE,iBACA,gBAEF,yBACA,oCACI,mBACA,iBAGJ,yBACA,oCACI,mBACA,gBAEJ,4CACI,iBAGJ,yBACE,uBAEF,oDACE,sBAEF,0CACE,gBAEF,+CACA,yBACI,UAGJ,yBACA,yBACI,0CAEH,oCACC,YACA,aACA,sBACA,mBAEF,uCACE,iBACA,mBACA,SAEF,oCACE,sBACA,WACA,aACA,sBACA,aACA,OACA,mBAEF,sCACE,sBAEF,+BACE,kCAEF,yBACA,+BACI,qEAGJ,wCACE,aACA,sBACA,gBACD,2CACC,iBACA,oDAEF,6CACE,oDAEF,yDACE,aAEF,4CACE,uFCnZF;AAAA;AAAA;AAAA,GAIA,aACC,8DAGC,kDACC,wCAIA,wDACC,gBAED,yEACC,+BACA,2BACA,wCAEA,8OAGC,UAID,iFACC,aAED,oFACC,aAED,iGACC,YAMJ,sBACC,iEACA,uCAGD,8BACC,uCAID,kCACC,cAGD,oBACC,iBACA,mCACA,sBACA,qBACA,iBAED,+KAIC,kBAID,oBACC,eACA,oCACA,8CACA,2CACA,sBAEA,aACA,sBACA,mBACA,uBAEA,kDACA,2CACA,2CAEA,yCACC,8CAGD,sBACC,kBACA,oCACA,4CACA,WAEA,wBACC,qBACA,mCACA,iBACA,uCACA,kCACA,oCACA","file":"server.css"}
\ No newline at end of file +{"version":3,"sourceRoot":"","sources":["server.scss","icons.scss","variables.scss","styles.scss","inputs.scss","functions.scss","header.scss","apps.scss","global.scss","fixes.scss","mobile.scss","tooltip.scss","../../node_modules/@nextcloud/dialogs/dist/style.css","public.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GCwHQ,8BCtHR;AAAA;AAAA;AAAA,GCMA,MACC,mCACA,uCAGD,yQACC,SACA,UACA,SACA,oBACA,eACA,oBACA,wBACA,eACA,uCAGD,6CACC,aAID,0CACC,wDACA,aAGD,UACC,YAEA,8BAGD,6DACC,cAGD,MACC,yBACA,iBACA,mBAGD,cACC,iBACA,mBAGD,YACC,sBAGD,EACC,SACA,6BACA,qBACA,eACA,IACC,eAIF,WACC,aACA,0BAGD,MACC,eACA,QACC,eAIF,0BACC,eAGD,GACC,gBAGD,KACC,mBAEA,mCACA,uCACA,6BACA,6BAGD,mBACC,kBAGD,qBACC,kBACA,sBACA,qBACA,2BACA,2DACA,uBAGD,iBACC,qBACA,aACA,gCAGD,eACC,YACA,aAGD,cACC,eACA,MACA,SACA,qBACA,YACA,WACA,aACA,kBACA,gDACA,wCACA,iBACA,eACA,kBACC,cACA,kBACA,UACA,QACA,gBAED,gBACC,wCACA,sDACA,4CACC,6CAOH,oBACC,WACA,YAGD,2BACC,+BAGD,gCACC,+BAGD,0BACC,kCACA,yCACA,+BACA,4BAMD,YACC,8CACA,wCAMD,kBACC,sBAKD,4BAEC,oCACA,kBACA,gBACA,WACA,sDACC,gBAED,sEACC,gBAED,kCACC,mBAED,oHAEC,qBACA,YACA,WACA,mBACA,gcAEC,WAOH,sBACC,WASD,oCACC,kBACA,yBACA,sBACA,qBACA,iBAID,kBAEC,kBACA,qBACA,SAEA,YAGD,8CAGC,WAGD,8BACC,sBACA,oBACA,wBACA,wBAGD,2EACC,WAGD,oGACC,kDACA,UACA,qBAGD,mDACC,6BACA,YACA,WACA,yCACA,4BACA,2BACA,WAOA,qEACC,UAED,qEACC,UAIF,wEACC,aAGD,2CACC,wBAGD,yBACC,kBACA,qBACA,sBAGD,qBACC,cACA,mBACA,iBACA,uBACA,aAKD,4CACC,eACA,YACA,mCACA,6BACA,qDAIA,2BACC,4BAKD,wBACC,sBACA,4BACA,+BACC,2CACA,qBACA,kBAGF,0BACC,qBACA,iBAIF,YACC,YACA,sCACA,oBACC,sBAIF,eACC,2CAUD,mBACC,kBACA,cACA,2BACC,kBACA,cAIF,UACC,gBAGD,8CACC,UAIA,WACC,WACA,YAGD,8CAEC,UAGD,oGAGC,WAIF,mBACC,WACA,kBACA,QAEA,kDACC,UAKD,kDACC,UAIF,eACC,WAEA,0CACC,UAKD,uGACC,8CAIF,KACC,mFAGD,OACC,gBACA,YACA,eACA,qBACA,UACC,qBAIF,2FACC,gBACA,uBAGD,2BACC,yDAGD,2BACC,6DAID,yBACC,gBACA,gBACA,WACA,mCACA,YACA,wBAEA,sKAGC,+BACA,mBAED,2CACC,YACA,eACA,YACA,8CACA,6BAEA,gEACC,cACA,mBAED,oDACC,WAEA,4JAEC,kCACA,4BAGF,oEACC,UAID,oDACC,mBACA,gCACA,WACA,WACA,YAED,0DACC,yBAGA,+FACC,gDAGD,wOAGC,8CACA,wCACA,iBAGD,yNAEC,gCACA,WAOH,4FACC,iDAED,4FACC,gDAKD,4FACC,gDAED,4FACC,iDAIF,wCACC,gCACA,wCAKD,yBACC,2BACA,sBACA,mCACA,wBAEA,4CACC,uBAGD,sKAGC,+BACA,mBAED,2CACC,YACA,eACA,YACA,8CACA,6BAEA,gEACC,cACA,mBAIF,qFACC,yBAGA,iDACC,mBACA,gCACA,WACA,yDACC,UACA,WACA,iBAGF,uDACC,yBAGA,0TAIC,8CACA,wCACA,iBAGD,4FACC,gCAGD,qEACC,gDASH,oGACC,aACA,iBACA,8BACA,0GACC,cACA,SACA,YACA,YACA,WACA,aACA,mBACA,uBACA,8GACC,kBACA,kBACA,mBACA,6BACA,cACA,iBACA,WACA,YACA,YACA,eAOJ,WACC,0BAGD,aACC,WACA,sBACA,oBAKD,YACC,kCAMA,qBACC,WACA,aAED,wBACC,cACA,gDACA,WACA,aAED,2BACC,WACA,YACA,6BACC,WAGF,wBACC,wCACA,kBACA,mBACA,gBACA,uBACA,0CACA,kCACA,6DACC,0CAGF,sBACC,UACA,WAKF,YACC,oBACA,YAGD,SACC,oBACA,kDACA,4BACA,iCACA,YACA,0BACA,cACA,QACA,uBACA,mBACC,QACA,kBACA,qBACC,WAIA,wFACC,cAIF,gCACC,SACA,sBACA,mCACC,iBACA,gBACA,kBACA,uBACA,+DACC,+EAGF,+CACC,aAIH,gBACC,aACA,uBACC,QAGF,yBAEC,kBACA,aACA,WACA,uBACA,mBACA,gBACA,cAEA,gBAEA,8FAGC,oBAGF,yBACC,UACA,WAGD,oBACC,iBACA,uBAEA,2BACC,uBAGF,+DACC,UAEA,0JAEC,WAOH,QACC,UACA,yCACA,sCACA,qCACA,oCACA,iCACA,oBACC,UAOD,+CACC,SACA,kBAED,mDACC,gBAKF,cACC,mBAMD,mBACC,aACA,QACA,SACA,UCz0BD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUA,kFACC,6BAGD,uGACC,wCAGD,sDACC,kCAMD,iHAUC,YACA,yCACA,sBAYA,oFACC,eACA,oCACA,sCACA,QA/BiB,GAmCnB,wBACC,aAID,yJAUC,iBACA,8CACA,6BACA,0CACA,mCACA,aACA,mCACA,YACA,uYACC,WACA,sBAOC,kxDAIC,oCACA,aAED,gmBACC,aACA,8CACA,6BAGF,maACC,6DACA,oDAGF,wNACC,8CACA,6BACA,eACA,WAED,wNACC,gBAED,oPACC,mDAGD,iNACC,8CACA,0CACA,wCACA,eAGA,kvBAEC,+CAIA,mjCAGC,oDACA,gDAED,gwBAEC,4CAED,2WACC,6CAGF,gRAEC,8CACA,6CACA,eAKH,2BACC,WACA,sBACA,gBACA,eACA,gDACA,aACA,mCAEA,8CACA,oCACA,eACA,WAKA,4KACC,6BACA,0BACA,qBAEA,qCAED,0EAIC,YACA,WAID,kBACC,WACA,cACA,gBACA,WACA,eAED,mBACC,SACA,QAED,iBACC,cAKF,6GASC,2FACA,mCACA,WACA,yCACA,eACA,sBACA,8CACA,oDACA,YAEA,kSAEC,0DAGD,mKACC,eAIF,qMAcC,WACA,sBACA,eACA,mCACA,8CACA,6BACA,iDACA,YACA,aACA,yCACA,uBACA,eACA,+0BACC,8CACA,kDAED,yRACC,YAIF,mCACC,8CACA,6BAGD,mCACC,aACA,YAID,OACC,iDACA,gBACA,8CACA,mCAGD,qBACC,qCAGD,qBACC,oCASA,2DACC,eAIA,sFACC,eAMH,sGAQC,iBACA,2CAGA,gMACC,SAGD,oIACC,+CACA,2CACA,sBACA,kKACC,qDACA,+CAaD,4MAEC,qBACA,2BACA,WASF,kGACC,qCACA,mDACA,mFACA,iBACA,4BAEA,yDACA,UACA,qCACA,oCACA,gBACA,eACA,oBACA,6HACC,eCzUF,+CDiVE,yOACC,gCAID,4qBAGC,qDACA,8CACA,6vBACC,uDAQH,+VACC,qDACA,mDAEA,UAOH,uBAEC,eAGD,2BAEC,mBASA,4GAEC,kBACA,4BACA,SACA,UACA,WACA,gBACA,oIACC,iBAED,4WAEC,eAED,gKACC,WACA,qBACA,OAvBmB,KAwBnB,MAxBmB,KAyBnB,sBACA,kBACA,aACA,sBACA,+CAED,oeAEC,0CAED,4LACC,oBACA,qCACA,kBACA,mBAED,4bAIC,8DACA,8CACA,0CAED,oMACC,+CACA,0DAED,oOACC,+CAID,gJACC,qBACA,yBAED,oMACC,cA/DmB,KAmEpB,mFACC,kBACA,OArEmB,KAsEnB,MAtEmB,KAuEnB,2BACA,2BAED,mGACC,yDAED,+GACC,0DAOD,gZAEC,2BAED,wUACC,aAzF0B,KA2F3B,4NACC,8DACA,+BACA,2BAED,gOACC,0CACA,2CAED,gQACC,8DACA,2CACA,+BAID,8OAEC,0CACA,6BACA,+DAED,6HACC,gEAED,mHACC,WAMH,iBACC,gBACA,8CACA,qCACC,sCAED,yBACC,qBACA,sBACA,sBACA,6BACC,eAGF,uCACC,gBACA,wDACA,yCAED,kCACC,iBACA,SACA,UACA,wDACC,mBACA,gBACA,uBACA,6DACC,eACA,gEACC,eACA,iBAIH,6JAGC,kBACA,kBACA,aACA,+BACA,eACA,oCAGA,mEACC,8CAGF,uDACE,8CACA,6BAKJ,qDACC,4CAGD,qDACC,2CAKA,oGAEC,eAKD,mHAEC,gBACA,mBACA,uBACA,wCACA,+CACA,uBACA,yCACA,0CACA,SACA,YACA,gBACA,6IACC,0CAED,iKACC,iBACA,yBACA,stBAIC,sBACA,8CACA,oCACA,0CAED,2NACC,aAGF,2KACC,iBACA,gBACA,gBACA,6BACA,yMACC,2BAMJ,sBACC,WACA,sBACA,+DACC,aACA,eACA,kEACC,WAGF,uCACC,gBACA,mBACA,uBACA,wCACA,+CACA,uBACA,yCACA,0CACA,SACA,iBACA,gBACA,oDACC,0CAED,8DACC,iBACA,yBACA,sBACA,8CACA,0CACA,2FACC,aAED,8JAEC,qCACA,iCAGF,sDACC,gBACA,gBACA,YACA,wDACC,mEACA,WAGF,2LAGC,WAED,mEACC,iBAMH,UACC,WACA,sBACA,qBACA,2BACC,wBACA,eACA,yCACC,iBACA,yBACA,sBACA,8CACA,oCACA,0CACA,oBACA,mBACA,gDACC,wBAIH,yBACC,UACA,4BACC,YACA,kBACA,kBACA,+BACA,eACA,oCACA,8BACC,mBACA,gBACA,uBACA,YACA,sBACA,uBACA,SACA,eACA,eACA,2BACA,yBACA,sBACA,qBACA,iBACA,oBACA,mBACA,0CACA,yBACA,sCACC,YACA,4CACA,4BACA,2BACA,eACA,gBACA,cACA,WACA,sBACA,kBAGF,sCACC,6BAED,qCACC,8CACA,6BACA,6CACC,mBAQL,mBACC,cACA,WACA,UACA,cACA,8CACA,mCACA,gBACA,WACA,gBAEC,2CACC,8BAED,gDACC,8BAGF,yCACC,yBAED,sCACC,mCACA,wCACA,iCAED,2CACC,mCACA,wCACA,iCAKF,iBACC,QAEC,0BAED,QAEC,yBAED,YAGC,0BAED,QAEC,0BAIF,OACC,qBACA,uBACA,mCAKD,cACC,kBACA,4BACA,aACA,UACA,WACA,gBAWD,cAJC,oCACA,mCAOD,wBARC,oCACA,mCAWD,4BAZC,oCACA,mCEl3BD;AAAA;AAAA;AAAA;AAAA,GAYA,cACC,kBACA,gBACA,aACA,WACA,uBACA,aACA,aACA,eACA,SAEA,2BACC,yBAKF,QAEC,yBACA,sBACA,qBACA,iBAGA,2BACC,oBACA,kBACA,MACA,WACA,aACA,4BACA,sBACA,8BAID,mBACC,cACA,0BACA,kBACA,iDACA,sBACA,UACA,mBACA,aACA,eACA,gBACA,WAEA,mDACC,UAID,yBACC,oBACA,yFACA,4BACA,wBACA,2BACA,WACA,kBACA,wBACA,QACA,WAEA,gFAMF,iIAGC,aAEA,sJACC,YACA,kBACA,oBACA,2BACA,WACA,WACA,kBACA,oDACA,uBACA,UAOF,sBACC,oBACA,mBACA,SACA,mBACA,YAKD,oBACC,oBACA,mBACA,yBACA,cAEA,uDAIA,iDAEC,YACA,kBACA,yEACC,aACA,uBACA,mBACA,2BACA,sCACA,eACA,YACA,UACA,aAEA,qFACC,UAGD,qGACC,aAIF,6DACC,8CACA,sDACA,yCACA,sBACA,aACA,kBACA,gBAvJH,mDACA,+EAwJG,qBACA,yBACA,SACA,gBAEA,iGACC,aAID,yEACC,gCACA,iDACA,YACA,YACA,SACA,QACA,kBACA,oBACA,sBAGD,wIAEC,iCAjLJ,mDACA,+EAsLG,mFACC,mBACA,eAED,sNAEC,qBACA,YACA,WAQJ,wBACC,yCACA,eACA,iBACA,SACA,UACA,uBACA,gBACA,uBAEA,cAGA,qCACC,aACA,sBACA,gBAEA,mDACC,gBACA,uBAGD,uDACC,yCACA,kBACA,gBACA,iCACA,mCACA,gBACA,uBAMJ,8DACC,2BACC,wBAGD,sBACC,wCAGD,MAEC,uGF7PF;AAAA;AAAA;AAAA;AAAA,GHQA,iCACC,4BACA,2BACA,eACA,gBAGD,iBACC,kDAID,sGAMC,kBACA,0IACC,UACA,WACA,YACA,WACA,uBACA,kBACA,QACA,uBACA,mBACA,6CACA,qCACA,gCACA,4BACA,wBACA,4CACA,2CAEA,wCAEA,gYAGC,uCAKH,wDAEC,2CACA,4CAGD,yDAEC,YACA,WACA,qBAKA,yJACC,2CAED,iMACC,gDAED,yMACC,iDAED,iPACC,sDAIF,kBACC,KACC,uBAED,GACC,0BAIF,SACC,gCAGD,yKAQC,wDGzGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GGSA,sCAEC,MACC,wCACA,yCAKF,KACC,WACA,YACA,kBAEA,6EAGD,KAEC,6EAEA,yCACA,sBACA,2BACA,eACA,WACA,iDAKD,eAKC,gBACA,gBACA,gBACA,mBACA,6BAGD,GACC,gBAGD,GACC,gBAGD,GACC,gBAGD,GACC,iBAGD,GACC,gBAID,GACC,kBACA,oCAGD,GACC,eAGD,MAEC,qBACA,aACA,uBAGD,GACC,YACA,mBACA,eAGD,IACC,iBACA,sBACA,kCACA,mCACA,qBACA,mBAMD,wBACC,sBAKD,0BAEC,gGACA,MLxBkB,MKyBlB,YACA,gBACA,kBACA,mDACA,8CACA,+EACA,gBACA,YACA,sBACA,qBACA,iBACA,aACA,sBACA,YACA,cAEA,kDACC,iBACA,0CACA,2EACA,mBACA,uBACA,2BACA,iBACA,oBACA,yBAQD,gGACC,cACA,6CACA,8GACC,qBACA,WACA,aACA,0BACA,iBACA,SAIF,8DACC,kBAED,8DACC,kBACA,YACA,WACA,kBACA,gBACA,sBACA,aACA,sBACA,6CACA,iBAEA,oFACC,oDAGD,oEACC,oBACA,eACA,QACA,cACA,SACA,kBACA,WACA,2CAGA,kFACC,QACA,4GACC,2BAIF,gIAEC,8DAED,0HAIC,0EAKA,wVAEC,+CAGF,oGACC,kDACA,yCAMA,gsBAEC,8CACA,wCAEA,g8BACC,qCAMH,sHACC,wBACA,SAMA,kNAEC,aAKF,0EACC,cACA,WACA,kBACA,gFACC,oBACA,eACA,mDACA,WACA,kBAIC,wXAEC,2CACA,+CAKD,gZAEC,2CACA,oDACA,ghBACC,qCAMH,kIACC,yDAGD,4IAEC,wBACA,0BAGD,sIAEC,wBAGA,6EAMJ,oJAEC,kBACA,sBAGC,4jBAGC,oCAIF,4JACC,0BACA,4BACA,cACA,8BACA,0CACA,yCACA,gBACA,oDACA,gBACA,sBACA,mBACA,uBACA,2CACA,6BACA,aACA,YAGA,4KACC,gBACA,kDACA,wOACC,gBACA,6DAGF,4NACC,kEACA,WACA,YAEA,wCAID,4QACC,qBAEA,4ZACC,gCAKH,wQACC,kBACA,cACA,YACA,WACA,YACA,YACA,kBACA,eACA,wCAEA,gRAEC,oCAKF,gQACC,kCAID,gSACC,UACA,YAED,4SACC,wBACA,YAIH,sEACC,aAMD,4YAEC,SACA,WACA,+BACA,4BACA,2BACA,w0BAEC,+BACA,UAUD,sGACC,UACA,kBACA,oCACA,qCACA,SACA,YAIA,qBAEA,kIACC,UACA,eACA,wDACA,gBAGF,gGACC,kBACA,qCACA,oCACA,SACA,UACA,gBFjZF,6CEmZE,qBACA,4BACA,2BACA,YACA,wBACA,gBACA,YACA,UACA,iCACA,6BACA,yBACA,YACA,kBACA,qCAMD,8GACC,mDAIA,wNACC,UAED,oMACC,sBAED,gTACC,oCAID,0GACC,4BACA,wBACA,oBAQH,gHACC,cACA,sHACC,wBACA,mBACA,yBAED,sHACC,+CACA,qCAED,8HACC,YACA,WACA,SACA,gBAIA,oSFpdF,uCEudE,obAEC,+BACA,UAGF,wLACC,gBACA,eACA,cACA,0CACA,eAEA,gNACC,UACA,kBACA,0NACC,gBACA,mBACA,8CACA,wCASJ,8GACC,mBACA,cACA,uBACA,qCACA,UACA,kBACA,8CACA,WACA,8OAEC,oBACA,WAED,0HACC,YACA,oBACA,YACA,4QAGC,UAGF,gJACC,WACA,YACA,wBACA,0BAED,wRAEC,WACA,YACA,cACA,4VACC,2BAED,gWACC,yBAED,oUACC,2CACA,6CACA,0BACA,4BAQH,oHACC,oBACA,mDACA,4BACA,wMACC,kBACA,mBACA,uBACA,gBACA,aACA,0CAED,8LACC,SACA,qCACA,oCACA,0CACA,oZAEC,UAQH,kOAEC,uBACA,2FAGA,kBACA,qBACA,8CACA,sBAMD,sFACC,gDACA,wCACA,oBAGD,sEACC,yBAGD,0OAEC,qBASA,0IACC,qCAGD,gHACC,qCAEA,wKACC,YASF,0IACC,sCAGD,gHACC,sCAEA,wKACC,WAOJ,SACC,sBACA,gBACA,oCACA,gCACA,UACA,aACA,kDACA,0BACA,2CACA,cAEA,kCACC,eAIF,2CACC,SACC,qDACA,mDAED,gBACC,qDAED,aACC,oDAcF,aACC,aACA,8CACA,iBACA,cACA,iBACA,YAGA,kCACC,gBAID,kCACC,aACA,kBACA,oBAGA,gBAGA,uDAEC,eACA,mFACC,aAKH,uCACC,oCASF,aACC,WACA,UL/qBmB,MKgrBnB,UL/qBmB,MKgrBnB,cACA,wBACA,gBACA,ILtrBe,KKurBf,mBACA,gBACA,kBACA,aACA,aACA,0BACA,wCACA,kDACA,cAEA,uBACC,aAOF,cAEC,gBAGC,oFACC,cAKH,sBACC,aACA,6CACA,cACA,0DAEA,iBACA,gBACA,sBAGA,uCACC,UAGD,iCACC,sBACA,sBACA,gCAOE,4NACC,qBACA,WACA,cAOL,qBACC,sBACA,+BACA,gBACA,oDACA,6CACA,cAEA,sCACC,aACA,mBACA,qCACA,WACA,UACA,SACA,+BACA,gBACA,SACA,oDACA,iBACA,mBACA,eACA,WAGA,6BAEA,6CACC,yCACA,8CACA,eAED,wFAEC,+CAGD,8CACC,2CACA,4BACA,WACA,oCACA,qCACA,MACA,qBACA,cAGD,oDACC,mEAOF,4DACC,qCAED,kEACC,qCAKD,4DACC,sCAED,kEACC,sCAIF,SACC,cACA,aACA,mBACA,gBACC,wBAIA,yDAEC,oBACA,sBAKH,aACC,kBACA,gBACA,yBACA,mBAGD,QACC,UACA,yCACA,sCACA,qCACA,oCACA,iCACA,oBACC,UAKF,YACC,aACA,mBAEA,uBACC,aACA,sBACA,YACA,kBACA,mBACA,gBACA,uBACA,eACA,gCACA,kBACA,YAEA,8BACC,aAID,mCACC,0BAED,kCACC,wBAGD,6BACC,qBACA,WACA,YACA,qBACA,sBACA,gBACA,sBACA,WACA,eAGD,yBACC,gCACA,kBACA,gBACA,uBAED,gCACC,iBAED,0FAGC,kBACA,6BACA,kDAMF,oBACC,oBAKF,6BACC,WAGD,6BACC,YASA,0JAGC,wCAIA,2LACC,YAKH,gDAGC,kBACA,8CACA,6BACA,yCACA,YACA,YACA,WACA,gBACA,mBACA,sDACA,aACA,mBAEA,kEACC,YAKA,qBAEA,2BACA,YACA,SACA,QACA,kBACA,oBACA,iDACA,iBAGD,oFACC,0BACA,qBACA,oBACA,sGACC,qBACA,0BAIF,8EACC,oBACA,oBACA,gGACC,sBAIF,+DACC,cAGD,+GACC,SAGD,yDAEC,wBACA,sBAED,yDACC,aACA,cAEA,8EACC,aAGD,oOAGC,eACA,YA/FkB,KAgGlB,SACA,yCACA,+BACA,aACA,uBACA,YACA,SACA,mBACA,gBACA,WACA,6BACA,mBAEA,whDAIC,YACA,aACA,+BACA,gBAnHe,KAqHhB,yzBAIC,yBAOC,gvGACC,oBAlIe,KAsIlB,+tBAEC,gCAED,ojBAEC,+CAED,4nBAEC,kDAED,mSACC,2CACA,oDAGD,mSACC,2BAED,iRACC,eACA,mBAED,sPACC,YACA,kBACA,cACA,mBAED,mSACC,SACA,wBAGD,gVACC,kCAID,wQACC,MA9Ke,KA+Kf,YAGD,uyBAEC,qBACA,WAED,yeACC,mBAED,8cACC,mBAED,2xBACC,YAED,iRACC,aACA,cAGA,mBACA,mbACC,wBAIF,04BAEC,sBAGD,0RACC,UAlNiB,KAmNjB,gBACA,aACA,cAEA,4bACC,wBAQA,2hDACC,eAMD,ygDACC,kBAKJ,8EACC,UACA,6FACC,UAcD,+EACC,MA/PiB,KAgQjB,OAhQiB,KAyQlB,6CACC,WACA,YAOJ,kBACC,wBACA,kBACA,MACA,gDACA,aACA,sBACA,uCACA,gBACA,gBACA,gBACA,kBACA,eACA,UL5sCgB,MK6sChB,UL5sCgB,MK+sChB,yCACC,kBACA,YACA,eACA,iBACA,aACA,eACA,mBACA,cAKC,8RAEC,QACA,WACA,YACA,YACA,aACA,WACA,eACA,4mBAEC,WAED,wtBAEC,WACA,ghDAEC,UAIF,kVACC,UAKH,8IAGC,8CAEA,2RACC,aAIF,6JAEC,kBACA,YACA,WACA,WAQC,2XAEC,aAEA,2eACC,WAIH,wFACC,SACA,uBAEA,aACA,gGACC,SAGD,oHACC,aAKH,qEACC,aACA,SACA,wBACA,qBACA,YACA,WACA,SACA,UAGD,qEACC,kBACA,qBACA,YACA,WACA,iBACA,kBACA,sBACA,uBACA,WACA,kBACA,gBACA,0BACA,iBACA,iBACA,eACA,QACA,iBAGD,kJAEC,cACA,yBACA,mBACA,gBACA,uBACA,QACA,aACA,eAGD,yEACC,WACA,QACA,SACA,sDAGD,wEACC,QACA,mBACA,gBACA,uBACA,gBACA,WACA,cACA,iBAGD,qEACC,QACA,kBACA,kFACC,SAGA,sBAIH,2EACC,aAIF,8CACC,6DACA,oDCt9CD;AAAA;AAAA;AAAA;AAAA;AAAA,GAcC,mDAEC,WAGD,kDAEC,YAGD,qDAEC,WAGD,oDAEC,YAKD,mDAEC,YAGD,kDAEC,WAGD,qDAEC,YAGD,oDAEC,WAIF,YACC,WAGD,QACC,aAGD,iBACC,kBACA,4BACA,aACA,UACA,WACA,gBAGD,MACC,gBAGD,QACC,kBAGD,aACC,qBCnFD;AAAA;AAAA;AAAA,GAOA,mBACC,SCRD;AAAA;AAAA;AAAA,GAMA,wCAGC,UACC,iCACA,qBAID,iBACC,wBAID,YACC,WACA,iCACA,sBAID,0BACC,6BACA,eACA,0BAGA,6BACC,wBAIF,0CACC,sBAGD,8BACC,uBACA,sBAID,kBACC,wCACA,cAEA,iBAEA,eACA,uCACC,aAED,8BACC,aACA,mDACC,gBAOF,gDACC,4BAED,qDACC,eACA,gCACA,IRiBa,KQhBb,qBACA,WACA,YACA,aACA,oCACA,eACA,WACA,wBAED,2CACC,4BAKF,uBACC,eACA,gCACA,qBACA,WACA,YACA,aACA,eACA,WAED,0DAEC,UAID,6CACC,0BAID,kDACC,kCAED,8CACC,wBAGD,wBACC,gCAID,gBACC,aAED,+BACC,6BAMF,0CACC,8BACC,6BACA,eACA,qCACC,wBAMA,0CACC,cAGF,+BACC,gCACA,iDACA,SACA,YACA,SACA,QACA,kBACA,oBACA,sBACA,aACA,aAID,wCACC,uBCpKH;AAAA;AAAA;AAAA;AAAA,GAMA,SACI,kBACA,cACA,6BACA,kBACA,mBACA,sBACA,gBACA,gBACA,iBACA,qBACA,iBACA,oBACA,mBACA,kBACA,oBACA,iBACA,uBACA,eACA,UACA,eAEA,gBACA,eACA,uDACA,8DAGI,mBACA,UACA,wBAEJ,uDAEI,uBACA,0BAEJ,8CAEI,eACA,eAEJ,4CAEI,wBACA,eACA,0EACI,QACA,qBACA,iBACA,8BACA,qDAGR,0CAEI,yBACA,cACA,wEACI,QACA,mBACA,iBACA,8BACA,uDAQJ,kPACI,SACA,yBACA,8CAGR,iCACI,sBACA,oBAEJ,kCACI,wBACA,oBAOA,0QACI,MACA,yBACA,iDAGR,4EAEI,uBACA,0BAEJ,oCACI,sBACA,iBAEJ,qCACI,wBACA,iBAIR,eACI,gBACA,gBACA,8CACA,6BACA,kBACA,mCAGJ,+BACI,kBACA,QACA,SACA,2BACA,mBCnIJ;AAAA;AAAA;AAAA,GAIA,kBACE,gBACA,gBACA,8CACA,6BACA,6CACA,eACA,gBACA,eACA,cACA,mCACA,aACA,mBACA,gBAEF,kFAEE,aACA,mBACA,WAEF,oEAEE,gBACA,gBACA,sBACA,eACA,YACA,aACA,mBACA,4BACA,2BACA,6BACA,aAEF,4FAEE,cACA,WACA,YACA,gBACA,iBACA,YAGF,4GAEE,sfACA,YACA,wCACA,qBACA,WACA,YAEF,wGAEE,WACA,wBACA,iBAEF,kPAIE,eACA,UAEF,+BACE,WAEF,mCACE,eAEF,8BACE,yCAEF,6BACE,2CAEF,gCACE,2CAEF,gCACE,2CAEF,6BACE,2CAEF,gCACE,2CAEF,8CACE,qBACA,WACA,YACA,iEACA,iBAOF,gEACE,kgBAEF,oCACC,8BACA,4BAED;AAAA;AAAA;AAAA,GAQA,iCACE,kBACA,WACA,YACA,eACA,gBACA,4BACA,wBACA,aACA,uBAGF,2CACE,mCAGF,0CACE,wCACA,kBACA,uBACD;AAAA;AAAA;AAAA,EAID,qCACE,+BAEF,wCACE,eACA,gBACA,uBACA,mBAEF,qDACE,cAEF,2DACE,sBAEF,iDACE,eACA,sBAEF,iDACE,qBAEF,6BACA,GACI,2BAEJ,IACI,6BAEJ,KACI,4BAGJ,4CACE,6BAEF,mCACE,qBACA,YACA,oIACA,2BACA,mCACA,8CAEF,2CACE,oBACA,mBAEF,iDACE,WAEF,0DACE,wBACA,YAEF,6CACE,WAEF,iDACE,WACD;AAAA;AAAA;AAAA,EAID,qCACE,+BAEF,wCACE,eACA,gBACA,uBACA,mBAEF,qDACE,cAEF,2DACE,sBAEF,iDACE,eACA,sBAEF,iDACE,qBAEF,6CACE,8CAEF,yCACE,+CAEF,8CACE,aACA,sBACA,mBACA,YAEF,yCACE,yBACA,YACA,gBACA,uBAEF,8CACE,oCACA,sBACD,8CACC,WACA,YACA,cAEF,qCACE,WACA,yBACA,qBAEF,2CACE,WACA,gBACA,mBAEF,wCACE,gBACA,UACA,MACA,8CACA,YAEF,wDACE,aAEF,qDACE,WAEF,iDACE,YAEF,iDACE,YAEF,qDACE,YAEF,4EACE,sBACA,2BAEF,mEACE,wBAEF,sEACE,oBAEF,6DACE,oCAEF,+EACE,mBACD,2CACC,uBACD,oCACC,aACA,sBACA,oBACA,UACA,gBACA,YACA,uBACA,cAEF,yDACE,sBAEF,4CACE,iBACA,gBAEF,yBACA,oCACI,mBACA,iBAGJ,yBACA,oCACI,mBACA,gBAEJ,4CACI,iBAGJ,yBACE,uBAEF,oDACE,sBAEF,0CACE,gBAEF,+CACA,yBACI,UAGJ,yBACA,yBACI,0CAEH,oCACC,YACA,aACA,sBACA,mBAEF,uCACE,iBACA,mBACA,SAEF,oCACE,sBACA,WACA,aACA,sBACA,aACA,OACA,mBAEF,sCACE,sBAEF,+BACE,kCAEF,yBACA,+BACI,qEAGJ,wCACE,aACA,sBACA,gBACD,2CACC,iBACA,oDAEF,6CACE,oDAEF,yDACE,aAEF,4CACE,uFCnZF;AAAA;AAAA;AAAA,GAIA,aACC,8DAGC,kDACC,wCAIA,wDACC,gBAED,yEACC,+BACA,2BACA,wCAEA,8OAGC,UAID,iFACC,aAED,oFACC,aAED,iGACC,YAMJ,sBACC,iEACA,uCAGD,8BACC,uCAID,kCACC,cAGD,oBACC,iBACA,mCACA,sBACA,qBACA,iBAED,+KAIC,kBAID,oBACC,eACA,oCACA,8CACA,2CACA,sBAEA,aACA,sBACA,mBACA,uBAEA,kDACA,2CACA,2CAEA,yCACC,8CAGD,sBACC,kBACA,oCACA,4CACA,WAEA,wBACC,qBACA,mCACA,iBACA,uCACA,kCACA,oCACA","file":"server.css"}
\ No newline at end of file diff --git a/core/fonts/LICENSE_OFL.txt b/core/fonts/LICENSE_OFL.txt deleted file mode 100644 index d952d62c065..00000000000 --- a/core/fonts/LICENSE_OFL.txt +++ /dev/null @@ -1,92 +0,0 @@ -This Font Software is licensed under the SIL Open Font License, -Version 1.1. - -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font -creation efforts of academic and linguistic communities, and to -provide a free and open framework in which fonts may be shared and -improved in partnership with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply to -any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software -components as distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, -deleting, or substituting -- in part or in whole -- any of the -components of the Original Version, by changing formats or by porting -the Font Software to a new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, -modify, redistribute, and sell modified and unmodified copies of the -Font Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, in -Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the -corresponding Copyright Holder. This restriction only applies to the -primary font name as presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created using -the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/core/fonts/NotoSansHK-Regular.ttf b/core/fonts/NotoSansHK-Regular.ttf Binary files differnew file mode 100644 index 00000000000..2a62b9753dd --- /dev/null +++ b/core/fonts/NotoSansHK-Regular.ttf diff --git a/core/fonts/NotoSansJP-Regular.ttf b/core/fonts/NotoSansJP-Regular.ttf Binary files differnew file mode 100644 index 00000000000..b2dad730d76 --- /dev/null +++ b/core/fonts/NotoSansJP-Regular.ttf diff --git a/core/fonts/NotoSansKR-Regular.ttf b/core/fonts/NotoSansKR-Regular.ttf Binary files differnew file mode 100644 index 00000000000..1b14d32473b --- /dev/null +++ b/core/fonts/NotoSansKR-Regular.ttf diff --git a/core/fonts/NotoSansSC-Regular.ttf b/core/fonts/NotoSansSC-Regular.ttf Binary files differnew file mode 100644 index 00000000000..7056f5e97a8 --- /dev/null +++ b/core/fonts/NotoSansSC-Regular.ttf diff --git a/core/fonts/NotoSansTC-Regular.ttf b/core/fonts/NotoSansTC-Regular.ttf Binary files differnew file mode 100644 index 00000000000..e838ef549bb --- /dev/null +++ b/core/fonts/NotoSansTC-Regular.ttf diff --git a/core/img/actions/bluesky.svg b/core/img/actions/bluesky.svg new file mode 100644 index 00000000000..5c373b934ea --- /dev/null +++ b/core/img/actions/bluesky.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free v7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M439.8 358.7C436.5 358.3 433.1 357.9 429.8 357.4C433.2 357.8 436.5 358.3 439.8 358.7zM320 291.1C293.9 240.4 222.9 145.9 156.9 99.3C93.6 54.6 69.5 62.3 53.6 69.5C35.3 77.8 32 105.9 32 122.4C32 138.9 41.1 258 47 277.9C66.5 343.6 136.1 365.8 200.2 358.6C203.5 358.1 206.8 357.7 210.2 357.2C206.9 357.7 203.6 358.2 200.2 358.6C106.3 372.6 22.9 406.8 132.3 528.5C252.6 653.1 297.1 501.8 320 425.1C342.9 501.8 369.2 647.6 505.6 528.5C608 425.1 533.7 372.5 439.8 358.6C436.5 358.2 433.1 357.8 429.8 357.3C433.2 357.7 436.5 358.2 439.8 358.6C503.9 365.7 573.4 343.5 593 277.9C598.9 258 608 139 608 122.4C608 105.8 604.7 77.7 586.4 69.5C570.6 62.4 546.4 54.6 483.2 99.3C417.1 145.9 346.1 240.4 320 291.1z"/></svg>
\ No newline at end of file diff --git a/core/img/bluesky.svg b/core/img/bluesky.svg new file mode 100644 index 00000000000..5c373b934ea --- /dev/null +++ b/core/img/bluesky.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free v7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M439.8 358.7C436.5 358.3 433.1 357.9 429.8 357.4C433.2 357.8 436.5 358.3 439.8 358.7zM320 291.1C293.9 240.4 222.9 145.9 156.9 99.3C93.6 54.6 69.5 62.3 53.6 69.5C35.3 77.8 32 105.9 32 122.4C32 138.9 41.1 258 47 277.9C66.5 343.6 136.1 365.8 200.2 358.6C203.5 358.1 206.8 357.7 210.2 357.2C206.9 357.7 203.6 358.2 200.2 358.6C106.3 372.6 22.9 406.8 132.3 528.5C252.6 653.1 297.1 501.8 320 425.1C342.9 501.8 369.2 647.6 505.6 528.5C608 425.1 533.7 372.5 439.8 358.6C436.5 358.2 433.1 357.8 429.8 357.3C433.2 357.7 436.5 358.2 439.8 358.6C503.9 365.7 573.4 343.5 593 277.9C598.9 258 608 139 608 122.4C608 105.8 604.7 77.7 586.4 69.5C570.6 62.4 546.4 54.6 483.2 99.3C417.1 145.9 346.1 240.4 320 291.1z"/></svg>
\ No newline at end of file diff --git a/core/l10n/be.js b/core/l10n/be.js index f4e9bd6aa8c..9e8a62a212a 100644 --- a/core/l10n/be.js +++ b/core/l10n/be.js @@ -7,6 +7,7 @@ OC.L10N.register( "The selected file cannot be read." : "Не ўдалося прачытаць выбраны файл.", "Missing a temporary folder" : "Адсутнічае часовая папка", "Could not write file to disk" : "Не ўдалося запісаць файл на дыск", + "A PHP extension stopped the file upload" : "Пашырэнне PHP спыніла запампоўванне файла", "Invalid file provided" : "Прапанаваны файл некарэктны", "Unknown filetype" : "Невядомы тып файла", "An error occurred. Please contact your admin." : "Узнікла памылка. Звярніцеся да адміністратара.", @@ -145,6 +146,8 @@ OC.L10N.register( "AVI video" : "Відэа AVI", "unknown text" : "невядомы тэкст", "Hello world!" : "Hello world!", + "sunny" : "сонечна", + "Hello {name}, the weather is {weather}" : "Вітаем, {name}, на дварэ сёння {weather}", "Hello {name}" : "Вітаем, {name}", "new" : "новы", "Update to {version}" : "Абнаўленне да {version}", @@ -156,9 +159,14 @@ OC.L10N.register( "_{count} notification_::_{count} notifications_" : ["{count} апавяшчэнне","{count} апавяшчэнні","{count} апавяшчэнняў","{count} апавяшчэнняў"], "No" : "Не", "Yes" : "Так", + "The remote URL must include the user." : "Аддалены URL-адрас павінен уключаць карыстальніка.", "user@your-nextcloud.org" : "user@your-nextcloud.org", + "Direct link copied to clipboard" : "Прамая спасылка скапіявана ў буфер абмену", + "Please copy the link manually:" : "Скапіюйце спасылку ўручную:", "Clear search" : "Ачысціць пошук", "Searching …" : "Пошук …", + "Start typing to search" : "Пачніце ўводзіць тэкст для пошуку", + "No matching results" : "Няма адпаведных вынікаў", "Today" : "Сёння", "Last 7 days" : "Апошнія 7 дзён", "Last 30 days" : "Апошнія 30 дзён", @@ -176,6 +184,8 @@ OC.L10N.register( "Log in to {productName}" : "Увайсці ў {productName}", "Wrong login or password." : "Няправільны лагін або пароль.", "This account is disabled" : "Гэты ўліковы запіс адключаны.", + "Account name or email" : "Імя ўліковага запісу або email", + "Account name" : "Імя ўліковага запісу", "Please contact your administrator." : "Звярніцеся да адміністратара.", "Session error" : "Памылка сеанса", "An internal error occurred." : "Узнікла ўнутраная памылка.", @@ -186,24 +196,37 @@ OC.L10N.register( "Your connection is not secure" : "Ваша злучэнне не з'яўляецца бяспечным", "Browser not supported" : "Браўзер не падтрымліваецца", "Reset password" : "Скінуць пароль", + "Password cannot be changed. Please contact your administrator." : "Немагчыма змяніць пароль. Звярніцеся да адміністратара.", "New password" : "Новы пароль", "I know what I'm doing" : "Я ведаю, што раблю", + "Resetting password" : "Скід пароля", "Chatting, video calls, screen sharing, online meetings and web conferencing – in your browser and with mobile apps." : "Чаты, відэавыклікі, дэманстрацыя экрана, анлайн-сустрэчы і вэб-канферэнцыі — у вашым браўзеры і з дапамогай мабільных праграм.", "Collaborative documents, spreadsheets and presentations, built on Collabora Online." : "Супольныя дакументы, электронныя табліцы і прэзентацыі, створаныя ў Collabora Online.", "Recommended apps" : "Рэкамендаваныя праграмы", "Loading apps …" : "Загрузка праграм …", + "Could not fetch list of apps from the App Store." : "Не ўдалося атрымаць спіс праграм з App Store.", + "Cannot install this app because it is not compatible" : "Немагчыма ўсталяваць гэту праграму, бо яна несумяшчальная", + "Cannot install this app" : "Немагчыма ўсталяваць гэту праграму", "Skip" : "Прапусціць", "Installing apps …" : "Усталяванне праграм …", "Install recommended apps" : "Усталяваць рэкамендаваныя праграмы", + "Avatar of {displayName}" : "Аватар карыстальніка {displayName}", + "Loading your contacts …" : "Загрузка вашых кантактаў …", + "Looking for {term} …" : "Пошук {term} …", + "Search contacts" : "Пошук кантактаў", "Reset search" : "Скінуць пошук", "Search contacts …" : "Пошук кантактаў …", + "Could not load your contacts" : "Не ўдалося загрузіць вашы кантакты", "No contacts found" : "Кантакты не знойдзены", "Show all contacts" : "Паказаць усе кантакты", "Install the Contacts app" : "Усталяваць праграму \"Кантакты\"", "Search" : "Пошук", "No results for {query}" : "Няма вынікаў для {query}", + "Press Enter to start searching" : "Націсніце Enter, каб пачаць пошук", "Forgot password?" : "Забылі пароль?", "Back" : "Назад", + "More actions" : "Больш дзеянняў", + "User menu" : "Меню карыстальніка", "Storage & database" : "Сховішча і база даных", "Data folder" : "Папка з данымі", "Database configuration" : "Канфігурацыя базы даных", @@ -241,6 +264,7 @@ OC.L10N.register( "No tags found" : "Тэгі не знойдзены", "Clipboard not available, please copy manually" : "Буфер абмену недаступны, скапіюйце ўручную", "Accounts" : "Уліковыя запісы", + "Admin" : "Адміністратар", "Help" : "Даведка", "Access forbidden" : "Доступ забаронены", "Back to %s" : "Назад да %s", @@ -274,6 +298,7 @@ OC.L10N.register( "Access through untrusted domain" : "Доступ праз ненадзейны дамен", "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Звярніцеся да адміністратара. Калі вы адміністратар, адрэдагуйце параметр \"trusted_domains\" у config/config.php, як у прыкладзе ў config.sample.php.", "App update required" : "Патрэбна абнавіць праграму", + "%1$s will be updated to version %2$s" : "%1$s будзе абноўлена да версіі %2$s", "The following apps will be updated:" : "Будуць абноўлены наступныя праграмы:", "These incompatible apps will be disabled:" : "Гэтыя несумяшчальныя праграмы будуць адключаныя:", "Start update" : "Запусціць абнаўленне", diff --git a/core/l10n/be.json b/core/l10n/be.json index 112ee4f2be1..ec8379e2371 100644 --- a/core/l10n/be.json +++ b/core/l10n/be.json @@ -5,6 +5,7 @@ "The selected file cannot be read." : "Не ўдалося прачытаць выбраны файл.", "Missing a temporary folder" : "Адсутнічае часовая папка", "Could not write file to disk" : "Не ўдалося запісаць файл на дыск", + "A PHP extension stopped the file upload" : "Пашырэнне PHP спыніла запампоўванне файла", "Invalid file provided" : "Прапанаваны файл некарэктны", "Unknown filetype" : "Невядомы тып файла", "An error occurred. Please contact your admin." : "Узнікла памылка. Звярніцеся да адміністратара.", @@ -143,6 +144,8 @@ "AVI video" : "Відэа AVI", "unknown text" : "невядомы тэкст", "Hello world!" : "Hello world!", + "sunny" : "сонечна", + "Hello {name}, the weather is {weather}" : "Вітаем, {name}, на дварэ сёння {weather}", "Hello {name}" : "Вітаем, {name}", "new" : "новы", "Update to {version}" : "Абнаўленне да {version}", @@ -154,9 +157,14 @@ "_{count} notification_::_{count} notifications_" : ["{count} апавяшчэнне","{count} апавяшчэнні","{count} апавяшчэнняў","{count} апавяшчэнняў"], "No" : "Не", "Yes" : "Так", + "The remote URL must include the user." : "Аддалены URL-адрас павінен уключаць карыстальніка.", "user@your-nextcloud.org" : "user@your-nextcloud.org", + "Direct link copied to clipboard" : "Прамая спасылка скапіявана ў буфер абмену", + "Please copy the link manually:" : "Скапіюйце спасылку ўручную:", "Clear search" : "Ачысціць пошук", "Searching …" : "Пошук …", + "Start typing to search" : "Пачніце ўводзіць тэкст для пошуку", + "No matching results" : "Няма адпаведных вынікаў", "Today" : "Сёння", "Last 7 days" : "Апошнія 7 дзён", "Last 30 days" : "Апошнія 30 дзён", @@ -174,6 +182,8 @@ "Log in to {productName}" : "Увайсці ў {productName}", "Wrong login or password." : "Няправільны лагін або пароль.", "This account is disabled" : "Гэты ўліковы запіс адключаны.", + "Account name or email" : "Імя ўліковага запісу або email", + "Account name" : "Імя ўліковага запісу", "Please contact your administrator." : "Звярніцеся да адміністратара.", "Session error" : "Памылка сеанса", "An internal error occurred." : "Узнікла ўнутраная памылка.", @@ -184,24 +194,37 @@ "Your connection is not secure" : "Ваша злучэнне не з'яўляецца бяспечным", "Browser not supported" : "Браўзер не падтрымліваецца", "Reset password" : "Скінуць пароль", + "Password cannot be changed. Please contact your administrator." : "Немагчыма змяніць пароль. Звярніцеся да адміністратара.", "New password" : "Новы пароль", "I know what I'm doing" : "Я ведаю, што раблю", + "Resetting password" : "Скід пароля", "Chatting, video calls, screen sharing, online meetings and web conferencing – in your browser and with mobile apps." : "Чаты, відэавыклікі, дэманстрацыя экрана, анлайн-сустрэчы і вэб-канферэнцыі — у вашым браўзеры і з дапамогай мабільных праграм.", "Collaborative documents, spreadsheets and presentations, built on Collabora Online." : "Супольныя дакументы, электронныя табліцы і прэзентацыі, створаныя ў Collabora Online.", "Recommended apps" : "Рэкамендаваныя праграмы", "Loading apps …" : "Загрузка праграм …", + "Could not fetch list of apps from the App Store." : "Не ўдалося атрымаць спіс праграм з App Store.", + "Cannot install this app because it is not compatible" : "Немагчыма ўсталяваць гэту праграму, бо яна несумяшчальная", + "Cannot install this app" : "Немагчыма ўсталяваць гэту праграму", "Skip" : "Прапусціць", "Installing apps …" : "Усталяванне праграм …", "Install recommended apps" : "Усталяваць рэкамендаваныя праграмы", + "Avatar of {displayName}" : "Аватар карыстальніка {displayName}", + "Loading your contacts …" : "Загрузка вашых кантактаў …", + "Looking for {term} …" : "Пошук {term} …", + "Search contacts" : "Пошук кантактаў", "Reset search" : "Скінуць пошук", "Search contacts …" : "Пошук кантактаў …", + "Could not load your contacts" : "Не ўдалося загрузіць вашы кантакты", "No contacts found" : "Кантакты не знойдзены", "Show all contacts" : "Паказаць усе кантакты", "Install the Contacts app" : "Усталяваць праграму \"Кантакты\"", "Search" : "Пошук", "No results for {query}" : "Няма вынікаў для {query}", + "Press Enter to start searching" : "Націсніце Enter, каб пачаць пошук", "Forgot password?" : "Забылі пароль?", "Back" : "Назад", + "More actions" : "Больш дзеянняў", + "User menu" : "Меню карыстальніка", "Storage & database" : "Сховішча і база даных", "Data folder" : "Папка з данымі", "Database configuration" : "Канфігурацыя базы даных", @@ -239,6 +262,7 @@ "No tags found" : "Тэгі не знойдзены", "Clipboard not available, please copy manually" : "Буфер абмену недаступны, скапіюйце ўручную", "Accounts" : "Уліковыя запісы", + "Admin" : "Адміністратар", "Help" : "Даведка", "Access forbidden" : "Доступ забаронены", "Back to %s" : "Назад да %s", @@ -272,6 +296,7 @@ "Access through untrusted domain" : "Доступ праз ненадзейны дамен", "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Звярніцеся да адміністратара. Калі вы адміністратар, адрэдагуйце параметр \"trusted_domains\" у config/config.php, як у прыкладзе ў config.sample.php.", "App update required" : "Патрэбна абнавіць праграму", + "%1$s will be updated to version %2$s" : "%1$s будзе абноўлена да версіі %2$s", "The following apps will be updated:" : "Будуць абноўлены наступныя праграмы:", "These incompatible apps will be disabled:" : "Гэтыя несумяшчальныя праграмы будуць адключаныя:", "Start update" : "Запусціць абнаўленне", diff --git a/core/l10n/es.js b/core/l10n/es.js index ce4a1f15df4..f847367e415 100644 --- a/core/l10n/es.js +++ b/core/l10n/es.js @@ -214,7 +214,7 @@ OC.L10N.register( "Update to {version}" : "Actualice a {version}", "An error occurred." : "Ocurrió un error.", "Please reload the page." : "Recargue/Actualice la página", - "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "La actualización tuvo un problema. Para más información <a href=\"{url}\">consulta nuestro artículo del foro</a> cubriendo este tema.", + "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "La actualización tuvo un problema. Para más información <a href=\"{url}\">consulte nuestro artículo del foro</a> que cubre este tema.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "La actualización ha fallado. Por favor, informa de este problema a la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunidad de Nextcloud</a>.", "Continue to {productName}" : "Continuar a {productName}", "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["La actualización ha terminado con éxito. Redirigiendo a su {productName} en %n segundo. ","La actualización ha terminado con éxito. Redirigiendo a su {productName} en %n segundos. ","La actualización ha terminado con éxito. Redirigiendo a su {productName} en %n segundos. "], diff --git a/core/l10n/es.json b/core/l10n/es.json index c4786db8877..dc135135263 100644 --- a/core/l10n/es.json +++ b/core/l10n/es.json @@ -212,7 +212,7 @@ "Update to {version}" : "Actualice a {version}", "An error occurred." : "Ocurrió un error.", "Please reload the page." : "Recargue/Actualice la página", - "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "La actualización tuvo un problema. Para más información <a href=\"{url}\">consulta nuestro artículo del foro</a> cubriendo este tema.", + "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "La actualización tuvo un problema. Para más información <a href=\"{url}\">consulte nuestro artículo del foro</a> que cubre este tema.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "La actualización ha fallado. Por favor, informa de este problema a la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunidad de Nextcloud</a>.", "Continue to {productName}" : "Continuar a {productName}", "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["La actualización ha terminado con éxito. Redirigiendo a su {productName} en %n segundo. ","La actualización ha terminado con éxito. Redirigiendo a su {productName} en %n segundos. ","La actualización ha terminado con éxito. Redirigiendo a su {productName} en %n segundos. "], diff --git a/core/l10n/et_EE.js b/core/l10n/et_EE.js index bf6db3ec59a..edadb4b18b6 100644 --- a/core/l10n/et_EE.js +++ b/core/l10n/et_EE.js @@ -16,7 +16,7 @@ OC.L10N.register( "Invalid file provided" : "Vigane fail", "No image or file provided" : "Ühtegi pilti või faili pole pakutud", "Unknown filetype" : "Tundmatu failitüüp", - "An error occurred. Please contact your admin." : "Tekkis tõrge. Palun võta ühendust administraatoriga.", + "An error occurred. Please contact your admin." : "Tekkis tõrge. Palun võta ühendust peakasutajaga.", "Invalid image" : "Vigane pilt", "No temporary profile picture available, try again" : "Ühtegi ajutist profiilipilti pole saadaval, proovi uuesti", "No crop data provided" : "Lõikeandmeid ei leitud", @@ -266,11 +266,11 @@ OC.L10N.register( "Account name or email" : "Konto nimi või e-posti aadress", "Account name" : "Kasutajakonto nimi", "Server side authentication failed!" : "Serveripoolne autentimine ebaõnnestus!", - "Please contact your administrator." : "Palun võta ühendust oma administraatoriga.", + "Please contact your administrator." : "Palun võta ühendust oma peakasutajaga.", "Session error" : "Sessiooniviga", "It appears your session token has expired, please refresh the page and try again." : "Tundub, et sinu sessiooni tunnusluba on aegunud, palun laadi leht ja proovi uuesti.", "An internal error occurred." : "Tekkis sisemine viga.", - "Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma administraatoriga.", + "Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma peakasutajaga.", "Password" : "Salasõna", "Log in with a device" : "Logi sisse seadmega", "Login or email" : "Kasutajanimi või e-posti aadress", @@ -431,11 +431,11 @@ OC.L10N.register( "Page not found" : "Lehekülge ei leitud", "The page could not be found on the server or you may not be allowed to view it." : "Seda lehekülge selles serveris ei leidu või sul puudub õigus seda vaadata.", "Too many requests" : "Liiga palju päringuid", - "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Sinu võrgust tuli liiga palju päringuid. Proovi hiljem uuesti, või võta ühendust administraatoriga, kui tegu on veaga.", + "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Sinu võrgust tuli liiga palju päringuid. Proovi hiljem uuesti või kui tegu on veaga, siis võta ühendust peakasutajaga.", "Error" : "Viga", "Internal Server Error" : "Serveri sisemine viga", "The server was unable to complete your request." : "Server ei suutnud sinu päringut lõpetada.", - "If this happens again, please send the technical details below to the server administrator." : "Kui see veel kord juhtub, saada tehnilised detailid allpool serveri administraatorile.", + "If this happens again, please send the technical details below to the server administrator." : "Kui see veel kord juhtub, saada tehnilised üksikasjad allpool serveri peakasutajale.", "More details can be found in the server log." : "Lisainfot võib leida serveri logist.", "For more details see the documentation ↗." : "Lisateavet leiad dokumentatsioonist ↗.", "Technical details" : "Tehnilised andmed", diff --git a/core/l10n/et_EE.json b/core/l10n/et_EE.json index 337bd60f905..b596b353654 100644 --- a/core/l10n/et_EE.json +++ b/core/l10n/et_EE.json @@ -14,7 +14,7 @@ "Invalid file provided" : "Vigane fail", "No image or file provided" : "Ühtegi pilti või faili pole pakutud", "Unknown filetype" : "Tundmatu failitüüp", - "An error occurred. Please contact your admin." : "Tekkis tõrge. Palun võta ühendust administraatoriga.", + "An error occurred. Please contact your admin." : "Tekkis tõrge. Palun võta ühendust peakasutajaga.", "Invalid image" : "Vigane pilt", "No temporary profile picture available, try again" : "Ühtegi ajutist profiilipilti pole saadaval, proovi uuesti", "No crop data provided" : "Lõikeandmeid ei leitud", @@ -264,11 +264,11 @@ "Account name or email" : "Konto nimi või e-posti aadress", "Account name" : "Kasutajakonto nimi", "Server side authentication failed!" : "Serveripoolne autentimine ebaõnnestus!", - "Please contact your administrator." : "Palun võta ühendust oma administraatoriga.", + "Please contact your administrator." : "Palun võta ühendust oma peakasutajaga.", "Session error" : "Sessiooniviga", "It appears your session token has expired, please refresh the page and try again." : "Tundub, et sinu sessiooni tunnusluba on aegunud, palun laadi leht ja proovi uuesti.", "An internal error occurred." : "Tekkis sisemine viga.", - "Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma administraatoriga.", + "Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma peakasutajaga.", "Password" : "Salasõna", "Log in with a device" : "Logi sisse seadmega", "Login or email" : "Kasutajanimi või e-posti aadress", @@ -429,11 +429,11 @@ "Page not found" : "Lehekülge ei leitud", "The page could not be found on the server or you may not be allowed to view it." : "Seda lehekülge selles serveris ei leidu või sul puudub õigus seda vaadata.", "Too many requests" : "Liiga palju päringuid", - "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Sinu võrgust tuli liiga palju päringuid. Proovi hiljem uuesti, või võta ühendust administraatoriga, kui tegu on veaga.", + "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Sinu võrgust tuli liiga palju päringuid. Proovi hiljem uuesti või kui tegu on veaga, siis võta ühendust peakasutajaga.", "Error" : "Viga", "Internal Server Error" : "Serveri sisemine viga", "The server was unable to complete your request." : "Server ei suutnud sinu päringut lõpetada.", - "If this happens again, please send the technical details below to the server administrator." : "Kui see veel kord juhtub, saada tehnilised detailid allpool serveri administraatorile.", + "If this happens again, please send the technical details below to the server administrator." : "Kui see veel kord juhtub, saada tehnilised üksikasjad allpool serveri peakasutajale.", "More details can be found in the server log." : "Lisainfot võib leida serveri logist.", "For more details see the documentation ↗." : "Lisateavet leiad dokumentatsioonist ↗.", "Technical details" : "Tehnilised andmed", diff --git a/core/l10n/lv.js b/core/l10n/lv.js index 3c50e94a918..e8615d0e635 100644 --- a/core/l10n/lv.js +++ b/core/l10n/lv.js @@ -45,7 +45,7 @@ OC.L10N.register( "Internal error" : "Iekšēja kļūda", "Not found" : "Nav atrasts", "Bad request" : "Slikts pieprasījums", - "Requested task type does not exist" : "Pieprasītā uzdevuma veids nepastāv", + "Requested task type does not exist" : "Pieprasītais uzdevumu veids nepastāv", "Image not found" : "Attēls nav atrasts", "No translation provider available" : "Tulkošanas pakalpojuma sniedzējs nav pieejams", "Could not detect language" : "Nevarēja noteikt valodu", @@ -55,10 +55,10 @@ OC.L10N.register( "Repair info:" : "Labošanas informācija: ", "Repair warning:" : "Labošanas brīdinājums:", "Repair error:" : "Labošanas kļūda:", - "Nextcloud Server" : "Nextcloud Serveris", + "Nextcloud Server" : "Nextcloud serveris", "Some of your link shares have been removed" : "Dažas no kopīgotajām saitēm tika noņemtas", "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Drošības kļūdas dēļ mums nācās noņemt dažas no kopīgotajām saitēm. Lūgums apmeklēt saiti, lai iegūtu vairāk informācijas.", - "The account limit of this instance is reached." : "Konta ierobežojums šajai instancei ir sasniegts.", + "The account limit of this instance is reached." : "Ir sasniegts konta ierobežojums šajā serverī.", "Learn more ↗" : "Uzzināt vairāk ↗", "Preparing update" : "Sagatavo atjauninājumu", "Please use the command line updater because updating via browser is disabled in your config.php." : "Lūgums izmantot komandrindas atjauninātāju, jo atjaunināšana pārlūkā ir atspējota config.php.", @@ -66,31 +66,32 @@ OC.L10N.register( "Turned off maintenance mode" : "Izslēgts uzturēšanas režīms", "Maintenance mode is kept active" : "Uzturēšanas režīms ir paturēts aktīvs", "Updating database schema" : "Atjaunina datu bāzes shēmu", - "Updated database" : "Atjaunināta datu bāze", + "Updated database" : "Atjaunināta datubāze", "Update app \"%s\" from App Store" : "Atjaunināt lietotni \"%s\" no lietotņu veikala", "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Nosaka, vai uz %s attiecināmā shēma var tikt atjaunināta (tas var prasīt daudz laiku atkarībā no datu bāzes izmēriem)", - "Updated \"%1$s\" to %2$s" : "Atjaunots %1$s uz %2$s", - "Set log level to debug" : "Iestatīt žurnāla rakstīšanu uz atkļūdošanas režīmā", - "Reset log level" : "Atiestatīt žurnāla rakstīšanas režīmu", + "Updated \"%1$s\" to %2$s" : "\"%1$s\" atjauninnāts uz %2$s", + "Set log level to debug" : "Iestatīt žurnāla līmeni uz atkļūdošanu", + "Reset log level" : "Atiestatīt žurnāla līmeni", "Starting code integrity check" : "Uzsākta koda integritātes pārbaude", "Finished code integrity check" : "Pabeigta koda integritātes pārbaude", "%s (incompatible)" : "%s (nesaderīgs)", "The following apps have been disabled: %s" : "Šīs lietotnes tika atspējotas: %s", "Already up to date" : "Jau ir jaunākā", "Unknown" : "Nezināms", + "LDIF address book" : "LDIF adrešu grāmata", "Error occurred while checking server setup" : "Servera pārbaudīšanas laikā atgadījās kļūda", "For more details see the {linkstart}documentation ↗{linkend}." : "Vairāk informācijas ir skatāma {linkstart}dokumentācijā ↗{linkend}.", "unknown text" : "nezināms teksts", "Hello world!" : "Sveika, pasaule!", "sunny" : "saulains", "Hello {name}, the weather is {weather}" : "Sveiciens, {name}, laikapstākļi ir {weather}", - "Hello {name}" : "Sveiks {name}", + "Hello {name}" : "Sveiciens, {name}", "new" : "jauns", - "_download %n file_::_download %n files_" : ["lejupielādēt %n failus","lejupielādēt %n failus","lejupielādēt %n datnes"], - "The update is in progress, leaving this page might interrupt the process in some environments." : "Notiek atjaunināšana, šīs lapas atstāšana var pārtraukt procesu dažās vidēs.", - "Update to {version}" : "Atjaunināts uz {version}", + "_download %n file_::_download %n files_" : ["lejupielādēt %n datņu","lejupielādēt %n datni","lejupielādēt %n datnes"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Notiek atjaunināšana, šīs lapas pamešana dažās vidēs var pārtraukt to.", + "Update to {version}" : "Atjaunināt uz {version}", "An error occurred." : "Atgadījās kļūda.", - "Please reload the page." : "Lūdzu, atkārtoti ielādējiet lapu.", + "Please reload the page." : "Lūgums pārlādēt lapu.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Atjauninājums nebija veiksmīgs. Vairāk informācijas par šo sarežģījumu ir skatāma <a href=\"{url}\">mūsu foruma ierakstā</a> .", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Atjauninājums nebija veiksmīgs. Lūgums ziņot par šo nepilnību <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud kopienai</a>.", "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["Atjaunināšana bija veiksmīga. Notiks pārvirzīšana uz {productName} pēc %n sekundēm.","Atjaunināšana bija veiksmīga. Notiks pārvirzīšana uz {productName} pēc %n sekundes.","Atjaunināšana bija veiksmīga. Notiks pārvirzīšana uz {productName} pēc %n sekundēm."], @@ -101,7 +102,7 @@ OC.L10N.register( "No" : "Nē", "Yes" : "Jā", "Failed to add the public link to your Nextcloud" : "Neizdevās pievienot publisku saiti Tavam Nextcloud", - "Please copy the link manually:" : "Lūdzu, nokopējiet saiti automātiski:", + "Please copy the link manually:" : "Lūgums pašrocīgi ievietot saiti starpliktuvē:", "Pick start date" : "Izvēlieties sākuma datumu", "Pick end date" : "Izvēlieties beigu datumu", "Search in date range" : "Meklēt laika posmā", @@ -126,6 +127,7 @@ OC.L10N.register( "Log in to {productName}" : "Pieteikties {productName}", "Wrong login or password." : "Nepareizs lietotājvārds vai parole.", "This account is disabled" : "Šis konts ir atspējots", + "We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds." : "Mēs esam noteikuši vairākus nederīgus pieteikšanās mēģinājumus no šīs IP adreses, tādējādi nākamā pieteikšanās ir ierobežota līdz 30 sekundēm.", "Account name or email" : "Konta nosaukums vai e-pasta adrese", "Account name" : "Konta nosaukums", "Server side authentication failed!" : "Servera autentifikācija neizdevās!", @@ -138,8 +140,8 @@ OC.L10N.register( "Your account is not setup for passwordless login." : "Konts nav iestatīts, lai pieteiktos bez paroles.", "Your connection is not secure" : "Savienojums nav drošs", "Passwordless authentication is only available over a secure connection." : "Autentifikācija bez paroles ir pieejama tikai ar drošu savienojumu.", - "Browser not supported" : "Pārlūkprogramma netiek atbalstīta", - "Passwordless authentication is not supported in your browser." : "Pārlūkprogrammā netiek nodrošināta autentifikācija bez paroles", + "Browser not supported" : "Pārlūks nav atbalstīts", + "Passwordless authentication is not supported in your browser." : "Pārlūks nenodrošina autentificēšanos bez paroles.", "Reset password" : "Atiestatīt paroli", "Back to login" : "Atpakaļ uz pieteikšanos", "Couldn't send reset email. Please contact your administrator." : "Nevarēja nosūtīt atiestatīšanas e-pasta ziņojumu. Lūgums sazināties ar savu pārvaldītāju.", @@ -178,7 +180,7 @@ OC.L10N.register( "Database password" : "Datubāzes parole", "Database name" : "Datubāzes nosaukums", "Database tablespace" : "Datubāzes tabulas telpa", - "Please specify the port number along with the host name (e.g., localhost:5432)." : "Lūdzu, norādiet porta numuru kopā ar resursdatora nosaukumu (piemēram, localhost: 5432).", + "Please specify the port number along with the host name (e.g., localhost:5432)." : "Lūgums norādītt porta numuru kopā ar resursdatora nosaukumu (piemēram, localhost:5432).", "Database host" : "Datubāzes serveris", "Need help?" : "Vajadzīga palīdzība?", "See the documentation" : "Skatiet dokumentāciju", diff --git a/core/l10n/lv.json b/core/l10n/lv.json index 3a19a70d965..93ad6f964b8 100644 --- a/core/l10n/lv.json +++ b/core/l10n/lv.json @@ -43,7 +43,7 @@ "Internal error" : "Iekšēja kļūda", "Not found" : "Nav atrasts", "Bad request" : "Slikts pieprasījums", - "Requested task type does not exist" : "Pieprasītā uzdevuma veids nepastāv", + "Requested task type does not exist" : "Pieprasītais uzdevumu veids nepastāv", "Image not found" : "Attēls nav atrasts", "No translation provider available" : "Tulkošanas pakalpojuma sniedzējs nav pieejams", "Could not detect language" : "Nevarēja noteikt valodu", @@ -53,10 +53,10 @@ "Repair info:" : "Labošanas informācija: ", "Repair warning:" : "Labošanas brīdinājums:", "Repair error:" : "Labošanas kļūda:", - "Nextcloud Server" : "Nextcloud Serveris", + "Nextcloud Server" : "Nextcloud serveris", "Some of your link shares have been removed" : "Dažas no kopīgotajām saitēm tika noņemtas", "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Drošības kļūdas dēļ mums nācās noņemt dažas no kopīgotajām saitēm. Lūgums apmeklēt saiti, lai iegūtu vairāk informācijas.", - "The account limit of this instance is reached." : "Konta ierobežojums šajai instancei ir sasniegts.", + "The account limit of this instance is reached." : "Ir sasniegts konta ierobežojums šajā serverī.", "Learn more ↗" : "Uzzināt vairāk ↗", "Preparing update" : "Sagatavo atjauninājumu", "Please use the command line updater because updating via browser is disabled in your config.php." : "Lūgums izmantot komandrindas atjauninātāju, jo atjaunināšana pārlūkā ir atspējota config.php.", @@ -64,31 +64,32 @@ "Turned off maintenance mode" : "Izslēgts uzturēšanas režīms", "Maintenance mode is kept active" : "Uzturēšanas režīms ir paturēts aktīvs", "Updating database schema" : "Atjaunina datu bāzes shēmu", - "Updated database" : "Atjaunināta datu bāze", + "Updated database" : "Atjaunināta datubāze", "Update app \"%s\" from App Store" : "Atjaunināt lietotni \"%s\" no lietotņu veikala", "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Nosaka, vai uz %s attiecināmā shēma var tikt atjaunināta (tas var prasīt daudz laiku atkarībā no datu bāzes izmēriem)", - "Updated \"%1$s\" to %2$s" : "Atjaunots %1$s uz %2$s", - "Set log level to debug" : "Iestatīt žurnāla rakstīšanu uz atkļūdošanas režīmā", - "Reset log level" : "Atiestatīt žurnāla rakstīšanas režīmu", + "Updated \"%1$s\" to %2$s" : "\"%1$s\" atjauninnāts uz %2$s", + "Set log level to debug" : "Iestatīt žurnāla līmeni uz atkļūdošanu", + "Reset log level" : "Atiestatīt žurnāla līmeni", "Starting code integrity check" : "Uzsākta koda integritātes pārbaude", "Finished code integrity check" : "Pabeigta koda integritātes pārbaude", "%s (incompatible)" : "%s (nesaderīgs)", "The following apps have been disabled: %s" : "Šīs lietotnes tika atspējotas: %s", "Already up to date" : "Jau ir jaunākā", "Unknown" : "Nezināms", + "LDIF address book" : "LDIF adrešu grāmata", "Error occurred while checking server setup" : "Servera pārbaudīšanas laikā atgadījās kļūda", "For more details see the {linkstart}documentation ↗{linkend}." : "Vairāk informācijas ir skatāma {linkstart}dokumentācijā ↗{linkend}.", "unknown text" : "nezināms teksts", "Hello world!" : "Sveika, pasaule!", "sunny" : "saulains", "Hello {name}, the weather is {weather}" : "Sveiciens, {name}, laikapstākļi ir {weather}", - "Hello {name}" : "Sveiks {name}", + "Hello {name}" : "Sveiciens, {name}", "new" : "jauns", - "_download %n file_::_download %n files_" : ["lejupielādēt %n failus","lejupielādēt %n failus","lejupielādēt %n datnes"], - "The update is in progress, leaving this page might interrupt the process in some environments." : "Notiek atjaunināšana, šīs lapas atstāšana var pārtraukt procesu dažās vidēs.", - "Update to {version}" : "Atjaunināts uz {version}", + "_download %n file_::_download %n files_" : ["lejupielādēt %n datņu","lejupielādēt %n datni","lejupielādēt %n datnes"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Notiek atjaunināšana, šīs lapas pamešana dažās vidēs var pārtraukt to.", + "Update to {version}" : "Atjaunināt uz {version}", "An error occurred." : "Atgadījās kļūda.", - "Please reload the page." : "Lūdzu, atkārtoti ielādējiet lapu.", + "Please reload the page." : "Lūgums pārlādēt lapu.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Atjauninājums nebija veiksmīgs. Vairāk informācijas par šo sarežģījumu ir skatāma <a href=\"{url}\">mūsu foruma ierakstā</a> .", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Atjauninājums nebija veiksmīgs. Lūgums ziņot par šo nepilnību <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud kopienai</a>.", "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["Atjaunināšana bija veiksmīga. Notiks pārvirzīšana uz {productName} pēc %n sekundēm.","Atjaunināšana bija veiksmīga. Notiks pārvirzīšana uz {productName} pēc %n sekundes.","Atjaunināšana bija veiksmīga. Notiks pārvirzīšana uz {productName} pēc %n sekundēm."], @@ -99,7 +100,7 @@ "No" : "Nē", "Yes" : "Jā", "Failed to add the public link to your Nextcloud" : "Neizdevās pievienot publisku saiti Tavam Nextcloud", - "Please copy the link manually:" : "Lūdzu, nokopējiet saiti automātiski:", + "Please copy the link manually:" : "Lūgums pašrocīgi ievietot saiti starpliktuvē:", "Pick start date" : "Izvēlieties sākuma datumu", "Pick end date" : "Izvēlieties beigu datumu", "Search in date range" : "Meklēt laika posmā", @@ -124,6 +125,7 @@ "Log in to {productName}" : "Pieteikties {productName}", "Wrong login or password." : "Nepareizs lietotājvārds vai parole.", "This account is disabled" : "Šis konts ir atspējots", + "We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds." : "Mēs esam noteikuši vairākus nederīgus pieteikšanās mēģinājumus no šīs IP adreses, tādējādi nākamā pieteikšanās ir ierobežota līdz 30 sekundēm.", "Account name or email" : "Konta nosaukums vai e-pasta adrese", "Account name" : "Konta nosaukums", "Server side authentication failed!" : "Servera autentifikācija neizdevās!", @@ -136,8 +138,8 @@ "Your account is not setup for passwordless login." : "Konts nav iestatīts, lai pieteiktos bez paroles.", "Your connection is not secure" : "Savienojums nav drošs", "Passwordless authentication is only available over a secure connection." : "Autentifikācija bez paroles ir pieejama tikai ar drošu savienojumu.", - "Browser not supported" : "Pārlūkprogramma netiek atbalstīta", - "Passwordless authentication is not supported in your browser." : "Pārlūkprogrammā netiek nodrošināta autentifikācija bez paroles", + "Browser not supported" : "Pārlūks nav atbalstīts", + "Passwordless authentication is not supported in your browser." : "Pārlūks nenodrošina autentificēšanos bez paroles.", "Reset password" : "Atiestatīt paroli", "Back to login" : "Atpakaļ uz pieteikšanos", "Couldn't send reset email. Please contact your administrator." : "Nevarēja nosūtīt atiestatīšanas e-pasta ziņojumu. Lūgums sazināties ar savu pārvaldītāju.", @@ -176,7 +178,7 @@ "Database password" : "Datubāzes parole", "Database name" : "Datubāzes nosaukums", "Database tablespace" : "Datubāzes tabulas telpa", - "Please specify the port number along with the host name (e.g., localhost:5432)." : "Lūdzu, norādiet porta numuru kopā ar resursdatora nosaukumu (piemēram, localhost: 5432).", + "Please specify the port number along with the host name (e.g., localhost:5432)." : "Lūgums norādītt porta numuru kopā ar resursdatora nosaukumu (piemēram, localhost:5432).", "Database host" : "Datubāzes serveris", "Need help?" : "Vajadzīga palīdzība?", "See the documentation" : "Skatiet dokumentāciju", diff --git a/core/l10n/mk.js b/core/l10n/mk.js index e37c9cf12ef..f423a9eb2f1 100644 --- a/core/l10n/mk.js +++ b/core/l10n/mk.js @@ -93,6 +93,7 @@ OC.L10N.register( "Yes" : "Да", "Failed to add the public link to your Nextcloud" : "Неуспешно додавање на јавниот линк", "Create share" : "Ново споделување", + "Direct link copied to clipboard" : "Линкот е копиран во клипборд", "Pick start date" : "Избери почетен датум", "Pick end date" : "Избери краен датум", "Search everywhere" : "Барај насекаде", diff --git a/core/l10n/mk.json b/core/l10n/mk.json index e8114803112..b4f5a14f2b5 100644 --- a/core/l10n/mk.json +++ b/core/l10n/mk.json @@ -91,6 +91,7 @@ "Yes" : "Да", "Failed to add the public link to your Nextcloud" : "Неуспешно додавање на јавниот линк", "Create share" : "Ново споделување", + "Direct link copied to clipboard" : "Линкот е копиран во клипборд", "Pick start date" : "Избери почетен датум", "Pick end date" : "Избери краен датум", "Search everywhere" : "Барај насекаде", diff --git a/core/l10n/nl.js b/core/l10n/nl.js index 8302940fd89..2c66a5c9f02 100644 --- a/core/l10n/nl.js +++ b/core/l10n/nl.js @@ -74,7 +74,7 @@ OC.L10N.register( "Update app \"%s\" from App Store" : "Update app \"%s\" vanuit de App Store", "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Controleert of het databaseschema voor %s geüpdatet kan worden (dit kan lang duren afhankelijk van de grootte van de database)", "Updated \"%1$s\" to %2$s" : "Werkte \"%1$s\" bij tot %2$s", - "Set log level to debug" : "Debug logniveau instellen", + "Set log level to debug" : "Foutopsporingslogniveau instellen", "Reset log level" : "Terugzetten logniveau", "Starting code integrity check" : "Starten code betrouwbaarheidscontrole", "Finished code integrity check" : "Code betrouwbaarheidscontrole beeindigd", diff --git a/core/l10n/nl.json b/core/l10n/nl.json index 8107cedbdfe..d92fd27bef1 100644 --- a/core/l10n/nl.json +++ b/core/l10n/nl.json @@ -72,7 +72,7 @@ "Update app \"%s\" from App Store" : "Update app \"%s\" vanuit de App Store", "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Controleert of het databaseschema voor %s geüpdatet kan worden (dit kan lang duren afhankelijk van de grootte van de database)", "Updated \"%1$s\" to %2$s" : "Werkte \"%1$s\" bij tot %2$s", - "Set log level to debug" : "Debug logniveau instellen", + "Set log level to debug" : "Foutopsporingslogniveau instellen", "Reset log level" : "Terugzetten logniveau", "Starting code integrity check" : "Starten code betrouwbaarheidscontrole", "Finished code integrity check" : "Code betrouwbaarheidscontrole beeindigd", diff --git a/core/l10n/sv.js b/core/l10n/sv.js index 6a524d7f0cc..4070117c4ed 100644 --- a/core/l10n/sv.js +++ b/core/l10n/sv.js @@ -44,6 +44,7 @@ OC.L10N.register( "Task not found" : "Uppgiften hittades inte", "Internal error" : "Internt fel", "Not found" : "Hittades inte", + "Node is locked" : "Noden är låst", "Bad request" : "Felaktigt anrop", "Requested task type does not exist" : "Den begärda uppgiftstypen finns inte", "Necessary language model provider is not available" : "Nödvändig språkmodellsleverantör är inte tillgänglig", @@ -80,6 +81,7 @@ OC.L10N.register( "%s (incompatible)" : "%s (inkompatibel)", "The following apps have been disabled: %s" : "Följande appar har inaktiverats: %s", "Already up to date" : "Redan uppdaterad", + "JSON document" : "JSON-dokument", "Unknown" : "Okänd", "PNG image" : "PNG-bild", "Error occurred while checking server setup" : "Ett fel inträffade när en kontroll av serverns konfiguration utfördes", diff --git a/core/l10n/sv.json b/core/l10n/sv.json index 2113ea695c9..704be95bc05 100644 --- a/core/l10n/sv.json +++ b/core/l10n/sv.json @@ -42,6 +42,7 @@ "Task not found" : "Uppgiften hittades inte", "Internal error" : "Internt fel", "Not found" : "Hittades inte", + "Node is locked" : "Noden är låst", "Bad request" : "Felaktigt anrop", "Requested task type does not exist" : "Den begärda uppgiftstypen finns inte", "Necessary language model provider is not available" : "Nödvändig språkmodellsleverantör är inte tillgänglig", @@ -78,6 +79,7 @@ "%s (incompatible)" : "%s (inkompatibel)", "The following apps have been disabled: %s" : "Följande appar har inaktiverats: %s", "Already up to date" : "Redan uppdaterad", + "JSON document" : "JSON-dokument", "Unknown" : "Okänd", "PNG image" : "PNG-bild", "Error occurred while checking server setup" : "Ett fel inträffade när en kontroll av serverns konfiguration utfördes", diff --git a/core/openapi-ex_app.json b/core/openapi-ex_app.json index 7f7612a03c9..4dad268c1b3 100644 --- a/core/openapi-ex_app.json +++ b/core/openapi-ex_app.json @@ -181,8 +181,12 @@ "$ref": "#/components/schemas/TaskProcessingIO" }, "output": { - "$ref": "#/components/schemas/TaskProcessingIO", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/TaskProcessingIO" + } + ] }, "customId": { "type": "string", diff --git a/core/openapi-full.json b/core/openapi-full.json index 5edb86992dc..d4f69abf535 100644 --- a/core/openapi-full.json +++ b/core/openapi-full.json @@ -675,8 +675,12 @@ "$ref": "#/components/schemas/TaskProcessingIO" }, "output": { - "$ref": "#/components/schemas/TaskProcessingIO", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/TaskProcessingIO" + } + ] }, "customId": { "type": "string", @@ -3418,8 +3422,12 @@ "references": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/Reference", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Reference" + } + ] } } } @@ -3527,8 +3535,12 @@ "references": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/Reference", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Reference" + } + ] } } } @@ -3609,8 +3621,12 @@ "references": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/Reference", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Reference" + } + ] } } } @@ -3708,8 +3724,12 @@ "references": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/Reference", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Reference" + } + ] } } } @@ -3800,8 +3820,12 @@ "references": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/Reference", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Reference" + } + ] } } } @@ -3905,8 +3929,12 @@ "references": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/Reference", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Reference" + } + ] } } } diff --git a/core/openapi.json b/core/openapi.json index 5f9178202eb..1a7ddc55c92 100644 --- a/core/openapi.json +++ b/core/openapi.json @@ -675,8 +675,12 @@ "$ref": "#/components/schemas/TaskProcessingIO" }, "output": { - "$ref": "#/components/schemas/TaskProcessingIO", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/TaskProcessingIO" + } + ] }, "customId": { "type": "string", @@ -3418,8 +3422,12 @@ "references": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/Reference", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Reference" + } + ] } } } @@ -3527,8 +3535,12 @@ "references": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/Reference", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Reference" + } + ] } } } @@ -3609,8 +3621,12 @@ "references": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/Reference", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Reference" + } + ] } } } @@ -3708,8 +3724,12 @@ "references": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/Reference", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Reference" + } + ] } } } @@ -3800,8 +3820,12 @@ "references": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/Reference", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Reference" + } + ] } } } @@ -3905,8 +3929,12 @@ "references": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/Reference", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Reference" + } + ] } } } diff --git a/core/src/components/AppMenuIcon.vue b/core/src/components/AppMenuIcon.vue index 089a2016e58..1b0d48daf8c 100644 --- a/core/src/components/AppMenuIcon.vue +++ b/core/src/components/AppMenuIcon.vue @@ -14,24 +14,25 @@ </template> <script setup lang="ts"> -import type { INavigationEntry } from '../types/navigation' +import type { INavigationEntry } from '../types/navigation.ts' + import { n } from '@nextcloud/l10n' import { computed } from 'vue' - import IconDot from 'vue-material-design-icons/CircleOutline.vue' const props = defineProps<{ app: INavigationEntry }>() -const ariaHidden = computed(() => String(props.app.unread > 0)) +// only hide if there are no unread notifications +const ariaHidden = computed(() => !props.app.unread ? 'true' : undefined) const ariaLabel = computed(() => { - if (ariaHidden.value === 'true') { - return '' + if (!props.app.unread) { + return undefined } - return props.app.name - + (props.app.unread > 0 ? ` (${n('core', '{count} notification', '{count} notifications', props.app.unread, { count: props.app.unread })})` : '') + + return `${props.app.name} (${n('core', '{count} notification', '{count} notifications', props.app.unread, { count: props.app.unread })})` }) </script> @@ -51,6 +52,7 @@ $unread-indicator-size: 10px; height: $icon-size; width: $icon-size; filter: var(--background-image-invert-if-bright); + mask: var(--header-menu-icon-mask); } &__unread { diff --git a/core/src/components/UnifiedSearch/UnifiedSearchModal.vue b/core/src/components/UnifiedSearch/UnifiedSearchModal.vue index 002606f058b..b21c65301c4 100644 --- a/core/src/components/UnifiedSearch/UnifiedSearchModal.vue +++ b/core/src/components/UnifiedSearch/UnifiedSearchModal.vue @@ -129,7 +129,7 @@ v-bind="result" /> </ul> <div class="result-footer"> - <NcButton type="tertiary-no-background" @click="loadMoreResultsForProvider(providerResult)"> + <NcButton v-if="providerResult.results.length === providerResult.limit" type="tertiary-no-background" @click="loadMoreResultsForProvider(providerResult)"> {{ t('core', 'Load more results') }} <template #icon> <IconDotsHorizontal :size="20" /> @@ -367,7 +367,7 @@ export default defineComponent({ this.$refs.searchInput?.focus() }) }, - find(query: string) { + find(query: string, providersToSearchOverride = null) { if (query.length === 0) { this.results = [] this.searching = false @@ -382,7 +382,7 @@ export default defineComponent({ this.searching = true const newResults = [] - const providersToSearch = this.filteredProviders.length > 0 ? this.filteredProviders : this.providers + const providersToSearch = providersToSearchOverride || (this.filteredProviders.length > 0 ? this.filteredProviders : this.providers) const searchProvider = (provider) => { const params = { type: provider.searchFrom ?? provider.id, @@ -424,6 +424,7 @@ export default defineComponent({ newResults.push({ ...provider, results: response.data.ocs.data.entries, + limit: params.limit ?? 5, }) unifiedSearchLogger.debug('Unified search results:', { results: this.results, newResults }) @@ -513,15 +514,7 @@ export default defineComponent({ }, async loadMoreResultsForProvider(provider) { this.providerResultLimit += 5 - // Remove all other providers from filteredProviders except the current "loadmore" provider - this.filteredProviders = this.filteredProviders.filter(filteredProvider => filteredProvider.id === provider.id) - // Plugin filters may have extra parameters, so we need to keep them - // See method handlePluginFilter for more details - if (this.filteredProviders.length > 0 && this.filteredProviders[0].isPluginFilter) { - provider = this.filteredProviders[0] - } - this.addProviderFilter(provider, true) - this.find(this.searchQuery) + this.find(this.searchQuery, [provider]) }, addProviderFilter(providerFilter, loadMoreResultsForProvider = false) { unifiedSearchLogger.debug('Applying provider filter', { providerFilter, loadMoreResultsForProvider }) diff --git a/core/src/views/AccountMenu.vue b/core/src/views/AccountMenu.vue index cac02129bac..5b7ead636bd 100644 --- a/core/src/views/AccountMenu.vue +++ b/core/src/views/AccountMenu.vue @@ -197,27 +197,15 @@ export default defineComponent({ } .account-menu { - :deep(button) { - // Normally header menus are slightly translucent when not active - // this is generally ok but for the avatar this is weird so fix the opacity - opacity: 1 !important; - - // The avatar is just the "icon" of the button - // So we add the focus-visible manually - &:focus-visible { - .account-menu__avatar { - border: var(--border-width-input-focused) solid var(--color-background-plain-text); - } - } - } - - // Ensure we do not waste space, as the header menu sets a default width of 350px - :deep(.header-menu__content) { - width: fit-content !important; - } - &__avatar { + --account-menu-outline: var(--border-width-input) solid color-mix(in srgb, var(--color-background-plain-text), transparent 75%); + outline: var(--account-menu-outline); + position: fixed; + // do not apply the alpha mask on the avatar div + mask: none !important; + &:hover { + --account-menu-outline: none; // Add hover styles similar to the focus-visible style border: var(--border-width-input-focused) solid var(--color-background-plain-text); } @@ -235,5 +223,25 @@ export default defineComponent({ flex: 0 1; } } + + // Ensure we do not waste space, as the header menu sets a default width of 350px + :deep(.header-menu__content) { + width: fit-content !important; + } + + :deep(button) { + // Normally header menus are slightly translucent when not active + // this is generally ok but for the avatar this is weird so fix the opacity + opacity: 1 !important; + + // The avatar is just the "icon" of the button + // So we add the focus-visible manually + &:focus-visible { + .account-menu__avatar { + --account-menu-outline: none; + border: var(--border-width-input-focused) solid var(--color-background-plain-text); + } + } + } } </style> diff --git a/core/src/views/ContactsMenu.vue b/core/src/views/ContactsMenu.vue index 9cf18b40ac7..924ddcea56b 100644 --- a/core/src/views/ContactsMenu.vue +++ b/core/src/views/ContactsMenu.vue @@ -9,7 +9,7 @@ :aria-label="t('core', 'Search contacts')" @open="handleOpen"> <template #trigger> - <Contacts class="contactsmenu__trigger-icon" :size="20" /> + <NcIconSvgWrapper class="contactsmenu__trigger-icon" :path="mdiContacts" /> </template> <div class="contactsmenu__menu"> <div class="contactsmenu__menu__input-wrapper"> @@ -27,7 +27,7 @@ </div> <NcEmptyContent v-if="error" :name="t('core', 'Could not load your contacts')"> <template #icon> - <Magnify /> + <NcIconSvgWrapper :path="mdiMagnify" /> </template> </NcEmptyContent> <NcEmptyContent v-else-if="loadingText" :name="loadingText"> @@ -37,7 +37,7 @@ </NcEmptyContent> <NcEmptyContent v-else-if="contacts.length === 0" :name="t('core', 'No contacts found')"> <template #icon> - <Magnify /> + <NcIconSvgWrapper :path="mdiMagnify" /> </template> </NcEmptyContent> <div v-else class="contactsmenu__menu__content"> @@ -62,40 +62,46 @@ </template> <script> +import { mdiContacts, mdiMagnify } from '@mdi/js' import { generateUrl } from '@nextcloud/router' import { getCurrentUser } from '@nextcloud/auth' import { t } from '@nextcloud/l10n' import axios from '@nextcloud/axios' import debounce from 'debounce' -import Contacts from 'vue-material-design-icons/ContactsOutline.vue' -import Magnify from 'vue-material-design-icons/Magnify.vue' import NcButton from '@nextcloud/vue/components/NcButton' import NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent' import NcHeaderMenu from '@nextcloud/vue/components/NcHeaderMenu' +import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper' import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon' +import NcTextField from '@nextcloud/vue/components/NcTextField' import Contact from '../components/ContactsMenu/Contact.vue' import logger from '../logger.js' import Nextcloud from '../mixins/Nextcloud.js' -import NcTextField from '@nextcloud/vue/components/NcTextField' export default { name: 'ContactsMenu', components: { Contact, - Contacts, - Magnify, NcButton, NcEmptyContent, NcHeaderMenu, + NcIconSvgWrapper, NcLoadingIcon, NcTextField, }, mixins: [Nextcloud], + setup() { + return { + mdiContacts, + mdiMagnify, + } + }, + data() { const user = getCurrentUser() return { diff --git a/core/src/views/UnifiedSearch.vue b/core/src/views/UnifiedSearch.vue index 0dec6d5fb6e..d7b2ca634eb 100644 --- a/core/src/views/UnifiedSearch.vue +++ b/core/src/views/UnifiedSearch.vue @@ -3,16 +3,14 @@ - SPDX-License-Identifier: AGPL-3.0-or-later --> <template> - <div class="header-menu unified-search-menu"> - <NcButton v-show="!showLocalSearch" - class="header-menu__trigger" + <div class="unified-search-menu"> + <NcHeaderButton v-show="!showLocalSearch" :aria-label="t('core', 'Unified search')" - type="tertiary-no-background" @click="toggleUnifiedSearch"> <template #icon> - <Magnify class="header-menu__trigger-icon" :size="20" /> + <NcIconSvgWrapper :path="mdiMagnify" /> </template> - </NcButton> + </NcHeaderButton> <UnifiedSearchLocalSearchBar v-if="supportsLocalSearch" :open.sync="showLocalSearch" :query.sync="queryText" @@ -24,25 +22,24 @@ </template> <script lang="ts"> +import { mdiMagnify } from '@mdi/js' import { emit, subscribe } from '@nextcloud/event-bus' -import { translate } from '@nextcloud/l10n' +import { t } from '@nextcloud/l10n' import { useBrowserLocation } from '@vueuse/core' +import debounce from 'debounce' import { defineComponent } from 'vue' - -import NcButton from '@nextcloud/vue/components/NcButton' -import Magnify from 'vue-material-design-icons/Magnify.vue' +import NcHeaderButton from '@nextcloud/vue/components/NcHeaderButton' +import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper' import UnifiedSearchModal from '../components/UnifiedSearch/UnifiedSearchModal.vue' import UnifiedSearchLocalSearchBar from '../components/UnifiedSearch/UnifiedSearchLocalSearchBar.vue' - -import debounce from 'debounce' -import logger from '../logger' +import logger from '../logger.js' export default defineComponent({ name: 'UnifiedSearch', components: { - NcButton, - Magnify, + NcHeaderButton, + NcIconSvgWrapper, UnifiedSearchModal, UnifiedSearchLocalSearchBar, }, @@ -52,7 +49,9 @@ export default defineComponent({ return { currentLocation, - t: translate, + + mdiMagnify, + t, } }, @@ -175,31 +174,9 @@ export default defineComponent({ <style lang="scss" scoped> // this is needed to allow us overriding component styles (focus-visible) -#header { - .header-menu { - display: flex; - align-items: center; - justify-content: center; - - &__trigger { - height: var(--header-height); - width: var(--header-height) !important; - - &:focus-visible { - // align with other header menu entries - outline: none !important; - box-shadow: none !important; - } - - &:not(:hover,:focus,:focus-visible) { - opacity: .85; - } - - &-icon { - // ensure the icon has the correct color - color: var(--color-background-plain-text) !important; - } - } - } +.unified-search-menu { + display: flex; + align-items: center; + justify-content: center; } </style> diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php index 0723e90173b..1b5b90c29fc 100644 --- a/core/templates/layout.guest.php +++ b/core/templates/layout.guest.php @@ -44,7 +44,7 @@ p($theme->getTitle()); <div class="v-align"> <?php if ($_['bodyid'] === 'body-login'): ?> <header> - <div id="header"> + <div id="header" class="header-guest"> <div class="logo"></div> </div> </header> |