aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
m---------3rdparty0
-rw-r--r--apps/dav/composer/composer/autoload_classmap.php3
-rw-r--r--apps/dav/composer/composer/autoload_static.php3
-rw-r--r--apps/dav/l10n/it.js2
-rw-r--r--apps/dav/l10n/it.json2
-rw-r--r--apps/dav/lib/AppInfo/Application.php14
-rw-r--r--apps/dav/lib/AppInfo/PluginManager.php5
-rw-r--r--apps/dav/lib/CalDAV/AppCalendar/AppCalendar.php208
-rw-r--r--apps/dav/lib/CalDAV/AppCalendar/AppCalendarPlugin.php74
-rw-r--r--apps/dav/lib/CalDAV/AppCalendar/CalendarObject.php153
-rw-r--r--apps/dav/lib/CalDAV/CalendarProvider.php1
-rw-r--r--apps/dav/tests/unit/AppInfo/PluginManagerTest.php25
-rw-r--r--apps/dav/tests/unit/CalDAV/AppCalendar/AppCalendarTest.php123
-rw-r--r--apps/dav/tests/unit/CalDAV/AppCalendar/CalendarObjectTest.php166
-rw-r--r--apps/dav/tests/unit/Command/DeleteCalendarTest.php2
-rw-r--r--apps/encryption/l10n/de.js5
-rw-r--r--apps/encryption/l10n/de.json5
-rw-r--r--apps/files/js/app.js14
-rw-r--r--apps/files/js/newfilemenu.js6
-rw-r--r--apps/files/js/templates.js10
-rw-r--r--apps/files/js/templates/newfilemenu.handlebars2
-rw-r--r--apps/files/js/templates/newfilemenu_filename_form.handlebars2
-rw-r--r--apps/files/l10n/de.js19
-rw-r--r--apps/files/l10n/de.json19
-rw-r--r--apps/files/src/templates.js2
-rw-r--r--apps/files/src/views/ReferenceFileWidget.vue2
-rw-r--r--apps/files_sharing/l10n/cs.js2
-rw-r--r--apps/files_sharing/l10n/cs.json2
-rw-r--r--apps/files_sharing/l10n/de.js2
-rw-r--r--apps/files_sharing/l10n/de.json2
-rw-r--r--apps/files_trashbin/l10n/de.js1
-rw-r--r--apps/files_trashbin/l10n/de.json1
-rw-r--r--apps/settings/l10n/de.js2
-rw-r--r--apps/settings/l10n/de.json2
-rw-r--r--apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue2
-rw-r--r--apps/systemtags/l10n/de.js9
-rw-r--r--apps/systemtags/l10n/de.json9
-rw-r--r--apps/theming/l10n/uk.js5
-rw-r--r--apps/theming/l10n/uk.json5
-rw-r--r--apps/updatenotification/l10n/de.js1
-rw-r--r--apps/updatenotification/l10n/de.json1
-rw-r--r--apps/user_ldap/l10n/de.js19
-rw-r--r--apps/user_ldap/l10n/de.json19
-rw-r--r--apps/user_status/l10n/cs.js2
-rw-r--r--apps/user_status/l10n/cs.json2
-rw-r--r--apps/user_status/l10n/de.js7
-rw-r--r--apps/user_status/l10n/de.json7
-rw-r--r--build/psalm-baseline.xml20
-rw-r--r--core/l10n/bg.js4
-rw-r--r--core/l10n/bg.json4
-rw-r--r--core/l10n/ca.js4
-rw-r--r--core/l10n/ca.json4
-rw-r--r--core/l10n/cs.js5
-rw-r--r--core/l10n/cs.json5
-rw-r--r--core/l10n/da.js4
-rw-r--r--core/l10n/da.json4
-rw-r--r--core/l10n/de.js11
-rw-r--r--core/l10n/de.json11
-rw-r--r--core/l10n/de_DE.js6
-rw-r--r--core/l10n/de_DE.json6
-rw-r--r--core/l10n/el.js4
-rw-r--r--core/l10n/el.json4
-rw-r--r--core/l10n/en_GB.js4
-rw-r--r--core/l10n/en_GB.json4
-rw-r--r--core/l10n/es.js4
-rw-r--r--core/l10n/es.json4
-rw-r--r--core/l10n/eu.js4
-rw-r--r--core/l10n/eu.json4
-rw-r--r--core/l10n/fi.js4
-rw-r--r--core/l10n/fi.json4
-rw-r--r--core/l10n/fr.js4
-rw-r--r--core/l10n/fr.json4
-rw-r--r--core/l10n/gl.js4
-rw-r--r--core/l10n/gl.json4
-rw-r--r--core/l10n/hu.js4
-rw-r--r--core/l10n/hu.json4
-rw-r--r--core/l10n/it.js4
-rw-r--r--core/l10n/it.json4
-rw-r--r--core/l10n/ja.js4
-rw-r--r--core/l10n/ja.json4
-rw-r--r--core/l10n/mk.js4
-rw-r--r--core/l10n/mk.json4
-rw-r--r--core/l10n/nb.js4
-rw-r--r--core/l10n/nb.json4
-rw-r--r--core/l10n/nl.js4
-rw-r--r--core/l10n/nl.json4
-rw-r--r--core/l10n/oc.js4
-rw-r--r--core/l10n/oc.json4
-rw-r--r--core/l10n/pl.js8
-rw-r--r--core/l10n/pl.json8
-rw-r--r--core/l10n/pt_BR.js4
-rw-r--r--core/l10n/pt_BR.json4
-rw-r--r--core/l10n/pt_PT.js4
-rw-r--r--core/l10n/pt_PT.json4
-rw-r--r--core/l10n/ru.js4
-rw-r--r--core/l10n/ru.json4
-rw-r--r--core/l10n/sk.js4
-rw-r--r--core/l10n/sk.json4
-rw-r--r--core/l10n/sl.js4
-rw-r--r--core/l10n/sl.json4
-rw-r--r--core/l10n/sr.js4
-rw-r--r--core/l10n/sr.json4
-rw-r--r--core/l10n/sv.js4
-rw-r--r--core/l10n/sv.json4
-rw-r--r--core/l10n/th.js4
-rw-r--r--core/l10n/th.json4
-rw-r--r--core/l10n/tr.js4
-rw-r--r--core/l10n/tr.json4
-rw-r--r--core/l10n/uk.js4
-rw-r--r--core/l10n/uk.json4
-rw-r--r--core/l10n/zh_CN.js4
-rw-r--r--core/l10n/zh_CN.json4
-rw-r--r--core/l10n/zh_HK.js4
-rw-r--r--core/l10n/zh_HK.json4
-rw-r--r--core/l10n/zh_TW.js4
-rw-r--r--core/l10n/zh_TW.json4
-rw-r--r--core/src/components/setup/RecommendedApps.vue11
-rw-r--r--core/src/views/Profile.vue9
-rw-r--r--core/templates/404.php2
-rw-r--r--dist/core-profile.js4
-rw-r--r--dist/core-profile.js.map2
-rw-r--r--dist/core-recommendedapps.js4
-rw-r--r--dist/core-recommendedapps.js.map2
-rw-r--r--dist/files-main.js4
-rw-r--r--dist/files-main.js.map2
-rw-r--r--dist/files-reference-files.js4
-rw-r--r--dist/files-reference-files.js.map2
-rw-r--r--dist/settings-vue-settings-personal-info.js4
-rw-r--r--dist/settings-vue-settings-personal-info.js.map2
-rw-r--r--lib/l10n/cs.js1
-rw-r--r--lib/l10n/cs.json1
-rw-r--r--lib/l10n/de.js1
-rw-r--r--lib/l10n/de.json1
-rw-r--r--lib/private/Console/Application.php10
-rw-r--r--lib/public/Files/Template/TemplateFileCreator.php22
-rw-r--r--lib/public/Log/ILogFactory.php2
136 files changed, 1153 insertions, 226 deletions
diff --git a/3rdparty b/3rdparty
-Subproject e31af932fb335789989659d558c871cac457355
+Subproject 6f18457f7dfcf23ce2877495a9323a144fd4a16
diff --git a/apps/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php
index a9bf60698fd..6745ffe41b4 100644
--- a/apps/dav/composer/composer/autoload_classmap.php
+++ b/apps/dav/composer/composer/autoload_classmap.php
@@ -37,6 +37,9 @@ return array(
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Calendar' => $baseDir . '/../lib/CalDAV/Activity/Setting/Calendar.php',
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Event' => $baseDir . '/../lib/CalDAV/Activity/Setting/Event.php',
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Todo' => $baseDir . '/../lib/CalDAV/Activity/Setting/Todo.php',
+ 'OCA\\DAV\\CalDAV\\AppCalendar\\AppCalendar' => $baseDir . '/../lib/CalDAV/AppCalendar/AppCalendar.php',
+ 'OCA\\DAV\\CalDAV\\AppCalendar\\AppCalendarPlugin' => $baseDir . '/../lib/CalDAV/AppCalendar/AppCalendarPlugin.php',
+ 'OCA\\DAV\\CalDAV\\AppCalendar\\CalendarObject' => $baseDir . '/../lib/CalDAV/AppCalendar/CalendarObject.php',
'OCA\\DAV\\CalDAV\\Auth\\CustomPrincipalPlugin' => $baseDir . '/../lib/CalDAV/Auth/CustomPrincipalPlugin.php',
'OCA\\DAV\\CalDAV\\Auth\\PublicPrincipalPlugin' => $baseDir . '/../lib/CalDAV/Auth/PublicPrincipalPlugin.php',
'OCA\\DAV\\CalDAV\\BirthdayCalendar\\EnablePlugin' => $baseDir . '/../lib/CalDAV/BirthdayCalendar/EnablePlugin.php',
diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php
index 48104281cd4..302a424d08e 100644
--- a/apps/dav/composer/composer/autoload_static.php
+++ b/apps/dav/composer/composer/autoload_static.php
@@ -52,6 +52,9 @@ class ComposerStaticInitDAV
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Calendar.php',
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Event' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Event.php',
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Todo' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Todo.php',
+ 'OCA\\DAV\\CalDAV\\AppCalendar\\AppCalendar' => __DIR__ . '/..' . '/../lib/CalDAV/AppCalendar/AppCalendar.php',
+ 'OCA\\DAV\\CalDAV\\AppCalendar\\AppCalendarPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/AppCalendar/AppCalendarPlugin.php',
+ 'OCA\\DAV\\CalDAV\\AppCalendar\\CalendarObject' => __DIR__ . '/..' . '/../lib/CalDAV/AppCalendar/CalendarObject.php',
'OCA\\DAV\\CalDAV\\Auth\\CustomPrincipalPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/Auth/CustomPrincipalPlugin.php',
'OCA\\DAV\\CalDAV\\Auth\\PublicPrincipalPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/Auth/PublicPrincipalPlugin.php',
'OCA\\DAV\\CalDAV\\BirthdayCalendar\\EnablePlugin' => __DIR__ . '/..' . '/../lib/CalDAV/BirthdayCalendar/EnablePlugin.php',
diff --git a/apps/dav/l10n/it.js b/apps/dav/l10n/it.js
index 87bc8ff7043..d4f12d7ff44 100644
--- a/apps/dav/l10n/it.js
+++ b/apps/dav/l10n/it.js
@@ -150,6 +150,8 @@ OC.L10N.register(
"Hence they will not be available immediately after enabling but will show up after some time." : "Per cui non saranno disponibili immediatamente dopo l'abilitazione, ma saranno mostrati dopo qualche istante.",
"Send notifications for events" : "Invia notifiche per eventi",
"Notifications are sent via background jobs, so these must occur often enough." : "Le notifiche saranno inviate tramite operazioni in background, per cui tali operazioni devono essere eseguite abbastanza spesso.",
+ "Send reminder notifications to calendar sharees as well" : "Invia notifiche di promemoria anche ai partecipanti al calendario",
+ "Reminders are always sent to organizers and attendees." : "I promemoria vengono sempre inviati agli organizzatori e ai partecipanti.",
"Enable notifications for events via push" : "Abilita notifiche per eventi tramite push",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installa anche {calendarappstoreopen}l'applicazione Calendario{linkclose}, o {calendardocopen}connetti il tuo desktop e mobile per la sincronizzazione ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Assicurati di configurare correttamente {emailopen}il server di posta{linkclose}.",
diff --git a/apps/dav/l10n/it.json b/apps/dav/l10n/it.json
index 224bbd226bb..0c04c8960be 100644
--- a/apps/dav/l10n/it.json
+++ b/apps/dav/l10n/it.json
@@ -148,6 +148,8 @@
"Hence they will not be available immediately after enabling but will show up after some time." : "Per cui non saranno disponibili immediatamente dopo l'abilitazione, ma saranno mostrati dopo qualche istante.",
"Send notifications for events" : "Invia notifiche per eventi",
"Notifications are sent via background jobs, so these must occur often enough." : "Le notifiche saranno inviate tramite operazioni in background, per cui tali operazioni devono essere eseguite abbastanza spesso.",
+ "Send reminder notifications to calendar sharees as well" : "Invia notifiche di promemoria anche ai partecipanti al calendario",
+ "Reminders are always sent to organizers and attendees." : "I promemoria vengono sempre inviati agli organizzatori e ai partecipanti.",
"Enable notifications for events via push" : "Abilita notifiche per eventi tramite push",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installa anche {calendarappstoreopen}l'applicazione Calendario{linkclose}, o {calendardocopen}connetti il tuo desktop e mobile per la sincronizzazione ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Assicurati di configurare correttamente {emailopen}il server di posta{linkclose}.",
diff --git a/apps/dav/lib/AppInfo/Application.php b/apps/dav/lib/AppInfo/Application.php
index 86749862626..10e1130f907 100644
--- a/apps/dav/lib/AppInfo/Application.php
+++ b/apps/dav/lib/AppInfo/Application.php
@@ -35,6 +35,7 @@ namespace OCA\DAV\AppInfo;
use Exception;
use OCA\DAV\BackgroundJob\UpdateCalendarResourcesRoomsBackgroundJob;
use OCA\DAV\CalDAV\Activity\Backend;
+use OCA\DAV\CalDAV\AppCalendar\AppCalendarPlugin;
use OCA\DAV\CalDAV\CalendarManager;
use OCA\DAV\CalDAV\CalendarProvider;
use OCA\DAV\CalDAV\Reminder\NotificationProvider\AudioProvider;
@@ -44,7 +45,6 @@ use OCA\DAV\CalDAV\Reminder\NotificationProviderManager;
use OCA\DAV\CalDAV\Reminder\Notifier;
use OCA\DAV\Capabilities;
-use OCA\DAV\CardDAV\CardDavBackend;
use OCA\DAV\CardDAV\ContactsManager;
use OCA\DAV\CardDAV\PhotoCache;
use OCA\DAV\CardDAV\SyncService;
@@ -100,6 +100,7 @@ use OCP\Calendar\IManager as ICalendarManager;
use OCP\Config\BeforePreferenceDeletedEvent;
use OCP\Config\BeforePreferenceSetEvent;
use OCP\Contacts\IManager as IContactsManager;
+use OCP\Files\AppData\IAppDataFactory;
use OCP\IServerContainer;
use OCP\IUser;
use Psr\Container\ContainerInterface;
@@ -119,14 +120,17 @@ class Application extends App implements IBootstrap {
public function register(IRegistrationContext $context): void {
$context->registerServiceAlias('CardDAVSyncService', SyncService::class);
$context->registerService(PhotoCache::class, function (ContainerInterface $c) {
- /** @var IServerContainer $server */
- $server = $c->get(IServerContainer::class);
-
return new PhotoCache(
- $server->getAppDataDir('dav-photocache'),
+ $c->get(IAppDataFactory::class)->get('dav-photocache'),
$c->get(LoggerInterface::class)
);
});
+ $context->registerService(AppCalendarPlugin::class, function(ContainerInterface $c) {
+ return new AppCalendarPlugin(
+ $c->get(ICalendarManager::class),
+ $c->get(LoggerInterface::class)
+ );
+ });
/*
* Register capabilities
diff --git a/apps/dav/lib/AppInfo/PluginManager.php b/apps/dav/lib/AppInfo/PluginManager.php
index 0b83d6a9205..828818455f7 100644
--- a/apps/dav/lib/AppInfo/PluginManager.php
+++ b/apps/dav/lib/AppInfo/PluginManager.php
@@ -29,6 +29,7 @@ declare(strict_types=1);
namespace OCA\DAV\AppInfo;
use OC\ServerContainer;
+use OCA\DAV\CalDAV\AppCalendar\AppCalendarPlugin;
use OCA\DAV\CalDAV\Integration\ICalendarProvider;
use OCA\DAV\CardDAV\Integration\IAddressBookProvider;
use OCP\App\IAppManager;
@@ -144,6 +145,8 @@ class PluginManager {
}
$this->populated = true;
+ $this->calendarPlugins[] = $this->container->get(AppCalendarPlugin::class);
+
foreach ($this->appManager->getInstalledApps() as $app) {
// load plugins and collections from info.xml
$info = $this->appManager->getAppInfo($app);
@@ -253,7 +256,7 @@ class PluginManager {
private function createClass(string $className): object {
try {
- return $this->container->query($className);
+ return $this->container->get($className);
} catch (QueryException $e) {
if (class_exists($className)) {
return new $className();
diff --git a/apps/dav/lib/CalDAV/AppCalendar/AppCalendar.php b/apps/dav/lib/CalDAV/AppCalendar/AppCalendar.php
new file mode 100644
index 00000000000..d67f1f5a816
--- /dev/null
+++ b/apps/dav/lib/CalDAV/AppCalendar/AppCalendar.php
@@ -0,0 +1,208 @@
+<?php
+declare(strict_types=1);
+
+/**
+ * @copyright 2023 Ferdinand Thiessen <opensource@fthiessen.de>
+ *
+ * @author Ferdinand Thiessen <opensource@fthiessen.de>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\DAV\CalDAV\AppCalendar;
+
+use OCA\DAV\CalDAV\Plugin;
+use OCA\DAV\CalDAV\Integration\ExternalCalendar;
+use OCP\Calendar\ICalendar;
+use OCP\Calendar\ICreateFromString;
+use OCP\Constants;
+use Sabre\CalDAV\CalendarQueryValidator;
+use Sabre\CalDAV\ICalendarObject;
+use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
+use Sabre\DAV\Exception\Forbidden;
+use Sabre\DAV\Exception\NotFound;
+use Sabre\DAV\PropPatch;
+use Sabre\VObject\Component\VCalendar;
+use Sabre\VObject\Reader;
+
+class AppCalendar extends ExternalCalendar {
+ protected string $principal;
+ protected ICalendar $calendar;
+
+ public function __construct(string $appId, ICalendar $calendar, string $principal) {
+ parent::__construct($appId, $calendar->getUri());
+ $this->principal = $principal;
+ $this->calendar = $calendar;
+ }
+
+ /**
+ * Return permissions supported by the backend calendar
+ * @return int Permissions based on \OCP\Constants
+ */
+ public function getPermissions(): int {
+ // Make sure to only promote write support if the backend implement the correct interface
+ if ($this->calendar instanceof ICreateFromString) {
+ return $this->calendar->getPermissions();
+ }
+ return Constants::PERMISSION_READ;
+ }
+
+ public function getOwner(): ?string {
+ return $this->principal;
+ }
+
+ public function getGroup(): ?string {
+ return null;
+ }
+
+ public function getACL(): array {
+ $acl = [
+ [
+ 'privilege' => '{DAV:}read',
+ 'principal' => $this->getOwner(),
+ 'protected' => true,
+ ],
+ [
+ 'privilege' => '{DAV:}write-properties',
+ 'principal' => $this->getOwner(),
+ 'protected' => true,
+ ]
+ ];
+ if ($this->getPermissions() & Constants::PERMISSION_CREATE) {
+ $acl[] = [
+ 'privilege' => '{DAV:}write',
+ 'principal' => $this->getOwner(),
+ 'protected' => true,
+ ];
+ }
+ return $acl;
+ }
+
+ public function setACL(array $acl): void {
+ throw new Forbidden('Setting ACL is not supported on this node');
+ }
+
+ public function getSupportedPrivilegeSet(): ?array {
+ // Use the default one
+ return null;
+ }
+
+ public function getLastModified(): ?int {
+ // unknown
+ return null;
+ }
+
+ public function delete(): void {
+ // No method for deleting a calendar in OCP\Calendar\ICalendar
+ throw new Forbidden('Deleting an entry is not implemented');
+ }
+
+ public function createFile($name, $data = null) {
+ if ($this->calendar instanceof ICreateFromString) {
+ if (is_resource($data)) {
+ $data = stream_get_contents($data) ?: null;
+ }
+ $this->calendar->createFromString($name, is_null($data) ? '' : $data);
+ return null;
+ } else {
+ throw new Forbidden('Creating a new entry is not allowed');
+ }
+ }
+
+ public function getProperties($properties) {
+ return [
+ '{DAV:}displayname' => $this->calendar->getDisplayName() ?: $this->calendar->getKey(),
+ '{http://apple.com/ns/ical/}calendar-color' => $this->calendar->getDisplayColor() ?: '#0082c9',
+ '{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet(['VEVENT', 'VJOURNAL', 'VTODO']),
+ ];
+ }
+
+ public function calendarQuery(array $filters) {
+ $result = [];
+ $objects = $this->getChildren();
+
+ foreach ($objects as $object) {
+ if ($this->validateFilterForObject($object, $filters)) {
+ $result[] = $object->getName();
+ }
+ }
+
+ return $result;
+ }
+
+ protected function validateFilterForObject(ICalendarObject $object, array $filters): bool {
+ /** @var \Sabre\VObject\Component\VCalendar */
+ $vObject = Reader::read($object->get());
+
+ $validator = new CalendarQueryValidator();
+ $result = $validator->validate($vObject, $filters);
+
+ // Destroy circular references so PHP will GC the object.
+ $vObject->destroy();
+
+ return $result;
+ }
+
+ public function childExists($name): bool {
+ try {
+ $this->getChild($name);
+ return true;
+ } catch (NotFound $error) {
+ return false;
+ }
+ }
+
+ public function getChild($name) {
+ // Try to get calendar by filename
+ $children = $this->calendar->search($name, ['X-FILENAME']);
+ if (count($children) === 0) {
+ // If nothing found try to get by UID from filename
+ $pos = strrpos($name, '.ics');
+ $children = $this->calendar->search(substr($name, 0, $pos ?: null), ['UID']);
+ }
+
+ if (count($children) > 0) {
+ return new CalendarObject($this, $this->calendar, new VCalendar($children));
+ }
+
+ throw new NotFound('Node not found');
+ }
+
+ /**
+ * @return ICalendarObject[]
+ */
+ public function getChildren(): array {
+ $objects = $this->calendar->search('');
+ // We need to group by UID (actually by filename but we do not have that information)
+ $result = [];
+ foreach ($objects as $object) {
+ $uid = (string)$object['UID'] ?: uniqid();
+ if (!isset($result[$uid])) {
+ $result[$uid] = [];
+ }
+ $result[$uid][] = $object;
+ }
+
+ return array_map(function (array $children) {
+ return new CalendarObject($this, $this->calendar, new VCalendar($children));
+ }, $result);
+ }
+
+ public function propPatch(PropPatch $propPatch): void {
+ // no setDisplayColor or setDisplayName in \OCP\Calendar\ICalendar
+ }
+}
diff --git a/apps/dav/lib/CalDAV/AppCalendar/AppCalendarPlugin.php b/apps/dav/lib/CalDAV/AppCalendar/AppCalendarPlugin.php
new file mode 100644
index 00000000000..cdf7cb9059a
--- /dev/null
+++ b/apps/dav/lib/CalDAV/AppCalendar/AppCalendarPlugin.php
@@ -0,0 +1,74 @@
+<?php
+declare(strict_types=1);
+
+/**
+ * @copyright 2023 Ferdinand Thiessen <opensource@fthiessen.de>
+ *
+ * @author Ferdinand Thiessen <opensource@fthiessen.de>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\DAV\CalDAV\AppCalendar;
+
+use OCA\DAV\CalDAV\Integration\ExternalCalendar;
+use OCA\DAV\CalDAV\Integration\ICalendarProvider;
+use OCP\Calendar\IManager;
+use Psr\Log\LoggerInterface;
+
+/* Plugin for wrapping application generated calendars registered in nextcloud core (OCP\Calendar\ICalendarProvider) */
+class AppCalendarPlugin implements ICalendarProvider {
+ protected IManager $manager;
+ protected LoggerInterface $logger;
+
+ public function __construct(IManager $manager, LoggerInterface $logger) {
+ $this->manager = $manager;
+ $this->logger = $logger;
+ }
+
+ public function getAppID(): string {
+ return 'dav-wrapper';
+ }
+
+ public function fetchAllForCalendarHome(string $principalUri): array {
+ return array_map(function ($calendar) use (&$principalUri) {
+ return new AppCalendar($this->getAppID(), $calendar, $principalUri);
+ }, $this->getWrappedCalendars($principalUri));
+ }
+
+ public function hasCalendarInCalendarHome(string $principalUri, string $calendarUri): bool {
+ return count($this->getWrappedCalendars($principalUri, [ $calendarUri ])) > 0;
+ }
+
+ public function getCalendarInCalendarHome(string $principalUri, string $calendarUri): ?ExternalCalendar {
+ $calendars = $this->getWrappedCalendars($principalUri, [ $calendarUri ]);
+ if (count($calendars) > 0) {
+ return new AppCalendar($this->getAppID(), $calendars[0], $principalUri);
+ }
+
+ return null;
+ }
+
+ protected function getWrappedCalendars(string $principalUri, array $calendarUris = []): array {
+ return array_values(
+ array_filter($this->manager->getCalendarsForPrincipal($principalUri, $calendarUris), function ($c) {
+ // We must not provide a wrapper for DAV calendars
+ return ! ($c instanceof \OCA\DAV\CalDAV\CalendarImpl);
+ })
+ );
+ }
+}
diff --git a/apps/dav/lib/CalDAV/AppCalendar/CalendarObject.php b/apps/dav/lib/CalDAV/AppCalendar/CalendarObject.php
new file mode 100644
index 00000000000..985b137c955
--- /dev/null
+++ b/apps/dav/lib/CalDAV/AppCalendar/CalendarObject.php
@@ -0,0 +1,153 @@
+<?php
+declare(strict_types=1);
+
+/**
+ * @copyright 2023 Ferdinand Thiessen <opensource@fthiessen.de>
+ *
+ * @author Ferdinand Thiessen <opensource@fthiessen.de>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\DAV\CalDAV\AppCalendar;
+
+use OCP\Calendar\ICalendar;
+use OCP\Calendar\ICreateFromString;
+use OCP\Constants;
+use Sabre\CalDAV\ICalendarObject;
+use Sabre\DAV\Exception\Forbidden;
+use Sabre\DAV\Exception\NotFound;
+use Sabre\DAVACL\IACL;
+use Sabre\VObject\Component\VCalendar;
+use Sabre\VObject\Property\ICalendar\DateTime;
+
+class CalendarObject implements ICalendarObject, IACL {
+ private VCalendar $vobject;
+ private AppCalendar $calendar;
+ private ICalendar|ICreateFromString $backend;
+
+ public function __construct(AppCalendar $calendar, ICalendar $backend, VCalendar $vobject) {
+ $this->backend = $backend;
+ $this->calendar = $calendar;
+ $this->vobject = $vobject;
+ }
+
+ public function getOwner() {
+ return $this->calendar->getOwner();
+ }
+
+ public function getGroup() {
+ return $this->calendar->getGroup();
+ }
+
+ public function getACL(): array {
+ $acl = [
+ [
+ 'privilege' => '{DAV:}read',
+ 'principal' => $this->getOwner(),
+ 'protected' => true,
+ ]
+ ];
+ if ($this->calendar->getPermissions() & Constants::PERMISSION_UPDATE) {
+ $acl[] = [
+ 'privilege' => '{DAV:}write-content',
+ 'principal' => $this->getOwner(),
+ 'protected' => true,
+ ];
+ }
+ return $acl;
+ }
+
+ public function setACL(array $acl): void {
+ throw new Forbidden('Setting ACL is not supported on this node');
+ }
+
+ public function getSupportedPrivilegeSet(): ?array {
+ return null;
+ }
+
+ public function put($data): void {
+ if ($this->backend instanceof ICreateFromString && $this->calendar->getPermissions() & Constants::PERMISSION_UPDATE) {
+ if (is_resource($data)) {
+ $data = stream_get_contents($data) ?: '';
+ }
+ $this->backend->createFromString($this->getName(), $data);
+ } else {
+ throw new Forbidden('This calendar-object is read-only');
+ }
+ }
+
+ public function get(): string {
+ return $this->vobject->serialize();
+ }
+
+ public function getContentType(): string {
+ return 'text/calendar; charset=utf-8';
+ }
+
+ public function getETag(): ?string {
+ return null;
+ }
+
+ public function getSize() {
+ return mb_strlen($this->vobject->serialize());
+ }
+
+ public function delete(): void {
+ if ($this->backend instanceof ICreateFromString && $this->calendar->getPermissions() & Constants::PERMISSION_DELETE) {
+ /** @var \Sabre\VObject\Component[] */
+ $components = $this->vobject->getBaseComponents();
+ foreach ($components as $key => $component) {
+ $components[$key]->STATUS = 'CANCELLED';
+ $components[$key]->SEQUENCE = isset($component->SEQUENCE) ? ((int)$component->SEQUENCE->getValue()) + 1 : 1;
+ if ($component->name === 'VEVENT') {
+ $components[$key]->METHOD = 'CANCEL';
+ }
+ }
+ $this->backend->createFromString($this->getName(), (new VCalendar($components))->serialize());
+ } else {
+ throw new Forbidden('This calendar-object is read-only');
+ }
+ }
+
+ public function getName(): string {
+ // Every object is required to have an UID
+ $base = $this->vobject->getBaseComponent();
+ // This should never happen except the app provides invalid calendars (VEvent, VTodo... all require UID to be present)
+ if ($base === null) {
+ throw new NotFound('Invalid node');
+ }
+ if (isset($base->{'X-FILENAME'})) {
+ return (string)$base->{'X-FILENAME'};
+ }
+ return (string)$base->UID . '.ics';
+ }
+
+ public function setName($name): void {
+ throw new Forbidden('This calendar-object is read-only');
+ }
+
+ public function getLastModified(): ?int {
+ $base = $this->vobject->getBaseComponent();
+ if ($base !== null && $this->vobject->getBaseComponent()->{'LAST-MODIFIED'}) {
+ /** @var DateTime */
+ $lastModified = $this->vobject->getBaseComponent()->{'LAST-MODIFIED'};
+ return $lastModified->getDateTime()->getTimestamp();
+ }
+ return null;
+ }
+}
diff --git a/apps/dav/lib/CalDAV/CalendarProvider.php b/apps/dav/lib/CalDAV/CalendarProvider.php
index 5779111add3..f29c601db2d 100644
--- a/apps/dav/lib/CalDAV/CalendarProvider.php
+++ b/apps/dav/lib/CalDAV/CalendarProvider.php
@@ -26,7 +26,6 @@ declare(strict_types=1);
namespace OCA\DAV\CalDAV;
use OCP\Calendar\ICalendarProvider;
-use OCP\Calendar\ICreateFromString;
use OCP\IConfig;
use OCP\IL10N;
use Psr\Log\LoggerInterface;
diff --git a/apps/dav/tests/unit/AppInfo/PluginManagerTest.php b/apps/dav/tests/unit/AppInfo/PluginManagerTest.php
index 17f8ffda625..67dd0477685 100644
--- a/apps/dav/tests/unit/AppInfo/PluginManagerTest.php
+++ b/apps/dav/tests/unit/AppInfo/PluginManagerTest.php
@@ -29,6 +29,7 @@ namespace OCA\DAV\Tests\unit\AppInfo;
use OC\App\AppManager;
use OC\ServerContainer;
use OCA\DAV\AppInfo\PluginManager;
+use OCA\DAV\CalDAV\AppCalendar\AppCalendarPlugin;
use OCA\DAV\CalDAV\Integration\ICalendarProvider;
use Sabre\DAV\Collection;
use Sabre\DAV\ServerPlugin;
@@ -43,7 +44,6 @@ class PluginManagerTest extends TestCase {
public function test(): void {
$server = $this->createMock(ServerContainer::class);
-
$appManager = $this->createMock(AppManager::class);
$appManager->method('getInstalledApps')
->willReturn(['adavapp', 'adavapp2']);
@@ -94,6 +94,7 @@ class PluginManagerTest extends TestCase {
$pluginManager = new PluginManager($server, $appManager);
+ $appCalendarPlugin = $this->createMock(AppCalendarPlugin::class);
$calendarPlugin1 = $this->createMock(ICalendarProvider::class);
$calendarPlugin2 = $this->createMock(ICalendarProvider::class);
$calendarPlugin3 = $this->createMock(ICalendarProvider::class);
@@ -106,17 +107,18 @@ class PluginManagerTest extends TestCase {
$dummyCollection2 = $this->createMock(Collection::class);
$dummy2Collection1 = $this->createMock(Collection::class);
- $server->method('query')
+ $server->method('get')
->willReturnMap([
- ['\OCA\DAV\ADavApp\PluginOne', true, $dummyPlugin1],
- ['\OCA\DAV\ADavApp\PluginTwo', true, $dummyPlugin2],
- ['\OCA\DAV\ADavApp\CalendarPluginOne', true, $calendarPlugin1],
- ['\OCA\DAV\ADavApp\CalendarPluginTwo', true, $calendarPlugin2],
- ['\OCA\DAV\ADavApp\CollectionOne', true, $dummyCollection1],
- ['\OCA\DAV\ADavApp\CollectionTwo', true, $dummyCollection2],
- ['\OCA\DAV\ADavApp2\PluginOne', true, $dummy2Plugin1],
- ['\OCA\DAV\ADavApp2\CalendarPluginOne', true, $calendarPlugin3],
- ['\OCA\DAV\ADavApp2\CollectionOne', true, $dummy2Collection1],
+ [AppCalendarPlugin::class, $appCalendarPlugin],
+ ['\OCA\DAV\ADavApp\PluginOne', $dummyPlugin1],
+ ['\OCA\DAV\ADavApp\PluginTwo', $dummyPlugin2],
+ ['\OCA\DAV\ADavApp\CalendarPluginOne', $calendarPlugin1],
+ ['\OCA\DAV\ADavApp\CalendarPluginTwo', $calendarPlugin2],
+ ['\OCA\DAV\ADavApp\CollectionOne', $dummyCollection1],
+ ['\OCA\DAV\ADavApp\CollectionTwo', $dummyCollection2],
+ ['\OCA\DAV\ADavApp2\PluginOne', $dummy2Plugin1],
+ ['\OCA\DAV\ADavApp2\CalendarPluginOne', $calendarPlugin3],
+ ['\OCA\DAV\ADavApp2\CollectionOne', $dummy2Collection1],
]);
$expectedPlugins = [
@@ -125,6 +127,7 @@ class PluginManagerTest extends TestCase {
$dummy2Plugin1,
];
$expectedCalendarPlugins = [
+ $appCalendarPlugin,
$calendarPlugin1,
$calendarPlugin2,
$calendarPlugin3,
diff --git a/apps/dav/tests/unit/CalDAV/AppCalendar/AppCalendarTest.php b/apps/dav/tests/unit/CalDAV/AppCalendar/AppCalendarTest.php
new file mode 100644
index 00000000000..78ebf8b67a4
--- /dev/null
+++ b/apps/dav/tests/unit/CalDAV/AppCalendar/AppCalendarTest.php
@@ -0,0 +1,123 @@
+<?php
+/**
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\DAV\Tests\unit\CalDAV\AppCalendar;
+
+use OCA\DAV\CalDAV\AppCalendar\AppCalendar;
+use OCP\Calendar\ICalendar;
+use OCP\Calendar\ICreateFromString;
+use OCP\Constants;
+use PHPUnit\Framework\MockObject\MockObject;
+use Test\TestCase;
+
+use function Safe\rewind;
+
+class AppCalendarTest extends TestCase {
+ private $principal = 'principals/users/foo';
+
+ private AppCalendar $appCalendar;
+ private AppCalendar $writeableAppCalendar;
+
+ private ICalendar|MockObject $calendar;
+ private ICalendar|MockObject $writeableCalendar;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->calendar = $this->getMockBuilder(ICalendar::class)->getMock();
+ $this->calendar->method('getPermissions')
+ ->willReturn(Constants::PERMISSION_READ);
+
+ $this->writeableCalendar = $this->getMockBuilder(ICreateFromString::class)->getMock();
+ $this->writeableCalendar->method('getPermissions')
+ ->willReturn(Constants::PERMISSION_READ | Constants::PERMISSION_CREATE);
+
+ $this->appCalendar = new AppCalendar('dav-wrapper', $this->calendar, $this->principal);
+ $this->writeableAppCalendar = new AppCalendar('dav-wrapper', $this->writeableCalendar, $this->principal);
+ }
+
+ public function testGetPrincipal():void {
+ // Check that the correct name is returned
+ $this->assertEquals($this->principal, $this->appCalendar->getOwner());
+ $this->assertEquals($this->principal, $this->writeableAppCalendar->getOwner());
+ }
+
+ public function testDelete(): void {
+ $this->expectException(\Sabre\DAV\Exception\Forbidden::class);
+ $this->expectExceptionMessage('Deleting an entry is not implemented');
+
+ $this->appCalendar->delete();
+ }
+
+ public function testCreateFile() {
+ $this->writeableCalendar->expects($this->exactly(3))
+ ->method('createFromString')
+ ->withConsecutive(['some-name', 'data'], ['other-name', ''], ['name', 'some data']);
+
+ // pass data
+ $this->assertNull($this->writeableAppCalendar->createFile('some-name', 'data'));
+ // null is empty string
+ $this->assertNull($this->writeableAppCalendar->createFile('other-name', null));
+ // resource to data
+ $fp = fopen('php://memory', 'r+');
+ fwrite($fp, 'some data');
+ rewind($fp);
+ $this->assertNull($this->writeableAppCalendar->createFile('name', $fp));
+ fclose($fp);
+ }
+
+ public function testCreateFile_readOnly() {
+ // If writing is not supported
+ $this->expectException(\Sabre\DAV\Exception\Forbidden::class);
+ $this->expectExceptionMessage('Creating a new entry is not allowed');
+
+ $this->appCalendar->createFile('some-name', 'data');
+ }
+
+ public function testSetACL(): void {
+ $this->expectException(\Sabre\DAV\Exception\Forbidden::class);
+ $this->expectExceptionMessage('Setting ACL is not supported on this node');
+
+ $this->appCalendar->setACL([]);
+ }
+
+ public function testGetACL():void {
+ $expectedRO = [
+ [
+ 'privilege' => '{DAV:}read',
+ 'principal' => $this->principal,
+ 'protected' => true,
+ ],
+ [
+ 'privilege' => '{DAV:}write-properties',
+ 'principal' => $this->principal,
+ 'protected' => true,
+ ]
+ ];
+ $expectedRW = $expectedRO;
+ $expectedRW[] = [
+ 'privilege' => '{DAV:}write',
+ 'principal' => $this->principal,
+ 'protected' => true,
+ ];
+
+ // Check that the correct ACL is returned (default be only readable)
+ $this->assertEquals($expectedRO, $this->appCalendar->getACL());
+ $this->assertEquals($expectedRW, $this->writeableAppCalendar->getACL());
+ }
+}
diff --git a/apps/dav/tests/unit/CalDAV/AppCalendar/CalendarObjectTest.php b/apps/dav/tests/unit/CalDAV/AppCalendar/CalendarObjectTest.php
new file mode 100644
index 00000000000..e7bd2cc0b95
--- /dev/null
+++ b/apps/dav/tests/unit/CalDAV/AppCalendar/CalendarObjectTest.php
@@ -0,0 +1,166 @@
+<?php
+
+namespace OCA\DAV\Tests\unit\CalDAV\AppCalendar;
+
+use OCA\DAV\CalDAV\AppCalendar\AppCalendar;
+use OCA\DAV\CalDAV\AppCalendar\CalendarObject;
+use OCP\Calendar\ICalendar;
+use OCP\Calendar\ICreateFromString;
+use OCP\Constants;
+use PHPUnit\Framework\MockObject\MockObject;
+use Sabre\VObject\Component\VCalendar;
+use Sabre\VObject\Component\VEvent;
+use Test\TestCase;
+
+class CalendarObjectTest extends TestCase {
+ private CalendarObject $calendarObject;
+ private AppCalendar|MockObject $calendar;
+ private ICalendar|MockObject $backend;
+ private VCalendar|MockObject $vobject;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->calendar = $this->createMock(AppCalendar::class);
+ $this->calendar->method('getOwner')->willReturn('owner');
+ $this->calendar->method('getGroup')->willReturn('group');
+
+ $this->backend = $this->createMock(ICalendar::class);
+ $this->vobject = $this->createMock(VCalendar::class);
+ $this->calendarObject = new CalendarObject($this->calendar, $this->backend, $this->vobject);
+ }
+
+ public function testGetOwner() {
+ $this->assertEquals($this->calendarObject->getOwner(), 'owner');
+ }
+
+ public function testGetGroup() {
+ $this->assertEquals($this->calendarObject->getGroup(), 'group');
+ }
+
+ public function testGetACL() {
+ $this->calendar->expects($this->exactly(2))
+ ->method('getPermissions')
+ ->willReturnOnConsecutiveCalls(Constants::PERMISSION_READ, Constants::PERMISSION_ALL);
+
+ // read only
+ $this->assertEquals($this->calendarObject->getACL(), [
+ [
+ 'privilege' => '{DAV:}read',
+ 'principal' => 'owner',
+ 'protected' => true,
+ ]
+ ]);
+
+ // write permissions
+ $this->assertEquals($this->calendarObject->getACL(), [
+ [
+ 'privilege' => '{DAV:}read',
+ 'principal' => 'owner',
+ 'protected' => true,
+ ],
+ [
+ 'privilege' => '{DAV:}write-content',
+ 'principal' => 'owner',
+ 'protected' => true,
+ ]
+ ]);
+ }
+
+ public function testSetACL() {
+ $this->expectException(\Sabre\DAV\Exception\Forbidden::class);
+ $this->calendarObject->setACL([]);
+ }
+
+ public function testPut_readOnlyBackend() {
+ $this->expectException(\Sabre\DAV\Exception\Forbidden::class);
+ $this->calendarObject->put('foo');
+ }
+
+ public function testPut_noPermissions() {
+ $this->expectException(\Sabre\DAV\Exception\Forbidden::class);
+
+ $backend = $this->createMock(ICreateFromString::class);
+ $calendarObject = new CalendarObject($this->calendar, $backend, $this->vobject);
+
+ $this->calendar->expects($this->once())
+ ->method('getPermissions')
+ ->willReturn(Constants::PERMISSION_READ);
+
+ $calendarObject->put('foo');
+ }
+
+ public function testPut() {
+ $backend = $this->createMock(ICreateFromString::class);
+ $calendarObject = new CalendarObject($this->calendar, $backend, $this->vobject);
+
+ $this->vobject->expects($this->once())
+ ->method('getBaseComponent')
+ ->willReturn((object)['UID' => 'someid']);
+ $this->calendar->expects($this->once())
+ ->method('getPermissions')
+ ->willReturn(Constants::PERMISSION_ALL);
+
+ $backend->expects($this->once())
+ ->method('createFromString')
+ ->with('someid.ics', 'foo');
+ $calendarObject->put('foo');
+ }
+
+ public function testGet() {
+ $this->vobject->expects($this->once())
+ ->method('serialize')
+ ->willReturn('foo');
+ $this->assertEquals($this->calendarObject->get(), 'foo');
+ }
+
+ public function testDelete_notWriteable() {
+ $this->expectException(\Sabre\DAV\Exception\Forbidden::class);
+ $this->calendarObject->delete();
+ }
+
+ public function testDelete_noPermission() {
+ $backend = $this->createMock(ICreateFromString::class);
+ $calendarObject = new CalendarObject($this->calendar, $backend, $this->vobject);
+
+ $this->expectException(\Sabre\DAV\Exception\Forbidden::class);
+ $calendarObject->delete();
+ }
+
+ public function testDelete() {
+ $backend = $this->createMock(ICreateFromString::class);
+ $calendarObject = new CalendarObject($this->calendar, $backend, $this->vobject);
+
+ $components = [(new VCalendar(['VEVENT' => ['UID' => 'someid']]))->getBaseComponent()];
+
+ $this->calendar->expects($this->once())
+ ->method('getPermissions')
+ ->willReturn(Constants::PERMISSION_DELETE);
+ $this->vobject->expects($this->once())
+ ->method('getBaseComponents')
+ ->willReturn($components);
+ $this->vobject->expects($this->once())
+ ->method('getBaseComponent')
+ ->willReturn($components[0]);
+
+ $backend->expects($this->once())
+ ->method('createFromString')
+ ->with('someid.ics', self::callback(fn($data): bool => preg_match('/BEGIN:VEVENT(.|\r\n)+STATUS:CANCELLED/', $data) === 1));
+
+ $calendarObject->delete();
+ }
+
+ public function testGetName() {
+ $this->vobject->expects($this->exactly(2))
+ ->method('getBaseComponent')
+ ->willReturnOnConsecutiveCalls((object)['UID' => 'someid'], (object)['UID' => 'someid', 'X-FILENAME' => 'real-filename.ics']);
+
+ $this->assertEquals($this->calendarObject->getName(), 'someid.ics');
+ $this->assertEquals($this->calendarObject->getName(), 'real-filename.ics');
+ }
+
+ public function testSetName() {
+ $this->expectException(\Sabre\DAV\Exception\Forbidden::class);
+ $this->calendarObject->setName('Some name');
+ }
+}
diff --git a/apps/dav/tests/unit/Command/DeleteCalendarTest.php b/apps/dav/tests/unit/Command/DeleteCalendarTest.php
index dec349006ff..1c499dbcc25 100644
--- a/apps/dav/tests/unit/Command/DeleteCalendarTest.php
+++ b/apps/dav/tests/unit/Command/DeleteCalendarTest.php
@@ -25,7 +25,7 @@ declare(strict_types=1);
namespace OCA\DAV\Tests\Command;
use OCA\DAV\CalDAV\BirthdayService;
-use OCA\DAV\CalDav\CalDavBackend;
+use OCA\DAV\CalDAV\CalDavBackend;
use OCA\DAV\Command\DeleteCalendar;
use OCP\IConfig;
use OCP\IL10N;
diff --git a/apps/encryption/l10n/de.js b/apps/encryption/l10n/de.js
index 0822c0d6c21..b7ee8bee971 100644
--- a/apps/encryption/l10n/de.js
+++ b/apps/encryption/l10n/de.js
@@ -28,10 +28,15 @@ OC.L10N.register(
"Bad Signature" : "Ungültige Signatur",
"Missing Signature" : "Fehlende Signatur",
"one-time password for server-side-encryption" : "Einmal-Passwort für serverseitige Verschlüsselung",
+ "Encryption password" : "Verschlüsselungskennwort",
+ "The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>." : "Die Administration hat die serverseitige Verschlüsselung aktiviert. Deine Dateien wurden mit dem Passwort <strong>%s</strong> verschlüsselt.",
+ "The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "Die Administration hat die serverseitige Verschlüsselung aktiviert. Deine Dateien wurden mit dem Passwort \"%s\" verschlüsselt.",
+ "Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old log-in password\" field and your current login-password." : "Bitte melde dich an der Weboberfläche an, gehe zum Abschnitt \"Sicherheit\" deiner persönlichen Einstellungen und aktualisiere dein Verschlüsselungspasswort, indem du dieses Passwort in das Feld \"Altes Login-Passwort\" sowie dein aktuelles Login-Passwort eingibst.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit dir zu teilen.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit dir zu teilen.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
+ "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lese die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde dich ab und wieder an",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
diff --git a/apps/encryption/l10n/de.json b/apps/encryption/l10n/de.json
index 502c1cdc223..152e557d8cf 100644
--- a/apps/encryption/l10n/de.json
+++ b/apps/encryption/l10n/de.json
@@ -26,10 +26,15 @@
"Bad Signature" : "Ungültige Signatur",
"Missing Signature" : "Fehlende Signatur",
"one-time password for server-side-encryption" : "Einmal-Passwort für serverseitige Verschlüsselung",
+ "Encryption password" : "Verschlüsselungskennwort",
+ "The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>." : "Die Administration hat die serverseitige Verschlüsselung aktiviert. Deine Dateien wurden mit dem Passwort <strong>%s</strong> verschlüsselt.",
+ "The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "Die Administration hat die serverseitige Verschlüsselung aktiviert. Deine Dateien wurden mit dem Passwort \"%s\" verschlüsselt.",
+ "Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old log-in password\" field and your current login-password." : "Bitte melde dich an der Weboberfläche an, gehe zum Abschnitt \"Sicherheit\" deiner persönlichen Einstellungen und aktualisiere dein Verschlüsselungspasswort, indem du dieses Passwort in das Feld \"Altes Login-Passwort\" sowie dein aktuelles Login-Passwort eingibst.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit dir zu teilen.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit dir zu teilen.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
+ "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lese die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde dich ab und wieder an",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
diff --git a/apps/files/js/app.js b/apps/files/js/app.js
index 1252bd5796c..ba80e028bd7 100644
--- a/apps/files/js/app.js
+++ b/apps/files/js/app.js
@@ -108,12 +108,14 @@
iconClass: 'icon-delete',
order: 99,
},
- {
- name: 'tags',
- displayName: t('files', 'Tags'),
- iconClass: 'icon-tag',
- order: 100,
- },
+ ...(
+ OCA?.SystemTags === undefined ? [] : ([{
+ name: 'tags',
+ displayName: t('files', 'Tags'),
+ iconClass: 'icon-tag',
+ order: 100,
+ }])
+ ),
],
sorting: {
mode: $('#defaultFileSorting').val() === 'basename'
diff --git a/apps/files/js/newfilemenu.js b/apps/files/js/newfilemenu.js
index a101eccef29..ce23b4a9c58 100644
--- a/apps/files/js/newfilemenu.js
+++ b/apps/files/js/newfilemenu.js
@@ -51,6 +51,7 @@
templateName: t('files', 'New folder'),
iconClass: 'icon-folder',
fileType: 'folder',
+ actionLabel: t('files', 'Create new folder'),
actionHandler: function(name) {
self.fileList.createDirectory(name);
}
@@ -112,10 +113,12 @@
var newName = $target.attr('data-templatename');
var fileType = $target.attr('data-filetype');
+ var actionLabel = $target.attr('data-action-label');
var $form = $(OCA.Files.Templates['newfilemenu_filename_form']({
fileName: newName,
cid: this.cid,
- fileType: fileType
+ fileType: fileType,
+ actionLabel,
}));
//this.trigger('actionPerformed', action);
@@ -207,6 +210,7 @@
iconClass: actionSpec.iconClass,
fileType: actionSpec.fileType,
useInput: actionSpec.useInput,
+ actionLabel: actionSpec.actionLabel,
actionHandler: actionSpec.actionHandler,
checkFilename: actionSpec.checkFilename,
shouldShow: actionSpec.shouldShow,
diff --git a/apps/files/js/templates.js b/apps/files/js/templates.js
index d9d333648ce..315f697728e 100644
--- a/apps/files/js/templates.js
+++ b/apps/files/js/templates.js
@@ -344,10 +344,12 @@ templates['newfilemenu'] = template({"1":function(container,depth0,helpers,parti
+ alias4(((helper = (helper = lookupProperty(helpers,"fileType") || (depth0 != null ? lookupProperty(depth0,"fileType") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"fileType","hash":{},"data":data,"loc":{"start":{"line":7,"column":84},"end":{"line":7,"column":96}}}) : helper)))
+ "\" data-action=\""
+ alias4(((helper = (helper = lookupProperty(helpers,"id") || (depth0 != null ? lookupProperty(depth0,"id") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data,"loc":{"start":{"line":7,"column":111},"end":{"line":7,"column":117}}}) : helper)))
+ + "\" data-action-label=\""
+ + alias4(((helper = (helper = lookupProperty(helpers,"actionLabel") || (depth0 != null ? lookupProperty(depth0,"actionLabel") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"actionLabel","hash":{},"data":data,"loc":{"start":{"line":7,"column":138},"end":{"line":7,"column":153}}}) : helper)))
+ "\"><span class=\"icon "
- + alias4(((helper = (helper = lookupProperty(helpers,"iconClass") || (depth0 != null ? lookupProperty(depth0,"iconClass") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"iconClass","hash":{},"data":data,"loc":{"start":{"line":7,"column":137},"end":{"line":7,"column":150}}}) : helper)))
+ + alias4(((helper = (helper = lookupProperty(helpers,"iconClass") || (depth0 != null ? lookupProperty(depth0,"iconClass") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"iconClass","hash":{},"data":data,"loc":{"start":{"line":7,"column":173},"end":{"line":7,"column":186}}}) : helper)))
+ " svg\"></span><span class=\"displayname\">"
- + alias4(((helper = (helper = lookupProperty(helpers,"displayName") || (depth0 != null ? lookupProperty(depth0,"displayName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"displayName","hash":{},"data":data,"loc":{"start":{"line":7,"column":189},"end":{"line":7,"column":204}}}) : helper)))
+ + alias4(((helper = (helper = lookupProperty(helpers,"displayName") || (depth0 != null ? lookupProperty(depth0,"displayName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"displayName","hash":{},"data":data,"loc":{"start":{"line":7,"column":225},"end":{"line":7,"column":240}}}) : helper)))
+ "</span></a>\n </li>\n";
},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
@@ -379,7 +381,9 @@ templates['newfilemenu_filename_form'] = template({"compiler":[8,">= 4.3.0"],"ma
+ alias4(((helper = (helper = lookupProperty(helpers,"fileType") || (depth0 != null ? lookupProperty(depth0,"fileType") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"fileType","hash":{},"data":data,"loc":{"start":{"line":2,"column":26},"end":{"line":2,"column":38}}}) : helper)))
+ "\" type=\"text\" value=\""
+ alias4(((helper = (helper = lookupProperty(helpers,"fileName") || (depth0 != null ? lookupProperty(depth0,"fileName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"fileName","hash":{},"data":data,"loc":{"start":{"line":2,"column":59},"end":{"line":2,"column":71}}}) : helper)))
- + "\" autocomplete=\"off\" autocapitalize=\"off\">\n <input type=\"submit\" value=\" \" class=\"icon-confirm\" />\n</form>\n";
+ + "\" autocomplete=\"off\" autocapitalize=\"off\">\n <input type=\"submit\" value=\" \" class=\"icon-confirm\" aria-label=\""
+ + alias4(((helper = (helper = lookupProperty(helpers,"actionLabel") || (depth0 != null ? lookupProperty(depth0,"actionLabel") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"actionLabel","hash":{},"data":data,"loc":{"start":{"line":3,"column":65},"end":{"line":3,"column":80}}}) : helper)))
+ + "\" />\n</form>\n";
},"useData":true});
templates['operationprogressbar'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
diff --git a/apps/files/js/templates/newfilemenu.handlebars b/apps/files/js/templates/newfilemenu.handlebars
index 0d9ad9682ca..756595212d9 100644
--- a/apps/files/js/templates/newfilemenu.handlebars
+++ b/apps/files/js/templates/newfilemenu.handlebars
@@ -4,7 +4,7 @@
</li>
{{#each items}}
<li>
- <a href="#" class="menuitem" data-templatename="{{templateName}}" data-filetype="{{fileType}}" data-action="{{id}}"><span class="icon {{iconClass}} svg"></span><span class="displayname">{{displayName}}</span></a>
+ <a href="#" class="menuitem" data-templatename="{{templateName}}" data-filetype="{{fileType}}" data-action="{{id}}" data-action-label="{{actionLabel}}"><span class="icon {{iconClass}} svg"></span><span class="displayname">{{displayName}}</span></a>
</li>
{{/each}}
</ul>
diff --git a/apps/files/js/templates/newfilemenu_filename_form.handlebars b/apps/files/js/templates/newfilemenu_filename_form.handlebars
index 5fc37ecf781..2d5af97ee76 100644
--- a/apps/files/js/templates/newfilemenu_filename_form.handlebars
+++ b/apps/files/js/templates/newfilemenu_filename_form.handlebars
@@ -1,4 +1,4 @@
<form class="filenameform">
<input id="{{cid}}-input-{{fileType}}" type="text" value="{{fileName}}" autocomplete="off" autocapitalize="off">
- <input type="submit" value=" " class="icon-confirm" />
+ <input type="submit" value=" " class="icon-confirm" aria-label="{{actionLabel}}" />
</form>
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index 214ba6da364..a500572d235 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -166,7 +166,22 @@ OC.L10N.register(
"The ownership transfer of {path} from {user} has completed." : "Die Besitzübertragung von {path} durch {user} wurde fertiggestellt.",
"in %s" : "in %s",
"File Management" : "Dateiverwaltung",
+ "Reload current directory" : "Aktuelles Verzeichnis neu laden",
+ "Go to the \"{dir}\" directory" : "In das Verzeichnis \"{dir}“ wechseln",
+ "Select the row for {displayName}" : "Zeile für {displayName} auswählen",
+ "Open folder {name}" : "Ordner {name} öffnen",
+ "Download file {name}" : "Datei {name} herunterladen",
+ "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt",
+ "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen",
+ "Total rows summary" : "Zusammenfassung aller Zeilen",
"Select all" : "Alle auswählen",
+ "Unselect all" : "Auswahl aufheben",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen",
+ "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt",
+ "ascending" : "Aufsteigend",
+ "descending" : "Absteigend",
+ "Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
+ "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn du durch die Liste navigierst.",
"Storage informations" : "Speicherinformationen",
"{usedQuotaByte} used" : "{usedQuotaByte} verwendet",
"{relative}% used" : "{relative}% verwendet",
@@ -175,6 +190,7 @@ OC.L10N.register(
"Choose file or folder to transfer" : "Datei oder Ordner zur Übertragung auswählen",
"Change" : "Ändern",
"New owner" : "Neuer Besitzer",
+ "Search for an account" : "Nach einem Konto suchen",
"Choose a file or folder to transfer" : "Datei oder Ordner zur Übertragung auswählen",
"Transfer" : "Übertragen",
"Transfer {path} to {userid}" : "Übertrage {path} an {userid}",
@@ -183,7 +199,10 @@ OC.L10N.register(
"Ownership transfer request sent" : "Anforderung für die Übertragung des Besitzes gesendet",
"Cannot transfer ownership of a file or folder you do not own" : "Der Besitz an einer Datei oder einem Ordner, der dir nicht gehört, kann nicht übertragen werden",
"Select file or folder to link to" : "Datei oder Ordner zum Verknüpfen auswählen",
+ "Loading current folder" : "Lade aktuellen Ordner",
"No files in here" : "Keine Dateien vorhanden",
+ "No files or folders have been deleted yet" : "Es wurden noch keine Dateien oder Ordner gelöscht",
+ "Go to the previous folder" : "Zum vorherigen Ordner wechseln",
"Go back" : "Zurückgehen",
"Open the files app settings" : "Einstellungen der Dateien-App öffnen",
"Files settings" : "Dateien-Einstellungen",
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index 45486daf05a..54e391f0556 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -164,7 +164,22 @@
"The ownership transfer of {path} from {user} has completed." : "Die Besitzübertragung von {path} durch {user} wurde fertiggestellt.",
"in %s" : "in %s",
"File Management" : "Dateiverwaltung",
+ "Reload current directory" : "Aktuelles Verzeichnis neu laden",
+ "Go to the \"{dir}\" directory" : "In das Verzeichnis \"{dir}“ wechseln",
+ "Select the row for {displayName}" : "Zeile für {displayName} auswählen",
+ "Open folder {name}" : "Ordner {name} öffnen",
+ "Download file {name}" : "Datei {name} herunterladen",
+ "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt",
+ "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen",
+ "Total rows summary" : "Zusammenfassung aller Zeilen",
"Select all" : "Alle auswählen",
+ "Unselect all" : "Auswahl aufheben",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen",
+ "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt",
+ "ascending" : "Aufsteigend",
+ "descending" : "Absteigend",
+ "Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
+ "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn du durch die Liste navigierst.",
"Storage informations" : "Speicherinformationen",
"{usedQuotaByte} used" : "{usedQuotaByte} verwendet",
"{relative}% used" : "{relative}% verwendet",
@@ -173,6 +188,7 @@
"Choose file or folder to transfer" : "Datei oder Ordner zur Übertragung auswählen",
"Change" : "Ändern",
"New owner" : "Neuer Besitzer",
+ "Search for an account" : "Nach einem Konto suchen",
"Choose a file or folder to transfer" : "Datei oder Ordner zur Übertragung auswählen",
"Transfer" : "Übertragen",
"Transfer {path} to {userid}" : "Übertrage {path} an {userid}",
@@ -181,7 +197,10 @@
"Ownership transfer request sent" : "Anforderung für die Übertragung des Besitzes gesendet",
"Cannot transfer ownership of a file or folder you do not own" : "Der Besitz an einer Datei oder einem Ordner, der dir nicht gehört, kann nicht übertragen werden",
"Select file or folder to link to" : "Datei oder Ordner zum Verknüpfen auswählen",
+ "Loading current folder" : "Lade aktuellen Ordner",
"No files in here" : "Keine Dateien vorhanden",
+ "No files or folders have been deleted yet" : "Es wurden noch keine Dateien oder Ordner gelöscht",
+ "Go to the previous folder" : "Zum vorherigen Ordner wechseln",
"Go back" : "Zurückgehen",
"Open the files app settings" : "Einstellungen der Dateien-App öffnen",
"Files settings" : "Dateien-Einstellungen",
diff --git a/apps/files/src/templates.js b/apps/files/src/templates.js
index 3a4f0133f94..9be12d8608f 100644
--- a/apps/files/src/templates.js
+++ b/apps/files/src/templates.js
@@ -80,6 +80,7 @@ window.addEventListener('DOMContentLoaded', function() {
templateName: t('files', 'Templates'),
iconClass: 'icon-template-add',
fileType: 'file',
+ actionLabel: t('files', 'Create new templates folder'),
actionHandler(name) {
initTemplatesFolder(name)
menu.removeMenuEntry('template-init')
@@ -109,6 +110,7 @@ templates.forEach((provider, index) => {
templateName: provider.label + provider.extension,
iconClass: provider.iconClass || 'icon-file',
fileType: 'file',
+ actionLabel: provider.actionLabel,
actionHandler(name) {
TemplatePicker.open(name, provider)
},
diff --git a/apps/files/src/views/ReferenceFileWidget.vue b/apps/files/src/views/ReferenceFileWidget.vue
index f0ac7007312..7634994a30d 100644
--- a/apps/files/src/views/ReferenceFileWidget.vue
+++ b/apps/files/src/views/ReferenceFileWidget.vue
@@ -115,7 +115,7 @@ export default {
OCA.Viewer.open({ path: this.richObject.path })
return
}
- window.location = generateUrl('/f/' + this.id)
+ window.location = this.richObject.link
},
},
}
diff --git a/apps/files_sharing/l10n/cs.js b/apps/files_sharing/l10n/cs.js
index c1f05508ebd..b35e1aa8309 100644
--- a/apps/files_sharing/l10n/cs.js
+++ b/apps/files_sharing/l10n/cs.js
@@ -120,6 +120,7 @@ OC.L10N.register(
"You cannot share to a Circle if the app is not enabled" : "Do okruhu nemůžete sdílet, pokud není aplikace zapnuta",
"Please specify a valid circle" : "Zadejte platný okruh",
"Sharing %s failed because the back end does not support room shares" : "Sdílení %s se nezdařilo protože podpůrná vrstva nepodporuje sdílení místností",
+ "Sharing %s failed because the back end does not support ScienceMesh shares" : "Sdílení %s se nezdařilo protože podpůrná vrstva nepodporuje ScienceMesh sdílení",
"Unknown share type" : "Neznámý typ sdílení",
"Not a directory" : "Není adresář",
"Could not lock node" : "Uzel se nedaří uzamknout",
@@ -225,6 +226,7 @@ OC.L10N.register(
"Circle" : "Okruh",
"Talk conversation" : "Konverzace v Talk",
"Deck board" : "Tabule aplikace Deck",
+ "ScienceMesh" : "ScienceMesh",
"on {server}" : "na {server}",
"Others with access" : "Ostatní, kteří mají přístup",
"No other users with access found" : "Nenalezeni žádní další uživatelé, kteří mají přístup",
diff --git a/apps/files_sharing/l10n/cs.json b/apps/files_sharing/l10n/cs.json
index 3cad2fefb63..81950e1b477 100644
--- a/apps/files_sharing/l10n/cs.json
+++ b/apps/files_sharing/l10n/cs.json
@@ -118,6 +118,7 @@
"You cannot share to a Circle if the app is not enabled" : "Do okruhu nemůžete sdílet, pokud není aplikace zapnuta",
"Please specify a valid circle" : "Zadejte platný okruh",
"Sharing %s failed because the back end does not support room shares" : "Sdílení %s se nezdařilo protože podpůrná vrstva nepodporuje sdílení místností",
+ "Sharing %s failed because the back end does not support ScienceMesh shares" : "Sdílení %s se nezdařilo protože podpůrná vrstva nepodporuje ScienceMesh sdílení",
"Unknown share type" : "Neznámý typ sdílení",
"Not a directory" : "Není adresář",
"Could not lock node" : "Uzel se nedaří uzamknout",
@@ -223,6 +224,7 @@
"Circle" : "Okruh",
"Talk conversation" : "Konverzace v Talk",
"Deck board" : "Tabule aplikace Deck",
+ "ScienceMesh" : "ScienceMesh",
"on {server}" : "na {server}",
"Others with access" : "Ostatní, kteří mají přístup",
"No other users with access found" : "Nenalezeni žádní další uživatelé, kteří mají přístup",
diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js
index 714199944b0..ebfbbffef8c 100644
--- a/apps/files_sharing/l10n/de.js
+++ b/apps/files_sharing/l10n/de.js
@@ -120,6 +120,7 @@ OC.L10N.register(
"You cannot share to a Circle if the app is not enabled" : "Du kannst nichts mit einem Kreis teilen, wenn die App nicht aktiviert ist",
"Please specify a valid circle" : "Bitte gib einen gültigen Kreis an",
"Sharing %s failed because the back end does not support room shares" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe von Räumen nicht unterstützt",
+ "Sharing %s failed because the back end does not support ScienceMesh shares" : "Freigabe von %s fehlgeschlagen, da das Backend keine ScienceMesh-Freigaben unterstützt",
"Unknown share type" : "Unbekannter Freigabetyp",
"Not a directory" : "Kein Verzeichnis",
"Could not lock node" : "Node konnte nicht gesperrt werden",
@@ -225,6 +226,7 @@ OC.L10N.register(
"Circle" : "Kreis",
"Talk conversation" : "Talk-Unterhaltung",
"Deck board" : "Deck-Board",
+ "ScienceMesh" : "ScienceMesh",
"on {server}" : "auf {server}",
"Others with access" : "Andere mit Zugriff",
"No other users with access found" : "Keine anderen Benutzer mit Zugriff gefunden",
diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json
index f063ca03cb3..ea343b44212 100644
--- a/apps/files_sharing/l10n/de.json
+++ b/apps/files_sharing/l10n/de.json
@@ -118,6 +118,7 @@
"You cannot share to a Circle if the app is not enabled" : "Du kannst nichts mit einem Kreis teilen, wenn die App nicht aktiviert ist",
"Please specify a valid circle" : "Bitte gib einen gültigen Kreis an",
"Sharing %s failed because the back end does not support room shares" : "Freigabe von %s fehlgeschlagen, da das Backend die Freigabe von Räumen nicht unterstützt",
+ "Sharing %s failed because the back end does not support ScienceMesh shares" : "Freigabe von %s fehlgeschlagen, da das Backend keine ScienceMesh-Freigaben unterstützt",
"Unknown share type" : "Unbekannter Freigabetyp",
"Not a directory" : "Kein Verzeichnis",
"Could not lock node" : "Node konnte nicht gesperrt werden",
@@ -223,6 +224,7 @@
"Circle" : "Kreis",
"Talk conversation" : "Talk-Unterhaltung",
"Deck board" : "Deck-Board",
+ "ScienceMesh" : "ScienceMesh",
"on {server}" : "auf {server}",
"Others with access" : "Andere mit Zugriff",
"No other users with access found" : "Keine anderen Benutzer mit Zugriff gefunden",
diff --git a/apps/files_trashbin/l10n/de.js b/apps/files_trashbin/l10n/de.js
index 471d52b33f9..d1913f449c7 100644
--- a/apps/files_trashbin/l10n/de.js
+++ b/apps/files_trashbin/l10n/de.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"This application enables users to restore files that were deleted from the system." : "Diese App ermöglicht es Benutzern Dateien die vom System gelöscht wurden wiederherzustellen.",
"This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Diese Anwendung ermöglicht es Benutzern, gelöschte Dateien wieder herzustellen. In der Web-Oberfläche wird eine Liste mit allen gelöschten Dateien angezeigt. Es besteht die Möglichkeit die Datein im Dateiverzeichnisse des Benutzers wieder herzustelle, oder diese endgültig zu löschen. Bei der Wiederherstellung einer Datei werden, sofern die Versions Anwendung aktiviert ist, die dazugehörigen Dateiversionen ebenfalls wieder hergestellt. Falls eine geteilte Datei gelöscht wurde, kann diese ebenfals wieder hergestellt werden, jedoch ist diese danach nicht mehr geteilt. Normalerweise verbleiben gelöschte Dateien für 30 Tage im Papierkorb .\nUm zu verhindern, dass einem Benutzer der Speicherplatz ausgeht, nutzt die Anwendung maximal 50% des verfügbaren freien Kontingents für gelöschte Dateien. Sofern die gelöschten Dateien dieses Limit überschreiten, werden zunächst die ältesten Dateien gelöscht, bis das Limit unterschritten wird. Mehr Informationen sind in der Dokumentation verfügbar.",
"Restore" : "Wiederherstellen",
+ "List of files that have been deleted." : "Liste der gelöschten Dateien.",
"Deleted" : "gelöscht",
"No deleted files" : "Keine gelöschten Dateien",
"You will be able to recover deleted files from here" : "Hier können gelöschte Dateien wiederhergestellt werden",
diff --git a/apps/files_trashbin/l10n/de.json b/apps/files_trashbin/l10n/de.json
index 9086ac1f5d8..ba46b6bdd70 100644
--- a/apps/files_trashbin/l10n/de.json
+++ b/apps/files_trashbin/l10n/de.json
@@ -5,6 +5,7 @@
"This application enables users to restore files that were deleted from the system." : "Diese App ermöglicht es Benutzern Dateien die vom System gelöscht wurden wiederherzustellen.",
"This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Diese Anwendung ermöglicht es Benutzern, gelöschte Dateien wieder herzustellen. In der Web-Oberfläche wird eine Liste mit allen gelöschten Dateien angezeigt. Es besteht die Möglichkeit die Datein im Dateiverzeichnisse des Benutzers wieder herzustelle, oder diese endgültig zu löschen. Bei der Wiederherstellung einer Datei werden, sofern die Versions Anwendung aktiviert ist, die dazugehörigen Dateiversionen ebenfalls wieder hergestellt. Falls eine geteilte Datei gelöscht wurde, kann diese ebenfals wieder hergestellt werden, jedoch ist diese danach nicht mehr geteilt. Normalerweise verbleiben gelöschte Dateien für 30 Tage im Papierkorb .\nUm zu verhindern, dass einem Benutzer der Speicherplatz ausgeht, nutzt die Anwendung maximal 50% des verfügbaren freien Kontingents für gelöschte Dateien. Sofern die gelöschten Dateien dieses Limit überschreiten, werden zunächst die ältesten Dateien gelöscht, bis das Limit unterschritten wird. Mehr Informationen sind in der Dokumentation verfügbar.",
"Restore" : "Wiederherstellen",
+ "List of files that have been deleted." : "Liste der gelöschten Dateien.",
"Deleted" : "gelöscht",
"No deleted files" : "Keine gelöschten Dateien",
"You will be able to recover deleted files from here" : "Hier können gelöschte Dateien wiederhergestellt werden",
diff --git a/apps/settings/l10n/de.js b/apps/settings/l10n/de.js
index 0ce81835701..f692daa1b4a 100644
--- a/apps/settings/l10n/de.js
+++ b/apps/settings/l10n/de.js
@@ -268,10 +268,12 @@ OC.L10N.register(
"Current password" : "Aktuelles Passwort",
"New password" : "Neues Passwort",
"Change password" : "Passwort ändern",
+ "Your profile information" : "Ihre Profilinformation",
"Your profile picture" : "Dein Profilbild",
"Upload profile picture" : "Profilbild hochladen",
"Choose profile picture from Files" : "Profilbild aus Dateien wählen",
"Remove profile picture" : "Profilbild entfernen",
+ "The file must be a PNG or JPG" : "Die Datei muss im PNG- oder JPG-Format sein",
"Picture provided by original account" : "Bild von Original-Konto zur Verfügung gestellt",
"Cancel" : "Abbrechen",
"Set as profile picture" : "Als Profilbild festlegen",
diff --git a/apps/settings/l10n/de.json b/apps/settings/l10n/de.json
index 6080126fd3a..42a888f941e 100644
--- a/apps/settings/l10n/de.json
+++ b/apps/settings/l10n/de.json
@@ -266,10 +266,12 @@
"Current password" : "Aktuelles Passwort",
"New password" : "Neues Passwort",
"Change password" : "Passwort ändern",
+ "Your profile information" : "Ihre Profilinformation",
"Your profile picture" : "Dein Profilbild",
"Upload profile picture" : "Profilbild hochladen",
"Choose profile picture from Files" : "Profilbild aus Dateien wählen",
"Remove profile picture" : "Profilbild entfernen",
+ "The file must be a PNG or JPG" : "Die Datei muss im PNG- oder JPG-Format sein",
"Picture provided by original account" : "Bild von Original-Konto zur Verfügung gestellt",
"Cancel" : "Abbrechen",
"Set as profile picture" : "Als Profilbild festlegen",
diff --git a/apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue b/apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue
index ad58ff282eb..d5d57c47c01 100644
--- a/apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue
+++ b/apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue
@@ -27,7 +27,7 @@
:close-after-click="true"
:disabled="!isSupportedScope"
:icon="iconClass"
- :title="isSupportedScope ? tooltip : tooltipDisabled"
+ :title="displayName"
@click.stop.prevent="updateScope">
{{ isSupportedScope ? tooltip : tooltipDisabled }}
</NcActionButton>
diff --git a/apps/systemtags/l10n/de.js b/apps/systemtags/l10n/de.js
index 944dff3a54b..2fe24c8f5b6 100644
--- a/apps/systemtags/l10n/de.js
+++ b/apps/systemtags/l10n/de.js
@@ -48,7 +48,16 @@ OC.L10N.register(
"Collaborative tags" : "Kollaborative Tags",
"Collaborative tagging functionality which shares tags among users." : "Kollaborative Tags Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt.",
"Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Gemeinschaftliche Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt. Sehr gut für Gruppen.\n(Wenn du ein Anbieter mit einer Mehrkundeninstallation bist, so ist angeraten diese App zu deaktiveren, da die Schlagworte mit allen Kunden geteilt werden.)",
+ "Search or create collaborative tags" : "Suchen oder erstellen von kollaborativen Schlagworten",
+ "Collaborative tags …" : "Kollaborative Schlagworte ...",
+ "No tags to select, type to create a new tag" : "Keine Schlagworte zur Auswahl, gebe ein, um ein neues Schlagwort zu erstellen",
"Failed to load tags" : "Schlagworte konnten nicht geladen werden",
+ "Failed to load selected tags" : "Ausgewählte Schlagworte konnten nicht geladen werden",
+ "Failed to select tag" : "Schlagwort konnte nicht ausgewählt werden",
+ "Failed to create tag" : "Schlagwort konnte nicht erstellt werden",
+ "Failed to delete tag" : "Fehler beim Löschen des Schlagwortes",
+ "Failed to load last used tags" : "Zuletzt verwendete Schlagworte konnten nicht geladen werden",
+ "Missing \"Content-Location\" header" : "Fehlender \"Content-Location\"-Header",
"Tagged files" : "Mit Tags versehene Dateien",
"Select tags to filter by" : "Wähle Tags nach denen gefilter werden soll",
"No tags found" : "Keine Tags gefunden",
diff --git a/apps/systemtags/l10n/de.json b/apps/systemtags/l10n/de.json
index a1b94350393..c5947bd3483 100644
--- a/apps/systemtags/l10n/de.json
+++ b/apps/systemtags/l10n/de.json
@@ -46,7 +46,16 @@
"Collaborative tags" : "Kollaborative Tags",
"Collaborative tagging functionality which shares tags among users." : "Kollaborative Tags Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt.",
"Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Gemeinschaftliche Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt. Sehr gut für Gruppen.\n(Wenn du ein Anbieter mit einer Mehrkundeninstallation bist, so ist angeraten diese App zu deaktiveren, da die Schlagworte mit allen Kunden geteilt werden.)",
+ "Search or create collaborative tags" : "Suchen oder erstellen von kollaborativen Schlagworten",
+ "Collaborative tags …" : "Kollaborative Schlagworte ...",
+ "No tags to select, type to create a new tag" : "Keine Schlagworte zur Auswahl, gebe ein, um ein neues Schlagwort zu erstellen",
"Failed to load tags" : "Schlagworte konnten nicht geladen werden",
+ "Failed to load selected tags" : "Ausgewählte Schlagworte konnten nicht geladen werden",
+ "Failed to select tag" : "Schlagwort konnte nicht ausgewählt werden",
+ "Failed to create tag" : "Schlagwort konnte nicht erstellt werden",
+ "Failed to delete tag" : "Fehler beim Löschen des Schlagwortes",
+ "Failed to load last used tags" : "Zuletzt verwendete Schlagworte konnten nicht geladen werden",
+ "Missing \"Content-Location\" header" : "Fehlender \"Content-Location\"-Header",
"Tagged files" : "Mit Tags versehene Dateien",
"Select tags to filter by" : "Wähle Tags nach denen gefilter werden soll",
"No tags found" : "Keine Tags gefunden",
diff --git a/apps/theming/l10n/uk.js b/apps/theming/l10n/uk.js
index 0cc3561a41b..1e659056561 100644
--- a/apps/theming/l10n/uk.js
+++ b/apps/theming/l10n/uk.js
@@ -21,6 +21,8 @@ OC.L10N.register(
"Could not write file to disk" : "Неможливо записати файл на диск",
"A PHP extension stopped the file upload" : "Розширення PHP призупинило завантаження файлу",
"No file uploaded" : "Файл не завантажено",
+ "Failed to clean up the old administration theming images folder" : "Не вдалося очистити каталог зображень старої адміністративної теми",
+ "Failed to clean up the old administration image folder" : "Не вдалося очистити старий каталог образу адміністрування",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Ви уже використовуєте власну тему. Таким чином налаштування застосунку Оформлення може бути перезаписано.",
"Theming" : "Оформлення",
"Appearance and accessibility" : "Тема та вигляд",
@@ -47,6 +49,7 @@ OC.L10N.register(
"Adjust the Nextcloud theme" : "Налаштуйте тему Nextcloud",
"Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Оформлення дозволяє легко налаштувати зовнішній вигляд вашого сервера та підтримуваних клієнтів. Це будуть бачити всі користувачі.",
"Advanced options" : "Розширені налаштування",
+ "Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Встановіть розширення ImageMagick PHP з підтримкою SVG-зображень, щоб автоматично генерувати іконки на основі завантаженого логотипа і кольору.",
"Name" : "Ім’я",
"Web link" : "Посилання",
"a safe home for all your data" : "безпечна домівка для ваших даних",
@@ -66,6 +69,7 @@ OC.L10N.register(
"Disable user theming" : "Вимкнути можливість користувачів змінювати оформлення",
"Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on." : "На додаток до встановлення оформлення вашої хмари користувачі також можуть змінювати тло та кольорову гаму. Ви можете встановити оформлення однаковим для всіх користувачів.",
"Keyboard shortcuts" : "Скорочення",
+ "In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "У деяких випадках комбінації клавіш можуть заважати роботі з інструментами доступності. Для того, щоб правильно зосередитися на інструменті, ви можете вимкнути всі комбінації клавіш тут. Це також вимкне всі доступні комбінації клавіш у програмах.",
"Disable all keyboard shortcuts" : "Вимкнути всі комбінації клавіш",
"Background" : "Тло",
"Customization has been disabled by your administrator" : "Налаштування персоналізації вимкнено адміністатором.",
@@ -75,6 +79,7 @@ OC.L10N.register(
"Custom background" : "Користувацьке тло",
"Default background" : "Типове тло",
"Change color" : "Змінити колір",
+ "No background" : "Без фону",
"Select a background from your files" : "Виберіть зображення тла з ваших файлів",
"Theme selection is enforced" : "Вибір теми виконується примусово",
"Select a custom color" : "Виберіть власний колір",
diff --git a/apps/theming/l10n/uk.json b/apps/theming/l10n/uk.json
index cddf7aed065..1b98fb4beaa 100644
--- a/apps/theming/l10n/uk.json
+++ b/apps/theming/l10n/uk.json
@@ -19,6 +19,8 @@
"Could not write file to disk" : "Неможливо записати файл на диск",
"A PHP extension stopped the file upload" : "Розширення PHP призупинило завантаження файлу",
"No file uploaded" : "Файл не завантажено",
+ "Failed to clean up the old administration theming images folder" : "Не вдалося очистити каталог зображень старої адміністративної теми",
+ "Failed to clean up the old administration image folder" : "Не вдалося очистити старий каталог образу адміністрування",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Ви уже використовуєте власну тему. Таким чином налаштування застосунку Оформлення може бути перезаписано.",
"Theming" : "Оформлення",
"Appearance and accessibility" : "Тема та вигляд",
@@ -45,6 +47,7 @@
"Adjust the Nextcloud theme" : "Налаштуйте тему Nextcloud",
"Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Оформлення дозволяє легко налаштувати зовнішній вигляд вашого сервера та підтримуваних клієнтів. Це будуть бачити всі користувачі.",
"Advanced options" : "Розширені налаштування",
+ "Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Встановіть розширення ImageMagick PHP з підтримкою SVG-зображень, щоб автоматично генерувати іконки на основі завантаженого логотипа і кольору.",
"Name" : "Ім’я",
"Web link" : "Посилання",
"a safe home for all your data" : "безпечна домівка для ваших даних",
@@ -64,6 +67,7 @@
"Disable user theming" : "Вимкнути можливість користувачів змінювати оформлення",
"Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on." : "На додаток до встановлення оформлення вашої хмари користувачі також можуть змінювати тло та кольорову гаму. Ви можете встановити оформлення однаковим для всіх користувачів.",
"Keyboard shortcuts" : "Скорочення",
+ "In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "У деяких випадках комбінації клавіш можуть заважати роботі з інструментами доступності. Для того, щоб правильно зосередитися на інструменті, ви можете вимкнути всі комбінації клавіш тут. Це також вимкне всі доступні комбінації клавіш у програмах.",
"Disable all keyboard shortcuts" : "Вимкнути всі комбінації клавіш",
"Background" : "Тло",
"Customization has been disabled by your administrator" : "Налаштування персоналізації вимкнено адміністатором.",
@@ -73,6 +77,7 @@
"Custom background" : "Користувацьке тло",
"Default background" : "Типове тло",
"Change color" : "Змінити колір",
+ "No background" : "Без фону",
"Select a background from your files" : "Виберіть зображення тла з ваших файлів",
"Theme selection is enforced" : "Вибір теми виконується примусово",
"Select a custom color" : "Виберіть власний колір",
diff --git a/apps/updatenotification/l10n/de.js b/apps/updatenotification/l10n/de.js
index 6ca2c753f76..9d34126f367 100644
--- a/apps/updatenotification/l10n/de.js
+++ b/apps/updatenotification/l10n/de.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"Update channel:" : "Update-Kanal:",
"You can always update to a newer version. But you can never downgrade to a more stable version." : "Es kann immer auf eine neuere Version aktualisiert werden. Jedoch kann kein Downgrade auf eine stabilere Version erfolgen. ",
"Notify members of the following groups about available updates:" : "Informiere die Mitglieder der folgenden Gruppen über verfügbare Updates:",
+ "No groups" : "Keine Gruppen",
"Only notifications for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.",
"The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.",
diff --git a/apps/updatenotification/l10n/de.json b/apps/updatenotification/l10n/de.json
index 092f58953fc..ad011ea4362 100644
--- a/apps/updatenotification/l10n/de.json
+++ b/apps/updatenotification/l10n/de.json
@@ -27,6 +27,7 @@
"Update channel:" : "Update-Kanal:",
"You can always update to a newer version. But you can never downgrade to a more stable version." : "Es kann immer auf eine neuere Version aktualisiert werden. Jedoch kann kein Downgrade auf eine stabilere Version erfolgen. ",
"Notify members of the following groups about available updates:" : "Informiere die Mitglieder der folgenden Gruppen über verfügbare Updates:",
+ "No groups" : "Keine Gruppen",
"Only notifications for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.",
"The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.",
diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js
index c4cd0eae870..6bbef46b224 100644
--- a/apps/user_ldap/l10n/de.js
+++ b/apps/user_ldap/l10n/de.js
@@ -183,6 +183,25 @@ OC.L10N.register(
"Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfalls trage ein LDAP/AD-Attribut ein.",
"\"$home\" Placeholder Field" : "\"$home\" Platzhalter-Feld",
"$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in der Konfiguration eines extern angeschlossenen Speichers wird mit dem Wert des angegebenen Attributs ersetzt",
+ "User Profile Attributes" : "Benutzerprofilattribute",
+ "Phone Field" : "Telefonfeld",
+ "User profile Phone will be set from the specified attribute" : "Benutzerprofil Telefon wird aus dem angegebenen Attribut festgelegt",
+ "Website Field" : "Webseiten-Feld",
+ "User profile Website will be set from the specified attribute" : "Benutzerprofil Webseite wird aus dem angegebenen Attribut festgelegt",
+ "Address Field" : "Adressfeld",
+ "User profile Address will be set from the specified attribute" : "Benutzerprofil Adresse wird aus dem angegebenen Attribut festgelegt",
+ "Twitter Field" : "Twitter-Feld",
+ "User profile Twitter will be set from the specified attribute" : "Benutzerprofil Twitter wird aus dem angegebenen Attribut festgelegt",
+ "Fediverse Field" : "Fediverse-Feld",
+ "User profile Fediverse will be set from the specified attribute" : "Benutzerprofil Fediverse wird aus dem angegebenen Attribut festgelegt",
+ "Organisation Field" : "Organisationsfeld",
+ "User profile Organisation will be set from the specified attribute" : "Benutzerprofil Organisation wird aus dem angegebenen Attribut festgelegt",
+ "Role Field" : "Rollenfeld",
+ "User profile Role will be set from the specified attribute" : "Benutzerprofil Rolle wird anhand des angegebenen Attributs festgelegt\n ",
+ "Headline Field" : "Überschriftenfeld",
+ "User profile Headline will be set from the specified attribute" : "Benutzerprofil Überschrift wird aus dem angegebenen Attribut festgelegt",
+ "Biography Field" : "Biografisches Feld",
+ "User profile Biography will be set from the specified attribute" : "Benutzerprofil Biografie wird aus dem angegebenen Attribut festgelegt",
"Internal Username" : "Interner Benutzername",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Standardmäßig wird der interne Benutzername aus dem UUID-Attribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [a-zA-Z0-9_.@-]. Andere Zeichen werden durch ihre ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwendet, um den Benutzer intern zu identifizieren. Er ist außerdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Beispiel für alle DAV-Dienste. Mit dieser Einstellung kann das Standardverhalten geändert werden. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus. Für die Standardeinstellung lasse das Eingabefeld leer.",
"Internal Username Attribute:" : "Attribut für interne Benutzernamen:",
diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json
index 1070e4dadf1..4fe9c38fe2b 100644
--- a/apps/user_ldap/l10n/de.json
+++ b/apps/user_ldap/l10n/de.json
@@ -181,6 +181,25 @@
"Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfalls trage ein LDAP/AD-Attribut ein.",
"\"$home\" Placeholder Field" : "\"$home\" Platzhalter-Feld",
"$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home in der Konfiguration eines extern angeschlossenen Speichers wird mit dem Wert des angegebenen Attributs ersetzt",
+ "User Profile Attributes" : "Benutzerprofilattribute",
+ "Phone Field" : "Telefonfeld",
+ "User profile Phone will be set from the specified attribute" : "Benutzerprofil Telefon wird aus dem angegebenen Attribut festgelegt",
+ "Website Field" : "Webseiten-Feld",
+ "User profile Website will be set from the specified attribute" : "Benutzerprofil Webseite wird aus dem angegebenen Attribut festgelegt",
+ "Address Field" : "Adressfeld",
+ "User profile Address will be set from the specified attribute" : "Benutzerprofil Adresse wird aus dem angegebenen Attribut festgelegt",
+ "Twitter Field" : "Twitter-Feld",
+ "User profile Twitter will be set from the specified attribute" : "Benutzerprofil Twitter wird aus dem angegebenen Attribut festgelegt",
+ "Fediverse Field" : "Fediverse-Feld",
+ "User profile Fediverse will be set from the specified attribute" : "Benutzerprofil Fediverse wird aus dem angegebenen Attribut festgelegt",
+ "Organisation Field" : "Organisationsfeld",
+ "User profile Organisation will be set from the specified attribute" : "Benutzerprofil Organisation wird aus dem angegebenen Attribut festgelegt",
+ "Role Field" : "Rollenfeld",
+ "User profile Role will be set from the specified attribute" : "Benutzerprofil Rolle wird anhand des angegebenen Attributs festgelegt\n ",
+ "Headline Field" : "Überschriftenfeld",
+ "User profile Headline will be set from the specified attribute" : "Benutzerprofil Überschrift wird aus dem angegebenen Attribut festgelegt",
+ "Biography Field" : "Biografisches Feld",
+ "User profile Biography will be set from the specified attribute" : "Benutzerprofil Biografie wird aus dem angegebenen Attribut festgelegt",
"Internal Username" : "Interner Benutzername",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "Standardmäßig wird der interne Benutzername aus dem UUID-Attribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [a-zA-Z0-9_.@-]. Andere Zeichen werden durch ihre ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwendet, um den Benutzer intern zu identifizieren. Er ist außerdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Beispiel für alle DAV-Dienste. Mit dieser Einstellung kann das Standardverhalten geändert werden. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus. Für die Standardeinstellung lasse das Eingabefeld leer.",
"Internal Username Attribute:" : "Attribut für interne Benutzernamen:",
diff --git a/apps/user_status/l10n/cs.js b/apps/user_status/l10n/cs.js
index b29a26c9743..4849b1682ec 100644
--- a/apps/user_status/l10n/cs.js
+++ b/apps/user_status/l10n/cs.js
@@ -12,6 +12,7 @@ OC.L10N.register(
"View profile" : "Zobrazit profil ",
"Clear status after" : "Vyčistit stav po uplynutí",
"What is your status?" : "Jaký je váš stav?",
+ "Previously set" : "Dříve nastavené",
"Set status" : "Nastavit stav",
"Online status" : "Stav online",
"Status message" : "Stavová zpráva",
@@ -19,6 +20,7 @@ OC.L10N.register(
"Set status message" : "Nastavit stavovou zprávu",
"There was an error saving the status" : "Došlo k chybě při ukládání stavu",
"There was an error clearing the status" : "Při čištění stavu došlo k chybě",
+ "There was an error reverting the status" : "Při vracení stavu nazpět došlo k chybě",
"No recent status changes" : "Žádné nedávné změny stavu",
"Away" : "Pryč",
"Do not disturb" : "Nerušit",
diff --git a/apps/user_status/l10n/cs.json b/apps/user_status/l10n/cs.json
index 53df7e74ada..16331053d55 100644
--- a/apps/user_status/l10n/cs.json
+++ b/apps/user_status/l10n/cs.json
@@ -10,6 +10,7 @@
"View profile" : "Zobrazit profil ",
"Clear status after" : "Vyčistit stav po uplynutí",
"What is your status?" : "Jaký je váš stav?",
+ "Previously set" : "Dříve nastavené",
"Set status" : "Nastavit stav",
"Online status" : "Stav online",
"Status message" : "Stavová zpráva",
@@ -17,6 +18,7 @@
"Set status message" : "Nastavit stavovou zprávu",
"There was an error saving the status" : "Došlo k chybě při ukládání stavu",
"There was an error clearing the status" : "Při čištění stavu došlo k chybě",
+ "There was an error reverting the status" : "Při vracení stavu nazpět došlo k chybě",
"No recent status changes" : "Žádné nedávné změny stavu",
"Away" : "Pryč",
"Do not disturb" : "Nerušit",
diff --git a/apps/user_status/l10n/de.js b/apps/user_status/l10n/de.js
index 88b2f32e616..85215eced22 100644
--- a/apps/user_status/l10n/de.js
+++ b/apps/user_status/l10n/de.js
@@ -12,13 +12,20 @@ OC.L10N.register(
"View profile" : "Profil ansehen",
"Clear status after" : "Status löschen nach",
"What is your status?" : "Wie ist dein Status?",
+ "Previously set" : "Zuvor eingestellt",
+ "Reset status" : "Status zurücksetzen",
"Set status" : "Status setzen",
"Online status" : "Online-Status",
"Status message" : "Statusnachricht",
+ "Your status was set automatically" : "Dein Status wurde automatisch gesetzt",
"Clear status message" : "Statusnachricht löschen",
"Set status message" : "Statusnachricht setzen",
+ "Reset status to \"{icon} {message}\"" : "Status auf \"{icon} {message}\" zurücksetzen",
+ "Reset status to \"{message}\"" : "Status auf \"{message}\" zurücksetzen",
+ "Reset status to \"{icon}\"" : "Status auf \"{icon}\" zurücksetzen",
"There was an error saving the status" : "Es gab einen Fehler beim Speichern des Status",
"There was an error clearing the status" : "Es gab einen Fehler beim Löschen des Status",
+ "There was an error reverting the status" : "Es ist ein Fehler beim Zurücksetzen des Status aufgetreten",
"No recent status changes" : "Keine kürzlichen Statusänderungen",
"Away" : "Abwesend",
"Do not disturb" : "Bitte nicht stören",
diff --git a/apps/user_status/l10n/de.json b/apps/user_status/l10n/de.json
index cda177d1adc..239437df1a1 100644
--- a/apps/user_status/l10n/de.json
+++ b/apps/user_status/l10n/de.json
@@ -10,13 +10,20 @@
"View profile" : "Profil ansehen",
"Clear status after" : "Status löschen nach",
"What is your status?" : "Wie ist dein Status?",
+ "Previously set" : "Zuvor eingestellt",
+ "Reset status" : "Status zurücksetzen",
"Set status" : "Status setzen",
"Online status" : "Online-Status",
"Status message" : "Statusnachricht",
+ "Your status was set automatically" : "Dein Status wurde automatisch gesetzt",
"Clear status message" : "Statusnachricht löschen",
"Set status message" : "Statusnachricht setzen",
+ "Reset status to \"{icon} {message}\"" : "Status auf \"{icon} {message}\" zurücksetzen",
+ "Reset status to \"{message}\"" : "Status auf \"{message}\" zurücksetzen",
+ "Reset status to \"{icon}\"" : "Status auf \"{icon}\" zurücksetzen",
"There was an error saving the status" : "Es gab einen Fehler beim Speichern des Status",
"There was an error clearing the status" : "Es gab einen Fehler beim Löschen des Status",
+ "There was an error reverting the status" : "Es ist ein Fehler beim Zurücksetzen des Status aufgetreten",
"No recent status changes" : "Keine kürzlichen Statusänderungen",
"Away" : "Abwesend",
"Do not disturb" : "Bitte nicht stören",
diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml
index ac3c786f5a6..88720fa5b0c 100644
--- a/build/psalm-baseline.xml
+++ b/build/psalm-baseline.xml
@@ -90,9 +90,6 @@
<InvalidArgument occurrences="1">
<code>CalendarDeletionDefaultUpdaterListener::class</code>
</InvalidArgument>
- <UndefinedInterfaceMethod occurrences="1">
- <code>getAppDataDir</code>
- </UndefinedInterfaceMethod>
</file>
<file src="apps/dav/lib/CalDAV/BirthdayService.php">
<UndefinedMethod occurrences="2">
@@ -1060,12 +1057,6 @@
<code>$this-&gt;request-&gt;server</code>
</NoInterfaceProperties>
</file>
- <file src="apps/oauth2/lib/Db/AccessTokenMapper.php">
- <InvalidCatch occurrences="1"/>
- </file>
- <file src="apps/oauth2/lib/Db/ClientMapper.php">
- <InvalidCatch occurrences="2"/>
- </file>
<file src="apps/provisioning_api/lib/Controller/UsersController.php">
<TypeDoesNotContainNull occurrences="2">
<code>$groupid === null</code>
@@ -1650,14 +1641,6 @@
<code>$this-&gt;request-&gt;server</code>
</NoInterfaceProperties>
</file>
- <file src="lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php">
- <InvalidScalarArgument occurrences="4">
- <code>$anonLimit</code>
- <code>$anonPeriod</code>
- <code>$userLimit</code>
- <code>$userPeriod</code>
- </InvalidScalarArgument>
- </file>
<file src="lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php">
<NoInterfaceProperties occurrences="1">
<code>$this-&gt;request-&gt;server</code>
@@ -1728,9 +1711,6 @@
<code>$provider['provider_id']</code>
</InvalidArrayAccess>
</file>
- <file src="lib/private/Authentication/WebAuthn/CredentialRepository.php">
- <InvalidCatch occurrences="2"/>
- </file>
<file src="lib/private/BackgroundJob/QueuedJob.php">
<MoreSpecificImplementedParamType occurrences="1">
<code>$jobList</code>
diff --git a/core/l10n/bg.js b/core/l10n/bg.js
index a5bd0e25413..847d3b5d176 100644
--- a/core/l10n/bg.js
+++ b/core/l10n/bg.js
@@ -309,7 +309,6 @@ OC.L10N.register(
"The profile does not exist." : "Профилът не съществува.",
"Back to %s" : "Обратно към %s",
"Page not found" : "Страницата не е намерена",
- "The page could not be found on the server." : "Страницата не е намерена на сървъра.",
"Too many requests" : "Твърде много заявки",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Имаше твърде много заявки от вашата мрежа. Опитайте отново по-късно или се свържете с вашия администратор, ако това е грешка.",
"Error" : "Грешка",
@@ -433,6 +432,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Свържи двустепенно удостоверяване",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Изглежда, че използвате 32-битова PHP версия. Приложението Nextcloud се нуждае от 64 бита, за да работи добре. Моля, надстройте вашата операционна система и PHP до 64 бита! За повече подробности прочетете {linkstart}страницата с документация за това ↗{linkend}.",
"Press enter to start searching" : "Натиснете въведи, за начало на търсенето",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Моля, използвайте програмата за актуализиране от командния ред, тъй като актуализирането чрез браузъра е забранено в config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Моля, използвайте програмата за актуализиране от командния ред, тъй като актуализирането чрез браузъра е забранено в config.php.",
+ "The page could not be found on the server." : "Страницата не е намерена на сървъра."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/bg.json b/core/l10n/bg.json
index dc078909cac..e9db06e5ad9 100644
--- a/core/l10n/bg.json
+++ b/core/l10n/bg.json
@@ -307,7 +307,6 @@
"The profile does not exist." : "Профилът не съществува.",
"Back to %s" : "Обратно към %s",
"Page not found" : "Страницата не е намерена",
- "The page could not be found on the server." : "Страницата не е намерена на сървъра.",
"Too many requests" : "Твърде много заявки",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Имаше твърде много заявки от вашата мрежа. Опитайте отново по-късно или се свържете с вашия администратор, ако това е грешка.",
"Error" : "Грешка",
@@ -431,6 +430,7 @@
"Setup two-factor authentication" : "Свържи двустепенно удостоверяване",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Изглежда, че използвате 32-битова PHP версия. Приложението Nextcloud се нуждае от 64 бита, за да работи добре. Моля, надстройте вашата операционна система и PHP до 64 бита! За повече подробности прочетете {linkstart}страницата с документация за това ↗{linkend}.",
"Press enter to start searching" : "Натиснете въведи, за начало на търсенето",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Моля, използвайте програмата за актуализиране от командния ред, тъй като актуализирането чрез браузъра е забранено в config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Моля, използвайте програмата за актуализиране от командния ред, тъй като актуализирането чрез браузъра е забранено в config.php.",
+ "The page could not be found on the server." : "Страницата не е намерена на сървъра."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/ca.js b/core/l10n/ca.js
index 0959cba0578..255a49e859b 100644
--- a/core/l10n/ca.js
+++ b/core/l10n/ca.js
@@ -302,7 +302,6 @@ OC.L10N.register(
"The profile does not exist." : "El perfil no existeix.",
"Back to %s" : "Torna a %s",
"Page not found" : "Pàgina no trobada",
- "The page could not be found on the server." : "No s'ha pogut trobar la pàgina al servidor.",
"Too many requests" : "Hi ha massa sol·licituds",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Hi havia massa sol·licituds de la seva xarxa. Reintentar més tard o contactar amb l'administrador si això és un error.",
"Error" : "Error",
@@ -426,6 +425,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Configura l'autenticació de doble factor",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Sembla que esteu executant una versió PHP de 32 bits. Nextcloud necessita 64 bits per funcionar bé. Si us plau, actualitzeu el vostre sistema operatiu i PHP a 64 bits! Per obtenir més detalls, llegiu {linkstart}la pàgina de documentació sobre això ↗{linkend}.",
"Press enter to start searching" : "Premeu Retorn per a iniciar la cerca",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Si us plau, utilitzeu l'actualitzador de línia d'ordres ja que l'actualització via navegador web està deshabilitada al vostre fitxer config.php"
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Si us plau, utilitzeu l'actualitzador de línia d'ordres ja que l'actualització via navegador web està deshabilitada al vostre fitxer config.php",
+ "The page could not be found on the server." : "No s'ha pogut trobar la pàgina al servidor."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/ca.json b/core/l10n/ca.json
index 3b505c96235..0dbfcc42a64 100644
--- a/core/l10n/ca.json
+++ b/core/l10n/ca.json
@@ -300,7 +300,6 @@
"The profile does not exist." : "El perfil no existeix.",
"Back to %s" : "Torna a %s",
"Page not found" : "Pàgina no trobada",
- "The page could not be found on the server." : "No s'ha pogut trobar la pàgina al servidor.",
"Too many requests" : "Hi ha massa sol·licituds",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Hi havia massa sol·licituds de la seva xarxa. Reintentar més tard o contactar amb l'administrador si això és un error.",
"Error" : "Error",
@@ -424,6 +423,7 @@
"Setup two-factor authentication" : "Configura l'autenticació de doble factor",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Sembla que esteu executant una versió PHP de 32 bits. Nextcloud necessita 64 bits per funcionar bé. Si us plau, actualitzeu el vostre sistema operatiu i PHP a 64 bits! Per obtenir més detalls, llegiu {linkstart}la pàgina de documentació sobre això ↗{linkend}.",
"Press enter to start searching" : "Premeu Retorn per a iniciar la cerca",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Si us plau, utilitzeu l'actualitzador de línia d'ordres ja que l'actualització via navegador web està deshabilitada al vostre fitxer config.php"
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Si us plau, utilitzeu l'actualitzador de línia d'ordres ja que l'actualització via navegador web està deshabilitada al vostre fitxer config.php",
+ "The page could not be found on the server." : "No s'ha pogut trobar la pàgina al servidor."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/cs.js b/core/l10n/cs.js
index 761fbb373da..1ea7521d91a 100644
--- a/core/l10n/cs.js
+++ b/core/l10n/cs.js
@@ -205,6 +205,7 @@ OC.L10N.register(
"Load more results" : "Načíst další výsledky",
"Search" : "Hledat",
"No results for {query}" : "Pro {query} nic nenalezeno",
+ "Press Enter to start searching" : "Vyhledávání zahájíte stisknutím klávesy Enter",
"An error occurred while searching for {type}" : "Došlo k chybě při hledání pro {type}",
"_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["Aby bylo možné vyhledávat, zadejte alespoň {minSearchLength} znak","Aby bylo možné vyhledávat, zadejte alespoň {minSearchLength} znaky","Aby bylo možné vyhledávat, zadejte alespoň {minSearchLength} znaků","Aby bylo možné vyhledávat, zadejte alespoň {minSearchLength} znaky"],
"This browser is not supported" : "Tento prohlížeč není podporován",
@@ -305,7 +306,6 @@ OC.L10N.register(
"The profile does not exist." : "Profil neexistuje.",
"Back to %s" : "Zpět na %s",
"Page not found" : "Stránka nenalezena",
- "The page could not be found on the server." : "Stránka nebyla na serveru nalezena.",
"Too many requests" : "Příliš mnoho požadavků",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Z vaší sítě bylo příliš mnoho požadavků. Zkuste to později nebo (pokud je toto chyba) se obraťte na svého správce.",
"Error" : "Chyba",
@@ -429,6 +429,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Nastavit dvoufázové ověřování",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Zdá se, že provozujete 32bitovou verzi PHP. Aby správně fungoval, potřebuje Nextcloud 64bit. Přejděte na 64bit instalaci operačního systému a PHP! Bližší podrobnosti naleznete {linkstart}na stránce v dokumentaci ↗{linkend}.",
"Press enter to start searching" : "Vyhledávání zahájíte stisknutím klávesy Enter",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Zaktualizujte z příkazového řádku, protože aktualizování z webového prohlížeče je vypnuté ve vašem config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Zaktualizujte z příkazového řádku, protože aktualizování z webového prohlížeče je vypnuté ve vašem config.php.",
+ "The page could not be found on the server." : "Stránka nebyla na serveru nalezena."
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
diff --git a/core/l10n/cs.json b/core/l10n/cs.json
index 90f11b077c9..975139e08f0 100644
--- a/core/l10n/cs.json
+++ b/core/l10n/cs.json
@@ -203,6 +203,7 @@
"Load more results" : "Načíst další výsledky",
"Search" : "Hledat",
"No results for {query}" : "Pro {query} nic nenalezeno",
+ "Press Enter to start searching" : "Vyhledávání zahájíte stisknutím klávesy Enter",
"An error occurred while searching for {type}" : "Došlo k chybě při hledání pro {type}",
"_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["Aby bylo možné vyhledávat, zadejte alespoň {minSearchLength} znak","Aby bylo možné vyhledávat, zadejte alespoň {minSearchLength} znaky","Aby bylo možné vyhledávat, zadejte alespoň {minSearchLength} znaků","Aby bylo možné vyhledávat, zadejte alespoň {minSearchLength} znaky"],
"This browser is not supported" : "Tento prohlížeč není podporován",
@@ -303,7 +304,6 @@
"The profile does not exist." : "Profil neexistuje.",
"Back to %s" : "Zpět na %s",
"Page not found" : "Stránka nenalezena",
- "The page could not be found on the server." : "Stránka nebyla na serveru nalezena.",
"Too many requests" : "Příliš mnoho požadavků",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Z vaší sítě bylo příliš mnoho požadavků. Zkuste to později nebo (pokud je toto chyba) se obraťte na svého správce.",
"Error" : "Chyba",
@@ -427,6 +427,7 @@
"Setup two-factor authentication" : "Nastavit dvoufázové ověřování",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Zdá se, že provozujete 32bitovou verzi PHP. Aby správně fungoval, potřebuje Nextcloud 64bit. Přejděte na 64bit instalaci operačního systému a PHP! Bližší podrobnosti naleznete {linkstart}na stránce v dokumentaci ↗{linkend}.",
"Press enter to start searching" : "Vyhledávání zahájíte stisknutím klávesy Enter",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Zaktualizujte z příkazového řádku, protože aktualizování z webového prohlížeče je vypnuté ve vašem config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Zaktualizujte z příkazového řádku, protože aktualizování z webového prohlížeče je vypnuté ve vašem config.php.",
+ "The page could not be found on the server." : "Stránka nebyla na serveru nalezena."
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
} \ No newline at end of file
diff --git a/core/l10n/da.js b/core/l10n/da.js
index 3ef3554b4f1..aa870ecca8e 100644
--- a/core/l10n/da.js
+++ b/core/l10n/da.js
@@ -297,7 +297,6 @@ OC.L10N.register(
"The profile does not exist." : "Profilen eksisterer ikke.",
"Back to %s" : "Tilbage til %s",
"Page not found" : "Siden blev ikke fundet",
- "The page could not be found on the server." : "Siden kunne ikke findes på serveren.",
"Too many requests" : "For mange resultater",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Der har været for mange forespørgsmåler fra dit netværk. Forsøg igen senere eller kontakt din administrator hvis dette er en fejl.",
"Error" : "Fejl",
@@ -420,6 +419,7 @@ OC.L10N.register(
"Contacts menu" : "Menuen kontakter",
"Setup two-factor authentication" : "Opsæt to-faktor godkendelse",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Det ser ud til, at du kører en 32-bit PHP-version. Nextcloud har brug for 64-bit for at køre godt. Opgrader venligst dit OS og PHP til 64-bit! For yderligere detaljer læs {linkstart}dokumentationssiden om dette ↗{linkend}.",
- "Press enter to start searching" : "Tast retur for at starte søgning"
+ "Press enter to start searching" : "Tast retur for at starte søgning",
+ "The page could not be found on the server." : "Siden kunne ikke findes på serveren."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/da.json b/core/l10n/da.json
index be5675d46fd..e54ec60291c 100644
--- a/core/l10n/da.json
+++ b/core/l10n/da.json
@@ -295,7 +295,6 @@
"The profile does not exist." : "Profilen eksisterer ikke.",
"Back to %s" : "Tilbage til %s",
"Page not found" : "Siden blev ikke fundet",
- "The page could not be found on the server." : "Siden kunne ikke findes på serveren.",
"Too many requests" : "For mange resultater",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Der har været for mange forespørgsmåler fra dit netværk. Forsøg igen senere eller kontakt din administrator hvis dette er en fejl.",
"Error" : "Fejl",
@@ -418,6 +417,7 @@
"Contacts menu" : "Menuen kontakter",
"Setup two-factor authentication" : "Opsæt to-faktor godkendelse",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Det ser ud til, at du kører en 32-bit PHP-version. Nextcloud har brug for 64-bit for at køre godt. Opgrader venligst dit OS og PHP til 64-bit! For yderligere detaljer læs {linkstart}dokumentationssiden om dette ↗{linkend}.",
- "Press enter to start searching" : "Tast retur for at starte søgning"
+ "Press enter to start searching" : "Tast retur for at starte søgning",
+ "The page could not be found on the server." : "Siden kunne ikke findes på serveren."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/de.js b/core/l10n/de.js
index 627ef1793fe..52efb4bbe96 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -39,6 +39,9 @@ OC.L10N.register(
"Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Klicke zum Zurücksetzen des Passworts auf die folgende Schaltfläche. Wenn du das Zurücksetzen des Passworts nicht angefordert hast, ignoriere diese E-Mail.",
"Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Klicke zum Zurücksetzen des Passworts auf den folgenden Link. Wenn du das Zurücksetzen des Passworts nicht angefordert hast, ignoriere diese E-Mail.",
"Reset your password" : "Setze dein Passwort zurück",
+ "No translation provider available" : "Kein Übersetzungsanbieter verfügbar",
+ "Could not detect language" : "Sprache konnte nicht erkannt werden",
+ "Unable to translate" : "Kann nicht übersetzt werden",
"Nextcloud Server" : "Nextcloud-Server",
"Some of your link shares have been removed" : "Einige der geteilten Freigaben wurden entfernt",
"Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Aufgrund eines Sicherheitsfehlers mussten einige der geteilten Freigaben entfernt werden. Weitere Informationen im Link.",
@@ -78,6 +81,7 @@ OC.L10N.register(
"Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Deine Datenbank läuft nicht mit der Transaktionsisolationsstufe \"READ COMMITED\". Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.",
"The PHP module \"fileinfo\" is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "Das PHP-Modul 'fileinfo' fehlt. Es empfiehlt sich dringend, das Modul zu aktivieren, um bestmögliche Ergebnisse bei der MIME-Dateityp-Erkennung zu erhalten. ",
"Transactional file locking is disabled, this might lead to issues with race conditions. Enable \"filelocking.enabled\" in config.php to avoid these problems. See the {linkstart}documentation ↗{linkend} for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. Aktiviere 'filelocking.enabled' in der config.php, um diese Probleme zu vermeiden. Weitere Informationen findest du in unserer {linkstart}Documentation ↗{linkend}.",
+ "The database is used for transactional file locking. To enhance performance, please configure memcache, if available. See the {linkstart}documentation ↗{linkend} for more information." : "Die Datenbank wird zum Sperren von Transaktionsdateien verwendet. Um die Leistung zu verbessern, richte bitte, sofern verfügbar, Memcache ein. Weitere Informationen findest du in der {linkstart}Dokumentation ↗{linkend}.",
"Please make sure to set the \"overwrite.cli.url\" option in your config.php file to the URL that your users mainly use to access this Nextcloud. Suggestion: \"{suggestedOverwriteCliURL}\". Otherwise there might be problems with the URL generation via cron. (It is possible though that the suggested URL is not the URL that your users mainly use to access this Nextcloud. Best is to double check this in any case.)" : "Bitte stelle sicher, dass du die Option „overwrite.cli.url“ in deiner config.php-Datei auf die URL setzt, die deine Benutzer hauptsächlich verwenden, um auf diese Nextcloud zuzugreifen. Vorschlag: \"{suggestedOverwriteCliURL}\". Andernfalls kann es zu Problemen bei der URL-Generierung per Cron kommen. (Es ist jedoch möglich, dass die vorgeschlagene URL nicht die URL ist, die deine Benutzer hauptsächlich verwenden, um auf diese Nextcloud zuzugreifen. Am besten überprüfst du dies in jedem Fall.)",
"Your installation has no default phone region set. This is required to validate phone numbers in the profile settings without a country code. To allow numbers without a country code, please add \"default_phone_region\" with the respective {linkstart}ISO 3166-1 code ↗{linkend} of the region to your config file." : "Für deine Installation ist keine Standard-Telefonregion festgelegt. Dies ist erforderlich, um Telefonnummern in den Profileinstellungen ohne Ländercode überprüfen zu können. Um Nummern ohne Ländercode zuzulassen, füge bitte \"default_phone_region\" mit dem entsprechenden {linkstart}ISO 3166-1-Code ↗{linkend} der gewünschten Region hinzu.",
"It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten: ",
@@ -87,6 +91,7 @@ OC.L10N.register(
"No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen findest du in unserer {linkstart}Dokumentation ↗{linkend}.",
"No suitable source for randomness found by PHP which is highly discouraged for security reasons. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Von PHP wurde keine geeignete Quelle für Zufälligkeit gefunden, aus Sicht der Sicherheit ist dies bedenklich. Weitere Informationen sind in der {linkstart}Dokumentation ↗{linkend} zu finden.",
"You are currently running PHP {version}. Upgrade your PHP version to take advantage of {linkstart}performance and security updates provided by the PHP Group ↗{linkend} as soon as your distribution supports it." : "Du verwendest im Moment PHP {version}. Wir empfehlen ein Upgrade deiner PHP Version, um die {linkstart}Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden↗{linkend}, sobald Deine Distribution diese unterstützt.",
+ "PHP 8.0 is now deprecated in Nextcloud 27. Nextcloud 28 may require at least PHP 8.1. Please upgrade to {linkstart}one of the officially supported PHP versions provided by the PHP Group ↗{linkend} as soon as possible." : "PHP 8.0 ist jetzt in Nextcloud 27 veraltet. Nextcloud 28 erfordert möglicherweise mindestens PHP 8.1. Bitte aktualisiere so bald wie möglich auf {linkstart}eine der offiziell unterstützten PHP-Versionen, die von der PHP-Gruppe ↗{linkend} bereitgestellt werden.",
"The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If not, this is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Die Reverse-Proxy-Header-Konfiguration ist fehlerhaft oder du greifst auf Nextcloud über einen vertrauenswürdigen Proxy zu. Ist dies nicht der Fall, dann besteht ein Sicherheitsproblem, das einem Angreifer erlaubt, die IP-Adresse, die für Nextcloud sichtbar ist, auszuspähen. Weitere Informationen hierzu finden sich in der {linkstart}Dokumentation ↗{linkend}.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the {linkstart}memcached wiki about both modules ↗{linkend}." : "Memcached ist als distributed cache konfiguriert aber das falsche PHP-Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" jedoch nicht \"memcache\". Im {linkstart}memcached wiki nach beiden Modulen suchen ↗{linkend}.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the {linkstart1}documentation ↗{linkend}. ({linkstart2}List of invalid files…{linkend} / {linkstart3}Rescan…{linkend})" : "Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu beheben findest du in unserer {linkstart1}Dokumentation↗{linkend}. ({linkstart2}Liste der ungültigen Dateien …{linkend} / {linkstart3}Erneut scannen…{linkend})",
@@ -161,6 +166,7 @@ OC.L10N.register(
"Your connection is not secure" : "Deine Verbindung ist nicht sicher",
"Passwordless authentication is only available over a secure connection." : "Anmeldung ohne Passwort ist nur über eine sichere Verbindung möglich",
"Reset password" : "Passwort zurücksetzen",
+ "If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or account name, check your spam/junk folders or ask your local administration for help." : "Sofern dieses Konto existiert, wurde eine Nachricht zum Zurücksetzen des Passworts die hinterlegte E-Mail-Adresse gesendet. Wenn du diese E-Mail nicht erhältst, überprüfen deine E-Mail-Adresse und/oder deinen Kontonamen sowie deinen Spam-/Junk-Ordner oder bitte deine lokale Administration um Hilfe.",
"Couldn't send reset email. Please contact your administrator." : "Die E-Mail zum Zurücksetzen konnte nicht gesendet werden. Bitte kontaktiere deinen Administrator.",
"Password cannot be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte wende dich an deinen Administrator.",
"Back to login" : "Zur Anmeldung wechseln",
@@ -202,6 +208,7 @@ OC.L10N.register(
"Load more results" : "Weitere Ergebnisse laden",
"Search" : "Suche",
"No results for {query}" : "Keine Suchergebnisse zu {query}",
+ "Press Enter to start searching" : "Zum Suchen EIngabetaste drücken",
"An error occurred while searching for {type}" : "Es ist ein Fehler beim Suchen nach {type} aufgetreten",
"_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["Bitte gebe {minSearchLength} Zeichen oder mehr ein nach denen gesucht werden soll","Bitte gebe {minSearchLength} Zeichen oder mehr ein nach denen gesucht werden soll"],
"This browser is not supported" : "Dieser Browser wird nicht unterstützt.",
@@ -302,7 +309,6 @@ OC.L10N.register(
"The profile does not exist." : "Das Profil existiert nicht",
"Back to %s" : "Zurück zu %s",
"Page not found" : "Seite nicht gefunden",
- "The page could not be found on the server." : "Die Seite konnte auf dem Server nicht gefunden werden.",
"Too many requests" : "Zu viele Anfragen",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Zu viele Anfragen aus deinem Netzwerk. Versuche es später erneut oder wende dich an deinen Administrator, wenn dies ein Fehler sein sollte.",
"Error" : "Fehler",
@@ -426,6 +432,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Zwei-Faktor-Authentifizierung konfigurieren",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Anscheinend führst du eine 32-Bit-PHP-Version aus. Nextcloud benötigt 64bit, um gut zu laufen. Bitte aktualisiere dein Betriebssystem und PHP auf 64bit! Für weitere Details lese bitte die {linkstart}diesbezügliche Dokumentationsseite ↗{linkend}.",
"Press enter to start searching" : "Zum Suchen Enter drücken",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Bitte den Kommandozeilen-Updater verwenden, die Browser-Aktualisierung ist in der config.php deaktiviert."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Bitte den Kommandozeilen-Updater verwenden, die Browser-Aktualisierung ist in der config.php deaktiviert.",
+ "The page could not be found on the server." : "Die Seite konnte auf dem Server nicht gefunden werden."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/de.json b/core/l10n/de.json
index 2fe8494cc40..b1fce3b81fd 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -37,6 +37,9 @@
"Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Klicke zum Zurücksetzen des Passworts auf die folgende Schaltfläche. Wenn du das Zurücksetzen des Passworts nicht angefordert hast, ignoriere diese E-Mail.",
"Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Klicke zum Zurücksetzen des Passworts auf den folgenden Link. Wenn du das Zurücksetzen des Passworts nicht angefordert hast, ignoriere diese E-Mail.",
"Reset your password" : "Setze dein Passwort zurück",
+ "No translation provider available" : "Kein Übersetzungsanbieter verfügbar",
+ "Could not detect language" : "Sprache konnte nicht erkannt werden",
+ "Unable to translate" : "Kann nicht übersetzt werden",
"Nextcloud Server" : "Nextcloud-Server",
"Some of your link shares have been removed" : "Einige der geteilten Freigaben wurden entfernt",
"Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Aufgrund eines Sicherheitsfehlers mussten einige der geteilten Freigaben entfernt werden. Weitere Informationen im Link.",
@@ -76,6 +79,7 @@
"Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Deine Datenbank läuft nicht mit der Transaktionsisolationsstufe \"READ COMMITED\". Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.",
"The PHP module \"fileinfo\" is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "Das PHP-Modul 'fileinfo' fehlt. Es empfiehlt sich dringend, das Modul zu aktivieren, um bestmögliche Ergebnisse bei der MIME-Dateityp-Erkennung zu erhalten. ",
"Transactional file locking is disabled, this might lead to issues with race conditions. Enable \"filelocking.enabled\" in config.php to avoid these problems. See the {linkstart}documentation ↗{linkend} for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. Aktiviere 'filelocking.enabled' in der config.php, um diese Probleme zu vermeiden. Weitere Informationen findest du in unserer {linkstart}Documentation ↗{linkend}.",
+ "The database is used for transactional file locking. To enhance performance, please configure memcache, if available. See the {linkstart}documentation ↗{linkend} for more information." : "Die Datenbank wird zum Sperren von Transaktionsdateien verwendet. Um die Leistung zu verbessern, richte bitte, sofern verfügbar, Memcache ein. Weitere Informationen findest du in der {linkstart}Dokumentation ↗{linkend}.",
"Please make sure to set the \"overwrite.cli.url\" option in your config.php file to the URL that your users mainly use to access this Nextcloud. Suggestion: \"{suggestedOverwriteCliURL}\". Otherwise there might be problems with the URL generation via cron. (It is possible though that the suggested URL is not the URL that your users mainly use to access this Nextcloud. Best is to double check this in any case.)" : "Bitte stelle sicher, dass du die Option „overwrite.cli.url“ in deiner config.php-Datei auf die URL setzt, die deine Benutzer hauptsächlich verwenden, um auf diese Nextcloud zuzugreifen. Vorschlag: \"{suggestedOverwriteCliURL}\". Andernfalls kann es zu Problemen bei der URL-Generierung per Cron kommen. (Es ist jedoch möglich, dass die vorgeschlagene URL nicht die URL ist, die deine Benutzer hauptsächlich verwenden, um auf diese Nextcloud zuzugreifen. Am besten überprüfst du dies in jedem Fall.)",
"Your installation has no default phone region set. This is required to validate phone numbers in the profile settings without a country code. To allow numbers without a country code, please add \"default_phone_region\" with the respective {linkstart}ISO 3166-1 code ↗{linkend} of the region to your config file." : "Für deine Installation ist keine Standard-Telefonregion festgelegt. Dies ist erforderlich, um Telefonnummern in den Profileinstellungen ohne Ländercode überprüfen zu können. Um Nummern ohne Ländercode zuzulassen, füge bitte \"default_phone_region\" mit dem entsprechenden {linkstart}ISO 3166-1-Code ↗{linkend} der gewünschten Region hinzu.",
"It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten: ",
@@ -85,6 +89,7 @@
"No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen findest du in unserer {linkstart}Dokumentation ↗{linkend}.",
"No suitable source for randomness found by PHP which is highly discouraged for security reasons. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Von PHP wurde keine geeignete Quelle für Zufälligkeit gefunden, aus Sicht der Sicherheit ist dies bedenklich. Weitere Informationen sind in der {linkstart}Dokumentation ↗{linkend} zu finden.",
"You are currently running PHP {version}. Upgrade your PHP version to take advantage of {linkstart}performance and security updates provided by the PHP Group ↗{linkend} as soon as your distribution supports it." : "Du verwendest im Moment PHP {version}. Wir empfehlen ein Upgrade deiner PHP Version, um die {linkstart}Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden↗{linkend}, sobald Deine Distribution diese unterstützt.",
+ "PHP 8.0 is now deprecated in Nextcloud 27. Nextcloud 28 may require at least PHP 8.1. Please upgrade to {linkstart}one of the officially supported PHP versions provided by the PHP Group ↗{linkend} as soon as possible." : "PHP 8.0 ist jetzt in Nextcloud 27 veraltet. Nextcloud 28 erfordert möglicherweise mindestens PHP 8.1. Bitte aktualisiere so bald wie möglich auf {linkstart}eine der offiziell unterstützten PHP-Versionen, die von der PHP-Gruppe ↗{linkend} bereitgestellt werden.",
"The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If not, this is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Die Reverse-Proxy-Header-Konfiguration ist fehlerhaft oder du greifst auf Nextcloud über einen vertrauenswürdigen Proxy zu. Ist dies nicht der Fall, dann besteht ein Sicherheitsproblem, das einem Angreifer erlaubt, die IP-Adresse, die für Nextcloud sichtbar ist, auszuspähen. Weitere Informationen hierzu finden sich in der {linkstart}Dokumentation ↗{linkend}.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the {linkstart}memcached wiki about both modules ↗{linkend}." : "Memcached ist als distributed cache konfiguriert aber das falsche PHP-Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" jedoch nicht \"memcache\". Im {linkstart}memcached wiki nach beiden Modulen suchen ↗{linkend}.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the {linkstart1}documentation ↗{linkend}. ({linkstart2}List of invalid files…{linkend} / {linkstart3}Rescan…{linkend})" : "Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu beheben findest du in unserer {linkstart1}Dokumentation↗{linkend}. ({linkstart2}Liste der ungültigen Dateien …{linkend} / {linkstart3}Erneut scannen…{linkend})",
@@ -159,6 +164,7 @@
"Your connection is not secure" : "Deine Verbindung ist nicht sicher",
"Passwordless authentication is only available over a secure connection." : "Anmeldung ohne Passwort ist nur über eine sichere Verbindung möglich",
"Reset password" : "Passwort zurücksetzen",
+ "If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or account name, check your spam/junk folders or ask your local administration for help." : "Sofern dieses Konto existiert, wurde eine Nachricht zum Zurücksetzen des Passworts die hinterlegte E-Mail-Adresse gesendet. Wenn du diese E-Mail nicht erhältst, überprüfen deine E-Mail-Adresse und/oder deinen Kontonamen sowie deinen Spam-/Junk-Ordner oder bitte deine lokale Administration um Hilfe.",
"Couldn't send reset email. Please contact your administrator." : "Die E-Mail zum Zurücksetzen konnte nicht gesendet werden. Bitte kontaktiere deinen Administrator.",
"Password cannot be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte wende dich an deinen Administrator.",
"Back to login" : "Zur Anmeldung wechseln",
@@ -200,6 +206,7 @@
"Load more results" : "Weitere Ergebnisse laden",
"Search" : "Suche",
"No results for {query}" : "Keine Suchergebnisse zu {query}",
+ "Press Enter to start searching" : "Zum Suchen EIngabetaste drücken",
"An error occurred while searching for {type}" : "Es ist ein Fehler beim Suchen nach {type} aufgetreten",
"_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["Bitte gebe {minSearchLength} Zeichen oder mehr ein nach denen gesucht werden soll","Bitte gebe {minSearchLength} Zeichen oder mehr ein nach denen gesucht werden soll"],
"This browser is not supported" : "Dieser Browser wird nicht unterstützt.",
@@ -300,7 +307,6 @@
"The profile does not exist." : "Das Profil existiert nicht",
"Back to %s" : "Zurück zu %s",
"Page not found" : "Seite nicht gefunden",
- "The page could not be found on the server." : "Die Seite konnte auf dem Server nicht gefunden werden.",
"Too many requests" : "Zu viele Anfragen",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Zu viele Anfragen aus deinem Netzwerk. Versuche es später erneut oder wende dich an deinen Administrator, wenn dies ein Fehler sein sollte.",
"Error" : "Fehler",
@@ -424,6 +430,7 @@
"Setup two-factor authentication" : "Zwei-Faktor-Authentifizierung konfigurieren",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Anscheinend führst du eine 32-Bit-PHP-Version aus. Nextcloud benötigt 64bit, um gut zu laufen. Bitte aktualisiere dein Betriebssystem und PHP auf 64bit! Für weitere Details lese bitte die {linkstart}diesbezügliche Dokumentationsseite ↗{linkend}.",
"Press enter to start searching" : "Zum Suchen Enter drücken",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Bitte den Kommandozeilen-Updater verwenden, die Browser-Aktualisierung ist in der config.php deaktiviert."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Bitte den Kommandozeilen-Updater verwenden, die Browser-Aktualisierung ist in der config.php deaktiviert.",
+ "The page could not be found on the server." : "Die Seite konnte auf dem Server nicht gefunden werden."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index 2f2e24b3a66..2e9558b3e0e 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -166,7 +166,7 @@ OC.L10N.register(
"Your connection is not secure" : "Ihre Verbindung ist nicht sicher",
"Passwordless authentication is only available over a secure connection." : "Anmeldung ohne Passwort ist nur über eine sichere Verbindung möglich",
"Reset password" : "Passwort zurücksetzen",
- "If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or account name, check your spam/junk folders or ask your local administration for help." : "Wenn dieses Konto existiert, wurde eine Nachricht zum Zurücksetzen des Passworts an seine E-Mail-Adresse gesendet. Wenn Sie es nicht erhalten, überprüfen Sie Ihre E-Mail-Adresse und/oder Ihren Kontonamen, überprüfen Sie Ihre Spam-/Junk-Ordner oder bitten Sie Ihre lokale Verwaltung um Hilfe.",
+ "If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or account name, check your spam/junk folders or ask your local administration for help." : "Sofern dieses Konto existiert, wurde eine Nachricht zum Zurücksetzen des Passworts die hinterlegte E-Mail-Adresse gesendet. Wenn Sie diese E-Mail nicht erhalten, überprüfen Sie Ihre E-Mail-Adresse und/oder Ihren Kontonamen sowie Ihren Spam-/Junk-Ordner oder bitten Sie Ihre lokale Administration um Hilfe.",
"Couldn't send reset email. Please contact your administrator." : "Die E-Mail zum Zurücksetzen konnte nicht versendet werden. Bitte kontaktieren Sie Ihre Administration.",
"Password cannot be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.",
"Back to login" : "Zurück zur Anmeldung",
@@ -309,7 +309,6 @@ OC.L10N.register(
"The profile does not exist." : "Das Profil existiert nicht.",
"Back to %s" : "Zurück zu %s",
"Page not found" : "Seite nicht gefunden",
- "The page could not be found on the server." : "Die Seite konnte auf dem Server nicht gefunden werden.",
"Too many requests" : "Zu viele Anfragen",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Zu viele Anfragen aus Ihrem Netzwerk. Versuchen Sie es später erneut oder wenden Sie sich an Ihren Administrator, wenn dies ein Fehler sein sollte.",
"Error" : "Fehler",
@@ -433,6 +432,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Zwei-Faktor-Authentifizierung einrichten",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Sie scheinen eine 32-Bit PHP-Version auszuführen. Nextcloud benötigt 64-Bit, um gut zu laufen. Bitte aktualisieren Sie Ihr Betriebssystem und PHP auf 64-Bit! Für weitere Details lesen Sie die {linkstart}diesbezügliche Dokumentationsseite ↗{linkend}.",
"Press enter to start searching" : "Eingabetaste zum Starten der Suche drücken",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Bitte den Kommandozeilen-Updater verwenden, die Browser-Aktualisierung ist in der config.php deaktiviert."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Bitte den Kommandozeilen-Updater verwenden, die Browser-Aktualisierung ist in der config.php deaktiviert.",
+ "The page could not be found on the server." : "Die Seite konnte auf dem Server nicht gefunden werden."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index 01de83065b7..28365347692 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -164,7 +164,7 @@
"Your connection is not secure" : "Ihre Verbindung ist nicht sicher",
"Passwordless authentication is only available over a secure connection." : "Anmeldung ohne Passwort ist nur über eine sichere Verbindung möglich",
"Reset password" : "Passwort zurücksetzen",
- "If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or account name, check your spam/junk folders or ask your local administration for help." : "Wenn dieses Konto existiert, wurde eine Nachricht zum Zurücksetzen des Passworts an seine E-Mail-Adresse gesendet. Wenn Sie es nicht erhalten, überprüfen Sie Ihre E-Mail-Adresse und/oder Ihren Kontonamen, überprüfen Sie Ihre Spam-/Junk-Ordner oder bitten Sie Ihre lokale Verwaltung um Hilfe.",
+ "If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or account name, check your spam/junk folders or ask your local administration for help." : "Sofern dieses Konto existiert, wurde eine Nachricht zum Zurücksetzen des Passworts die hinterlegte E-Mail-Adresse gesendet. Wenn Sie diese E-Mail nicht erhalten, überprüfen Sie Ihre E-Mail-Adresse und/oder Ihren Kontonamen sowie Ihren Spam-/Junk-Ordner oder bitten Sie Ihre lokale Administration um Hilfe.",
"Couldn't send reset email. Please contact your administrator." : "Die E-Mail zum Zurücksetzen konnte nicht versendet werden. Bitte kontaktieren Sie Ihre Administration.",
"Password cannot be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.",
"Back to login" : "Zurück zur Anmeldung",
@@ -307,7 +307,6 @@
"The profile does not exist." : "Das Profil existiert nicht.",
"Back to %s" : "Zurück zu %s",
"Page not found" : "Seite nicht gefunden",
- "The page could not be found on the server." : "Die Seite konnte auf dem Server nicht gefunden werden.",
"Too many requests" : "Zu viele Anfragen",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Zu viele Anfragen aus Ihrem Netzwerk. Versuchen Sie es später erneut oder wenden Sie sich an Ihren Administrator, wenn dies ein Fehler sein sollte.",
"Error" : "Fehler",
@@ -431,6 +430,7 @@
"Setup two-factor authentication" : "Zwei-Faktor-Authentifizierung einrichten",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Sie scheinen eine 32-Bit PHP-Version auszuführen. Nextcloud benötigt 64-Bit, um gut zu laufen. Bitte aktualisieren Sie Ihr Betriebssystem und PHP auf 64-Bit! Für weitere Details lesen Sie die {linkstart}diesbezügliche Dokumentationsseite ↗{linkend}.",
"Press enter to start searching" : "Eingabetaste zum Starten der Suche drücken",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Bitte den Kommandozeilen-Updater verwenden, die Browser-Aktualisierung ist in der config.php deaktiviert."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Bitte den Kommandozeilen-Updater verwenden, die Browser-Aktualisierung ist in der config.php deaktiviert.",
+ "The page could not be found on the server." : "Die Seite konnte auf dem Server nicht gefunden werden."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/el.js b/core/l10n/el.js
index 91d4cfbd4f0..860a27a1836 100644
--- a/core/l10n/el.js
+++ b/core/l10n/el.js
@@ -265,7 +265,6 @@ OC.L10N.register(
"The profile does not exist." : "Το προφίλ δεν υπάρχει.",
"Back to %s" : "Πίσω στο %s",
"Page not found" : "Δεν βρέθηκε η σελίδα",
- "The page could not be found on the server." : "Δεν ήταν δυνατή η εύρεση της σελίδας στον διακομιστή.",
"Too many requests" : "Πάρα πολλά αιτήματα",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Υπήρχαν πάρα πολλά αιτήματα από το δίκτυό σας. Δοκιμάστε ξανά αργότερα ή επικοινωνήστε με τον διαχειριστή σας εάν πρόκειται για σφάλμα.",
"Error" : "Σφάλμα",
@@ -384,6 +383,7 @@ OC.L10N.register(
"Contacts" : "Επαφές",
"Contacts menu" : "Μενού επαφών",
"Setup two-factor authentication" : "Ρύθμιση ελέγχου ταυτότητας δύο-παραγόντων",
- "Press enter to start searching" : "Πατήστε enter για να ξεκινήσει η αναζήτηση"
+ "Press enter to start searching" : "Πατήστε enter για να ξεκινήσει η αναζήτηση",
+ "The page could not be found on the server." : "Δεν ήταν δυνατή η εύρεση της σελίδας στον διακομιστή."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/el.json b/core/l10n/el.json
index 548bb8645f9..b17c4bcb197 100644
--- a/core/l10n/el.json
+++ b/core/l10n/el.json
@@ -263,7 +263,6 @@
"The profile does not exist." : "Το προφίλ δεν υπάρχει.",
"Back to %s" : "Πίσω στο %s",
"Page not found" : "Δεν βρέθηκε η σελίδα",
- "The page could not be found on the server." : "Δεν ήταν δυνατή η εύρεση της σελίδας στον διακομιστή.",
"Too many requests" : "Πάρα πολλά αιτήματα",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Υπήρχαν πάρα πολλά αιτήματα από το δίκτυό σας. Δοκιμάστε ξανά αργότερα ή επικοινωνήστε με τον διαχειριστή σας εάν πρόκειται για σφάλμα.",
"Error" : "Σφάλμα",
@@ -382,6 +381,7 @@
"Contacts" : "Επαφές",
"Contacts menu" : "Μενού επαφών",
"Setup two-factor authentication" : "Ρύθμιση ελέγχου ταυτότητας δύο-παραγόντων",
- "Press enter to start searching" : "Πατήστε enter για να ξεκινήσει η αναζήτηση"
+ "Press enter to start searching" : "Πατήστε enter για να ξεκινήσει η αναζήτηση",
+ "The page could not be found on the server." : "Δεν ήταν δυνατή η εύρεση της σελίδας στον διακομιστή."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js
index e2bf8d2a844..68bbc5c7b91 100644
--- a/core/l10n/en_GB.js
+++ b/core/l10n/en_GB.js
@@ -309,7 +309,6 @@ OC.L10N.register(
"The profile does not exist." : "The profile does not exist.",
"Back to %s" : "Back to %s",
"Page not found" : "Page not found",
- "The page could not be found on the server." : "The page could not be found on the server.",
"Too many requests" : "Too many requests",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "There were too many requests from your network. Retry later or contact your administrator if this is an error.",
"Error" : "Error",
@@ -433,6 +432,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Setup two-factor authentication",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}.",
"Press enter to start searching" : "Press enter to start searching",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Please use the command line updater because updating via browser is disabled in your config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Please use the command line updater because updating via browser is disabled in your config.php.",
+ "The page could not be found on the server." : "The page could not be found on the server."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json
index 637000df2ac..363de15ff29 100644
--- a/core/l10n/en_GB.json
+++ b/core/l10n/en_GB.json
@@ -307,7 +307,6 @@
"The profile does not exist." : "The profile does not exist.",
"Back to %s" : "Back to %s",
"Page not found" : "Page not found",
- "The page could not be found on the server." : "The page could not be found on the server.",
"Too many requests" : "Too many requests",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "There were too many requests from your network. Retry later or contact your administrator if this is an error.",
"Error" : "Error",
@@ -431,6 +430,7 @@
"Setup two-factor authentication" : "Setup two-factor authentication",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}.",
"Press enter to start searching" : "Press enter to start searching",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Please use the command line updater because updating via browser is disabled in your config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Please use the command line updater because updating via browser is disabled in your config.php.",
+ "The page could not be found on the server." : "The page could not be found on the server."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/es.js b/core/l10n/es.js
index a83de14e126..32e3fbc1e41 100644
--- a/core/l10n/es.js
+++ b/core/l10n/es.js
@@ -309,7 +309,6 @@ OC.L10N.register(
"The profile does not exist." : "El perfil no existe.",
"Back to %s" : "Volver a %s",
"Page not found" : "Página no encontrada",
- "The page could not be found on the server." : "La página no se ha encontrado en el servidor.",
"Too many requests" : "Demasiadas peticiones",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Hubo demasiadas peticiones desde su red. Vuelva a intentarlo más tarde o póngase en contacto con su administrador si se trata de un error.",
"Error" : "Error",
@@ -433,6 +432,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Configurar autenticación de dos factores",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Parece que está ejecutando una versión de PHP de 32 bits. Nextcloud necesita 64 bits para su correcto funcionamiento. ¡Por favor, actualice su sistema operativo y PHP a 64 bits! Puede leer más detalles en {linkstart}la página de documentación correspondiente ↗{linkend}.",
"Press enter to start searching" : "Pulse Intro para iniciar la búsqueda",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Por favor, utilice el actualizador de línea de comandos ya que la actualización vía navegador se encuentra deshabilitado en su config.php"
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Por favor, utilice el actualizador de línea de comandos ya que la actualización vía navegador se encuentra deshabilitado en su config.php",
+ "The page could not be found on the server." : "La página no se ha encontrado en el servidor."
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/core/l10n/es.json b/core/l10n/es.json
index d4917939cc4..8dafabf2780 100644
--- a/core/l10n/es.json
+++ b/core/l10n/es.json
@@ -307,7 +307,6 @@
"The profile does not exist." : "El perfil no existe.",
"Back to %s" : "Volver a %s",
"Page not found" : "Página no encontrada",
- "The page could not be found on the server." : "La página no se ha encontrado en el servidor.",
"Too many requests" : "Demasiadas peticiones",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Hubo demasiadas peticiones desde su red. Vuelva a intentarlo más tarde o póngase en contacto con su administrador si se trata de un error.",
"Error" : "Error",
@@ -431,6 +430,7 @@
"Setup two-factor authentication" : "Configurar autenticación de dos factores",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Parece que está ejecutando una versión de PHP de 32 bits. Nextcloud necesita 64 bits para su correcto funcionamiento. ¡Por favor, actualice su sistema operativo y PHP a 64 bits! Puede leer más detalles en {linkstart}la página de documentación correspondiente ↗{linkend}.",
"Press enter to start searching" : "Pulse Intro para iniciar la búsqueda",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Por favor, utilice el actualizador de línea de comandos ya que la actualización vía navegador se encuentra deshabilitado en su config.php"
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Por favor, utilice el actualizador de línea de comandos ya que la actualización vía navegador se encuentra deshabilitado en su config.php",
+ "The page could not be found on the server." : "La página no se ha encontrado en el servidor."
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/core/l10n/eu.js b/core/l10n/eu.js
index 15139a24468..deb435084c9 100644
--- a/core/l10n/eu.js
+++ b/core/l10n/eu.js
@@ -309,7 +309,6 @@ OC.L10N.register(
"The profile does not exist." : "Profila ez da existitzen",
"Back to %s" : "Itzuli %s(e)ra",
"Page not found" : "Orria ez da aurkitu",
- "The page could not be found on the server." : "Orria ez da aurkitu zerbitzarian.",
"Too many requests" : "Eskaera gehiegi",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Eskaera gehiegi zeuden zure saretik. Saiatu beranduago edo kontaktatu zure administrailearekin hau errorea bada.",
"Error" : "Errorea",
@@ -433,6 +432,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Konfiguratu bi faktoreko autentifikazioa",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Badirudi 32-bit-eko PHP bertsioa exekutatzen ari zarela. Nextcloudek 64-bit behar ditu ondo funtzionatzeko. Eguneratu zure SE eta PHP 64-bit-etara! Xehetasun gehiagorako irakurri {linkstart}honi buruzko dokumentazioa ↗{linkend}.",
"Press enter to start searching" : "Sakatu enter bilaketa hasteko",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Mesedez, erabili komando-lerroko eguneratzailea, arakatzailearen bidez eguneratzea desgaituta dagoelako zure config.php-n."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Mesedez, erabili komando-lerroko eguneratzailea, arakatzailearen bidez eguneratzea desgaituta dagoelako zure config.php-n.",
+ "The page could not be found on the server." : "Orria ez da aurkitu zerbitzarian."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/eu.json b/core/l10n/eu.json
index 822a90743dc..3981bdcb0d3 100644
--- a/core/l10n/eu.json
+++ b/core/l10n/eu.json
@@ -307,7 +307,6 @@
"The profile does not exist." : "Profila ez da existitzen",
"Back to %s" : "Itzuli %s(e)ra",
"Page not found" : "Orria ez da aurkitu",
- "The page could not be found on the server." : "Orria ez da aurkitu zerbitzarian.",
"Too many requests" : "Eskaera gehiegi",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Eskaera gehiegi zeuden zure saretik. Saiatu beranduago edo kontaktatu zure administrailearekin hau errorea bada.",
"Error" : "Errorea",
@@ -431,6 +430,7 @@
"Setup two-factor authentication" : "Konfiguratu bi faktoreko autentifikazioa",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Badirudi 32-bit-eko PHP bertsioa exekutatzen ari zarela. Nextcloudek 64-bit behar ditu ondo funtzionatzeko. Eguneratu zure SE eta PHP 64-bit-etara! Xehetasun gehiagorako irakurri {linkstart}honi buruzko dokumentazioa ↗{linkend}.",
"Press enter to start searching" : "Sakatu enter bilaketa hasteko",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Mesedez, erabili komando-lerroko eguneratzailea, arakatzailearen bidez eguneratzea desgaituta dagoelako zure config.php-n."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Mesedez, erabili komando-lerroko eguneratzailea, arakatzailearen bidez eguneratzea desgaituta dagoelako zure config.php-n.",
+ "The page could not be found on the server." : "Orria ez da aurkitu zerbitzarian."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/fi.js b/core/l10n/fi.js
index 5476d226700..1d8ea65984b 100644
--- a/core/l10n/fi.js
+++ b/core/l10n/fi.js
@@ -268,7 +268,6 @@ OC.L10N.register(
"The profile does not exist." : "Profiilia ei ole olemassa",
"Back to %s" : "Takaisin kohtaan %s",
"Page not found" : "Sivua ei löytynyt",
- "The page could not be found on the server." : "Sivua ei löytynyt palvelimelta.",
"Too many requests" : "Liian monta pyyntöä",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Verkostasi tehtiin liian monta pyyntöä. Yritä myöhemmin uudelleen tai ole yhteydessä ylläpitäjään, jos tämä on mielestäsi virhe.",
"Error" : "Virhe",
@@ -385,6 +384,7 @@ OC.L10N.register(
"Contacts menu" : "Yhteystietovalikko",
"Setup two-factor authentication" : "Määritä kaksivaiheinen tunnistautuminen",
"Press enter to start searching" : "Paina enter aloittaaksesi haun",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Käytä komentorivipäivitintä, koska päivitys selainkäyttöliittymällä on estetty config.php-asetustiedostossa."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Käytä komentorivipäivitintä, koska päivitys selainkäyttöliittymällä on estetty config.php-asetustiedostossa.",
+ "The page could not be found on the server." : "Sivua ei löytynyt palvelimelta."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/fi.json b/core/l10n/fi.json
index 180fa8e5382..0accb2a08de 100644
--- a/core/l10n/fi.json
+++ b/core/l10n/fi.json
@@ -266,7 +266,6 @@
"The profile does not exist." : "Profiilia ei ole olemassa",
"Back to %s" : "Takaisin kohtaan %s",
"Page not found" : "Sivua ei löytynyt",
- "The page could not be found on the server." : "Sivua ei löytynyt palvelimelta.",
"Too many requests" : "Liian monta pyyntöä",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Verkostasi tehtiin liian monta pyyntöä. Yritä myöhemmin uudelleen tai ole yhteydessä ylläpitäjään, jos tämä on mielestäsi virhe.",
"Error" : "Virhe",
@@ -383,6 +382,7 @@
"Contacts menu" : "Yhteystietovalikko",
"Setup two-factor authentication" : "Määritä kaksivaiheinen tunnistautuminen",
"Press enter to start searching" : "Paina enter aloittaaksesi haun",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Käytä komentorivipäivitintä, koska päivitys selainkäyttöliittymällä on estetty config.php-asetustiedostossa."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Käytä komentorivipäivitintä, koska päivitys selainkäyttöliittymällä on estetty config.php-asetustiedostossa.",
+ "The page could not be found on the server." : "Sivua ei löytynyt palvelimelta."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index 68ffc0c8baf..fe048468888 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -302,7 +302,6 @@ OC.L10N.register(
"The profile does not exist." : "Le profile n'existe pas.",
"Back to %s" : "Retour à %s",
"Page not found" : "Page non trouvée",
- "The page could not be found on the server." : "La page n'a pas pu être trouvée sur le serveur.",
"Too many requests" : "Trop de requêtes",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Il y a trop de requêtes depuis votre réseau. Réessayez plus tard ou contactez votre administrateur s'il s'agit d'une erreur.",
"Error" : "Erreur",
@@ -426,6 +425,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Paramétrer l'authentification à double facteur",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Il semble que vous utilisez une version 32-bits de PHP. Nextcloud nécessite une version 64-bits pour bien fonctionner. Merci de mettre à niveau votre système d'exploitation et PHP en 64-bits. Pour plus de détails consultez {linkstart}the documentation page about this ↗{linkend}.",
"Press enter to start searching" : "Appuyez sur Entrée pour démarrer la recherche",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Veuillez utiliser la mise à jour en ligne de commande, car la mise à jour via le navigateur est désactivée dans votre fichier config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Veuillez utiliser la mise à jour en ligne de commande, car la mise à jour via le navigateur est désactivée dans votre fichier config.php.",
+ "The page could not be found on the server." : "La page n'a pas pu être trouvée sur le serveur."
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index 30b6e8adf9c..52dc09d55b2 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -300,7 +300,6 @@
"The profile does not exist." : "Le profile n'existe pas.",
"Back to %s" : "Retour à %s",
"Page not found" : "Page non trouvée",
- "The page could not be found on the server." : "La page n'a pas pu être trouvée sur le serveur.",
"Too many requests" : "Trop de requêtes",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Il y a trop de requêtes depuis votre réseau. Réessayez plus tard ou contactez votre administrateur s'il s'agit d'une erreur.",
"Error" : "Erreur",
@@ -424,6 +423,7 @@
"Setup two-factor authentication" : "Paramétrer l'authentification à double facteur",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Il semble que vous utilisez une version 32-bits de PHP. Nextcloud nécessite une version 64-bits pour bien fonctionner. Merci de mettre à niveau votre système d'exploitation et PHP en 64-bits. Pour plus de détails consultez {linkstart}the documentation page about this ↗{linkend}.",
"Press enter to start searching" : "Appuyez sur Entrée pour démarrer la recherche",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Veuillez utiliser la mise à jour en ligne de commande, car la mise à jour via le navigateur est désactivée dans votre fichier config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Veuillez utiliser la mise à jour en ligne de commande, car la mise à jour via le navigateur est désactivée dans votre fichier config.php.",
+ "The page could not be found on the server." : "La page n'a pas pu être trouvée sur le serveur."
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/core/l10n/gl.js b/core/l10n/gl.js
index e724c3d9e97..ca375c89710 100644
--- a/core/l10n/gl.js
+++ b/core/l10n/gl.js
@@ -309,7 +309,6 @@ OC.L10N.register(
"The profile does not exist." : "O perfil non existe.",
"Back to %s" : "Volver a %s",
"Page not found" : "Non se atopou a páxina",
- "The page could not be found on the server." : "Non se puido atopar a páxina no servidor.",
"Too many requests" : "Demasiadas solicitudes",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Houbo demasiadas solicitudes da súa rede. Volva tentalo máis adiante ou póñase en contacto co seu administrador se se trata dun erro.",
"Error" : "Erro",
@@ -433,6 +432,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Estabelecer a autenticación de dous factores",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Parece que está a executar unha versión de PHP de 32 bits. Nextcloud necesita 64 bits para funcionar ben. Actualiza o teu sistema operativo e PHP a 64 bits. Para obter máis detalles, le {linkstart}a páxina de documentación sobre isto ↗{linkend}.",
"Press enter to start searching" : "Preme Intro para comezar a buscar",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Use o actualizador da liña de comandos porque a actualización a través do navegador está desactivada no seu config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Use o actualizador da liña de comandos porque a actualización a través do navegador está desactivada no seu config.php.",
+ "The page could not be found on the server." : "Non se puido atopar a páxina no servidor."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/gl.json b/core/l10n/gl.json
index c56eb0b8d37..03108135832 100644
--- a/core/l10n/gl.json
+++ b/core/l10n/gl.json
@@ -307,7 +307,6 @@
"The profile does not exist." : "O perfil non existe.",
"Back to %s" : "Volver a %s",
"Page not found" : "Non se atopou a páxina",
- "The page could not be found on the server." : "Non se puido atopar a páxina no servidor.",
"Too many requests" : "Demasiadas solicitudes",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Houbo demasiadas solicitudes da súa rede. Volva tentalo máis adiante ou póñase en contacto co seu administrador se se trata dun erro.",
"Error" : "Erro",
@@ -431,6 +430,7 @@
"Setup two-factor authentication" : "Estabelecer a autenticación de dous factores",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Parece que está a executar unha versión de PHP de 32 bits. Nextcloud necesita 64 bits para funcionar ben. Actualiza o teu sistema operativo e PHP a 64 bits. Para obter máis detalles, le {linkstart}a páxina de documentación sobre isto ↗{linkend}.",
"Press enter to start searching" : "Preme Intro para comezar a buscar",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Use o actualizador da liña de comandos porque a actualización a través do navegador está desactivada no seu config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Use o actualizador da liña de comandos porque a actualización a través do navegador está desactivada no seu config.php.",
+ "The page could not be found on the server." : "Non se puido atopar a páxina no servidor."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/hu.js b/core/l10n/hu.js
index ff358e1aa6b..be19fa04886 100644
--- a/core/l10n/hu.js
+++ b/core/l10n/hu.js
@@ -306,7 +306,6 @@ OC.L10N.register(
"The profile does not exist." : "A profil nem létezik.",
"Back to %s" : "Vissza ide %s",
"Page not found" : "Az oldal nem található",
- "The page could not be found on the server." : "Az oldal nem található a kiszolgálón.",
"Too many requests" : "Túl sok kérés",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Túl sok kérés érkezett a hálózatától. Próbálja újra később, vagy ha ez egy hiba, akkor forduljon a rendszergazdához.",
"Error" : "Hiba",
@@ -430,6 +429,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Kétfaktoros hitelesítés beállítása",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Úgy tűnik, hogy 32 bites PHP verziót használ. A Nextcloud megfelelő futtatásához 64 bites szükséges. Frissítse 64 bitesre az operációs rendszerét és a PHP-ját. További részletekért olvassa el az {linkstart}erről szóló dokumentációs oldalt ↗{linkend}.",
"Press enter to start searching" : "A keresés indításához nyomjon Entert",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Használja a parancssoros frissítőt, mert a böngészőbeli frissítés ki van kapcsolva a config.php fájlban."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Használja a parancssoros frissítőt, mert a böngészőbeli frissítés ki van kapcsolva a config.php fájlban.",
+ "The page could not be found on the server." : "Az oldal nem található a kiszolgálón."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/hu.json b/core/l10n/hu.json
index 46e2dbdaaab..d97a5d0f56d 100644
--- a/core/l10n/hu.json
+++ b/core/l10n/hu.json
@@ -304,7 +304,6 @@
"The profile does not exist." : "A profil nem létezik.",
"Back to %s" : "Vissza ide %s",
"Page not found" : "Az oldal nem található",
- "The page could not be found on the server." : "Az oldal nem található a kiszolgálón.",
"Too many requests" : "Túl sok kérés",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Túl sok kérés érkezett a hálózatától. Próbálja újra később, vagy ha ez egy hiba, akkor forduljon a rendszergazdához.",
"Error" : "Hiba",
@@ -428,6 +427,7 @@
"Setup two-factor authentication" : "Kétfaktoros hitelesítés beállítása",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Úgy tűnik, hogy 32 bites PHP verziót használ. A Nextcloud megfelelő futtatásához 64 bites szükséges. Frissítse 64 bitesre az operációs rendszerét és a PHP-ját. További részletekért olvassa el az {linkstart}erről szóló dokumentációs oldalt ↗{linkend}.",
"Press enter to start searching" : "A keresés indításához nyomjon Entert",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Használja a parancssoros frissítőt, mert a böngészőbeli frissítés ki van kapcsolva a config.php fájlban."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Használja a parancssoros frissítőt, mert a böngészőbeli frissítés ki van kapcsolva a config.php fájlban.",
+ "The page could not be found on the server." : "Az oldal nem található a kiszolgálón."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/it.js b/core/l10n/it.js
index a1526a367f9..0f188081feb 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -290,7 +290,6 @@ OC.L10N.register(
"The profile does not exist." : "Il profilo non esiste.",
"Back to %s" : "Torna a %s",
"Page not found" : "Pagina non trovata",
- "The page could not be found on the server." : "Impossibile trovare la pagina sul server.",
"Too many requests" : "Troppe richieste",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Sono arrivate troppe richieste dalla tua rete. Riprova più tardi o contatta il tuo amministratore se questo è un errore.",
"Error" : "Errore",
@@ -412,6 +411,7 @@ OC.L10N.register(
"Contacts" : "Contatti",
"Contacts menu" : "Menu dei contatti",
"Setup two-factor authentication" : "Configura l'autenticazione a due fattori",
- "Press enter to start searching" : "Premi invio per avviare la ricerca"
+ "Press enter to start searching" : "Premi invio per avviare la ricerca",
+ "The page could not be found on the server." : "Impossibile trovare la pagina sul server."
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/core/l10n/it.json b/core/l10n/it.json
index 27a98e82533..be174969092 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -288,7 +288,6 @@
"The profile does not exist." : "Il profilo non esiste.",
"Back to %s" : "Torna a %s",
"Page not found" : "Pagina non trovata",
- "The page could not be found on the server." : "Impossibile trovare la pagina sul server.",
"Too many requests" : "Troppe richieste",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Sono arrivate troppe richieste dalla tua rete. Riprova più tardi o contatta il tuo amministratore se questo è un errore.",
"Error" : "Errore",
@@ -410,6 +409,7 @@
"Contacts" : "Contatti",
"Contacts menu" : "Menu dei contatti",
"Setup two-factor authentication" : "Configura l'autenticazione a due fattori",
- "Press enter to start searching" : "Premi invio per avviare la ricerca"
+ "Press enter to start searching" : "Premi invio per avviare la ricerca",
+ "The page could not be found on the server." : "Impossibile trovare la pagina sul server."
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/core/l10n/ja.js b/core/l10n/ja.js
index 26d6b4eee9b..59147f486d1 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -301,7 +301,6 @@ OC.L10N.register(
"The profile does not exist." : "プロフィールはありません",
"Back to %s" : "%s に戻る",
"Page not found" : "ページが見つかりません",
- "The page could not be found on the server." : "ページがサーバー上に見つかりませんでした。",
"Too many requests" : "要求が多すぎます",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "ネットワークからのリクエストが多すぎました。このようなエラーが発生した場合は、後で再試行するか、管理者に連絡してください。",
"Error" : "エラー",
@@ -424,6 +423,7 @@ OC.L10N.register(
"Contacts menu" : "連絡先メニュー",
"Setup two-factor authentication" : "二要素認証を設定",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "このシステムは32ビット版のPHPで動いているようです。Nextcloudを正常に動かすには64ビット版が必要です。OSとPHPを64ビット版にアップグレードしてください!詳細は{linkstart}こちらのドキュメント ↗{linkend}をご覧ください。",
- "Press enter to start searching" : "Enterキーを押して検索を開始します"
+ "Press enter to start searching" : "Enterキーを押して検索を開始します",
+ "The page could not be found on the server." : "ページがサーバー上に見つかりませんでした。"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index b497a7ca37a..91645def795 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -299,7 +299,6 @@
"The profile does not exist." : "プロフィールはありません",
"Back to %s" : "%s に戻る",
"Page not found" : "ページが見つかりません",
- "The page could not be found on the server." : "ページがサーバー上に見つかりませんでした。",
"Too many requests" : "要求が多すぎます",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "ネットワークからのリクエストが多すぎました。このようなエラーが発生した場合は、後で再試行するか、管理者に連絡してください。",
"Error" : "エラー",
@@ -422,6 +421,7 @@
"Contacts menu" : "連絡先メニュー",
"Setup two-factor authentication" : "二要素認証を設定",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "このシステムは32ビット版のPHPで動いているようです。Nextcloudを正常に動かすには64ビット版が必要です。OSとPHPを64ビット版にアップグレードしてください!詳細は{linkstart}こちらのドキュメント ↗{linkend}をご覧ください。",
- "Press enter to start searching" : "Enterキーを押して検索を開始します"
+ "Press enter to start searching" : "Enterキーを押して検索を開始します",
+ "The page could not be found on the server." : "ページがサーバー上に見つかりませんでした。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/mk.js b/core/l10n/mk.js
index 640f7d7b0f1..3e7518c689b 100644
--- a/core/l10n/mk.js
+++ b/core/l10n/mk.js
@@ -274,7 +274,6 @@ OC.L10N.register(
"The profile does not exist." : "Профилот на постои",
"Back to %s" : "Врати се на %s",
"Page not found" : "Страницата не е пронајдена",
- "The page could not be found on the server." : "Страницата не е пронајдена на серверот.",
"Too many requests" : "Премногу барања",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Има испратено премногу барање од вашата мрежа. Обидете се подоцна повторно или контактирајте го администраторот.",
"Error" : "Грешка",
@@ -393,6 +392,7 @@ OC.L10N.register(
"Contacts" : "Контакти",
"Contacts menu" : "Мени за контакти",
"Setup two-factor authentication" : "Постави двофакторна автентикација",
- "Press enter to start searching" : "Притисни Enter за започне пребарувањето"
+ "Press enter to start searching" : "Притисни Enter за започне пребарувањето",
+ "The page could not be found on the server." : "Страницата не е пронајдена на серверот."
},
"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;");
diff --git a/core/l10n/mk.json b/core/l10n/mk.json
index 8844a784344..592d3ba2c92 100644
--- a/core/l10n/mk.json
+++ b/core/l10n/mk.json
@@ -272,7 +272,6 @@
"The profile does not exist." : "Профилот на постои",
"Back to %s" : "Врати се на %s",
"Page not found" : "Страницата не е пронајдена",
- "The page could not be found on the server." : "Страницата не е пронајдена на серверот.",
"Too many requests" : "Премногу барања",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Има испратено премногу барање од вашата мрежа. Обидете се подоцна повторно или контактирајте го администраторот.",
"Error" : "Грешка",
@@ -391,6 +390,7 @@
"Contacts" : "Контакти",
"Contacts menu" : "Мени за контакти",
"Setup two-factor authentication" : "Постави двофакторна автентикација",
- "Press enter to start searching" : "Притисни Enter за започне пребарувањето"
+ "Press enter to start searching" : "Притисни Enter за започне пребарувањето",
+ "The page could not be found on the server." : "Страницата не е пронајдена на серверот."
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
} \ No newline at end of file
diff --git a/core/l10n/nb.js b/core/l10n/nb.js
index 4e516ca9b4d..0f3a1bcd12d 100644
--- a/core/l10n/nb.js
+++ b/core/l10n/nb.js
@@ -298,7 +298,6 @@ OC.L10N.register(
"The profile does not exist." : "Profilen finnes ikke",
"Back to %s" : "Tilbake til %s",
"Page not found" : "Siden ble ikke funnet",
- "The page could not be found on the server." : "Siden ble ikke funnet på serveren.",
"Too many requests" : "For mange forespørsler",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Det var for mange forespørsler fra ditt nettverk. Prøv igjen senere eller kontakt din administrator hvis dette er en feil.",
"Error" : "Feil",
@@ -421,6 +420,7 @@ OC.L10N.register(
"Contacts menu" : "Kontakter meny",
"Setup two-factor authentication" : "Opprett totrinns bekreftelse",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Det virker som du kjører en 32-bit PHP-versjon. Nextcloud trenger 64-bit for å fungere bra. Vennligst oppgrader OS og PHP til 64-bit! For ytterligere detaljer, les {linkstart}dokumentasjonssiden om dette ↗{linkend}.",
- "Press enter to start searching" : "Trykk enter for å starte søk"
+ "Press enter to start searching" : "Trykk enter for å starte søk",
+ "The page could not be found on the server." : "Siden ble ikke funnet på serveren."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/nb.json b/core/l10n/nb.json
index 4d5aba8edf1..0ceeaac14f5 100644
--- a/core/l10n/nb.json
+++ b/core/l10n/nb.json
@@ -296,7 +296,6 @@
"The profile does not exist." : "Profilen finnes ikke",
"Back to %s" : "Tilbake til %s",
"Page not found" : "Siden ble ikke funnet",
- "The page could not be found on the server." : "Siden ble ikke funnet på serveren.",
"Too many requests" : "For mange forespørsler",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Det var for mange forespørsler fra ditt nettverk. Prøv igjen senere eller kontakt din administrator hvis dette er en feil.",
"Error" : "Feil",
@@ -419,6 +418,7 @@
"Contacts menu" : "Kontakter meny",
"Setup two-factor authentication" : "Opprett totrinns bekreftelse",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Det virker som du kjører en 32-bit PHP-versjon. Nextcloud trenger 64-bit for å fungere bra. Vennligst oppgrader OS og PHP til 64-bit! For ytterligere detaljer, les {linkstart}dokumentasjonssiden om dette ↗{linkend}.",
- "Press enter to start searching" : "Trykk enter for å starte søk"
+ "Press enter to start searching" : "Trykk enter for å starte søk",
+ "The page could not be found on the server." : "Siden ble ikke funnet på serveren."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/nl.js b/core/l10n/nl.js
index d676e3f7a5b..96bae02ee0d 100644
--- a/core/l10n/nl.js
+++ b/core/l10n/nl.js
@@ -298,7 +298,6 @@ OC.L10N.register(
"The profile does not exist." : "Het profiel bestaat niet.",
"Back to %s" : "Terug naar %s",
"Page not found" : "Pagina niet gevonden",
- "The page could not be found on the server." : "Deze pagina kon niet gevonden worden op de server",
"Too many requests" : "Te veel aanvragen",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Er waren te veel aanvragen afkomstig uit uw netwerk. Probeer later opnieuw of contacteer de beheerder als dat niet correct is.",
"Error" : "Fout",
@@ -421,6 +420,7 @@ OC.L10N.register(
"Contacts menu" : "Contacten menu",
"Setup two-factor authentication" : "Instellen tweefactor authenticatie",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Het lijkt erop dat er een 32-bits versie van PHP word gebruikt. Nextcloud heeft de 64-bits versie nodig om goed te draaien. Upgrade a.u.b uw systeem en PHP naar de 64-bits versie! Meer informatie vind u op de {linkstart}documentatiepagina{linkend}",
- "Press enter to start searching" : "Druk op Enter om te beginnen zoeken"
+ "Press enter to start searching" : "Druk op Enter om te beginnen zoeken",
+ "The page could not be found on the server." : "Deze pagina kon niet gevonden worden op de server"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/nl.json b/core/l10n/nl.json
index ccb9d4dee77..1c85e2236fc 100644
--- a/core/l10n/nl.json
+++ b/core/l10n/nl.json
@@ -296,7 +296,6 @@
"The profile does not exist." : "Het profiel bestaat niet.",
"Back to %s" : "Terug naar %s",
"Page not found" : "Pagina niet gevonden",
- "The page could not be found on the server." : "Deze pagina kon niet gevonden worden op de server",
"Too many requests" : "Te veel aanvragen",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Er waren te veel aanvragen afkomstig uit uw netwerk. Probeer later opnieuw of contacteer de beheerder als dat niet correct is.",
"Error" : "Fout",
@@ -419,6 +418,7 @@
"Contacts menu" : "Contacten menu",
"Setup two-factor authentication" : "Instellen tweefactor authenticatie",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Het lijkt erop dat er een 32-bits versie van PHP word gebruikt. Nextcloud heeft de 64-bits versie nodig om goed te draaien. Upgrade a.u.b uw systeem en PHP naar de 64-bits versie! Meer informatie vind u op de {linkstart}documentatiepagina{linkend}",
- "Press enter to start searching" : "Druk op Enter om te beginnen zoeken"
+ "Press enter to start searching" : "Druk op Enter om te beginnen zoeken",
+ "The page could not be found on the server." : "Deze pagina kon niet gevonden worden op de server"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/oc.js b/core/l10n/oc.js
index d0646b70161..55c66148496 100644
--- a/core/l10n/oc.js
+++ b/core/l10n/oc.js
@@ -244,7 +244,6 @@ OC.L10N.register(
"The profile does not exist." : "Lo perfil existís pas.",
"Back to %s" : "Tornar a %s",
"Page not found" : "Pagina pas trobada",
- "The page could not be found on the server." : "Se podiá pas trobar la pagina sul servidor.",
"Too many requests" : "Tròp de requèstas",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "I a agut tròp de requèstas a partir de vòstre ret. Tornatz ensajar mai tard o contactatz vòstre administrator s’aquò es una error.",
"Error" : "Error",
@@ -356,6 +355,7 @@ OC.L10N.register(
"Contacts" : "Contactes",
"Contacts menu" : "Menú contactes",
"Setup two-factor authentication" : "Parametratge autentificacion dos factors",
- "Press enter to start searching" : "Quichatz Entrada per aviar la recèrca"
+ "Press enter to start searching" : "Quichatz Entrada per aviar la recèrca",
+ "The page could not be found on the server." : "Se podiá pas trobar la pagina sul servidor."
},
"nplurals=2; plural=(n > 1);");
diff --git a/core/l10n/oc.json b/core/l10n/oc.json
index aad857bc2f6..0f4bd6c2d7b 100644
--- a/core/l10n/oc.json
+++ b/core/l10n/oc.json
@@ -242,7 +242,6 @@
"The profile does not exist." : "Lo perfil existís pas.",
"Back to %s" : "Tornar a %s",
"Page not found" : "Pagina pas trobada",
- "The page could not be found on the server." : "Se podiá pas trobar la pagina sul servidor.",
"Too many requests" : "Tròp de requèstas",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "I a agut tròp de requèstas a partir de vòstre ret. Tornatz ensajar mai tard o contactatz vòstre administrator s’aquò es una error.",
"Error" : "Error",
@@ -354,6 +353,7 @@
"Contacts" : "Contactes",
"Contacts menu" : "Menú contactes",
"Setup two-factor authentication" : "Parametratge autentificacion dos factors",
- "Press enter to start searching" : "Quichatz Entrada per aviar la recèrca"
+ "Press enter to start searching" : "Quichatz Entrada per aviar la recèrca",
+ "The page could not be found on the server." : "Se podiá pas trobar la pagina sul servidor."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/core/l10n/pl.js b/core/l10n/pl.js
index 35a620cd6a2..d5a2530d635 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -39,6 +39,9 @@ OC.L10N.register(
"Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Kliknij w przycisk, aby zresetować hasło. Jeśli nie zażądałeś zresetowania hasła, zignoruj tego e-maila.",
"Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Kliknij poniższy link, aby zresetować hasło. Jeśli nie zażądałeś zresetowania hasła, zignoruj tego e-maila.",
"Reset your password" : "Zresetuj hasło",
+ "No translation provider available" : "Brak dostępnych dostawców tłumaczenia",
+ "Could not detect language" : "Nie można wykryć języka",
+ "Unable to translate" : "Nie można przetłumaczyć",
"Nextcloud Server" : "Serwer Nextcloud",
"Some of your link shares have been removed" : "Niektóre udostępnienia linków zostały usunięte",
"Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Ze względu na błąd bezpieczeństwa musieliśmy usunąć część Twoich udostępnień linków. Zobacz link, aby uzyskać więcej informacji.",
@@ -202,6 +205,7 @@ OC.L10N.register(
"Load more results" : "Wczytaj więcej wyników",
"Search" : "Szukaj",
"No results for {query}" : "Brak wyników dla {query}",
+ "Press Enter to start searching" : "Naciśnij Enter, aby rozpocząć wyszukiwanie",
"An error occurred while searching for {type}" : "Wystąpił błąd podczas wyszukiwania {type}",
"_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["Aby wyszukać, wprowadź co najmniej {minSearchLength} znak","Aby wyszukać, wprowadź co najmniej {minSearchLength} znaki","Aby wyszukać, wprowadź co najmniej {minSearchLength} znaków","Aby wyszukać, wprowadź co najmniej {minSearchLength} znaków"],
"This browser is not supported" : "Ta przeglądarka nie jest obsługiwana",
@@ -302,7 +306,6 @@ OC.L10N.register(
"The profile does not exist." : "Profil nie istnieje.",
"Back to %s" : "Powrót do %s",
"Page not found" : "Nie znaleziono strony",
- "The page could not be found on the server." : "Nie znaleziono strony na serwerze.",
"Too many requests" : "Zbyt wiele żądań",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Zbyt wiele żądań z Twojej sieci. Spróbuj ponownie później lub skontaktuj się z administratorem, jeśli jest to błąd.",
"Error" : "Błąd",
@@ -426,6 +429,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Ustaw uwierzytelnianie dwuskładnikowe",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Wygląda na to, że korzystasz z 32-bitowej wersji PHP. Nextcloud do poprawnego działania potrzebuje 64-bitowej. Zaktualizuj swój system operacyjny i PHP do wersji 64-bitowej! Więcej informacji na ten temat przeczytasz na {linkstart}stronie dokumentacji ↗{linkend}.",
"Press enter to start searching" : "Naciśnij Enter, aby rozpocząć wyszukiwanie",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Użyj wiersza poleceń do aktualizacji, ponieważ aktualizacja przez przeglądarkę jest wyłączona w Twoim pliku config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Użyj wiersza poleceń do aktualizacji, ponieważ aktualizacja przez przeglądarkę jest wyłączona w Twoim pliku config.php.",
+ "The page could not be found on the server." : "Nie znaleziono strony na serwerze."
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
diff --git a/core/l10n/pl.json b/core/l10n/pl.json
index 6fe57599140..f8a9cb156f4 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -37,6 +37,9 @@
"Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Kliknij w przycisk, aby zresetować hasło. Jeśli nie zażądałeś zresetowania hasła, zignoruj tego e-maila.",
"Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Kliknij poniższy link, aby zresetować hasło. Jeśli nie zażądałeś zresetowania hasła, zignoruj tego e-maila.",
"Reset your password" : "Zresetuj hasło",
+ "No translation provider available" : "Brak dostępnych dostawców tłumaczenia",
+ "Could not detect language" : "Nie można wykryć języka",
+ "Unable to translate" : "Nie można przetłumaczyć",
"Nextcloud Server" : "Serwer Nextcloud",
"Some of your link shares have been removed" : "Niektóre udostępnienia linków zostały usunięte",
"Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Ze względu na błąd bezpieczeństwa musieliśmy usunąć część Twoich udostępnień linków. Zobacz link, aby uzyskać więcej informacji.",
@@ -200,6 +203,7 @@
"Load more results" : "Wczytaj więcej wyników",
"Search" : "Szukaj",
"No results for {query}" : "Brak wyników dla {query}",
+ "Press Enter to start searching" : "Naciśnij Enter, aby rozpocząć wyszukiwanie",
"An error occurred while searching for {type}" : "Wystąpił błąd podczas wyszukiwania {type}",
"_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["Aby wyszukać, wprowadź co najmniej {minSearchLength} znak","Aby wyszukać, wprowadź co najmniej {minSearchLength} znaki","Aby wyszukać, wprowadź co najmniej {minSearchLength} znaków","Aby wyszukać, wprowadź co najmniej {minSearchLength} znaków"],
"This browser is not supported" : "Ta przeglądarka nie jest obsługiwana",
@@ -300,7 +304,6 @@
"The profile does not exist." : "Profil nie istnieje.",
"Back to %s" : "Powrót do %s",
"Page not found" : "Nie znaleziono strony",
- "The page could not be found on the server." : "Nie znaleziono strony na serwerze.",
"Too many requests" : "Zbyt wiele żądań",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Zbyt wiele żądań z Twojej sieci. Spróbuj ponownie później lub skontaktuj się z administratorem, jeśli jest to błąd.",
"Error" : "Błąd",
@@ -424,6 +427,7 @@
"Setup two-factor authentication" : "Ustaw uwierzytelnianie dwuskładnikowe",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Wygląda na to, że korzystasz z 32-bitowej wersji PHP. Nextcloud do poprawnego działania potrzebuje 64-bitowej. Zaktualizuj swój system operacyjny i PHP do wersji 64-bitowej! Więcej informacji na ten temat przeczytasz na {linkstart}stronie dokumentacji ↗{linkend}.",
"Press enter to start searching" : "Naciśnij Enter, aby rozpocząć wyszukiwanie",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Użyj wiersza poleceń do aktualizacji, ponieważ aktualizacja przez przeglądarkę jest wyłączona w Twoim pliku config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Użyj wiersza poleceń do aktualizacji, ponieważ aktualizacja przez przeglądarkę jest wyłączona w Twoim pliku config.php.",
+ "The page could not be found on the server." : "Nie znaleziono strony na serwerze."
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
} \ No newline at end of file
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 643a007b68a..5b4e2054821 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -302,7 +302,6 @@ OC.L10N.register(
"The profile does not exist." : "O perfil não existe. ",
"Back to %s" : "Voltar para %s",
"Page not found" : "Página não encontrada",
- "The page could not be found on the server." : "A página não pôde ser encontrada no servidor.",
"Too many requests" : "Muitas requisições",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Houve muitas solicitações de sua rede. Tente novamente mais tarde ou entre em contato com o administrador se isso for um erro.",
"Error" : "Erro",
@@ -426,6 +425,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Configurar autenticação de dois fatores",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Parece que você está executando uma versão PHP de 32 bits. Nextcloud precisa de 64 bits para funcionar bem. Por favor, atualize seu sistema operacional e PHP para 64 bits! Para mais detalhes, leia {linkstart}a página de documentação sobre este ↗{linkend}.",
"Press enter to start searching" : "Pressione enter para iniciar a busca",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Please use the command line updater because updating via browser is disabled in your config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Please use the command line updater because updating via browser is disabled in your config.php.",
+ "The page could not be found on the server." : "A página não pôde ser encontrada no servidor."
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 07ff901d098..81cef500105 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -300,7 +300,6 @@
"The profile does not exist." : "O perfil não existe. ",
"Back to %s" : "Voltar para %s",
"Page not found" : "Página não encontrada",
- "The page could not be found on the server." : "A página não pôde ser encontrada no servidor.",
"Too many requests" : "Muitas requisições",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Houve muitas solicitações de sua rede. Tente novamente mais tarde ou entre em contato com o administrador se isso for um erro.",
"Error" : "Erro",
@@ -424,6 +423,7 @@
"Setup two-factor authentication" : "Configurar autenticação de dois fatores",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Parece que você está executando uma versão PHP de 32 bits. Nextcloud precisa de 64 bits para funcionar bem. Por favor, atualize seu sistema operacional e PHP para 64 bits! Para mais detalhes, leia {linkstart}a página de documentação sobre este ↗{linkend}.",
"Press enter to start searching" : "Pressione enter para iniciar a busca",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Please use the command line updater because updating via browser is disabled in your config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Please use the command line updater because updating via browser is disabled in your config.php.",
+ "The page could not be found on the server." : "A página não pôde ser encontrada no servidor."
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js
index 25860de21c0..07bdcf5c4d6 100644
--- a/core/l10n/pt_PT.js
+++ b/core/l10n/pt_PT.js
@@ -248,7 +248,6 @@ OC.L10N.register(
"The profile does not exist." : "O perfil não existe.",
"Back to %s" : "Voltar a %s",
"Page not found" : "Página não encontrada",
- "The page could not be found on the server." : "Esta página não foi encontrada no servidor.",
"Too many requests" : "Muitos pedidos",
"Error" : "Erro",
"Previous" : "Anterior",
@@ -350,6 +349,7 @@ OC.L10N.register(
"Contacts" : "Contactos",
"Contacts menu" : "Menu de contactos",
"Setup two-factor authentication" : "Configurar autenticação de dois fatores",
- "Press enter to start searching" : "Pressione ENTER para iniciar a pesquisa"
+ "Press enter to start searching" : "Pressione ENTER para iniciar a pesquisa",
+ "The page could not be found on the server." : "Esta página não foi encontrada no servidor."
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json
index 8f37e139cb9..ef32f1978a8 100644
--- a/core/l10n/pt_PT.json
+++ b/core/l10n/pt_PT.json
@@ -246,7 +246,6 @@
"The profile does not exist." : "O perfil não existe.",
"Back to %s" : "Voltar a %s",
"Page not found" : "Página não encontrada",
- "The page could not be found on the server." : "Esta página não foi encontrada no servidor.",
"Too many requests" : "Muitos pedidos",
"Error" : "Erro",
"Previous" : "Anterior",
@@ -348,6 +347,7 @@
"Contacts" : "Contactos",
"Contacts menu" : "Menu de contactos",
"Setup two-factor authentication" : "Configurar autenticação de dois fatores",
- "Press enter to start searching" : "Pressione ENTER para iniciar a pesquisa"
+ "Press enter to start searching" : "Pressione ENTER para iniciar a pesquisa",
+ "The page could not be found on the server." : "Esta página não foi encontrada no servidor."
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/core/l10n/ru.js b/core/l10n/ru.js
index 43e3254f556..584c2396d4d 100644
--- a/core/l10n/ru.js
+++ b/core/l10n/ru.js
@@ -306,7 +306,6 @@ OC.L10N.register(
"The profile does not exist." : "Профиль не существует",
"Back to %s" : "Вернуться к %s",
"Page not found" : "Страница не найдена",
- "The page could not be found on the server." : "Страница не найдена на сервере.",
"Too many requests" : "Превышено количество запросов",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Превышено количество запросов из вашей сети. Попробуйте позднее или сообщите администратору об этой ошибке.",
"Error" : "Ошибка",
@@ -430,6 +429,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Установка двухфакторной аутентификации",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Похоже что вы используете 32-битную версию PHP. Для нормальной работы Nextcloud требуется 64-битная версия. Пожалуйста обновите вашу операционную систему и PHP до 64-битных версий. Для дополнительной информации {linkstart}обратитесь к документации.{linkend}",
"Press enter to start searching" : "Нажмите Enter для запуска поиска",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Пожалуйста, используйте обновление из терминала, поскольку обновление через браузер отключено в вашем файле конфигурации config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Пожалуйста, используйте обновление из терминала, поскольку обновление через браузер отключено в вашем файле конфигурации config.php.",
+ "The page could not be found on the server." : "Страница не найдена на сервере."
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/core/l10n/ru.json b/core/l10n/ru.json
index 4deb5541fdb..d42e4dcd415 100644
--- a/core/l10n/ru.json
+++ b/core/l10n/ru.json
@@ -304,7 +304,6 @@
"The profile does not exist." : "Профиль не существует",
"Back to %s" : "Вернуться к %s",
"Page not found" : "Страница не найдена",
- "The page could not be found on the server." : "Страница не найдена на сервере.",
"Too many requests" : "Превышено количество запросов",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Превышено количество запросов из вашей сети. Попробуйте позднее или сообщите администратору об этой ошибке.",
"Error" : "Ошибка",
@@ -428,6 +427,7 @@
"Setup two-factor authentication" : "Установка двухфакторной аутентификации",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Похоже что вы используете 32-битную версию PHP. Для нормальной работы Nextcloud требуется 64-битная версия. Пожалуйста обновите вашу операционную систему и PHP до 64-битных версий. Для дополнительной информации {linkstart}обратитесь к документации.{linkend}",
"Press enter to start searching" : "Нажмите Enter для запуска поиска",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Пожалуйста, используйте обновление из терминала, поскольку обновление через браузер отключено в вашем файле конфигурации config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Пожалуйста, используйте обновление из терминала, поскольку обновление через браузер отключено в вашем файле конфигурации config.php.",
+ "The page could not be found on the server." : "Страница не найдена на сервере."
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/core/l10n/sk.js b/core/l10n/sk.js
index c9ac09b616d..d6a90e06f38 100644
--- a/core/l10n/sk.js
+++ b/core/l10n/sk.js
@@ -292,7 +292,6 @@ OC.L10N.register(
"The profile does not exist." : "Profil neexistuje.",
"Back to %s" : "Späť na %s",
"Page not found" : "Stránka nenájdená",
- "The page could not be found on the server." : "Stránka nebola nájdená na serveri.",
"Too many requests" : "Priveľa požiadavok",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Príliš mnoho požiadaviek z vašej siete. Skúste to znovu neskôr alebo kontaktujte svojho administrátora ak je toto chyba.",
"Error" : "Chyba",
@@ -415,6 +414,7 @@ OC.L10N.register(
"Contacts menu" : "Menu kontaktov",
"Setup two-factor authentication" : "Nastaviť dvojzložkové overovanie",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Zdá sa, že používate 32-bitovú verziu PHP. Nextcloud potrebuje 64-bit, aby fungoval dobre. Inovujte svoj OS a PHP na 64-bitové! Ďalšie podrobnosti nájdete na {linkstart}stránke dokumentácie↗{linkend}.",
- "Press enter to start searching" : "Stlačte enter pre vyhľadávanie"
+ "Press enter to start searching" : "Stlačte enter pre vyhľadávanie",
+ "The page could not be found on the server." : "Stránka nebola nájdená na serveri."
},
"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);");
diff --git a/core/l10n/sk.json b/core/l10n/sk.json
index d77ecf94b4a..d54522c8cdb 100644
--- a/core/l10n/sk.json
+++ b/core/l10n/sk.json
@@ -290,7 +290,6 @@
"The profile does not exist." : "Profil neexistuje.",
"Back to %s" : "Späť na %s",
"Page not found" : "Stránka nenájdená",
- "The page could not be found on the server." : "Stránka nebola nájdená na serveri.",
"Too many requests" : "Priveľa požiadavok",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Príliš mnoho požiadaviek z vašej siete. Skúste to znovu neskôr alebo kontaktujte svojho administrátora ak je toto chyba.",
"Error" : "Chyba",
@@ -413,6 +412,7 @@
"Contacts menu" : "Menu kontaktov",
"Setup two-factor authentication" : "Nastaviť dvojzložkové overovanie",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Zdá sa, že používate 32-bitovú verziu PHP. Nextcloud potrebuje 64-bit, aby fungoval dobre. Inovujte svoj OS a PHP na 64-bitové! Ďalšie podrobnosti nájdete na {linkstart}stránke dokumentácie↗{linkend}.",
- "Press enter to start searching" : "Stlačte enter pre vyhľadávanie"
+ "Press enter to start searching" : "Stlačte enter pre vyhľadávanie",
+ "The page could not be found on the server." : "Stránka nebola nájdená na serveri."
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
} \ No newline at end of file
diff --git a/core/l10n/sl.js b/core/l10n/sl.js
index 8aae51a0dd6..ab89b251223 100644
--- a/core/l10n/sl.js
+++ b/core/l10n/sl.js
@@ -300,7 +300,6 @@ OC.L10N.register(
"The profile does not exist." : "Profil ne obstaja.",
"Back to %s" : "Nazaj na %s",
"Page not found" : "Strani ni mogoče najti",
- "The page could not be found on the server." : "Strani na strežniku ni mogoče najti.",
"Too many requests" : "Zaznanih je preveč sočasnih zahtev",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Iz omrežja je bilo prejetih preveč zahtev. Če je to napaka, stopite v stik s skrbnikom, sicer pa poskusite spet kasneje.",
"Error" : "Napaka",
@@ -423,6 +422,7 @@ OC.L10N.register(
"Contacts menu" : "Meni Stikov",
"Setup two-factor authentication" : "Nastavite dvostopenjsko overitev",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Kaže, da uporabljate 32-bitno različico PHP. Oblak Nextcloud zahteva za optimalno delovanje 64-bitno različico, zato je operacijski sistem in PHP priporočljivo nadgraditi! Več podrobnosti je na na voljo na straneh {linkstart}dokumentacije{linkend}.",
- "Press enter to start searching" : "Pritisnite vnosno tipko za začetek iskanja"
+ "Press enter to start searching" : "Pritisnite vnosno tipko za začetek iskanja",
+ "The page could not be found on the server." : "Strani na strežniku ni mogoče najti."
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/core/l10n/sl.json b/core/l10n/sl.json
index a4bd21df2a9..1d3410a65a8 100644
--- a/core/l10n/sl.json
+++ b/core/l10n/sl.json
@@ -298,7 +298,6 @@
"The profile does not exist." : "Profil ne obstaja.",
"Back to %s" : "Nazaj na %s",
"Page not found" : "Strani ni mogoče najti",
- "The page could not be found on the server." : "Strani na strežniku ni mogoče najti.",
"Too many requests" : "Zaznanih je preveč sočasnih zahtev",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Iz omrežja je bilo prejetih preveč zahtev. Če je to napaka, stopite v stik s skrbnikom, sicer pa poskusite spet kasneje.",
"Error" : "Napaka",
@@ -421,6 +420,7 @@
"Contacts menu" : "Meni Stikov",
"Setup two-factor authentication" : "Nastavite dvostopenjsko overitev",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Kaže, da uporabljate 32-bitno različico PHP. Oblak Nextcloud zahteva za optimalno delovanje 64-bitno različico, zato je operacijski sistem in PHP priporočljivo nadgraditi! Več podrobnosti je na na voljo na straneh {linkstart}dokumentacije{linkend}.",
- "Press enter to start searching" : "Pritisnite vnosno tipko za začetek iskanja"
+ "Press enter to start searching" : "Pritisnite vnosno tipko za začetek iskanja",
+ "The page could not be found on the server." : "Strani na strežniku ni mogoče najti."
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
} \ No newline at end of file
diff --git a/core/l10n/sr.js b/core/l10n/sr.js
index 196dc6d69ad..c84c850dc48 100644
--- a/core/l10n/sr.js
+++ b/core/l10n/sr.js
@@ -309,7 +309,6 @@ OC.L10N.register(
"The profile does not exist." : "Профил не постоји.",
"Back to %s" : "Назад на %s",
"Page not found" : "Страна није нађена",
- "The page could not be found on the server." : "На серверу не може да се пронађе ова страница.",
"Too many requests" : "Превише захтева",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Са ваше мреже долази превише захтева. Покушајте поново касније или контактирајте администратора уколико је ово нека грешка.",
"Error" : "Грешка",
@@ -433,6 +432,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Подеси двофакторску проверу идентитета",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Изгледа да покрећете 32-битну PHP верзију. За правилно извршавање Nextcloud захтева 64-битну верзију. Молимо вас да ажурирате свој оперативни систем и PHP на 64-бита! За више детаља прочитајте {linkstart}страницу документације која се бави овим проблемом ↗{linkend}.",
"Press enter to start searching" : "Притисните ентер да започнете претрагу",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Молимо вас да користите алат за ажурирање из командне линије јер је ажурирање из прегледача искључено у вашем config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Молимо вас да користите алат за ажурирање из командне линије јер је ажурирање из прегледача искључено у вашем config.php.",
+ "The page could not be found on the server." : "На серверу не може да се пронађе ова страница."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/core/l10n/sr.json b/core/l10n/sr.json
index 497ee0a74ac..30e67925df0 100644
--- a/core/l10n/sr.json
+++ b/core/l10n/sr.json
@@ -307,7 +307,6 @@
"The profile does not exist." : "Профил не постоји.",
"Back to %s" : "Назад на %s",
"Page not found" : "Страна није нађена",
- "The page could not be found on the server." : "На серверу не може да се пронађе ова страница.",
"Too many requests" : "Превише захтева",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Са ваше мреже долази превише захтева. Покушајте поново касније или контактирајте администратора уколико је ово нека грешка.",
"Error" : "Грешка",
@@ -431,6 +430,7 @@
"Setup two-factor authentication" : "Подеси двофакторску проверу идентитета",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Изгледа да покрећете 32-битну PHP верзију. За правилно извршавање Nextcloud захтева 64-битну верзију. Молимо вас да ажурирате свој оперативни систем и PHP на 64-бита! За више детаља прочитајте {linkstart}страницу документације која се бави овим проблемом ↗{linkend}.",
"Press enter to start searching" : "Притисните ентер да започнете претрагу",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Молимо вас да користите алат за ажурирање из командне линије јер је ажурирање из прегледача искључено у вашем config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Молимо вас да користите алат за ажурирање из командне линије јер је ажурирање из прегледача искључено у вашем config.php.",
+ "The page could not be found on the server." : "На серверу не може да се пронађе ова страница."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/core/l10n/sv.js b/core/l10n/sv.js
index 3ac19b8bf18..a019b22b0fd 100644
--- a/core/l10n/sv.js
+++ b/core/l10n/sv.js
@@ -291,7 +291,6 @@ OC.L10N.register(
"The profile does not exist." : "Profilen existerar inte.",
"Back to %s" : "Tillbaka till %s",
"Page not found" : "Sidan hittades inte",
- "The page could not be found on the server." : "Sidan kunde inte hittas på servern.",
"Too many requests" : "För många förfrågningar",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Det kom för många förfrågningar från ditt nätverk. Försök senare eller kontakta din administratör om detta är ett fel.",
"Error" : "Fel",
@@ -413,6 +412,7 @@ OC.L10N.register(
"Contacts" : "Kontakter",
"Contacts menu" : "Kontaktmeny",
"Setup two-factor authentication" : "Ställ in tvåfaktorsautentisering",
- "Press enter to start searching" : "Tryck på enter för att börja söka"
+ "Press enter to start searching" : "Tryck på enter för att börja söka",
+ "The page could not be found on the server." : "Sidan kunde inte hittas på servern."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/sv.json b/core/l10n/sv.json
index 3d99f7d5ddc..62996424cbd 100644
--- a/core/l10n/sv.json
+++ b/core/l10n/sv.json
@@ -289,7 +289,6 @@
"The profile does not exist." : "Profilen existerar inte.",
"Back to %s" : "Tillbaka till %s",
"Page not found" : "Sidan hittades inte",
- "The page could not be found on the server." : "Sidan kunde inte hittas på servern.",
"Too many requests" : "För många förfrågningar",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Det kom för många förfrågningar från ditt nätverk. Försök senare eller kontakta din administratör om detta är ett fel.",
"Error" : "Fel",
@@ -411,6 +410,7 @@
"Contacts" : "Kontakter",
"Contacts menu" : "Kontaktmeny",
"Setup two-factor authentication" : "Ställ in tvåfaktorsautentisering",
- "Press enter to start searching" : "Tryck på enter för att börja söka"
+ "Press enter to start searching" : "Tryck på enter för att börja söka",
+ "The page could not be found on the server." : "Sidan kunde inte hittas på servern."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/th.js b/core/l10n/th.js
index 861f993350b..3efd44ebe81 100644
--- a/core/l10n/th.js
+++ b/core/l10n/th.js
@@ -239,7 +239,6 @@ OC.L10N.register(
"The profile does not exist." : "โปรไฟล์นี้ไม่มีอยู่",
"Back to %s" : "กลับสู่ %s",
"Page not found" : "ไม่พบหน้า",
- "The page could not be found on the server." : "ไม่พบหน้านี้บนเซิร์ฟเวอร์",
"Too many requests" : "มีคำขอมากเกินไป",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "มีการส่งคำขอจากเครือข่ายของคุณมากเกินไป กรุณาลองอีกครั้งในภายหลัง หรือติดต่อผู้ดูแลระบบหากเป็นข้อผิดพลาด",
"Error" : "ข้อผิดพลาด",
@@ -359,6 +358,7 @@ OC.L10N.register(
"Contacts" : "รายชื่อผู้ติดต่อ",
"Contacts menu" : "เมนูรายชื่อผู้ติดต่อ",
"Setup two-factor authentication" : "ตั้งค่าการยืนยันสองปัจจัย",
- "Press enter to start searching" : "กด Enter เพื่อเริ่มค้นหา"
+ "Press enter to start searching" : "กด Enter เพื่อเริ่มค้นหา",
+ "The page could not be found on the server." : "ไม่พบหน้านี้บนเซิร์ฟเวอร์"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/th.json b/core/l10n/th.json
index ad828b3b7fc..6b82d12a397 100644
--- a/core/l10n/th.json
+++ b/core/l10n/th.json
@@ -237,7 +237,6 @@
"The profile does not exist." : "โปรไฟล์นี้ไม่มีอยู่",
"Back to %s" : "กลับสู่ %s",
"Page not found" : "ไม่พบหน้า",
- "The page could not be found on the server." : "ไม่พบหน้านี้บนเซิร์ฟเวอร์",
"Too many requests" : "มีคำขอมากเกินไป",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "มีการส่งคำขอจากเครือข่ายของคุณมากเกินไป กรุณาลองอีกครั้งในภายหลัง หรือติดต่อผู้ดูแลระบบหากเป็นข้อผิดพลาด",
"Error" : "ข้อผิดพลาด",
@@ -357,6 +356,7 @@
"Contacts" : "รายชื่อผู้ติดต่อ",
"Contacts menu" : "เมนูรายชื่อผู้ติดต่อ",
"Setup two-factor authentication" : "ตั้งค่าการยืนยันสองปัจจัย",
- "Press enter to start searching" : "กด Enter เพื่อเริ่มค้นหา"
+ "Press enter to start searching" : "กด Enter เพื่อเริ่มค้นหา",
+ "The page could not be found on the server." : "ไม่พบหน้านี้บนเซิร์ฟเวอร์"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index 7a2cd9997a0..a092e0868fe 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -309,7 +309,6 @@ OC.L10N.register(
"The profile does not exist." : "Profil bulunamadı.",
"Back to %s" : "%s sayfasına dön",
"Page not found" : "Sayfa bulunamadı",
- "The page could not be found on the server." : "Sayfa sunucuda bulunamadı.",
"Too many requests" : "Çok fazla istekte bulunuldu",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Ağınızdan çok fazla istekte bulunuldu. Bir süre sonra yeniden deneyin ya da bir sorun olduğunu düşünüyorsanız BT yöneticiniz ile görüşün.",
"Error" : "Hata",
@@ -433,6 +432,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "İki adımlı doğrulama kurulumu",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "32 bit bir PHP sürümü çalıştırıyorsunuz gibi görünüyor. Nextcloud uygulamasının iyi çalışması için 64 bit bir PHP sürümü kullanılmalıdır. Lütfen işletim sisteminizi ve PHP sürümünüzü 64 bit olacak şekilde yükseltin! Ayrıntılı bilgi almak için {linkstart}ilgili sayfaya bakabilirsiniz ↗{linkend}.",
"Press enter to start searching" : "Aramayı başlatmak için Enter tuşuna basın",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Tarayıcı üzerinden güncelleme config.php dosyasında devre dışı bırakılmış olduğundan, komut satırı güncelleyicisini kullanın."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Tarayıcı üzerinden güncelleme config.php dosyasında devre dışı bırakılmış olduğundan, komut satırı güncelleyicisini kullanın.",
+ "The page could not be found on the server." : "Sayfa sunucuda bulunamadı."
},
"nplurals=2; plural=(n > 1);");
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index 26f1d5e08be..ce517395805 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -307,7 +307,6 @@
"The profile does not exist." : "Profil bulunamadı.",
"Back to %s" : "%s sayfasına dön",
"Page not found" : "Sayfa bulunamadı",
- "The page could not be found on the server." : "Sayfa sunucuda bulunamadı.",
"Too many requests" : "Çok fazla istekte bulunuldu",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Ağınızdan çok fazla istekte bulunuldu. Bir süre sonra yeniden deneyin ya da bir sorun olduğunu düşünüyorsanız BT yöneticiniz ile görüşün.",
"Error" : "Hata",
@@ -431,6 +430,7 @@
"Setup two-factor authentication" : "İki adımlı doğrulama kurulumu",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "32 bit bir PHP sürümü çalıştırıyorsunuz gibi görünüyor. Nextcloud uygulamasının iyi çalışması için 64 bit bir PHP sürümü kullanılmalıdır. Lütfen işletim sisteminizi ve PHP sürümünüzü 64 bit olacak şekilde yükseltin! Ayrıntılı bilgi almak için {linkstart}ilgili sayfaya bakabilirsiniz ↗{linkend}.",
"Press enter to start searching" : "Aramayı başlatmak için Enter tuşuna basın",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Tarayıcı üzerinden güncelleme config.php dosyasında devre dışı bırakılmış olduğundan, komut satırı güncelleyicisini kullanın."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Tarayıcı üzerinden güncelleme config.php dosyasında devre dışı bırakılmış olduğundan, komut satırı güncelleyicisini kullanın.",
+ "The page could not be found on the server." : "Sayfa sunucuda bulunamadı."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/core/l10n/uk.js b/core/l10n/uk.js
index 5ff1b7bc47d..9f85a5e7c55 100644
--- a/core/l10n/uk.js
+++ b/core/l10n/uk.js
@@ -302,7 +302,6 @@ OC.L10N.register(
"The profile does not exist." : "Профіль не існує.",
"Back to %s" : "Назад до %s",
"Page not found" : "Сторінку не знайдено",
- "The page could not be found on the server." : "Сторінку не знайдено на сервері.",
"Too many requests" : "Забагато запитів",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Забагато запитів із вашої мережі. Повторіть спробу пізніше або зверніться до адміністратора, якщо це помилка.",
"Error" : "Помилка",
@@ -426,6 +425,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "Налаштувати двофакторну автентифікацію",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Здається, ви використовуєте 32-розрядну версію PHP. Для нормальної роботи Nextcloud потрібна 64-розрядна версія. Будь ласка, оновіть свою ОС і PHP до 64-бітної! Для отримання додаткової інформації прочитайте {linkstart}сторінку документації про це ↗{linkend}.",
"Press enter to start searching" : "Натисніть Enter, щоб почати пошук",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Будь ласка, скористайтеся оновленням через командний рядок, оскільки оновлення через бравзер вимкнено у файлі налаштувань config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Будь ласка, скористайтеся оновленням через командний рядок, оскільки оновлення через бравзер вимкнено у файлі налаштувань config.php.",
+ "The page could not be found on the server." : "Сторінку не знайдено на сервері."
},
"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");
diff --git a/core/l10n/uk.json b/core/l10n/uk.json
index 8f5bcdb568f..85b1c5b9046 100644
--- a/core/l10n/uk.json
+++ b/core/l10n/uk.json
@@ -300,7 +300,6 @@
"The profile does not exist." : "Профіль не існує.",
"Back to %s" : "Назад до %s",
"Page not found" : "Сторінку не знайдено",
- "The page could not be found on the server." : "Сторінку не знайдено на сервері.",
"Too many requests" : "Забагато запитів",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Забагато запитів із вашої мережі. Повторіть спробу пізніше або зверніться до адміністратора, якщо це помилка.",
"Error" : "Помилка",
@@ -424,6 +423,7 @@
"Setup two-factor authentication" : "Налаштувати двофакторну автентифікацію",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Здається, ви використовуєте 32-розрядну версію PHP. Для нормальної роботи Nextcloud потрібна 64-розрядна версія. Будь ласка, оновіть свою ОС і PHP до 64-бітної! Для отримання додаткової інформації прочитайте {linkstart}сторінку документації про це ↗{linkend}.",
"Press enter to start searching" : "Натисніть Enter, щоб почати пошук",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "Будь ласка, скористайтеся оновленням через командний рядок, оскільки оновлення через бравзер вимкнено у файлі налаштувань config.php."
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "Будь ласка, скористайтеся оновленням через командний рядок, оскільки оновлення через бравзер вимкнено у файлі налаштувань config.php.",
+ "The page could not be found on the server." : "Сторінку не знайдено на сервері."
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
} \ No newline at end of file
diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js
index 0763946b059..5ffea60cdd3 100644
--- a/core/l10n/zh_CN.js
+++ b/core/l10n/zh_CN.js
@@ -291,7 +291,6 @@ OC.L10N.register(
"The profile does not exist." : "个人资料不存在",
"Back to %s" : "返回 %s",
"Page not found" : "未找到页面",
- "The page could not be found on the server." : "无法在服务器上找到此页面",
"Too many requests" : "请求过多",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "您的网络请求过多。如果出现错误,请稍后重试或与您的管理员联系。",
"Error" : "错误",
@@ -414,6 +413,7 @@ OC.L10N.register(
"Contacts menu" : "联系人菜单",
"Setup two-factor authentication" : "配置两步验证",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "您似乎正在运行 32 位版本的 PHP 服务。 Nextcloud 需要 64 位以良好运作,请升级您的操作系统与 PHP 服务至 64 位版本!有关更多详细信息,请阅读{linkstart}有关的文档页面 ↗{linkend}。",
- "Press enter to start searching" : "按 Enter 开始搜索"
+ "Press enter to start searching" : "按 Enter 开始搜索",
+ "The page could not be found on the server." : "无法在服务器上找到此页面"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json
index 4054ddb461c..91f5df03976 100644
--- a/core/l10n/zh_CN.json
+++ b/core/l10n/zh_CN.json
@@ -289,7 +289,6 @@
"The profile does not exist." : "个人资料不存在",
"Back to %s" : "返回 %s",
"Page not found" : "未找到页面",
- "The page could not be found on the server." : "无法在服务器上找到此页面",
"Too many requests" : "请求过多",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "您的网络请求过多。如果出现错误,请稍后重试或与您的管理员联系。",
"Error" : "错误",
@@ -412,6 +411,7 @@
"Contacts menu" : "联系人菜单",
"Setup two-factor authentication" : "配置两步验证",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "您似乎正在运行 32 位版本的 PHP 服务。 Nextcloud 需要 64 位以良好运作,请升级您的操作系统与 PHP 服务至 64 位版本!有关更多详细信息,请阅读{linkstart}有关的文档页面 ↗{linkend}。",
- "Press enter to start searching" : "按 Enter 开始搜索"
+ "Press enter to start searching" : "按 Enter 开始搜索",
+ "The page could not be found on the server." : "无法在服务器上找到此页面"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/zh_HK.js b/core/l10n/zh_HK.js
index f2c2323d72f..85cfe189b6c 100644
--- a/core/l10n/zh_HK.js
+++ b/core/l10n/zh_HK.js
@@ -309,7 +309,6 @@ OC.L10N.register(
"The profile does not exist." : "個人資料不存在",
"Back to %s" : "回到 %s",
"Page not found" : "沒有找到頁面",
- "The page could not be found on the server." : "無法在伺服器上找到此頁面。",
"Too many requests" : "太多要求",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "有太多請求來自你的網路,請稍後再試,若你認為這不該發生,請回報系統管理員這項錯誤。",
"Error" : "錯誤",
@@ -433,6 +432,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "設定雙重認證",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "您好像正在運行 32 位 PHP 版本。Nextcloud 需要 64 位才能運行良好。請將您的操作系統和 PHP 升級到 64 位!有關更多詳細信息,請閱讀 {linkstart} 有關的說明書頁面 ↗{linkend}。",
"Press enter to start searching" : "按 Enter 開始搜尋",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "由於更新功能已在 config.php 中設定停用,請使用命令列(command line)更新系統。"
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "由於更新功能已在 config.php 中設定停用,請使用命令列(command line)更新系統。",
+ "The page could not be found on the server." : "無法在伺服器上找到此頁面。"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/zh_HK.json b/core/l10n/zh_HK.json
index b35ed9b326f..f500c1f5b3d 100644
--- a/core/l10n/zh_HK.json
+++ b/core/l10n/zh_HK.json
@@ -307,7 +307,6 @@
"The profile does not exist." : "個人資料不存在",
"Back to %s" : "回到 %s",
"Page not found" : "沒有找到頁面",
- "The page could not be found on the server." : "無法在伺服器上找到此頁面。",
"Too many requests" : "太多要求",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "有太多請求來自你的網路,請稍後再試,若你認為這不該發生,請回報系統管理員這項錯誤。",
"Error" : "錯誤",
@@ -431,6 +430,7 @@
"Setup two-factor authentication" : "設定雙重認證",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "您好像正在運行 32 位 PHP 版本。Nextcloud 需要 64 位才能運行良好。請將您的操作系統和 PHP 升級到 64 位!有關更多詳細信息,請閱讀 {linkstart} 有關的說明書頁面 ↗{linkend}。",
"Press enter to start searching" : "按 Enter 開始搜尋",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "由於更新功能已在 config.php 中設定停用,請使用命令列(command line)更新系統。"
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "由於更新功能已在 config.php 中設定停用,請使用命令列(command line)更新系統。",
+ "The page could not be found on the server." : "無法在伺服器上找到此頁面。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js
index 9151efd06f7..34473d960ff 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -309,7 +309,6 @@ OC.L10N.register(
"The profile does not exist." : "個人檔案不存在。",
"Back to %s" : "回到 %s",
"Page not found" : "找不到頁面",
- "The page could not be found on the server." : "無法在伺服器上找到此頁面。",
"Too many requests" : "太多要求",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "有太多請求來自你的網路,請稍後再試,若你認為這不該發生,請回報系統管理員這項錯誤。",
"Error" : "錯誤",
@@ -433,6 +432,7 @@ OC.L10N.register(
"Setup two-factor authentication" : "設定雙因素驗證",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "您似乎正在執行 32 位元版本的 PHP。Nextcloud 需要 64 位元才能運作良好。請將您的作業系統與 PHP 升級至 64 位元!要取得更多詳細資訊,請閱讀{linkstart}關於此問題的文件 ↗{linkend}。",
"Press enter to start searching" : "按 Enter 以開始搜尋",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "因為透過瀏覽器更新的功能已在您的 config.php 中停用,因此請使用命令列更新程式。"
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "因為透過瀏覽器更新的功能已在您的 config.php 中停用,因此請使用命令列更新程式。",
+ "The page could not be found on the server." : "無法在伺服器上找到此頁面。"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index 84bb92619a7..c0248ce4f81 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -307,7 +307,6 @@
"The profile does not exist." : "個人檔案不存在。",
"Back to %s" : "回到 %s",
"Page not found" : "找不到頁面",
- "The page could not be found on the server." : "無法在伺服器上找到此頁面。",
"Too many requests" : "太多要求",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "有太多請求來自你的網路,請稍後再試,若你認為這不該發生,請回報系統管理員這項錯誤。",
"Error" : "錯誤",
@@ -431,6 +430,7 @@
"Setup two-factor authentication" : "設定雙因素驗證",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "您似乎正在執行 32 位元版本的 PHP。Nextcloud 需要 64 位元才能運作良好。請將您的作業系統與 PHP 升級至 64 位元!要取得更多詳細資訊,請閱讀{linkstart}關於此問題的文件 ↗{linkend}。",
"Press enter to start searching" : "按 Enter 以開始搜尋",
- "Please use the command line updater because updating via browser is disabled in your config.php." : "因為透過瀏覽器更新的功能已在您的 config.php 中停用,因此請使用命令列更新程式。"
+ "Please use the command line updater because updating via browser is disabled in your config.php." : "因為透過瀏覽器更新的功能已在您的 config.php 中停用,因此請使用命令列更新程式。",
+ "The page could not be found on the server." : "無法在伺服器上找到此頁面。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/src/components/setup/RecommendedApps.vue b/core/src/components/setup/RecommendedApps.vue
index 984a6800475..472c011c762 100644
--- a/core/src/components/setup/RecommendedApps.vue
+++ b/core/src/components/setup/RecommendedApps.vue
@@ -59,8 +59,7 @@
<NcButton v-if="showInstallButton"
type="tertiary"
role="link"
- href="defaultPageUrl"
- @click="goTo(defaultPageUrl)">
+ :href="defaultPageUrl">
{{ t('core', 'Skip') }}
</NcButton>
@@ -115,7 +114,6 @@ const recommended = {
},
}
const recommendedIds = Object.keys(recommended)
-const defaultPageUrl = loadState('core', 'defaultPageUrl')
export default {
name: 'RecommendedApps',
@@ -129,7 +127,7 @@ export default {
loadingApps: true,
loadingAppsError: false,
apps: [],
- defaultPageUrl,
+ defaultPageUrl: loadState('core', 'defaultPageUrl')
}
},
computed: {
@@ -180,7 +178,7 @@ export default {
.then(() => {
logger.info('all recommended apps installed, redirecting …')
- window.location = defaultPageUrl
+ window.location = this.defaultPageUrl
})
.catch(error => logger.error('could not install recommended apps', { error }))
},
@@ -210,9 +208,6 @@ export default {
}
return !!recommended[appId].hidden
},
- goTo(href) {
- window.location.href = href
- },
},
}
</script>
diff --git a/core/src/views/Profile.vue b/core/src/views/Profile.vue
index 4d83421673a..eda6e428463 100644
--- a/core/src/views/Profile.vue
+++ b/core/src/views/Profile.vue
@@ -540,7 +540,8 @@ $content-max-width: 640px;
grid-template-columns: unset;
&__displayname {
- margin: 100px 20px 0px;
+ margin: 80px 20px 0px!important;
+ height: 1em;
width: unset;
display: unset;
text-align: center;
@@ -549,7 +550,11 @@ $content-max-width: 640px;
&__edit-button {
width: fit-content;
display: block;
- margin: 30px auto;
+ margin: 60px auto;
+ }
+
+ &__status-text {
+ margin: 4px auto;
}
}
}
diff --git a/core/templates/404.php b/core/templates/404.php
index fcfc7cc1ef8..4cce2434d64 100644
--- a/core/templates/404.php
+++ b/core/templates/404.php
@@ -18,7 +18,7 @@ if (!isset($_)) {//standalone page is not supported anymore - redirect to /
<div class="body-login-container update">
<div class="icon-big icon-search"></div>
<h2><?php p($l->t('Page not found')); ?></h2>
- <p class="infogroup"><?php p($l->t('The page could not be found on the server.')); ?></p>
+ <p class="infogroup"><?php p($l->t('The page could not be found on the server or you may not be allowed to view it.')); ?></p>
<p><a class="button primary" href="<?php p(\OC::$server->getURLGenerator()->linkTo('', 'index.php')) ?>">
<?php p($l->t('Back to %s', [$theme->getName()])); ?>
</a></p>
diff --git a/dist/core-profile.js b/dist/core-profile.js
index 6f26798bc2d..33741a198a2 100644
--- a/dist/core-profile.js
+++ b/dist/core-profile.js
@@ -1,3 +1,3 @@
/*! For license information please see core-profile.js.LICENSE.txt */
-(()=>{"use strict";var n,e={51608:(n,e,a)=>{var r=a(20144),i=a(45994),o=a(31352),A=a(2324),s=a(17499);const l=null===(d=(0,i.ts)())?(0,s.IY)().setApp("core").build():(0,s.IY)().setApp("core").setUid(d.uid).build();var d,c=a(78595),p=a(79954),C=a(79753),u=a(64024),_=a(75925),v=a.n(_),g=a(12945),b=a.n(g),h=a(76212),m=a.n(h),f=a(50246),x=a(73229),y=a(86158);const k={name:"PrimaryActionButton",props:{disabled:{type:Boolean,default:!1},href:{type:String,required:!0},icon:{type:String,required:!0},target:{type:String,required:!0,validator:t=>["_self","_blank","_parent","_top"].includes(t)}},computed:{colorPrimaryText:()=>getComputedStyle(document.body).getPropertyValue("--color-primary-text").trim()}};var w=a(93379),B=a.n(w),E=a(7795),I=a.n(E),S=a(90569),D=a.n(S),P=a(3565),O=a.n(P),U=a(19216),z=a.n(U),j=a(44589),M=a.n(j),Z=a(81001),G={};G.styleTagTransform=M(),G.setAttributes=O(),G.insert=D().bind(null,"head"),G.domAPI=I(),G.insertStyleElement=z(),B()(Z.Z,G),Z.Z&&Z.Z.locals&&Z.Z.locals;var W=a(51900);const Y=(0,W.Z)(k,(function(){var t=this,n=t._self._c;return n("a",t._g({staticClass:"profile__primary-action-button",class:{disabled:t.disabled},attrs:{href:t.href,target:t.target,rel:"noopener noreferrer nofollow"}},t.$listeners),[n("img",{staticClass:"icon",class:[t.icon,{"icon-invert":"#ffffff"===t.colorPrimaryText}],attrs:{src:t.icon}}),t._v(" "),t._t("default")],2)}),[],!1,null,"35d5c4b6",null).exports,q=(0,p.j)("core","status",{}),{userId:T,displayname:F,address:$,organisation:N,role:K,headline:L,biography:V,actions:H,isUserAvatarVisible:R}=(0,p.j)("core","profileParameters",{userId:null,displayname:null,address:null,organisation:null,role:null,headline:null,biography:null,actions:[],isUserAvatarVisible:!1}),J={name:"Profile",components:{AccountIcon:y.Z,NcActionLink:m(),NcActions:b(),NcAvatar:v(),MapMarkerIcon:f.Z,PencilIcon:x.default,PrimaryActionButton:Y},data:()=>({status:q,userId:T,displayname:F,address:$,organisation:N,role:K,headline:L,biography:V,actions:H,isUserAvatarVisible:R,sections:OCA.Core.ProfileSections.getSections()}),computed:{isCurrentUser(){var t;return(null===(t=(0,i.ts)())||void 0===t?void 0:t.uid)===this.userId},allActions(){return this.actions},primaryAction(){return this.allActions.length?this.allActions[0]:null},middleActions(){return this.allActions.slice(1,4).length?this.allActions.slice(1,4):null},otherActions(){return this.allActions.slice(4).length?this.allActions.slice(4):null},settingsUrl:()=>(0,C.generateUrl)("/settings/user"),colorMainBackground:()=>getComputedStyle(document.body).getPropertyValue("--color-main-background").trim(),emptyProfileMessage(){return this.isCurrentUser?t("core","You have not added any info yet"):t("core","{user} has not added any info yet",{user:this.displayname||this.userId})}},mounted(){document.title="".concat(this.displayname||this.userId," - ").concat(document.title),(0,c.Ld)("user_status:status.updated",this.handleStatusUpdate)},beforeDestroy(){(0,c.r1)("user_status:status.updated",this.handleStatusUpdate)},methods:{handleStatusUpdate(t){this.isCurrentUser&&t.userId===this.userId&&(this.status=t)},openStatusModal(){const n=document.querySelector(".user-status-menu-item__toggle");this.isCurrentUser&&(n?n.click():(0,u.x2)(t("core","Error opening the user status modal, try hard refreshing the page")))}}};var Q=a(86616),X={};X.styleTagTransform=M(),X.setAttributes=O(),X.insert=D().bind(null,"head"),X.domAPI=I(),X.insertStyleElement=z(),B()(Q.Z,X),Q.Z&&Q.Z.locals&&Q.Z.locals;var tt=a(40100),nt={};nt.styleTagTransform=M(),nt.setAttributes=O(),nt.insert=D().bind(null,"head"),nt.domAPI=I(),nt.insertStyleElement=z(),B()(tt.Z,nt),tt.Z&&tt.Z.locals&&tt.Z.locals;const et=(0,W.Z)(J,(function(){var t=this,n=t._self._c;return n("div",{staticClass:"profile"},[n("div",{staticClass:"profile__header"},[n("div",{staticClass:"profile__header__container"},[n("div",{staticClass:"profile__header__container__placeholder"}),t._v(" "),n("h2",{staticClass:"profile__header__container__displayname"},[t._v("\n\t\t\t\t"+t._s(t.displayname||t.userId)+"\n\t\t\t\t"),t.isCurrentUser?n("a",{staticClass:"primary profile__header__container__edit-button",attrs:{href:t.settingsUrl}},[n("PencilIcon",{staticClass:"pencil-icon",attrs:{size:16}}),t._v("\n\t\t\t\t\t"+t._s(t.t("core","Edit Profile"))+"\n\t\t\t\t")],1):t._e()]),t._v(" "),t.status.icon||t.status.message?n("div",{staticClass:"profile__header__container__status-text",class:{interactive:t.isCurrentUser},on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.openStatusModal.apply(null,arguments)}}},[t._v("\n\t\t\t\t"+t._s(t.status.icon)+" "+t._s(t.status.message)+"\n\t\t\t")]):t._e()])]),t._v(" "),n("div",{staticClass:"profile__wrapper"},[n("div",{staticClass:"profile__content"},[n("div",{staticClass:"profile__sidebar"},[n("NcAvatar",{staticClass:"avatar",class:{interactive:t.isCurrentUser},attrs:{user:t.userId,size:180,"show-user-status":!0,"show-user-status-compact":!1,"disable-menu":!0,"disable-tooltip":!0,"is-no-user":!t.isUserAvatarVisible},nativeOn:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.openStatusModal.apply(null,arguments)}}}),t._v(" "),n("div",{staticClass:"user-actions"},[t.primaryAction?n("PrimaryActionButton",{staticClass:"user-actions__primary",attrs:{href:t.primaryAction.target,icon:t.primaryAction.icon,target:"phone"===t.primaryAction.id?"_self":"_blank"}},[t._v("\n\t\t\t\t\t\t"+t._s(t.primaryAction.title)+"\n\t\t\t\t\t")]):t._e(),t._v(" "),n("div",{staticClass:"user-actions__other"},[t._l(t.middleActions,(function(e){return n("NcActions",{key:e.id,staticStyle:{"background-position":"14px center","background-size":"16px","background-repeat":"no-repeat"},style:{backgroundImage:"url(".concat(e.icon,")"),..."#181818"===t.colorMainBackground&&{filter:"invert(1)"}},attrs:{"default-icon":e.icon}},[n("NcActionLink",{attrs:{"close-after-click":!0,icon:e.icon,href:e.target,target:"phone"===e.id?"_self":"_blank"}},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(e.title)+"\n\t\t\t\t\t\t\t")])],1)})),t._v(" "),t.otherActions?[n("NcActions",{attrs:{"force-menu":!0}},t._l(t.otherActions,(function(e){return n("NcActionLink",{key:e.id,class:{"icon-invert":"#181818"===t.colorMainBackground},attrs:{"close-after-click":!0,icon:e.icon,href:e.target,target:"phone"===e.id?"_self":"_blank"}},[t._v("\n\t\t\t\t\t\t\t\t\t"+t._s(e.title)+"\n\t\t\t\t\t\t\t\t")])})),1)]:t._e()],2)],1)],1),t._v(" "),n("div",{staticClass:"profile__blocks"},[t.organisation||t.role||t.address?n("div",{staticClass:"profile__blocks-details"},[t.organisation||t.role?n("div",{staticClass:"detail"},[n("p",[t._v(t._s(t.organisation)+" "),t.organisation&&t.role?n("span",[t._v("•")]):t._e(),t._v(" "+t._s(t.role))])]):t._e(),t._v(" "),t.address?n("div",{staticClass:"detail"},[n("p",[n("MapMarkerIcon",{staticClass:"map-icon",attrs:{size:16}}),t._v("\n\t\t\t\t\t\t\t"+t._s(t.address)+"\n\t\t\t\t\t\t")],1)]):t._e()]):t._e(),t._v(" "),t.headline||t.biography||t.sections.length>0?[t.headline?n("div",{staticClass:"profile__blocks-headline"},[n("h3",[t._v(t._s(t.headline))])]):t._e(),t._v(" "),t.biography?n("div",{staticClass:"profile__blocks-biography"},[n("p",[t._v(t._s(t.biography))])]):t._e(),t._v(" "),t._l(t.sections,(function(e,a){return n("div",{key:a,ref:"section-"+a,refInFor:!0,staticClass:"profile__additionalContent"},[n(e(t.$refs["section-"+a],t.userId),{tag:"component",attrs:{userId:t.userId}})],1)}))]:[n("div",{staticClass:"profile__blocks-empty-info"},[n("AccountIcon",{attrs:{size:60,"fill-color":"var(--color-text-maxcontrast)"}}),t._v(" "),n("h3",[t._v(t._s(t.emptyProfileMessage))]),t._v(" "),n("p",[t._v(t._s(t.t("core","The headline and about sections will show up here")))])],1)]],2)])])])}),[],!1,null,"0bd17180",null).exports;a.nc=btoa((0,i.IH)()),window.OCA||(window.OCA={}),window.OCA.Core||(window.OCA.Core={}),Object.assign(window.OCA.Core,{ProfileSections:new class{constructor(){var t,n,e;t=this,e=void 0,(n=function(t){var n=function(t,n){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var a=e.call(t,"string");if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof n?n:String(n)}(n="_sections"))in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,this._sections=[]}registerSection(t){this._sections.push(t)}getSections(){return this._sections}}}),r.default.use(A.default),r.default.mixin({props:{logger:l},methods:{t:o.Iu}});const at=r.default.extend(et);window.addEventListener("DOMContentLoaded",(()=>{(new at).$mount("#vue-profile")}))},81001:(t,n,e)=>{e.d(n,{Z:()=>A});var a=e(87537),r=e.n(a),i=e(23645),o=e.n(i)()(r());o.push([t.id,".profile__primary-action-button[data-v-35d5c4b6]{font-size:var(--default-font-size);font-weight:bold;width:188px;height:44px;padding:0 16px;line-height:44px;text-align:center;border-radius:var(--border-radius-pill);color:var(--color-primary-text);background-color:var(--color-primary-element);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.profile__primary-action-button .icon[data-v-35d5c4b6]{display:inline-block;vertical-align:middle;margin-bottom:2px;margin-right:4px}.profile__primary-action-button .icon.icon-invert[data-v-35d5c4b6]{filter:invert(1)}.profile__primary-action-button[data-v-35d5c4b6]:hover,.profile__primary-action-button[data-v-35d5c4b6]:focus,.profile__primary-action-button[data-v-35d5c4b6]:active{background-color:var(--color-primary-element-light)}","",{version:3,sources:["webpack://./core/src/components/Profile/PrimaryActionButton.vue"],names:[],mappings:"AACA,iDACC,kCAAA,CACA,gBAAA,CACA,WAAA,CACA,WAAA,CACA,cAAA,CACA,gBAAA,CACA,iBAAA,CACA,uCAAA,CACA,+BAAA,CACA,6CAAA,CACA,eAAA,CACA,kBAAA,CACA,sBAAA,CAEA,uDACC,oBAAA,CACA,qBAAA,CACA,iBAAA,CACA,gBAAA,CAEA,mEACC,gBAAA,CAIF,sKAGC,mDAAA",sourcesContent:["\n.profile__primary-action-button {\n\tfont-size: var(--default-font-size);\n\tfont-weight: bold;\n\twidth: 188px;\n\theight: 44px;\n\tpadding: 0 16px;\n\tline-height: 44px;\n\ttext-align: center;\n\tborder-radius: var(--border-radius-pill);\n\tcolor: var(--color-primary-text);\n\tbackground-color: var(--color-primary-element);\n\toverflow: hidden;\n\twhite-space: nowrap;\n\ttext-overflow: ellipsis;\n\n\t.icon {\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t\tmargin-bottom: 2px;\n\t\tmargin-right: 4px;\n\n\t\t&.icon-invert {\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-primary-element-light);\n\t}\n}\n"],sourceRoot:""}]);const A=o},86616:(t,n,e)=>{e.d(n,{Z:()=>A});var a=e(87537),r=e.n(a),i=e(23645),o=e.n(i)()(r());o.push([t.id,"#header{background-color:rgba(0,0,0,0) !important;background-image:none !important}#content{padding-top:0px}","",{version:3,sources:["webpack://./core/src/views/Profile.vue"],names:[],mappings:"AAEA,QACC,yCAAA,CACA,gCAAA,CAGD,SACC,eAAA",sourcesContent:["\n// Override header styles\n#header {\n\tbackground-color: transparent !important;\n\tbackground-image: none !important;\n}\n\n#content {\n\tpadding-top: 0px;\n}\n"],sourceRoot:""}]);const A=o},40100:(t,n,e)=>{e.d(n,{Z:()=>A});var a=e(87537),r=e.n(a),i=e(23645),o=e.n(i)()(r());o.push([t.id,".profile[data-v-0bd17180]{width:100%;overflow-y:auto}.profile__header[data-v-0bd17180]{position:sticky;height:190px;top:-40px;background-color:var(--color-main-background-blur);backdrop-filter:var(--filter-background-blur);-webkit-backdrop-filter:var(--filter-background-blur)}.profile__header__container[data-v-0bd17180]{align-self:flex-end;width:100%;max-width:1024px;margin:0 auto;display:grid;grid-template-rows:max-content max-content;grid-template-columns:240px 1fr;justify-content:center}.profile__header__container__placeholder[data-v-0bd17180]{grid-row:1/3}.profile__header__container__displayname[data-v-0bd17180],.profile__header__container__status-text[data-v-0bd17180]{color:var(--color-main-text)}.profile__header__container__displayname[data-v-0bd17180]{width:640px;height:45px;margin-top:128px;margin-bottom:0;font-size:30px;display:flex;align-items:center;cursor:text}.profile__header__container__displayname[data-v-0bd17180]:not(:last-child){margin-top:100px;margin-bottom:4px}.profile__header__container__edit-button[data-v-0bd17180]{border:none;margin-left:18px;margin-top:2px;color:var(--color-primary-element);background-color:var(--color-primary-text);box-shadow:0 0 0 2px var(--color-primary-text);border-radius:var(--border-radius-pill);padding:0 18px;font-size:var(--default-font-size);height:44px;line-height:44px;font-weight:bold}.profile__header__container__edit-button[data-v-0bd17180]:hover,.profile__header__container__edit-button[data-v-0bd17180]:focus,.profile__header__container__edit-button[data-v-0bd17180]:active{color:var(--color-primary-element);background-color:var(--color-primary-element-light)}.profile__header__container__edit-button .pencil-icon[data-v-0bd17180]{display:inline-block;vertical-align:middle;margin-top:2px}.profile__header__container__status-text[data-v-0bd17180]{width:max-content;max-width:640px;padding:5px 10px;margin-left:-12px;margin-top:2px}.profile__header__container__status-text.interactive[data-v-0bd17180]{cursor:pointer}.profile__header__container__status-text.interactive[data-v-0bd17180]:hover,.profile__header__container__status-text.interactive[data-v-0bd17180]:focus,.profile__header__container__status-text.interactive[data-v-0bd17180]:active{background-color:var(--color-main-background);color:var(--color-main-text);border-radius:var(--border-radius-pill);font-weight:bold;box-shadow:0 3px 6px var(--color-box-shadow)}.profile__sidebar[data-v-0bd17180]{position:sticky;top:var(--header-height);align-self:flex-start;padding-top:20px;min-width:220px;margin:-150px 20px 0 0}.profile__sidebar[data-v-0bd17180] .avatar.avatardiv,.profile__sidebar h2[data-v-0bd17180]{text-align:center;margin:auto;display:block;padding:8px}.profile__sidebar[data-v-0bd17180] .avatar.avatardiv:not(.avatardiv--unknown){background-color:var(--color-main-background) !important;box-shadow:none}.profile__sidebar[data-v-0bd17180] .avatar.avatardiv .avatardiv__user-status{right:14px;bottom:14px;width:34px;height:34px;background-size:28px;border:none;background-color:var(--color-main-background);line-height:34px;font-size:20px}.profile__sidebar[data-v-0bd17180] .avatar.interactive.avatardiv .avatardiv__user-status{cursor:pointer}.profile__sidebar[data-v-0bd17180] .avatar.interactive.avatardiv .avatardiv__user-status:hover,.profile__sidebar[data-v-0bd17180] .avatar.interactive.avatardiv .avatardiv__user-status:focus,.profile__sidebar[data-v-0bd17180] .avatar.interactive.avatardiv .avatardiv__user-status:active{box-shadow:0 3px 6px var(--color-box-shadow)}.profile__wrapper[data-v-0bd17180]{background-color:var(--color-main-background);min-height:100%}.profile__content[data-v-0bd17180]{max-width:1024px;margin:0 auto;display:flex;width:100%}.profile__blocks[data-v-0bd17180]{margin:18px 0 80px 0;display:grid;gap:16px 0;width:640px}.profile__blocks p[data-v-0bd17180],.profile__blocks h3[data-v-0bd17180]{overflow-wrap:anywhere}.profile__blocks-details[data-v-0bd17180]{display:flex;flex-direction:column;gap:2px 0}.profile__blocks-details .detail[data-v-0bd17180]{display:inline-block;color:var(--color-text-maxcontrast)}.profile__blocks-details .detail p .map-icon[data-v-0bd17180]{display:inline-block;vertical-align:middle}.profile__blocks-headline[data-v-0bd17180]{margin-top:10px}.profile__blocks-headline h3[data-v-0bd17180]{font-weight:bold;font-size:20px;margin:0}.profile__blocks-biography[data-v-0bd17180]{white-space:pre-line}.profile__blocks h3[data-v-0bd17180],.profile__blocks p[data-v-0bd17180]{cursor:text}.profile__blocks-empty-info[data-v-0bd17180]{margin-top:80px;margin-right:100px;display:flex;flex-direction:column;text-align:center}.profile__blocks-empty-info h3[data-v-0bd17180]{font-weight:bold;font-size:18px;margin:8px 0}@media only screen and (max-width: 1024px){.profile__header[data-v-0bd17180]{height:250px;position:unset}.profile__header__container[data-v-0bd17180]{grid-template-columns:unset}.profile__header__container__displayname[data-v-0bd17180]{margin:100px 20px 0px;width:unset;display:unset;text-align:center}.profile__header__container__edit-button[data-v-0bd17180]{width:fit-content;display:block;margin:30px auto}.profile__content[data-v-0bd17180]{display:block}.profile__blocks[data-v-0bd17180]{width:unset;max-width:600px;margin:0 auto;padding:20px 50px 50px 50px}.profile__blocks-empty-info[data-v-0bd17180]{margin:0}.profile__sidebar[data-v-0bd17180]{margin:unset;position:unset}}.user-actions[data-v-0bd17180]{display:flex;flex-direction:column;gap:8px 0;margin-top:20px}.user-actions__primary[data-v-0bd17180]{margin:0 auto}.user-actions__other[data-v-0bd17180]{display:flex;justify-content:center;gap:0 4px}.user-actions__other a[data-v-0bd17180]{filter:var(--background-invert-if-dark)}.icon-invert[data-v-0bd17180] .action-link__icon{filter:invert(1)}","",{version:3,sources:["webpack://./core/src/views/Profile.vue"],names:[],mappings:"AAIA,0BACC,UAAA,CACA,eAAA,CAEA,kCACC,eAAA,CACA,YAAA,CACA,SAAA,CACA,kDAAA,CACA,6CAAA,CACA,qDAAA,CAEA,6CACC,mBAAA,CACA,UAAA,CACA,gBAlBiB,CAmBjB,aAAA,CACA,YAAA,CACA,0CAAA,CACA,+BAAA,CACA,sBAAA,CAEA,0DACC,YAAA,CAGD,oHACC,4BAAA,CAGD,0DACC,WAjCgB,CAkChB,WAAA,CACA,gBAAA,CAEA,eAAA,CACA,cAAA,CACA,YAAA,CACA,kBAAA,CACA,WAAA,CAEA,2EACC,gBAAA,CACA,iBAAA,CAIF,0DACC,WAAA,CACA,gBAAA,CACA,cAAA,CACA,kCAAA,CACA,0CAAA,CACA,8CAAA,CACA,uCAAA,CACA,cAAA,CACA,kCAAA,CACA,WAAA,CACA,gBAAA,CACA,gBAAA,CAEA,iMAGC,kCAAA,CACA,mDAAA,CAGD,uEACC,oBAAA,CACA,qBAAA,CACA,cAAA,CAIF,0DACC,iBAAA,CACA,eA/EgB,CAgFhB,gBAAA,CACA,iBAAA,CACA,cAAA,CAEA,sEACC,cAAA,CAEA,qOAGC,6CAAA,CACA,4BAAA,CACA,uCAAA,CACA,gBAAA,CACA,4CAAA,CAOL,mCACC,eAAA,CACA,wBAAA,CACA,qBAAA,CACA,gBAAA,CACA,eAAA,CACA,sBAAA,CAGA,2FACC,iBAAA,CACA,WAAA,CACA,aAAA,CACA,WAAA,CAGD,8EACC,wDAAA,CACA,eAAA,CAIA,6EACC,UAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,oBAAA,CACA,WAAA,CAEA,6CAAA,CACA,gBAAA,CACA,cAAA,CAKD,yFACC,cAAA,CAEA,8RAGC,4CAAA,CAMJ,mCACC,6CAAA,CACA,eAAA,CAGD,mCACC,gBA7JkB,CA8JlB,aAAA,CACA,YAAA,CACA,UAAA,CAGD,kCACC,oBAAA,CACA,YAAA,CACA,UAAA,CACA,WAtKkB,CAwKlB,yEACC,sBAAA,CAGD,0CACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,kDACC,oBAAA,CACA,mCAAA,CAEA,8DACC,oBAAA,CACA,qBAAA,CAKH,2CACC,eAAA,CAEA,8CACC,gBAAA,CACA,cAAA,CACA,QAAA,CAIF,4CACC,oBAAA,CAGD,yEACC,WAAA,CAGD,6CACC,eAAA,CACA,kBAAA,CACA,YAAA,CACA,qBAAA,CACA,iBAAA,CAEA,gDACC,gBAAA,CACA,cAAA,CACA,YAAA,CAMJ,2CAEE,kCACC,YAAA,CACA,cAAA,CAEA,6CACC,2BAAA,CAEA,0DACC,qBAAA,CACA,WAAA,CACA,aAAA,CACA,iBAAA,CAGD,0DACC,iBAAA,CACA,aAAA,CACA,gBAAA,CAKH,mCACC,aAAA,CAGD,kCACC,WAAA,CACA,eAAA,CACA,aAAA,CACA,2BAAA,CAEA,6CACC,QAAA,CAIF,mCACC,YAAA,CACA,cAAA,CAAA,CAKH,+BACC,YAAA,CACA,qBAAA,CACA,SAAA,CACA,eAAA,CAEA,wCACC,aAAA,CAGD,sCACC,YAAA,CACA,sBAAA,CACA,SAAA,CACA,wCACC,uCAAA,CAMF,iDACC,gBAAA",sourcesContent:["\n$profile-max-width: 1024px;\n$content-max-width: 640px;\n\n.profile {\n\twidth: 100%;\n\toverflow-y: auto;\n\n\t&__header {\n\t\tposition: sticky;\n\t\theight: 190px;\n\t\ttop: -40px;\n\t\tbackground-color: var(--color-main-background-blur);\n\t\tbackdrop-filter: var(--filter-background-blur);\n\t\t-webkit-backdrop-filter: var(--filter-background-blur);\n\n\t\t&__container {\n\t\t\talign-self: flex-end;\n\t\t\twidth: 100%;\n\t\t\tmax-width: $profile-max-width;\n\t\t\tmargin: 0 auto;\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-rows: max-content max-content;\n\t\t\tgrid-template-columns: 240px 1fr;\n\t\t\tjustify-content: center;\n\n\t\t\t&__placeholder {\n\t\t\t\tgrid-row: 1 / 3;\n\t\t\t}\n\n\t\t\t&__displayname, &__status-text {\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\n\t\t\t&__displayname {\n\t\t\t\twidth: $content-max-width;\n\t\t\t\theight: 45px;\n\t\t\t\tmargin-top: 128px;\n\t\t\t\t// Override the global style declaration\n\t\t\t\tmargin-bottom: 0;\n\t\t\t\tfont-size: 30px;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tcursor: text;\n\n\t\t\t\t&:not(:last-child) {\n\t\t\t\t\tmargin-top: 100px;\n\t\t\t\t\tmargin-bottom: 4px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__edit-button {\n\t\t\t\tborder: none;\n\t\t\t\tmargin-left: 18px;\n\t\t\t\tmargin-top: 2px;\n\t\t\t\tcolor: var(--color-primary-element);\n\t\t\t\tbackground-color: var(--color-primary-text);\n\t\t\t\tbox-shadow: 0 0 0 2px var(--color-primary-text);\n\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\tpadding: 0 18px;\n\t\t\t\tfont-size: var(--default-font-size);\n\t\t\t\theight: 44px;\n\t\t\t\tline-height: 44px;\n\t\t\t\tfont-weight: bold;\n\n\t\t\t\t&:hover,\n\t\t\t\t&:focus,\n\t\t\t\t&:active {\n\t\t\t\t\tcolor: var(--color-primary-element);\n\t\t\t\t\tbackground-color: var(--color-primary-element-light);\n\t\t\t\t}\n\n\t\t\t\t.pencil-icon {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\tmargin-top: 2px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__status-text {\n\t\t\t\twidth: max-content;\n\t\t\t\tmax-width: $content-max-width;\n\t\t\t\tpadding: 5px 10px;\n\t\t\t\tmargin-left: -12px;\n\t\t\t\tmargin-top: 2px;\n\n\t\t\t\t&.interactive {\n\t\t\t\t\tcursor: pointer;\n\n\t\t\t\t\t&:hover,\n\t\t\t\t\t&:focus,\n\t\t\t\t\t&:active {\n\t\t\t\t\t\tbackground-color: var(--color-main-background);\n\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\tbox-shadow: 0 3px 6px var(--color-box-shadow);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&__sidebar {\n\t\tposition: sticky;\n\t\ttop: var(--header-height);\n\t\talign-self: flex-start;\n\t\tpadding-top: 20px;\n\t\tmin-width: 220px;\n\t\tmargin: -150px 20px 0 0;\n\n\t\t// Specificity hack is needed to override Avatar component styles\n\t\t&::v-deep .avatar.avatardiv, h2 {\n\t\t\ttext-align: center;\n\t\t\tmargin: auto;\n\t\t\tdisplay: block;\n\t\t\tpadding: 8px;\n\t\t}\n\n\t\t&::v-deep .avatar.avatardiv:not(.avatardiv--unknown) {\n\t\t\tbackground-color: var(--color-main-background) !important;\n\t\t\tbox-shadow: none;\n\t\t}\n\n\t\t&::v-deep .avatar.avatardiv {\n\t\t\t.avatardiv__user-status {\n\t\t\t\tright: 14px;\n\t\t\t\tbottom: 14px;\n\t\t\t\twidth: 34px;\n\t\t\t\theight: 34px;\n\t\t\t\tbackground-size: 28px;\n\t\t\t\tborder: none;\n\t\t\t\t// Styles when custom status icon and status text are set\n\t\t\t\tbackground-color: var(--color-main-background);\n\t\t\t\tline-height: 34px;\n\t\t\t\tfont-size: 20px;\n\t\t\t}\n\t\t}\n\n\t\t&::v-deep .avatar.interactive.avatardiv {\n\t\t\t.avatardiv__user-status {\n\t\t\t\tcursor: pointer;\n\n\t\t\t\t&:hover,\n\t\t\t\t&:focus,\n\t\t\t\t&:active {\n\t\t\t\t\tbox-shadow: 0 3px 6px var(--color-box-shadow);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&__wrapper {\n\t\tbackground-color: var(--color-main-background);\n\t\tmin-height: 100%;\n\t}\n\n\t&__content {\n\t\tmax-width: $profile-max-width;\n\t\tmargin: 0 auto;\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\n\t&__blocks {\n\t\tmargin: 18px 0 80px 0;\n\t\tdisplay: grid;\n\t\tgap: 16px 0;\n\t\twidth: $content-max-width;\n\n\t\tp, h3 {\n\t\t\toverflow-wrap: anywhere;\n\t\t}\n\n\t\t&-details {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px 0;\n\n\t\t\t.detail {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: var(--color-text-maxcontrast);\n\n\t\t\t\tp .map-icon {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&-headline {\n\t\t\tmargin-top: 10px;\n\n\t\t\th3 {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-size: 20px;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t&-biography {\n\t\t\twhite-space: pre-line;\n\t\t}\n\n\t\th3, p {\n\t\t\tcursor: text;\n\t\t}\n\n\t\t&-empty-info {\n\t\t\tmargin-top: 80px;\n\t\t\tmargin-right: 100px;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\ttext-align: center;\n\n\t\t\th3 {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-size: 18px;\n\t\t\t\tmargin: 8px 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\n@media only screen and (max-width: 1024px) {\n\t.profile {\n\t\t&__header {\n\t\t\theight: 250px;\n\t\t\tposition: unset;\n\n\t\t\t&__container {\n\t\t\t\tgrid-template-columns: unset;\n\n\t\t\t\t&__displayname {\n\t\t\t\t\tmargin: 100px 20px 0px;\n\t\t\t\t\twidth: unset;\n\t\t\t\t\tdisplay: unset;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\n\t\t\t\t&__edit-button {\n\t\t\t\t\twidth: fit-content;\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tmargin: 30px auto;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__content {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t&__blocks {\n\t\t\twidth: unset;\n\t\t\tmax-width: 600px;\n\t\t\tmargin: 0 auto;\n\t\t\tpadding: 20px 50px 50px 50px;\n\n\t\t\t&-empty-info {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t&__sidebar {\n\t\t\tmargin: unset;\n\t\t\tposition: unset;\n\t\t}\n\t}\n}\n\n.user-actions {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n\tmargin-top: 20px;\n\n\t&__primary {\n\t\tmargin: 0 auto;\n\t}\n\n\t&__other {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\tgap: 0 4px;\n\t\ta {\n\t\t\tfilter: var(--background-invert-if-dark);\n\t\t}\n\t}\n}\n\n.icon-invert {\n\t&::v-deep .action-link__icon {\n\t\tfilter: invert(1);\n\t}\n}\n"],sourceRoot:""}]);const A=o}},a={};function r(t){var n=a[t];if(void 0!==n)return n.exports;var i=a[t]={id:t,loaded:!1,exports:{}};return e[t].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.m=e,n=[],r.O=(t,e,a,i)=>{if(!e){var o=1/0;for(d=0;d<n.length;d++){e=n[d][0],a=n[d][1],i=n[d][2];for(var A=!0,s=0;s<e.length;s++)(!1&i||o>=i)&&Object.keys(r.O).every((t=>r.O[t](e[s])))?e.splice(s--,1):(A=!1,i<o&&(o=i));if(A){n.splice(d--,1);var l=a();void 0!==l&&(t=l)}}return t}i=i||0;for(var d=n.length;d>0&&n[d-1][2]>i;d--)n[d]=n[d-1];n[d]=[e,a,i]},r.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return r.d(n,{a:n}),n},r.d=(t,n)=>{for(var e in n)r.o(n,e)&&!r.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r.j=9651,(()=>{r.b=document.baseURI||self.location.href;var t={9651:0};r.O.j=n=>0===t[n];var n=(n,e)=>{var a,i,o=e[0],A=e[1],s=e[2],l=0;if(o.some((n=>0!==t[n]))){for(a in A)r.o(A,a)&&(r.m[a]=A[a]);if(s)var d=s(r)}for(n&&n(e);l<o.length;l++)i=o[l],r.o(t,i)&&t[i]&&t[i][0](),t[i]=0;return r.O(d)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(n.bind(null,0)),e.push=n.bind(null,e.push.bind(e))})(),r.nc=void 0;var i=r.O(void 0,[7874],(()=>r(51608)));i=r.O(i)})();
-//# sourceMappingURL=core-profile.js.map?v=8122fe44e42a26ec9a91 \ No newline at end of file
+(()=>{"use strict";var n,e={15737:(n,e,a)=>{var r=a(20144),i=a(45994),o=a(31352),A=a(2324),s=a(17499);const c=null===(l=(0,i.ts)())?(0,s.IY)().setApp("core").build():(0,s.IY)().setApp("core").setUid(l.uid).build();var l,d=a(78595),p=a(79954),C=a(79753),u=a(64024),_=a(75925),f=a.n(_),v=a(12945),g=a.n(v),h=a(76212),m=a.n(h),x=a(50246),b=a(73229),y=a(86158);const k={name:"PrimaryActionButton",props:{disabled:{type:Boolean,default:!1},href:{type:String,required:!0},icon:{type:String,required:!0},target:{type:String,required:!0,validator:t=>["_self","_blank","_parent","_top"].includes(t)}},computed:{colorPrimaryText:()=>getComputedStyle(document.body).getPropertyValue("--color-primary-text").trim()}};var w=a(93379),B=a.n(w),E=a(7795),D=a.n(E),I=a(90569),S=a.n(I),P=a(3565),O=a.n(P),U=a(19216),z=a.n(U),j=a(44589),M=a.n(j),G=a(81001),Z={};Z.styleTagTransform=M(),Z.setAttributes=O(),Z.insert=S().bind(null,"head"),Z.domAPI=D(),Z.insertStyleElement=z(),B()(G.Z,Z),G.Z&&G.Z.locals&&G.Z.locals;var W=a(51900);const Y=(0,W.Z)(k,(function(){var t=this,n=t._self._c;return n("a",t._g({staticClass:"profile__primary-action-button",class:{disabled:t.disabled},attrs:{href:t.href,target:t.target,rel:"noopener noreferrer nofollow"}},t.$listeners),[n("img",{staticClass:"icon",class:[t.icon,{"icon-invert":"#ffffff"===t.colorPrimaryText}],attrs:{src:t.icon}}),t._v(" "),t._t("default")],2)}),[],!1,null,"35d5c4b6",null).exports,T=(0,p.j)("core","status",{}),{userId:q,displayname:F,address:$,organisation:N,role:K,headline:L,biography:V,actions:H,isUserAvatarVisible:R}=(0,p.j)("core","profileParameters",{userId:null,displayname:null,address:null,organisation:null,role:null,headline:null,biography:null,actions:[],isUserAvatarVisible:!1}),J={name:"Profile",components:{AccountIcon:y.Z,NcActionLink:m(),NcActions:g(),NcAvatar:f(),MapMarkerIcon:x.Z,PencilIcon:b.default,PrimaryActionButton:Y},data:()=>({status:T,userId:q,displayname:F,address:$,organisation:N,role:K,headline:L,biography:V,actions:H,isUserAvatarVisible:R,sections:OCA.Core.ProfileSections.getSections()}),computed:{isCurrentUser(){var t;return(null===(t=(0,i.ts)())||void 0===t?void 0:t.uid)===this.userId},allActions(){return this.actions},primaryAction(){return this.allActions.length?this.allActions[0]:null},middleActions(){return this.allActions.slice(1,4).length?this.allActions.slice(1,4):null},otherActions(){return this.allActions.slice(4).length?this.allActions.slice(4):null},settingsUrl:()=>(0,C.generateUrl)("/settings/user"),colorMainBackground:()=>getComputedStyle(document.body).getPropertyValue("--color-main-background").trim(),emptyProfileMessage(){return this.isCurrentUser?t("core","You have not added any info yet"):t("core","{user} has not added any info yet",{user:this.displayname||this.userId})}},mounted(){document.title="".concat(this.displayname||this.userId," - ").concat(document.title),(0,d.Ld)("user_status:status.updated",this.handleStatusUpdate)},beforeDestroy(){(0,d.r1)("user_status:status.updated",this.handleStatusUpdate)},methods:{handleStatusUpdate(t){this.isCurrentUser&&t.userId===this.userId&&(this.status=t)},openStatusModal(){const n=document.querySelector(".user-status-menu-item__toggle");this.isCurrentUser&&(n?n.click():(0,u.x2)(t("core","Error opening the user status modal, try hard refreshing the page")))}}};var Q=a(57476),X={};X.styleTagTransform=M(),X.setAttributes=O(),X.insert=S().bind(null,"head"),X.domAPI=D(),X.insertStyleElement=z(),B()(Q.Z,X),Q.Z&&Q.Z.locals&&Q.Z.locals;var tt=a(99037),nt={};nt.styleTagTransform=M(),nt.setAttributes=O(),nt.insert=S().bind(null,"head"),nt.domAPI=D(),nt.insertStyleElement=z(),B()(tt.Z,nt),tt.Z&&tt.Z.locals&&tt.Z.locals;const et=(0,W.Z)(J,(function(){var t=this,n=t._self._c;return n("div",{staticClass:"profile"},[n("div",{staticClass:"profile__header"},[n("div",{staticClass:"profile__header__container"},[n("div",{staticClass:"profile__header__container__placeholder"}),t._v(" "),n("h2",{staticClass:"profile__header__container__displayname"},[t._v("\n\t\t\t\t"+t._s(t.displayname||t.userId)+"\n\t\t\t\t"),t.isCurrentUser?n("a",{staticClass:"primary profile__header__container__edit-button",attrs:{href:t.settingsUrl}},[n("PencilIcon",{staticClass:"pencil-icon",attrs:{size:16}}),t._v("\n\t\t\t\t\t"+t._s(t.t("core","Edit Profile"))+"\n\t\t\t\t")],1):t._e()]),t._v(" "),t.status.icon||t.status.message?n("div",{staticClass:"profile__header__container__status-text",class:{interactive:t.isCurrentUser},on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.openStatusModal.apply(null,arguments)}}},[t._v("\n\t\t\t\t"+t._s(t.status.icon)+" "+t._s(t.status.message)+"\n\t\t\t")]):t._e()])]),t._v(" "),n("div",{staticClass:"profile__wrapper"},[n("div",{staticClass:"profile__content"},[n("div",{staticClass:"profile__sidebar"},[n("NcAvatar",{staticClass:"avatar",class:{interactive:t.isCurrentUser},attrs:{user:t.userId,size:180,"show-user-status":!0,"show-user-status-compact":!1,"disable-menu":!0,"disable-tooltip":!0,"is-no-user":!t.isUserAvatarVisible},nativeOn:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.openStatusModal.apply(null,arguments)}}}),t._v(" "),n("div",{staticClass:"user-actions"},[t.primaryAction?n("PrimaryActionButton",{staticClass:"user-actions__primary",attrs:{href:t.primaryAction.target,icon:t.primaryAction.icon,target:"phone"===t.primaryAction.id?"_self":"_blank"}},[t._v("\n\t\t\t\t\t\t"+t._s(t.primaryAction.title)+"\n\t\t\t\t\t")]):t._e(),t._v(" "),n("div",{staticClass:"user-actions__other"},[t._l(t.middleActions,(function(e){return n("NcActions",{key:e.id,staticStyle:{"background-position":"14px center","background-size":"16px","background-repeat":"no-repeat"},style:{backgroundImage:"url(".concat(e.icon,")"),..."#181818"===t.colorMainBackground&&{filter:"invert(1)"}},attrs:{"default-icon":e.icon}},[n("NcActionLink",{attrs:{"close-after-click":!0,icon:e.icon,href:e.target,target:"phone"===e.id?"_self":"_blank"}},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(e.title)+"\n\t\t\t\t\t\t\t")])],1)})),t._v(" "),t.otherActions?[n("NcActions",{attrs:{"force-menu":!0}},t._l(t.otherActions,(function(e){return n("NcActionLink",{key:e.id,class:{"icon-invert":"#181818"===t.colorMainBackground},attrs:{"close-after-click":!0,icon:e.icon,href:e.target,target:"phone"===e.id?"_self":"_blank"}},[t._v("\n\t\t\t\t\t\t\t\t\t"+t._s(e.title)+"\n\t\t\t\t\t\t\t\t")])})),1)]:t._e()],2)],1)],1),t._v(" "),n("div",{staticClass:"profile__blocks"},[t.organisation||t.role||t.address?n("div",{staticClass:"profile__blocks-details"},[t.organisation||t.role?n("div",{staticClass:"detail"},[n("p",[t._v(t._s(t.organisation)+" "),t.organisation&&t.role?n("span",[t._v("•")]):t._e(),t._v(" "+t._s(t.role))])]):t._e(),t._v(" "),t.address?n("div",{staticClass:"detail"},[n("p",[n("MapMarkerIcon",{staticClass:"map-icon",attrs:{size:16}}),t._v("\n\t\t\t\t\t\t\t"+t._s(t.address)+"\n\t\t\t\t\t\t")],1)]):t._e()]):t._e(),t._v(" "),t.headline||t.biography||t.sections.length>0?[t.headline?n("div",{staticClass:"profile__blocks-headline"},[n("h3",[t._v(t._s(t.headline))])]):t._e(),t._v(" "),t.biography?n("div",{staticClass:"profile__blocks-biography"},[n("p",[t._v(t._s(t.biography))])]):t._e(),t._v(" "),t._l(t.sections,(function(e,a){return n("div",{key:a,ref:"section-"+a,refInFor:!0,staticClass:"profile__additionalContent"},[n(e(t.$refs["section-"+a],t.userId),{tag:"component",attrs:{userId:t.userId}})],1)}))]:[n("div",{staticClass:"profile__blocks-empty-info"},[n("AccountIcon",{attrs:{size:60,"fill-color":"var(--color-text-maxcontrast)"}}),t._v(" "),n("h3",[t._v(t._s(t.emptyProfileMessage))]),t._v(" "),n("p",[t._v(t._s(t.t("core","The headline and about sections will show up here")))])],1)]],2)])])])}),[],!1,null,"c8c42fa4",null).exports;a.nc=btoa((0,i.IH)()),window.OCA||(window.OCA={}),window.OCA.Core||(window.OCA.Core={}),Object.assign(window.OCA.Core,{ProfileSections:new class{constructor(){var t,n,e;t=this,e=void 0,(n=function(t){var n=function(t,n){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var a=e.call(t,"string");if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof n?n:String(n)}(n="_sections"))in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,this._sections=[]}registerSection(t){this._sections.push(t)}getSections(){return this._sections}}}),r.default.use(A.default),r.default.mixin({props:{logger:c},methods:{t:o.Iu}});const at=r.default.extend(et);window.addEventListener("DOMContentLoaded",(()=>{(new at).$mount("#vue-profile")}))},81001:(t,n,e)=>{e.d(n,{Z:()=>A});var a=e(87537),r=e.n(a),i=e(23645),o=e.n(i)()(r());o.push([t.id,".profile__primary-action-button[data-v-35d5c4b6]{font-size:var(--default-font-size);font-weight:bold;width:188px;height:44px;padding:0 16px;line-height:44px;text-align:center;border-radius:var(--border-radius-pill);color:var(--color-primary-text);background-color:var(--color-primary-element);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.profile__primary-action-button .icon[data-v-35d5c4b6]{display:inline-block;vertical-align:middle;margin-bottom:2px;margin-right:4px}.profile__primary-action-button .icon.icon-invert[data-v-35d5c4b6]{filter:invert(1)}.profile__primary-action-button[data-v-35d5c4b6]:hover,.profile__primary-action-button[data-v-35d5c4b6]:focus,.profile__primary-action-button[data-v-35d5c4b6]:active{background-color:var(--color-primary-element-light)}","",{version:3,sources:["webpack://./core/src/components/Profile/PrimaryActionButton.vue"],names:[],mappings:"AACA,iDACC,kCAAA,CACA,gBAAA,CACA,WAAA,CACA,WAAA,CACA,cAAA,CACA,gBAAA,CACA,iBAAA,CACA,uCAAA,CACA,+BAAA,CACA,6CAAA,CACA,eAAA,CACA,kBAAA,CACA,sBAAA,CAEA,uDACC,oBAAA,CACA,qBAAA,CACA,iBAAA,CACA,gBAAA,CAEA,mEACC,gBAAA,CAIF,sKAGC,mDAAA",sourcesContent:["\n.profile__primary-action-button {\n\tfont-size: var(--default-font-size);\n\tfont-weight: bold;\n\twidth: 188px;\n\theight: 44px;\n\tpadding: 0 16px;\n\tline-height: 44px;\n\ttext-align: center;\n\tborder-radius: var(--border-radius-pill);\n\tcolor: var(--color-primary-text);\n\tbackground-color: var(--color-primary-element);\n\toverflow: hidden;\n\twhite-space: nowrap;\n\ttext-overflow: ellipsis;\n\n\t.icon {\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t\tmargin-bottom: 2px;\n\t\tmargin-right: 4px;\n\n\t\t&.icon-invert {\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-primary-element-light);\n\t}\n}\n"],sourceRoot:""}]);const A=o},57476:(t,n,e)=>{e.d(n,{Z:()=>A});var a=e(87537),r=e.n(a),i=e(23645),o=e.n(i)()(r());o.push([t.id,"#header{background-color:rgba(0,0,0,0) !important;background-image:none !important}#content{padding-top:0px}","",{version:3,sources:["webpack://./core/src/views/Profile.vue"],names:[],mappings:"AAEA,QACC,yCAAA,CACA,gCAAA,CAGD,SACC,eAAA",sourcesContent:["\n// Override header styles\n#header {\n\tbackground-color: transparent !important;\n\tbackground-image: none !important;\n}\n\n#content {\n\tpadding-top: 0px;\n}\n"],sourceRoot:""}]);const A=o},99037:(t,n,e)=>{e.d(n,{Z:()=>A});var a=e(87537),r=e.n(a),i=e(23645),o=e.n(i)()(r());o.push([t.id,".profile[data-v-c8c42fa4]{width:100%;overflow-y:auto}.profile__header[data-v-c8c42fa4]{position:sticky;height:190px;top:-40px;background-color:var(--color-main-background-blur);backdrop-filter:var(--filter-background-blur);-webkit-backdrop-filter:var(--filter-background-blur)}.profile__header__container[data-v-c8c42fa4]{align-self:flex-end;width:100%;max-width:1024px;margin:0 auto;display:grid;grid-template-rows:max-content max-content;grid-template-columns:240px 1fr;justify-content:center}.profile__header__container__placeholder[data-v-c8c42fa4]{grid-row:1/3}.profile__header__container__displayname[data-v-c8c42fa4],.profile__header__container__status-text[data-v-c8c42fa4]{color:var(--color-main-text)}.profile__header__container__displayname[data-v-c8c42fa4]{width:640px;height:45px;margin-top:128px;margin-bottom:0;font-size:30px;display:flex;align-items:center;cursor:text}.profile__header__container__displayname[data-v-c8c42fa4]:not(:last-child){margin-top:100px;margin-bottom:4px}.profile__header__container__edit-button[data-v-c8c42fa4]{border:none;margin-left:18px;margin-top:2px;color:var(--color-primary-element);background-color:var(--color-primary-text);box-shadow:0 0 0 2px var(--color-primary-text);border-radius:var(--border-radius-pill);padding:0 18px;font-size:var(--default-font-size);height:44px;line-height:44px;font-weight:bold}.profile__header__container__edit-button[data-v-c8c42fa4]:hover,.profile__header__container__edit-button[data-v-c8c42fa4]:focus,.profile__header__container__edit-button[data-v-c8c42fa4]:active{color:var(--color-primary-element);background-color:var(--color-primary-element-light)}.profile__header__container__edit-button .pencil-icon[data-v-c8c42fa4]{display:inline-block;vertical-align:middle;margin-top:2px}.profile__header__container__status-text[data-v-c8c42fa4]{width:max-content;max-width:640px;padding:5px 10px;margin-left:-12px;margin-top:2px}.profile__header__container__status-text.interactive[data-v-c8c42fa4]{cursor:pointer}.profile__header__container__status-text.interactive[data-v-c8c42fa4]:hover,.profile__header__container__status-text.interactive[data-v-c8c42fa4]:focus,.profile__header__container__status-text.interactive[data-v-c8c42fa4]:active{background-color:var(--color-main-background);color:var(--color-main-text);border-radius:var(--border-radius-pill);font-weight:bold;box-shadow:0 3px 6px var(--color-box-shadow)}.profile__sidebar[data-v-c8c42fa4]{position:sticky;top:var(--header-height);align-self:flex-start;padding-top:20px;min-width:220px;margin:-150px 20px 0 0}.profile__sidebar[data-v-c8c42fa4] .avatar.avatardiv,.profile__sidebar h2[data-v-c8c42fa4]{text-align:center;margin:auto;display:block;padding:8px}.profile__sidebar[data-v-c8c42fa4] .avatar.avatardiv:not(.avatardiv--unknown){background-color:var(--color-main-background) !important;box-shadow:none}.profile__sidebar[data-v-c8c42fa4] .avatar.avatardiv .avatardiv__user-status{right:14px;bottom:14px;width:34px;height:34px;background-size:28px;border:none;background-color:var(--color-main-background);line-height:34px;font-size:20px}.profile__sidebar[data-v-c8c42fa4] .avatar.interactive.avatardiv .avatardiv__user-status{cursor:pointer}.profile__sidebar[data-v-c8c42fa4] .avatar.interactive.avatardiv .avatardiv__user-status:hover,.profile__sidebar[data-v-c8c42fa4] .avatar.interactive.avatardiv .avatardiv__user-status:focus,.profile__sidebar[data-v-c8c42fa4] .avatar.interactive.avatardiv .avatardiv__user-status:active{box-shadow:0 3px 6px var(--color-box-shadow)}.profile__wrapper[data-v-c8c42fa4]{background-color:var(--color-main-background);min-height:100%}.profile__content[data-v-c8c42fa4]{max-width:1024px;margin:0 auto;display:flex;width:100%}.profile__blocks[data-v-c8c42fa4]{margin:18px 0 80px 0;display:grid;gap:16px 0;width:640px}.profile__blocks p[data-v-c8c42fa4],.profile__blocks h3[data-v-c8c42fa4]{overflow-wrap:anywhere}.profile__blocks-details[data-v-c8c42fa4]{display:flex;flex-direction:column;gap:2px 0}.profile__blocks-details .detail[data-v-c8c42fa4]{display:inline-block;color:var(--color-text-maxcontrast)}.profile__blocks-details .detail p .map-icon[data-v-c8c42fa4]{display:inline-block;vertical-align:middle}.profile__blocks-headline[data-v-c8c42fa4]{margin-top:10px}.profile__blocks-headline h3[data-v-c8c42fa4]{font-weight:bold;font-size:20px;margin:0}.profile__blocks-biography[data-v-c8c42fa4]{white-space:pre-line}.profile__blocks h3[data-v-c8c42fa4],.profile__blocks p[data-v-c8c42fa4]{cursor:text}.profile__blocks-empty-info[data-v-c8c42fa4]{margin-top:80px;margin-right:100px;display:flex;flex-direction:column;text-align:center}.profile__blocks-empty-info h3[data-v-c8c42fa4]{font-weight:bold;font-size:18px;margin:8px 0}@media only screen and (max-width: 1024px){.profile__header[data-v-c8c42fa4]{height:250px;position:unset}.profile__header__container[data-v-c8c42fa4]{grid-template-columns:unset}.profile__header__container__displayname[data-v-c8c42fa4]{margin:80px 20px 0px !important;height:1em;width:unset;display:unset;text-align:center}.profile__header__container__edit-button[data-v-c8c42fa4]{width:fit-content;display:block;margin:60px auto}.profile__header__container__status-text[data-v-c8c42fa4]{margin:4px auto}.profile__content[data-v-c8c42fa4]{display:block}.profile__blocks[data-v-c8c42fa4]{width:unset;max-width:600px;margin:0 auto;padding:20px 50px 50px 50px}.profile__blocks-empty-info[data-v-c8c42fa4]{margin:0}.profile__sidebar[data-v-c8c42fa4]{margin:unset;position:unset}}.user-actions[data-v-c8c42fa4]{display:flex;flex-direction:column;gap:8px 0;margin-top:20px}.user-actions__primary[data-v-c8c42fa4]{margin:0 auto}.user-actions__other[data-v-c8c42fa4]{display:flex;justify-content:center;gap:0 4px}.user-actions__other a[data-v-c8c42fa4]{filter:var(--background-invert-if-dark)}.icon-invert[data-v-c8c42fa4] .action-link__icon{filter:invert(1)}","",{version:3,sources:["webpack://./core/src/views/Profile.vue"],names:[],mappings:"AAIA,0BACC,UAAA,CACA,eAAA,CAEA,kCACC,eAAA,CACA,YAAA,CACA,SAAA,CACA,kDAAA,CACA,6CAAA,CACA,qDAAA,CAEA,6CACC,mBAAA,CACA,UAAA,CACA,gBAlBiB,CAmBjB,aAAA,CACA,YAAA,CACA,0CAAA,CACA,+BAAA,CACA,sBAAA,CAEA,0DACC,YAAA,CAGD,oHACC,4BAAA,CAGD,0DACC,WAjCgB,CAkChB,WAAA,CACA,gBAAA,CAEA,eAAA,CACA,cAAA,CACA,YAAA,CACA,kBAAA,CACA,WAAA,CAEA,2EACC,gBAAA,CACA,iBAAA,CAIF,0DACC,WAAA,CACA,gBAAA,CACA,cAAA,CACA,kCAAA,CACA,0CAAA,CACA,8CAAA,CACA,uCAAA,CACA,cAAA,CACA,kCAAA,CACA,WAAA,CACA,gBAAA,CACA,gBAAA,CAEA,iMAGC,kCAAA,CACA,mDAAA,CAGD,uEACC,oBAAA,CACA,qBAAA,CACA,cAAA,CAIF,0DACC,iBAAA,CACA,eA/EgB,CAgFhB,gBAAA,CACA,iBAAA,CACA,cAAA,CAEA,sEACC,cAAA,CAEA,qOAGC,6CAAA,CACA,4BAAA,CACA,uCAAA,CACA,gBAAA,CACA,4CAAA,CAOL,mCACC,eAAA,CACA,wBAAA,CACA,qBAAA,CACA,gBAAA,CACA,eAAA,CACA,sBAAA,CAGA,2FACC,iBAAA,CACA,WAAA,CACA,aAAA,CACA,WAAA,CAGD,8EACC,wDAAA,CACA,eAAA,CAIA,6EACC,UAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,oBAAA,CACA,WAAA,CAEA,6CAAA,CACA,gBAAA,CACA,cAAA,CAKD,yFACC,cAAA,CAEA,8RAGC,4CAAA,CAMJ,mCACC,6CAAA,CACA,eAAA,CAGD,mCACC,gBA7JkB,CA8JlB,aAAA,CACA,YAAA,CACA,UAAA,CAGD,kCACC,oBAAA,CACA,YAAA,CACA,UAAA,CACA,WAtKkB,CAwKlB,yEACC,sBAAA,CAGD,0CACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,kDACC,oBAAA,CACA,mCAAA,CAEA,8DACC,oBAAA,CACA,qBAAA,CAKH,2CACC,eAAA,CAEA,8CACC,gBAAA,CACA,cAAA,CACA,QAAA,CAIF,4CACC,oBAAA,CAGD,yEACC,WAAA,CAGD,6CACC,eAAA,CACA,kBAAA,CACA,YAAA,CACA,qBAAA,CACA,iBAAA,CAEA,gDACC,gBAAA,CACA,cAAA,CACA,YAAA,CAMJ,2CAEE,kCACC,YAAA,CACA,cAAA,CAEA,6CACC,2BAAA,CAEA,0DACC,+BAAA,CACA,UAAA,CACA,WAAA,CACA,aAAA,CACA,iBAAA,CAGD,0DACC,iBAAA,CACA,aAAA,CACA,gBAAA,CAGD,0DACC,eAAA,CAKH,mCACC,aAAA,CAGD,kCACC,WAAA,CACA,eAAA,CACA,aAAA,CACA,2BAAA,CAEA,6CACC,QAAA,CAIF,mCACC,YAAA,CACA,cAAA,CAAA,CAKH,+BACC,YAAA,CACA,qBAAA,CACA,SAAA,CACA,eAAA,CAEA,wCACC,aAAA,CAGD,sCACC,YAAA,CACA,sBAAA,CACA,SAAA,CACA,wCACC,uCAAA,CAMF,iDACC,gBAAA",sourcesContent:["\n$profile-max-width: 1024px;\n$content-max-width: 640px;\n\n.profile {\n\twidth: 100%;\n\toverflow-y: auto;\n\n\t&__header {\n\t\tposition: sticky;\n\t\theight: 190px;\n\t\ttop: -40px;\n\t\tbackground-color: var(--color-main-background-blur);\n\t\tbackdrop-filter: var(--filter-background-blur);\n\t\t-webkit-backdrop-filter: var(--filter-background-blur);\n\n\t\t&__container {\n\t\t\talign-self: flex-end;\n\t\t\twidth: 100%;\n\t\t\tmax-width: $profile-max-width;\n\t\t\tmargin: 0 auto;\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-rows: max-content max-content;\n\t\t\tgrid-template-columns: 240px 1fr;\n\t\t\tjustify-content: center;\n\n\t\t\t&__placeholder {\n\t\t\t\tgrid-row: 1 / 3;\n\t\t\t}\n\n\t\t\t&__displayname, &__status-text {\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\n\t\t\t&__displayname {\n\t\t\t\twidth: $content-max-width;\n\t\t\t\theight: 45px;\n\t\t\t\tmargin-top: 128px;\n\t\t\t\t// Override the global style declaration\n\t\t\t\tmargin-bottom: 0;\n\t\t\t\tfont-size: 30px;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tcursor: text;\n\n\t\t\t\t&:not(:last-child) {\n\t\t\t\t\tmargin-top: 100px;\n\t\t\t\t\tmargin-bottom: 4px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__edit-button {\n\t\t\t\tborder: none;\n\t\t\t\tmargin-left: 18px;\n\t\t\t\tmargin-top: 2px;\n\t\t\t\tcolor: var(--color-primary-element);\n\t\t\t\tbackground-color: var(--color-primary-text);\n\t\t\t\tbox-shadow: 0 0 0 2px var(--color-primary-text);\n\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\tpadding: 0 18px;\n\t\t\t\tfont-size: var(--default-font-size);\n\t\t\t\theight: 44px;\n\t\t\t\tline-height: 44px;\n\t\t\t\tfont-weight: bold;\n\n\t\t\t\t&:hover,\n\t\t\t\t&:focus,\n\t\t\t\t&:active {\n\t\t\t\t\tcolor: var(--color-primary-element);\n\t\t\t\t\tbackground-color: var(--color-primary-element-light);\n\t\t\t\t}\n\n\t\t\t\t.pencil-icon {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\tmargin-top: 2px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__status-text {\n\t\t\t\twidth: max-content;\n\t\t\t\tmax-width: $content-max-width;\n\t\t\t\tpadding: 5px 10px;\n\t\t\t\tmargin-left: -12px;\n\t\t\t\tmargin-top: 2px;\n\n\t\t\t\t&.interactive {\n\t\t\t\t\tcursor: pointer;\n\n\t\t\t\t\t&:hover,\n\t\t\t\t\t&:focus,\n\t\t\t\t\t&:active {\n\t\t\t\t\t\tbackground-color: var(--color-main-background);\n\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\tbox-shadow: 0 3px 6px var(--color-box-shadow);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&__sidebar {\n\t\tposition: sticky;\n\t\ttop: var(--header-height);\n\t\talign-self: flex-start;\n\t\tpadding-top: 20px;\n\t\tmin-width: 220px;\n\t\tmargin: -150px 20px 0 0;\n\n\t\t// Specificity hack is needed to override Avatar component styles\n\t\t&::v-deep .avatar.avatardiv, h2 {\n\t\t\ttext-align: center;\n\t\t\tmargin: auto;\n\t\t\tdisplay: block;\n\t\t\tpadding: 8px;\n\t\t}\n\n\t\t&::v-deep .avatar.avatardiv:not(.avatardiv--unknown) {\n\t\t\tbackground-color: var(--color-main-background) !important;\n\t\t\tbox-shadow: none;\n\t\t}\n\n\t\t&::v-deep .avatar.avatardiv {\n\t\t\t.avatardiv__user-status {\n\t\t\t\tright: 14px;\n\t\t\t\tbottom: 14px;\n\t\t\t\twidth: 34px;\n\t\t\t\theight: 34px;\n\t\t\t\tbackground-size: 28px;\n\t\t\t\tborder: none;\n\t\t\t\t// Styles when custom status icon and status text are set\n\t\t\t\tbackground-color: var(--color-main-background);\n\t\t\t\tline-height: 34px;\n\t\t\t\tfont-size: 20px;\n\t\t\t}\n\t\t}\n\n\t\t&::v-deep .avatar.interactive.avatardiv {\n\t\t\t.avatardiv__user-status {\n\t\t\t\tcursor: pointer;\n\n\t\t\t\t&:hover,\n\t\t\t\t&:focus,\n\t\t\t\t&:active {\n\t\t\t\t\tbox-shadow: 0 3px 6px var(--color-box-shadow);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&__wrapper {\n\t\tbackground-color: var(--color-main-background);\n\t\tmin-height: 100%;\n\t}\n\n\t&__content {\n\t\tmax-width: $profile-max-width;\n\t\tmargin: 0 auto;\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\n\t&__blocks {\n\t\tmargin: 18px 0 80px 0;\n\t\tdisplay: grid;\n\t\tgap: 16px 0;\n\t\twidth: $content-max-width;\n\n\t\tp, h3 {\n\t\t\toverflow-wrap: anywhere;\n\t\t}\n\n\t\t&-details {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px 0;\n\n\t\t\t.detail {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: var(--color-text-maxcontrast);\n\n\t\t\t\tp .map-icon {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&-headline {\n\t\t\tmargin-top: 10px;\n\n\t\t\th3 {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-size: 20px;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t&-biography {\n\t\t\twhite-space: pre-line;\n\t\t}\n\n\t\th3, p {\n\t\t\tcursor: text;\n\t\t}\n\n\t\t&-empty-info {\n\t\t\tmargin-top: 80px;\n\t\t\tmargin-right: 100px;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\ttext-align: center;\n\n\t\t\th3 {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-size: 18px;\n\t\t\t\tmargin: 8px 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\n@media only screen and (max-width: 1024px) {\n\t.profile {\n\t\t&__header {\n\t\t\theight: 250px;\n\t\t\tposition: unset;\n\n\t\t\t&__container {\n\t\t\t\tgrid-template-columns: unset;\n\n\t\t\t\t&__displayname {\n\t\t\t\t\tmargin: 80px 20px 0px!important;\n\t\t\t\t\theight: 1em;\n\t\t\t\t\twidth: unset;\n\t\t\t\t\tdisplay: unset;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\n\t\t\t\t&__edit-button {\n\t\t\t\t\twidth: fit-content;\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tmargin: 60px auto;\n\t\t\t\t}\n\n\t\t\t\t&__status-text {\n\t\t\t\t\tmargin: 4px auto;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__content {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t&__blocks {\n\t\t\twidth: unset;\n\t\t\tmax-width: 600px;\n\t\t\tmargin: 0 auto;\n\t\t\tpadding: 20px 50px 50px 50px;\n\n\t\t\t&-empty-info {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t&__sidebar {\n\t\t\tmargin: unset;\n\t\t\tposition: unset;\n\t\t}\n\t}\n}\n\n.user-actions {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n\tmargin-top: 20px;\n\n\t&__primary {\n\t\tmargin: 0 auto;\n\t}\n\n\t&__other {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\tgap: 0 4px;\n\t\ta {\n\t\t\tfilter: var(--background-invert-if-dark);\n\t\t}\n\t}\n}\n\n.icon-invert {\n\t&::v-deep .action-link__icon {\n\t\tfilter: invert(1);\n\t}\n}\n"],sourceRoot:""}]);const A=o}},a={};function r(t){var n=a[t];if(void 0!==n)return n.exports;var i=a[t]={id:t,loaded:!1,exports:{}};return e[t].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.m=e,n=[],r.O=(t,e,a,i)=>{if(!e){var o=1/0;for(l=0;l<n.length;l++){e=n[l][0],a=n[l][1],i=n[l][2];for(var A=!0,s=0;s<e.length;s++)(!1&i||o>=i)&&Object.keys(r.O).every((t=>r.O[t](e[s])))?e.splice(s--,1):(A=!1,i<o&&(o=i));if(A){n.splice(l--,1);var c=a();void 0!==c&&(t=c)}}return t}i=i||0;for(var l=n.length;l>0&&n[l-1][2]>i;l--)n[l]=n[l-1];n[l]=[e,a,i]},r.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return r.d(n,{a:n}),n},r.d=(t,n)=>{for(var e in n)r.o(n,e)&&!r.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r.j=9651,(()=>{r.b=document.baseURI||self.location.href;var t={9651:0};r.O.j=n=>0===t[n];var n=(n,e)=>{var a,i,o=e[0],A=e[1],s=e[2],c=0;if(o.some((n=>0!==t[n]))){for(a in A)r.o(A,a)&&(r.m[a]=A[a]);if(s)var l=s(r)}for(n&&n(e);c<o.length;c++)i=o[c],r.o(t,i)&&t[i]&&t[i][0](),t[i]=0;return r.O(l)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(n.bind(null,0)),e.push=n.bind(null,e.push.bind(e))})(),r.nc=void 0;var i=r.O(void 0,[7874],(()=>r(15737)));i=r.O(i)})();
+//# sourceMappingURL=core-profile.js.map?v=8f124ca36ed5e81dd44e \ No newline at end of file
diff --git a/dist/core-profile.js.map b/dist/core-profile.js.map
index 67cd4973cb8..32073ffb786 100644
--- a/dist/core-profile.js.map
+++ b/dist/core-profile.js.map
@@ -1 +1 @@
-{"version":3,"file":"core-profile.js?v=8122fe44e42a26ec9a91","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/logger.js","webpack:///nextcloud/core/src/components/Profile/PrimaryActionButton.vue","webpack:///nextcloud/core/src/components/Profile/PrimaryActionButton.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/Profile/PrimaryActionButton.vue?eba4","webpack://nextcloud/./core/src/components/Profile/PrimaryActionButton.vue?4873","webpack://nextcloud/./core/src/components/Profile/PrimaryActionButton.vue?2d98","webpack:///nextcloud/core/src/views/Profile.vue","webpack:///nextcloud/core/src/views/Profile.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/views/Profile.vue?a845","webpack://nextcloud/./core/src/views/Profile.vue?2ecd","webpack://nextcloud/./core/src/views/Profile.vue?6193","webpack://nextcloud/./core/src/views/Profile.vue?bc3b","webpack:///nextcloud/core/src/profile.js","webpack:///nextcloud/core/src/profile/ProfileSections.js","webpack:///nextcloud/core/src/components/Profile/PrimaryActionButton.vue?vue&type=style&index=0&id=35d5c4b6&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/views/Profile.vue?vue&type=style&index=0&id=0bd17180&prod&lang=scss&","webpack:///nextcloud/core/src/views/Profile.vue?vue&type=style&index=1&id=0bd17180&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nconst getLogger = user => {\n\tif (user === null) {\n\t\treturn getLoggerBuilder()\n\t\t\t.setApp('core')\n\t\t\t.build()\n\t}\n\treturn getLoggerBuilder()\n\t\t.setApp('core')\n\t\t.setUid(user.uid)\n\t\t.build()\n}\n\nexport default getLogger(getCurrentUser())\n","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<a class=\"profile__primary-action-button\"\n\t\t:class=\"{ 'disabled': disabled }\"\n\t\t:href=\"href\"\n\t\t:target=\"target\"\n\t\trel=\"noopener noreferrer nofollow\"\n\t\tv-on=\"$listeners\">\n\t\t<img class=\"icon\"\n\t\t\t:class=\"[icon, { 'icon-invert': colorPrimaryText === '#ffffff' }]\"\n\t\t\t:src=\"icon\">\n\t\t<slot />\n\t</a>\n</template>\n\n<script>\nexport default {\n\tname: 'PrimaryActionButton',\n\n\tprops: {\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\thref: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttarget: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tvalidator: (value) => ['_self', '_blank', '_parent', '_top'].includes(value),\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tcolorPrimaryText() {\n\t\t\t// For some reason the returned string has prepended whitespace\n\t\t\treturn getComputedStyle(document.body).getPropertyValue('--color-primary-text').trim()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.profile__primary-action-button {\n\t\tfont-size: var(--default-font-size);\n\t\tfont-weight: bold;\n\t\twidth: 188px;\n\t\theight: 44px;\n\t\tpadding: 0 16px;\n\t\tline-height: 44px;\n\t\ttext-align: center;\n\t\tborder-radius: var(--border-radius-pill);\n\t\tcolor: var(--color-primary-text);\n\t\tbackground-color: var(--color-primary-element);\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\n\t\t.icon {\n\t\t\tdisplay: inline-block;\n\t\t\tvertical-align: middle;\n\t\t\tmargin-bottom: 2px;\n\t\t\tmargin-right: 4px;\n\n\t\t\t&.icon-invert {\n\t\t\t\tfilter: invert(1);\n\t\t\t}\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:active {\n\t\t\tbackground-color: var(--color-primary-element-light);\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrimaryActionButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrimaryActionButton.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrimaryActionButton.vue?vue&type=style&index=0&id=35d5c4b6&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrimaryActionButton.vue?vue&type=style&index=0&id=35d5c4b6&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PrimaryActionButton.vue?vue&type=template&id=35d5c4b6&scoped=true&\"\nimport script from \"./PrimaryActionButton.vue?vue&type=script&lang=js&\"\nexport * from \"./PrimaryActionButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PrimaryActionButton.vue?vue&type=style&index=0&id=35d5c4b6&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"35d5c4b6\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('a',_vm._g({staticClass:\"profile__primary-action-button\",class:{ 'disabled': _vm.disabled },attrs:{\"href\":_vm.href,\"target\":_vm.target,\"rel\":\"noopener noreferrer nofollow\"}},_vm.$listeners),[_c('img',{staticClass:\"icon\",class:[_vm.icon, { 'icon-invert': _vm.colorPrimaryText === '#ffffff' }],attrs:{\"src\":_vm.icon}}),_vm._v(\" \"),_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2021 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"profile\">\n\t\t<div class=\"profile__header\">\n\t\t\t<div class=\"profile__header__container\">\n\t\t\t\t<div class=\"profile__header__container__placeholder\" />\n\t\t\t\t<h2 class=\"profile__header__container__displayname\">\n\t\t\t\t\t{{ displayname || userId }}\n\t\t\t\t\t<a v-if=\"isCurrentUser\"\n\t\t\t\t\t\tclass=\"primary profile__header__container__edit-button\"\n\t\t\t\t\t\t:href=\"settingsUrl\">\n\t\t\t\t\t\t<PencilIcon class=\"pencil-icon\"\n\t\t\t\t\t\t\t:size=\"16\" />\n\t\t\t\t\t\t{{ t('core', 'Edit Profile') }}\n\t\t\t\t\t</a>\n\t\t\t\t</h2>\n\t\t\t\t<div v-if=\"status.icon || status.message\"\n\t\t\t\t\tclass=\"profile__header__container__status-text\"\n\t\t\t\t\t:class=\"{ interactive: isCurrentUser }\"\n\t\t\t\t\t@click.prevent.stop=\"openStatusModal\">\n\t\t\t\t\t{{ status.icon }} {{ status.message }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"profile__wrapper\">\n\t\t\t<div class=\"profile__content\">\n\t\t\t\t<div class=\"profile__sidebar\">\n\t\t\t\t\t<NcAvatar class=\"avatar\"\n\t\t\t\t\t\t:class=\"{ interactive: isCurrentUser }\"\n\t\t\t\t\t\t:user=\"userId\"\n\t\t\t\t\t\t:size=\"180\"\n\t\t\t\t\t\t:show-user-status=\"true\"\n\t\t\t\t\t\t:show-user-status-compact=\"false\"\n\t\t\t\t\t\t:disable-menu=\"true\"\n\t\t\t\t\t\t:disable-tooltip=\"true\"\n\t\t\t\t\t\t:is-no-user=\"!isUserAvatarVisible\"\n\t\t\t\t\t\t@click.native.prevent.stop=\"openStatusModal\" />\n\n\t\t\t\t\t<div class=\"user-actions\">\n\t\t\t\t\t\t<!-- When a tel: URL is opened with target=\"_blank\", a blank new tab is opened which is inconsistent with the handling of other URLs so we set target=\"_self\" for the phone action -->\n\t\t\t\t\t\t<PrimaryActionButton v-if=\"primaryAction\"\n\t\t\t\t\t\t\tclass=\"user-actions__primary\"\n\t\t\t\t\t\t\t:href=\"primaryAction.target\"\n\t\t\t\t\t\t\t:icon=\"primaryAction.icon\"\n\t\t\t\t\t\t\t:target=\"primaryAction.id === 'phone' ? '_self' :'_blank'\">\n\t\t\t\t\t\t\t{{ primaryAction.title }}\n\t\t\t\t\t\t</PrimaryActionButton>\n\t\t\t\t\t\t<div class=\"user-actions__other\">\n\t\t\t\t\t\t\t<!-- FIXME Remove inline styles after https://github.com/nextcloud/nextcloud-vue/issues/2315 is fixed -->\n\t\t\t\t\t\t\t<NcActions v-for=\"action in middleActions\"\n\t\t\t\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t\t\t\t:default-icon=\"action.icon\"\n\t\t\t\t\t\t\t\tstyle=\"\n\t\t\t\t\t\t\t\tbackground-position: 14px center;\n\t\t\t\t\t\t\t\tbackground-size: 16px;\n\t\t\t\t\t\t\t\tbackground-repeat: no-repeat;\"\n\t\t\t\t\t\t\t\t:style=\"{\n\t\t\t\t\t\t\t\t\tbackgroundImage: `url(${action.icon})`,\n\t\t\t\t\t\t\t\t\t...(colorMainBackground === '#181818' && { filter: 'invert(1)' })\n\t\t\t\t\t\t\t\t}\">\n\t\t\t\t\t\t\t\t<NcActionLink :close-after-click=\"true\"\n\t\t\t\t\t\t\t\t\t:icon=\"action.icon\"\n\t\t\t\t\t\t\t\t\t:href=\"action.target\"\n\t\t\t\t\t\t\t\t\t:target=\"action.id === 'phone' ? '_self' :'_blank'\">\n\t\t\t\t\t\t\t\t\t{{ action.title }}\n\t\t\t\t\t\t\t\t</NcActionLink>\n\t\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t\t<template v-if=\"otherActions\">\n\t\t\t\t\t\t\t\t<NcActions :force-menu=\"true\">\n\t\t\t\t\t\t\t\t\t<NcActionLink v-for=\"action in otherActions\"\n\t\t\t\t\t\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t\t\t\t\t\t:class=\"{ 'icon-invert': colorMainBackground === '#181818' }\"\n\t\t\t\t\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t\t\t\t\t:icon=\"action.icon\"\n\t\t\t\t\t\t\t\t\t\t:href=\"action.target\"\n\t\t\t\t\t\t\t\t\t\t:target=\"action.id === 'phone' ? '_self' :'_blank'\">\n\t\t\t\t\t\t\t\t\t\t{{ action.title }}\n\t\t\t\t\t\t\t\t\t</NcActionLink>\n\t\t\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"profile__blocks\">\n\t\t\t\t\t<div v-if=\"organisation || role || address\" class=\"profile__blocks-details\">\n\t\t\t\t\t\t<div v-if=\"organisation || role\" class=\"detail\">\n\t\t\t\t\t\t\t<p>{{ organisation }} <span v-if=\"organisation && role\">•</span> {{ role }}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"address\" class=\"detail\">\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t<MapMarkerIcon class=\"map-icon\"\n\t\t\t\t\t\t\t\t\t:size=\"16\" />\n\t\t\t\t\t\t\t\t{{ address }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<template v-if=\"headline || biography || sections.length > 0\">\n\t\t\t\t\t\t<div v-if=\"headline\" class=\"profile__blocks-headline\">\n\t\t\t\t\t\t\t<h3>{{ headline }}</h3>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"biography\" class=\"profile__blocks-biography\">\n\t\t\t\t\t\t\t<p>{{ biography }}</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- additional entries, use it with cautious -->\n\t\t\t\t\t\t<div v-for=\"(section, index) in sections\"\n\t\t\t\t\t\t\t:ref=\"'section-' + index\"\n\t\t\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t\t\tclass=\"profile__additionalContent\">\n\t\t\t\t\t\t\t<component :is=\"section($refs['section-'+index], userId)\" :userId=\"userId\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-else>\n\t\t\t\t\t\t<div class=\"profile__blocks-empty-info\">\n\t\t\t\t\t\t\t<AccountIcon :size=\"60\"\n\t\t\t\t\t\t\t\tfill-color=\"var(--color-text-maxcontrast)\" />\n\t\t\t\t\t\t\t<h3>{{ emptyProfileMessage }}</h3>\n\t\t\t\t\t\t\t<p>{{ t('core', 'The headline and about sections will show up here') }}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError } from '@nextcloud/dialogs'\n\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink.js'\nimport MapMarkerIcon from 'vue-material-design-icons/MapMarker.vue'\nimport PencilIcon from 'vue-material-design-icons/Pencil.vue'\nimport AccountIcon from 'vue-material-design-icons/Account.vue'\n\nimport PrimaryActionButton from '../components/Profile/PrimaryActionButton.vue'\n\nconst status = loadState('core', 'status', {})\nconst {\n\tuserId,\n\tdisplayname,\n\taddress,\n\torganisation,\n\trole,\n\theadline,\n\tbiography,\n\tactions,\n\tisUserAvatarVisible,\n} = loadState('core', 'profileParameters', {\n\tuserId: null,\n\tdisplayname: null,\n\taddress: null,\n\torganisation: null,\n\trole: null,\n\theadline: null,\n\tbiography: null,\n\tactions: [],\n\tisUserAvatarVisible: false,\n})\n\nexport default {\n\tname: 'Profile',\n\n\tcomponents: {\n\t\tAccountIcon,\n\t\tNcActionLink,\n\t\tNcActions,\n\t\tNcAvatar,\n\t\tMapMarkerIcon,\n\t\tPencilIcon,\n\t\tPrimaryActionButton,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tstatus,\n\t\t\tuserId,\n\t\t\tdisplayname,\n\t\t\taddress,\n\t\t\torganisation,\n\t\t\trole,\n\t\t\theadline,\n\t\t\tbiography,\n\t\t\tactions,\n\t\t\tisUserAvatarVisible,\n\t\t\tsections: OCA.Core.ProfileSections.getSections(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisCurrentUser() {\n\t\t\treturn getCurrentUser()?.uid === this.userId\n\t\t},\n\n\t\tallActions() {\n\t\t\treturn this.actions\n\t\t},\n\n\t\tprimaryAction() {\n\t\t\tif (this.allActions.length) {\n\t\t\t\treturn this.allActions[0]\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\tmiddleActions() {\n\t\t\tif (this.allActions.slice(1, 4).length) {\n\t\t\t\treturn this.allActions.slice(1, 4)\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\totherActions() {\n\t\t\tif (this.allActions.slice(4).length) {\n\t\t\t\treturn this.allActions.slice(4)\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\tsettingsUrl() {\n\t\t\treturn generateUrl('/settings/user')\n\t\t},\n\n\t\tcolorMainBackground() {\n\t\t\t// For some reason the returned string has prepended whitespace\n\t\t\treturn getComputedStyle(document.body).getPropertyValue('--color-main-background').trim()\n\t\t},\n\n\t\temptyProfileMessage() {\n\t\t\treturn this.isCurrentUser\n\t\t\t\t? t('core', 'You have not added any info yet')\n\t\t\t\t: t('core', '{user} has not added any info yet', { user: (this.displayname || this.userId) })\n\t\t},\n\t},\n\n\tmounted() {\n\t\t// Set the user's displayname or userId in the page title and preserve the default title of \"Nextcloud\" at the end\n\t\tdocument.title = `${this.displayname || this.userId} - ${document.title}`\n\t\tsubscribe('user_status:status.updated', this.handleStatusUpdate)\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('user_status:status.updated', this.handleStatusUpdate)\n\t},\n\n\tmethods: {\n\t\thandleStatusUpdate(status) {\n\t\t\tif (this.isCurrentUser && status.userId === this.userId) {\n\t\t\t\tthis.status = status\n\t\t\t}\n\t\t},\n\n\t\topenStatusModal() {\n\t\t\tconst statusMenuItem = document.querySelector('.user-status-menu-item__toggle')\n\t\t\t// Changing the user status is only enabled if you are the current user\n\t\t\tif (this.isCurrentUser) {\n\t\t\t\tif (statusMenuItem) {\n\t\t\t\t\tstatusMenuItem.click()\n\t\t\t\t} else {\n\t\t\t\t\tshowError(t('core', 'Error opening the user status modal, try hard refreshing the page'))\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n// Override header styles\n#header {\n\tbackground-color: transparent !important;\n\tbackground-image: none !important;\n}\n\n#content {\n\tpadding-top: 0px;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n$profile-max-width: 1024px;\n$content-max-width: 640px;\n\n.profile {\n\twidth: 100%;\n\toverflow-y: auto;\n\n\t&__header {\n\t\tposition: sticky;\n\t\theight: 190px;\n\t\ttop: -40px;\n\t\tbackground-color: var(--color-main-background-blur);\n\t\tbackdrop-filter: var(--filter-background-blur);\n\t\t-webkit-backdrop-filter: var(--filter-background-blur);\n\n\t\t&__container {\n\t\t\talign-self: flex-end;\n\t\t\twidth: 100%;\n\t\t\tmax-width: $profile-max-width;\n\t\t\tmargin: 0 auto;\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-rows: max-content max-content;\n\t\t\tgrid-template-columns: 240px 1fr;\n\t\t\tjustify-content: center;\n\n\t\t\t&__placeholder {\n\t\t\t\tgrid-row: 1 / 3;\n\t\t\t}\n\n\t\t\t&__displayname, &__status-text {\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\n\t\t\t&__displayname {\n\t\t\t\twidth: $content-max-width;\n\t\t\t\theight: 45px;\n\t\t\t\tmargin-top: 128px;\n\t\t\t\t// Override the global style declaration\n\t\t\t\tmargin-bottom: 0;\n\t\t\t\tfont-size: 30px;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tcursor: text;\n\n\t\t\t\t&:not(:last-child) {\n\t\t\t\t\tmargin-top: 100px;\n\t\t\t\t\tmargin-bottom: 4px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__edit-button {\n\t\t\t\tborder: none;\n\t\t\t\tmargin-left: 18px;\n\t\t\t\tmargin-top: 2px;\n\t\t\t\tcolor: var(--color-primary-element);\n\t\t\t\tbackground-color: var(--color-primary-text);\n\t\t\t\tbox-shadow: 0 0 0 2px var(--color-primary-text);\n\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\tpadding: 0 18px;\n\t\t\t\tfont-size: var(--default-font-size);\n\t\t\t\theight: 44px;\n\t\t\t\tline-height: 44px;\n\t\t\t\tfont-weight: bold;\n\n\t\t\t\t&:hover,\n\t\t\t\t&:focus,\n\t\t\t\t&:active {\n\t\t\t\t\tcolor: var(--color-primary-element);\n\t\t\t\t\tbackground-color: var(--color-primary-element-light);\n\t\t\t\t}\n\n\t\t\t\t.pencil-icon {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\tmargin-top: 2px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__status-text {\n\t\t\t\twidth: max-content;\n\t\t\t\tmax-width: $content-max-width;\n\t\t\t\tpadding: 5px 10px;\n\t\t\t\tmargin-left: -12px;\n\t\t\t\tmargin-top: 2px;\n\n\t\t\t\t&.interactive {\n\t\t\t\t\tcursor: pointer;\n\n\t\t\t\t\t&:hover,\n\t\t\t\t\t&:focus,\n\t\t\t\t\t&:active {\n\t\t\t\t\t\tbackground-color: var(--color-main-background);\n\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\tbox-shadow: 0 3px 6px var(--color-box-shadow);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&__sidebar {\n\t\tposition: sticky;\n\t\ttop: var(--header-height);\n\t\talign-self: flex-start;\n\t\tpadding-top: 20px;\n\t\tmin-width: 220px;\n\t\tmargin: -150px 20px 0 0;\n\n\t\t// Specificity hack is needed to override Avatar component styles\n\t\t&::v-deep .avatar.avatardiv, h2 {\n\t\t\ttext-align: center;\n\t\t\tmargin: auto;\n\t\t\tdisplay: block;\n\t\t\tpadding: 8px;\n\t\t}\n\n\t\t&::v-deep .avatar.avatardiv:not(.avatardiv--unknown) {\n\t\t\tbackground-color: var(--color-main-background) !important;\n\t\t\tbox-shadow: none;\n\t\t}\n\n\t\t&::v-deep .avatar.avatardiv {\n\t\t\t.avatardiv__user-status {\n\t\t\t\tright: 14px;\n\t\t\t\tbottom: 14px;\n\t\t\t\twidth: 34px;\n\t\t\t\theight: 34px;\n\t\t\t\tbackground-size: 28px;\n\t\t\t\tborder: none;\n\t\t\t\t// Styles when custom status icon and status text are set\n\t\t\t\tbackground-color: var(--color-main-background);\n\t\t\t\tline-height: 34px;\n\t\t\t\tfont-size: 20px;\n\t\t\t}\n\t\t}\n\n\t\t&::v-deep .avatar.interactive.avatardiv {\n\t\t\t.avatardiv__user-status {\n\t\t\t\tcursor: pointer;\n\n\t\t\t\t&:hover,\n\t\t\t\t&:focus,\n\t\t\t\t&:active {\n\t\t\t\t\tbox-shadow: 0 3px 6px var(--color-box-shadow);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&__wrapper {\n\t\tbackground-color: var(--color-main-background);\n\t\tmin-height: 100%;\n\t}\n\n\t&__content {\n\t\tmax-width: $profile-max-width;\n\t\tmargin: 0 auto;\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\n\t&__blocks {\n\t\tmargin: 18px 0 80px 0;\n\t\tdisplay: grid;\n\t\tgap: 16px 0;\n\t\twidth: $content-max-width;\n\n\t\tp, h3 {\n\t\t\toverflow-wrap: anywhere;\n\t\t}\n\n\t\t&-details {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px 0;\n\n\t\t\t.detail {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: var(--color-text-maxcontrast);\n\n\t\t\t\tp .map-icon {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&-headline {\n\t\t\tmargin-top: 10px;\n\n\t\t\th3 {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-size: 20px;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t&-biography {\n\t\t\twhite-space: pre-line;\n\t\t}\n\n\t\th3, p {\n\t\t\tcursor: text;\n\t\t}\n\n\t\t&-empty-info {\n\t\t\tmargin-top: 80px;\n\t\t\tmargin-right: 100px;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\ttext-align: center;\n\n\t\t\th3 {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-size: 18px;\n\t\t\t\tmargin: 8px 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\n@media only screen and (max-width: 1024px) {\n\t.profile {\n\t\t&__header {\n\t\t\theight: 250px;\n\t\t\tposition: unset;\n\n\t\t\t&__container {\n\t\t\t\tgrid-template-columns: unset;\n\n\t\t\t\t&__displayname {\n\t\t\t\t\tmargin: 100px 20px 0px;\n\t\t\t\t\twidth: unset;\n\t\t\t\t\tdisplay: unset;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\n\t\t\t\t&__edit-button {\n\t\t\t\t\twidth: fit-content;\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tmargin: 30px auto;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__content {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t&__blocks {\n\t\t\twidth: unset;\n\t\t\tmax-width: 600px;\n\t\t\tmargin: 0 auto;\n\t\t\tpadding: 20px 50px 50px 50px;\n\n\t\t\t&-empty-info {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t&__sidebar {\n\t\t\tmargin: unset;\n\t\t\tposition: unset;\n\t\t}\n\t}\n}\n\n.user-actions {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n\tmargin-top: 20px;\n\n\t&__primary {\n\t\tmargin: 0 auto;\n\t}\n\n\t&__other {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\tgap: 0 4px;\n\t\ta {\n\t\t\tfilter: var(--background-invert-if-dark);\n\t\t}\n\t}\n}\n\n.icon-invert {\n\t&::v-deep .action-link__icon {\n\t\tfilter: invert(1);\n\t}\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=0&id=0bd17180&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=0&id=0bd17180&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=1&id=0bd17180&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=1&id=0bd17180&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Profile.vue?vue&type=template&id=0bd17180&scoped=true&\"\nimport script from \"./Profile.vue?vue&type=script&lang=js&\"\nexport * from \"./Profile.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Profile.vue?vue&type=style&index=0&id=0bd17180&prod&lang=scss&\"\nimport style1 from \"./Profile.vue?vue&type=style&index=1&id=0bd17180&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0bd17180\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"profile\"},[_c('div',{staticClass:\"profile__header\"},[_c('div',{staticClass:\"profile__header__container\"},[_c('div',{staticClass:\"profile__header__container__placeholder\"}),_vm._v(\" \"),_c('h2',{staticClass:\"profile__header__container__displayname\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.displayname || _vm.userId)+\"\\n\\t\\t\\t\\t\"),(_vm.isCurrentUser)?_c('a',{staticClass:\"primary profile__header__container__edit-button\",attrs:{\"href\":_vm.settingsUrl}},[_c('PencilIcon',{staticClass:\"pencil-icon\",attrs:{\"size\":16}}),_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Edit Profile'))+\"\\n\\t\\t\\t\\t\")],1):_vm._e()]),_vm._v(\" \"),(_vm.status.icon || _vm.status.message)?_c('div',{staticClass:\"profile__header__container__status-text\",class:{ interactive: _vm.isCurrentUser },on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openStatusModal.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.status.icon)+\" \"+_vm._s(_vm.status.message)+\"\\n\\t\\t\\t\")]):_vm._e()])]),_vm._v(\" \"),_c('div',{staticClass:\"profile__wrapper\"},[_c('div',{staticClass:\"profile__content\"},[_c('div',{staticClass:\"profile__sidebar\"},[_c('NcAvatar',{staticClass:\"avatar\",class:{ interactive: _vm.isCurrentUser },attrs:{\"user\":_vm.userId,\"size\":180,\"show-user-status\":true,\"show-user-status-compact\":false,\"disable-menu\":true,\"disable-tooltip\":true,\"is-no-user\":!_vm.isUserAvatarVisible},nativeOn:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openStatusModal.apply(null, arguments)}}}),_vm._v(\" \"),_c('div',{staticClass:\"user-actions\"},[(_vm.primaryAction)?_c('PrimaryActionButton',{staticClass:\"user-actions__primary\",attrs:{\"href\":_vm.primaryAction.target,\"icon\":_vm.primaryAction.icon,\"target\":_vm.primaryAction.id === 'phone' ? '_self' :'_blank'}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.primaryAction.title)+\"\\n\\t\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"user-actions__other\"},[_vm._l((_vm.middleActions),function(action){return _c('NcActions',{key:action.id,staticStyle:{\"background-position\":\"14px center\",\"background-size\":\"16px\",\"background-repeat\":\"no-repeat\"},style:({\n\t\t\t\t\t\t\t\tbackgroundImage: `url(${action.icon})`,\n\t\t\t\t\t\t\t\t...(_vm.colorMainBackground === '#181818' && { filter: 'invert(1)' })\n\t\t\t\t\t\t\t}),attrs:{\"default-icon\":action.icon}},[_c('NcActionLink',{attrs:{\"close-after-click\":true,\"icon\":action.icon,\"href\":action.target,\"target\":action.id === 'phone' ? '_self' :'_blank'}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(action.title)+\"\\n\\t\\t\\t\\t\\t\\t\\t\")])],1)}),_vm._v(\" \"),(_vm.otherActions)?[_c('NcActions',{attrs:{\"force-menu\":true}},_vm._l((_vm.otherActions),function(action){return _c('NcActionLink',{key:action.id,class:{ 'icon-invert': _vm.colorMainBackground === '#181818' },attrs:{\"close-after-click\":true,\"icon\":action.icon,\"href\":action.target,\"target\":action.id === 'phone' ? '_self' :'_blank'}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(action.title)+\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\")])}),1)]:_vm._e()],2)],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"profile__blocks\"},[(_vm.organisation || _vm.role || _vm.address)?_c('div',{staticClass:\"profile__blocks-details\"},[(_vm.organisation || _vm.role)?_c('div',{staticClass:\"detail\"},[_c('p',[_vm._v(_vm._s(_vm.organisation)+\" \"),(_vm.organisation && _vm.role)?_c('span',[_vm._v(\"•\")]):_vm._e(),_vm._v(\" \"+_vm._s(_vm.role))])]):_vm._e(),_vm._v(\" \"),(_vm.address)?_c('div',{staticClass:\"detail\"},[_c('p',[_c('MapMarkerIcon',{staticClass:\"map-icon\",attrs:{\"size\":16}}),_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.address)+\"\\n\\t\\t\\t\\t\\t\\t\")],1)]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.headline || _vm.biography || _vm.sections.length > 0)?[(_vm.headline)?_c('div',{staticClass:\"profile__blocks-headline\"},[_c('h3',[_vm._v(_vm._s(_vm.headline))])]):_vm._e(),_vm._v(\" \"),(_vm.biography)?_c('div',{staticClass:\"profile__blocks-biography\"},[_c('p',[_vm._v(_vm._s(_vm.biography))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.sections),function(section,index){return _c('div',{key:index,ref:'section-' + index,refInFor:true,staticClass:\"profile__additionalContent\"},[_c(section(_vm.$refs['section-'+index], _vm.userId),{tag:\"component\",attrs:{\"userId\":_vm.userId}})],1)})]:[_c('div',{staticClass:\"profile__blocks-empty-info\"},[_c('AccountIcon',{attrs:{\"size\":60,\"fill-color\":\"var(--color-text-maxcontrast)\"}}),_vm._v(\" \"),_c('h3',[_vm._v(_vm._s(_vm.emptyProfileMessage))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.t('core', 'The headline and about sections will show up here')))])],1)]],2)])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2021, Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport { getRequestToken } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\nimport VTooltip from 'v-tooltip'\n\nimport logger from './logger.js'\n\nimport Profile from './views/Profile.vue'\nimport ProfileSections from './profile/ProfileSections.js'\n\n__webpack_nonce__ = btoa(getRequestToken())\n\nif (!window.OCA) {\n\twindow.OCA = {}\n}\n\nif (!window.OCA.Core) {\n\twindow.OCA.Core = {}\n}\nObject.assign(window.OCA.Core, { ProfileSections: new ProfileSections() })\n\nVue.use(VTooltip)\n\nVue.mixin({\n\tprops: {\n\t\tlogger,\n\t},\n\tmethods: {\n\t\tt,\n\t},\n})\n\nconst View = Vue.extend(Profile)\n\nwindow.addEventListener('DOMContentLoaded', () => {\n\tnew View().$mount('#vue-profile')\n})\n","\n/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class ProfileSections {\n\n\t_sections\n\n\tconstructor() {\n\t\tthis._sections = []\n\t}\n\n\t/**\n\t * @param {registerSectionCallback} section To be called to mount the section to the profile page\n\t */\n\tregisterSection(section) {\n\t\tthis._sections.push(section)\n\t}\n\n\tgetSections() {\n\t\treturn this._sections\n\t}\n\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".profile__primary-action-button[data-v-35d5c4b6]{font-size:var(--default-font-size);font-weight:bold;width:188px;height:44px;padding:0 16px;line-height:44px;text-align:center;border-radius:var(--border-radius-pill);color:var(--color-primary-text);background-color:var(--color-primary-element);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.profile__primary-action-button .icon[data-v-35d5c4b6]{display:inline-block;vertical-align:middle;margin-bottom:2px;margin-right:4px}.profile__primary-action-button .icon.icon-invert[data-v-35d5c4b6]{filter:invert(1)}.profile__primary-action-button[data-v-35d5c4b6]:hover,.profile__primary-action-button[data-v-35d5c4b6]:focus,.profile__primary-action-button[data-v-35d5c4b6]:active{background-color:var(--color-primary-element-light)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/Profile/PrimaryActionButton.vue\"],\"names\":[],\"mappings\":\"AACA,iDACC,kCAAA,CACA,gBAAA,CACA,WAAA,CACA,WAAA,CACA,cAAA,CACA,gBAAA,CACA,iBAAA,CACA,uCAAA,CACA,+BAAA,CACA,6CAAA,CACA,eAAA,CACA,kBAAA,CACA,sBAAA,CAEA,uDACC,oBAAA,CACA,qBAAA,CACA,iBAAA,CACA,gBAAA,CAEA,mEACC,gBAAA,CAIF,sKAGC,mDAAA\",\"sourcesContent\":[\"\\n.profile__primary-action-button {\\n\\tfont-size: var(--default-font-size);\\n\\tfont-weight: bold;\\n\\twidth: 188px;\\n\\theight: 44px;\\n\\tpadding: 0 16px;\\n\\tline-height: 44px;\\n\\ttext-align: center;\\n\\tborder-radius: var(--border-radius-pill);\\n\\tcolor: var(--color-primary-text);\\n\\tbackground-color: var(--color-primary-element);\\n\\toverflow: hidden;\\n\\twhite-space: nowrap;\\n\\ttext-overflow: ellipsis;\\n\\n\\t.icon {\\n\\t\\tdisplay: inline-block;\\n\\t\\tvertical-align: middle;\\n\\t\\tmargin-bottom: 2px;\\n\\t\\tmargin-right: 4px;\\n\\n\\t\\t&.icon-invert {\\n\\t\\t\\tfilter: invert(1);\\n\\t\\t}\\n\\t}\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-primary-element-light);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#header{background-color:rgba(0,0,0,0) !important;background-image:none !important}#content{padding-top:0px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/Profile.vue\"],\"names\":[],\"mappings\":\"AAEA,QACC,yCAAA,CACA,gCAAA,CAGD,SACC,eAAA\",\"sourcesContent\":[\"\\n// Override header styles\\n#header {\\n\\tbackground-color: transparent !important;\\n\\tbackground-image: none !important;\\n}\\n\\n#content {\\n\\tpadding-top: 0px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".profile[data-v-0bd17180]{width:100%;overflow-y:auto}.profile__header[data-v-0bd17180]{position:sticky;height:190px;top:-40px;background-color:var(--color-main-background-blur);backdrop-filter:var(--filter-background-blur);-webkit-backdrop-filter:var(--filter-background-blur)}.profile__header__container[data-v-0bd17180]{align-self:flex-end;width:100%;max-width:1024px;margin:0 auto;display:grid;grid-template-rows:max-content max-content;grid-template-columns:240px 1fr;justify-content:center}.profile__header__container__placeholder[data-v-0bd17180]{grid-row:1/3}.profile__header__container__displayname[data-v-0bd17180],.profile__header__container__status-text[data-v-0bd17180]{color:var(--color-main-text)}.profile__header__container__displayname[data-v-0bd17180]{width:640px;height:45px;margin-top:128px;margin-bottom:0;font-size:30px;display:flex;align-items:center;cursor:text}.profile__header__container__displayname[data-v-0bd17180]:not(:last-child){margin-top:100px;margin-bottom:4px}.profile__header__container__edit-button[data-v-0bd17180]{border:none;margin-left:18px;margin-top:2px;color:var(--color-primary-element);background-color:var(--color-primary-text);box-shadow:0 0 0 2px var(--color-primary-text);border-radius:var(--border-radius-pill);padding:0 18px;font-size:var(--default-font-size);height:44px;line-height:44px;font-weight:bold}.profile__header__container__edit-button[data-v-0bd17180]:hover,.profile__header__container__edit-button[data-v-0bd17180]:focus,.profile__header__container__edit-button[data-v-0bd17180]:active{color:var(--color-primary-element);background-color:var(--color-primary-element-light)}.profile__header__container__edit-button .pencil-icon[data-v-0bd17180]{display:inline-block;vertical-align:middle;margin-top:2px}.profile__header__container__status-text[data-v-0bd17180]{width:max-content;max-width:640px;padding:5px 10px;margin-left:-12px;margin-top:2px}.profile__header__container__status-text.interactive[data-v-0bd17180]{cursor:pointer}.profile__header__container__status-text.interactive[data-v-0bd17180]:hover,.profile__header__container__status-text.interactive[data-v-0bd17180]:focus,.profile__header__container__status-text.interactive[data-v-0bd17180]:active{background-color:var(--color-main-background);color:var(--color-main-text);border-radius:var(--border-radius-pill);font-weight:bold;box-shadow:0 3px 6px var(--color-box-shadow)}.profile__sidebar[data-v-0bd17180]{position:sticky;top:var(--header-height);align-self:flex-start;padding-top:20px;min-width:220px;margin:-150px 20px 0 0}.profile__sidebar[data-v-0bd17180] .avatar.avatardiv,.profile__sidebar h2[data-v-0bd17180]{text-align:center;margin:auto;display:block;padding:8px}.profile__sidebar[data-v-0bd17180] .avatar.avatardiv:not(.avatardiv--unknown){background-color:var(--color-main-background) !important;box-shadow:none}.profile__sidebar[data-v-0bd17180] .avatar.avatardiv .avatardiv__user-status{right:14px;bottom:14px;width:34px;height:34px;background-size:28px;border:none;background-color:var(--color-main-background);line-height:34px;font-size:20px}.profile__sidebar[data-v-0bd17180] .avatar.interactive.avatardiv .avatardiv__user-status{cursor:pointer}.profile__sidebar[data-v-0bd17180] .avatar.interactive.avatardiv .avatardiv__user-status:hover,.profile__sidebar[data-v-0bd17180] .avatar.interactive.avatardiv .avatardiv__user-status:focus,.profile__sidebar[data-v-0bd17180] .avatar.interactive.avatardiv .avatardiv__user-status:active{box-shadow:0 3px 6px var(--color-box-shadow)}.profile__wrapper[data-v-0bd17180]{background-color:var(--color-main-background);min-height:100%}.profile__content[data-v-0bd17180]{max-width:1024px;margin:0 auto;display:flex;width:100%}.profile__blocks[data-v-0bd17180]{margin:18px 0 80px 0;display:grid;gap:16px 0;width:640px}.profile__blocks p[data-v-0bd17180],.profile__blocks h3[data-v-0bd17180]{overflow-wrap:anywhere}.profile__blocks-details[data-v-0bd17180]{display:flex;flex-direction:column;gap:2px 0}.profile__blocks-details .detail[data-v-0bd17180]{display:inline-block;color:var(--color-text-maxcontrast)}.profile__blocks-details .detail p .map-icon[data-v-0bd17180]{display:inline-block;vertical-align:middle}.profile__blocks-headline[data-v-0bd17180]{margin-top:10px}.profile__blocks-headline h3[data-v-0bd17180]{font-weight:bold;font-size:20px;margin:0}.profile__blocks-biography[data-v-0bd17180]{white-space:pre-line}.profile__blocks h3[data-v-0bd17180],.profile__blocks p[data-v-0bd17180]{cursor:text}.profile__blocks-empty-info[data-v-0bd17180]{margin-top:80px;margin-right:100px;display:flex;flex-direction:column;text-align:center}.profile__blocks-empty-info h3[data-v-0bd17180]{font-weight:bold;font-size:18px;margin:8px 0}@media only screen and (max-width: 1024px){.profile__header[data-v-0bd17180]{height:250px;position:unset}.profile__header__container[data-v-0bd17180]{grid-template-columns:unset}.profile__header__container__displayname[data-v-0bd17180]{margin:100px 20px 0px;width:unset;display:unset;text-align:center}.profile__header__container__edit-button[data-v-0bd17180]{width:fit-content;display:block;margin:30px auto}.profile__content[data-v-0bd17180]{display:block}.profile__blocks[data-v-0bd17180]{width:unset;max-width:600px;margin:0 auto;padding:20px 50px 50px 50px}.profile__blocks-empty-info[data-v-0bd17180]{margin:0}.profile__sidebar[data-v-0bd17180]{margin:unset;position:unset}}.user-actions[data-v-0bd17180]{display:flex;flex-direction:column;gap:8px 0;margin-top:20px}.user-actions__primary[data-v-0bd17180]{margin:0 auto}.user-actions__other[data-v-0bd17180]{display:flex;justify-content:center;gap:0 4px}.user-actions__other a[data-v-0bd17180]{filter:var(--background-invert-if-dark)}.icon-invert[data-v-0bd17180] .action-link__icon{filter:invert(1)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/Profile.vue\"],\"names\":[],\"mappings\":\"AAIA,0BACC,UAAA,CACA,eAAA,CAEA,kCACC,eAAA,CACA,YAAA,CACA,SAAA,CACA,kDAAA,CACA,6CAAA,CACA,qDAAA,CAEA,6CACC,mBAAA,CACA,UAAA,CACA,gBAlBiB,CAmBjB,aAAA,CACA,YAAA,CACA,0CAAA,CACA,+BAAA,CACA,sBAAA,CAEA,0DACC,YAAA,CAGD,oHACC,4BAAA,CAGD,0DACC,WAjCgB,CAkChB,WAAA,CACA,gBAAA,CAEA,eAAA,CACA,cAAA,CACA,YAAA,CACA,kBAAA,CACA,WAAA,CAEA,2EACC,gBAAA,CACA,iBAAA,CAIF,0DACC,WAAA,CACA,gBAAA,CACA,cAAA,CACA,kCAAA,CACA,0CAAA,CACA,8CAAA,CACA,uCAAA,CACA,cAAA,CACA,kCAAA,CACA,WAAA,CACA,gBAAA,CACA,gBAAA,CAEA,iMAGC,kCAAA,CACA,mDAAA,CAGD,uEACC,oBAAA,CACA,qBAAA,CACA,cAAA,CAIF,0DACC,iBAAA,CACA,eA/EgB,CAgFhB,gBAAA,CACA,iBAAA,CACA,cAAA,CAEA,sEACC,cAAA,CAEA,qOAGC,6CAAA,CACA,4BAAA,CACA,uCAAA,CACA,gBAAA,CACA,4CAAA,CAOL,mCACC,eAAA,CACA,wBAAA,CACA,qBAAA,CACA,gBAAA,CACA,eAAA,CACA,sBAAA,CAGA,2FACC,iBAAA,CACA,WAAA,CACA,aAAA,CACA,WAAA,CAGD,8EACC,wDAAA,CACA,eAAA,CAIA,6EACC,UAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,oBAAA,CACA,WAAA,CAEA,6CAAA,CACA,gBAAA,CACA,cAAA,CAKD,yFACC,cAAA,CAEA,8RAGC,4CAAA,CAMJ,mCACC,6CAAA,CACA,eAAA,CAGD,mCACC,gBA7JkB,CA8JlB,aAAA,CACA,YAAA,CACA,UAAA,CAGD,kCACC,oBAAA,CACA,YAAA,CACA,UAAA,CACA,WAtKkB,CAwKlB,yEACC,sBAAA,CAGD,0CACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,kDACC,oBAAA,CACA,mCAAA,CAEA,8DACC,oBAAA,CACA,qBAAA,CAKH,2CACC,eAAA,CAEA,8CACC,gBAAA,CACA,cAAA,CACA,QAAA,CAIF,4CACC,oBAAA,CAGD,yEACC,WAAA,CAGD,6CACC,eAAA,CACA,kBAAA,CACA,YAAA,CACA,qBAAA,CACA,iBAAA,CAEA,gDACC,gBAAA,CACA,cAAA,CACA,YAAA,CAMJ,2CAEE,kCACC,YAAA,CACA,cAAA,CAEA,6CACC,2BAAA,CAEA,0DACC,qBAAA,CACA,WAAA,CACA,aAAA,CACA,iBAAA,CAGD,0DACC,iBAAA,CACA,aAAA,CACA,gBAAA,CAKH,mCACC,aAAA,CAGD,kCACC,WAAA,CACA,eAAA,CACA,aAAA,CACA,2BAAA,CAEA,6CACC,QAAA,CAIF,mCACC,YAAA,CACA,cAAA,CAAA,CAKH,+BACC,YAAA,CACA,qBAAA,CACA,SAAA,CACA,eAAA,CAEA,wCACC,aAAA,CAGD,sCACC,YAAA,CACA,sBAAA,CACA,SAAA,CACA,wCACC,uCAAA,CAMF,iDACC,gBAAA\",\"sourcesContent\":[\"\\n$profile-max-width: 1024px;\\n$content-max-width: 640px;\\n\\n.profile {\\n\\twidth: 100%;\\n\\toverflow-y: auto;\\n\\n\\t&__header {\\n\\t\\tposition: sticky;\\n\\t\\theight: 190px;\\n\\t\\ttop: -40px;\\n\\t\\tbackground-color: var(--color-main-background-blur);\\n\\t\\tbackdrop-filter: var(--filter-background-blur);\\n\\t\\t-webkit-backdrop-filter: var(--filter-background-blur);\\n\\n\\t\\t&__container {\\n\\t\\t\\talign-self: flex-end;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmax-width: $profile-max-width;\\n\\t\\t\\tmargin: 0 auto;\\n\\t\\t\\tdisplay: grid;\\n\\t\\t\\tgrid-template-rows: max-content max-content;\\n\\t\\t\\tgrid-template-columns: 240px 1fr;\\n\\t\\t\\tjustify-content: center;\\n\\n\\t\\t\\t&__placeholder {\\n\\t\\t\\t\\tgrid-row: 1 / 3;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__displayname, &__status-text {\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__displayname {\\n\\t\\t\\t\\twidth: $content-max-width;\\n\\t\\t\\t\\theight: 45px;\\n\\t\\t\\t\\tmargin-top: 128px;\\n\\t\\t\\t\\t// Override the global style declaration\\n\\t\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\t\\tfont-size: 30px;\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\talign-items: center;\\n\\t\\t\\t\\tcursor: text;\\n\\n\\t\\t\\t\\t&:not(:last-child) {\\n\\t\\t\\t\\t\\tmargin-top: 100px;\\n\\t\\t\\t\\t\\tmargin-bottom: 4px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__edit-button {\\n\\t\\t\\t\\tborder: none;\\n\\t\\t\\t\\tmargin-left: 18px;\\n\\t\\t\\t\\tmargin-top: 2px;\\n\\t\\t\\t\\tcolor: var(--color-primary-element);\\n\\t\\t\\t\\tbackground-color: var(--color-primary-text);\\n\\t\\t\\t\\tbox-shadow: 0 0 0 2px var(--color-primary-text);\\n\\t\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\t\\tpadding: 0 18px;\\n\\t\\t\\t\\tfont-size: var(--default-font-size);\\n\\t\\t\\t\\theight: 44px;\\n\\t\\t\\t\\tline-height: 44px;\\n\\t\\t\\t\\tfont-weight: bold;\\n\\n\\t\\t\\t\\t&:hover,\\n\\t\\t\\t\\t&:focus,\\n\\t\\t\\t\\t&:active {\\n\\t\\t\\t\\t\\tcolor: var(--color-primary-element);\\n\\t\\t\\t\\t\\tbackground-color: var(--color-primary-element-light);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t.pencil-icon {\\n\\t\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t\\t\\tvertical-align: middle;\\n\\t\\t\\t\\t\\tmargin-top: 2px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__status-text {\\n\\t\\t\\t\\twidth: max-content;\\n\\t\\t\\t\\tmax-width: $content-max-width;\\n\\t\\t\\t\\tpadding: 5px 10px;\\n\\t\\t\\t\\tmargin-left: -12px;\\n\\t\\t\\t\\tmargin-top: 2px;\\n\\n\\t\\t\\t\\t&.interactive {\\n\\t\\t\\t\\t\\tcursor: pointer;\\n\\n\\t\\t\\t\\t\\t&:hover,\\n\\t\\t\\t\\t\\t&:focus,\\n\\t\\t\\t\\t\\t&:active {\\n\\t\\t\\t\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\t\\t\\t\\tfont-weight: bold;\\n\\t\\t\\t\\t\\t\\tbox-shadow: 0 3px 6px var(--color-box-shadow);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__sidebar {\\n\\t\\tposition: sticky;\\n\\t\\ttop: var(--header-height);\\n\\t\\talign-self: flex-start;\\n\\t\\tpadding-top: 20px;\\n\\t\\tmin-width: 220px;\\n\\t\\tmargin: -150px 20px 0 0;\\n\\n\\t\\t// Specificity hack is needed to override Avatar component styles\\n\\t\\t&::v-deep .avatar.avatardiv, h2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tmargin: auto;\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tpadding: 8px;\\n\\t\\t}\\n\\n\\t\\t&::v-deep .avatar.avatardiv:not(.avatardiv--unknown) {\\n\\t\\t\\tbackground-color: var(--color-main-background) !important;\\n\\t\\t\\tbox-shadow: none;\\n\\t\\t}\\n\\n\\t\\t&::v-deep .avatar.avatardiv {\\n\\t\\t\\t.avatardiv__user-status {\\n\\t\\t\\t\\tright: 14px;\\n\\t\\t\\t\\tbottom: 14px;\\n\\t\\t\\t\\twidth: 34px;\\n\\t\\t\\t\\theight: 34px;\\n\\t\\t\\t\\tbackground-size: 28px;\\n\\t\\t\\t\\tborder: none;\\n\\t\\t\\t\\t// Styles when custom status icon and status text are set\\n\\t\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t\\t\\tline-height: 34px;\\n\\t\\t\\t\\tfont-size: 20px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&::v-deep .avatar.interactive.avatardiv {\\n\\t\\t\\t.avatardiv__user-status {\\n\\t\\t\\t\\tcursor: pointer;\\n\\n\\t\\t\\t\\t&:hover,\\n\\t\\t\\t\\t&:focus,\\n\\t\\t\\t\\t&:active {\\n\\t\\t\\t\\t\\tbox-shadow: 0 3px 6px var(--color-box-shadow);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__wrapper {\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tmin-height: 100%;\\n\\t}\\n\\n\\t&__content {\\n\\t\\tmax-width: $profile-max-width;\\n\\t\\tmargin: 0 auto;\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t&__blocks {\\n\\t\\tmargin: 18px 0 80px 0;\\n\\t\\tdisplay: grid;\\n\\t\\tgap: 16px 0;\\n\\t\\twidth: $content-max-width;\\n\\n\\t\\tp, h3 {\\n\\t\\t\\toverflow-wrap: anywhere;\\n\\t\\t}\\n\\n\\t\\t&-details {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\tgap: 2px 0;\\n\\n\\t\\t\\t.detail {\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\n\\t\\t\\t\\tp .map-icon {\\n\\t\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t\\t\\tvertical-align: middle;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-headline {\\n\\t\\t\\tmargin-top: 10px;\\n\\n\\t\\t\\th3 {\\n\\t\\t\\t\\tfont-weight: bold;\\n\\t\\t\\t\\tfont-size: 20px;\\n\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-biography {\\n\\t\\t\\twhite-space: pre-line;\\n\\t\\t}\\n\\n\\t\\th3, p {\\n\\t\\t\\tcursor: text;\\n\\t\\t}\\n\\n\\t\\t&-empty-info {\\n\\t\\t\\tmargin-top: 80px;\\n\\t\\t\\tmargin-right: 100px;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\ttext-align: center;\\n\\n\\t\\t\\th3 {\\n\\t\\t\\t\\tfont-weight: bold;\\n\\t\\t\\t\\tfont-size: 18px;\\n\\t\\t\\t\\tmargin: 8px 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\n@media only screen and (max-width: 1024px) {\\n\\t.profile {\\n\\t\\t&__header {\\n\\t\\t\\theight: 250px;\\n\\t\\t\\tposition: unset;\\n\\n\\t\\t\\t&__container {\\n\\t\\t\\t\\tgrid-template-columns: unset;\\n\\n\\t\\t\\t\\t&__displayname {\\n\\t\\t\\t\\t\\tmargin: 100px 20px 0px;\\n\\t\\t\\t\\t\\twidth: unset;\\n\\t\\t\\t\\t\\tdisplay: unset;\\n\\t\\t\\t\\t\\ttext-align: center;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&__edit-button {\\n\\t\\t\\t\\t\\twidth: fit-content;\\n\\t\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t\\t\\tmargin: 30px auto;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&__content {\\n\\t\\t\\tdisplay: block;\\n\\t\\t}\\n\\n\\t\\t&__blocks {\\n\\t\\t\\twidth: unset;\\n\\t\\t\\tmax-width: 600px;\\n\\t\\t\\tmargin: 0 auto;\\n\\t\\t\\tpadding: 20px 50px 50px 50px;\\n\\n\\t\\t\\t&-empty-info {\\n\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&__sidebar {\\n\\t\\t\\tmargin: unset;\\n\\t\\t\\tposition: unset;\\n\\t\\t}\\n\\t}\\n}\\n\\n.user-actions {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 8px 0;\\n\\tmargin-top: 20px;\\n\\n\\t&__primary {\\n\\t\\tmargin: 0 auto;\\n\\t}\\n\\n\\t&__other {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\t\\tgap: 0 4px;\\n\\t\\ta {\\n\\t\\t\\tfilter: var(--background-invert-if-dark);\\n\\t\\t}\\n\\t}\\n}\\n\\n.icon-invert {\\n\\t&::v-deep .action-link__icon {\\n\\t\\tfilter: invert(1);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 9651;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t9651: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(51608)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","user","getCurrentUser","getLoggerBuilder","setApp","build","setUid","uid","name","props","disabled","type","Boolean","default","href","String","required","icon","target","validator","value","includes","computed","colorPrimaryText","getComputedStyle","document","body","getPropertyValue","trim","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","_g","staticClass","class","attrs","$listeners","_v","_t","status","loadState","userId","displayname","address","organisation","role","headline","biography","actions","isUserAvatarVisible","components","AccountIcon","NcActionLink","NcActions","NcAvatar","MapMarkerIcon","PencilIcon","PrimaryActionButton","data","sections","OCA","Core","ProfileSections","getSections","isCurrentUser","_getCurrentUser","allActions","primaryAction","length","middleActions","slice","otherActions","settingsUrl","generateUrl","colorMainBackground","emptyProfileMessage","t","mounted","title","concat","subscribe","handleStatusUpdate","beforeDestroy","unsubscribe","methods","openStatusModal","statusMenuItem","querySelector","click","showError","_s","_e","message","interactive","on","$event","preventDefault","stopPropagation","apply","arguments","nativeOn","id","_l","action","key","staticStyle","style","backgroundImage","filter","section","index","ref","refInFor","$refs","tag","__webpack_nonce__","btoa","getRequestToken","window","Object","assign","constructor","_sections","registerSection","push","Vue","VTooltip","logger","View","Profile","addEventListener","$mount","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"core-profile.js?v=8f124ca36ed5e81dd44e","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/logger.js","webpack:///nextcloud/core/src/components/Profile/PrimaryActionButton.vue","webpack:///nextcloud/core/src/components/Profile/PrimaryActionButton.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/Profile/PrimaryActionButton.vue?eba4","webpack://nextcloud/./core/src/components/Profile/PrimaryActionButton.vue?4873","webpack://nextcloud/./core/src/components/Profile/PrimaryActionButton.vue?2d98","webpack:///nextcloud/core/src/views/Profile.vue","webpack:///nextcloud/core/src/views/Profile.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/views/Profile.vue?8678","webpack://nextcloud/./core/src/views/Profile.vue?863f","webpack://nextcloud/./core/src/views/Profile.vue?6193","webpack://nextcloud/./core/src/views/Profile.vue?bc3b","webpack:///nextcloud/core/src/profile.js","webpack:///nextcloud/core/src/profile/ProfileSections.js","webpack:///nextcloud/core/src/components/Profile/PrimaryActionButton.vue?vue&type=style&index=0&id=35d5c4b6&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/views/Profile.vue?vue&type=style&index=0&id=c8c42fa4&prod&lang=scss&","webpack:///nextcloud/core/src/views/Profile.vue?vue&type=style&index=1&id=c8c42fa4&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nconst getLogger = user => {\n\tif (user === null) {\n\t\treturn getLoggerBuilder()\n\t\t\t.setApp('core')\n\t\t\t.build()\n\t}\n\treturn getLoggerBuilder()\n\t\t.setApp('core')\n\t\t.setUid(user.uid)\n\t\t.build()\n}\n\nexport default getLogger(getCurrentUser())\n","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<a class=\"profile__primary-action-button\"\n\t\t:class=\"{ 'disabled': disabled }\"\n\t\t:href=\"href\"\n\t\t:target=\"target\"\n\t\trel=\"noopener noreferrer nofollow\"\n\t\tv-on=\"$listeners\">\n\t\t<img class=\"icon\"\n\t\t\t:class=\"[icon, { 'icon-invert': colorPrimaryText === '#ffffff' }]\"\n\t\t\t:src=\"icon\">\n\t\t<slot />\n\t</a>\n</template>\n\n<script>\nexport default {\n\tname: 'PrimaryActionButton',\n\n\tprops: {\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\thref: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttarget: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tvalidator: (value) => ['_self', '_blank', '_parent', '_top'].includes(value),\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tcolorPrimaryText() {\n\t\t\t// For some reason the returned string has prepended whitespace\n\t\t\treturn getComputedStyle(document.body).getPropertyValue('--color-primary-text').trim()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.profile__primary-action-button {\n\t\tfont-size: var(--default-font-size);\n\t\tfont-weight: bold;\n\t\twidth: 188px;\n\t\theight: 44px;\n\t\tpadding: 0 16px;\n\t\tline-height: 44px;\n\t\ttext-align: center;\n\t\tborder-radius: var(--border-radius-pill);\n\t\tcolor: var(--color-primary-text);\n\t\tbackground-color: var(--color-primary-element);\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\n\t\t.icon {\n\t\t\tdisplay: inline-block;\n\t\t\tvertical-align: middle;\n\t\t\tmargin-bottom: 2px;\n\t\t\tmargin-right: 4px;\n\n\t\t\t&.icon-invert {\n\t\t\t\tfilter: invert(1);\n\t\t\t}\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:active {\n\t\t\tbackground-color: var(--color-primary-element-light);\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrimaryActionButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrimaryActionButton.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrimaryActionButton.vue?vue&type=style&index=0&id=35d5c4b6&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrimaryActionButton.vue?vue&type=style&index=0&id=35d5c4b6&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PrimaryActionButton.vue?vue&type=template&id=35d5c4b6&scoped=true&\"\nimport script from \"./PrimaryActionButton.vue?vue&type=script&lang=js&\"\nexport * from \"./PrimaryActionButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PrimaryActionButton.vue?vue&type=style&index=0&id=35d5c4b6&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"35d5c4b6\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('a',_vm._g({staticClass:\"profile__primary-action-button\",class:{ 'disabled': _vm.disabled },attrs:{\"href\":_vm.href,\"target\":_vm.target,\"rel\":\"noopener noreferrer nofollow\"}},_vm.$listeners),[_c('img',{staticClass:\"icon\",class:[_vm.icon, { 'icon-invert': _vm.colorPrimaryText === '#ffffff' }],attrs:{\"src\":_vm.icon}}),_vm._v(\" \"),_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2021 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"profile\">\n\t\t<div class=\"profile__header\">\n\t\t\t<div class=\"profile__header__container\">\n\t\t\t\t<div class=\"profile__header__container__placeholder\" />\n\t\t\t\t<h2 class=\"profile__header__container__displayname\">\n\t\t\t\t\t{{ displayname || userId }}\n\t\t\t\t\t<a v-if=\"isCurrentUser\"\n\t\t\t\t\t\tclass=\"primary profile__header__container__edit-button\"\n\t\t\t\t\t\t:href=\"settingsUrl\">\n\t\t\t\t\t\t<PencilIcon class=\"pencil-icon\"\n\t\t\t\t\t\t\t:size=\"16\" />\n\t\t\t\t\t\t{{ t('core', 'Edit Profile') }}\n\t\t\t\t\t</a>\n\t\t\t\t</h2>\n\t\t\t\t<div v-if=\"status.icon || status.message\"\n\t\t\t\t\tclass=\"profile__header__container__status-text\"\n\t\t\t\t\t:class=\"{ interactive: isCurrentUser }\"\n\t\t\t\t\t@click.prevent.stop=\"openStatusModal\">\n\t\t\t\t\t{{ status.icon }} {{ status.message }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"profile__wrapper\">\n\t\t\t<div class=\"profile__content\">\n\t\t\t\t<div class=\"profile__sidebar\">\n\t\t\t\t\t<NcAvatar class=\"avatar\"\n\t\t\t\t\t\t:class=\"{ interactive: isCurrentUser }\"\n\t\t\t\t\t\t:user=\"userId\"\n\t\t\t\t\t\t:size=\"180\"\n\t\t\t\t\t\t:show-user-status=\"true\"\n\t\t\t\t\t\t:show-user-status-compact=\"false\"\n\t\t\t\t\t\t:disable-menu=\"true\"\n\t\t\t\t\t\t:disable-tooltip=\"true\"\n\t\t\t\t\t\t:is-no-user=\"!isUserAvatarVisible\"\n\t\t\t\t\t\t@click.native.prevent.stop=\"openStatusModal\" />\n\n\t\t\t\t\t<div class=\"user-actions\">\n\t\t\t\t\t\t<!-- When a tel: URL is opened with target=\"_blank\", a blank new tab is opened which is inconsistent with the handling of other URLs so we set target=\"_self\" for the phone action -->\n\t\t\t\t\t\t<PrimaryActionButton v-if=\"primaryAction\"\n\t\t\t\t\t\t\tclass=\"user-actions__primary\"\n\t\t\t\t\t\t\t:href=\"primaryAction.target\"\n\t\t\t\t\t\t\t:icon=\"primaryAction.icon\"\n\t\t\t\t\t\t\t:target=\"primaryAction.id === 'phone' ? '_self' :'_blank'\">\n\t\t\t\t\t\t\t{{ primaryAction.title }}\n\t\t\t\t\t\t</PrimaryActionButton>\n\t\t\t\t\t\t<div class=\"user-actions__other\">\n\t\t\t\t\t\t\t<!-- FIXME Remove inline styles after https://github.com/nextcloud/nextcloud-vue/issues/2315 is fixed -->\n\t\t\t\t\t\t\t<NcActions v-for=\"action in middleActions\"\n\t\t\t\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t\t\t\t:default-icon=\"action.icon\"\n\t\t\t\t\t\t\t\tstyle=\"\n\t\t\t\t\t\t\t\tbackground-position: 14px center;\n\t\t\t\t\t\t\t\tbackground-size: 16px;\n\t\t\t\t\t\t\t\tbackground-repeat: no-repeat;\"\n\t\t\t\t\t\t\t\t:style=\"{\n\t\t\t\t\t\t\t\t\tbackgroundImage: `url(${action.icon})`,\n\t\t\t\t\t\t\t\t\t...(colorMainBackground === '#181818' && { filter: 'invert(1)' })\n\t\t\t\t\t\t\t\t}\">\n\t\t\t\t\t\t\t\t<NcActionLink :close-after-click=\"true\"\n\t\t\t\t\t\t\t\t\t:icon=\"action.icon\"\n\t\t\t\t\t\t\t\t\t:href=\"action.target\"\n\t\t\t\t\t\t\t\t\t:target=\"action.id === 'phone' ? '_self' :'_blank'\">\n\t\t\t\t\t\t\t\t\t{{ action.title }}\n\t\t\t\t\t\t\t\t</NcActionLink>\n\t\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t\t<template v-if=\"otherActions\">\n\t\t\t\t\t\t\t\t<NcActions :force-menu=\"true\">\n\t\t\t\t\t\t\t\t\t<NcActionLink v-for=\"action in otherActions\"\n\t\t\t\t\t\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t\t\t\t\t\t:class=\"{ 'icon-invert': colorMainBackground === '#181818' }\"\n\t\t\t\t\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t\t\t\t\t:icon=\"action.icon\"\n\t\t\t\t\t\t\t\t\t\t:href=\"action.target\"\n\t\t\t\t\t\t\t\t\t\t:target=\"action.id === 'phone' ? '_self' :'_blank'\">\n\t\t\t\t\t\t\t\t\t\t{{ action.title }}\n\t\t\t\t\t\t\t\t\t</NcActionLink>\n\t\t\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"profile__blocks\">\n\t\t\t\t\t<div v-if=\"organisation || role || address\" class=\"profile__blocks-details\">\n\t\t\t\t\t\t<div v-if=\"organisation || role\" class=\"detail\">\n\t\t\t\t\t\t\t<p>{{ organisation }} <span v-if=\"organisation && role\">•</span> {{ role }}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"address\" class=\"detail\">\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t<MapMarkerIcon class=\"map-icon\"\n\t\t\t\t\t\t\t\t\t:size=\"16\" />\n\t\t\t\t\t\t\t\t{{ address }}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<template v-if=\"headline || biography || sections.length > 0\">\n\t\t\t\t\t\t<div v-if=\"headline\" class=\"profile__blocks-headline\">\n\t\t\t\t\t\t\t<h3>{{ headline }}</h3>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"biography\" class=\"profile__blocks-biography\">\n\t\t\t\t\t\t\t<p>{{ biography }}</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- additional entries, use it with cautious -->\n\t\t\t\t\t\t<div v-for=\"(section, index) in sections\"\n\t\t\t\t\t\t\t:ref=\"'section-' + index\"\n\t\t\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t\t\tclass=\"profile__additionalContent\">\n\t\t\t\t\t\t\t<component :is=\"section($refs['section-'+index], userId)\" :userId=\"userId\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-else>\n\t\t\t\t\t\t<div class=\"profile__blocks-empty-info\">\n\t\t\t\t\t\t\t<AccountIcon :size=\"60\"\n\t\t\t\t\t\t\t\tfill-color=\"var(--color-text-maxcontrast)\" />\n\t\t\t\t\t\t\t<h3>{{ emptyProfileMessage }}</h3>\n\t\t\t\t\t\t\t<p>{{ t('core', 'The headline and about sections will show up here') }}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError } from '@nextcloud/dialogs'\n\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink.js'\nimport MapMarkerIcon from 'vue-material-design-icons/MapMarker.vue'\nimport PencilIcon from 'vue-material-design-icons/Pencil.vue'\nimport AccountIcon from 'vue-material-design-icons/Account.vue'\n\nimport PrimaryActionButton from '../components/Profile/PrimaryActionButton.vue'\n\nconst status = loadState('core', 'status', {})\nconst {\n\tuserId,\n\tdisplayname,\n\taddress,\n\torganisation,\n\trole,\n\theadline,\n\tbiography,\n\tactions,\n\tisUserAvatarVisible,\n} = loadState('core', 'profileParameters', {\n\tuserId: null,\n\tdisplayname: null,\n\taddress: null,\n\torganisation: null,\n\trole: null,\n\theadline: null,\n\tbiography: null,\n\tactions: [],\n\tisUserAvatarVisible: false,\n})\n\nexport default {\n\tname: 'Profile',\n\n\tcomponents: {\n\t\tAccountIcon,\n\t\tNcActionLink,\n\t\tNcActions,\n\t\tNcAvatar,\n\t\tMapMarkerIcon,\n\t\tPencilIcon,\n\t\tPrimaryActionButton,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tstatus,\n\t\t\tuserId,\n\t\t\tdisplayname,\n\t\t\taddress,\n\t\t\torganisation,\n\t\t\trole,\n\t\t\theadline,\n\t\t\tbiography,\n\t\t\tactions,\n\t\t\tisUserAvatarVisible,\n\t\t\tsections: OCA.Core.ProfileSections.getSections(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisCurrentUser() {\n\t\t\treturn getCurrentUser()?.uid === this.userId\n\t\t},\n\n\t\tallActions() {\n\t\t\treturn this.actions\n\t\t},\n\n\t\tprimaryAction() {\n\t\t\tif (this.allActions.length) {\n\t\t\t\treturn this.allActions[0]\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\tmiddleActions() {\n\t\t\tif (this.allActions.slice(1, 4).length) {\n\t\t\t\treturn this.allActions.slice(1, 4)\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\totherActions() {\n\t\t\tif (this.allActions.slice(4).length) {\n\t\t\t\treturn this.allActions.slice(4)\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\tsettingsUrl() {\n\t\t\treturn generateUrl('/settings/user')\n\t\t},\n\n\t\tcolorMainBackground() {\n\t\t\t// For some reason the returned string has prepended whitespace\n\t\t\treturn getComputedStyle(document.body).getPropertyValue('--color-main-background').trim()\n\t\t},\n\n\t\temptyProfileMessage() {\n\t\t\treturn this.isCurrentUser\n\t\t\t\t? t('core', 'You have not added any info yet')\n\t\t\t\t: t('core', '{user} has not added any info yet', { user: (this.displayname || this.userId) })\n\t\t},\n\t},\n\n\tmounted() {\n\t\t// Set the user's displayname or userId in the page title and preserve the default title of \"Nextcloud\" at the end\n\t\tdocument.title = `${this.displayname || this.userId} - ${document.title}`\n\t\tsubscribe('user_status:status.updated', this.handleStatusUpdate)\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('user_status:status.updated', this.handleStatusUpdate)\n\t},\n\n\tmethods: {\n\t\thandleStatusUpdate(status) {\n\t\t\tif (this.isCurrentUser && status.userId === this.userId) {\n\t\t\t\tthis.status = status\n\t\t\t}\n\t\t},\n\n\t\topenStatusModal() {\n\t\t\tconst statusMenuItem = document.querySelector('.user-status-menu-item__toggle')\n\t\t\t// Changing the user status is only enabled if you are the current user\n\t\t\tif (this.isCurrentUser) {\n\t\t\t\tif (statusMenuItem) {\n\t\t\t\t\tstatusMenuItem.click()\n\t\t\t\t} else {\n\t\t\t\t\tshowError(t('core', 'Error opening the user status modal, try hard refreshing the page'))\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n// Override header styles\n#header {\n\tbackground-color: transparent !important;\n\tbackground-image: none !important;\n}\n\n#content {\n\tpadding-top: 0px;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n$profile-max-width: 1024px;\n$content-max-width: 640px;\n\n.profile {\n\twidth: 100%;\n\toverflow-y: auto;\n\n\t&__header {\n\t\tposition: sticky;\n\t\theight: 190px;\n\t\ttop: -40px;\n\t\tbackground-color: var(--color-main-background-blur);\n\t\tbackdrop-filter: var(--filter-background-blur);\n\t\t-webkit-backdrop-filter: var(--filter-background-blur);\n\n\t\t&__container {\n\t\t\talign-self: flex-end;\n\t\t\twidth: 100%;\n\t\t\tmax-width: $profile-max-width;\n\t\t\tmargin: 0 auto;\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-rows: max-content max-content;\n\t\t\tgrid-template-columns: 240px 1fr;\n\t\t\tjustify-content: center;\n\n\t\t\t&__placeholder {\n\t\t\t\tgrid-row: 1 / 3;\n\t\t\t}\n\n\t\t\t&__displayname, &__status-text {\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\n\t\t\t&__displayname {\n\t\t\t\twidth: $content-max-width;\n\t\t\t\theight: 45px;\n\t\t\t\tmargin-top: 128px;\n\t\t\t\t// Override the global style declaration\n\t\t\t\tmargin-bottom: 0;\n\t\t\t\tfont-size: 30px;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tcursor: text;\n\n\t\t\t\t&:not(:last-child) {\n\t\t\t\t\tmargin-top: 100px;\n\t\t\t\t\tmargin-bottom: 4px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__edit-button {\n\t\t\t\tborder: none;\n\t\t\t\tmargin-left: 18px;\n\t\t\t\tmargin-top: 2px;\n\t\t\t\tcolor: var(--color-primary-element);\n\t\t\t\tbackground-color: var(--color-primary-text);\n\t\t\t\tbox-shadow: 0 0 0 2px var(--color-primary-text);\n\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\tpadding: 0 18px;\n\t\t\t\tfont-size: var(--default-font-size);\n\t\t\t\theight: 44px;\n\t\t\t\tline-height: 44px;\n\t\t\t\tfont-weight: bold;\n\n\t\t\t\t&:hover,\n\t\t\t\t&:focus,\n\t\t\t\t&:active {\n\t\t\t\t\tcolor: var(--color-primary-element);\n\t\t\t\t\tbackground-color: var(--color-primary-element-light);\n\t\t\t\t}\n\n\t\t\t\t.pencil-icon {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\tmargin-top: 2px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__status-text {\n\t\t\t\twidth: max-content;\n\t\t\t\tmax-width: $content-max-width;\n\t\t\t\tpadding: 5px 10px;\n\t\t\t\tmargin-left: -12px;\n\t\t\t\tmargin-top: 2px;\n\n\t\t\t\t&.interactive {\n\t\t\t\t\tcursor: pointer;\n\n\t\t\t\t\t&:hover,\n\t\t\t\t\t&:focus,\n\t\t\t\t\t&:active {\n\t\t\t\t\t\tbackground-color: var(--color-main-background);\n\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\tbox-shadow: 0 3px 6px var(--color-box-shadow);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&__sidebar {\n\t\tposition: sticky;\n\t\ttop: var(--header-height);\n\t\talign-self: flex-start;\n\t\tpadding-top: 20px;\n\t\tmin-width: 220px;\n\t\tmargin: -150px 20px 0 0;\n\n\t\t// Specificity hack is needed to override Avatar component styles\n\t\t&::v-deep .avatar.avatardiv, h2 {\n\t\t\ttext-align: center;\n\t\t\tmargin: auto;\n\t\t\tdisplay: block;\n\t\t\tpadding: 8px;\n\t\t}\n\n\t\t&::v-deep .avatar.avatardiv:not(.avatardiv--unknown) {\n\t\t\tbackground-color: var(--color-main-background) !important;\n\t\t\tbox-shadow: none;\n\t\t}\n\n\t\t&::v-deep .avatar.avatardiv {\n\t\t\t.avatardiv__user-status {\n\t\t\t\tright: 14px;\n\t\t\t\tbottom: 14px;\n\t\t\t\twidth: 34px;\n\t\t\t\theight: 34px;\n\t\t\t\tbackground-size: 28px;\n\t\t\t\tborder: none;\n\t\t\t\t// Styles when custom status icon and status text are set\n\t\t\t\tbackground-color: var(--color-main-background);\n\t\t\t\tline-height: 34px;\n\t\t\t\tfont-size: 20px;\n\t\t\t}\n\t\t}\n\n\t\t&::v-deep .avatar.interactive.avatardiv {\n\t\t\t.avatardiv__user-status {\n\t\t\t\tcursor: pointer;\n\n\t\t\t\t&:hover,\n\t\t\t\t&:focus,\n\t\t\t\t&:active {\n\t\t\t\t\tbox-shadow: 0 3px 6px var(--color-box-shadow);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&__wrapper {\n\t\tbackground-color: var(--color-main-background);\n\t\tmin-height: 100%;\n\t}\n\n\t&__content {\n\t\tmax-width: $profile-max-width;\n\t\tmargin: 0 auto;\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\n\t&__blocks {\n\t\tmargin: 18px 0 80px 0;\n\t\tdisplay: grid;\n\t\tgap: 16px 0;\n\t\twidth: $content-max-width;\n\n\t\tp, h3 {\n\t\t\toverflow-wrap: anywhere;\n\t\t}\n\n\t\t&-details {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px 0;\n\n\t\t\t.detail {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: var(--color-text-maxcontrast);\n\n\t\t\t\tp .map-icon {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&-headline {\n\t\t\tmargin-top: 10px;\n\n\t\t\th3 {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-size: 20px;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t&-biography {\n\t\t\twhite-space: pre-line;\n\t\t}\n\n\t\th3, p {\n\t\t\tcursor: text;\n\t\t}\n\n\t\t&-empty-info {\n\t\t\tmargin-top: 80px;\n\t\t\tmargin-right: 100px;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\ttext-align: center;\n\n\t\t\th3 {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-size: 18px;\n\t\t\t\tmargin: 8px 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\n@media only screen and (max-width: 1024px) {\n\t.profile {\n\t\t&__header {\n\t\t\theight: 250px;\n\t\t\tposition: unset;\n\n\t\t\t&__container {\n\t\t\t\tgrid-template-columns: unset;\n\n\t\t\t\t&__displayname {\n\t\t\t\t\tmargin: 80px 20px 0px!important;\n\t\t\t\t\theight: 1em;\n\t\t\t\t\twidth: unset;\n\t\t\t\t\tdisplay: unset;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\n\t\t\t\t&__edit-button {\n\t\t\t\t\twidth: fit-content;\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tmargin: 60px auto;\n\t\t\t\t}\n\n\t\t\t\t&__status-text {\n\t\t\t\t\tmargin: 4px auto;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__content {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t&__blocks {\n\t\t\twidth: unset;\n\t\t\tmax-width: 600px;\n\t\t\tmargin: 0 auto;\n\t\t\tpadding: 20px 50px 50px 50px;\n\n\t\t\t&-empty-info {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t&__sidebar {\n\t\t\tmargin: unset;\n\t\t\tposition: unset;\n\t\t}\n\t}\n}\n\n.user-actions {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n\tmargin-top: 20px;\n\n\t&__primary {\n\t\tmargin: 0 auto;\n\t}\n\n\t&__other {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\tgap: 0 4px;\n\t\ta {\n\t\t\tfilter: var(--background-invert-if-dark);\n\t\t}\n\t}\n}\n\n.icon-invert {\n\t&::v-deep .action-link__icon {\n\t\tfilter: invert(1);\n\t}\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=0&id=c8c42fa4&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=0&id=c8c42fa4&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=1&id=c8c42fa4&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=1&id=c8c42fa4&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Profile.vue?vue&type=template&id=c8c42fa4&scoped=true&\"\nimport script from \"./Profile.vue?vue&type=script&lang=js&\"\nexport * from \"./Profile.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Profile.vue?vue&type=style&index=0&id=c8c42fa4&prod&lang=scss&\"\nimport style1 from \"./Profile.vue?vue&type=style&index=1&id=c8c42fa4&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c8c42fa4\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"profile\"},[_c('div',{staticClass:\"profile__header\"},[_c('div',{staticClass:\"profile__header__container\"},[_c('div',{staticClass:\"profile__header__container__placeholder\"}),_vm._v(\" \"),_c('h2',{staticClass:\"profile__header__container__displayname\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.displayname || _vm.userId)+\"\\n\\t\\t\\t\\t\"),(_vm.isCurrentUser)?_c('a',{staticClass:\"primary profile__header__container__edit-button\",attrs:{\"href\":_vm.settingsUrl}},[_c('PencilIcon',{staticClass:\"pencil-icon\",attrs:{\"size\":16}}),_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Edit Profile'))+\"\\n\\t\\t\\t\\t\")],1):_vm._e()]),_vm._v(\" \"),(_vm.status.icon || _vm.status.message)?_c('div',{staticClass:\"profile__header__container__status-text\",class:{ interactive: _vm.isCurrentUser },on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openStatusModal.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.status.icon)+\" \"+_vm._s(_vm.status.message)+\"\\n\\t\\t\\t\")]):_vm._e()])]),_vm._v(\" \"),_c('div',{staticClass:\"profile__wrapper\"},[_c('div',{staticClass:\"profile__content\"},[_c('div',{staticClass:\"profile__sidebar\"},[_c('NcAvatar',{staticClass:\"avatar\",class:{ interactive: _vm.isCurrentUser },attrs:{\"user\":_vm.userId,\"size\":180,\"show-user-status\":true,\"show-user-status-compact\":false,\"disable-menu\":true,\"disable-tooltip\":true,\"is-no-user\":!_vm.isUserAvatarVisible},nativeOn:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openStatusModal.apply(null, arguments)}}}),_vm._v(\" \"),_c('div',{staticClass:\"user-actions\"},[(_vm.primaryAction)?_c('PrimaryActionButton',{staticClass:\"user-actions__primary\",attrs:{\"href\":_vm.primaryAction.target,\"icon\":_vm.primaryAction.icon,\"target\":_vm.primaryAction.id === 'phone' ? '_self' :'_blank'}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.primaryAction.title)+\"\\n\\t\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"user-actions__other\"},[_vm._l((_vm.middleActions),function(action){return _c('NcActions',{key:action.id,staticStyle:{\"background-position\":\"14px center\",\"background-size\":\"16px\",\"background-repeat\":\"no-repeat\"},style:({\n\t\t\t\t\t\t\t\tbackgroundImage: `url(${action.icon})`,\n\t\t\t\t\t\t\t\t...(_vm.colorMainBackground === '#181818' && { filter: 'invert(1)' })\n\t\t\t\t\t\t\t}),attrs:{\"default-icon\":action.icon}},[_c('NcActionLink',{attrs:{\"close-after-click\":true,\"icon\":action.icon,\"href\":action.target,\"target\":action.id === 'phone' ? '_self' :'_blank'}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(action.title)+\"\\n\\t\\t\\t\\t\\t\\t\\t\")])],1)}),_vm._v(\" \"),(_vm.otherActions)?[_c('NcActions',{attrs:{\"force-menu\":true}},_vm._l((_vm.otherActions),function(action){return _c('NcActionLink',{key:action.id,class:{ 'icon-invert': _vm.colorMainBackground === '#181818' },attrs:{\"close-after-click\":true,\"icon\":action.icon,\"href\":action.target,\"target\":action.id === 'phone' ? '_self' :'_blank'}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(action.title)+\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\")])}),1)]:_vm._e()],2)],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"profile__blocks\"},[(_vm.organisation || _vm.role || _vm.address)?_c('div',{staticClass:\"profile__blocks-details\"},[(_vm.organisation || _vm.role)?_c('div',{staticClass:\"detail\"},[_c('p',[_vm._v(_vm._s(_vm.organisation)+\" \"),(_vm.organisation && _vm.role)?_c('span',[_vm._v(\"•\")]):_vm._e(),_vm._v(\" \"+_vm._s(_vm.role))])]):_vm._e(),_vm._v(\" \"),(_vm.address)?_c('div',{staticClass:\"detail\"},[_c('p',[_c('MapMarkerIcon',{staticClass:\"map-icon\",attrs:{\"size\":16}}),_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.address)+\"\\n\\t\\t\\t\\t\\t\\t\")],1)]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.headline || _vm.biography || _vm.sections.length > 0)?[(_vm.headline)?_c('div',{staticClass:\"profile__blocks-headline\"},[_c('h3',[_vm._v(_vm._s(_vm.headline))])]):_vm._e(),_vm._v(\" \"),(_vm.biography)?_c('div',{staticClass:\"profile__blocks-biography\"},[_c('p',[_vm._v(_vm._s(_vm.biography))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.sections),function(section,index){return _c('div',{key:index,ref:'section-' + index,refInFor:true,staticClass:\"profile__additionalContent\"},[_c(section(_vm.$refs['section-'+index], _vm.userId),{tag:\"component\",attrs:{\"userId\":_vm.userId}})],1)})]:[_c('div',{staticClass:\"profile__blocks-empty-info\"},[_c('AccountIcon',{attrs:{\"size\":60,\"fill-color\":\"var(--color-text-maxcontrast)\"}}),_vm._v(\" \"),_c('h3',[_vm._v(_vm._s(_vm.emptyProfileMessage))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.t('core', 'The headline and about sections will show up here')))])],1)]],2)])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2021, Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport { getRequestToken } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\nimport VTooltip from 'v-tooltip'\n\nimport logger from './logger.js'\n\nimport Profile from './views/Profile.vue'\nimport ProfileSections from './profile/ProfileSections.js'\n\n__webpack_nonce__ = btoa(getRequestToken())\n\nif (!window.OCA) {\n\twindow.OCA = {}\n}\n\nif (!window.OCA.Core) {\n\twindow.OCA.Core = {}\n}\nObject.assign(window.OCA.Core, { ProfileSections: new ProfileSections() })\n\nVue.use(VTooltip)\n\nVue.mixin({\n\tprops: {\n\t\tlogger,\n\t},\n\tmethods: {\n\t\tt,\n\t},\n})\n\nconst View = Vue.extend(Profile)\n\nwindow.addEventListener('DOMContentLoaded', () => {\n\tnew View().$mount('#vue-profile')\n})\n","\n/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class ProfileSections {\n\n\t_sections\n\n\tconstructor() {\n\t\tthis._sections = []\n\t}\n\n\t/**\n\t * @param {registerSectionCallback} section To be called to mount the section to the profile page\n\t */\n\tregisterSection(section) {\n\t\tthis._sections.push(section)\n\t}\n\n\tgetSections() {\n\t\treturn this._sections\n\t}\n\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".profile__primary-action-button[data-v-35d5c4b6]{font-size:var(--default-font-size);font-weight:bold;width:188px;height:44px;padding:0 16px;line-height:44px;text-align:center;border-radius:var(--border-radius-pill);color:var(--color-primary-text);background-color:var(--color-primary-element);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.profile__primary-action-button .icon[data-v-35d5c4b6]{display:inline-block;vertical-align:middle;margin-bottom:2px;margin-right:4px}.profile__primary-action-button .icon.icon-invert[data-v-35d5c4b6]{filter:invert(1)}.profile__primary-action-button[data-v-35d5c4b6]:hover,.profile__primary-action-button[data-v-35d5c4b6]:focus,.profile__primary-action-button[data-v-35d5c4b6]:active{background-color:var(--color-primary-element-light)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/Profile/PrimaryActionButton.vue\"],\"names\":[],\"mappings\":\"AACA,iDACC,kCAAA,CACA,gBAAA,CACA,WAAA,CACA,WAAA,CACA,cAAA,CACA,gBAAA,CACA,iBAAA,CACA,uCAAA,CACA,+BAAA,CACA,6CAAA,CACA,eAAA,CACA,kBAAA,CACA,sBAAA,CAEA,uDACC,oBAAA,CACA,qBAAA,CACA,iBAAA,CACA,gBAAA,CAEA,mEACC,gBAAA,CAIF,sKAGC,mDAAA\",\"sourcesContent\":[\"\\n.profile__primary-action-button {\\n\\tfont-size: var(--default-font-size);\\n\\tfont-weight: bold;\\n\\twidth: 188px;\\n\\theight: 44px;\\n\\tpadding: 0 16px;\\n\\tline-height: 44px;\\n\\ttext-align: center;\\n\\tborder-radius: var(--border-radius-pill);\\n\\tcolor: var(--color-primary-text);\\n\\tbackground-color: var(--color-primary-element);\\n\\toverflow: hidden;\\n\\twhite-space: nowrap;\\n\\ttext-overflow: ellipsis;\\n\\n\\t.icon {\\n\\t\\tdisplay: inline-block;\\n\\t\\tvertical-align: middle;\\n\\t\\tmargin-bottom: 2px;\\n\\t\\tmargin-right: 4px;\\n\\n\\t\\t&.icon-invert {\\n\\t\\t\\tfilter: invert(1);\\n\\t\\t}\\n\\t}\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-primary-element-light);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#header{background-color:rgba(0,0,0,0) !important;background-image:none !important}#content{padding-top:0px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/Profile.vue\"],\"names\":[],\"mappings\":\"AAEA,QACC,yCAAA,CACA,gCAAA,CAGD,SACC,eAAA\",\"sourcesContent\":[\"\\n// Override header styles\\n#header {\\n\\tbackground-color: transparent !important;\\n\\tbackground-image: none !important;\\n}\\n\\n#content {\\n\\tpadding-top: 0px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".profile[data-v-c8c42fa4]{width:100%;overflow-y:auto}.profile__header[data-v-c8c42fa4]{position:sticky;height:190px;top:-40px;background-color:var(--color-main-background-blur);backdrop-filter:var(--filter-background-blur);-webkit-backdrop-filter:var(--filter-background-blur)}.profile__header__container[data-v-c8c42fa4]{align-self:flex-end;width:100%;max-width:1024px;margin:0 auto;display:grid;grid-template-rows:max-content max-content;grid-template-columns:240px 1fr;justify-content:center}.profile__header__container__placeholder[data-v-c8c42fa4]{grid-row:1/3}.profile__header__container__displayname[data-v-c8c42fa4],.profile__header__container__status-text[data-v-c8c42fa4]{color:var(--color-main-text)}.profile__header__container__displayname[data-v-c8c42fa4]{width:640px;height:45px;margin-top:128px;margin-bottom:0;font-size:30px;display:flex;align-items:center;cursor:text}.profile__header__container__displayname[data-v-c8c42fa4]:not(:last-child){margin-top:100px;margin-bottom:4px}.profile__header__container__edit-button[data-v-c8c42fa4]{border:none;margin-left:18px;margin-top:2px;color:var(--color-primary-element);background-color:var(--color-primary-text);box-shadow:0 0 0 2px var(--color-primary-text);border-radius:var(--border-radius-pill);padding:0 18px;font-size:var(--default-font-size);height:44px;line-height:44px;font-weight:bold}.profile__header__container__edit-button[data-v-c8c42fa4]:hover,.profile__header__container__edit-button[data-v-c8c42fa4]:focus,.profile__header__container__edit-button[data-v-c8c42fa4]:active{color:var(--color-primary-element);background-color:var(--color-primary-element-light)}.profile__header__container__edit-button .pencil-icon[data-v-c8c42fa4]{display:inline-block;vertical-align:middle;margin-top:2px}.profile__header__container__status-text[data-v-c8c42fa4]{width:max-content;max-width:640px;padding:5px 10px;margin-left:-12px;margin-top:2px}.profile__header__container__status-text.interactive[data-v-c8c42fa4]{cursor:pointer}.profile__header__container__status-text.interactive[data-v-c8c42fa4]:hover,.profile__header__container__status-text.interactive[data-v-c8c42fa4]:focus,.profile__header__container__status-text.interactive[data-v-c8c42fa4]:active{background-color:var(--color-main-background);color:var(--color-main-text);border-radius:var(--border-radius-pill);font-weight:bold;box-shadow:0 3px 6px var(--color-box-shadow)}.profile__sidebar[data-v-c8c42fa4]{position:sticky;top:var(--header-height);align-self:flex-start;padding-top:20px;min-width:220px;margin:-150px 20px 0 0}.profile__sidebar[data-v-c8c42fa4] .avatar.avatardiv,.profile__sidebar h2[data-v-c8c42fa4]{text-align:center;margin:auto;display:block;padding:8px}.profile__sidebar[data-v-c8c42fa4] .avatar.avatardiv:not(.avatardiv--unknown){background-color:var(--color-main-background) !important;box-shadow:none}.profile__sidebar[data-v-c8c42fa4] .avatar.avatardiv .avatardiv__user-status{right:14px;bottom:14px;width:34px;height:34px;background-size:28px;border:none;background-color:var(--color-main-background);line-height:34px;font-size:20px}.profile__sidebar[data-v-c8c42fa4] .avatar.interactive.avatardiv .avatardiv__user-status{cursor:pointer}.profile__sidebar[data-v-c8c42fa4] .avatar.interactive.avatardiv .avatardiv__user-status:hover,.profile__sidebar[data-v-c8c42fa4] .avatar.interactive.avatardiv .avatardiv__user-status:focus,.profile__sidebar[data-v-c8c42fa4] .avatar.interactive.avatardiv .avatardiv__user-status:active{box-shadow:0 3px 6px var(--color-box-shadow)}.profile__wrapper[data-v-c8c42fa4]{background-color:var(--color-main-background);min-height:100%}.profile__content[data-v-c8c42fa4]{max-width:1024px;margin:0 auto;display:flex;width:100%}.profile__blocks[data-v-c8c42fa4]{margin:18px 0 80px 0;display:grid;gap:16px 0;width:640px}.profile__blocks p[data-v-c8c42fa4],.profile__blocks h3[data-v-c8c42fa4]{overflow-wrap:anywhere}.profile__blocks-details[data-v-c8c42fa4]{display:flex;flex-direction:column;gap:2px 0}.profile__blocks-details .detail[data-v-c8c42fa4]{display:inline-block;color:var(--color-text-maxcontrast)}.profile__blocks-details .detail p .map-icon[data-v-c8c42fa4]{display:inline-block;vertical-align:middle}.profile__blocks-headline[data-v-c8c42fa4]{margin-top:10px}.profile__blocks-headline h3[data-v-c8c42fa4]{font-weight:bold;font-size:20px;margin:0}.profile__blocks-biography[data-v-c8c42fa4]{white-space:pre-line}.profile__blocks h3[data-v-c8c42fa4],.profile__blocks p[data-v-c8c42fa4]{cursor:text}.profile__blocks-empty-info[data-v-c8c42fa4]{margin-top:80px;margin-right:100px;display:flex;flex-direction:column;text-align:center}.profile__blocks-empty-info h3[data-v-c8c42fa4]{font-weight:bold;font-size:18px;margin:8px 0}@media only screen and (max-width: 1024px){.profile__header[data-v-c8c42fa4]{height:250px;position:unset}.profile__header__container[data-v-c8c42fa4]{grid-template-columns:unset}.profile__header__container__displayname[data-v-c8c42fa4]{margin:80px 20px 0px !important;height:1em;width:unset;display:unset;text-align:center}.profile__header__container__edit-button[data-v-c8c42fa4]{width:fit-content;display:block;margin:60px auto}.profile__header__container__status-text[data-v-c8c42fa4]{margin:4px auto}.profile__content[data-v-c8c42fa4]{display:block}.profile__blocks[data-v-c8c42fa4]{width:unset;max-width:600px;margin:0 auto;padding:20px 50px 50px 50px}.profile__blocks-empty-info[data-v-c8c42fa4]{margin:0}.profile__sidebar[data-v-c8c42fa4]{margin:unset;position:unset}}.user-actions[data-v-c8c42fa4]{display:flex;flex-direction:column;gap:8px 0;margin-top:20px}.user-actions__primary[data-v-c8c42fa4]{margin:0 auto}.user-actions__other[data-v-c8c42fa4]{display:flex;justify-content:center;gap:0 4px}.user-actions__other a[data-v-c8c42fa4]{filter:var(--background-invert-if-dark)}.icon-invert[data-v-c8c42fa4] .action-link__icon{filter:invert(1)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/Profile.vue\"],\"names\":[],\"mappings\":\"AAIA,0BACC,UAAA,CACA,eAAA,CAEA,kCACC,eAAA,CACA,YAAA,CACA,SAAA,CACA,kDAAA,CACA,6CAAA,CACA,qDAAA,CAEA,6CACC,mBAAA,CACA,UAAA,CACA,gBAlBiB,CAmBjB,aAAA,CACA,YAAA,CACA,0CAAA,CACA,+BAAA,CACA,sBAAA,CAEA,0DACC,YAAA,CAGD,oHACC,4BAAA,CAGD,0DACC,WAjCgB,CAkChB,WAAA,CACA,gBAAA,CAEA,eAAA,CACA,cAAA,CACA,YAAA,CACA,kBAAA,CACA,WAAA,CAEA,2EACC,gBAAA,CACA,iBAAA,CAIF,0DACC,WAAA,CACA,gBAAA,CACA,cAAA,CACA,kCAAA,CACA,0CAAA,CACA,8CAAA,CACA,uCAAA,CACA,cAAA,CACA,kCAAA,CACA,WAAA,CACA,gBAAA,CACA,gBAAA,CAEA,iMAGC,kCAAA,CACA,mDAAA,CAGD,uEACC,oBAAA,CACA,qBAAA,CACA,cAAA,CAIF,0DACC,iBAAA,CACA,eA/EgB,CAgFhB,gBAAA,CACA,iBAAA,CACA,cAAA,CAEA,sEACC,cAAA,CAEA,qOAGC,6CAAA,CACA,4BAAA,CACA,uCAAA,CACA,gBAAA,CACA,4CAAA,CAOL,mCACC,eAAA,CACA,wBAAA,CACA,qBAAA,CACA,gBAAA,CACA,eAAA,CACA,sBAAA,CAGA,2FACC,iBAAA,CACA,WAAA,CACA,aAAA,CACA,WAAA,CAGD,8EACC,wDAAA,CACA,eAAA,CAIA,6EACC,UAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,oBAAA,CACA,WAAA,CAEA,6CAAA,CACA,gBAAA,CACA,cAAA,CAKD,yFACC,cAAA,CAEA,8RAGC,4CAAA,CAMJ,mCACC,6CAAA,CACA,eAAA,CAGD,mCACC,gBA7JkB,CA8JlB,aAAA,CACA,YAAA,CACA,UAAA,CAGD,kCACC,oBAAA,CACA,YAAA,CACA,UAAA,CACA,WAtKkB,CAwKlB,yEACC,sBAAA,CAGD,0CACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,kDACC,oBAAA,CACA,mCAAA,CAEA,8DACC,oBAAA,CACA,qBAAA,CAKH,2CACC,eAAA,CAEA,8CACC,gBAAA,CACA,cAAA,CACA,QAAA,CAIF,4CACC,oBAAA,CAGD,yEACC,WAAA,CAGD,6CACC,eAAA,CACA,kBAAA,CACA,YAAA,CACA,qBAAA,CACA,iBAAA,CAEA,gDACC,gBAAA,CACA,cAAA,CACA,YAAA,CAMJ,2CAEE,kCACC,YAAA,CACA,cAAA,CAEA,6CACC,2BAAA,CAEA,0DACC,+BAAA,CACA,UAAA,CACA,WAAA,CACA,aAAA,CACA,iBAAA,CAGD,0DACC,iBAAA,CACA,aAAA,CACA,gBAAA,CAGD,0DACC,eAAA,CAKH,mCACC,aAAA,CAGD,kCACC,WAAA,CACA,eAAA,CACA,aAAA,CACA,2BAAA,CAEA,6CACC,QAAA,CAIF,mCACC,YAAA,CACA,cAAA,CAAA,CAKH,+BACC,YAAA,CACA,qBAAA,CACA,SAAA,CACA,eAAA,CAEA,wCACC,aAAA,CAGD,sCACC,YAAA,CACA,sBAAA,CACA,SAAA,CACA,wCACC,uCAAA,CAMF,iDACC,gBAAA\",\"sourcesContent\":[\"\\n$profile-max-width: 1024px;\\n$content-max-width: 640px;\\n\\n.profile {\\n\\twidth: 100%;\\n\\toverflow-y: auto;\\n\\n\\t&__header {\\n\\t\\tposition: sticky;\\n\\t\\theight: 190px;\\n\\t\\ttop: -40px;\\n\\t\\tbackground-color: var(--color-main-background-blur);\\n\\t\\tbackdrop-filter: var(--filter-background-blur);\\n\\t\\t-webkit-backdrop-filter: var(--filter-background-blur);\\n\\n\\t\\t&__container {\\n\\t\\t\\talign-self: flex-end;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmax-width: $profile-max-width;\\n\\t\\t\\tmargin: 0 auto;\\n\\t\\t\\tdisplay: grid;\\n\\t\\t\\tgrid-template-rows: max-content max-content;\\n\\t\\t\\tgrid-template-columns: 240px 1fr;\\n\\t\\t\\tjustify-content: center;\\n\\n\\t\\t\\t&__placeholder {\\n\\t\\t\\t\\tgrid-row: 1 / 3;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__displayname, &__status-text {\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__displayname {\\n\\t\\t\\t\\twidth: $content-max-width;\\n\\t\\t\\t\\theight: 45px;\\n\\t\\t\\t\\tmargin-top: 128px;\\n\\t\\t\\t\\t// Override the global style declaration\\n\\t\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\t\\tfont-size: 30px;\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\talign-items: center;\\n\\t\\t\\t\\tcursor: text;\\n\\n\\t\\t\\t\\t&:not(:last-child) {\\n\\t\\t\\t\\t\\tmargin-top: 100px;\\n\\t\\t\\t\\t\\tmargin-bottom: 4px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__edit-button {\\n\\t\\t\\t\\tborder: none;\\n\\t\\t\\t\\tmargin-left: 18px;\\n\\t\\t\\t\\tmargin-top: 2px;\\n\\t\\t\\t\\tcolor: var(--color-primary-element);\\n\\t\\t\\t\\tbackground-color: var(--color-primary-text);\\n\\t\\t\\t\\tbox-shadow: 0 0 0 2px var(--color-primary-text);\\n\\t\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\t\\tpadding: 0 18px;\\n\\t\\t\\t\\tfont-size: var(--default-font-size);\\n\\t\\t\\t\\theight: 44px;\\n\\t\\t\\t\\tline-height: 44px;\\n\\t\\t\\t\\tfont-weight: bold;\\n\\n\\t\\t\\t\\t&:hover,\\n\\t\\t\\t\\t&:focus,\\n\\t\\t\\t\\t&:active {\\n\\t\\t\\t\\t\\tcolor: var(--color-primary-element);\\n\\t\\t\\t\\t\\tbackground-color: var(--color-primary-element-light);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t.pencil-icon {\\n\\t\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t\\t\\tvertical-align: middle;\\n\\t\\t\\t\\t\\tmargin-top: 2px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__status-text {\\n\\t\\t\\t\\twidth: max-content;\\n\\t\\t\\t\\tmax-width: $content-max-width;\\n\\t\\t\\t\\tpadding: 5px 10px;\\n\\t\\t\\t\\tmargin-left: -12px;\\n\\t\\t\\t\\tmargin-top: 2px;\\n\\n\\t\\t\\t\\t&.interactive {\\n\\t\\t\\t\\t\\tcursor: pointer;\\n\\n\\t\\t\\t\\t\\t&:hover,\\n\\t\\t\\t\\t\\t&:focus,\\n\\t\\t\\t\\t\\t&:active {\\n\\t\\t\\t\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\t\\t\\t\\tfont-weight: bold;\\n\\t\\t\\t\\t\\t\\tbox-shadow: 0 3px 6px var(--color-box-shadow);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__sidebar {\\n\\t\\tposition: sticky;\\n\\t\\ttop: var(--header-height);\\n\\t\\talign-self: flex-start;\\n\\t\\tpadding-top: 20px;\\n\\t\\tmin-width: 220px;\\n\\t\\tmargin: -150px 20px 0 0;\\n\\n\\t\\t// Specificity hack is needed to override Avatar component styles\\n\\t\\t&::v-deep .avatar.avatardiv, h2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tmargin: auto;\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tpadding: 8px;\\n\\t\\t}\\n\\n\\t\\t&::v-deep .avatar.avatardiv:not(.avatardiv--unknown) {\\n\\t\\t\\tbackground-color: var(--color-main-background) !important;\\n\\t\\t\\tbox-shadow: none;\\n\\t\\t}\\n\\n\\t\\t&::v-deep .avatar.avatardiv {\\n\\t\\t\\t.avatardiv__user-status {\\n\\t\\t\\t\\tright: 14px;\\n\\t\\t\\t\\tbottom: 14px;\\n\\t\\t\\t\\twidth: 34px;\\n\\t\\t\\t\\theight: 34px;\\n\\t\\t\\t\\tbackground-size: 28px;\\n\\t\\t\\t\\tborder: none;\\n\\t\\t\\t\\t// Styles when custom status icon and status text are set\\n\\t\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t\\t\\tline-height: 34px;\\n\\t\\t\\t\\tfont-size: 20px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&::v-deep .avatar.interactive.avatardiv {\\n\\t\\t\\t.avatardiv__user-status {\\n\\t\\t\\t\\tcursor: pointer;\\n\\n\\t\\t\\t\\t&:hover,\\n\\t\\t\\t\\t&:focus,\\n\\t\\t\\t\\t&:active {\\n\\t\\t\\t\\t\\tbox-shadow: 0 3px 6px var(--color-box-shadow);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__wrapper {\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tmin-height: 100%;\\n\\t}\\n\\n\\t&__content {\\n\\t\\tmax-width: $profile-max-width;\\n\\t\\tmargin: 0 auto;\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t&__blocks {\\n\\t\\tmargin: 18px 0 80px 0;\\n\\t\\tdisplay: grid;\\n\\t\\tgap: 16px 0;\\n\\t\\twidth: $content-max-width;\\n\\n\\t\\tp, h3 {\\n\\t\\t\\toverflow-wrap: anywhere;\\n\\t\\t}\\n\\n\\t\\t&-details {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\tgap: 2px 0;\\n\\n\\t\\t\\t.detail {\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\n\\t\\t\\t\\tp .map-icon {\\n\\t\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t\\t\\tvertical-align: middle;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-headline {\\n\\t\\t\\tmargin-top: 10px;\\n\\n\\t\\t\\th3 {\\n\\t\\t\\t\\tfont-weight: bold;\\n\\t\\t\\t\\tfont-size: 20px;\\n\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-biography {\\n\\t\\t\\twhite-space: pre-line;\\n\\t\\t}\\n\\n\\t\\th3, p {\\n\\t\\t\\tcursor: text;\\n\\t\\t}\\n\\n\\t\\t&-empty-info {\\n\\t\\t\\tmargin-top: 80px;\\n\\t\\t\\tmargin-right: 100px;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\ttext-align: center;\\n\\n\\t\\t\\th3 {\\n\\t\\t\\t\\tfont-weight: bold;\\n\\t\\t\\t\\tfont-size: 18px;\\n\\t\\t\\t\\tmargin: 8px 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\n@media only screen and (max-width: 1024px) {\\n\\t.profile {\\n\\t\\t&__header {\\n\\t\\t\\theight: 250px;\\n\\t\\t\\tposition: unset;\\n\\n\\t\\t\\t&__container {\\n\\t\\t\\t\\tgrid-template-columns: unset;\\n\\n\\t\\t\\t\\t&__displayname {\\n\\t\\t\\t\\t\\tmargin: 80px 20px 0px!important;\\n\\t\\t\\t\\t\\theight: 1em;\\n\\t\\t\\t\\t\\twidth: unset;\\n\\t\\t\\t\\t\\tdisplay: unset;\\n\\t\\t\\t\\t\\ttext-align: center;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&__edit-button {\\n\\t\\t\\t\\t\\twidth: fit-content;\\n\\t\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t\\t\\tmargin: 60px auto;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&__status-text {\\n\\t\\t\\t\\t\\tmargin: 4px auto;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&__content {\\n\\t\\t\\tdisplay: block;\\n\\t\\t}\\n\\n\\t\\t&__blocks {\\n\\t\\t\\twidth: unset;\\n\\t\\t\\tmax-width: 600px;\\n\\t\\t\\tmargin: 0 auto;\\n\\t\\t\\tpadding: 20px 50px 50px 50px;\\n\\n\\t\\t\\t&-empty-info {\\n\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&__sidebar {\\n\\t\\t\\tmargin: unset;\\n\\t\\t\\tposition: unset;\\n\\t\\t}\\n\\t}\\n}\\n\\n.user-actions {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 8px 0;\\n\\tmargin-top: 20px;\\n\\n\\t&__primary {\\n\\t\\tmargin: 0 auto;\\n\\t}\\n\\n\\t&__other {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\t\\tgap: 0 4px;\\n\\t\\ta {\\n\\t\\t\\tfilter: var(--background-invert-if-dark);\\n\\t\\t}\\n\\t}\\n}\\n\\n.icon-invert {\\n\\t&::v-deep .action-link__icon {\\n\\t\\tfilter: invert(1);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 9651;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t9651: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(15737)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","user","getCurrentUser","getLoggerBuilder","setApp","build","setUid","uid","name","props","disabled","type","Boolean","default","href","String","required","icon","target","validator","value","includes","computed","colorPrimaryText","getComputedStyle","document","body","getPropertyValue","trim","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","_g","staticClass","class","attrs","$listeners","_v","_t","status","loadState","userId","displayname","address","organisation","role","headline","biography","actions","isUserAvatarVisible","components","AccountIcon","NcActionLink","NcActions","NcAvatar","MapMarkerIcon","PencilIcon","PrimaryActionButton","data","sections","OCA","Core","ProfileSections","getSections","isCurrentUser","_getCurrentUser","allActions","primaryAction","length","middleActions","slice","otherActions","settingsUrl","generateUrl","colorMainBackground","emptyProfileMessage","t","mounted","title","concat","subscribe","handleStatusUpdate","beforeDestroy","unsubscribe","methods","openStatusModal","statusMenuItem","querySelector","click","showError","_s","_e","message","interactive","on","$event","preventDefault","stopPropagation","apply","arguments","nativeOn","id","_l","action","key","staticStyle","style","backgroundImage","filter","section","index","ref","refInFor","$refs","tag","__webpack_nonce__","btoa","getRequestToken","window","Object","assign","constructor","_sections","registerSection","push","Vue","VTooltip","logger","View","Profile","addEventListener","$mount","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/core-recommendedapps.js b/dist/core-recommendedapps.js
index bd84797ee0a..1cd149a3266 100644
--- a/dist/core-recommendedapps.js
+++ b/dist/core-recommendedapps.js
@@ -1,3 +1,3 @@
/*! For license information please see core-recommendedapps.js.LICENSE.txt */
-(()=>{"use strict";var t,n={13421:(t,n,e)=>{var a=e(45994),o=e(31352),i=e(20144),s=e(17499);const r=null===(c=(0,a.ts)())?(0,s.IY)().setApp("core").build():(0,s.IY)().setApp("core").setUid(c.uid).build();var c,l=e(4820),p=e(79753),d=e(79954),u=e(63560),g=e(10861),m=e.n(g);const f={calendar:{description:(0,o.Iu)("core","Schedule work & meetings, synced with all your devices."),icon:(0,p.imagePath)("core","places/calendar.svg")},contacts:{description:(0,o.Iu)("core","Keep your colleagues and friends in one place without leaking their private info."),icon:(0,p.imagePath)("core","places/contacts.svg")},mail:{description:(0,o.Iu)("core","Simple email app nicely integrated with Files, Contacts and Calendar."),icon:(0,p.imagePath)("core","actions/mail.svg")},spreed:{description:(0,o.Iu)("core","Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps."),icon:(0,p.imagePath)("core","apps/spreed.svg")},richdocuments:{name:"Nextcloud Office",description:(0,o.Iu)("core","Collaborative documents, spreadsheets and presentations, built on Collabora Online."),icon:(0,p.imagePath)("core","apps/richdocuments.svg")},notes:{description:(0,o.Iu)("core","Distraction free note taking app."),icon:(0,p.imagePath)("core","apps/notes.svg")},richdocumentscode:{hidden:!0}},A=Object.keys(f),h=(0,d.j)("core","defaultPageUrl"),v={name:"RecommendedApps",components:{NcButton:m()},data:()=>({showInstallButton:!1,installingApps:!1,loadingApps:!0,loadingAppsError:!1,apps:[],defaultPageUrl:h}),computed:{recommendedApps(){return this.apps.filter((t=>A.includes(t.id)))}},async mounted(){try{const{data:t}=await l.default.get((0,p.generateUrl)("settings/apps/list"));r.info("".concat(t.apps.length," apps fetched")),this.apps=t.apps.map((t=>Object.assign(t,{loading:!1,installationError:!1}))),r.debug("".concat(this.recommendedApps.length," recommended apps found"),{apps:this.recommendedApps}),this.showInstallButton=!0}catch(t){r.error("could not fetch app list",{error:t}),this.loadingAppsError=!0}finally{this.loadingApps=!1}},methods:{installApps(){this.showInstallButton=!1,this.installingApps=!0;const t=(0,u.Z)(1),n=this.recommendedApps.filter((t=>!t.active&&t.isCompatible&&t.canInstall)).map((n=>t((()=>(r.info("installing ".concat(n.id)),n.loading=!0,l.default.post((0,p.generateUrl)("settings/apps/enable"),{appIds:[n.id],groups:[]}).catch((t=>{r.error("could not install ".concat(n.id),{error:t}),n.installationError=!0})).then((()=>{r.info("installed ".concat(n.id)),n.loading=!1})))))));r.debug("installing ".concat(n.length," recommended apps")),Promise.all(n).then((()=>{r.info("all recommended apps installed, redirecting …"),window.location=h})).catch((t=>r.error("could not install recommended apps",{error:t})))},customIcon:t=>t in f&&f[t].icon?f[t].icon:(r.warn("no app icon for recommended app ".concat(t)),(0,p.imagePath)("core","places/default-app-icon.svg")),customName:t=>t.id in f&&f[t.id].name||t.name,customDescription:t=>t in f?f[t].description:(r.warn("no app description for recommended app ".concat(t)),""),isHidden:t=>t in f&&!!f[t].hidden,goTo(t){window.location.href=t}}};var C=e(93379),b=e.n(C),_=e(7795),y=e.n(_),w=e(90569),x=e.n(w),I=e(3565),k=e.n(I),P=e(19216),B=e.n(P),O=e(44589),j=e.n(O),D=e(33887),E={};E.styleTagTransform=j(),E.setAttributes=k(),E.insert=x().bind(null,"head"),E.domAPI=y(),E.insertStyleElement=B(),b()(D.Z,E),D.Z&&D.Z.locals&&D.Z.locals;const S=(0,e(51900).Z)(v,(function(){var t=this,n=t._self._c;return n("div",{staticClass:"guest-box"},[n("h2",[t._v(t._s(t.t("core","Recommended apps")))]),t._v(" "),t.loadingApps?n("p",{staticClass:"loading text-center"},[t._v("\n\t\t"+t._s(t.t("core","Loading apps …"))+"\n\t")]):t.loadingAppsError?n("p",{staticClass:"loading-error text-center"},[t._v("\n\t\t"+t._s(t.t("core","Could not fetch list of apps from the App Store."))+"\n\t")]):t.installingApps?n("p",{staticClass:"text-center"},[t._v("\n\t\t"+t._s(t.t("core","Installing apps …"))+"\n\t")]):t._e(),t._v(" "),t._l(t.recommendedApps,(function(e){return n("div",{key:e.id,staticClass:"app"},[t.isHidden(e.id)?t._e():[n("img",{attrs:{src:t.customIcon(e.id),alt:""}}),t._v(" "),n("div",{staticClass:"info"},[n("h3",[t._v("\n\t\t\t\t\t"+t._s(t.customName(e))+"\n\t\t\t\t\t"),e.loading?n("span",{staticClass:"icon icon-loading-small-dark"}):e.active?n("span",{staticClass:"icon icon-checkmark-white"}):t._e()]),t._v(" "),n("p",{domProps:{innerHTML:t._s(t.customDescription(e.id))}}),t._v(" "),e.installationError?n("p",[n("strong",[t._v(t._s(t.t("core","App download or installation failed")))])]):e.isCompatible?e.canInstall?t._e():n("p",[n("strong",[t._v(t._s(t.t("core","Cannot install this app")))])]):n("p",[n("strong",[t._v(t._s(t.t("core","Cannot install this app because it is not compatible")))])])])]],2)})),t._v(" "),n("div",{staticClass:"dialog-row"},[t.showInstallButton?n("NcButton",{attrs:{type:"tertiary",role:"link",href:"defaultPageUrl"},on:{click:function(n){return t.goTo(t.defaultPageUrl)}}},[t._v("\n\t\t\t"+t._s(t.t("core","Skip"))+"\n\t\t")]):t._e(),t._v(" "),t.showInstallButton?n("NcButton",{attrs:{type:"primary"},on:{click:function(n){return n.stopPropagation(),n.preventDefault(),t.installApps.apply(null,arguments)}}},[t._v("\n\t\t\t"+t._s(t.t("core","Install recommended apps"))+"\n\t\t")]):t._e()],1)],2)}),[],!1,null,"50fce157",null).exports;e.nc=btoa((0,a.IH)()),i.default.mixin({methods:{t:o.Iu}}),(new(i.default.extend(S))).$mount("#recommended-apps"),r.debug("recommended apps view rendered")},33887:(t,n,e)=>{e.d(n,{Z:()=>r});var a=e(87537),o=e.n(a),i=e(23645),s=e.n(i)()(o());s.push([t.id,".dialog-row[data-v-50fce157]{display:flex;justify-content:end;margin-top:8px}p.loading[data-v-50fce157],p.loading-error[data-v-50fce157]{height:100px}p[data-v-50fce157]:last-child{margin-top:10px}.text-center[data-v-50fce157]{text-align:center}.app[data-v-50fce157]{display:flex;flex-direction:row}.app img[data-v-50fce157]{height:50px;width:50px;filter:var(--background-invert-if-dark)}.app img[data-v-50fce157],.app .info[data-v-50fce157]{padding:12px}.app .info h3[data-v-50fce157],.app .info p[data-v-50fce157]{text-align:left}.app .info h3[data-v-50fce157]{margin-top:0}.app .info h3>span.icon[data-v-50fce157]{display:inline-block}","",{version:3,sources:["webpack://./core/src/components/setup/RecommendedApps.vue"],names:[],mappings:"AACA,6BACC,YAAA,CACA,mBAAA,CACA,cAAA,CAIA,4DAEC,YAAA,CAGD,8BACC,eAAA,CAIF,8BACC,iBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAEA,0BACC,WAAA,CACA,UAAA,CACA,uCAAA,CAGD,sDACC,YAAA,CAIA,6DACC,eAAA,CAGD,+BACC,YAAA,CAGD,yCACC,oBAAA",sourcesContent:["\n.dialog-row {\n\tdisplay: flex;\n\tjustify-content: end;\n\tmargin-top: 8px;\n}\n\np {\n\t&.loading,\n\t&.loading-error {\n\t\theight: 100px;\n\t}\n\n\t&:last-child {\n\t\tmargin-top: 10px;\n\t}\n}\n\n.text-center {\n\ttext-align: center;\n}\n\n.app {\n\tdisplay: flex;\n\tflex-direction: row;\n\n\timg {\n\t\theight: 50px;\n\t\twidth: 50px;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\timg, .info {\n\t\tpadding: 12px;\n\t}\n\n\t.info {\n\t\th3, p {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\th3 {\n\t\t\tmargin-top: 0;\n\t\t}\n\n\t\th3 > span.icon {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=s}},e={};function a(t){var o=e[t];if(void 0!==o)return o.exports;var i=e[t]={id:t,loaded:!1,exports:{}};return n[t].call(i.exports,i,i.exports,a),i.loaded=!0,i.exports}a.m=n,t=[],a.O=(n,e,o,i)=>{if(!e){var s=1/0;for(p=0;p<t.length;p++){e=t[p][0],o=t[p][1],i=t[p][2];for(var r=!0,c=0;c<e.length;c++)(!1&i||s>=i)&&Object.keys(a.O).every((t=>a.O[t](e[c])))?e.splice(c--,1):(r=!1,i<s&&(s=i));if(r){t.splice(p--,1);var l=o();void 0!==l&&(n=l)}}return n}i=i||0;for(var p=t.length;p>0&&t[p-1][2]>i;p--)t[p]=t[p-1];t[p]=[e,o,i]},a.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return a.d(n,{a:n}),n},a.d=(t,n)=>{for(var e in n)a.o(n,e)&&!a.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),a.j=1033,(()=>{a.b=document.baseURI||self.location.href;var t={1033:0};a.O.j=n=>0===t[n];var n=(n,e)=>{var o,i,s=e[0],r=e[1],c=e[2],l=0;if(s.some((n=>0!==t[n]))){for(o in r)a.o(r,o)&&(a.m[o]=r[o]);if(c)var p=c(a)}for(n&&n(e);l<s.length;l++)i=s[l],a.o(t,i)&&t[i]&&t[i][0](),t[i]=0;return a.O(p)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(n.bind(null,0)),e.push=n.bind(null,e.push.bind(e))})(),a.nc=void 0;var o=a.O(void 0,[7874],(()=>a(13421)));o=a.O(o)})();
-//# sourceMappingURL=core-recommendedapps.js.map?v=534582d384c8b7969a41 \ No newline at end of file
+(()=>{"use strict";var t,n={69897:(t,n,e)=>{var a=e(45994),o=e(31352),i=e(20144),s=e(17499);const r=null===(l=(0,a.ts)())?(0,s.IY)().setApp("core").build():(0,s.IY)().setApp("core").setUid(l.uid).build();var l,p=e(4820),c=e(79753),d=e(79954),u=e(63560),g=e(10861),m=e.n(g);const A={calendar:{description:(0,o.Iu)("core","Schedule work & meetings, synced with all your devices."),icon:(0,c.imagePath)("core","places/calendar.svg")},contacts:{description:(0,o.Iu)("core","Keep your colleagues and friends in one place without leaking their private info."),icon:(0,c.imagePath)("core","places/contacts.svg")},mail:{description:(0,o.Iu)("core","Simple email app nicely integrated with Files, Contacts and Calendar."),icon:(0,c.imagePath)("core","actions/mail.svg")},spreed:{description:(0,o.Iu)("core","Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps."),icon:(0,c.imagePath)("core","apps/spreed.svg")},richdocuments:{name:"Nextcloud Office",description:(0,o.Iu)("core","Collaborative documents, spreadsheets and presentations, built on Collabora Online."),icon:(0,c.imagePath)("core","apps/richdocuments.svg")},notes:{description:(0,o.Iu)("core","Distraction free note taking app."),icon:(0,c.imagePath)("core","apps/notes.svg")},richdocumentscode:{hidden:!0}},h=Object.keys(A),f={name:"RecommendedApps",components:{NcButton:m()},data:()=>({showInstallButton:!1,installingApps:!1,loadingApps:!0,loadingAppsError:!1,apps:[],defaultPageUrl:(0,d.j)("core","defaultPageUrl")}),computed:{recommendedApps(){return this.apps.filter((t=>h.includes(t.id)))}},async mounted(){try{const{data:t}=await p.default.get((0,c.generateUrl)("settings/apps/list"));r.info("".concat(t.apps.length," apps fetched")),this.apps=t.apps.map((t=>Object.assign(t,{loading:!1,installationError:!1}))),r.debug("".concat(this.recommendedApps.length," recommended apps found"),{apps:this.recommendedApps}),this.showInstallButton=!0}catch(t){r.error("could not fetch app list",{error:t}),this.loadingAppsError=!0}finally{this.loadingApps=!1}},methods:{installApps(){this.showInstallButton=!1,this.installingApps=!0;const t=(0,u.Z)(1),n=this.recommendedApps.filter((t=>!t.active&&t.isCompatible&&t.canInstall)).map((n=>t((()=>(r.info("installing ".concat(n.id)),n.loading=!0,p.default.post((0,c.generateUrl)("settings/apps/enable"),{appIds:[n.id],groups:[]}).catch((t=>{r.error("could not install ".concat(n.id),{error:t}),n.installationError=!0})).then((()=>{r.info("installed ".concat(n.id)),n.loading=!1})))))));r.debug("installing ".concat(n.length," recommended apps")),Promise.all(n).then((()=>{r.info("all recommended apps installed, redirecting …"),window.location=this.defaultPageUrl})).catch((t=>r.error("could not install recommended apps",{error:t})))},customIcon:t=>t in A&&A[t].icon?A[t].icon:(r.warn("no app icon for recommended app ".concat(t)),(0,c.imagePath)("core","places/default-app-icon.svg")),customName:t=>t.id in A&&A[t.id].name||t.name,customDescription:t=>t in A?A[t].description:(r.warn("no app description for recommended app ".concat(t)),""),isHidden:t=>t in A&&!!A[t].hidden}};var v=e(93379),C=e.n(v),b=e(7795),_=e.n(b),y=e(90569),x=e.n(y),w=e(3565),I=e.n(w),k=e(19216),P=e.n(k),B=e(44589),O=e.n(B),j=e(46202),D={};D.styleTagTransform=O(),D.setAttributes=I(),D.insert=x().bind(null,"head"),D.domAPI=_(),D.insertStyleElement=P(),C()(j.Z,D),j.Z&&j.Z.locals&&j.Z.locals;const E=(0,e(51900).Z)(f,(function(){var t=this,n=t._self._c;return n("div",{staticClass:"guest-box"},[n("h2",[t._v(t._s(t.t("core","Recommended apps")))]),t._v(" "),t.loadingApps?n("p",{staticClass:"loading text-center"},[t._v("\n\t\t"+t._s(t.t("core","Loading apps …"))+"\n\t")]):t.loadingAppsError?n("p",{staticClass:"loading-error text-center"},[t._v("\n\t\t"+t._s(t.t("core","Could not fetch list of apps from the App Store."))+"\n\t")]):t.installingApps?n("p",{staticClass:"text-center"},[t._v("\n\t\t"+t._s(t.t("core","Installing apps …"))+"\n\t")]):t._e(),t._v(" "),t._l(t.recommendedApps,(function(e){return n("div",{key:e.id,staticClass:"app"},[t.isHidden(e.id)?t._e():[n("img",{attrs:{src:t.customIcon(e.id),alt:""}}),t._v(" "),n("div",{staticClass:"info"},[n("h3",[t._v("\n\t\t\t\t\t"+t._s(t.customName(e))+"\n\t\t\t\t\t"),e.loading?n("span",{staticClass:"icon icon-loading-small-dark"}):e.active?n("span",{staticClass:"icon icon-checkmark-white"}):t._e()]),t._v(" "),n("p",{domProps:{innerHTML:t._s(t.customDescription(e.id))}}),t._v(" "),e.installationError?n("p",[n("strong",[t._v(t._s(t.t("core","App download or installation failed")))])]):e.isCompatible?e.canInstall?t._e():n("p",[n("strong",[t._v(t._s(t.t("core","Cannot install this app")))])]):n("p",[n("strong",[t._v(t._s(t.t("core","Cannot install this app because it is not compatible")))])])])]],2)})),t._v(" "),n("div",{staticClass:"dialog-row"},[t.showInstallButton?n("NcButton",{attrs:{type:"tertiary",role:"link",href:t.defaultPageUrl}},[t._v("\n\t\t\t"+t._s(t.t("core","Skip"))+"\n\t\t")]):t._e(),t._v(" "),t.showInstallButton?n("NcButton",{attrs:{type:"primary"},on:{click:function(n){return n.stopPropagation(),n.preventDefault(),t.installApps.apply(null,arguments)}}},[t._v("\n\t\t\t"+t._s(t.t("core","Install recommended apps"))+"\n\t\t")]):t._e()],1)],2)}),[],!1,null,"880500b4",null).exports;e.nc=btoa((0,a.IH)()),i.default.mixin({methods:{t:o.Iu}}),(new(i.default.extend(E))).$mount("#recommended-apps"),r.debug("recommended apps view rendered")},46202:(t,n,e)=>{e.d(n,{Z:()=>r});var a=e(87537),o=e.n(a),i=e(23645),s=e.n(i)()(o());s.push([t.id,".dialog-row[data-v-880500b4]{display:flex;justify-content:end;margin-top:8px}p.loading[data-v-880500b4],p.loading-error[data-v-880500b4]{height:100px}p[data-v-880500b4]:last-child{margin-top:10px}.text-center[data-v-880500b4]{text-align:center}.app[data-v-880500b4]{display:flex;flex-direction:row}.app img[data-v-880500b4]{height:50px;width:50px;filter:var(--background-invert-if-dark)}.app img[data-v-880500b4],.app .info[data-v-880500b4]{padding:12px}.app .info h3[data-v-880500b4],.app .info p[data-v-880500b4]{text-align:left}.app .info h3[data-v-880500b4]{margin-top:0}.app .info h3>span.icon[data-v-880500b4]{display:inline-block}","",{version:3,sources:["webpack://./core/src/components/setup/RecommendedApps.vue"],names:[],mappings:"AACA,6BACC,YAAA,CACA,mBAAA,CACA,cAAA,CAIA,4DAEC,YAAA,CAGD,8BACC,eAAA,CAIF,8BACC,iBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAEA,0BACC,WAAA,CACA,UAAA,CACA,uCAAA,CAGD,sDACC,YAAA,CAIA,6DACC,eAAA,CAGD,+BACC,YAAA,CAGD,yCACC,oBAAA",sourcesContent:["\n.dialog-row {\n\tdisplay: flex;\n\tjustify-content: end;\n\tmargin-top: 8px;\n}\n\np {\n\t&.loading,\n\t&.loading-error {\n\t\theight: 100px;\n\t}\n\n\t&:last-child {\n\t\tmargin-top: 10px;\n\t}\n}\n\n.text-center {\n\ttext-align: center;\n}\n\n.app {\n\tdisplay: flex;\n\tflex-direction: row;\n\n\timg {\n\t\theight: 50px;\n\t\twidth: 50px;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\timg, .info {\n\t\tpadding: 12px;\n\t}\n\n\t.info {\n\t\th3, p {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\th3 {\n\t\t\tmargin-top: 0;\n\t\t}\n\n\t\th3 > span.icon {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=s}},e={};function a(t){var o=e[t];if(void 0!==o)return o.exports;var i=e[t]={id:t,loaded:!1,exports:{}};return n[t].call(i.exports,i,i.exports,a),i.loaded=!0,i.exports}a.m=n,t=[],a.O=(n,e,o,i)=>{if(!e){var s=1/0;for(c=0;c<t.length;c++){e=t[c][0],o=t[c][1],i=t[c][2];for(var r=!0,l=0;l<e.length;l++)(!1&i||s>=i)&&Object.keys(a.O).every((t=>a.O[t](e[l])))?e.splice(l--,1):(r=!1,i<s&&(s=i));if(r){t.splice(c--,1);var p=o();void 0!==p&&(n=p)}}return n}i=i||0;for(var c=t.length;c>0&&t[c-1][2]>i;c--)t[c]=t[c-1];t[c]=[e,o,i]},a.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return a.d(n,{a:n}),n},a.d=(t,n)=>{for(var e in n)a.o(n,e)&&!a.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),a.j=1033,(()=>{a.b=document.baseURI||self.location.href;var t={1033:0};a.O.j=n=>0===t[n];var n=(n,e)=>{var o,i,s=e[0],r=e[1],l=e[2],p=0;if(s.some((n=>0!==t[n]))){for(o in r)a.o(r,o)&&(a.m[o]=r[o]);if(l)var c=l(a)}for(n&&n(e);p<s.length;p++)i=s[p],a.o(t,i)&&t[i]&&t[i][0](),t[i]=0;return a.O(c)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(n.bind(null,0)),e.push=n.bind(null,e.push.bind(e))})(),a.nc=void 0;var o=a.O(void 0,[7874],(()=>a(69897)));o=a.O(o)})();
+//# sourceMappingURL=core-recommendedapps.js.map?v=0719ad302d2eef84daea \ No newline at end of file
diff --git a/dist/core-recommendedapps.js.map b/dist/core-recommendedapps.js.map
index de62ab49789..4efb3f8431d 100644
--- a/dist/core-recommendedapps.js.map
+++ b/dist/core-recommendedapps.js.map
@@ -1 +1 @@
-{"version":3,"file":"core-recommendedapps.js?v=534582d384c8b7969a41","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/logger.js","webpack:///nextcloud/core/src/components/setup/RecommendedApps.vue","webpack:///nextcloud/core/src/components/setup/RecommendedApps.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/setup/RecommendedApps.vue?78ed","webpack://nextcloud/./core/src/components/setup/RecommendedApps.vue?84e8","webpack://nextcloud/./core/src/components/setup/RecommendedApps.vue?5f06","webpack:///nextcloud/core/src/recommendedapps.js","webpack:///nextcloud/core/src/components/setup/RecommendedApps.vue?vue&type=style&index=0&id=50fce157&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nconst getLogger = user => {\n\tif (user === null) {\n\t\treturn getLoggerBuilder()\n\t\t\t.setApp('core')\n\t\t\t.build()\n\t}\n\treturn getLoggerBuilder()\n\t\t.setApp('core')\n\t\t.setUid(user.uid)\n\t\t.build()\n}\n\nexport default getLogger(getCurrentUser())\n","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div class=\"guest-box\">\n\t\t<h2>{{ t('core', 'Recommended apps') }}</h2>\n\t\t<p v-if=\"loadingApps\" class=\"loading text-center\">\n\t\t\t{{ t('core', 'Loading apps …') }}\n\t\t</p>\n\t\t<p v-else-if=\"loadingAppsError\" class=\"loading-error text-center\">\n\t\t\t{{ t('core', 'Could not fetch list of apps from the App Store.') }}\n\t\t</p>\n\t\t<p v-else-if=\"installingApps\" class=\"text-center\">\n\t\t\t{{ t('core', 'Installing apps …') }}\n\t\t</p>\n\n\t\t<div v-for=\"app in recommendedApps\" :key=\"app.id\" class=\"app\">\n\t\t\t<template v-if=\"!isHidden(app.id)\">\n\t\t\t\t<img :src=\"customIcon(app.id)\" alt=\"\">\n\t\t\t\t<div class=\"info\">\n\t\t\t\t\t<h3>\n\t\t\t\t\t\t{{ customName(app) }}\n\t\t\t\t\t\t<span v-if=\"app.loading\" class=\"icon icon-loading-small-dark\" />\n\t\t\t\t\t\t<span v-else-if=\"app.active\" class=\"icon icon-checkmark-white\" />\n\t\t\t\t\t</h3>\n\t\t\t\t\t<p v-html=\"customDescription(app.id)\" />\n\t\t\t\t\t<p v-if=\"app.installationError\">\n\t\t\t\t\t\t<strong>{{ t('core', 'App download or installation failed') }}</strong>\n\t\t\t\t\t</p>\n\t\t\t\t\t<p v-else-if=\"!app.isCompatible\">\n\t\t\t\t\t\t<strong>{{ t('core', 'Cannot install this app because it is not compatible') }}</strong>\n\t\t\t\t\t</p>\n\t\t\t\t\t<p v-else-if=\"!app.canInstall\">\n\t\t\t\t\t\t<strong>{{ t('core', 'Cannot install this app') }}</strong>\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\n\t\t<div class=\"dialog-row\">\n\t\t\t<NcButton v-if=\"showInstallButton\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\trole=\"link\"\n\t\t\t\thref=\"defaultPageUrl\"\n\t\t\t\t@click=\"goTo(defaultPageUrl)\">\n\t\t\t\t{{ t('core', 'Skip') }}\n\t\t\t</NcButton>\n\n\t\t\t<NcButton v-if=\"showInstallButton\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t@click.stop.prevent=\"installApps\">\n\t\t\t\t{{ t('core', 'Install recommended apps') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl, imagePath } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport pLimit from 'p-limit'\nimport { translate as t } from '@nextcloud/l10n'\n\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\n\nimport logger from '../../logger.js'\n\nconst recommended = {\n\tcalendar: {\n\t\tdescription: t('core', 'Schedule work & meetings, synced with all your devices.'),\n\t\ticon: imagePath('core', 'places/calendar.svg'),\n\t},\n\tcontacts: {\n\t\tdescription: t('core', 'Keep your colleagues and friends in one place without leaking their private info.'),\n\t\ticon: imagePath('core', 'places/contacts.svg'),\n\t},\n\tmail: {\n\t\tdescription: t('core', 'Simple email app nicely integrated with Files, Contacts and Calendar.'),\n\t\ticon: imagePath('core', 'actions/mail.svg'),\n\t},\n\tspreed: {\n\t\tdescription: t('core', 'Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps.'),\n\t\ticon: imagePath('core', 'apps/spreed.svg'),\n\t},\n\trichdocuments: {\n\t\tname: 'Nextcloud Office',\n\t\tdescription: t('core', 'Collaborative documents, spreadsheets and presentations, built on Collabora Online.'),\n\t\ticon: imagePath('core', 'apps/richdocuments.svg'),\n\t},\n\tnotes: {\n\t\tdescription: t('core', 'Distraction free note taking app.'),\n\t\ticon: imagePath('core', 'apps/notes.svg'),\n\t},\n\trichdocumentscode: {\n\t\thidden: true,\n\t},\n}\nconst recommendedIds = Object.keys(recommended)\nconst defaultPageUrl = loadState('core', 'defaultPageUrl')\n\nexport default {\n\tname: 'RecommendedApps',\n\tcomponents: {\n\t\tNcButton,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowInstallButton: false,\n\t\t\tinstallingApps: false,\n\t\t\tloadingApps: true,\n\t\t\tloadingAppsError: false,\n\t\t\tapps: [],\n\t\t\tdefaultPageUrl,\n\t\t}\n\t},\n\tcomputed: {\n\t\trecommendedApps() {\n\t\t\treturn this.apps.filter(app => recommendedIds.includes(app.id))\n\t\t},\n\t},\n\tasync mounted() {\n\t\ttry {\n\t\t\tconst { data } = await axios.get(generateUrl('settings/apps/list'))\n\t\t\tlogger.info(`${data.apps.length} apps fetched`)\n\n\t\t\tthis.apps = data.apps.map(app => Object.assign(app, { loading: false, installationError: false }))\n\t\t\tlogger.debug(`${this.recommendedApps.length} recommended apps found`, { apps: this.recommendedApps })\n\n\t\t\tthis.showInstallButton = true\n\t\t} catch (error) {\n\t\t\tlogger.error('could not fetch app list', { error })\n\n\t\t\tthis.loadingAppsError = true\n\t\t} finally {\n\t\t\tthis.loadingApps = false\n\t\t}\n\t},\n\tmethods: {\n\t\tinstallApps() {\n\t\t\tthis.showInstallButton = false\n\t\t\tthis.installingApps = true\n\n\t\t\tconst limit = pLimit(1)\n\t\t\tconst installing = this.recommendedApps\n\t\t\t\t.filter(app => !app.active && app.isCompatible && app.canInstall)\n\t\t\t\t.map(app => limit(() => {\n\t\t\t\t\tlogger.info(`installing ${app.id}`)\n\t\t\t\t\tapp.loading = true\n\t\t\t\t\treturn axios.post(generateUrl('settings/apps/enable'), { appIds: [app.id], groups: [] })\n\t\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\t\tlogger.error(`could not install ${app.id}`, { error })\n\t\t\t\t\t\t\tapp.installationError = true\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tlogger.info(`installed ${app.id}`)\n\t\t\t\t\t\t\tapp.loading = false\n\t\t\t\t\t\t})\n\t\t\t\t}))\n\t\t\tlogger.debug(`installing ${installing.length} recommended apps`)\n\t\t\tPromise.all(installing)\n\t\t\t\t.then(() => {\n\t\t\t\t\tlogger.info('all recommended apps installed, redirecting …')\n\n\t\t\t\t\twindow.location = defaultPageUrl\n\t\t\t\t})\n\t\t\t\t.catch(error => logger.error('could not install recommended apps', { error }))\n\t\t},\n\t\tcustomIcon(appId) {\n\t\t\tif (!(appId in recommended) || !recommended[appId].icon) {\n\t\t\t\tlogger.warn(`no app icon for recommended app ${appId}`)\n\t\t\t\treturn imagePath('core', 'places/default-app-icon.svg')\n\t\t\t}\n\t\t\treturn recommended[appId].icon\n\t\t},\n\t\tcustomName(app) {\n\t\t\tif (!(app.id in recommended)) {\n\t\t\t\treturn app.name\n\t\t\t}\n\t\t\treturn recommended[app.id].name || app.name\n\t\t},\n\t\tcustomDescription(appId) {\n\t\t\tif (!(appId in recommended)) {\n\t\t\t\tlogger.warn(`no app description for recommended app ${appId}`)\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn recommended[appId].description\n\t\t},\n\t\tisHidden(appId) {\n\t\t\tif (!(appId in recommended)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn !!recommended[appId].hidden\n\t\t},\n\t\tgoTo(href) {\n\t\t\twindow.location.href = href\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.dialog-row {\n\tdisplay: flex;\n\tjustify-content: end;\n\tmargin-top: 8px;\n}\n\np {\n\t&.loading,\n\t&.loading-error {\n\t\theight: 100px;\n\t}\n\n\t&:last-child {\n\t\tmargin-top: 10px;\n\t}\n}\n\n.text-center {\n\ttext-align: center;\n}\n\n.app {\n\tdisplay: flex;\n\tflex-direction: row;\n\n\timg {\n\t\theight: 50px;\n\t\twidth: 50px;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\timg, .info {\n\t\tpadding: 12px;\n\t}\n\n\t.info {\n\t\th3, p {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\th3 {\n\t\t\tmargin-top: 0;\n\t\t}\n\n\t\th3 > span.icon {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecommendedApps.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecommendedApps.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecommendedApps.vue?vue&type=style&index=0&id=50fce157&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecommendedApps.vue?vue&type=style&index=0&id=50fce157&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RecommendedApps.vue?vue&type=template&id=50fce157&scoped=true&\"\nimport script from \"./RecommendedApps.vue?vue&type=script&lang=js&\"\nexport * from \"./RecommendedApps.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RecommendedApps.vue?vue&type=style&index=0&id=50fce157&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"50fce157\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"guest-box\"},[_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Recommended apps')))]),_vm._v(\" \"),(_vm.loadingApps)?_c('p',{staticClass:\"loading text-center\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Loading apps …'))+\"\\n\\t\")]):(_vm.loadingAppsError)?_c('p',{staticClass:\"loading-error text-center\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Could not fetch list of apps from the App Store.'))+\"\\n\\t\")]):(_vm.installingApps)?_c('p',{staticClass:\"text-center\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Installing apps …'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.recommendedApps),function(app){return _c('div',{key:app.id,staticClass:\"app\"},[(!_vm.isHidden(app.id))?[_c('img',{attrs:{\"src\":_vm.customIcon(app.id),\"alt\":\"\"}}),_vm._v(\" \"),_c('div',{staticClass:\"info\"},[_c('h3',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.customName(app))+\"\\n\\t\\t\\t\\t\\t\"),(app.loading)?_c('span',{staticClass:\"icon icon-loading-small-dark\"}):(app.active)?_c('span',{staticClass:\"icon icon-checkmark-white\"}):_vm._e()]),_vm._v(\" \"),_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.customDescription(app.id))}}),_vm._v(\" \"),(app.installationError)?_c('p',[_c('strong',[_vm._v(_vm._s(_vm.t('core', 'App download or installation failed')))])]):(!app.isCompatible)?_c('p',[_c('strong',[_vm._v(_vm._s(_vm.t('core', 'Cannot install this app because it is not compatible')))])]):(!app.canInstall)?_c('p',[_c('strong',[_vm._v(_vm._s(_vm.t('core', 'Cannot install this app')))])]):_vm._e()])]:_vm._e()],2)}),_vm._v(\" \"),_c('div',{staticClass:\"dialog-row\"},[(_vm.showInstallButton)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"role\":\"link\",\"href\":\"defaultPageUrl\"},on:{\"click\":function($event){return _vm.goTo(_vm.defaultPageUrl)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Skip'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showInstallButton)?_c('NcButton',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.installApps.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Install recommended apps'))+\"\\n\\t\\t\")]):_vm._e()],1)],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getRequestToken } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\nimport Vue from 'vue'\n\nimport logger from './logger.js'\nimport RecommendedApps from './components/setup/RecommendedApps.vue'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t},\n})\n\nconst View = Vue.extend(RecommendedApps)\nnew View().$mount('#recommended-apps')\n\nlogger.debug('recommended apps view rendered')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".dialog-row[data-v-50fce157]{display:flex;justify-content:end;margin-top:8px}p.loading[data-v-50fce157],p.loading-error[data-v-50fce157]{height:100px}p[data-v-50fce157]:last-child{margin-top:10px}.text-center[data-v-50fce157]{text-align:center}.app[data-v-50fce157]{display:flex;flex-direction:row}.app img[data-v-50fce157]{height:50px;width:50px;filter:var(--background-invert-if-dark)}.app img[data-v-50fce157],.app .info[data-v-50fce157]{padding:12px}.app .info h3[data-v-50fce157],.app .info p[data-v-50fce157]{text-align:left}.app .info h3[data-v-50fce157]{margin-top:0}.app .info h3>span.icon[data-v-50fce157]{display:inline-block}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/setup/RecommendedApps.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,YAAA,CACA,mBAAA,CACA,cAAA,CAIA,4DAEC,YAAA,CAGD,8BACC,eAAA,CAIF,8BACC,iBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAEA,0BACC,WAAA,CACA,UAAA,CACA,uCAAA,CAGD,sDACC,YAAA,CAIA,6DACC,eAAA,CAGD,+BACC,YAAA,CAGD,yCACC,oBAAA\",\"sourcesContent\":[\"\\n.dialog-row {\\n\\tdisplay: flex;\\n\\tjustify-content: end;\\n\\tmargin-top: 8px;\\n}\\n\\np {\\n\\t&.loading,\\n\\t&.loading-error {\\n\\t\\theight: 100px;\\n\\t}\\n\\n\\t&:last-child {\\n\\t\\tmargin-top: 10px;\\n\\t}\\n}\\n\\n.text-center {\\n\\ttext-align: center;\\n}\\n\\n.app {\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\n\\timg {\\n\\t\\theight: 50px;\\n\\t\\twidth: 50px;\\n\\t\\tfilter: var(--background-invert-if-dark);\\n\\t}\\n\\n\\timg, .info {\\n\\t\\tpadding: 12px;\\n\\t}\\n\\n\\t.info {\\n\\t\\th3, p {\\n\\t\\t\\ttext-align: left;\\n\\t\\t}\\n\\n\\t\\th3 {\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t}\\n\\n\\t\\th3 > span.icon {\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 1033;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t1033: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(13421)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","user","getCurrentUser","getLoggerBuilder","setApp","build","setUid","uid","recommended","calendar","description","t","icon","imagePath","contacts","mail","spreed","richdocuments","name","notes","richdocumentscode","hidden","recommendedIds","Object","keys","defaultPageUrl","loadState","components","NcButton","data","showInstallButton","installingApps","loadingApps","loadingAppsError","apps","computed","recommendedApps","filter","app","includes","id","axios","generateUrl","logger","concat","length","map","assign","loading","installationError","error","methods","installApps","limit","pLimit","installing","active","isCompatible","canInstall","appIds","groups","catch","then","Promise","all","window","location","customIcon","appId","customName","customDescription","isHidden","goTo","href","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","_v","_s","_e","_l","key","attrs","domProps","on","$event","stopPropagation","preventDefault","apply","arguments","__webpack_nonce__","btoa","getRequestToken","Vue","RecommendedApps","$mount","debug","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","children","b","document","baseURI","self","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"core-recommendedapps.js?v=0719ad302d2eef84daea","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/logger.js","webpack:///nextcloud/core/src/components/setup/RecommendedApps.vue","webpack:///nextcloud/core/src/components/setup/RecommendedApps.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/setup/RecommendedApps.vue?e2c6","webpack://nextcloud/./core/src/components/setup/RecommendedApps.vue?84e8","webpack://nextcloud/./core/src/components/setup/RecommendedApps.vue?5f06","webpack:///nextcloud/core/src/recommendedapps.js","webpack:///nextcloud/core/src/components/setup/RecommendedApps.vue?vue&type=style&index=0&id=880500b4&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nconst getLogger = user => {\n\tif (user === null) {\n\t\treturn getLoggerBuilder()\n\t\t\t.setApp('core')\n\t\t\t.build()\n\t}\n\treturn getLoggerBuilder()\n\t\t.setApp('core')\n\t\t.setUid(user.uid)\n\t\t.build()\n}\n\nexport default getLogger(getCurrentUser())\n","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div class=\"guest-box\">\n\t\t<h2>{{ t('core', 'Recommended apps') }}</h2>\n\t\t<p v-if=\"loadingApps\" class=\"loading text-center\">\n\t\t\t{{ t('core', 'Loading apps …') }}\n\t\t</p>\n\t\t<p v-else-if=\"loadingAppsError\" class=\"loading-error text-center\">\n\t\t\t{{ t('core', 'Could not fetch list of apps from the App Store.') }}\n\t\t</p>\n\t\t<p v-else-if=\"installingApps\" class=\"text-center\">\n\t\t\t{{ t('core', 'Installing apps …') }}\n\t\t</p>\n\n\t\t<div v-for=\"app in recommendedApps\" :key=\"app.id\" class=\"app\">\n\t\t\t<template v-if=\"!isHidden(app.id)\">\n\t\t\t\t<img :src=\"customIcon(app.id)\" alt=\"\">\n\t\t\t\t<div class=\"info\">\n\t\t\t\t\t<h3>\n\t\t\t\t\t\t{{ customName(app) }}\n\t\t\t\t\t\t<span v-if=\"app.loading\" class=\"icon icon-loading-small-dark\" />\n\t\t\t\t\t\t<span v-else-if=\"app.active\" class=\"icon icon-checkmark-white\" />\n\t\t\t\t\t</h3>\n\t\t\t\t\t<p v-html=\"customDescription(app.id)\" />\n\t\t\t\t\t<p v-if=\"app.installationError\">\n\t\t\t\t\t\t<strong>{{ t('core', 'App download or installation failed') }}</strong>\n\t\t\t\t\t</p>\n\t\t\t\t\t<p v-else-if=\"!app.isCompatible\">\n\t\t\t\t\t\t<strong>{{ t('core', 'Cannot install this app because it is not compatible') }}</strong>\n\t\t\t\t\t</p>\n\t\t\t\t\t<p v-else-if=\"!app.canInstall\">\n\t\t\t\t\t\t<strong>{{ t('core', 'Cannot install this app') }}</strong>\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\n\t\t<div class=\"dialog-row\">\n\t\t\t<NcButton v-if=\"showInstallButton\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\trole=\"link\"\n\t\t\t\t:href=\"defaultPageUrl\">\n\t\t\t\t{{ t('core', 'Skip') }}\n\t\t\t</NcButton>\n\n\t\t\t<NcButton v-if=\"showInstallButton\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t@click.stop.prevent=\"installApps\">\n\t\t\t\t{{ t('core', 'Install recommended apps') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl, imagePath } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport pLimit from 'p-limit'\nimport { translate as t } from '@nextcloud/l10n'\n\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\n\nimport logger from '../../logger.js'\n\nconst recommended = {\n\tcalendar: {\n\t\tdescription: t('core', 'Schedule work & meetings, synced with all your devices.'),\n\t\ticon: imagePath('core', 'places/calendar.svg'),\n\t},\n\tcontacts: {\n\t\tdescription: t('core', 'Keep your colleagues and friends in one place without leaking their private info.'),\n\t\ticon: imagePath('core', 'places/contacts.svg'),\n\t},\n\tmail: {\n\t\tdescription: t('core', 'Simple email app nicely integrated with Files, Contacts and Calendar.'),\n\t\ticon: imagePath('core', 'actions/mail.svg'),\n\t},\n\tspreed: {\n\t\tdescription: t('core', 'Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps.'),\n\t\ticon: imagePath('core', 'apps/spreed.svg'),\n\t},\n\trichdocuments: {\n\t\tname: 'Nextcloud Office',\n\t\tdescription: t('core', 'Collaborative documents, spreadsheets and presentations, built on Collabora Online.'),\n\t\ticon: imagePath('core', 'apps/richdocuments.svg'),\n\t},\n\tnotes: {\n\t\tdescription: t('core', 'Distraction free note taking app.'),\n\t\ticon: imagePath('core', 'apps/notes.svg'),\n\t},\n\trichdocumentscode: {\n\t\thidden: true,\n\t},\n}\nconst recommendedIds = Object.keys(recommended)\n\nexport default {\n\tname: 'RecommendedApps',\n\tcomponents: {\n\t\tNcButton,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowInstallButton: false,\n\t\t\tinstallingApps: false,\n\t\t\tloadingApps: true,\n\t\t\tloadingAppsError: false,\n\t\t\tapps: [],\n\t\t\tdefaultPageUrl: loadState('core', 'defaultPageUrl')\n\t\t}\n\t},\n\tcomputed: {\n\t\trecommendedApps() {\n\t\t\treturn this.apps.filter(app => recommendedIds.includes(app.id))\n\t\t},\n\t},\n\tasync mounted() {\n\t\ttry {\n\t\t\tconst { data } = await axios.get(generateUrl('settings/apps/list'))\n\t\t\tlogger.info(`${data.apps.length} apps fetched`)\n\n\t\t\tthis.apps = data.apps.map(app => Object.assign(app, { loading: false, installationError: false }))\n\t\t\tlogger.debug(`${this.recommendedApps.length} recommended apps found`, { apps: this.recommendedApps })\n\n\t\t\tthis.showInstallButton = true\n\t\t} catch (error) {\n\t\t\tlogger.error('could not fetch app list', { error })\n\n\t\t\tthis.loadingAppsError = true\n\t\t} finally {\n\t\t\tthis.loadingApps = false\n\t\t}\n\t},\n\tmethods: {\n\t\tinstallApps() {\n\t\t\tthis.showInstallButton = false\n\t\t\tthis.installingApps = true\n\n\t\t\tconst limit = pLimit(1)\n\t\t\tconst installing = this.recommendedApps\n\t\t\t\t.filter(app => !app.active && app.isCompatible && app.canInstall)\n\t\t\t\t.map(app => limit(() => {\n\t\t\t\t\tlogger.info(`installing ${app.id}`)\n\t\t\t\t\tapp.loading = true\n\t\t\t\t\treturn axios.post(generateUrl('settings/apps/enable'), { appIds: [app.id], groups: [] })\n\t\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\t\tlogger.error(`could not install ${app.id}`, { error })\n\t\t\t\t\t\t\tapp.installationError = true\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tlogger.info(`installed ${app.id}`)\n\t\t\t\t\t\t\tapp.loading = false\n\t\t\t\t\t\t})\n\t\t\t\t}))\n\t\t\tlogger.debug(`installing ${installing.length} recommended apps`)\n\t\t\tPromise.all(installing)\n\t\t\t\t.then(() => {\n\t\t\t\t\tlogger.info('all recommended apps installed, redirecting …')\n\n\t\t\t\t\twindow.location = this.defaultPageUrl\n\t\t\t\t})\n\t\t\t\t.catch(error => logger.error('could not install recommended apps', { error }))\n\t\t},\n\t\tcustomIcon(appId) {\n\t\t\tif (!(appId in recommended) || !recommended[appId].icon) {\n\t\t\t\tlogger.warn(`no app icon for recommended app ${appId}`)\n\t\t\t\treturn imagePath('core', 'places/default-app-icon.svg')\n\t\t\t}\n\t\t\treturn recommended[appId].icon\n\t\t},\n\t\tcustomName(app) {\n\t\t\tif (!(app.id in recommended)) {\n\t\t\t\treturn app.name\n\t\t\t}\n\t\t\treturn recommended[app.id].name || app.name\n\t\t},\n\t\tcustomDescription(appId) {\n\t\t\tif (!(appId in recommended)) {\n\t\t\t\tlogger.warn(`no app description for recommended app ${appId}`)\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn recommended[appId].description\n\t\t},\n\t\tisHidden(appId) {\n\t\t\tif (!(appId in recommended)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn !!recommended[appId].hidden\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.dialog-row {\n\tdisplay: flex;\n\tjustify-content: end;\n\tmargin-top: 8px;\n}\n\np {\n\t&.loading,\n\t&.loading-error {\n\t\theight: 100px;\n\t}\n\n\t&:last-child {\n\t\tmargin-top: 10px;\n\t}\n}\n\n.text-center {\n\ttext-align: center;\n}\n\n.app {\n\tdisplay: flex;\n\tflex-direction: row;\n\n\timg {\n\t\theight: 50px;\n\t\twidth: 50px;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\timg, .info {\n\t\tpadding: 12px;\n\t}\n\n\t.info {\n\t\th3, p {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\th3 {\n\t\t\tmargin-top: 0;\n\t\t}\n\n\t\th3 > span.icon {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecommendedApps.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecommendedApps.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecommendedApps.vue?vue&type=style&index=0&id=880500b4&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecommendedApps.vue?vue&type=style&index=0&id=880500b4&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RecommendedApps.vue?vue&type=template&id=880500b4&scoped=true&\"\nimport script from \"./RecommendedApps.vue?vue&type=script&lang=js&\"\nexport * from \"./RecommendedApps.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RecommendedApps.vue?vue&type=style&index=0&id=880500b4&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"880500b4\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"guest-box\"},[_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Recommended apps')))]),_vm._v(\" \"),(_vm.loadingApps)?_c('p',{staticClass:\"loading text-center\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Loading apps …'))+\"\\n\\t\")]):(_vm.loadingAppsError)?_c('p',{staticClass:\"loading-error text-center\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Could not fetch list of apps from the App Store.'))+\"\\n\\t\")]):(_vm.installingApps)?_c('p',{staticClass:\"text-center\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Installing apps …'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.recommendedApps),function(app){return _c('div',{key:app.id,staticClass:\"app\"},[(!_vm.isHidden(app.id))?[_c('img',{attrs:{\"src\":_vm.customIcon(app.id),\"alt\":\"\"}}),_vm._v(\" \"),_c('div',{staticClass:\"info\"},[_c('h3',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.customName(app))+\"\\n\\t\\t\\t\\t\\t\"),(app.loading)?_c('span',{staticClass:\"icon icon-loading-small-dark\"}):(app.active)?_c('span',{staticClass:\"icon icon-checkmark-white\"}):_vm._e()]),_vm._v(\" \"),_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.customDescription(app.id))}}),_vm._v(\" \"),(app.installationError)?_c('p',[_c('strong',[_vm._v(_vm._s(_vm.t('core', 'App download or installation failed')))])]):(!app.isCompatible)?_c('p',[_c('strong',[_vm._v(_vm._s(_vm.t('core', 'Cannot install this app because it is not compatible')))])]):(!app.canInstall)?_c('p',[_c('strong',[_vm._v(_vm._s(_vm.t('core', 'Cannot install this app')))])]):_vm._e()])]:_vm._e()],2)}),_vm._v(\" \"),_c('div',{staticClass:\"dialog-row\"},[(_vm.showInstallButton)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"role\":\"link\",\"href\":_vm.defaultPageUrl}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Skip'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showInstallButton)?_c('NcButton',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.installApps.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Install recommended apps'))+\"\\n\\t\\t\")]):_vm._e()],1)],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getRequestToken } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\nimport Vue from 'vue'\n\nimport logger from './logger.js'\nimport RecommendedApps from './components/setup/RecommendedApps.vue'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t},\n})\n\nconst View = Vue.extend(RecommendedApps)\nnew View().$mount('#recommended-apps')\n\nlogger.debug('recommended apps view rendered')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".dialog-row[data-v-880500b4]{display:flex;justify-content:end;margin-top:8px}p.loading[data-v-880500b4],p.loading-error[data-v-880500b4]{height:100px}p[data-v-880500b4]:last-child{margin-top:10px}.text-center[data-v-880500b4]{text-align:center}.app[data-v-880500b4]{display:flex;flex-direction:row}.app img[data-v-880500b4]{height:50px;width:50px;filter:var(--background-invert-if-dark)}.app img[data-v-880500b4],.app .info[data-v-880500b4]{padding:12px}.app .info h3[data-v-880500b4],.app .info p[data-v-880500b4]{text-align:left}.app .info h3[data-v-880500b4]{margin-top:0}.app .info h3>span.icon[data-v-880500b4]{display:inline-block}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/setup/RecommendedApps.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,YAAA,CACA,mBAAA,CACA,cAAA,CAIA,4DAEC,YAAA,CAGD,8BACC,eAAA,CAIF,8BACC,iBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAEA,0BACC,WAAA,CACA,UAAA,CACA,uCAAA,CAGD,sDACC,YAAA,CAIA,6DACC,eAAA,CAGD,+BACC,YAAA,CAGD,yCACC,oBAAA\",\"sourcesContent\":[\"\\n.dialog-row {\\n\\tdisplay: flex;\\n\\tjustify-content: end;\\n\\tmargin-top: 8px;\\n}\\n\\np {\\n\\t&.loading,\\n\\t&.loading-error {\\n\\t\\theight: 100px;\\n\\t}\\n\\n\\t&:last-child {\\n\\t\\tmargin-top: 10px;\\n\\t}\\n}\\n\\n.text-center {\\n\\ttext-align: center;\\n}\\n\\n.app {\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\n\\timg {\\n\\t\\theight: 50px;\\n\\t\\twidth: 50px;\\n\\t\\tfilter: var(--background-invert-if-dark);\\n\\t}\\n\\n\\timg, .info {\\n\\t\\tpadding: 12px;\\n\\t}\\n\\n\\t.info {\\n\\t\\th3, p {\\n\\t\\t\\ttext-align: left;\\n\\t\\t}\\n\\n\\t\\th3 {\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t}\\n\\n\\t\\th3 > span.icon {\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 1033;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t1033: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(69897)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","user","getCurrentUser","getLoggerBuilder","setApp","build","setUid","uid","recommended","calendar","description","t","icon","imagePath","contacts","mail","spreed","richdocuments","name","notes","richdocumentscode","hidden","recommendedIds","Object","keys","components","NcButton","data","showInstallButton","installingApps","loadingApps","loadingAppsError","apps","defaultPageUrl","loadState","computed","recommendedApps","filter","app","includes","id","axios","generateUrl","logger","concat","length","map","assign","loading","installationError","error","methods","installApps","limit","pLimit","installing","active","isCompatible","canInstall","appIds","groups","catch","then","Promise","all","window","location","customIcon","appId","customName","customDescription","isHidden","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","_v","_s","_e","_l","key","attrs","domProps","on","$event","stopPropagation","preventDefault","apply","arguments","__webpack_nonce__","btoa","getRequestToken","Vue","RecommendedApps","$mount","debug","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","children","b","document","baseURI","self","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/files-main.js b/dist/files-main.js
index 6ea0af8ffbd..ec7658f9c2f 100644
--- a/dist/files-main.js
+++ b/dist/files-main.js
@@ -1,3 +1,3 @@
/*! For license information please see files-main.js.LICENSE.txt */
-(()=>{"use strict";var e,n={9570:(e,n,i)=>{var o=i(17499),s=i(79954),r=i(31352),a=i(79753),l=i(45994);const c=function(){var t,e,n,i;const o=(null===(t=OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.App)||void 0===n||null===(i=n.currentFileList)||void 0===i?void 0:i.dirInfo)||{path:"/",name:""};return"".concat(o.path,"/").concat(o.name).replace(/\/\//gi,"/")};var d=i(4820),u=i(20144),p=i(62520),h=i(64024),f=i(93455),A=i.n(f),v=i(70110),m=i.n(v);const g=256,w={name:"TemplatePreview",inheritAttrs:!1,props:{basename:{type:String,required:!0},checked:{type:Boolean,default:!1},fileid:{type:[String,Number],required:!0},filename:{type:String,required:!0},previewUrl:{type:String,default:null},hasPreview:{type:Boolean,default:!0},mime:{type:String,required:!0},ratio:{type:Number,default:null}},data:()=>({failedPreview:!1}),computed:{nameWithoutExt(){return this.basename.indexOf(".")>-1?this.basename.split(".").slice(0,-1).join("."):this.basename},id(){return"template-picker-".concat(this.fileid)},realPreviewUrl(){return this.failedPreview&&this.mimeIcon?this.mimeIcon:this.previewUrl?this.previewUrl:(0,l.ts)()?(0,a.generateUrl)("/core/preview?fileId=".concat(this.fileid,"&x=").concat(g,"&y=").concat(g,"&a=1")):(0,a.generateUrl)("/apps/files_sharing/publicpreview/".concat(document.getElementById("sharingToken")&&document.getElementById("sharingToken").value,"?fileId=").concat(this.fileid,"&file=").concat(function(t){const e=(t.startsWith("/")?t:"/".concat(t)).split("/");let n="";return e.forEach((t=>{""!==t&&(n+="/"+encodeURIComponent(t))})),n}(this.filename),"&x=").concat(g,"&y=").concat(g,"&a=1"))},mimeIcon(){return OC.MimeType.getIconUrl(this.mime)}},methods:{onCheck(){this.$emit("check",this.fileid)},onFailure(){this.failedPreview=!0}}};var b=i(93379),C=i.n(b),y=i(7795),_=i.n(y),x=i(90569),S=i.n(x),k=i(3565),I=i.n(k),N=i(19216),E=i.n(N),F=i(44589),B=i.n(F),P=i(3491),D={};D.styleTagTransform=B(),D.setAttributes=I(),D.insert=S().bind(null,"head"),D.domAPI=_(),D.insertStyleElement=E(),C()(P.Z,D),P.Z&&P.Z.locals&&P.Z.locals;var T=i(51900);const z=(0,T.Z)(w,(function(){var t=this,e=t._self._c;return e("li",{staticClass:"template-picker__item"},[e("input",{staticClass:"radio",attrs:{id:t.id,type:"radio",name:"template-picker"},domProps:{checked:t.checked},on:{change:t.onCheck}}),t._v(" "),e("label",{staticClass:"template-picker__label",attrs:{for:t.id}},[e("div",{staticClass:"template-picker__preview",class:t.failedPreview?"template-picker__preview--failed":""},[e("img",{staticClass:"template-picker__image",attrs:{src:t.realPreviewUrl,alt:"",draggable:"false"},on:{error:t.onFailure}})]),t._v(" "),e("span",{staticClass:"template-picker__title"},[t._v("\n\t\t\t"+t._s(t.nameWithoutExt)+"\n\t\t")])])])}),[],!1,null,"6c072a31",null).exports;var L=i(25108);const U={name:"TemplatePicker",components:{NcEmptyContent:A(),NcModal:m(),TemplatePreview:z},props:{logger:{type:Object,required:!0}},data:()=>({checked:-1,loading:!1,name:null,opened:!1,provider:null}),computed:{nameWithoutExt(){return this.name.indexOf(".")>-1?this.name.split(".").slice(0,-1).join("."):this.name},emptyTemplate(){var e,n;return{basename:t("files","Blank"),fileid:-1,filename:this.t("files","Blank"),hasPreview:!1,mime:(null===(e=this.provider)||void 0===e?void 0:e.mimetypes[0])||(null===(n=this.provider)||void 0===n?void 0:n.mimetypes)}},selectedTemplate(){return this.provider.templates.find((t=>t.fileid===this.checked))},style(){return{"--margin":"8px","--width":"160px","--border":"2px","--fullwidth":"180px","--height":this.provider.ratio?Math.round(160/this.provider.ratio)+"px":null}}},methods:{async open(t,e){this.checked=this.emptyTemplate.fileid,this.name=t,this.provider=e;const n=(await async function(){return(await d.default.get((0,a.generateOcsUrl)("apps/files/api/v1/templates"))).data.ocs.data}()).find((t=>t.app===e.app&&t.label===e.label));if(null===n)throw new Error("Failed to match provider in results");this.provider=n,0!==n.templates.length?this.opened=!0:this.onSubmit()},close(){this.checked=this.emptyTemplate.fileid,this.loading=!1,this.name=null,this.opened=!1,this.provider=null},onCheck(t){this.checked=t},async onSubmit(){var t,e,n;this.loading=!0;const i=c(),o=null===(t=OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.App)||void 0===n?void 0:n.currentFileList;var s,r;this.nameWithoutExt===this.name&&(this.logger.debug("Fixed invalid filename",{name:this.name,extension:null===(s=this.provider)||void 0===s?void 0:s.extension}),this.name=this.name+(null===(r=this.provider)||void 0===r?void 0:r.extension));try{var l,u;const t=await async function(t,e,n){return(await d.default.post((0,a.generateOcsUrl)("apps/files/api/v1/templates/create"),{filePath:t,templatePath:e,templateType:n})).data.ocs.data}((0,p.normalize)("".concat(i,"/").concat(this.name)),null===(l=this.selectedTemplate)||void 0===l?void 0:l.filename,null===(u=this.selectedTemplate)||void 0===u?void 0:u.templateType);this.logger.debug("Created new file",t);const e=await(null==o?void 0:o.addAndFetchFileInfo(this.name).then(((t,e)=>e))),n=new OCA.Files.FileInfoModel(e,{filesClient:null==o?void 0:o.filesClient}),s=OCA.Files.fileActions.getDefaultFileAction(t.mime,"file",OC.PERMISSION_ALL);s&&s.action(t.basename,{$file:null==o?void 0:o.findFileEl(this.name),dir:i,fileList:o,fileActions:null==o?void 0:o.fileActions,fileInfoModel:n}),this.close()}catch(t){this.logger.error("Error while creating the new file from template"),L.error(t),(0,h.x2)(this.t("files","Unable to create new file from template"))}finally{this.loading=!1}}}};var V=i(5103),O={};O.styleTagTransform=B(),O.setAttributes=I(),O.insert=S().bind(null,"head"),O.domAPI=_(),O.insertStyleElement=E(),C()(V.Z,O),V.Z&&V.Z.locals&&V.Z.locals;const Z=(0,T.Z)(U,(function(){var t=this,e=t._self._c;return t.opened?e("NcModal",{staticClass:"templates-picker",attrs:{"clear-view-delay":-1,size:"normal"},on:{close:t.close}},[e("form",{staticClass:"templates-picker__form",style:t.style,on:{submit:function(e){return e.preventDefault(),e.stopPropagation(),t.onSubmit.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("files","Pick a template for {name}",{name:t.nameWithoutExt})))]),t._v(" "),e("ul",{staticClass:"templates-picker__list"},[e("TemplatePreview",t._b({attrs:{checked:t.checked===t.emptyTemplate.fileid},on:{check:t.onCheck}},"TemplatePreview",t.emptyTemplate,!1)),t._v(" "),t._l(t.provider.templates,(function(n){return e("TemplatePreview",t._b({key:n.fileid,attrs:{checked:t.checked===n.fileid,ratio:t.provider.ratio},on:{check:t.onCheck}},"TemplatePreview",n,!1))}))],2),t._v(" "),e("div",{staticClass:"templates-picker__buttons"},[e("button",{on:{click:t.close}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Cancel"))+"\n\t\t\t")]),t._v(" "),e("input",{staticClass:"primary",attrs:{type:"submit","aria-label":t.t("files","Create a new file with the selected template")},domProps:{value:t.t("files","Create")}})])]),t._v(" "),t.loading?e("NcEmptyContent",{staticClass:"templates-picker__loading",attrs:{icon:"icon-loading"}},[t._v("\n\t\t"+t._s(t.t("files","Creating file"))+"\n\t")]):t._e()],1):t._e()}),[],!1,null,"715b4161",null).exports,q=(0,o.IY)().setApp("files").detectUser().build();u.default.mixin({methods:{t:r.Iu,n:r.uN}});const R=document.createElement("div");R.id="template-picker",document.body.appendChild(R);let j=(0,s.j)("files","templates",[]),M=(0,s.j)("files","templates_path",!1);q.debug("Templates providers",j),q.debug("Templates folder",{templatesPath:M});const $=new(u.default.extend(Z))({name:"TemplatePicker",propsData:{logger:q}});$.$mount("#template-picker"),window.addEventListener("DOMContentLoaded",(function(){if(!M){q.debug("Templates folder not initialized");const t={attach(t){t.addMenuEntry({id:"template-init",displayName:(0,r.Iu)("files","Set up templates folder"),templateName:(0,r.Iu)("files","Templates"),iconClass:"icon-template-add",fileType:"file",actionHandler(e){W(e),t.removeMenuEntry("template-init")}})}};OC.Plugins.register("OCA.Files.NewFileMenu",t)}})),j.forEach(((t,e)=>{const n={attach(n){const i=n.fileList;"files"!==i.id&&"files.public"!==i.id||n.addMenuEntry({id:"template-new-".concat(t.app,"-").concat(e),displayName:t.label,templateName:t.label+t.extension,iconClass:t.iconClass||"icon-file",fileType:"file",actionHandler(e){$.open(e,t)}})}};OC.Plugins.register("OCA.Files.NewFileMenu",n)}));const W=async function(t){const e=(c()+"/".concat(t)).replace("//","/");try{q.debug("Initializing the templates directory",{templatePath:e});const t=await d.default.post((0,a.generateOcsUrl)("apps/files/api/v1/templates/path"),{templatePath:e,copySystemTemplates:!0});OCA.Files.App.currentFileList.changeDirectory(e,!0,!0),j=t.data.ocs.data.templates,M=t.data.ocs.data.template_path}catch(t){q.error("Unable to initialize the templates directory"),(0,h.x2)((0,r.Iu)("files","Unable to initialize the templates directory"))}};var G=i(78595);!function(){const t={attach(t){(0,G.Ld)("nextcloud:unified-search.search",(e=>{let{query:n}=e;t.setFilter(n)})),(0,G.Ld)("nextcloud:unified-search.reset",(()=>{this.query=null,t.setFilter("")}))}};window.OC.Plugins.register("OCA.Files.FileList",t)}();var H=i(91770),K=i(78510);const Q=(0,o.IY)().setApp("files").detectUser().build();class Y{constructor(t){var e,n,i;e=this,i=void 0,(n=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(n="_action"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this.validateAction(t),this._action=t}get id(){return this._action.id}get displayName(){return this._action.displayName}get iconSvgInline(){return this._action.iconSvgInline}get enabled(){return this._action.enabled}get exec(){return this._action.exec}get execBatch(){return this._action.execBatch}get order(){return this._action.order}get default(){return this._action.default}get inline(){return this._action.inline}get renderInline(){return this._action.renderInline}validateAction(t){if(!t.id||"string"!=typeof t.id)throw new Error("Invalid id");if(!t.displayName||"function"!=typeof t.displayName)throw new Error("Invalid displayName function");if(!t.iconSvgInline||"function"!=typeof t.iconSvgInline)throw new Error("Invalid iconSvgInline function");if(!t.exec||"function"!=typeof t.exec)throw new Error("Invalid exec function");if("enabled"in t&&"function"!=typeof t.enabled)throw new Error("Invalid enabled function");if("execBatch"in t&&"function"!=typeof t.execBatch)throw new Error("Invalid execBatch function");if("order"in t&&"number"!=typeof t.order)throw new Error("Invalid order");if("default"in t&&"boolean"!=typeof t.default)throw new Error("Invalid default");if("inline"in t&&"function"!=typeof t.inline)throw new Error("Invalid inline function");if("renderInline"in t&&"function"!=typeof t.renderInline)throw new Error("Invalid renderInline function")}}const J=function(t){void 0===window._nc_fileactions&&(window._nc_fileactions=[],Q.debug("FileActions initialized")),window._nc_fileactions.find((e=>e.id===t.id))?Q.error("FileAction ".concat(t.id," already registered"),{action:t}):window._nc_fileactions.push(t)},X=function(){return window._nc_fileactions||[]};J(new Y({id:"delete",displayName:(t,e)=>"trashbin"===e.id?(0,r.Iu)("files_trashbin","Delete permanently"):(0,r.Iu)("files","Delete"),iconSvgInline:()=>K,enabled:t=>t.length>0&&t.map((t=>t.permissions)).every((t=>0!=(t&H.y3.DELETE))),async exec(t){try{return await d.default.delete(t.source),(0,G.j8)("files:node:deleted",t),!0}catch(e){return Q.error("Error while deleting a file",{error:e,source:t.source,node:t}),!1}},async execBatch(t,e,n){return Promise.all(t.map((t=>this.exec(t,e,n))))},order:100}));var tt=i(48250);const et="details";J(new Y({id:et,displayName:()=>(0,r.Iu)("files","Details"),iconSvgInline:()=>tt,enabled:t=>{var e,n,i;return!(null===(e=window)||void 0===e||null===(n=e.OCA)||void 0===n||null===(i=n.Files)||void 0===i||!i.Sidebar)&&t.some((t=>{var e;return null===(e=t.root)||void 0===e?void 0:e.startsWith("/files/")}))},async exec(t){try{var e,n,i,o,s;return null===(e=window)||void 0===e||null===(n=e.OCA)||void 0===n||null===(i=n.Files)||void 0===i||null===(o=i.Sidebar)||void 0===o||null===(s=o.open)||void 0===s||s.call(o,t.path),null}catch(t){return Q.error("Error while opening sidebar",{error:t}),!1}},default:!0,order:-50}));var nt=i(59305),it=i(23664),ot=i(69680),st=i.n(ot),rt=i(10861),at=i.n(rt),lt=i(64192),ct=i.n(lt),dt=i(33581);const ut=function(){const t=(0,nt.Q_)("files",{state:()=>({files:{},roots:{}}),getters:{getNode:t=>e=>t.files[e],getNodes:t=>e=>e.map((e=>t.files[e])).filter(Boolean),getRoot:t=>e=>t.roots[e]},actions:{updateNodes(t){const e=t.reduce(((t,e)=>e.fileid?(t[e.fileid]=e,t):(Q.warn("Trying to update/set a node without fileid",e),t)),{});u.default.set(this,"files",{...this.files,...e})},deleteNodes(t){t.forEach((t=>{t.fileid&&u.default.delete(this.files,t.fileid)}))},setRoot(t){let{service:e,root:n}=t;u.default.set(this.roots,e,n)},onDeletedNode(t){this.deleteNodes([t])}}})(...arguments);return t._initialized||((0,G.Ld)("files:node:deleted",t.onDeletedNode),t._initialized=!0),t},pt=function(){const t=(0,nt.Q_)("paths",{state:()=>({paths:{}}),getters:{getPath:t=>(e,n)=>{if(t.paths[e])return t.paths[e][n]}},actions:{addPath(t){this.paths[t.service]||u.default.set(this.paths,t.service,{}),u.default.set(this.paths[t.service],t.path,t.fileid)}}})(...arguments);return t._initialized||(t._initialized=!0),t},ht=(0,nt.Q_)("selection",{state:()=>({selected:[],lastSelection:[],lastSelectedIndex:null}),actions:{set(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];u.default.set(this,"selected",t)},setLastIndex(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;u.default.set(this,"lastSelection",t?this.selected:[]),u.default.set(this,"lastSelectedIndex",t)},reset(){u.default.set(this,"selected",[]),u.default.set(this,"lastSelection",[]),u.default.set(this,"lastSelectedIndex",null)}}}),ft=(0,s.j)("files","viewConfigs",{}),At=function(){const t=(0,nt.Q_)("viewconfig",{state:()=>({viewConfig:ft}),getters:{getConfig:t=>e=>t.viewConfig[e]||{}},actions:{onUpdate(t,e,n){this.viewConfig[t]||u.default.set(this.viewConfig,t,{}),u.default.set(this.viewConfig[t],e,n)},async update(t,e,n){d.default.put((0,a.generateUrl)("/apps/files/api/v1/views/".concat(t,"/").concat(e)),{value:n}),(0,G.j8)("files:viewconfig:updated",{view:t,key:e,value:n})},setSortingBy(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"basename",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"files";this.update(e,"sorting_mode",t),this.update(e,"sorting_direction","asc")},toggleSortingDirection(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"files";const e="asc"===(this.getConfig(t)||{sorting_direction:"asc"}).sorting_direction?"desc":"asc";this.update(t,"sorting_direction",e)}}}),e=t(...arguments);return e._initialized||((0,G.Ld)("files:viewconfig:updated",(function(t){let{view:n,key:i,value:o}=t;e.onUpdate(n,i,o)})),e._initialized=!0),e};var vt=i(15764),mt=i(64412),gt=i.n(mt),wt=i(44706),bt=i.n(wt);const Ct=u.default.extend({name:"BreadCrumbs",components:{Home:vt.Z,NcBreadcrumbs:bt(),NcBreadcrumb:gt()},props:{path:{type:String,default:"/"}},setup:()=>({filesStore:ut(),pathsStore:pt()}),computed:{currentView(){return this.$navigation.active},dirs(){var t;return["/",...this.path.split("/").filter(Boolean).map((t="/",e=>t+="".concat(e,"/"))).map((t=>t.replace(/^(.+)\/$/,"$1")))]},sections(){return this.dirs.map((t=>{const e={...this.$route,query:{dir:t}};return{dir:t,exact:!0,name:this.getDirDisplayName(t),to:e}}))}},methods:{getNodeFromId(t){return this.filesStore.getNode(t)},getFileIdFromPath(t){var e;return this.pathsStore.getPath(null===(e=this.currentView)||void 0===e?void 0:e.id,t)},getDirDisplayName(e){var n;if("/"===e)return t("files","Home");const i=this.getFileIdFromPath(e),o=this.getNodeFromId(i);return(null==o||null===(n=o.attributes)||void 0===n?void 0:n.displayName)||(0,p.basename)(e)},onClick(t){var e;(null==t||null===(e=t.query)||void 0===e?void 0:e.dir)===this.$route.query.dir&&this.$emit("reload")},ariaLabel(e){var n,i;return(null==e||null===(n=e.to)||void 0===n||null===(i=n.query)||void 0===i?void 0:i.dir)===this.$route.query.dir?t("files","Reload current directory"):t("files",'Go to the "{dir}" directory',e)}}});var yt=i(39959),_t={};_t.styleTagTransform=B(),_t.setAttributes=I(),_t.insert=S().bind(null,"head"),_t.domAPI=_(),_t.insertStyleElement=E(),C()(yt.Z,_t),yt.Z&&yt.Z.locals&&yt.Z.locals;const xt=(0,T.Z)(Ct,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("NcBreadcrumbs",{attrs:{"data-cy-files-content-breadcrumbs":""}},t._l(t.sections,(function(n,i){return e("NcBreadcrumb",t._b({key:n.dir,attrs:{"aria-label":t.ariaLabel(n),title:t.ariaLabel(n)},nativeOn:{click:function(e){return t.onClick(n.to)}},scopedSlots:t._u([0===i?{key:"icon",fn:function(){return[e("Home",{attrs:{size:20}})]},proxy:!0}:null],null,!0)},"NcBreadcrumb",n,!1))})),1)}),[],!1,null,"68b3b20b",null).exports;var St=i(35212),kt=i(20296),It=i(74139),Nt=i(3443),Et=i.n(Nt),Ft=i(79855),Bt=i(34829),Pt=i(45400),Dt=i.n(Pt),Tt=i(12945),zt=i.n(Tt),Lt=i(20571),Ut=i.n(Lt),Vt=i(4777);const Ot=(0,nt.Q_)("actionsmenu",{state:()=>({opened:null})}),Zt=(0,s.j)("files","config",{show_hidden:!1,crop_image_previews:!0}),qt=function(){const t=(0,nt.Q_)("userconfig",{state:()=>({userConfig:Zt}),actions:{onUpdate(t,e){u.default.set(this.userConfig,t,e)},async update(t,e){await d.default.put((0,a.generateUrl)("/apps/files/api/v1/config/"+t),{value:e}),(0,G.j8)("files:config:updated",{key:t,value:e})}}})(...arguments);return t._initialized||((0,G.Ld)("files:config:updated",(function(e){let{key:n,value:i}=e;t.onUpdate(n,i)})),t._initialized=!0),t},Rt={name:"CustomElementRender",props:{source:{type:Object,required:!0},currentView:{type:Object,required:!0},render:{type:Function,required:!0}},computed:{element(){return this.render(this.source,this.currentView)}},watch:{element(){this.$el.replaceWith(this.element),this.$el=this.element}},mounted(){this.$el.replaceWith(this.element),this.$el=this.element}},jt=(0,T.Z)(Rt,(function(){return(0,this._self._c)("span")}),[],!1,null,null,null).exports;var Mt=i(27856);const $t={name:"CustomSvgIconRender",props:{svg:{type:String,required:!0}},watch:{svg(){this.$el.innerHTML=(0,Mt.sanitize)(this.svg)}},mounted(){this.$el.innerHTML=(0,Mt.sanitize)(this.svg)}};var Wt=i(61959),Gt={};Gt.styleTagTransform=B(),Gt.setAttributes=I(),Gt.insert=S().bind(null,"head"),Gt.domAPI=_(),Gt.insertStyleElement=E(),C()(Wt.Z,Gt),Wt.Z&&Wt.Z.locals&&Wt.Z.locals;const Ht=(0,T.Z)($t,(function(){return(0,this._self._c)("span",{staticClass:"custom-svg-icon"})}),[],!1,null,"93e9b2f4",null).exports,Kt=X(),Qt=u.default.extend({name:"FileEntry",components:{CustomElementRender:jt,CustomSvgIconRender:Ht,FileIcon:Ft.Z,FolderIcon:Bt.default,Fragment:It.H,NcActionButton:Dt(),NcActions:zt(),NcCheckboxRadioSwitch:Ut(),NcLoadingIcon:ct(),StarIcon:Vt.default},props:{active:{type:Boolean,default:!1},isSizeAvailable:{type:Boolean,default:!1},source:{type:Object,required:!0},index:{type:Number,required:!0},nodes:{type:Array,required:!0},filesListWidth:{type:Number,default:0}},setup(){const t=Ot(),e=ut(),n=function(){const t=(0,nt.Q_)("keyboard",{state:()=>({altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1}),actions:{onEvent(t){t||(t=window.event),u.default.set(this,"altKey",!!t.altKey),u.default.set(this,"ctrlKey",!!t.ctrlKey),u.default.set(this,"metaKey",!!t.metaKey),u.default.set(this,"shiftKey",!!t.shiftKey)}}})(...arguments);return t._initialized||(window.addEventListener("keydown",t.onEvent),window.addEventListener("keyup",t.onEvent),window.addEventListener("mousemove",t.onEvent),t._initialized=!0),t}();return{actionsMenuStore:t,filesStore:e,keyboardStore:n,selectionStore:ht(),userConfigStore:qt()}},data:()=>({backgroundFailed:!1,backgroundImage:"",boundariesElement:document.querySelector(".app-content > .files-list"),loading:""}),computed:{userConfig(){return this.userConfigStore.userConfig},currentView(){return this.$navigation.active},columns(){var t;return this.filesListWidth<512?[]:(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},fileid(){var t,e,n;return null===(t=this.source)||void 0===t||null===(e=t.fileid)||void 0===e||null===(n=e.toString)||void 0===n?void 0:n.call(e)},displayName(){return this.source.attributes.displayName||this.source.basename},size(){const t=parseInt(this.source.size,10)||0;return"number"!=typeof t||t<0?this.t("files","Pending"):(0,H.sS)(t,!0)},sizeOpacity(){const t=parseInt(this.source.size,10)||0;return!t||t<0?1:.7+(1-.7)*Math.pow(this.source.size/10485760,2)},linkTo(){if("folder"===this.source.type){const t={...this.$route,query:{dir:(0,p.join)(this.dir,this.source.basename)}};return{is:"router-link",title:this.t("files","Open folder {name}",{name:this.displayName}),to:t}}return this.enabledDefaultActions.length>0?{title:this.enabledDefaultActions[0].displayName([this.source],this.currentView),role:"button"}:{href:this.source.source,title:this.t("files","Download file {name}",{name:this.displayName})}},selectedFiles(){return this.selectionStore.selected},isSelected(){var t,e,n;return this.selectedFiles.includes(null===(t=this.source)||void 0===t||null===(e=t.fileid)||void 0===e||null===(n=e.toString)||void 0===n?void 0:n.call(e))},cropPreviews(){return this.userConfig.crop_image_previews},previewUrl(){try{const t=new URL(window.location.origin+this.source.attributes.previewUrl);return t.searchParams.set("x","32"),t.searchParams.set("y","32"),t.searchParams.set("a",!0===this.cropPreviews?"0":"1"),t.href}catch(t){return null}},mimeIconUrl(){var t,e,n;const i=this.source.mime||"application/octet-stream",o=null===(t=window.OC)||void 0===t||null===(e=t.MimeType)||void 0===e||null===(n=e.getIconUrl)||void 0===n?void 0:n.call(e,i);return o?"url(".concat(o,")"):""},enabledActions(){return Kt.filter((t=>!t.enabled||t.enabled([this.source],this.currentView))).sort(((t,e)=>(t.order||0)-(e.order||0)))},enabledInlineActions(){return this.filesListWidth<768?[]:this.enabledActions.filter((t=>{var e;return null==t||null===(e=t.inline)||void 0===e?void 0:e.call(t,this.source,this.currentView)}))},enabledMenuActions(){if(this.filesListWidth<768)return this.enabledDefaultActions.length>0?this.enabledActions.slice(1):this.enabledActions;const t=[...this.enabledInlineActions,...this.enabledActions.filter((t=>!t.inline))];return this.enabledDefaultActions.length>0?t.slice(1):t},enabledDefaultActions(){return[...this.enabledActions.filter((t=>t.default))]},openedMenu:{get(){return this.actionsMenuStore.opened===this.uniqueId},set(t){this.actionsMenuStore.opened=t?this.uniqueId:null}},uniqueId(){return this.source.source.split("").reduce((function(t,e){return(t=(t<<5)-t+e.charCodeAt(0))&t}),0)},isFavorite(){return 1===this.source.attributes.favorite}},watch:{active(t,e){if(!1===t&&!0===e)return this.resetState(),void(this.$el.parentNode.style.display="none");this.$el.parentNode.style.display=""},previewUrl(){this.clearImg(),this.debounceIfNotCached()}},mounted(){var t,e;this.debounceGetPreview=(0,kt.debounce)((function(){this.fetchAndApplyPreview()}),150,!1),this.debounceIfNotCached(),null===(t=this.$el.parentNode)||void 0===t||null===(e=t.addEventListener)||void 0===e||e.call(t,"contextmenu",this.onRightClick)},beforeDestroy(){this.resetState()},methods:{async debounceIfNotCached(){var t;if(this.previewUrl)return await(t=this.previewUrl,caches.open("previews").then((function(e){return e.match(t).then((function(t){return!!t}))})))?(this.backgroundImage="url(".concat(this.previewUrl,")"),void(this.backgroundFailed=!1)):void this.debounceGetPreview()},fetchAndApplyPreview(){this.previewUrl&&(this.previewPromise&&this.clearImg(),this.previewPromise=new(Et())(((t,e,n)=>{const i=new Image;i.fetchpriority=this.active?"high":"auto",i.onload=()=>{this.backgroundImage="url(".concat(this.previewUrl,")"),this.backgroundFailed=!1,t(i)},i.onerror=()=>{this.backgroundFailed=!0,e(i)},i.src=this.previewUrl,n((()=>{i.onerror=null,i.onload=null,i.src=""}))})))},resetState(){this.loading="",this.clearImg(),this.openedMenu=!1},clearImg(){this.backgroundImage="",this.backgroundFailed=!1,this.previewPromise&&(this.previewPromise.cancel(),this.previewPromise=null)},async onActionClick(t){const e=t.displayName([this.source],this.currentView);try{this.loading=t.id,u.default.set(this.source,"_loading",!0);const n=await t.exec(this.source,this.currentView,this.dir);if(null===n)return;if(n)return void(0,h.s$)(this.t("files",'"{displayName}" action executed successfully',{displayName:e}));(0,h.x2)(this.t("files",'"{displayName}" action failed',{displayName:e}))}catch(n){Q.error("Error while executing action",{action:t,e:n}),(0,h.x2)(this.t("files",'"{displayName}" action failed',{displayName:e}))}finally{this.loading="",u.default.set(this.source,"_loading",!1)}},execDefaultAction(t){"folder"!==this.source.type&&this.enabledDefaultActions.length>0&&(t.preventDefault(),t.stopPropagation(),this.enabledDefaultActions[0].exec(this.source,this.currentView,this.dir))},openDetailsIfAvailable(t){const e=this.enabledDefaultActions.find((t=>t.id===et));e&&(t.preventDefault(),t.stopPropagation(),e.exec(this.source,this.currentView))},onSelectionChange(t){var e;const n=this.index,i=this.selectionStore.lastSelectedIndex;if(null!==(e=this.keyboardStore)&&void 0!==e&&e.shiftKey&&null!==i){const t=this.selectedFiles.includes(this.fileid),e=Math.min(n,i),o=Math.max(i,n),s=this.selectionStore.lastSelection,r=this.nodes.map((t=>{var e,n;return null===(e=t.fileid)||void 0===e||null===(n=e.toString)||void 0===n?void 0:n.call(e)})).slice(e,o+1),a=[...s,...r].filter((e=>!t||e!==this.fileid));return Q.debug("Shift key pressed, selecting all files in between",{start:e,end:o,filesToSelect:r,isAlreadySelected:t}),void this.selectionStore.set(a)}Q.debug("Updating selection",{selection:t}),this.selectionStore.set(t),this.selectionStore.setLastIndex(n)},onRightClick(t){if(this.openedMenu)return;const e=this.selectedFiles.length>1;this.actionsMenuStore.opened=this.isSelected&&e?"global":this.uniqueId,t.preventDefault(),t.stopPropagation()},t:r.Iu,formatFileSize:H.sS}});var Yt=i(13352),Jt={};Jt.styleTagTransform=B(),Jt.setAttributes=I(),Jt.insert=S().bind(null,"head"),Jt.domAPI=_(),Jt.insertStyleElement=E(),C()(Yt.Z,Jt),Yt.Z&&Yt.Z.locals&&Yt.Z.locals;var Xt=i(37020),te={};te.styleTagTransform=B(),te.setAttributes=I(),te.insert=S().bind(null,"head"),te.domAPI=_(),te.insertStyleElement=E(),C()(Xt.Z,te),Xt.Z&&Xt.Z.locals&&Xt.Z.locals;const ee=(0,T.Z)(Qt,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("Fragment",[e("td",{staticClass:"files-list__row-checkbox"},[t.active?e("NcCheckboxRadioSwitch",{attrs:{"aria-label":t.t("files","Select the row for {displayName}",{displayName:t.displayName}),checked:t.selectedFiles,value:t.fileid,name:"selectedFiles"},on:{"update:checked":t.onSelectionChange}}):t._e()],1),t._v(" "),e("td",{staticClass:"files-list__row-name"},[e("a",t._b({ref:"name",on:{click:t.execDefaultAction}},"a",t.linkTo,!1),[e("span",{staticClass:"files-list__row-icon"},["folder"===t.source.type?e("FolderIcon"):t.previewUrl&&!t.backgroundFailed?e("span",{ref:"previewImg",staticClass:"files-list__row-icon-preview",style:{backgroundImage:t.backgroundImage}}):t.mimeIconUrl?e("span",{staticClass:"files-list__row-icon-preview files-list__row-icon-preview--mime",style:{backgroundImage:t.mimeIconUrl}}):e("FileIcon"),t._v(" "),t.isFavorite?e("span",{staticClass:"files-list__row-icon-favorite",attrs:{"aria-label":t.t("files","Favorite")}},[e("StarIcon",{attrs:{"aria-hidden":"true",size:20}})],1):t._e()],1),t._v(" "),e("span",{staticClass:"files-list__row-name-text"},[t._v(t._s(t.displayName))])])]),t._v(" "),e("td",{staticClass:"files-list__row-actions",class:"files-list__row-actions-".concat(t.uniqueId)},[t.active?e("NcActions",{ref:"actionsMenu",attrs:{"boundaries-element":t.boundariesElement,container:t.boundariesElement,disabled:t.source._loading,"force-title":!0,"force-menu":!0,inline:t.enabledInlineActions.length,open:t.openedMenu},on:{"update:open":function(e){t.openedMenu=e}}},t._l(t.enabledMenuActions,(function(n){return e("NcActionButton",{key:n.id,class:"files-list__row-action-"+n.id,on:{click:function(e){return t.onActionClick(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading===n.id?e("NcLoadingIcon",{attrs:{size:18}}):e("CustomSvgIconRender",{attrs:{svg:n.iconSvgInline([t.source],t.currentView)}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t"+t._s(n.displayName([t.source],t.currentView))+"\n\t\t\t")])})),1):t._e()],1),t._v(" "),t.isSizeAvailable?e("td",{staticClass:"files-list__row-size",style:{opacity:t.sizeOpacity},on:{click:t.openDetailsIfAvailable}},[e("span",[t._v(t._s(t.size))])]):t._e(),t._v(" "),t._l(t.columns,(function(n){var i;return e("td",{key:n.id,staticClass:"files-list__row-column-custom",class:"files-list__row-".concat(null===(i=t.currentView)||void 0===i?void 0:i.id,"-").concat(n.id),on:{click:t.openDetailsIfAvailable}},[t.active?e("CustomElementRender",{attrs:{"current-view":t.currentView,render:n.render,source:t.source}}):t._e()],1)}))],2)}),[],!1,null,"0600090e",null).exports,ne=u.default.extend({name:"FilesListFooter",components:{},props:{isSizeAvailable:{type:Boolean,default:!1},nodes:{type:Array,required:!0},summary:{type:String,default:""},filesListWidth:{type:Number,default:0}},setup(){const t=pt();return{filesStore:ut(),pathsStore:t}},computed:{currentView(){return this.$navigation.active},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},currentFolder(){var t;if(null===(t=this.currentView)||void 0===t||!t.id)return;if("/"===this.dir)return this.filesStore.getRoot(this.currentView.id);const e=this.pathsStore.getPath(this.currentView.id,this.dir);return this.filesStore.getNode(e)},columns(){var t;return this.filesListWidth<512?[]:(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},totalSize(){var t;return null!==(t=this.currentFolder)&&void 0!==t&&t.size?(0,H.sS)(this.currentFolder.size,!0):(0,H.sS)(this.nodes.reduce(((t,e)=>t+e.size||0),0),!0)}},methods:{classForColumn(t){return{"files-list__row-column-custom":!0,["files-list__row-".concat(this.currentView.id,"-").concat(t.id)]:!0}},t:r.Iu}});var ie=i(97105),oe={};oe.styleTagTransform=B(),oe.setAttributes=I(),oe.insert=S().bind(null,"head"),oe.domAPI=_(),oe.insertStyleElement=E(),C()(ie.Z,oe),ie.Z&&ie.Z.locals&&ie.Z.locals;const se=(0,T.Z)(ne,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("tr",[e("th",{staticClass:"files-list__row-checkbox"},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("files","Total rows summary")))])]),t._v(" "),e("td",{staticClass:"files-list__row-name"},[e("span",{staticClass:"files-list__row-icon"}),t._v(" "),e("span",[t._v(t._s(t.summary))])]),t._v(" "),e("td",{staticClass:"files-list__row-actions"}),t._v(" "),t.isSizeAvailable?e("td",{staticClass:"files-list__column files-list__row-size"},[e("span",[t._v(t._s(t.totalSize))])]):t._e(),t._v(" "),t._l(t.columns,(function(n){var i;return e("th",{key:n.id,class:t.classForColumn(n)},[e("span",[t._v(t._s(null===(i=n.summary)||void 0===i?void 0:i.call(n,t.nodes,t.currentView)))])])}))],2)}),[],!1,null,"e6a083be",null).exports,re=u.default.extend({data:()=>({filesListWidth:null}),created(){const t=document.querySelector("#app-content-vue");this.$resizeObserver=new ResizeObserver((e=>{e.length>0&&e[0].target===t&&(this.filesListWidth=e[0].contentRect.width)})),this.$resizeObserver.observe(t)},beforeDestroy(){this.$resizeObserver.disconnect()}}),ae=X(),le=u.default.extend({name:"FilesListHeaderActions",components:{CustomSvgIconRender:Ht,NcActions:zt(),NcActionButton:Dt(),NcLoadingIcon:ct()},mixins:[re],props:{currentView:{type:Object,required:!0},selectedNodes:{type:Array,default:()=>[]}},setup:()=>({actionsMenuStore:Ot(),filesStore:ut(),selectionStore:ht()}),data:()=>({loading:null}),computed:{dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},enabledActions(){return ae.filter((t=>t.execBatch)).filter((t=>!t.enabled||t.enabled(this.nodes,this.currentView))).sort(((t,e)=>(t.order||0)-(e.order||0)))},nodes(){return this.selectedNodes.map((t=>this.getNode(t))).filter((t=>t))},areSomeNodesLoading(){return this.nodes.some((t=>t._loading))},openedMenu:{get(){return"global"===this.actionsMenuStore.opened},set(t){this.actionsMenuStore.opened=t?"global":null}},inlineActions(){return this.filesListWidth<512?0:this.filesListWidth<768?1:this.filesListWidth<1024?2:3}},methods:{getNode(t){return this.filesStore.getNode(t)},async onActionClick(t){const e=t.displayName(this.nodes,this.currentView),n=this.selectedNodes;try{this.loading=t.id,this.nodes.forEach((t=>{u.default.set(t,"_loading",!0)}));const i=await t.execBatch(this.nodes,this.currentView,this.dir);if(!i.some((t=>null!==t)))return void this.selectionStore.reset();if(i.some((t=>!1===t))){const t=n.filter(((t,e)=>!1===i[e]));return this.selectionStore.set(t),void(0,h.x2)(this.t("files",'"{displayName}" failed on some elements ',{displayName:e}))}(0,h.s$)(this.t("files",'"{displayName}" batch action executed successfully',{displayName:e})),this.selectionStore.reset()}catch(n){Q.error("Error while executing action",{action:t,e:n}),(0,h.x2)(this.t("files",'"{displayName}" action failed',{displayName:e}))}finally{this.loading=null,this.nodes.forEach((t=>{u.default.set(t,"_loading",!1)}))}},t:r.Iu}});var ce=i(97877),de={};de.styleTagTransform=B(),de.setAttributes=I(),de.insert=S().bind(null,"head"),de.domAPI=_(),de.insertStyleElement=E(),C()(ce.Z,de),ce.Z&&ce.Z.locals&&ce.Z.locals;const ue=(0,T.Z)(le,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("th",{staticClass:"files-list__column files-list__row-actions-batch",attrs:{colspan:"2"}},[e("NcActions",{ref:"actionsMenu",attrs:{disabled:!!t.loading||t.areSomeNodesLoading,"force-title":!0,inline:t.inlineActions,"menu-title":t.inlineActions<=1?t.t("files","Actions"):null,open:t.openedMenu},on:{"update:open":function(e){t.openedMenu=e}}},t._l(t.enabledActions,(function(n){return e("NcActionButton",{key:n.id,class:"files-list__row-actions-batch-"+n.id,on:{click:function(e){return t.onActionClick(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading===n.id?e("NcLoadingIcon",{attrs:{size:18}}):e("CustomSvgIconRender",{attrs:{svg:n.iconSvgInline(t.nodes,t.currentView)}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t"+t._s(n.displayName(t.nodes,t.currentView))+"\n\t\t")])})),1)],1)}),[],!1,null,"03e57b1e",null).exports;var pe=i(20404),he=i(23873);const fe=u.default.extend({computed:{...(0,nt.rn)(At,["getConfig","setSortingBy","toggleSortingDirection"]),currentView(){return this.$navigation.active},sortingMode(){var t,e;return(null===(t=this.getConfig(this.currentView.id))||void 0===t?void 0:t.sorting_mode)||(null===(e=this.currentView)||void 0===e?void 0:e.defaultSortKey)||"basename"},isAscSorting(){var t;return"asc"===(null===(t=this.getConfig(this.currentView.id))||void 0===t?void 0:t.sorting_direction)}},methods:{toggleSortBy(t){this.sortingMode!==t?this.setSortingBy(t,this.currentView.id):this.toggleSortingDirection(this.currentView.id)}}}),Ae=u.default.extend({name:"FilesListHeaderButton",components:{MenuDown:pe.Z,MenuUp:he.Z,NcButton:at()},mixins:[fe],props:{name:{type:String,required:!0},mode:{type:String,required:!0}},methods:{sortAriaLabel(t){const e=this.isAscSorting?this.t("files","ascending"):this.t("files","descending");return this.t("files","Sort list by {column} ({direction})",{column:t,direction:e})},t:r.Iu}});var ve=i(29252),me={};me.styleTagTransform=B(),me.setAttributes=I(),me.insert=S().bind(null,"head"),me.domAPI=_(),me.insertStyleElement=E(),C()(ve.Z,me),ve.Z&&ve.Z.locals&&ve.Z.locals;const ge=(0,T.Z)(Ae,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("NcButton",{staticClass:"files-list__column-sort-button",class:{"files-list__column-sort-button--active":t.sortingMode===t.mode},attrs:{"aria-label":t.sortAriaLabel(t.name),type:"tertiary"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggleSortBy(t.mode)}}},[t.sortingMode!==t.mode||t.isAscSorting?e("MenuUp",{attrs:{slot:"icon"},slot:"icon"}):e("MenuDown",{attrs:{slot:"icon"},slot:"icon"}),t._v("\n\t"+t._s(t.name)+"\n")],1)}),[],!1,null,null,null).exports,we=u.default.extend({name:"FilesListHeader",components:{FilesListHeaderButton:ge,NcCheckboxRadioSwitch:Ut(),FilesListHeaderActions:ue},mixins:[fe],props:{isSizeAvailable:{type:Boolean,default:!1},nodes:{type:Array,required:!0},filesListWidth:{type:Number,default:0}},setup:()=>({filesStore:ut(),selectionStore:ht()}),computed:{currentView(){return this.$navigation.active},columns(){var t;return this.filesListWidth<512?[]:(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},selectAllBind(){const t=this.isNoneSelected||this.isSomeSelected?this.t("files","Select all"):this.t("files","Unselect all");return{"aria-label":t,checked:this.isAllSelected,indeterminate:this.isSomeSelected,title:t}},selectedNodes(){return this.selectionStore.selected},isAllSelected(){return this.selectedNodes.length===this.nodes.length},isNoneSelected(){return 0===this.selectedNodes.length},isSomeSelected(){return!this.isAllSelected&&!this.isNoneSelected}},methods:{classForColumn(t){return{"files-list__column":!0,"files-list__column--sortable":!!t.sort,"files-list__row-column-custom":!0,["files-list__row-".concat(this.currentView.id,"-").concat(t.id)]:!0}},onToggleAll(t){if(t){const t=this.nodes.map((t=>t.fileid.toString()));Q.debug("Added all nodes to selection",{selection:t}),this.selectionStore.setLastIndex(null),this.selectionStore.set(t)}else Q.debug("Cleared selection"),this.selectionStore.reset()},t:r.Iu}});var be=i(96153),Ce={};Ce.styleTagTransform=B(),Ce.setAttributes=I(),Ce.insert=S().bind(null,"head"),Ce.domAPI=_(),Ce.insertStyleElement=E(),C()(be.Z,Ce),be.Z&&be.Z.locals&&be.Z.locals;const ye=(0,T.Z)(we,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("tr",[e("th",{staticClass:"files-list__column files-list__row-checkbox"},[e("NcCheckboxRadioSwitch",t._b({on:{"update:checked":t.onToggleAll}},"NcCheckboxRadioSwitch",t.selectAllBind,!1))],1),t._v(" "),t.isNoneSelected?[e("th",{staticClass:"files-list__column files-list__row-name files-list__column--sortable",on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggleSortBy("basename")}}},[e("span",{staticClass:"files-list__row-icon"}),t._v(" "),e("FilesListHeaderButton",{attrs:{name:t.t("files","Name"),mode:"basename"}})],1),t._v(" "),e("th",{staticClass:"files-list__row-actions"}),t._v(" "),t.isSizeAvailable?e("th",{staticClass:"files-list__column files-list__row-size",class:{"files-list__column--sortable":t.isSizeAvailable}},[e("FilesListHeaderButton",{attrs:{name:t.t("files","Size"),mode:"size"}})],1):t._e(),t._v(" "),t._l(t.columns,(function(n){return e("th",{key:n.id,class:t.classForColumn(n)},[n.sort?e("FilesListHeaderButton",{attrs:{name:n.title,mode:n.id}}):e("span",[t._v("\n\t\t\t\t"+t._s(n.title)+"\n\t\t\t")])],1)}))]:e("FilesListHeaderActions",{attrs:{"current-view":t.currentView,"selected-nodes":t.selectedNodes}})],2)}),[],!1,null,"76b6186a",null).exports,_e=u.default.extend({name:"FilesListVirtual",components:{RecycleScroller:St.EK,FileEntry:ee,FilesListHeader:ye,FilesListFooter:se},mixins:[re],props:{currentView:{type:Object,required:!0},nodes:{type:Array,required:!0}},data:()=>({FileEntry:ee}),computed:{files(){return this.nodes.filter((t=>"file"===t.type))},summaryFile(){const t=this.files.length;return(0,r.uN)("files","{count} file","{count} files",t,{count:t})},summaryFolder(){const t=this.nodes.length-this.files.length;return(0,r.uN)("files","{count} folder","{count} folders",t,{count:t})},summary(){return(0,r.Iu)("files","{summaryFile} and {summaryFolder}",this)},isSizeAvailable(){return!(this.filesListWidth<768)&&this.nodes.some((t=>void 0!==t.attributes.size))}},mounted(){const t=this.$el.querySelectorAll(".vue-recycle-scroller__slot");t[0].setAttribute("role","thead"),t[1].setAttribute("role","tfoot")},methods:{getFileId:t=>t.fileid,t:r.Iu}});var xe=i(76775),Se={};Se.styleTagTransform=B(),Se.setAttributes=I(),Se.insert=S().bind(null,"head"),Se.domAPI=_(),Se.insertStyleElement=E(),C()(xe.Z,Se),xe.Z&&xe.Z.locals&&xe.Z.locals;const ke=(0,T.Z)(_e,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("RecycleScroller",{ref:"recycleScroller",staticClass:"files-list",attrs:{"key-field":"source",items:t.nodes,"item-size":55,"table-mode":!0,"item-class":"files-list__row","item-tag":"tr","list-class":"files-list__body","list-tag":"tbody",role:"table"},scopedSlots:t._u([{key:"default",fn:function(n){let{item:i,active:o,index:s}=n;return[e("FileEntry",{attrs:{active:o,index:s,"is-size-available":t.isSizeAvailable,"files-list-width":t.filesListWidth,nodes:t.nodes,source:i}})]}},{key:"before",fn:function(){return[e("caption",{staticClass:"hidden-visually"},[t._v("\n\t\t\t"+t._s(t.currentView.caption||"")+"\n\t\t\t"+t._s(t.t("files","This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list."))+"\n\t\t")]),t._v(" "),e("FilesListHeader",{attrs:{"files-list-width":t.filesListWidth,"is-size-available":t.isSizeAvailable,nodes:t.nodes}})]},proxy:!0},{key:"after",fn:function(){return[e("FilesListFooter",{attrs:{"files-list-width":t.filesListWidth,"is-size-available":t.isSizeAvailable,nodes:t.nodes,summary:t.summary}})]},proxy:!0}])})}),[],!1,null,"640a8bb8",null).exports;var Ie=i(14222);function Ne(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const Ee=class{constructor(){Ne(this,"_views",[]),Ne(this,"_currentView",null),Q.debug("Navigation service initialized")}register(t){try{Be(t),Fe(t,this._views)}catch(e){throw e instanceof Error&&Q.error(e.message,{view:t}),e}t.legacy&&Q.warn("Legacy view detected, please migrate to Vue"),t.iconClass&&(t.legacy=!0),this._views.push(t)}remove(t){const e=this._views.findIndex((e=>e.id===t));-1!==e&&this._views.splice(e,1)}get views(){return this._views}setActive(t){this._currentView=t}get active(){return this._currentView}},Fe=function(t,e){if(e.find((e=>e.id===t.id)))throw new Error("Navigation id ".concat(t.id," is already registered"));return!0},Be=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("Navigation id is required and must be a string");if(!t.name||"string"!=typeof t.name)throw new Error("Navigation name is required and must be a string");if(!t.legacy){if(!t.getContents||"function"!=typeof t.getContents)throw new Error("Navigation getContents is required and must be a function");if(!t.icon||"string"!=typeof t.icon||!(0,Ie.Z)(t.icon))throw new Error("Navigation icon is required and must be a valid svg string")}if(!("order"in t)||"number"!=typeof t.order)throw new Error("Navigation order is required and must be a number");if(t.columns&&t.columns.forEach(Pe),t.emptyView&&"function"!=typeof t.emptyView)throw new Error("Navigation emptyView must be a function");if(t.parent&&"string"!=typeof t.parent)throw new Error("Navigation parent must be a string");if("sticky"in t&&"boolean"!=typeof t.sticky)throw new Error("Navigation sticky must be a boolean");if("expanded"in t&&"boolean"!=typeof t.expanded)throw new Error("Navigation expanded must be a boolean");if(t.defaultSortKey&&"string"!=typeof t.defaultSortKey)throw new Error("Navigation defaultSortKey must be a string");return!0},Pe=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("A column id is required");if(!t.title||"string"!=typeof t.title)throw new Error("A column title is required");if(!t.render||"function"!=typeof t.render)throw new Error("A render function is required");if(t.sort&&"function"!=typeof t.sort)throw new Error("Column sortFunction must be a function");if(t.summary&&"function"!=typeof t.summary)throw new Error("Column summary must be a function");return!0},De=u.default.extend({name:"FilesList",components:{BreadCrumbs:xt,FilesListVirtual:ke,NcAppContent:st(),NcButton:at(),NcEmptyContent:A(),NcLoadingIcon:ct(),TrashCan:dt.Z},mixins:[fe],setup(){const t=pt();return{filesStore:ut(),pathsStore:t,selectionStore:ht(),viewConfigStore:At()}},data:()=>({loading:!0,promise:null}),computed:{currentView(){return this.$navigation.active||this.$navigation.views.find((t=>"files"===t.id))},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},currentFolder(){var t;if(null===(t=this.currentView)||void 0===t||!t.id)return;if("/"===this.dir)return this.filesStore.getRoot(this.currentView.id);const e=this.pathsStore.getPath(this.currentView.id,this.dir);return this.filesStore.getNode(e)},dirContents(){var t,e;if(!this.currentView)return[];const n=((null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]).find((t=>t.id===this.sortingMode));if(null!=n&&n.sort&&"function"==typeof n.sort){var i;const t=[...((null===(i=this.currentFolder)||void 0===i?void 0:i._children)||[]).map(this.getNode).filter((t=>t))].sort(n.sort);return this.isAscSorting?t:t.reverse()}return(0,it.X)([...((null===(e=this.currentFolder)||void 0===e?void 0:e._children)||[]).map(this.getNode).filter((t=>t))],[..."basename"===this.sortingMode?[t=>"folder"!==t.type]:[],t=>t[this.sortingMode],t=>t.basename],this.isAscSorting?["asc","asc","asc"]:["desc","desc","desc"])},isEmptyDir(){return 0===this.dirContents.length},isRefreshing(){return void 0!==this.currentFolder&&!this.isEmptyDir&&this.loading},toPreviousDir(){const t=this.dir.split("/").slice(0,-1).join("/")||"/";return{...this.$route,query:{dir:t}}}},watch:{currentView(t,e){(null==t?void 0:t.id)!==(null==e?void 0:e.id)&&(Q.debug("View changed",{newView:t,oldView:e}),this.selectionStore.reset(),this.fetchContent())},dir(t,e){var n,i;Q.debug("Directory changed",{newDir:t,oldDir:e}),this.selectionStore.reset(),this.fetchContent(),null!==(n=this.$refs)&&void 0!==n&&null!==(i=n.filesListVirtual)&&void 0!==i&&i.$el&&(this.$refs.filesListVirtual.$el.scrollTop=0)}},methods:{async fetchContent(){var t,e;if(null!==(t=this.currentView)&&void 0!==t&&t.legacy)return;this.loading=!0;const n=this.dir,i=this.currentView;"function"==typeof(null===(e=this.promise)||void 0===e?void 0:e.cancel)&&(this.promise.cancel(),Q.debug("Cancelled previous ongoing fetch")),this.promise=i.getContents(n);try{const{folder:t,contents:e}=await this.promise;Q.debug("Fetched contents",{dir:n,folder:t,contents:e}),this.filesStore.updateNodes(e),t._children=e.map((t=>t.fileid)),"/"===n?this.filesStore.setRoot({service:i.id,root:t}):t.fileid?(this.filesStore.updateNodes([t]),this.pathsStore.addPath({service:i.id,fileid:t.fileid,path:n})):Q.error("Invalid root folder returned",{dir:n,folder:t,currentView:i}),e.filter((t=>"folder"===t.type)).forEach((t=>{this.pathsStore.addPath({service:i.id,fileid:t.fileid,path:(0,p.join)(n,t.basename)})}))}catch(t){Q.error("Error while fetching content",{error:t})}finally{this.loading=!1}},getNode(t){return this.filesStore.getNode(t)},t:r.Iu}});var Te=i(1508),ze={};ze.styleTagTransform=B(),ze.setAttributes=I(),ze.insert=S().bind(null,"head"),ze.domAPI=_(),ze.insertStyleElement=E(),C()(Te.Z,ze),Te.Z&&Te.Z.locals&&Te.Z.locals;const Le=(0,T.Z)(De,(function(){var t,e,n=this,i=n._self._c;return n._self._setupProxy,i("NcAppContent",{directives:[{name:"show",rawName:"v-show",value:!(null!==(t=n.currentView)&&void 0!==t&&t.legacy),expression:"!currentView?.legacy"}],class:{"app-content--hidden":null===(e=n.currentView)||void 0===e?void 0:e.legacy},attrs:{"data-cy-files-content":""}},[i("div",{staticClass:"files-list__header"},[i("BreadCrumbs",{attrs:{path:n.dir},on:{reload:n.fetchContent}}),n._v(" "),n.isRefreshing?i("NcLoadingIcon",{staticClass:"files-list__refresh-icon"}):n._e()],1),n._v(" "),n.loading&&!n.isRefreshing?i("NcLoadingIcon",{staticClass:"files-list__loading-icon",attrs:{size:38,title:n.t("files","Loading current folder")}}):!n.loading&&n.isEmptyDir?i("NcEmptyContent",{attrs:{title:n.t("files","No files in here"),description:n.t("files","No files or folders have been deleted yet"),"data-cy-files-content-empty":""},scopedSlots:n._u([{key:"action",fn:function(){return["/"!==n.dir?i("NcButton",{attrs:{"aria-label":"t('files', 'Go to the previous folder')",type:"primary",to:n.toPreviousDir}},[n._v("\n\t\t\t\t"+n._s(n.t("files","Go back"))+"\n\t\t\t")]):n._e()]},proxy:!0},{key:"icon",fn:function(){return[i("TrashCan")]},proxy:!0}])}):i("FilesListVirtual",{ref:"filesListVirtual",attrs:{"current-view":n.currentView,nodes:n.dirContents}})],1)}),[],!1,null,"66068cbb",null).exports;var Ue=i(57638),Ve=i(55209),Oe=i.n(Ve),Ze=i(14032),qe=i.n(Ze),Re=i(91211),je=i.n(Re);var Me=i(28615),$e=i(74184),We=i(48959),Ge=i.n(We);const He={name:"NavigationQuota",components:{ChartPie:$e.Z,NcAppNavigationItem:qe(),NcProgressBar:Ge()},data:()=>({loadingStorageStats:!1,storageStats:(0,s.j)("files","storageStats",null)}),computed:{storageStatsTitle(){var t,e,n;const i=(0,H.sS)(null===(t=this.storageStats)||void 0===t?void 0:t.used),o=(0,H.sS)(null===(e=this.storageStats)||void 0===e?void 0:e.quota);return(null===(n=this.storageStats)||void 0===n?void 0:n.quota)<0?this.t("files","{usedQuotaByte} used",{usedQuotaByte:i}):this.t("files","{used} of {quota} used",{used:i,quota:o})},storageStatsTooltip(){return this.storageStats.relative?this.t("files","{relative}% used",this.storageStats):""}},beforeMount(){setInterval(this.throttleUpdateStorageStats,6e4),(0,G.Ld)("files:node:created",this.throttleUpdateStorageStats),(0,G.Ld)("files:node:deleted",this.throttleUpdateStorageStats),(0,G.Ld)("files:node:moved",this.throttleUpdateStorageStats),(0,G.Ld)("files:node:updated",this.throttleUpdateStorageStats)},methods:{debounceUpdateStorageStats:(0,Me.D)(200,(function(t){this.updateStorageStats(t)})),throttleUpdateStorageStats:(0,Me.P)(1e3,(function(t){this.updateStorageStats(t)})),async updateStorageStats(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!this.loadingStorageStats){this.loadingStorageStats=!0;try{var n;const t=await d.default.get((0,a.generateUrl)("/apps/files/api/v1/stats"));if(null==t||null===(n=t.data)||void 0===n||!n.data)throw new Error("Invalid storage stats");this.storageStats=t.data.data}catch(n){Q.error("Could not refresh storage stats",{error:n}),e&&(0,h.x2)(t("files","Could not refresh storage stats"))}finally{this.loadingStorageStats=!1}}},t:r.Iu}};var Ke=i(93582),Qe={};Qe.styleTagTransform=B(),Qe.setAttributes=I(),Qe.insert=S().bind(null,"head"),Qe.domAPI=_(),Qe.insertStyleElement=E(),C()(Ke.Z,Qe),Ke.Z&&Ke.Z.locals&&Ke.Z.locals;const Ye=(0,T.Z)(He,(function(){var t=this,e=t._self._c;return t.storageStats?e("NcAppNavigationItem",{staticClass:"app-navigation-entry__settings-quota",class:{"app-navigation-entry__settings-quota--not-unlimited":t.storageStats.quota>=0},attrs:{"aria-label":t.t("files","Storage informations"),loading:t.loadingStorageStats,name:t.storageStatsTitle,title:t.storageStatsTooltip,"data-cy-files-navigation-settings-quota":""},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.debounceUpdateStorageStats.apply(null,arguments)}}},[e("ChartPie",{attrs:{slot:"icon",size:20},slot:"icon"}),t._v(" "),t.storageStats.quota>=0?e("NcProgressBar",{attrs:{slot:"extra",error:t.storageStats.relative>80,value:Math.min(t.storageStats.relative,100)},slot:"extra"}):t._e()],1):t._e()}),[],!1,null,"918797b2",null).exports;var Je=i(68988),Xe=i.n(Je),tn=i(16809),en=i.n(tn),nn=i(70386),on=i(36029),sn=i.n(on);const rn={name:"Setting",props:{el:{type:Function,required:!0}},mounted(){this.$el.appendChild(this.el())}},an=(0,T.Z)(rn,(function(){return(0,this._self._c)("div")}),[],!1,null,null,null).exports,ln={name:"Settings",components:{Clipboard:nn.Z,NcAppSettingsDialog:Xe(),NcAppSettingsSection:en(),NcCheckboxRadioSwitch:Ut(),NcInputField:sn(),Setting:an},props:{open:{type:Boolean,default:!1}},setup:()=>({userConfigStore:qt()}),data(){var t,e,n,i;return{settings:(null===(t=window.OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.Settings)||void 0===n?void 0:n.settings)||[],webdavUrl:(0,a.generateRemoteUrl)("dav/files/"+encodeURIComponent(null===(i=(0,l.ts)())||void 0===i?void 0:i.uid)),webdavDocs:"https://docs.nextcloud.com/server/stable/go.php?to=user-webdav",appPasswordUrl:(0,a.generateUrl)("/settings/user/security#generate-app-token-section"),webdavUrlCopied:!1}},computed:{userConfig(){return this.userConfigStore.userConfig}},beforeMount(){this.settings.forEach((t=>t.open()))},beforeDestroy(){this.settings.forEach((t=>t.close()))},methods:{onClose(){this.$emit("close")},setConfig(t,e){this.userConfigStore.update(t,e)},async copyCloudId(){document.querySelector("input#webdav-url-input").select(),navigator.clipboard?(await navigator.clipboard.writeText(this.webdavUrl),this.webdavUrlCopied=!0,(0,h.s$)(t("files","WebDAV URL copied to clipboard")),setTimeout((()=>{this.webdavUrlCopied=!1}),5e3)):(0,h.x2)(t("files","Clipboard is not available"))},t:r.Iu}},cn=ln;var dn=i(35662),un={};un.styleTagTransform=B(),un.setAttributes=I(),un.insert=S().bind(null,"head"),un.domAPI=_(),un.insertStyleElement=E(),C()(dn.Z,un),dn.Z&&dn.Z.locals&&dn.Z.locals;const pn=(0,T.Z)(cn,(function(){var t=this,e=t._self._c;return e("NcAppSettingsDialog",{attrs:{open:t.open,"show-navigation":!0,title:t.t("files","Files settings")},on:{"update:open":t.onClose}},[e("NcAppSettingsSection",{attrs:{id:"settings",title:t.t("files","Files settings")}},[e("NcCheckboxRadioSwitch",{attrs:{checked:t.userConfig.show_hidden},on:{"update:checked":function(e){return t.setConfig("show_hidden",e)}}},[t._v("\n\t\t\t"+t._s(t.t("files","Show hidden files"))+"\n\t\t")]),t._v(" "),e("NcCheckboxRadioSwitch",{attrs:{checked:t.userConfig.crop_image_previews},on:{"update:checked":function(e){return t.setConfig("crop_image_previews",e)}}},[t._v("\n\t\t\t"+t._s(t.t("files","Crop image previews"))+"\n\t\t")])],1),t._v(" "),0!==t.settings.length?e("NcAppSettingsSection",{attrs:{id:"more-settings",title:t.t("files","Additional settings")}},[t._l(t.settings,(function(t){return[e("Setting",{key:t.name,attrs:{el:t.el}})]}))],2):t._e(),t._v(" "),e("NcAppSettingsSection",{attrs:{id:"webdav",title:t.t("files","WebDAV")}},[e("NcInputField",{attrs:{id:"webdav-url-input","show-trailing-button":!0,success:t.webdavUrlCopied,"trailing-button-label":t.t("files","Copy to clipboard"),value:t.webdavUrl,readonly:"readonly",type:"url"},on:{focus:function(t){return t.target.select()},"trailing-button-click":t.copyCloudId},scopedSlots:t._u([{key:"trailing-button-icon",fn:function(){return[e("Clipboard",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),e("em",[e("a",{staticClass:"setting-link",attrs:{href:t.webdavDocs,target:"_blank",rel:"noreferrer noopener"}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Use this address to access your Files via WebDAV"))+" ↗\n\t\t\t")])]),t._v(" "),e("br"),t._v(" "),e("em",[e("a",{staticClass:"setting-link",attrs:{href:t.appPasswordUrl}},[t._v("\n\t\t\t\t"+t._s(t.t("files","If you have enabled 2FA, you must create and use a new app password by clicking here."))+" ↗\n\t\t\t")])])],1)],1)}),[],!1,null,"76ca5d1f",null).exports,hn={name:"Navigation",components:{Cog:Ue.default,NavigationQuota:Ye,NcAppNavigation:Oe(),NcAppNavigationItem:qe(),NcIconSvgWrapper:je(),SettingsModal:pn},props:{Navigation:{type:Ee,required:!0}},setup:()=>({viewConfigStore:At()}),data:()=>({settingsOpened:!1}),computed:{currentViewId(){var t,e;return(null===(t=this.$route)||void 0===t||null===(e=t.params)||void 0===e?void 0:e.view)||"files"},currentView(){return this.views.find((t=>t.id===this.currentViewId))},views(){return this.Navigation.views},parentViews(){return this.views.filter((t=>!t.parent)).sort(((t,e)=>t.order-e.order))},childViews(){return this.views.filter((t=>!!t.parent)).reduce(((t,e)=>(t[e.parent]=[...t[e.parent]||[],e],t[e.parent].sort(((t,e)=>t.order-e.order)),t)),{})}},watch:{currentView(t,e){(null==t?void 0:t.id)!==(null==e?void 0:e.id)&&(this.Navigation.setActive(t),Q.debug("Navigation changed",{id:t.id,view:t}),this.showView(t,e))}},beforeMount(){this.currentView&&(Q.debug("Navigation mounted. Showing requested view",{view:this.currentView}),this.showView(this.currentView)),(0,G.Ld)("files:legacy-navigation:changed",this.onLegacyNavigationChanged),(0,G.Ld)("files:legacy-view:initialized",(()=>{Q.debug("Legacy view initialized",{...this.currentView}),this.showView(this.currentView)}))},methods:{showView(t,e){var n,i,o,s,r;if(null===(n=window)||void 0===n||null===(i=n.OCA)||void 0===i||null===(o=i.Files)||void 0===o||null===(s=o.Sidebar)||void 0===s||null===(r=s.close)||void 0===r||r.call(s),null!=t&&t.legacy){const e=document.querySelector("#app-content #app-content-"+this.currentView.id+".viewcontainer");document.querySelectorAll("#app-content .viewcontainer").forEach((t=>{t.classList.add("hidden")})),e.classList.remove("hidden");const{dir:n="/"}=OC.Util.History.parseUrlQuery(),i={itemId:t.id,dir:n};Q.debug("Triggering legacy navigation event",i),window.jQuery(e).trigger(new window.jQuery.Event("show",i)),window.jQuery(e).trigger(new window.jQuery.Event("urlChanged",i))}this.Navigation.setActive(t),function(t){const e=document.getElementById("page-heading-level-1");e&&(e.textContent=t)}(t.name),(0,G.j8)("files:navigation:changed",t)},onLegacyNavigationChanged(){let{id:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:"files"};const e=this.Navigation.views.find((e=>e.id===t));e&&e.legacy&&e.id!==this.currentView.id&&(this.$router.replace({...this.$route,params:{view:e.id}}),this.Navigation.setActive(e),this.showView(e))},onToggleExpand(t){const e=this.isExpanded(t);t.expanded=!e,this.viewConfigStore.update(t.id,"expanded",!e)},isExpanded(t){var e;return"boolean"==typeof(null===(e=this.viewConfigStore.getConfig(t.id))||void 0===e?void 0:e.expanded)?!0===this.viewConfigStore.getConfig(t.id).expanded:!0===t.expanded},generateToNavigation(t){if(t.params){const{dir:e,fileid:n}=t.params;return{name:"filelist",params:t.params,query:{dir:e,fileid:n}}}return{name:"filelist",params:{view:t.id}}},openSettings(){this.settingsOpened=!0},onSettingsClose(){this.settingsOpened=!1},t:r.Iu}},fn=hn;var An=i(87289),vn={};vn.styleTagTransform=B(),vn.setAttributes=I(),vn.insert=S().bind(null,"head"),vn.domAPI=_(),vn.insertStyleElement=E(),C()(An.Z,vn),An.Z&&An.Z.locals&&An.Z.locals;const mn=(0,T.Z)(fn,(function(){var t=this,e=t._self._c;return e("NcAppNavigation",{attrs:{"data-cy-files-navigation":""},scopedSlots:t._u([{key:"list",fn:function(){return t._l(t.parentViews,(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"allow-collapse":!0,"data-cy-files-navigation-item":n.id,icon:n.iconClass,open:t.isExpanded(n),pinned:n.sticky,title:n.name,to:t.generateToNavigation(n)},on:{"update:open":function(e){return t.onToggleExpand(n)}}},[n.icon?e("NcIconSvgWrapper",{attrs:{slot:"icon",svg:n.icon},slot:"icon"}):t._e(),t._v(" "),t._l(t.childViews[n.id],(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"data-cy-files-navigation-item":n.id,exact:!0,icon:n.iconClass,title:n.name,to:t.generateToNavigation(n)}},[n.icon?e("NcIconSvgWrapper",{attrs:{slot:"icon",svg:n.icon},slot:"icon"}):t._e()],1)}))],2)}))},proxy:!0},{key:"footer",fn:function(){return[e("ul",{staticClass:"app-navigation-entry__settings"},[e("NavigationQuota"),t._v(" "),e("NcAppNavigationItem",{attrs:{"aria-label":t.t("files","Open the files app settings"),title:t.t("files","Files settings"),"data-cy-files-navigation-settings-button":""},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openSettings.apply(null,arguments)}}},[e("Cog",{attrs:{slot:"icon",size:20},slot:"icon"})],1)],1)]},proxy:!0}])},[t._v(" "),t._v(" "),e("SettingsModal",{attrs:{open:t.settingsOpened,"data-cy-files-navigation-settings":""},on:{close:t.onSettingsClose}})],1)}),[],!1,null,"657a978e",null).exports,gn=function(t){let{id:e,name:n,order:i,icon:o,parent:s,classes:r="",expanded:a,params:l}=t;OCP.Files.Navigation.register({id:e,name:n,order:i,params:l,parent:s,expanded:!0===a,iconClass:o?"icon-".concat(o):"nav-icon-"+e,legacy:!0,sticky:r.includes("pinned")})};var wn=i(78345),bn=i(97047);u.default.use(wn.ZP);const Cn=new wn.ZP({mode:"history",base:(0,a.generateUrl)("/apps/files",""),linkActiveClass:"active",routes:[{path:"/",alias:"/files"},{path:"/:view/:fileid?",name:"filelist",props:!0}],stringifyQuery(t){const e=bn.Z.stringify(t).replace(/%2F/gim,"/");return e?"?"+e:""}});function yn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var _n,xn,Sn=i(25108);window.OCA.Files=null!==(_n=window.OCA.Files)&&void 0!==_n?_n:{},window.OCP.Files=null!==(xn=window.OCP.Files)&&void 0!==xn?xn:{};const kn=new class{constructor(t){var e,n,i;e=this,i=void 0,(n=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(n="_router"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this._router=t}goTo(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this._router.push({path:t,replace:e})}goToRoute(t,e,n,i){return this._router.push({name:t,query:n,params:e,replace:i})}}(Cn);Object.assign(window.OCP.Files,{Router:kn}),u.default.use(nt.og);const In=(0,nt.WB)(),Nn=new Ee;Object.assign(window.OCP.Files,{Navigation:Nn}),u.default.prototype.$navigation=Nn;const En=new class{constructor(){var t,e,n;t=this,n=void 0,(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e="_settings"))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,this._settings=[],Sn.debug("OCA.Files.Settings initialized")}register(t){return this._settings.filter((e=>e.name===t.name)).length>0?(Sn.error("A setting with the same name is already registered"),!1):(this._settings.push(t),!0)}get settings(){return this._settings}};Object.assign(window.OCA.Files,{Settings:En}),Object.assign(window.OCA.Files.Settings,{Setting:class{constructor(t,e){let{el:n,open:i,close:o}=e;yn(this,"_close",void 0),yn(this,"_el",void 0),yn(this,"_name",void 0),yn(this,"_open",void 0),this._name=t,this._el=n,this._open=i,this._close=o,"function"!=typeof this._open&&(this._open=()=>{}),"function"!=typeof this._close&&(this._close=()=>{})}get name(){return this._name}get el(){return this._el}get open(){return this._open}get close(){return this._close}}}),new(u.default.extend(mn))({name:"FilesNavigationRoot",propsData:{Navigation:Nn},router:Cn,pinia:In}).$mount("#app-navigation-files"),new(u.default.extend(Le))({name:"FilesListRoot",router:Cn,pinia:In}).$mount("#app-content-vue"),function(){const t=Object.values((0,s.j)("files","navigation",{}));t.length>0&&(Q.debug("Legacy files views detected. Processing...",t),t.forEach((t=>{gn(t),t.sublist&&t.sublist.forEach((e=>gn({...e,parent:t.id})))})))}(),"serviceWorker"in navigator?window.addEventListener("load",(async()=>{try{const t=(0,a.generateUrl)("/apps/files/preview-service-worker.js",{},{noRewrite:!0}),e=await navigator.serviceWorker.register(t,{scope:"/"});Q.debug("SW registered: ",{registration:e})}catch(t){Q.error("SW registration failed: ",{error:t})}})):Q.debug("Service Worker is not enabled on this browser.")},39959:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".breadcrumb[data-v-68b3b20b]{flex:1 1 100% !important;width:100%}.breadcrumb[data-v-68b3b20b] a{cursor:pointer !important}","",{version:3,sources:["webpack://./apps/files/src/components/BreadCrumbs.vue"],names:[],mappings:"AACA,6BAEC,wBAAA,CACA,UAAA,CAEA,+BACC,yBAAA",sourcesContent:["\n.breadcrumb {\n\t// Take as much space as possible\n\tflex: 1 1 100% !important;\n\twidth: 100%;\n\n\t::v-deep a {\n\t\tcursor: pointer !important;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},61959:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".custom-svg-icon[data-v-93e9b2f4]{display:flex;align-items:center;align-self:center;justify-content:center;justify-self:center;width:44px;height:44px;opacity:1}.custom-svg-icon[data-v-93e9b2f4] svg{height:22px;width:22px;fill:currentColor}","",{version:3,sources:["webpack://./apps/files/src/components/CustomSvgIconRender.vue"],names:[],mappings:"AACA,kCACC,YAAA,CACA,kBAAA,CACA,iBAAA,CACA,sBAAA,CACA,mBAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CAEA,sCAGC,WAAA,CACA,UAAA,CACA,iBAAA",sourcesContent:["\n.custom-svg-icon {\n\tdisplay: flex;\n\talign-items: center;\n\talign-self: center;\n\tjustify-content: center;\n\tjustify-self: center;\n\twidth: 44px;\n\theight: 44px;\n\topacity: 1;\n\n\t::v-deep svg {\n\t\t// mdi icons have a size of 24px\n\t\t// 22px results in roughly 16px inner size\n\t\theight: 22px;\n\t\twidth: 22px;\n\t\tfill: currentColor;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},13352:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,"tr[data-v-0600090e]:hover,tr[data-v-0600090e]:focus,tr[data-v-0600090e]:active{background-color:var(--color-background-dark)}.files-list__row-icon-preview[data-v-0600090e]:not([style*=background]){background:var(--color-loading-dark)}","",{version:3,sources:["webpack://./apps/files/src/components/FileEntry.vue"],names:[],mappings:"AAGC,+EAGC,6CAAA,CAKF,wEACI,oCAAA",sourcesContent:["\n/* Hover effect on tbody lines only */\ntr {\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n}\n\n/* Preview not loaded animation effect */\n.files-list__row-icon-preview:not([style*='background']) {\n background: var(--color-loading-dark);\n\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\n}\n"],sourceRoot:""}]);const a=r},97105:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,"tr[data-v-e6a083be]{padding-bottom:300px;border-top:1px solid var(--color-border);background-color:rgba(0,0,0,0) !important;border-bottom:none !important}td[data-v-e6a083be]{user-select:none;color:var(--color-text-maxcontrast) !important}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListFooter.vue"],names:[],mappings:"AAEA,oBACC,oBAAA,CACA,wCAAA,CAEA,yCAAA,CACA,6BAAA,CAGD,oBACC,gBAAA,CAEA,8CAAA",sourcesContent:["\n// Scoped row\ntr {\n\tpadding-bottom: 300px;\n\tborder-top: 1px solid var(--color-border);\n\t// Prevent hover effect on the whole row\n\tbackground-color: transparent !important;\n\tborder-bottom: none !important;\n}\n\ntd {\n\tuser-select: none;\n\t// Make sure the cell colors don't apply to column headers\n\tcolor: var(--color-text-maxcontrast) !important;\n}\n\n"],sourceRoot:""}]);const a=r},96153:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list__column[data-v-76b6186a]{user-select:none;color:var(--color-text-maxcontrast) !important}.files-list__column--sortable[data-v-76b6186a]{cursor:pointer}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListHeader.vue"],names:[],mappings:"AACA,qCACC,gBAAA,CAEA,8CAAA,CAEA,+CACC,cAAA",sourcesContent:["\n.files-list__column {\n\tuser-select: none;\n\t// Make sure the cell colors don't apply to column headers\n\tcolor: var(--color-text-maxcontrast) !important;\n\n\t&--sortable {\n\t\tcursor: pointer;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},97877:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list__row-actions-batch[data-v-03e57b1e]{flex:1 1 100% !important}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper{width:100%}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper span.button-vue__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListHeaderActions.vue"],names:[],mappings:"AACA,gDACC,wBAAA,CAGA,qEACC,UAAA,CACA,2FACC,eAAA,CACA,sBAAA,CACA,kBAAA",sourcesContent:["\n.files-list__row-actions-batch {\n\tflex: 1 1 100% !important;\n\n\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\n\t::v-deep .button-vue__wrapper {\n\t\twidth: 100%;\n\t\tspan.button-vue__text {\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=r},29252:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list__column-sort-button{margin:0 calc(var(--cell-margin)*-1);padding:0 4px 0 16px !important}.files-list__column-sort-button .button-vue__wrapper{flex-direction:row-reverse;width:100%}.files-list__column-sort-button .button-vue__icon{transition-timing-function:linear;transition-duration:.1s;transition-property:opacity;opacity:0}.files-list__column-sort-button .button-vue__text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__column-sort-button--active .button-vue__icon,.files-list__column-sort-button:hover .button-vue__icon,.files-list__column-sort-button:focus .button-vue__icon,.files-list__column-sort-button:active .button-vue__icon{opacity:1 !important}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListHeaderButton.vue"],names:[],mappings:"AACA,gCAEC,oCAAA,CAEA,+BAAA,CAGA,qDACC,0BAAA,CAGA,UAAA,CAGD,kDACC,iCAAA,CACA,uBAAA,CACA,2BAAA,CACA,SAAA,CAID,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAOA,mOACC,oBAAA",sourcesContent:["\n.files-list__column-sort-button {\n\t// Compensate for cells margin\n\tmargin: 0 calc(var(--cell-margin) * -1);\n\t// Reverse padding\n\tpadding: 0 4px 0 16px !important;\n\n\t// Icon after text\n\t.button-vue__wrapper {\n\t\tflex-direction: row-reverse;\n\t\t// Take max inner width for text overflow ellipsis\n\t\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\n\t\twidth: 100%;\n\t}\n\n\t.button-vue__icon {\n\t\ttransition-timing-function: linear;\n\t\ttransition-duration: .1s;\n\t\ttransition-property: opacity;\n\t\topacity: 0;\n\t}\n\n\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\n\t.button-vue__text {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&--active,\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\t.button-vue__icon {\n\t\t\topacity: 1 !important;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=r},76775:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list[data-v-640a8bb8]{--row-height: 55px;--cell-margin: 14px;--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);--checkbox-size: 24px;--clickable-area: 44px;--icon-preview-size: 32px;display:block;overflow:auto;height:100%}.files-list[data-v-640a8bb8] tbody,.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot{display:flex;flex-direction:column;width:100%;position:relative}.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot[role=thead]{position:sticky;z-index:10;top:0;height:var(--row-height);background-color:var(--color-main-background)}.files-list[data-v-640a8bb8] tr{position:absolute;display:flex;align-items:center;width:100%;border-bottom:1px solid var(--color-border)}.files-list[data-v-640a8bb8] td,.files-list[data-v-640a8bb8] th{display:flex;align-items:center;flex:0 0 auto;justify-content:left;width:var(--row-height);height:var(--row-height);margin:0;padding:0;color:var(--color-text-maxcontrast);border:none}.files-list[data-v-640a8bb8] td span,.files-list[data-v-640a8bb8] th span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list[data-v-640a8bb8] .files-list__row-checkbox{justify-content:center}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch label.checkbox-radio-switch__label{width:var(--clickable-area);height:var(--clickable-area);margin:0;padding:calc((var(--clickable-area) - var(--checkbox-size))/2)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list[data-v-640a8bb8] .files-list__row-icon{position:relative;display:flex;overflow:visible;align-items:center;flex:0 0 var(--icon-preview-size);justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list[data-v-640a8bb8] .files-list__row-icon>span{justify-content:flex-start}.files-list[data-v-640a8bb8] .files-list__row-icon>span:not(.files-list__row-icon-favorite) svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list[data-v-640a8bb8] .files-list__row-icon-preview{overflow:hidden;width:var(--icon-preview-size);height:var(--icon-preview-size);border-radius:var(--border-radius);background-repeat:no-repeat;background-position:center;background-size:contain}.files-list[data-v-640a8bb8] .files-list__row-icon-favorite{position:absolute;top:4px;right:-8px;color:#fc0}.files-list[data-v-640a8bb8] .files-list__row-name{overflow:hidden;flex:1 1 auto}.files-list[data-v-640a8bb8] .files-list__row-name a{display:flex;align-items:center;width:100%;height:100%}.files-list[data-v-640a8bb8] .files-list__row-name a:focus .files-list__row-name-text,.files-list[data-v-640a8bb8] .files-list__row-name a:focus-visible .files-list__row-name-text{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list[data-v-640a8bb8] .files-list__row-name .files-list__row-name-text{padding:5px 10px;margin-left:-10px}.files-list[data-v-640a8bb8] .files-list__row-actions{width:auto}.files-list[data-v-640a8bb8] .files-list__row-actions~td,.files-list[data-v-640a8bb8] .files-list__row-actions~th{margin:0 var(--cell-margin)}.files-list[data-v-640a8bb8] .files-list__row-actions button .button-vue__text{font-weight:normal}.files-list[data-v-640a8bb8] .files-list__row-actions button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list[data-v-640a8bb8] .files-list__row-size{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list[data-v-640a8bb8] .files-list__row-column-custom{width:calc(var(--row-height)*2)}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListVirtual.vue"],names:[],mappings:"AACA,6BACC,kBAAA,CACA,mBAAA,CAEA,wEAAA,CACA,qBAAA,CACA,sBAAA,CACA,yBAAA,CAEA,aAAA,CACA,aAAA,CACA,WAAA,CAIC,4FACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,iBAAA,CAID,qEAEC,eAAA,CACA,UAAA,CACA,KAAA,CACA,wBAAA,CACA,6CAAA,CAGD,gCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,2CAAA,CAGD,gEACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,0EACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,uDACC,sBAAA,CACA,8EACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,iHACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,2GACC,mBAAA,CAKH,mDACC,iBAAA,CACA,YAAA,CACA,gBAAA,CACA,kBAAA,CAEA,iCAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,wDACC,0BAAA,CAGD,gGACC,8BAAA,CACA,+BAAA,CAGD,2DACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAGD,4DACC,iBAAA,CACA,OAAA,CACA,UAAA,CACA,UAAA,CAIF,mDAEC,eAAA,CAEA,aAAA,CAEA,qDACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,oLAEC,mDAAA,CACA,kBAAA,CAIF,8EAEC,gBAAA,CACA,iBAAA,CAIF,sDACC,UAAA,CAGA,kHAEC,2BAAA,CAIA,+EAEC,kBAAA,CAED,6GAEC,mCAAA,CAKH,mDAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,mFACC,+BAAA,CACA,wGACC,kBAAA,CAKH,4DACC,+BAAA",sourcesContent:["\n.files-list {\n\t--row-height: 55px;\n\t--cell-margin: 14px;\n\n\t--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);\n\t--checkbox-size: 24px;\n\t--clickable-area: 44px;\n\t--icon-preview-size: 32px;\n\n\tdisplay: block;\n\toverflow: auto;\n\theight: 100%;\n\n\t&::v-deep {\n\t\t// Table head, body and footer\n\t\ttbody, .vue-recycle-scroller__slot {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\twidth: 100%;\n\t\t\t// Necessary for virtual scrolling absolute\n\t\t\tposition: relative;\n\t\t}\n\n\t\t// Table header\n\t\t.vue-recycle-scroller__slot[role='thead'] {\n\t\t\t// Pinned on top when scrolling\n\t\t\tposition: sticky;\n\t\t\tz-index: 10;\n\t\t\ttop: 0;\n\t\t\theight: var(--row-height);\n\t\t\tbackground-color: var(--color-main-background);\n\t\t}\n\n\t\ttr {\n\t\t\tposition: absolute;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\twidth: 100%;\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t}\n\n\t\ttd, th {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tflex: 0 0 auto;\n\t\t\tjustify-content: left;\n\t\t\twidth: var(--row-height);\n\t\t\theight: var(--row-height);\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tborder: none;\n\n\t\t\t// Columns should try to add any text\n\t\t\t// node wrapped in a span. That should help\n\t\t\t// with the ellipsis on overflow.\n\t\t\tspan {\n\t\t\t\toverflow: hidden;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-checkbox {\n\t\t\tjustify-content: center;\n\t\t\t.checkbox-radio-switch {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: center;\n\n\t\t\t\t--icon-size: var(--checkbox-size);\n\n\t\t\t\tlabel.checkbox-radio-switch__label {\n\t\t\t\t\twidth: var(--clickable-area);\n\t\t\t\t\theight: var(--clickable-area);\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\n\t\t\t\t}\n\n\t\t\t\t.checkbox-radio-switch__icon {\n\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-icon {\n\t\t\tposition: relative;\n\t\t\tdisplay: flex;\n\t\t\toverflow: visible;\n\t\t\talign-items: center;\n\t\t\t// No shrinking or growing allowed\n\t\t\tflex: 0 0 var(--icon-preview-size);\n\t\t\tjustify-content: center;\n\t\t\twidth: var(--icon-preview-size);\n\t\t\theight: 100%;\n\t\t\t// Show same padding as the checkbox right padding for visual balance\n\t\t\tmargin-right: var(--checkbox-padding);\n\t\t\tcolor: var(--color-primary-element);\n\n\t\t\t& > span {\n\t\t\t\tjustify-content: flex-start;\n\t\t\t}\n\n\t\t\t&> span:not(.files-list__row-icon-favorite) svg {\n\t\t\t\twidth: var(--icon-preview-size);\n\t\t\t\theight: var(--icon-preview-size);\n\t\t\t}\n\n\t\t\t&-preview {\n\t\t\t\toverflow: hidden;\n\t\t\t\twidth: var(--icon-preview-size);\n\t\t\t\theight: var(--icon-preview-size);\n\t\t\t\tborder-radius: var(--border-radius);\n\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t\t// Center and contain the preview\n\t\t\t\tbackground-position: center;\n\t\t\t\tbackground-size: contain;\n\t\t\t}\n\n\t\t\t&-favorite {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 4px;\n\t\t\t\tright: -8px;\n\t\t\t\tcolor: #ffcc00;\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-name {\n\t\t\t// Prevent link from overflowing\n\t\t\toverflow: hidden;\n\t\t\t// Take as much space as possible\n\t\t\tflex: 1 1 auto;\n\n\t\t\ta {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\t// Fill cell height and width\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\n\t\t\t\t// Keyboard indicator a11y\n\t\t\t\t&:focus .files-list__row-name-text,\n\t\t\t\t&:focus-visible .files-list__row-name-text {\n\t\t\t\t\toutline: 2px solid var(--color-main-text) !important;\n\t\t\t\t\tborder-radius: 20px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.files-list__row-name-text {\n\t\t\t\t// Make some space for the outline\n\t\t\t\tpadding: 5px 10px;\n\t\t\t\tmargin-left: -10px;\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-actions {\n\t\t\twidth: auto;\n\n\t\t\t// Add margin to all cells after the actions\n\t\t\t& ~ td,\n\t\t\t& ~ th {\n\t\t\t\tmargin: 0 var(--cell-margin);\n\t\t\t}\n\n\t\t\tbutton {\n\t\t\t\t.button-vue__text {\n\t\t\t\t\t// Remove bold from default button styling\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t}\n\t\t\t\t&:not(:hover, :focus, :active) .button-vue__wrapper {\n\t\t\t\t\t// Also apply color-text-maxcontrast to non-active button\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-size {\n\t\t\t// Right align text\n\t\t\tjustify-content: flex-end;\n\t\t\twidth: calc(var(--row-height) * 1.5);\n\t\t\t// opacity varies with the size\n\t\t\tcolor: var(--color-main-text);\n\n\t\t\t// Icon is before text since size is right aligned\n\t\t\t.files-list__column-sort-button {\n\t\t\t\tpadding: 0 16px 0 4px !important;\n\t\t\t\t.button-vue__wrapper {\n\t\t\t\t\tflex-direction: row;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-column-custom {\n\t\t\twidth: calc(var(--row-height) * 2);\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=r},93582:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".app-navigation-entry__settings-quota--not-unlimited[data-v-918797b2] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-918797b2]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}","",{version:3,sources:["webpack://./apps/files/src/components/NavigationQuota.vue"],names:[],mappings:"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA",sourcesContent:["\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n"],sourceRoot:""}]);const a=r},3491:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".template-picker__item[data-v-6c072a31]{display:flex}.template-picker__label[data-v-6c072a31]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-6c072a31],.template-picker__label *[data-v-6c072a31]{cursor:pointer;user-select:none}.template-picker__label[data-v-6c072a31]::before{display:none !important}.template-picker__preview[data-v-6c072a31]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-6c072a31]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-6c072a31]{display:flex}.template-picker__image[data-v-6c072a31]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-6c072a31]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-6c072a31]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}","",{version:3,sources:["webpack://./apps/files/src/components/TemplatePreview.vue"],names:[],mappings:"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA",sourcesContent:["\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},1508:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".app-content[data-v-66068cbb]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-content[data-v-66068cbb]:not(.app-content--hidden)+#app-content{display:none}.files-list__header[data-v-66068cbb]{display:flex;align-content:center;flex:0 0;margin:4px 4px 4px 50px}.files-list__header>*[data-v-66068cbb]{flex:0 0}.files-list__refresh-icon[data-v-66068cbb]{flex:0 0 44px;width:44px;height:44px}.files-list__loading-icon[data-v-66068cbb]{margin:auto}","",{version:3,sources:["webpack://./apps/files/src/views/FilesList.vue"],names:[],mappings:"AACA,8BAEC,YAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAIA,qEACC,YAAA,CAQD,qCACC,YAAA,CACA,oBAAA,CAEA,QAAA,CAEA,uBAAA,CACA,uCAGC,QAAA,CAGF,2CACC,aAAA,CACA,UAAA,CACA,WAAA,CAED,2CACC,WAAA",sourcesContent:["\n.app-content {\n\t// Virtual list needs to be full height and is scrollable\n\tdisplay: flex;\n\toverflow: hidden;\n\tflex-direction: column;\n\tmax-height: 100%;\n\n\t// TODO: remove after all legacy views are migrated\n\t// Hides the legacy app-content if shown view is not legacy\n\t&:not(&--hidden)::v-deep + #app-content {\n\t\tdisplay: none;\n\t}\n}\n\n$margin: 4px;\n$navigationToggleSize: 50px;\n\n.files-list {\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-content: center;\n\t\t// Do not grow or shrink (vertically)\n\t\tflex: 0 0;\n\t\t// Align with the navigation toggle icon\n\t\tmargin: $margin $margin $margin $navigationToggleSize;\n\t\t> * {\n\t\t\t// Do not grow or shrink (horizontally)\n\t\t\t// Only the breadcrumbs shrinks\n\t\t\tflex: 0 0;\n\t\t}\n\t}\n\t&__refresh-icon {\n\t\tflex: 0 0 44px;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\t&__loading-icon {\n\t\tmargin: auto;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},87289:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".app-navigation[data-v-657a978e] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-657a978e]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-657a978e]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}","",{version:3,sources:["webpack://./apps/files/src/views/Navigation.vue"],names:[],mappings:"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA",sourcesContent:["\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n"],sourceRoot:""}]);const a=r},35662:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".setting-link[data-v-76ca5d1f]:hover{text-decoration:underline}","",{version:3,sources:["webpack://./apps/files/src/views/Settings.vue"],names:[],mappings:"AACA,qCACC,yBAAA",sourcesContent:["\n.setting-link:hover {\n\ttext-decoration: underline;\n}\n"],sourceRoot:""}]);const a=r},5103:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".templates-picker__form[data-v-715b4161]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-715b4161]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-715b4161]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-715b4161]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-715b4161],.templates-picker__buttons input[type=submit][data-v-715b4161]{height:44px}.templates-picker[data-v-715b4161] .modal-container{position:relative}.templates-picker__loading[data-v-715b4161]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}","",{version:3,sources:["webpack://./apps/files/src/views/TemplatePicker.vue"],names:[],mappings:"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA",sourcesContent:["\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},37020:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,"\n/* @keyframes preview-gradient-fade {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n} */\n","",{version:3,sources:["webpack://./apps/files/src/components/FileEntry.vue"],names:[],mappings:";AA6mBA;;;;;;;;;;GAUA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<Fragment>\n\t\t<td class=\"files-list__row-checkbox\">\n\t\t\t<NcCheckboxRadioSwitch v-if=\"active\"\n\t\t\t\t:aria-label=\"t('files', 'Select the row for {displayName}', { displayName })\"\n\t\t\t\t:checked=\"selectedFiles\"\n\t\t\t\t:value=\"fileid\"\n\t\t\t\tname=\"selectedFiles\"\n\t\t\t\t@update:checked=\"onSelectionChange\" />\n\t\t</td>\n\n\t\t\x3c!-- Link to file --\x3e\n\t\t<td class=\"files-list__row-name\">\n\t\t\t<a ref=\"name\" v-bind=\"linkTo\" @click=\"execDefaultAction\">\n\t\t\t\t\x3c!-- Icon or preview --\x3e\n\t\t\t\t<span class=\"files-list__row-icon\">\n\t\t\t\t\t<FolderIcon v-if=\"source.type === 'folder'\" />\n\n\t\t\t\t\t\x3c!-- Decorative image, should not be aria documented --\x3e\n\t\t\t\t\t<span v-else-if=\"previewUrl && !backgroundFailed\"\n\t\t\t\t\t\tref=\"previewImg\"\n\t\t\t\t\t\tclass=\"files-list__row-icon-preview\"\n\t\t\t\t\t\t:style=\"{ backgroundImage }\" />\n\n\t\t\t\t\t<span v-else-if=\"mimeIconUrl\"\n\t\t\t\t\t\tclass=\"files-list__row-icon-preview files-list__row-icon-preview--mime\"\n\t\t\t\t\t\t:style=\"{ backgroundImage: mimeIconUrl }\" />\n\n\t\t\t\t\t<FileIcon v-else />\n\n\t\t\t\t\t\x3c!-- Favorite icon --\x3e\n\t\t\t\t\t<span v-if=\"isFavorite\"\n\t\t\t\t\t\tclass=\"files-list__row-icon-favorite\"\n\t\t\t\t\t\t:aria-label=\"t('files', 'Favorite')\">\n\t\t\t\t\t\t<StarIcon aria-hidden=\"true\" :size=\"20\" />\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\n\t\t\t\t\x3c!-- File name --\x3e\n\t\t\t\t<span class=\"files-list__row-name-text\">{{ displayName }}</span>\n\t\t\t</a>\n\t\t</td>\n\n\t\t\x3c!-- Actions --\x3e\n\t\t<td :class=\"`files-list__row-actions-${uniqueId}`\" class=\"files-list__row-actions\">\n\t\t\t\x3c!-- Inline actions --\x3e\n\t\t\t\x3c!-- TODO: implement CustomElementRender --\x3e\n\n\t\t\t\x3c!-- Menu actions --\x3e\n\t\t\t<NcActions v-if=\"active\"\n\t\t\t\tref=\"actionsMenu\"\n\t\t\t\t:boundaries-element=\"boundariesElement\"\n\t\t\t\t:container=\"boundariesElement\"\n\t\t\t\t:disabled=\"source._loading\"\n\t\t\t\t:force-title=\"true\"\n\t\t\t\t:force-menu=\"true\"\n\t\t\t\t:inline=\"enabledInlineActions.length\"\n\t\t\t\t:open.sync=\"openedMenu\">\n\t\t\t\t<NcActionButton v-for=\"action in enabledMenuActions\"\n\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t:class=\"'files-list__row-action-' + action.id\"\n\t\t\t\t\t@click=\"onActionClick(action)\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcLoadingIcon v-if=\"loading === action.id\" :size=\"18\" />\n\t\t\t\t\t\t<CustomSvgIconRender v-else :svg=\"action.iconSvgInline([source], currentView)\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ action.displayName([source], currentView) }}\n\t\t\t\t</NcActionButton>\n\t\t\t</NcActions>\n\t\t</td>\n\n\t\t\x3c!-- Size --\x3e\n\t\t<td v-if=\"isSizeAvailable\"\n\t\t\t:style=\"{ opacity: sizeOpacity }\"\n\t\t\tclass=\"files-list__row-size\"\n\t\t\t@click=\"openDetailsIfAvailable\">\n\t\t\t<span>{{ size }}</span>\n\t\t</td>\n\n\t\t\x3c!-- View columns --\x3e\n\t\t<td v-for=\"column in columns\"\n\t\t\t:key=\"column.id\"\n\t\t\t:class=\"`files-list__row-${currentView?.id}-${column.id}`\"\n\t\t\tclass=\"files-list__row-column-custom\"\n\t\t\t@click=\"openDetailsIfAvailable\">\n\t\t\t<CustomElementRender v-if=\"active\"\n\t\t\t\t:current-view=\"currentView\"\n\t\t\t\t:render=\"column.render\"\n\t\t\t\t:source=\"source\" />\n\t\t</td>\n\t</Fragment>\n</template>\n\n<script lang='ts'>\nimport { debounce } from 'debounce'\nimport { formatFileSize } from '@nextcloud/files'\nimport { Fragment } from 'vue-frag'\nimport { join } from 'path'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport CancelablePromise from 'cancelable-promise'\nimport FileIcon from 'vue-material-design-icons/File.vue'\nimport FolderIcon from 'vue-material-design-icons/Folder.vue'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport StarIcon from 'vue-material-design-icons/Star.vue'\nimport Vue from 'vue'\n\nimport { ACTION_DETAILS } from '../actions/sidebarAction.ts'\nimport { getFileActions } from '../services/FileAction.ts'\nimport { hashCode } from '../utils/hashUtils.ts'\nimport { isCachedPreview } from '../services/PreviewService.ts'\nimport { useActionsMenuStore } from '../store/actionsmenu.ts'\nimport { useFilesStore } from '../store/files.ts'\nimport { useKeyboardStore } from '../store/keyboard.ts'\nimport { useSelectionStore } from '../store/selection.ts'\nimport { useUserConfigStore } from '../store/userconfig.ts'\nimport CustomElementRender from './CustomElementRender.vue'\nimport CustomSvgIconRender from './CustomSvgIconRender.vue'\nimport logger from '../logger.js'\n\n// The registered actions list\nconst actions = getFileActions()\n\nexport default Vue.extend({\n\tname: 'FileEntry',\n\n\tcomponents: {\n\t\tCustomElementRender,\n\t\tCustomSvgIconRender,\n\t\tFileIcon,\n\t\tFolderIcon,\n\t\tFragment,\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcLoadingIcon,\n\t\tStarIcon,\n\t},\n\n\tprops: {\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisSizeAvailable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsource: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tnodes: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tfilesListWidth: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst actionsMenuStore = useActionsMenuStore()\n\t\tconst filesStore = useFilesStore()\n\t\tconst keyboardStore = useKeyboardStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\tconst userConfigStore = useUserConfigStore()\n\t\treturn {\n\t\t\tactionsMenuStore,\n\t\t\tfilesStore,\n\t\t\tkeyboardStore,\n\t\t\tselectionStore,\n\t\t\tuserConfigStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tbackgroundFailed: false,\n\t\t\tbackgroundImage: '',\n\t\t\tboundariesElement: document.querySelector('.app-content > .files-list'),\n\t\t\tloading: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tuserConfig() {\n\t\t\treturn this.userConfigStore.userConfig\n\t\t},\n\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\t\tcolumns() {\n\t\t\t// Hide columns if the list is too small\n\t\t\tif (this.filesListWidth < 512) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.currentView?.columns || []\n\t\t},\n\n\t\tdir() {\n\t\t\t// Remove any trailing slash but leave root slash\n\t\t\treturn (this.$route?.query?.dir || '/').replace(/^(.+)\\/$/, '$1')\n\t\t},\n\t\tfileid() {\n\t\t\treturn this.source?.fileid?.toString?.()\n\t\t},\n\t\tdisplayName() {\n\t\t\treturn this.source.attributes.displayName\n\t\t\t\t|| this.source.basename\n\t\t},\n\n\t\tsize() {\n\t\t\tconst size = parseInt(this.source.size, 10) || 0\n\t\t\tif (typeof size !== 'number' || size < 0) {\n\t\t\t\treturn this.t('files', 'Pending')\n\t\t\t}\n\t\t\treturn formatFileSize(size, true)\n\t\t},\n\t\tsizeOpacity() {\n\t\t\tconst size = parseInt(this.source.size, 10) || 0\n\t\t\tif (!size || size < 0) {\n\t\t\t\treturn 1\n\t\t\t}\n\n\t\t\t// Whatever theme is active, the contrast will pass WCAG AA\n\t\t\t// with color main text over main background and an opacity of 0.7\n\t\t\tconst minOpacity = 0.7\n\t\t\tconst maxOpacitySize = 10 * 1024 * 1024\n\t\t\treturn minOpacity + (1 - minOpacity) * Math.pow((this.source.size / maxOpacitySize), 2)\n\t\t},\n\n\t\tlinkTo() {\n\t\t\tif (this.source.type === 'folder') {\n\t\t\t\tconst to = { ...this.$route, query: { dir: join(this.dir, this.source.basename) } }\n\t\t\t\treturn {\n\t\t\t\t\tis: 'router-link',\n\t\t\t\t\ttitle: this.t('files', 'Open folder {name}', { name: this.displayName }),\n\t\t\t\t\tto,\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\tconst action = this.enabledDefaultActions[0]\n\t\t\t\tconst displayName = action.displayName([this.source], this.currentView)\n\t\t\t\treturn {\n\t\t\t\t\ttitle: displayName,\n\t\t\t\t\trole: 'button',\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\thref: this.source.source,\n\t\t\t\t// TODO: Use first action title ?\n\t\t\t\ttitle: this.t('files', 'Download file {name}', { name: this.displayName }),\n\t\t\t}\n\t\t},\n\n\t\tselectedFiles() {\n\t\t\treturn this.selectionStore.selected\n\t\t},\n\t\tisSelected() {\n\t\t\treturn this.selectedFiles.includes(this.source?.fileid?.toString?.())\n\t\t},\n\n\t\tcropPreviews() {\n\t\t\treturn this.userConfig.crop_image_previews\n\t\t},\n\t\tpreviewUrl() {\n\t\t\ttry {\n\t\t\t\tconst url = new URL(window.location.origin + this.source.attributes.previewUrl)\n\t\t\t\t// Request tiny previews\n\t\t\t\turl.searchParams.set('x', '32')\n\t\t\t\turl.searchParams.set('y', '32')\n\t\t\t\t// Handle cropping\n\t\t\t\turl.searchParams.set('a', this.cropPreviews === true ? '0' : '1')\n\t\t\t\treturn url.href\n\t\t\t} catch (e) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\t\tmimeIconUrl() {\n\t\t\tconst mimeType = this.source.mime || 'application/octet-stream'\n\t\t\tconst mimeIconUrl = window.OC?.MimeType?.getIconUrl?.(mimeType)\n\t\t\tif (mimeIconUrl) {\n\t\t\t\treturn `url(${mimeIconUrl})`\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\n\t\tenabledActions() {\n\t\t\treturn actions\n\t\t\t\t.filter(action => !action.enabled || action.enabled([this.source], this.currentView))\n\t\t\t\t.sort((a, b) => (a.order || 0) - (b.order || 0))\n\t\t},\n\t\tenabledInlineActions() {\n\t\t\tif (this.filesListWidth < 768) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\n\t\t},\n\t\tenabledMenuActions() {\n\t\t\tif (this.filesListWidth < 768) {\n\t\t\t\t// If we have a default action, do not render the first one\n\t\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\t\treturn this.enabledActions.slice(1)\n\t\t\t\t}\n\t\t\t\treturn this.enabledActions\n\t\t\t}\n\n\t\t\tconst actions = [\n\t\t\t\t...this.enabledInlineActions,\n\t\t\t\t...this.enabledActions.filter(action => !action.inline),\n\t\t\t]\n\n\t\t\t// If we have a default action, do not render the first one\n\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\treturn actions.slice(1)\n\t\t\t}\n\n\t\t\treturn actions\n\t\t},\n\t\tenabledDefaultActions() {\n\t\t\treturn [\n\t\t\t\t...this.enabledActions.filter(action => action.default),\n\t\t\t]\n\t\t},\n\t\topenedMenu: {\n\t\t\tget() {\n\t\t\t\treturn this.actionsMenuStore.opened === this.uniqueId\n\t\t\t},\n\t\t\tset(opened) {\n\t\t\t\tthis.actionsMenuStore.opened = opened ? this.uniqueId : null\n\t\t\t},\n\t\t},\n\n\t\tuniqueId() {\n\t\t\treturn hashCode(this.source.source)\n\t\t},\n\n\t\tisFavorite() {\n\t\t\treturn this.source.attributes.favorite === 1\n\t\t},\n\t},\n\n\twatch: {\n\t\tactive(active, before) {\n\t\t\tif (active === false && before === true) {\n\t\t\t\tthis.resetState()\n\n\t\t\t\t// When the row is not active anymore\n\t\t\t\t// remove the display from the row to prevent\n\t\t\t\t// keyboard interaction with it.\n\t\t\t\tthis.$el.parentNode.style.display = 'none'\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Restore default tabindex\n\t\t\tthis.$el.parentNode.style.display = ''\n\t\t},\n\n\t\t/**\n\t\t * When the source changes, reset the preview\n\t\t * and fetch the new one.\n\t\t */\n\t\tpreviewUrl() {\n\t\t\tthis.clearImg()\n\t\t\tthis.debounceIfNotCached()\n\t\t},\n\t},\n\n\t/**\n\t * The row is mounted once and reused as we scroll.\n\t */\n\tmounted() {\n\t\t// ⚠ Init the debounce function on mount and\n\t\t// not when the module is imported to\n\t\t// avoid sharing between recycled components\n\t\tthis.debounceGetPreview = debounce(function() {\n\t\t\tthis.fetchAndApplyPreview()\n\t\t}, 150, false)\n\n\t\t// Fetch the preview on init\n\t\tthis.debounceIfNotCached()\n\n\t\t// Right click watcher on tr\n\t\tthis.$el.parentNode?.addEventListener?.('contextmenu', this.onRightClick)\n\t},\n\n\tbeforeDestroy() {\n\t\tthis.resetState()\n\t},\n\n\tmethods: {\n\t\tasync debounceIfNotCached() {\n\t\t\tif (!this.previewUrl) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Check if we already have this preview cached\n\t\t\tconst isCached = await isCachedPreview(this.previewUrl)\n\t\t\tif (isCached) {\n\t\t\t\tthis.backgroundImage = `url(${this.previewUrl})`\n\t\t\t\tthis.backgroundFailed = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// We don't have this preview cached or it expired, requesting it\n\t\t\tthis.debounceGetPreview()\n\t\t},\n\n\t\tfetchAndApplyPreview() {\n\t\t\t// Ignore if no preview\n\t\t\tif (!this.previewUrl) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If any image is being processed, reset it\n\t\t\tif (this.previewPromise) {\n\t\t\t\tthis.clearImg()\n\t\t\t}\n\n\t\t\t// Store the promise to be able to cancel it\n\t\t\tthis.previewPromise = new CancelablePromise((resolve, reject, onCancel) => {\n\t\t\t\tconst img = new Image()\n\t\t\t\t// If active, load the preview with higher priority\n\t\t\t\timg.fetchpriority = this.active ? 'high' : 'auto'\n\t\t\t\timg.onload = () => {\n\t\t\t\t\tthis.backgroundImage = `url(${this.previewUrl})`\n\t\t\t\t\tthis.backgroundFailed = false\n\t\t\t\t\tresolve(img)\n\t\t\t\t}\n\t\t\t\timg.onerror = () => {\n\t\t\t\t\tthis.backgroundFailed = true\n\t\t\t\t\treject(img)\n\t\t\t\t}\n\t\t\t\timg.src = this.previewUrl\n\n\t\t\t\t// Image loading has been canceled\n\t\t\t\tonCancel(() => {\n\t\t\t\t\timg.onerror = null\n\t\t\t\t\timg.onload = null\n\t\t\t\t\timg.src = ''\n\t\t\t\t})\n\t\t\t})\n\t\t},\n\n\t\tresetState() {\n\t\t\t// Reset loading state\n\t\t\tthis.loading = ''\n\n\t\t\t// Reset the preview\n\t\t\tthis.clearImg()\n\n\t\t\t// Close menu\n\t\t\tthis.openedMenu = false\n\t\t},\n\n\t\tclearImg() {\n\t\t\tthis.backgroundImage = ''\n\t\t\tthis.backgroundFailed = false\n\n\t\t\tif (this.previewPromise) {\n\t\t\t\tthis.previewPromise.cancel()\n\t\t\t\tthis.previewPromise = null\n\t\t\t}\n\t\t},\n\n\t\tasync onActionClick(action) {\n\t\t\tconst displayName = action.displayName([this.source], this.currentView)\n\t\t\ttry {\n\t\t\t\t// Set the loading marker\n\t\t\t\tthis.loading = action.id\n\t\t\t\tVue.set(this.source, '_loading', true)\n\n\t\t\t\tconst success = await action.exec(this.source, this.currentView, this.dir)\n\n\t\t\t\t// If the action returns null, we stay silent\n\t\t\t\tif (success === null) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (success) {\n\t\t\t\t\tshowSuccess(this.t('files', '\"{displayName}\" action executed successfully', { displayName }))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tshowError(this.t('files', '\"{displayName}\" action failed', { displayName }))\n\t\t\t} catch (e) {\n\t\t\t\tlogger.error('Error while executing action', { action, e })\n\t\t\t\tshowError(this.t('files', '\"{displayName}\" action failed', { displayName }))\n\t\t\t} finally {\n\t\t\t\t// Reset the loading marker\n\t\t\t\tthis.loading = ''\n\t\t\t\tVue.set(this.source, '_loading', false)\n\t\t\t}\n\t\t},\n\t\texecDefaultAction(event) {\n\t\t\t// Do not execute the default action on the folder, navigate instead\n\t\t\tif (this.source.type === 'folder') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t\t// Execute the first default action if any\n\t\t\t\tthis.enabledDefaultActions[0].exec(this.source, this.currentView, this.dir)\n\t\t\t}\n\t\t},\n\n\t\topenDetailsIfAvailable(event) {\n\t\t\tconst detailsAction = this.enabledDefaultActions.find(action => action.id === ACTION_DETAILS)\n\t\t\tif (detailsAction) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tdetailsAction.exec(this.source, this.currentView)\n\t\t\t}\n\t\t},\n\n\t\tonSelectionChange(selection) {\n\t\t\tconst newSelectedIndex = this.index\n\t\t\tconst lastSelectedIndex = this.selectionStore.lastSelectedIndex\n\n\t\t\t// Get the last selected and select all files in between\n\t\t\tif (this.keyboardStore?.shiftKey && lastSelectedIndex !== null) {\n\t\t\t\tconst isAlreadySelected = this.selectedFiles.includes(this.fileid)\n\n\t\t\t\tconst start = Math.min(newSelectedIndex, lastSelectedIndex)\n\t\t\t\tconst end = Math.max(lastSelectedIndex, newSelectedIndex)\n\n\t\t\t\tconst lastSelection = this.selectionStore.lastSelection\n\t\t\t\tconst filesToSelect = this.nodes\n\t\t\t\t\t.map(file => file.fileid?.toString?.())\n\t\t\t\t\t.slice(start, end + 1)\n\n\t\t\t\t// If already selected, update the new selection _without_ the current file\n\t\t\t\tconst selection = [...lastSelection, ...filesToSelect]\n\t\t\t\t\t.filter(fileId => !isAlreadySelected || fileId !== this.fileid)\n\n\t\t\t\tlogger.debug('Shift key pressed, selecting all files in between', { start, end, filesToSelect, isAlreadySelected })\n\t\t\t\t// Keep previous lastSelectedIndex to be use for further shift selections\n\t\t\t\tthis.selectionStore.set(selection)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlogger.debug('Updating selection', { selection })\n\t\t\tthis.selectionStore.set(selection)\n\t\t\tthis.selectionStore.setLastIndex(newSelectedIndex)\n\t\t},\n\n\t\t// Open the actions menu on right click\n\t\tonRightClick(event) {\n\t\t\t// If already opened, fallback to default browser\n\t\t\tif (this.openedMenu) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If the clicked row is in the selection, open global menu\n\t\t\tconst isMoreThanOneSelected = this.selectedFiles.length > 1\n\t\t\tthis.actionsMenuStore.opened = this.isSelected && isMoreThanOneSelected ? 'global' : this.uniqueId\n\n\t\t\t// Prevent any browser defaults\n\t\t\tevent.preventDefault()\n\t\t\tevent.stopPropagation()\n\t\t},\n\n\t\tt: translate,\n\t\tformatFileSize,\n\t},\n})\n<\/script>\n\n<style scoped lang='scss'>\n/* Hover effect on tbody lines only */\ntr {\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n}\n\n/* Preview not loaded animation effect */\n.files-list__row-icon-preview:not([style*='background']) {\n background: var(--color-loading-dark);\n\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\n}\n</style>\n\n<style>\n/* @keyframes preview-gradient-fade {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n} */\n</style>\n"],sourceRoot:""}]);const a=r}},i={};function o(t){var e=i[t];if(void 0!==e)return e.exports;var s=i[t]={id:t,loaded:!1,exports:{}};return n[t].call(s.exports,s,s.exports,o),s.loaded=!0,s.exports}o.m=n,e=[],o.O=(t,n,i,s)=>{if(!n){var r=1/0;for(d=0;d<e.length;d++){n=e[d][0],i=e[d][1],s=e[d][2];for(var a=!0,l=0;l<n.length;l++)(!1&s||r>=s)&&Object.keys(o.O).every((t=>o.O[t](n[l])))?n.splice(l--,1):(a=!1,s<r&&(r=s));if(a){e.splice(d--,1);var c=i();void 0!==c&&(t=c)}}return t}s=s||0;for(var d=e.length;d>0&&e[d-1][2]>s;d--)e[d]=e[d-1];e[d]=[n,i,s]},o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),o.j=2181,(()=>{o.b=document.baseURI||self.location.href;var t={2181:0};o.O.j=e=>0===t[e];var e=(e,n)=>{var i,s,r=n[0],a=n[1],l=n[2],c=0;if(r.some((e=>0!==t[e]))){for(i in a)o.o(a,i)&&(o.m[i]=a[i]);if(l)var d=l(o)}for(e&&e(n);c<r.length;c++)s=r[c],o.o(t,s)&&t[s]&&t[s][0](),t[s]=0;return o.O(d)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),o.nc=void 0;var s=o.O(void 0,[7874],(()=>o(9570)));s=o.O(s)})();
-//# sourceMappingURL=files-main.js.map?v=0a5d904187d2f3ea5928 \ No newline at end of file
+(()=>{"use strict";var e,n={9570:(e,n,i)=>{var o=i(17499),s=i(79954),r=i(31352),a=i(79753),l=i(45994);const c=function(){var t,e,n,i;const o=(null===(t=OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.App)||void 0===n||null===(i=n.currentFileList)||void 0===i?void 0:i.dirInfo)||{path:"/",name:""};return"".concat(o.path,"/").concat(o.name).replace(/\/\//gi,"/")};var d=i(4820),u=i(20144),p=i(62520),h=i(64024),f=i(93455),A=i.n(f),v=i(70110),m=i.n(v);const g=256,w={name:"TemplatePreview",inheritAttrs:!1,props:{basename:{type:String,required:!0},checked:{type:Boolean,default:!1},fileid:{type:[String,Number],required:!0},filename:{type:String,required:!0},previewUrl:{type:String,default:null},hasPreview:{type:Boolean,default:!0},mime:{type:String,required:!0},ratio:{type:Number,default:null}},data:()=>({failedPreview:!1}),computed:{nameWithoutExt(){return this.basename.indexOf(".")>-1?this.basename.split(".").slice(0,-1).join("."):this.basename},id(){return"template-picker-".concat(this.fileid)},realPreviewUrl(){return this.failedPreview&&this.mimeIcon?this.mimeIcon:this.previewUrl?this.previewUrl:(0,l.ts)()?(0,a.generateUrl)("/core/preview?fileId=".concat(this.fileid,"&x=").concat(g,"&y=").concat(g,"&a=1")):(0,a.generateUrl)("/apps/files_sharing/publicpreview/".concat(document.getElementById("sharingToken")&&document.getElementById("sharingToken").value,"?fileId=").concat(this.fileid,"&file=").concat(function(t){const e=(t.startsWith("/")?t:"/".concat(t)).split("/");let n="";return e.forEach((t=>{""!==t&&(n+="/"+encodeURIComponent(t))})),n}(this.filename),"&x=").concat(g,"&y=").concat(g,"&a=1"))},mimeIcon(){return OC.MimeType.getIconUrl(this.mime)}},methods:{onCheck(){this.$emit("check",this.fileid)},onFailure(){this.failedPreview=!0}}};var b=i(93379),C=i.n(b),y=i(7795),_=i.n(y),x=i(90569),S=i.n(x),k=i(3565),I=i.n(k),N=i(19216),E=i.n(N),F=i(44589),B=i.n(F),P=i(3491),D={};D.styleTagTransform=B(),D.setAttributes=I(),D.insert=S().bind(null,"head"),D.domAPI=_(),D.insertStyleElement=E(),C()(P.Z,D),P.Z&&P.Z.locals&&P.Z.locals;var T=i(51900);const z=(0,T.Z)(w,(function(){var t=this,e=t._self._c;return e("li",{staticClass:"template-picker__item"},[e("input",{staticClass:"radio",attrs:{id:t.id,type:"radio",name:"template-picker"},domProps:{checked:t.checked},on:{change:t.onCheck}}),t._v(" "),e("label",{staticClass:"template-picker__label",attrs:{for:t.id}},[e("div",{staticClass:"template-picker__preview",class:t.failedPreview?"template-picker__preview--failed":""},[e("img",{staticClass:"template-picker__image",attrs:{src:t.realPreviewUrl,alt:"",draggable:"false"},on:{error:t.onFailure}})]),t._v(" "),e("span",{staticClass:"template-picker__title"},[t._v("\n\t\t\t"+t._s(t.nameWithoutExt)+"\n\t\t")])])])}),[],!1,null,"6c072a31",null).exports;var L=i(25108);const U={name:"TemplatePicker",components:{NcEmptyContent:A(),NcModal:m(),TemplatePreview:z},props:{logger:{type:Object,required:!0}},data:()=>({checked:-1,loading:!1,name:null,opened:!1,provider:null}),computed:{nameWithoutExt(){return this.name.indexOf(".")>-1?this.name.split(".").slice(0,-1).join("."):this.name},emptyTemplate(){var e,n;return{basename:t("files","Blank"),fileid:-1,filename:this.t("files","Blank"),hasPreview:!1,mime:(null===(e=this.provider)||void 0===e?void 0:e.mimetypes[0])||(null===(n=this.provider)||void 0===n?void 0:n.mimetypes)}},selectedTemplate(){return this.provider.templates.find((t=>t.fileid===this.checked))},style(){return{"--margin":"8px","--width":"160px","--border":"2px","--fullwidth":"180px","--height":this.provider.ratio?Math.round(160/this.provider.ratio)+"px":null}}},methods:{async open(t,e){this.checked=this.emptyTemplate.fileid,this.name=t,this.provider=e;const n=(await async function(){return(await d.default.get((0,a.generateOcsUrl)("apps/files/api/v1/templates"))).data.ocs.data}()).find((t=>t.app===e.app&&t.label===e.label));if(null===n)throw new Error("Failed to match provider in results");this.provider=n,0!==n.templates.length?this.opened=!0:this.onSubmit()},close(){this.checked=this.emptyTemplate.fileid,this.loading=!1,this.name=null,this.opened=!1,this.provider=null},onCheck(t){this.checked=t},async onSubmit(){var t,e,n;this.loading=!0;const i=c(),o=null===(t=OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.App)||void 0===n?void 0:n.currentFileList;var s,r;this.nameWithoutExt===this.name&&(this.logger.debug("Fixed invalid filename",{name:this.name,extension:null===(s=this.provider)||void 0===s?void 0:s.extension}),this.name=this.name+(null===(r=this.provider)||void 0===r?void 0:r.extension));try{var l,u;const t=await async function(t,e,n){return(await d.default.post((0,a.generateOcsUrl)("apps/files/api/v1/templates/create"),{filePath:t,templatePath:e,templateType:n})).data.ocs.data}((0,p.normalize)("".concat(i,"/").concat(this.name)),null===(l=this.selectedTemplate)||void 0===l?void 0:l.filename,null===(u=this.selectedTemplate)||void 0===u?void 0:u.templateType);this.logger.debug("Created new file",t);const e=await(null==o?void 0:o.addAndFetchFileInfo(this.name).then(((t,e)=>e))),n=new OCA.Files.FileInfoModel(e,{filesClient:null==o?void 0:o.filesClient}),s=OCA.Files.fileActions.getDefaultFileAction(t.mime,"file",OC.PERMISSION_ALL);s&&s.action(t.basename,{$file:null==o?void 0:o.findFileEl(this.name),dir:i,fileList:o,fileActions:null==o?void 0:o.fileActions,fileInfoModel:n}),this.close()}catch(t){this.logger.error("Error while creating the new file from template"),L.error(t),(0,h.x2)(this.t("files","Unable to create new file from template"))}finally{this.loading=!1}}}};var V=i(5103),O={};O.styleTagTransform=B(),O.setAttributes=I(),O.insert=S().bind(null,"head"),O.domAPI=_(),O.insertStyleElement=E(),C()(V.Z,O),V.Z&&V.Z.locals&&V.Z.locals;const Z=(0,T.Z)(U,(function(){var t=this,e=t._self._c;return t.opened?e("NcModal",{staticClass:"templates-picker",attrs:{"clear-view-delay":-1,size:"normal"},on:{close:t.close}},[e("form",{staticClass:"templates-picker__form",style:t.style,on:{submit:function(e){return e.preventDefault(),e.stopPropagation(),t.onSubmit.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("files","Pick a template for {name}",{name:t.nameWithoutExt})))]),t._v(" "),e("ul",{staticClass:"templates-picker__list"},[e("TemplatePreview",t._b({attrs:{checked:t.checked===t.emptyTemplate.fileid},on:{check:t.onCheck}},"TemplatePreview",t.emptyTemplate,!1)),t._v(" "),t._l(t.provider.templates,(function(n){return e("TemplatePreview",t._b({key:n.fileid,attrs:{checked:t.checked===n.fileid,ratio:t.provider.ratio},on:{check:t.onCheck}},"TemplatePreview",n,!1))}))],2),t._v(" "),e("div",{staticClass:"templates-picker__buttons"},[e("button",{on:{click:t.close}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Cancel"))+"\n\t\t\t")]),t._v(" "),e("input",{staticClass:"primary",attrs:{type:"submit","aria-label":t.t("files","Create a new file with the selected template")},domProps:{value:t.t("files","Create")}})])]),t._v(" "),t.loading?e("NcEmptyContent",{staticClass:"templates-picker__loading",attrs:{icon:"icon-loading"}},[t._v("\n\t\t"+t._s(t.t("files","Creating file"))+"\n\t")]):t._e()],1):t._e()}),[],!1,null,"715b4161",null).exports,q=(0,o.IY)().setApp("files").detectUser().build();u.default.mixin({methods:{t:r.Iu,n:r.uN}});const R=document.createElement("div");R.id="template-picker",document.body.appendChild(R);let j=(0,s.j)("files","templates",[]),M=(0,s.j)("files","templates_path",!1);q.debug("Templates providers",j),q.debug("Templates folder",{templatesPath:M});const $=new(u.default.extend(Z))({name:"TemplatePicker",propsData:{logger:q}});$.$mount("#template-picker"),window.addEventListener("DOMContentLoaded",(function(){if(!M){q.debug("Templates folder not initialized");const t={attach(t){t.addMenuEntry({id:"template-init",displayName:(0,r.Iu)("files","Set up templates folder"),templateName:(0,r.Iu)("files","Templates"),iconClass:"icon-template-add",fileType:"file",actionLabel:(0,r.Iu)("files","Create new templates folder"),actionHandler(e){W(e),t.removeMenuEntry("template-init")}})}};OC.Plugins.register("OCA.Files.NewFileMenu",t)}})),j.forEach(((t,e)=>{const n={attach(n){const i=n.fileList;"files"!==i.id&&"files.public"!==i.id||n.addMenuEntry({id:"template-new-".concat(t.app,"-").concat(e),displayName:t.label,templateName:t.label+t.extension,iconClass:t.iconClass||"icon-file",fileType:"file",actionLabel:t.actionLabel,actionHandler(e){$.open(e,t)}})}};OC.Plugins.register("OCA.Files.NewFileMenu",n)}));const W=async function(t){const e=(c()+"/".concat(t)).replace("//","/");try{q.debug("Initializing the templates directory",{templatePath:e});const t=await d.default.post((0,a.generateOcsUrl)("apps/files/api/v1/templates/path"),{templatePath:e,copySystemTemplates:!0});OCA.Files.App.currentFileList.changeDirectory(e,!0,!0),j=t.data.ocs.data.templates,M=t.data.ocs.data.template_path}catch(t){q.error("Unable to initialize the templates directory"),(0,h.x2)((0,r.Iu)("files","Unable to initialize the templates directory"))}};var G=i(78595);!function(){const t={attach(t){(0,G.Ld)("nextcloud:unified-search.search",(e=>{let{query:n}=e;t.setFilter(n)})),(0,G.Ld)("nextcloud:unified-search.reset",(()=>{this.query=null,t.setFilter("")}))}};window.OC.Plugins.register("OCA.Files.FileList",t)}();var H=i(91770),K=i(78510);const Q=(0,o.IY)().setApp("files").detectUser().build();class Y{constructor(t){var e,n,i;e=this,i=void 0,(n=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(n="_action"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this.validateAction(t),this._action=t}get id(){return this._action.id}get displayName(){return this._action.displayName}get iconSvgInline(){return this._action.iconSvgInline}get enabled(){return this._action.enabled}get exec(){return this._action.exec}get execBatch(){return this._action.execBatch}get order(){return this._action.order}get default(){return this._action.default}get inline(){return this._action.inline}get renderInline(){return this._action.renderInline}validateAction(t){if(!t.id||"string"!=typeof t.id)throw new Error("Invalid id");if(!t.displayName||"function"!=typeof t.displayName)throw new Error("Invalid displayName function");if(!t.iconSvgInline||"function"!=typeof t.iconSvgInline)throw new Error("Invalid iconSvgInline function");if(!t.exec||"function"!=typeof t.exec)throw new Error("Invalid exec function");if("enabled"in t&&"function"!=typeof t.enabled)throw new Error("Invalid enabled function");if("execBatch"in t&&"function"!=typeof t.execBatch)throw new Error("Invalid execBatch function");if("order"in t&&"number"!=typeof t.order)throw new Error("Invalid order");if("default"in t&&"boolean"!=typeof t.default)throw new Error("Invalid default");if("inline"in t&&"function"!=typeof t.inline)throw new Error("Invalid inline function");if("renderInline"in t&&"function"!=typeof t.renderInline)throw new Error("Invalid renderInline function")}}const J=function(t){void 0===window._nc_fileactions&&(window._nc_fileactions=[],Q.debug("FileActions initialized")),window._nc_fileactions.find((e=>e.id===t.id))?Q.error("FileAction ".concat(t.id," already registered"),{action:t}):window._nc_fileactions.push(t)},X=function(){return window._nc_fileactions||[]};J(new Y({id:"delete",displayName:(t,e)=>"trashbin"===e.id?(0,r.Iu)("files_trashbin","Delete permanently"):(0,r.Iu)("files","Delete"),iconSvgInline:()=>K,enabled:t=>t.length>0&&t.map((t=>t.permissions)).every((t=>0!=(t&H.y3.DELETE))),async exec(t){try{return await d.default.delete(t.source),(0,G.j8)("files:node:deleted",t),!0}catch(e){return Q.error("Error while deleting a file",{error:e,source:t.source,node:t}),!1}},async execBatch(t,e,n){return Promise.all(t.map((t=>this.exec(t,e,n))))},order:100}));var tt=i(48250);const et="details";J(new Y({id:et,displayName:()=>(0,r.Iu)("files","Details"),iconSvgInline:()=>tt,enabled:t=>{var e,n,i;return!(null===(e=window)||void 0===e||null===(n=e.OCA)||void 0===n||null===(i=n.Files)||void 0===i||!i.Sidebar)&&t.some((t=>{var e;return null===(e=t.root)||void 0===e?void 0:e.startsWith("/files/")}))},async exec(t){try{var e,n,i,o,s;return null===(e=window)||void 0===e||null===(n=e.OCA)||void 0===n||null===(i=n.Files)||void 0===i||null===(o=i.Sidebar)||void 0===o||null===(s=o.open)||void 0===s||s.call(o,t.path),null}catch(t){return Q.error("Error while opening sidebar",{error:t}),!1}},default:!0,order:-50}));var nt=i(59305),it=i(23664),ot=i(69680),st=i.n(ot),rt=i(10861),at=i.n(rt),lt=i(64192),ct=i.n(lt),dt=i(33581);const ut=function(){const t=(0,nt.Q_)("files",{state:()=>({files:{},roots:{}}),getters:{getNode:t=>e=>t.files[e],getNodes:t=>e=>e.map((e=>t.files[e])).filter(Boolean),getRoot:t=>e=>t.roots[e]},actions:{updateNodes(t){const e=t.reduce(((t,e)=>e.fileid?(t[e.fileid]=e,t):(Q.warn("Trying to update/set a node without fileid",e),t)),{});u.default.set(this,"files",{...this.files,...e})},deleteNodes(t){t.forEach((t=>{t.fileid&&u.default.delete(this.files,t.fileid)}))},setRoot(t){let{service:e,root:n}=t;u.default.set(this.roots,e,n)},onDeletedNode(t){this.deleteNodes([t])}}})(...arguments);return t._initialized||((0,G.Ld)("files:node:deleted",t.onDeletedNode),t._initialized=!0),t},pt=function(){const t=(0,nt.Q_)("paths",{state:()=>({paths:{}}),getters:{getPath:t=>(e,n)=>{if(t.paths[e])return t.paths[e][n]}},actions:{addPath(t){this.paths[t.service]||u.default.set(this.paths,t.service,{}),u.default.set(this.paths[t.service],t.path,t.fileid)}}})(...arguments);return t._initialized||(t._initialized=!0),t},ht=(0,nt.Q_)("selection",{state:()=>({selected:[],lastSelection:[],lastSelectedIndex:null}),actions:{set(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];u.default.set(this,"selected",t)},setLastIndex(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;u.default.set(this,"lastSelection",t?this.selected:[]),u.default.set(this,"lastSelectedIndex",t)},reset(){u.default.set(this,"selected",[]),u.default.set(this,"lastSelection",[]),u.default.set(this,"lastSelectedIndex",null)}}}),ft=(0,s.j)("files","viewConfigs",{}),At=function(){const t=(0,nt.Q_)("viewconfig",{state:()=>({viewConfig:ft}),getters:{getConfig:t=>e=>t.viewConfig[e]||{}},actions:{onUpdate(t,e,n){this.viewConfig[t]||u.default.set(this.viewConfig,t,{}),u.default.set(this.viewConfig[t],e,n)},async update(t,e,n){d.default.put((0,a.generateUrl)("/apps/files/api/v1/views/".concat(t,"/").concat(e)),{value:n}),(0,G.j8)("files:viewconfig:updated",{view:t,key:e,value:n})},setSortingBy(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"basename",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"files";this.update(e,"sorting_mode",t),this.update(e,"sorting_direction","asc")},toggleSortingDirection(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"files";const e="asc"===(this.getConfig(t)||{sorting_direction:"asc"}).sorting_direction?"desc":"asc";this.update(t,"sorting_direction",e)}}}),e=t(...arguments);return e._initialized||((0,G.Ld)("files:viewconfig:updated",(function(t){let{view:n,key:i,value:o}=t;e.onUpdate(n,i,o)})),e._initialized=!0),e};var vt=i(15764),mt=i(64412),gt=i.n(mt),wt=i(44706),bt=i.n(wt);const Ct=u.default.extend({name:"BreadCrumbs",components:{Home:vt.Z,NcBreadcrumbs:bt(),NcBreadcrumb:gt()},props:{path:{type:String,default:"/"}},setup:()=>({filesStore:ut(),pathsStore:pt()}),computed:{currentView(){return this.$navigation.active},dirs(){var t;return["/",...this.path.split("/").filter(Boolean).map((t="/",e=>t+="".concat(e,"/"))).map((t=>t.replace(/^(.+)\/$/,"$1")))]},sections(){return this.dirs.map((t=>{const e={...this.$route,query:{dir:t}};return{dir:t,exact:!0,name:this.getDirDisplayName(t),to:e}}))}},methods:{getNodeFromId(t){return this.filesStore.getNode(t)},getFileIdFromPath(t){var e;return this.pathsStore.getPath(null===(e=this.currentView)||void 0===e?void 0:e.id,t)},getDirDisplayName(e){var n;if("/"===e)return t("files","Home");const i=this.getFileIdFromPath(e),o=this.getNodeFromId(i);return(null==o||null===(n=o.attributes)||void 0===n?void 0:n.displayName)||(0,p.basename)(e)},onClick(t){var e;(null==t||null===(e=t.query)||void 0===e?void 0:e.dir)===this.$route.query.dir&&this.$emit("reload")},ariaLabel(e){var n,i;return(null==e||null===(n=e.to)||void 0===n||null===(i=n.query)||void 0===i?void 0:i.dir)===this.$route.query.dir?t("files","Reload current directory"):t("files",'Go to the "{dir}" directory',e)}}});var yt=i(39959),_t={};_t.styleTagTransform=B(),_t.setAttributes=I(),_t.insert=S().bind(null,"head"),_t.domAPI=_(),_t.insertStyleElement=E(),C()(yt.Z,_t),yt.Z&&yt.Z.locals&&yt.Z.locals;const xt=(0,T.Z)(Ct,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("NcBreadcrumbs",{attrs:{"data-cy-files-content-breadcrumbs":""}},t._l(t.sections,(function(n,i){return e("NcBreadcrumb",t._b({key:n.dir,attrs:{"aria-label":t.ariaLabel(n),title:t.ariaLabel(n)},nativeOn:{click:function(e){return t.onClick(n.to)}},scopedSlots:t._u([0===i?{key:"icon",fn:function(){return[e("Home",{attrs:{size:20}})]},proxy:!0}:null],null,!0)},"NcBreadcrumb",n,!1))})),1)}),[],!1,null,"68b3b20b",null).exports;var St=i(35212),kt=i(20296),It=i(74139),Nt=i(3443),Et=i.n(Nt),Ft=i(79855),Bt=i(34829),Pt=i(45400),Dt=i.n(Pt),Tt=i(12945),zt=i.n(Tt),Lt=i(20571),Ut=i.n(Lt),Vt=i(4777);const Ot=(0,nt.Q_)("actionsmenu",{state:()=>({opened:null})}),Zt=(0,s.j)("files","config",{show_hidden:!1,crop_image_previews:!0}),qt=function(){const t=(0,nt.Q_)("userconfig",{state:()=>({userConfig:Zt}),actions:{onUpdate(t,e){u.default.set(this.userConfig,t,e)},async update(t,e){await d.default.put((0,a.generateUrl)("/apps/files/api/v1/config/"+t),{value:e}),(0,G.j8)("files:config:updated",{key:t,value:e})}}})(...arguments);return t._initialized||((0,G.Ld)("files:config:updated",(function(e){let{key:n,value:i}=e;t.onUpdate(n,i)})),t._initialized=!0),t},Rt={name:"CustomElementRender",props:{source:{type:Object,required:!0},currentView:{type:Object,required:!0},render:{type:Function,required:!0}},computed:{element(){return this.render(this.source,this.currentView)}},watch:{element(){this.$el.replaceWith(this.element),this.$el=this.element}},mounted(){this.$el.replaceWith(this.element),this.$el=this.element}},jt=(0,T.Z)(Rt,(function(){return(0,this._self._c)("span")}),[],!1,null,null,null).exports;var Mt=i(27856);const $t={name:"CustomSvgIconRender",props:{svg:{type:String,required:!0}},watch:{svg(){this.$el.innerHTML=(0,Mt.sanitize)(this.svg)}},mounted(){this.$el.innerHTML=(0,Mt.sanitize)(this.svg)}};var Wt=i(61959),Gt={};Gt.styleTagTransform=B(),Gt.setAttributes=I(),Gt.insert=S().bind(null,"head"),Gt.domAPI=_(),Gt.insertStyleElement=E(),C()(Wt.Z,Gt),Wt.Z&&Wt.Z.locals&&Wt.Z.locals;const Ht=(0,T.Z)($t,(function(){return(0,this._self._c)("span",{staticClass:"custom-svg-icon"})}),[],!1,null,"93e9b2f4",null).exports,Kt=X(),Qt=u.default.extend({name:"FileEntry",components:{CustomElementRender:jt,CustomSvgIconRender:Ht,FileIcon:Ft.Z,FolderIcon:Bt.default,Fragment:It.H,NcActionButton:Dt(),NcActions:zt(),NcCheckboxRadioSwitch:Ut(),NcLoadingIcon:ct(),StarIcon:Vt.default},props:{active:{type:Boolean,default:!1},isSizeAvailable:{type:Boolean,default:!1},source:{type:Object,required:!0},index:{type:Number,required:!0},nodes:{type:Array,required:!0},filesListWidth:{type:Number,default:0}},setup(){const t=Ot(),e=ut(),n=function(){const t=(0,nt.Q_)("keyboard",{state:()=>({altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1}),actions:{onEvent(t){t||(t=window.event),u.default.set(this,"altKey",!!t.altKey),u.default.set(this,"ctrlKey",!!t.ctrlKey),u.default.set(this,"metaKey",!!t.metaKey),u.default.set(this,"shiftKey",!!t.shiftKey)}}})(...arguments);return t._initialized||(window.addEventListener("keydown",t.onEvent),window.addEventListener("keyup",t.onEvent),window.addEventListener("mousemove",t.onEvent),t._initialized=!0),t}();return{actionsMenuStore:t,filesStore:e,keyboardStore:n,selectionStore:ht(),userConfigStore:qt()}},data:()=>({backgroundFailed:!1,backgroundImage:"",boundariesElement:document.querySelector(".app-content > .files-list"),loading:""}),computed:{userConfig(){return this.userConfigStore.userConfig},currentView(){return this.$navigation.active},columns(){var t;return this.filesListWidth<512?[]:(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},fileid(){var t,e,n;return null===(t=this.source)||void 0===t||null===(e=t.fileid)||void 0===e||null===(n=e.toString)||void 0===n?void 0:n.call(e)},displayName(){return this.source.attributes.displayName||this.source.basename},size(){const t=parseInt(this.source.size,10)||0;return"number"!=typeof t||t<0?this.t("files","Pending"):(0,H.sS)(t,!0)},sizeOpacity(){const t=parseInt(this.source.size,10)||0;return!t||t<0?1:.7+(1-.7)*Math.pow(this.source.size/10485760,2)},linkTo(){if("folder"===this.source.type){const t={...this.$route,query:{dir:(0,p.join)(this.dir,this.source.basename)}};return{is:"router-link",title:this.t("files","Open folder {name}",{name:this.displayName}),to:t}}return this.enabledDefaultActions.length>0?{title:this.enabledDefaultActions[0].displayName([this.source],this.currentView),role:"button"}:{href:this.source.source,title:this.t("files","Download file {name}",{name:this.displayName})}},selectedFiles(){return this.selectionStore.selected},isSelected(){var t,e,n;return this.selectedFiles.includes(null===(t=this.source)||void 0===t||null===(e=t.fileid)||void 0===e||null===(n=e.toString)||void 0===n?void 0:n.call(e))},cropPreviews(){return this.userConfig.crop_image_previews},previewUrl(){try{const t=new URL(window.location.origin+this.source.attributes.previewUrl);return t.searchParams.set("x","32"),t.searchParams.set("y","32"),t.searchParams.set("a",!0===this.cropPreviews?"0":"1"),t.href}catch(t){return null}},mimeIconUrl(){var t,e,n;const i=this.source.mime||"application/octet-stream",o=null===(t=window.OC)||void 0===t||null===(e=t.MimeType)||void 0===e||null===(n=e.getIconUrl)||void 0===n?void 0:n.call(e,i);return o?"url(".concat(o,")"):""},enabledActions(){return Kt.filter((t=>!t.enabled||t.enabled([this.source],this.currentView))).sort(((t,e)=>(t.order||0)-(e.order||0)))},enabledInlineActions(){return this.filesListWidth<768?[]:this.enabledActions.filter((t=>{var e;return null==t||null===(e=t.inline)||void 0===e?void 0:e.call(t,this.source,this.currentView)}))},enabledMenuActions(){if(this.filesListWidth<768)return this.enabledDefaultActions.length>0?this.enabledActions.slice(1):this.enabledActions;const t=[...this.enabledInlineActions,...this.enabledActions.filter((t=>!t.inline))];return this.enabledDefaultActions.length>0?t.slice(1):t},enabledDefaultActions(){return[...this.enabledActions.filter((t=>t.default))]},openedMenu:{get(){return this.actionsMenuStore.opened===this.uniqueId},set(t){this.actionsMenuStore.opened=t?this.uniqueId:null}},uniqueId(){return this.source.source.split("").reduce((function(t,e){return(t=(t<<5)-t+e.charCodeAt(0))&t}),0)},isFavorite(){return 1===this.source.attributes.favorite}},watch:{active(t,e){if(!1===t&&!0===e)return this.resetState(),void(this.$el.parentNode.style.display="none");this.$el.parentNode.style.display=""},previewUrl(){this.clearImg(),this.debounceIfNotCached()}},mounted(){var t,e;this.debounceGetPreview=(0,kt.debounce)((function(){this.fetchAndApplyPreview()}),150,!1),this.debounceIfNotCached(),null===(t=this.$el.parentNode)||void 0===t||null===(e=t.addEventListener)||void 0===e||e.call(t,"contextmenu",this.onRightClick)},beforeDestroy(){this.resetState()},methods:{async debounceIfNotCached(){var t;if(this.previewUrl)return await(t=this.previewUrl,caches.open("previews").then((function(e){return e.match(t).then((function(t){return!!t}))})))?(this.backgroundImage="url(".concat(this.previewUrl,")"),void(this.backgroundFailed=!1)):void this.debounceGetPreview()},fetchAndApplyPreview(){this.previewUrl&&(this.previewPromise&&this.clearImg(),this.previewPromise=new(Et())(((t,e,n)=>{const i=new Image;i.fetchpriority=this.active?"high":"auto",i.onload=()=>{this.backgroundImage="url(".concat(this.previewUrl,")"),this.backgroundFailed=!1,t(i)},i.onerror=()=>{this.backgroundFailed=!0,e(i)},i.src=this.previewUrl,n((()=>{i.onerror=null,i.onload=null,i.src=""}))})))},resetState(){this.loading="",this.clearImg(),this.openedMenu=!1},clearImg(){this.backgroundImage="",this.backgroundFailed=!1,this.previewPromise&&(this.previewPromise.cancel(),this.previewPromise=null)},async onActionClick(t){const e=t.displayName([this.source],this.currentView);try{this.loading=t.id,u.default.set(this.source,"_loading",!0);const n=await t.exec(this.source,this.currentView,this.dir);if(null===n)return;if(n)return void(0,h.s$)(this.t("files",'"{displayName}" action executed successfully',{displayName:e}));(0,h.x2)(this.t("files",'"{displayName}" action failed',{displayName:e}))}catch(n){Q.error("Error while executing action",{action:t,e:n}),(0,h.x2)(this.t("files",'"{displayName}" action failed',{displayName:e}))}finally{this.loading="",u.default.set(this.source,"_loading",!1)}},execDefaultAction(t){"folder"!==this.source.type&&this.enabledDefaultActions.length>0&&(t.preventDefault(),t.stopPropagation(),this.enabledDefaultActions[0].exec(this.source,this.currentView,this.dir))},openDetailsIfAvailable(t){const e=this.enabledDefaultActions.find((t=>t.id===et));e&&(t.preventDefault(),t.stopPropagation(),e.exec(this.source,this.currentView))},onSelectionChange(t){var e;const n=this.index,i=this.selectionStore.lastSelectedIndex;if(null!==(e=this.keyboardStore)&&void 0!==e&&e.shiftKey&&null!==i){const t=this.selectedFiles.includes(this.fileid),e=Math.min(n,i),o=Math.max(i,n),s=this.selectionStore.lastSelection,r=this.nodes.map((t=>{var e,n;return null===(e=t.fileid)||void 0===e||null===(n=e.toString)||void 0===n?void 0:n.call(e)})).slice(e,o+1),a=[...s,...r].filter((e=>!t||e!==this.fileid));return Q.debug("Shift key pressed, selecting all files in between",{start:e,end:o,filesToSelect:r,isAlreadySelected:t}),void this.selectionStore.set(a)}Q.debug("Updating selection",{selection:t}),this.selectionStore.set(t),this.selectionStore.setLastIndex(n)},onRightClick(t){if(this.openedMenu)return;const e=this.selectedFiles.length>1;this.actionsMenuStore.opened=this.isSelected&&e?"global":this.uniqueId,t.preventDefault(),t.stopPropagation()},t:r.Iu,formatFileSize:H.sS}});var Yt=i(13352),Jt={};Jt.styleTagTransform=B(),Jt.setAttributes=I(),Jt.insert=S().bind(null,"head"),Jt.domAPI=_(),Jt.insertStyleElement=E(),C()(Yt.Z,Jt),Yt.Z&&Yt.Z.locals&&Yt.Z.locals;var Xt=i(37020),te={};te.styleTagTransform=B(),te.setAttributes=I(),te.insert=S().bind(null,"head"),te.domAPI=_(),te.insertStyleElement=E(),C()(Xt.Z,te),Xt.Z&&Xt.Z.locals&&Xt.Z.locals;const ee=(0,T.Z)(Qt,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("Fragment",[e("td",{staticClass:"files-list__row-checkbox"},[t.active?e("NcCheckboxRadioSwitch",{attrs:{"aria-label":t.t("files","Select the row for {displayName}",{displayName:t.displayName}),checked:t.selectedFiles,value:t.fileid,name:"selectedFiles"},on:{"update:checked":t.onSelectionChange}}):t._e()],1),t._v(" "),e("td",{staticClass:"files-list__row-name"},[e("a",t._b({ref:"name",on:{click:t.execDefaultAction}},"a",t.linkTo,!1),[e("span",{staticClass:"files-list__row-icon"},["folder"===t.source.type?e("FolderIcon"):t.previewUrl&&!t.backgroundFailed?e("span",{ref:"previewImg",staticClass:"files-list__row-icon-preview",style:{backgroundImage:t.backgroundImage}}):t.mimeIconUrl?e("span",{staticClass:"files-list__row-icon-preview files-list__row-icon-preview--mime",style:{backgroundImage:t.mimeIconUrl}}):e("FileIcon"),t._v(" "),t.isFavorite?e("span",{staticClass:"files-list__row-icon-favorite",attrs:{"aria-label":t.t("files","Favorite")}},[e("StarIcon",{attrs:{"aria-hidden":"true",size:20}})],1):t._e()],1),t._v(" "),e("span",{staticClass:"files-list__row-name-text"},[t._v(t._s(t.displayName))])])]),t._v(" "),e("td",{staticClass:"files-list__row-actions",class:"files-list__row-actions-".concat(t.uniqueId)},[t.active?e("NcActions",{ref:"actionsMenu",attrs:{"boundaries-element":t.boundariesElement,container:t.boundariesElement,disabled:t.source._loading,"force-title":!0,"force-menu":!0,inline:t.enabledInlineActions.length,open:t.openedMenu},on:{"update:open":function(e){t.openedMenu=e}}},t._l(t.enabledMenuActions,(function(n){return e("NcActionButton",{key:n.id,class:"files-list__row-action-"+n.id,on:{click:function(e){return t.onActionClick(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading===n.id?e("NcLoadingIcon",{attrs:{size:18}}):e("CustomSvgIconRender",{attrs:{svg:n.iconSvgInline([t.source],t.currentView)}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t"+t._s(n.displayName([t.source],t.currentView))+"\n\t\t\t")])})),1):t._e()],1),t._v(" "),t.isSizeAvailable?e("td",{staticClass:"files-list__row-size",style:{opacity:t.sizeOpacity},on:{click:t.openDetailsIfAvailable}},[e("span",[t._v(t._s(t.size))])]):t._e(),t._v(" "),t._l(t.columns,(function(n){var i;return e("td",{key:n.id,staticClass:"files-list__row-column-custom",class:"files-list__row-".concat(null===(i=t.currentView)||void 0===i?void 0:i.id,"-").concat(n.id),on:{click:t.openDetailsIfAvailable}},[t.active?e("CustomElementRender",{attrs:{"current-view":t.currentView,render:n.render,source:t.source}}):t._e()],1)}))],2)}),[],!1,null,"0600090e",null).exports,ne=u.default.extend({name:"FilesListFooter",components:{},props:{isSizeAvailable:{type:Boolean,default:!1},nodes:{type:Array,required:!0},summary:{type:String,default:""},filesListWidth:{type:Number,default:0}},setup(){const t=pt();return{filesStore:ut(),pathsStore:t}},computed:{currentView(){return this.$navigation.active},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},currentFolder(){var t;if(null===(t=this.currentView)||void 0===t||!t.id)return;if("/"===this.dir)return this.filesStore.getRoot(this.currentView.id);const e=this.pathsStore.getPath(this.currentView.id,this.dir);return this.filesStore.getNode(e)},columns(){var t;return this.filesListWidth<512?[]:(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},totalSize(){var t;return null!==(t=this.currentFolder)&&void 0!==t&&t.size?(0,H.sS)(this.currentFolder.size,!0):(0,H.sS)(this.nodes.reduce(((t,e)=>t+e.size||0),0),!0)}},methods:{classForColumn(t){return{"files-list__row-column-custom":!0,["files-list__row-".concat(this.currentView.id,"-").concat(t.id)]:!0}},t:r.Iu}});var ie=i(97105),oe={};oe.styleTagTransform=B(),oe.setAttributes=I(),oe.insert=S().bind(null,"head"),oe.domAPI=_(),oe.insertStyleElement=E(),C()(ie.Z,oe),ie.Z&&ie.Z.locals&&ie.Z.locals;const se=(0,T.Z)(ne,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("tr",[e("th",{staticClass:"files-list__row-checkbox"},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("files","Total rows summary")))])]),t._v(" "),e("td",{staticClass:"files-list__row-name"},[e("span",{staticClass:"files-list__row-icon"}),t._v(" "),e("span",[t._v(t._s(t.summary))])]),t._v(" "),e("td",{staticClass:"files-list__row-actions"}),t._v(" "),t.isSizeAvailable?e("td",{staticClass:"files-list__column files-list__row-size"},[e("span",[t._v(t._s(t.totalSize))])]):t._e(),t._v(" "),t._l(t.columns,(function(n){var i;return e("th",{key:n.id,class:t.classForColumn(n)},[e("span",[t._v(t._s(null===(i=n.summary)||void 0===i?void 0:i.call(n,t.nodes,t.currentView)))])])}))],2)}),[],!1,null,"e6a083be",null).exports,re=u.default.extend({data:()=>({filesListWidth:null}),created(){const t=document.querySelector("#app-content-vue");this.$resizeObserver=new ResizeObserver((e=>{e.length>0&&e[0].target===t&&(this.filesListWidth=e[0].contentRect.width)})),this.$resizeObserver.observe(t)},beforeDestroy(){this.$resizeObserver.disconnect()}}),ae=X(),le=u.default.extend({name:"FilesListHeaderActions",components:{CustomSvgIconRender:Ht,NcActions:zt(),NcActionButton:Dt(),NcLoadingIcon:ct()},mixins:[re],props:{currentView:{type:Object,required:!0},selectedNodes:{type:Array,default:()=>[]}},setup:()=>({actionsMenuStore:Ot(),filesStore:ut(),selectionStore:ht()}),data:()=>({loading:null}),computed:{dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},enabledActions(){return ae.filter((t=>t.execBatch)).filter((t=>!t.enabled||t.enabled(this.nodes,this.currentView))).sort(((t,e)=>(t.order||0)-(e.order||0)))},nodes(){return this.selectedNodes.map((t=>this.getNode(t))).filter((t=>t))},areSomeNodesLoading(){return this.nodes.some((t=>t._loading))},openedMenu:{get(){return"global"===this.actionsMenuStore.opened},set(t){this.actionsMenuStore.opened=t?"global":null}},inlineActions(){return this.filesListWidth<512?0:this.filesListWidth<768?1:this.filesListWidth<1024?2:3}},methods:{getNode(t){return this.filesStore.getNode(t)},async onActionClick(t){const e=t.displayName(this.nodes,this.currentView),n=this.selectedNodes;try{this.loading=t.id,this.nodes.forEach((t=>{u.default.set(t,"_loading",!0)}));const i=await t.execBatch(this.nodes,this.currentView,this.dir);if(!i.some((t=>null!==t)))return void this.selectionStore.reset();if(i.some((t=>!1===t))){const t=n.filter(((t,e)=>!1===i[e]));return this.selectionStore.set(t),void(0,h.x2)(this.t("files",'"{displayName}" failed on some elements ',{displayName:e}))}(0,h.s$)(this.t("files",'"{displayName}" batch action executed successfully',{displayName:e})),this.selectionStore.reset()}catch(n){Q.error("Error while executing action",{action:t,e:n}),(0,h.x2)(this.t("files",'"{displayName}" action failed',{displayName:e}))}finally{this.loading=null,this.nodes.forEach((t=>{u.default.set(t,"_loading",!1)}))}},t:r.Iu}});var ce=i(97877),de={};de.styleTagTransform=B(),de.setAttributes=I(),de.insert=S().bind(null,"head"),de.domAPI=_(),de.insertStyleElement=E(),C()(ce.Z,de),ce.Z&&ce.Z.locals&&ce.Z.locals;const ue=(0,T.Z)(le,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("th",{staticClass:"files-list__column files-list__row-actions-batch",attrs:{colspan:"2"}},[e("NcActions",{ref:"actionsMenu",attrs:{disabled:!!t.loading||t.areSomeNodesLoading,"force-title":!0,inline:t.inlineActions,"menu-title":t.inlineActions<=1?t.t("files","Actions"):null,open:t.openedMenu},on:{"update:open":function(e){t.openedMenu=e}}},t._l(t.enabledActions,(function(n){return e("NcActionButton",{key:n.id,class:"files-list__row-actions-batch-"+n.id,on:{click:function(e){return t.onActionClick(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading===n.id?e("NcLoadingIcon",{attrs:{size:18}}):e("CustomSvgIconRender",{attrs:{svg:n.iconSvgInline(t.nodes,t.currentView)}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t"+t._s(n.displayName(t.nodes,t.currentView))+"\n\t\t")])})),1)],1)}),[],!1,null,"03e57b1e",null).exports;var pe=i(20404),he=i(23873);const fe=u.default.extend({computed:{...(0,nt.rn)(At,["getConfig","setSortingBy","toggleSortingDirection"]),currentView(){return this.$navigation.active},sortingMode(){var t,e;return(null===(t=this.getConfig(this.currentView.id))||void 0===t?void 0:t.sorting_mode)||(null===(e=this.currentView)||void 0===e?void 0:e.defaultSortKey)||"basename"},isAscSorting(){var t;return"asc"===(null===(t=this.getConfig(this.currentView.id))||void 0===t?void 0:t.sorting_direction)}},methods:{toggleSortBy(t){this.sortingMode!==t?this.setSortingBy(t,this.currentView.id):this.toggleSortingDirection(this.currentView.id)}}}),Ae=u.default.extend({name:"FilesListHeaderButton",components:{MenuDown:pe.Z,MenuUp:he.Z,NcButton:at()},mixins:[fe],props:{name:{type:String,required:!0},mode:{type:String,required:!0}},methods:{sortAriaLabel(t){const e=this.isAscSorting?this.t("files","ascending"):this.t("files","descending");return this.t("files","Sort list by {column} ({direction})",{column:t,direction:e})},t:r.Iu}});var ve=i(29252),me={};me.styleTagTransform=B(),me.setAttributes=I(),me.insert=S().bind(null,"head"),me.domAPI=_(),me.insertStyleElement=E(),C()(ve.Z,me),ve.Z&&ve.Z.locals&&ve.Z.locals;const ge=(0,T.Z)(Ae,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("NcButton",{staticClass:"files-list__column-sort-button",class:{"files-list__column-sort-button--active":t.sortingMode===t.mode},attrs:{"aria-label":t.sortAriaLabel(t.name),type:"tertiary"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggleSortBy(t.mode)}}},[t.sortingMode!==t.mode||t.isAscSorting?e("MenuUp",{attrs:{slot:"icon"},slot:"icon"}):e("MenuDown",{attrs:{slot:"icon"},slot:"icon"}),t._v("\n\t"+t._s(t.name)+"\n")],1)}),[],!1,null,null,null).exports,we=u.default.extend({name:"FilesListHeader",components:{FilesListHeaderButton:ge,NcCheckboxRadioSwitch:Ut(),FilesListHeaderActions:ue},mixins:[fe],props:{isSizeAvailable:{type:Boolean,default:!1},nodes:{type:Array,required:!0},filesListWidth:{type:Number,default:0}},setup:()=>({filesStore:ut(),selectionStore:ht()}),computed:{currentView(){return this.$navigation.active},columns(){var t;return this.filesListWidth<512?[]:(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},selectAllBind(){const t=this.isNoneSelected||this.isSomeSelected?this.t("files","Select all"):this.t("files","Unselect all");return{"aria-label":t,checked:this.isAllSelected,indeterminate:this.isSomeSelected,title:t}},selectedNodes(){return this.selectionStore.selected},isAllSelected(){return this.selectedNodes.length===this.nodes.length},isNoneSelected(){return 0===this.selectedNodes.length},isSomeSelected(){return!this.isAllSelected&&!this.isNoneSelected}},methods:{classForColumn(t){return{"files-list__column":!0,"files-list__column--sortable":!!t.sort,"files-list__row-column-custom":!0,["files-list__row-".concat(this.currentView.id,"-").concat(t.id)]:!0}},onToggleAll(t){if(t){const t=this.nodes.map((t=>t.fileid.toString()));Q.debug("Added all nodes to selection",{selection:t}),this.selectionStore.setLastIndex(null),this.selectionStore.set(t)}else Q.debug("Cleared selection"),this.selectionStore.reset()},t:r.Iu}});var be=i(96153),Ce={};Ce.styleTagTransform=B(),Ce.setAttributes=I(),Ce.insert=S().bind(null,"head"),Ce.domAPI=_(),Ce.insertStyleElement=E(),C()(be.Z,Ce),be.Z&&be.Z.locals&&be.Z.locals;const ye=(0,T.Z)(we,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("tr",[e("th",{staticClass:"files-list__column files-list__row-checkbox"},[e("NcCheckboxRadioSwitch",t._b({on:{"update:checked":t.onToggleAll}},"NcCheckboxRadioSwitch",t.selectAllBind,!1))],1),t._v(" "),t.isNoneSelected?[e("th",{staticClass:"files-list__column files-list__row-name files-list__column--sortable",on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggleSortBy("basename")}}},[e("span",{staticClass:"files-list__row-icon"}),t._v(" "),e("FilesListHeaderButton",{attrs:{name:t.t("files","Name"),mode:"basename"}})],1),t._v(" "),e("th",{staticClass:"files-list__row-actions"}),t._v(" "),t.isSizeAvailable?e("th",{staticClass:"files-list__column files-list__row-size",class:{"files-list__column--sortable":t.isSizeAvailable}},[e("FilesListHeaderButton",{attrs:{name:t.t("files","Size"),mode:"size"}})],1):t._e(),t._v(" "),t._l(t.columns,(function(n){return e("th",{key:n.id,class:t.classForColumn(n)},[n.sort?e("FilesListHeaderButton",{attrs:{name:n.title,mode:n.id}}):e("span",[t._v("\n\t\t\t\t"+t._s(n.title)+"\n\t\t\t")])],1)}))]:e("FilesListHeaderActions",{attrs:{"current-view":t.currentView,"selected-nodes":t.selectedNodes}})],2)}),[],!1,null,"76b6186a",null).exports,_e=u.default.extend({name:"FilesListVirtual",components:{RecycleScroller:St.EK,FileEntry:ee,FilesListHeader:ye,FilesListFooter:se},mixins:[re],props:{currentView:{type:Object,required:!0},nodes:{type:Array,required:!0}},data:()=>({FileEntry:ee}),computed:{files(){return this.nodes.filter((t=>"file"===t.type))},summaryFile(){const t=this.files.length;return(0,r.uN)("files","{count} file","{count} files",t,{count:t})},summaryFolder(){const t=this.nodes.length-this.files.length;return(0,r.uN)("files","{count} folder","{count} folders",t,{count:t})},summary(){return(0,r.Iu)("files","{summaryFile} and {summaryFolder}",this)},isSizeAvailable(){return!(this.filesListWidth<768)&&this.nodes.some((t=>void 0!==t.attributes.size))}},mounted(){const t=this.$el.querySelectorAll(".vue-recycle-scroller__slot");t[0].setAttribute("role","thead"),t[1].setAttribute("role","tfoot")},methods:{getFileId:t=>t.fileid,t:r.Iu}});var xe=i(76775),Se={};Se.styleTagTransform=B(),Se.setAttributes=I(),Se.insert=S().bind(null,"head"),Se.domAPI=_(),Se.insertStyleElement=E(),C()(xe.Z,Se),xe.Z&&xe.Z.locals&&xe.Z.locals;const ke=(0,T.Z)(_e,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("RecycleScroller",{ref:"recycleScroller",staticClass:"files-list",attrs:{"key-field":"source",items:t.nodes,"item-size":55,"table-mode":!0,"item-class":"files-list__row","item-tag":"tr","list-class":"files-list__body","list-tag":"tbody",role:"table"},scopedSlots:t._u([{key:"default",fn:function(n){let{item:i,active:o,index:s}=n;return[e("FileEntry",{attrs:{active:o,index:s,"is-size-available":t.isSizeAvailable,"files-list-width":t.filesListWidth,nodes:t.nodes,source:i}})]}},{key:"before",fn:function(){return[e("caption",{staticClass:"hidden-visually"},[t._v("\n\t\t\t"+t._s(t.currentView.caption||"")+"\n\t\t\t"+t._s(t.t("files","This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list."))+"\n\t\t")]),t._v(" "),e("FilesListHeader",{attrs:{"files-list-width":t.filesListWidth,"is-size-available":t.isSizeAvailable,nodes:t.nodes}})]},proxy:!0},{key:"after",fn:function(){return[e("FilesListFooter",{attrs:{"files-list-width":t.filesListWidth,"is-size-available":t.isSizeAvailable,nodes:t.nodes,summary:t.summary}})]},proxy:!0}])})}),[],!1,null,"640a8bb8",null).exports;var Ie=i(14222);function Ne(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const Ee=class{constructor(){Ne(this,"_views",[]),Ne(this,"_currentView",null),Q.debug("Navigation service initialized")}register(t){try{Be(t),Fe(t,this._views)}catch(e){throw e instanceof Error&&Q.error(e.message,{view:t}),e}t.legacy&&Q.warn("Legacy view detected, please migrate to Vue"),t.iconClass&&(t.legacy=!0),this._views.push(t)}remove(t){const e=this._views.findIndex((e=>e.id===t));-1!==e&&this._views.splice(e,1)}get views(){return this._views}setActive(t){this._currentView=t}get active(){return this._currentView}},Fe=function(t,e){if(e.find((e=>e.id===t.id)))throw new Error("Navigation id ".concat(t.id," is already registered"));return!0},Be=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("Navigation id is required and must be a string");if(!t.name||"string"!=typeof t.name)throw new Error("Navigation name is required and must be a string");if(!t.legacy){if(!t.getContents||"function"!=typeof t.getContents)throw new Error("Navigation getContents is required and must be a function");if(!t.icon||"string"!=typeof t.icon||!(0,Ie.Z)(t.icon))throw new Error("Navigation icon is required and must be a valid svg string")}if(!("order"in t)||"number"!=typeof t.order)throw new Error("Navigation order is required and must be a number");if(t.columns&&t.columns.forEach(Pe),t.emptyView&&"function"!=typeof t.emptyView)throw new Error("Navigation emptyView must be a function");if(t.parent&&"string"!=typeof t.parent)throw new Error("Navigation parent must be a string");if("sticky"in t&&"boolean"!=typeof t.sticky)throw new Error("Navigation sticky must be a boolean");if("expanded"in t&&"boolean"!=typeof t.expanded)throw new Error("Navigation expanded must be a boolean");if(t.defaultSortKey&&"string"!=typeof t.defaultSortKey)throw new Error("Navigation defaultSortKey must be a string");return!0},Pe=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("A column id is required");if(!t.title||"string"!=typeof t.title)throw new Error("A column title is required");if(!t.render||"function"!=typeof t.render)throw new Error("A render function is required");if(t.sort&&"function"!=typeof t.sort)throw new Error("Column sortFunction must be a function");if(t.summary&&"function"!=typeof t.summary)throw new Error("Column summary must be a function");return!0},De=u.default.extend({name:"FilesList",components:{BreadCrumbs:xt,FilesListVirtual:ke,NcAppContent:st(),NcButton:at(),NcEmptyContent:A(),NcLoadingIcon:ct(),TrashCan:dt.Z},mixins:[fe],setup(){const t=pt();return{filesStore:ut(),pathsStore:t,selectionStore:ht(),viewConfigStore:At()}},data:()=>({loading:!0,promise:null}),computed:{currentView(){return this.$navigation.active||this.$navigation.views.find((t=>"files"===t.id))},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},currentFolder(){var t;if(null===(t=this.currentView)||void 0===t||!t.id)return;if("/"===this.dir)return this.filesStore.getRoot(this.currentView.id);const e=this.pathsStore.getPath(this.currentView.id,this.dir);return this.filesStore.getNode(e)},dirContents(){var t,e;if(!this.currentView)return[];const n=((null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]).find((t=>t.id===this.sortingMode));if(null!=n&&n.sort&&"function"==typeof n.sort){var i;const t=[...((null===(i=this.currentFolder)||void 0===i?void 0:i._children)||[]).map(this.getNode).filter((t=>t))].sort(n.sort);return this.isAscSorting?t:t.reverse()}return(0,it.X)([...((null===(e=this.currentFolder)||void 0===e?void 0:e._children)||[]).map(this.getNode).filter((t=>t))],[..."basename"===this.sortingMode?[t=>"folder"!==t.type]:[],t=>t[this.sortingMode],t=>t.basename],this.isAscSorting?["asc","asc","asc"]:["desc","desc","desc"])},isEmptyDir(){return 0===this.dirContents.length},isRefreshing(){return void 0!==this.currentFolder&&!this.isEmptyDir&&this.loading},toPreviousDir(){const t=this.dir.split("/").slice(0,-1).join("/")||"/";return{...this.$route,query:{dir:t}}}},watch:{currentView(t,e){(null==t?void 0:t.id)!==(null==e?void 0:e.id)&&(Q.debug("View changed",{newView:t,oldView:e}),this.selectionStore.reset(),this.fetchContent())},dir(t,e){var n,i;Q.debug("Directory changed",{newDir:t,oldDir:e}),this.selectionStore.reset(),this.fetchContent(),null!==(n=this.$refs)&&void 0!==n&&null!==(i=n.filesListVirtual)&&void 0!==i&&i.$el&&(this.$refs.filesListVirtual.$el.scrollTop=0)}},methods:{async fetchContent(){var t,e;if(null!==(t=this.currentView)&&void 0!==t&&t.legacy)return;this.loading=!0;const n=this.dir,i=this.currentView;"function"==typeof(null===(e=this.promise)||void 0===e?void 0:e.cancel)&&(this.promise.cancel(),Q.debug("Cancelled previous ongoing fetch")),this.promise=i.getContents(n);try{const{folder:t,contents:e}=await this.promise;Q.debug("Fetched contents",{dir:n,folder:t,contents:e}),this.filesStore.updateNodes(e),t._children=e.map((t=>t.fileid)),"/"===n?this.filesStore.setRoot({service:i.id,root:t}):t.fileid?(this.filesStore.updateNodes([t]),this.pathsStore.addPath({service:i.id,fileid:t.fileid,path:n})):Q.error("Invalid root folder returned",{dir:n,folder:t,currentView:i}),e.filter((t=>"folder"===t.type)).forEach((t=>{this.pathsStore.addPath({service:i.id,fileid:t.fileid,path:(0,p.join)(n,t.basename)})}))}catch(t){Q.error("Error while fetching content",{error:t})}finally{this.loading=!1}},getNode(t){return this.filesStore.getNode(t)},t:r.Iu}});var Te=i(1508),ze={};ze.styleTagTransform=B(),ze.setAttributes=I(),ze.insert=S().bind(null,"head"),ze.domAPI=_(),ze.insertStyleElement=E(),C()(Te.Z,ze),Te.Z&&Te.Z.locals&&Te.Z.locals;const Le=(0,T.Z)(De,(function(){var t,e,n=this,i=n._self._c;return n._self._setupProxy,i("NcAppContent",{directives:[{name:"show",rawName:"v-show",value:!(null!==(t=n.currentView)&&void 0!==t&&t.legacy),expression:"!currentView?.legacy"}],class:{"app-content--hidden":null===(e=n.currentView)||void 0===e?void 0:e.legacy},attrs:{"data-cy-files-content":""}},[i("div",{staticClass:"files-list__header"},[i("BreadCrumbs",{attrs:{path:n.dir},on:{reload:n.fetchContent}}),n._v(" "),n.isRefreshing?i("NcLoadingIcon",{staticClass:"files-list__refresh-icon"}):n._e()],1),n._v(" "),n.loading&&!n.isRefreshing?i("NcLoadingIcon",{staticClass:"files-list__loading-icon",attrs:{size:38,title:n.t("files","Loading current folder")}}):!n.loading&&n.isEmptyDir?i("NcEmptyContent",{attrs:{title:n.t("files","No files in here"),description:n.t("files","No files or folders have been deleted yet"),"data-cy-files-content-empty":""},scopedSlots:n._u([{key:"action",fn:function(){return["/"!==n.dir?i("NcButton",{attrs:{"aria-label":"t('files', 'Go to the previous folder')",type:"primary",to:n.toPreviousDir}},[n._v("\n\t\t\t\t"+n._s(n.t("files","Go back"))+"\n\t\t\t")]):n._e()]},proxy:!0},{key:"icon",fn:function(){return[i("TrashCan")]},proxy:!0}])}):i("FilesListVirtual",{ref:"filesListVirtual",attrs:{"current-view":n.currentView,nodes:n.dirContents}})],1)}),[],!1,null,"66068cbb",null).exports;var Ue=i(57638),Ve=i(55209),Oe=i.n(Ve),Ze=i(14032),qe=i.n(Ze),Re=i(91211),je=i.n(Re);var Me=i(28615),$e=i(74184),We=i(48959),Ge=i.n(We);const He={name:"NavigationQuota",components:{ChartPie:$e.Z,NcAppNavigationItem:qe(),NcProgressBar:Ge()},data:()=>({loadingStorageStats:!1,storageStats:(0,s.j)("files","storageStats",null)}),computed:{storageStatsTitle(){var t,e,n;const i=(0,H.sS)(null===(t=this.storageStats)||void 0===t?void 0:t.used),o=(0,H.sS)(null===(e=this.storageStats)||void 0===e?void 0:e.quota);return(null===(n=this.storageStats)||void 0===n?void 0:n.quota)<0?this.t("files","{usedQuotaByte} used",{usedQuotaByte:i}):this.t("files","{used} of {quota} used",{used:i,quota:o})},storageStatsTooltip(){return this.storageStats.relative?this.t("files","{relative}% used",this.storageStats):""}},beforeMount(){setInterval(this.throttleUpdateStorageStats,6e4),(0,G.Ld)("files:node:created",this.throttleUpdateStorageStats),(0,G.Ld)("files:node:deleted",this.throttleUpdateStorageStats),(0,G.Ld)("files:node:moved",this.throttleUpdateStorageStats),(0,G.Ld)("files:node:updated",this.throttleUpdateStorageStats)},methods:{debounceUpdateStorageStats:(0,Me.D)(200,(function(t){this.updateStorageStats(t)})),throttleUpdateStorageStats:(0,Me.P)(1e3,(function(t){this.updateStorageStats(t)})),async updateStorageStats(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!this.loadingStorageStats){this.loadingStorageStats=!0;try{var n;const t=await d.default.get((0,a.generateUrl)("/apps/files/api/v1/stats"));if(null==t||null===(n=t.data)||void 0===n||!n.data)throw new Error("Invalid storage stats");this.storageStats=t.data.data}catch(n){Q.error("Could not refresh storage stats",{error:n}),e&&(0,h.x2)(t("files","Could not refresh storage stats"))}finally{this.loadingStorageStats=!1}}},t:r.Iu}};var Ke=i(93582),Qe={};Qe.styleTagTransform=B(),Qe.setAttributes=I(),Qe.insert=S().bind(null,"head"),Qe.domAPI=_(),Qe.insertStyleElement=E(),C()(Ke.Z,Qe),Ke.Z&&Ke.Z.locals&&Ke.Z.locals;const Ye=(0,T.Z)(He,(function(){var t=this,e=t._self._c;return t.storageStats?e("NcAppNavigationItem",{staticClass:"app-navigation-entry__settings-quota",class:{"app-navigation-entry__settings-quota--not-unlimited":t.storageStats.quota>=0},attrs:{"aria-label":t.t("files","Storage informations"),loading:t.loadingStorageStats,name:t.storageStatsTitle,title:t.storageStatsTooltip,"data-cy-files-navigation-settings-quota":""},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.debounceUpdateStorageStats.apply(null,arguments)}}},[e("ChartPie",{attrs:{slot:"icon",size:20},slot:"icon"}),t._v(" "),t.storageStats.quota>=0?e("NcProgressBar",{attrs:{slot:"extra",error:t.storageStats.relative>80,value:Math.min(t.storageStats.relative,100)},slot:"extra"}):t._e()],1):t._e()}),[],!1,null,"918797b2",null).exports;var Je=i(68988),Xe=i.n(Je),tn=i(16809),en=i.n(tn),nn=i(70386),on=i(36029),sn=i.n(on);const rn={name:"Setting",props:{el:{type:Function,required:!0}},mounted(){this.$el.appendChild(this.el())}},an=(0,T.Z)(rn,(function(){return(0,this._self._c)("div")}),[],!1,null,null,null).exports,ln={name:"Settings",components:{Clipboard:nn.Z,NcAppSettingsDialog:Xe(),NcAppSettingsSection:en(),NcCheckboxRadioSwitch:Ut(),NcInputField:sn(),Setting:an},props:{open:{type:Boolean,default:!1}},setup:()=>({userConfigStore:qt()}),data(){var t,e,n,i;return{settings:(null===(t=window.OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.Settings)||void 0===n?void 0:n.settings)||[],webdavUrl:(0,a.generateRemoteUrl)("dav/files/"+encodeURIComponent(null===(i=(0,l.ts)())||void 0===i?void 0:i.uid)),webdavDocs:"https://docs.nextcloud.com/server/stable/go.php?to=user-webdav",appPasswordUrl:(0,a.generateUrl)("/settings/user/security#generate-app-token-section"),webdavUrlCopied:!1}},computed:{userConfig(){return this.userConfigStore.userConfig}},beforeMount(){this.settings.forEach((t=>t.open()))},beforeDestroy(){this.settings.forEach((t=>t.close()))},methods:{onClose(){this.$emit("close")},setConfig(t,e){this.userConfigStore.update(t,e)},async copyCloudId(){document.querySelector("input#webdav-url-input").select(),navigator.clipboard?(await navigator.clipboard.writeText(this.webdavUrl),this.webdavUrlCopied=!0,(0,h.s$)(t("files","WebDAV URL copied to clipboard")),setTimeout((()=>{this.webdavUrlCopied=!1}),5e3)):(0,h.x2)(t("files","Clipboard is not available"))},t:r.Iu}},cn=ln;var dn=i(35662),un={};un.styleTagTransform=B(),un.setAttributes=I(),un.insert=S().bind(null,"head"),un.domAPI=_(),un.insertStyleElement=E(),C()(dn.Z,un),dn.Z&&dn.Z.locals&&dn.Z.locals;const pn=(0,T.Z)(cn,(function(){var t=this,e=t._self._c;return e("NcAppSettingsDialog",{attrs:{open:t.open,"show-navigation":!0,title:t.t("files","Files settings")},on:{"update:open":t.onClose}},[e("NcAppSettingsSection",{attrs:{id:"settings",title:t.t("files","Files settings")}},[e("NcCheckboxRadioSwitch",{attrs:{checked:t.userConfig.show_hidden},on:{"update:checked":function(e){return t.setConfig("show_hidden",e)}}},[t._v("\n\t\t\t"+t._s(t.t("files","Show hidden files"))+"\n\t\t")]),t._v(" "),e("NcCheckboxRadioSwitch",{attrs:{checked:t.userConfig.crop_image_previews},on:{"update:checked":function(e){return t.setConfig("crop_image_previews",e)}}},[t._v("\n\t\t\t"+t._s(t.t("files","Crop image previews"))+"\n\t\t")])],1),t._v(" "),0!==t.settings.length?e("NcAppSettingsSection",{attrs:{id:"more-settings",title:t.t("files","Additional settings")}},[t._l(t.settings,(function(t){return[e("Setting",{key:t.name,attrs:{el:t.el}})]}))],2):t._e(),t._v(" "),e("NcAppSettingsSection",{attrs:{id:"webdav",title:t.t("files","WebDAV")}},[e("NcInputField",{attrs:{id:"webdav-url-input","show-trailing-button":!0,success:t.webdavUrlCopied,"trailing-button-label":t.t("files","Copy to clipboard"),value:t.webdavUrl,readonly:"readonly",type:"url"},on:{focus:function(t){return t.target.select()},"trailing-button-click":t.copyCloudId},scopedSlots:t._u([{key:"trailing-button-icon",fn:function(){return[e("Clipboard",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),e("em",[e("a",{staticClass:"setting-link",attrs:{href:t.webdavDocs,target:"_blank",rel:"noreferrer noopener"}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Use this address to access your Files via WebDAV"))+" ↗\n\t\t\t")])]),t._v(" "),e("br"),t._v(" "),e("em",[e("a",{staticClass:"setting-link",attrs:{href:t.appPasswordUrl}},[t._v("\n\t\t\t\t"+t._s(t.t("files","If you have enabled 2FA, you must create and use a new app password by clicking here."))+" ↗\n\t\t\t")])])],1)],1)}),[],!1,null,"76ca5d1f",null).exports,hn={name:"Navigation",components:{Cog:Ue.default,NavigationQuota:Ye,NcAppNavigation:Oe(),NcAppNavigationItem:qe(),NcIconSvgWrapper:je(),SettingsModal:pn},props:{Navigation:{type:Ee,required:!0}},setup:()=>({viewConfigStore:At()}),data:()=>({settingsOpened:!1}),computed:{currentViewId(){var t,e;return(null===(t=this.$route)||void 0===t||null===(e=t.params)||void 0===e?void 0:e.view)||"files"},currentView(){return this.views.find((t=>t.id===this.currentViewId))},views(){return this.Navigation.views},parentViews(){return this.views.filter((t=>!t.parent)).sort(((t,e)=>t.order-e.order))},childViews(){return this.views.filter((t=>!!t.parent)).reduce(((t,e)=>(t[e.parent]=[...t[e.parent]||[],e],t[e.parent].sort(((t,e)=>t.order-e.order)),t)),{})}},watch:{currentView(t,e){(null==t?void 0:t.id)!==(null==e?void 0:e.id)&&(this.Navigation.setActive(t),Q.debug("Navigation changed",{id:t.id,view:t}),this.showView(t,e))}},beforeMount(){this.currentView&&(Q.debug("Navigation mounted. Showing requested view",{view:this.currentView}),this.showView(this.currentView)),(0,G.Ld)("files:legacy-navigation:changed",this.onLegacyNavigationChanged),(0,G.Ld)("files:legacy-view:initialized",(()=>{Q.debug("Legacy view initialized",{...this.currentView}),this.showView(this.currentView)}))},methods:{showView(t,e){var n,i,o,s,r;if(null===(n=window)||void 0===n||null===(i=n.OCA)||void 0===i||null===(o=i.Files)||void 0===o||null===(s=o.Sidebar)||void 0===s||null===(r=s.close)||void 0===r||r.call(s),null!=t&&t.legacy){const e=document.querySelector("#app-content #app-content-"+this.currentView.id+".viewcontainer");document.querySelectorAll("#app-content .viewcontainer").forEach((t=>{t.classList.add("hidden")})),e.classList.remove("hidden");const{dir:n="/"}=OC.Util.History.parseUrlQuery(),i={itemId:t.id,dir:n};Q.debug("Triggering legacy navigation event",i),window.jQuery(e).trigger(new window.jQuery.Event("show",i)),window.jQuery(e).trigger(new window.jQuery.Event("urlChanged",i))}this.Navigation.setActive(t),function(t){const e=document.getElementById("page-heading-level-1");e&&(e.textContent=t)}(t.name),(0,G.j8)("files:navigation:changed",t)},onLegacyNavigationChanged(){let{id:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:"files"};const e=this.Navigation.views.find((e=>e.id===t));e&&e.legacy&&e.id!==this.currentView.id&&(this.$router.replace({...this.$route,params:{view:e.id}}),this.Navigation.setActive(e),this.showView(e))},onToggleExpand(t){const e=this.isExpanded(t);t.expanded=!e,this.viewConfigStore.update(t.id,"expanded",!e)},isExpanded(t){var e;return"boolean"==typeof(null===(e=this.viewConfigStore.getConfig(t.id))||void 0===e?void 0:e.expanded)?!0===this.viewConfigStore.getConfig(t.id).expanded:!0===t.expanded},generateToNavigation(t){if(t.params){const{dir:e,fileid:n}=t.params;return{name:"filelist",params:t.params,query:{dir:e,fileid:n}}}return{name:"filelist",params:{view:t.id}}},openSettings(){this.settingsOpened=!0},onSettingsClose(){this.settingsOpened=!1},t:r.Iu}},fn=hn;var An=i(87289),vn={};vn.styleTagTransform=B(),vn.setAttributes=I(),vn.insert=S().bind(null,"head"),vn.domAPI=_(),vn.insertStyleElement=E(),C()(An.Z,vn),An.Z&&An.Z.locals&&An.Z.locals;const mn=(0,T.Z)(fn,(function(){var t=this,e=t._self._c;return e("NcAppNavigation",{attrs:{"data-cy-files-navigation":""},scopedSlots:t._u([{key:"list",fn:function(){return t._l(t.parentViews,(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"allow-collapse":!0,"data-cy-files-navigation-item":n.id,icon:n.iconClass,open:t.isExpanded(n),pinned:n.sticky,title:n.name,to:t.generateToNavigation(n)},on:{"update:open":function(e){return t.onToggleExpand(n)}}},[n.icon?e("NcIconSvgWrapper",{attrs:{slot:"icon",svg:n.icon},slot:"icon"}):t._e(),t._v(" "),t._l(t.childViews[n.id],(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"data-cy-files-navigation-item":n.id,exact:!0,icon:n.iconClass,title:n.name,to:t.generateToNavigation(n)}},[n.icon?e("NcIconSvgWrapper",{attrs:{slot:"icon",svg:n.icon},slot:"icon"}):t._e()],1)}))],2)}))},proxy:!0},{key:"footer",fn:function(){return[e("ul",{staticClass:"app-navigation-entry__settings"},[e("NavigationQuota"),t._v(" "),e("NcAppNavigationItem",{attrs:{"aria-label":t.t("files","Open the files app settings"),title:t.t("files","Files settings"),"data-cy-files-navigation-settings-button":""},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openSettings.apply(null,arguments)}}},[e("Cog",{attrs:{slot:"icon",size:20},slot:"icon"})],1)],1)]},proxy:!0}])},[t._v(" "),t._v(" "),e("SettingsModal",{attrs:{open:t.settingsOpened,"data-cy-files-navigation-settings":""},on:{close:t.onSettingsClose}})],1)}),[],!1,null,"657a978e",null).exports,gn=function(t){let{id:e,name:n,order:i,icon:o,parent:s,classes:r="",expanded:a,params:l}=t;OCP.Files.Navigation.register({id:e,name:n,order:i,params:l,parent:s,expanded:!0===a,iconClass:o?"icon-".concat(o):"nav-icon-"+e,legacy:!0,sticky:r.includes("pinned")})};var wn=i(78345),bn=i(97047);u.default.use(wn.ZP);const Cn=new wn.ZP({mode:"history",base:(0,a.generateUrl)("/apps/files",""),linkActiveClass:"active",routes:[{path:"/",alias:"/files"},{path:"/:view/:fileid?",name:"filelist",props:!0}],stringifyQuery(t){const e=bn.Z.stringify(t).replace(/%2F/gim,"/");return e?"?"+e:""}});function yn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var _n,xn,Sn=i(25108);window.OCA.Files=null!==(_n=window.OCA.Files)&&void 0!==_n?_n:{},window.OCP.Files=null!==(xn=window.OCP.Files)&&void 0!==xn?xn:{};const kn=new class{constructor(t){var e,n,i;e=this,i=void 0,(n=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(n="_router"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this._router=t}goTo(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this._router.push({path:t,replace:e})}goToRoute(t,e,n,i){return this._router.push({name:t,query:n,params:e,replace:i})}}(Cn);Object.assign(window.OCP.Files,{Router:kn}),u.default.use(nt.og);const In=(0,nt.WB)(),Nn=new Ee;Object.assign(window.OCP.Files,{Navigation:Nn}),u.default.prototype.$navigation=Nn;const En=new class{constructor(){var t,e,n;t=this,n=void 0,(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e="_settings"))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,this._settings=[],Sn.debug("OCA.Files.Settings initialized")}register(t){return this._settings.filter((e=>e.name===t.name)).length>0?(Sn.error("A setting with the same name is already registered"),!1):(this._settings.push(t),!0)}get settings(){return this._settings}};Object.assign(window.OCA.Files,{Settings:En}),Object.assign(window.OCA.Files.Settings,{Setting:class{constructor(t,e){let{el:n,open:i,close:o}=e;yn(this,"_close",void 0),yn(this,"_el",void 0),yn(this,"_name",void 0),yn(this,"_open",void 0),this._name=t,this._el=n,this._open=i,this._close=o,"function"!=typeof this._open&&(this._open=()=>{}),"function"!=typeof this._close&&(this._close=()=>{})}get name(){return this._name}get el(){return this._el}get open(){return this._open}get close(){return this._close}}}),new(u.default.extend(mn))({name:"FilesNavigationRoot",propsData:{Navigation:Nn},router:Cn,pinia:In}).$mount("#app-navigation-files"),new(u.default.extend(Le))({name:"FilesListRoot",router:Cn,pinia:In}).$mount("#app-content-vue"),function(){const t=Object.values((0,s.j)("files","navigation",{}));t.length>0&&(Q.debug("Legacy files views detected. Processing...",t),t.forEach((t=>{gn(t),t.sublist&&t.sublist.forEach((e=>gn({...e,parent:t.id})))})))}(),"serviceWorker"in navigator?window.addEventListener("load",(async()=>{try{const t=(0,a.generateUrl)("/apps/files/preview-service-worker.js",{},{noRewrite:!0}),e=await navigator.serviceWorker.register(t,{scope:"/"});Q.debug("SW registered: ",{registration:e})}catch(t){Q.error("SW registration failed: ",{error:t})}})):Q.debug("Service Worker is not enabled on this browser.")},39959:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".breadcrumb[data-v-68b3b20b]{flex:1 1 100% !important;width:100%}.breadcrumb[data-v-68b3b20b] a{cursor:pointer !important}","",{version:3,sources:["webpack://./apps/files/src/components/BreadCrumbs.vue"],names:[],mappings:"AACA,6BAEC,wBAAA,CACA,UAAA,CAEA,+BACC,yBAAA",sourcesContent:["\n.breadcrumb {\n\t// Take as much space as possible\n\tflex: 1 1 100% !important;\n\twidth: 100%;\n\n\t::v-deep a {\n\t\tcursor: pointer !important;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},61959:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".custom-svg-icon[data-v-93e9b2f4]{display:flex;align-items:center;align-self:center;justify-content:center;justify-self:center;width:44px;height:44px;opacity:1}.custom-svg-icon[data-v-93e9b2f4] svg{height:22px;width:22px;fill:currentColor}","",{version:3,sources:["webpack://./apps/files/src/components/CustomSvgIconRender.vue"],names:[],mappings:"AACA,kCACC,YAAA,CACA,kBAAA,CACA,iBAAA,CACA,sBAAA,CACA,mBAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CAEA,sCAGC,WAAA,CACA,UAAA,CACA,iBAAA",sourcesContent:["\n.custom-svg-icon {\n\tdisplay: flex;\n\talign-items: center;\n\talign-self: center;\n\tjustify-content: center;\n\tjustify-self: center;\n\twidth: 44px;\n\theight: 44px;\n\topacity: 1;\n\n\t::v-deep svg {\n\t\t// mdi icons have a size of 24px\n\t\t// 22px results in roughly 16px inner size\n\t\theight: 22px;\n\t\twidth: 22px;\n\t\tfill: currentColor;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},13352:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,"tr[data-v-0600090e]:hover,tr[data-v-0600090e]:focus,tr[data-v-0600090e]:active{background-color:var(--color-background-dark)}.files-list__row-icon-preview[data-v-0600090e]:not([style*=background]){background:var(--color-loading-dark)}","",{version:3,sources:["webpack://./apps/files/src/components/FileEntry.vue"],names:[],mappings:"AAGC,+EAGC,6CAAA,CAKF,wEACI,oCAAA",sourcesContent:["\n/* Hover effect on tbody lines only */\ntr {\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n}\n\n/* Preview not loaded animation effect */\n.files-list__row-icon-preview:not([style*='background']) {\n background: var(--color-loading-dark);\n\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\n}\n"],sourceRoot:""}]);const a=r},97105:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,"tr[data-v-e6a083be]{padding-bottom:300px;border-top:1px solid var(--color-border);background-color:rgba(0,0,0,0) !important;border-bottom:none !important}td[data-v-e6a083be]{user-select:none;color:var(--color-text-maxcontrast) !important}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListFooter.vue"],names:[],mappings:"AAEA,oBACC,oBAAA,CACA,wCAAA,CAEA,yCAAA,CACA,6BAAA,CAGD,oBACC,gBAAA,CAEA,8CAAA",sourcesContent:["\n// Scoped row\ntr {\n\tpadding-bottom: 300px;\n\tborder-top: 1px solid var(--color-border);\n\t// Prevent hover effect on the whole row\n\tbackground-color: transparent !important;\n\tborder-bottom: none !important;\n}\n\ntd {\n\tuser-select: none;\n\t// Make sure the cell colors don't apply to column headers\n\tcolor: var(--color-text-maxcontrast) !important;\n}\n\n"],sourceRoot:""}]);const a=r},96153:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list__column[data-v-76b6186a]{user-select:none;color:var(--color-text-maxcontrast) !important}.files-list__column--sortable[data-v-76b6186a]{cursor:pointer}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListHeader.vue"],names:[],mappings:"AACA,qCACC,gBAAA,CAEA,8CAAA,CAEA,+CACC,cAAA",sourcesContent:["\n.files-list__column {\n\tuser-select: none;\n\t// Make sure the cell colors don't apply to column headers\n\tcolor: var(--color-text-maxcontrast) !important;\n\n\t&--sortable {\n\t\tcursor: pointer;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},97877:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list__row-actions-batch[data-v-03e57b1e]{flex:1 1 100% !important}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper{width:100%}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper span.button-vue__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListHeaderActions.vue"],names:[],mappings:"AACA,gDACC,wBAAA,CAGA,qEACC,UAAA,CACA,2FACC,eAAA,CACA,sBAAA,CACA,kBAAA",sourcesContent:["\n.files-list__row-actions-batch {\n\tflex: 1 1 100% !important;\n\n\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\n\t::v-deep .button-vue__wrapper {\n\t\twidth: 100%;\n\t\tspan.button-vue__text {\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=r},29252:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list__column-sort-button{margin:0 calc(var(--cell-margin)*-1);padding:0 4px 0 16px !important}.files-list__column-sort-button .button-vue__wrapper{flex-direction:row-reverse;width:100%}.files-list__column-sort-button .button-vue__icon{transition-timing-function:linear;transition-duration:.1s;transition-property:opacity;opacity:0}.files-list__column-sort-button .button-vue__text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__column-sort-button--active .button-vue__icon,.files-list__column-sort-button:hover .button-vue__icon,.files-list__column-sort-button:focus .button-vue__icon,.files-list__column-sort-button:active .button-vue__icon{opacity:1 !important}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListHeaderButton.vue"],names:[],mappings:"AACA,gCAEC,oCAAA,CAEA,+BAAA,CAGA,qDACC,0BAAA,CAGA,UAAA,CAGD,kDACC,iCAAA,CACA,uBAAA,CACA,2BAAA,CACA,SAAA,CAID,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAOA,mOACC,oBAAA",sourcesContent:["\n.files-list__column-sort-button {\n\t// Compensate for cells margin\n\tmargin: 0 calc(var(--cell-margin) * -1);\n\t// Reverse padding\n\tpadding: 0 4px 0 16px !important;\n\n\t// Icon after text\n\t.button-vue__wrapper {\n\t\tflex-direction: row-reverse;\n\t\t// Take max inner width for text overflow ellipsis\n\t\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\n\t\twidth: 100%;\n\t}\n\n\t.button-vue__icon {\n\t\ttransition-timing-function: linear;\n\t\ttransition-duration: .1s;\n\t\ttransition-property: opacity;\n\t\topacity: 0;\n\t}\n\n\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\n\t.button-vue__text {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&--active,\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\t.button-vue__icon {\n\t\t\topacity: 1 !important;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=r},76775:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list[data-v-640a8bb8]{--row-height: 55px;--cell-margin: 14px;--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);--checkbox-size: 24px;--clickable-area: 44px;--icon-preview-size: 32px;display:block;overflow:auto;height:100%}.files-list[data-v-640a8bb8] tbody,.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot{display:flex;flex-direction:column;width:100%;position:relative}.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot[role=thead]{position:sticky;z-index:10;top:0;height:var(--row-height);background-color:var(--color-main-background)}.files-list[data-v-640a8bb8] tr{position:absolute;display:flex;align-items:center;width:100%;border-bottom:1px solid var(--color-border)}.files-list[data-v-640a8bb8] td,.files-list[data-v-640a8bb8] th{display:flex;align-items:center;flex:0 0 auto;justify-content:left;width:var(--row-height);height:var(--row-height);margin:0;padding:0;color:var(--color-text-maxcontrast);border:none}.files-list[data-v-640a8bb8] td span,.files-list[data-v-640a8bb8] th span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list[data-v-640a8bb8] .files-list__row-checkbox{justify-content:center}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch label.checkbox-radio-switch__label{width:var(--clickable-area);height:var(--clickable-area);margin:0;padding:calc((var(--clickable-area) - var(--checkbox-size))/2)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list[data-v-640a8bb8] .files-list__row-icon{position:relative;display:flex;overflow:visible;align-items:center;flex:0 0 var(--icon-preview-size);justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list[data-v-640a8bb8] .files-list__row-icon>span{justify-content:flex-start}.files-list[data-v-640a8bb8] .files-list__row-icon>span:not(.files-list__row-icon-favorite) svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list[data-v-640a8bb8] .files-list__row-icon-preview{overflow:hidden;width:var(--icon-preview-size);height:var(--icon-preview-size);border-radius:var(--border-radius);background-repeat:no-repeat;background-position:center;background-size:contain}.files-list[data-v-640a8bb8] .files-list__row-icon-favorite{position:absolute;top:4px;right:-8px;color:#fc0}.files-list[data-v-640a8bb8] .files-list__row-name{overflow:hidden;flex:1 1 auto}.files-list[data-v-640a8bb8] .files-list__row-name a{display:flex;align-items:center;width:100%;height:100%}.files-list[data-v-640a8bb8] .files-list__row-name a:focus .files-list__row-name-text,.files-list[data-v-640a8bb8] .files-list__row-name a:focus-visible .files-list__row-name-text{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list[data-v-640a8bb8] .files-list__row-name .files-list__row-name-text{padding:5px 10px;margin-left:-10px}.files-list[data-v-640a8bb8] .files-list__row-actions{width:auto}.files-list[data-v-640a8bb8] .files-list__row-actions~td,.files-list[data-v-640a8bb8] .files-list__row-actions~th{margin:0 var(--cell-margin)}.files-list[data-v-640a8bb8] .files-list__row-actions button .button-vue__text{font-weight:normal}.files-list[data-v-640a8bb8] .files-list__row-actions button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list[data-v-640a8bb8] .files-list__row-size{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list[data-v-640a8bb8] .files-list__row-column-custom{width:calc(var(--row-height)*2)}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListVirtual.vue"],names:[],mappings:"AACA,6BACC,kBAAA,CACA,mBAAA,CAEA,wEAAA,CACA,qBAAA,CACA,sBAAA,CACA,yBAAA,CAEA,aAAA,CACA,aAAA,CACA,WAAA,CAIC,4FACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,iBAAA,CAID,qEAEC,eAAA,CACA,UAAA,CACA,KAAA,CACA,wBAAA,CACA,6CAAA,CAGD,gCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,2CAAA,CAGD,gEACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,0EACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,uDACC,sBAAA,CACA,8EACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,iHACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,2GACC,mBAAA,CAKH,mDACC,iBAAA,CACA,YAAA,CACA,gBAAA,CACA,kBAAA,CAEA,iCAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,wDACC,0BAAA,CAGD,gGACC,8BAAA,CACA,+BAAA,CAGD,2DACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAGD,4DACC,iBAAA,CACA,OAAA,CACA,UAAA,CACA,UAAA,CAIF,mDAEC,eAAA,CAEA,aAAA,CAEA,qDACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,oLAEC,mDAAA,CACA,kBAAA,CAIF,8EAEC,gBAAA,CACA,iBAAA,CAIF,sDACC,UAAA,CAGA,kHAEC,2BAAA,CAIA,+EAEC,kBAAA,CAED,6GAEC,mCAAA,CAKH,mDAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,mFACC,+BAAA,CACA,wGACC,kBAAA,CAKH,4DACC,+BAAA",sourcesContent:["\n.files-list {\n\t--row-height: 55px;\n\t--cell-margin: 14px;\n\n\t--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);\n\t--checkbox-size: 24px;\n\t--clickable-area: 44px;\n\t--icon-preview-size: 32px;\n\n\tdisplay: block;\n\toverflow: auto;\n\theight: 100%;\n\n\t&::v-deep {\n\t\t// Table head, body and footer\n\t\ttbody, .vue-recycle-scroller__slot {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\twidth: 100%;\n\t\t\t// Necessary for virtual scrolling absolute\n\t\t\tposition: relative;\n\t\t}\n\n\t\t// Table header\n\t\t.vue-recycle-scroller__slot[role='thead'] {\n\t\t\t// Pinned on top when scrolling\n\t\t\tposition: sticky;\n\t\t\tz-index: 10;\n\t\t\ttop: 0;\n\t\t\theight: var(--row-height);\n\t\t\tbackground-color: var(--color-main-background);\n\t\t}\n\n\t\ttr {\n\t\t\tposition: absolute;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\twidth: 100%;\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t}\n\n\t\ttd, th {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tflex: 0 0 auto;\n\t\t\tjustify-content: left;\n\t\t\twidth: var(--row-height);\n\t\t\theight: var(--row-height);\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tborder: none;\n\n\t\t\t// Columns should try to add any text\n\t\t\t// node wrapped in a span. That should help\n\t\t\t// with the ellipsis on overflow.\n\t\t\tspan {\n\t\t\t\toverflow: hidden;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-checkbox {\n\t\t\tjustify-content: center;\n\t\t\t.checkbox-radio-switch {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: center;\n\n\t\t\t\t--icon-size: var(--checkbox-size);\n\n\t\t\t\tlabel.checkbox-radio-switch__label {\n\t\t\t\t\twidth: var(--clickable-area);\n\t\t\t\t\theight: var(--clickable-area);\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\n\t\t\t\t}\n\n\t\t\t\t.checkbox-radio-switch__icon {\n\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-icon {\n\t\t\tposition: relative;\n\t\t\tdisplay: flex;\n\t\t\toverflow: visible;\n\t\t\talign-items: center;\n\t\t\t// No shrinking or growing allowed\n\t\t\tflex: 0 0 var(--icon-preview-size);\n\t\t\tjustify-content: center;\n\t\t\twidth: var(--icon-preview-size);\n\t\t\theight: 100%;\n\t\t\t// Show same padding as the checkbox right padding for visual balance\n\t\t\tmargin-right: var(--checkbox-padding);\n\t\t\tcolor: var(--color-primary-element);\n\n\t\t\t& > span {\n\t\t\t\tjustify-content: flex-start;\n\t\t\t}\n\n\t\t\t&> span:not(.files-list__row-icon-favorite) svg {\n\t\t\t\twidth: var(--icon-preview-size);\n\t\t\t\theight: var(--icon-preview-size);\n\t\t\t}\n\n\t\t\t&-preview {\n\t\t\t\toverflow: hidden;\n\t\t\t\twidth: var(--icon-preview-size);\n\t\t\t\theight: var(--icon-preview-size);\n\t\t\t\tborder-radius: var(--border-radius);\n\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t\t// Center and contain the preview\n\t\t\t\tbackground-position: center;\n\t\t\t\tbackground-size: contain;\n\t\t\t}\n\n\t\t\t&-favorite {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 4px;\n\t\t\t\tright: -8px;\n\t\t\t\tcolor: #ffcc00;\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-name {\n\t\t\t// Prevent link from overflowing\n\t\t\toverflow: hidden;\n\t\t\t// Take as much space as possible\n\t\t\tflex: 1 1 auto;\n\n\t\t\ta {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\t// Fill cell height and width\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\n\t\t\t\t// Keyboard indicator a11y\n\t\t\t\t&:focus .files-list__row-name-text,\n\t\t\t\t&:focus-visible .files-list__row-name-text {\n\t\t\t\t\toutline: 2px solid var(--color-main-text) !important;\n\t\t\t\t\tborder-radius: 20px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.files-list__row-name-text {\n\t\t\t\t// Make some space for the outline\n\t\t\t\tpadding: 5px 10px;\n\t\t\t\tmargin-left: -10px;\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-actions {\n\t\t\twidth: auto;\n\n\t\t\t// Add margin to all cells after the actions\n\t\t\t& ~ td,\n\t\t\t& ~ th {\n\t\t\t\tmargin: 0 var(--cell-margin);\n\t\t\t}\n\n\t\t\tbutton {\n\t\t\t\t.button-vue__text {\n\t\t\t\t\t// Remove bold from default button styling\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t}\n\t\t\t\t&:not(:hover, :focus, :active) .button-vue__wrapper {\n\t\t\t\t\t// Also apply color-text-maxcontrast to non-active button\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-size {\n\t\t\t// Right align text\n\t\t\tjustify-content: flex-end;\n\t\t\twidth: calc(var(--row-height) * 1.5);\n\t\t\t// opacity varies with the size\n\t\t\tcolor: var(--color-main-text);\n\n\t\t\t// Icon is before text since size is right aligned\n\t\t\t.files-list__column-sort-button {\n\t\t\t\tpadding: 0 16px 0 4px !important;\n\t\t\t\t.button-vue__wrapper {\n\t\t\t\t\tflex-direction: row;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-column-custom {\n\t\t\twidth: calc(var(--row-height) * 2);\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=r},93582:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".app-navigation-entry__settings-quota--not-unlimited[data-v-918797b2] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-918797b2]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}","",{version:3,sources:["webpack://./apps/files/src/components/NavigationQuota.vue"],names:[],mappings:"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA",sourcesContent:["\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n"],sourceRoot:""}]);const a=r},3491:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".template-picker__item[data-v-6c072a31]{display:flex}.template-picker__label[data-v-6c072a31]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-6c072a31],.template-picker__label *[data-v-6c072a31]{cursor:pointer;user-select:none}.template-picker__label[data-v-6c072a31]::before{display:none !important}.template-picker__preview[data-v-6c072a31]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-6c072a31]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-6c072a31]{display:flex}.template-picker__image[data-v-6c072a31]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-6c072a31]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-6c072a31]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}","",{version:3,sources:["webpack://./apps/files/src/components/TemplatePreview.vue"],names:[],mappings:"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA",sourcesContent:["\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},1508:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".app-content[data-v-66068cbb]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-content[data-v-66068cbb]:not(.app-content--hidden)+#app-content{display:none}.files-list__header[data-v-66068cbb]{display:flex;align-content:center;flex:0 0;margin:4px 4px 4px 50px}.files-list__header>*[data-v-66068cbb]{flex:0 0}.files-list__refresh-icon[data-v-66068cbb]{flex:0 0 44px;width:44px;height:44px}.files-list__loading-icon[data-v-66068cbb]{margin:auto}","",{version:3,sources:["webpack://./apps/files/src/views/FilesList.vue"],names:[],mappings:"AACA,8BAEC,YAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAIA,qEACC,YAAA,CAQD,qCACC,YAAA,CACA,oBAAA,CAEA,QAAA,CAEA,uBAAA,CACA,uCAGC,QAAA,CAGF,2CACC,aAAA,CACA,UAAA,CACA,WAAA,CAED,2CACC,WAAA",sourcesContent:["\n.app-content {\n\t// Virtual list needs to be full height and is scrollable\n\tdisplay: flex;\n\toverflow: hidden;\n\tflex-direction: column;\n\tmax-height: 100%;\n\n\t// TODO: remove after all legacy views are migrated\n\t// Hides the legacy app-content if shown view is not legacy\n\t&:not(&--hidden)::v-deep + #app-content {\n\t\tdisplay: none;\n\t}\n}\n\n$margin: 4px;\n$navigationToggleSize: 50px;\n\n.files-list {\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-content: center;\n\t\t// Do not grow or shrink (vertically)\n\t\tflex: 0 0;\n\t\t// Align with the navigation toggle icon\n\t\tmargin: $margin $margin $margin $navigationToggleSize;\n\t\t> * {\n\t\t\t// Do not grow or shrink (horizontally)\n\t\t\t// Only the breadcrumbs shrinks\n\t\t\tflex: 0 0;\n\t\t}\n\t}\n\t&__refresh-icon {\n\t\tflex: 0 0 44px;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\t&__loading-icon {\n\t\tmargin: auto;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},87289:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".app-navigation[data-v-657a978e] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-657a978e]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-657a978e]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}","",{version:3,sources:["webpack://./apps/files/src/views/Navigation.vue"],names:[],mappings:"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA",sourcesContent:["\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n"],sourceRoot:""}]);const a=r},35662:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".setting-link[data-v-76ca5d1f]:hover{text-decoration:underline}","",{version:3,sources:["webpack://./apps/files/src/views/Settings.vue"],names:[],mappings:"AACA,qCACC,yBAAA",sourcesContent:["\n.setting-link:hover {\n\ttext-decoration: underline;\n}\n"],sourceRoot:""}]);const a=r},5103:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".templates-picker__form[data-v-715b4161]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-715b4161]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-715b4161]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-715b4161]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-715b4161],.templates-picker__buttons input[type=submit][data-v-715b4161]{height:44px}.templates-picker[data-v-715b4161] .modal-container{position:relative}.templates-picker__loading[data-v-715b4161]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}","",{version:3,sources:["webpack://./apps/files/src/views/TemplatePicker.vue"],names:[],mappings:"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA",sourcesContent:["\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},37020:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,"\n/* @keyframes preview-gradient-fade {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n} */\n","",{version:3,sources:["webpack://./apps/files/src/components/FileEntry.vue"],names:[],mappings:";AA6mBA;;;;;;;;;;GAUA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<Fragment>\n\t\t<td class=\"files-list__row-checkbox\">\n\t\t\t<NcCheckboxRadioSwitch v-if=\"active\"\n\t\t\t\t:aria-label=\"t('files', 'Select the row for {displayName}', { displayName })\"\n\t\t\t\t:checked=\"selectedFiles\"\n\t\t\t\t:value=\"fileid\"\n\t\t\t\tname=\"selectedFiles\"\n\t\t\t\t@update:checked=\"onSelectionChange\" />\n\t\t</td>\n\n\t\t\x3c!-- Link to file --\x3e\n\t\t<td class=\"files-list__row-name\">\n\t\t\t<a ref=\"name\" v-bind=\"linkTo\" @click=\"execDefaultAction\">\n\t\t\t\t\x3c!-- Icon or preview --\x3e\n\t\t\t\t<span class=\"files-list__row-icon\">\n\t\t\t\t\t<FolderIcon v-if=\"source.type === 'folder'\" />\n\n\t\t\t\t\t\x3c!-- Decorative image, should not be aria documented --\x3e\n\t\t\t\t\t<span v-else-if=\"previewUrl && !backgroundFailed\"\n\t\t\t\t\t\tref=\"previewImg\"\n\t\t\t\t\t\tclass=\"files-list__row-icon-preview\"\n\t\t\t\t\t\t:style=\"{ backgroundImage }\" />\n\n\t\t\t\t\t<span v-else-if=\"mimeIconUrl\"\n\t\t\t\t\t\tclass=\"files-list__row-icon-preview files-list__row-icon-preview--mime\"\n\t\t\t\t\t\t:style=\"{ backgroundImage: mimeIconUrl }\" />\n\n\t\t\t\t\t<FileIcon v-else />\n\n\t\t\t\t\t\x3c!-- Favorite icon --\x3e\n\t\t\t\t\t<span v-if=\"isFavorite\"\n\t\t\t\t\t\tclass=\"files-list__row-icon-favorite\"\n\t\t\t\t\t\t:aria-label=\"t('files', 'Favorite')\">\n\t\t\t\t\t\t<StarIcon aria-hidden=\"true\" :size=\"20\" />\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\n\t\t\t\t\x3c!-- File name --\x3e\n\t\t\t\t<span class=\"files-list__row-name-text\">{{ displayName }}</span>\n\t\t\t</a>\n\t\t</td>\n\n\t\t\x3c!-- Actions --\x3e\n\t\t<td :class=\"`files-list__row-actions-${uniqueId}`\" class=\"files-list__row-actions\">\n\t\t\t\x3c!-- Inline actions --\x3e\n\t\t\t\x3c!-- TODO: implement CustomElementRender --\x3e\n\n\t\t\t\x3c!-- Menu actions --\x3e\n\t\t\t<NcActions v-if=\"active\"\n\t\t\t\tref=\"actionsMenu\"\n\t\t\t\t:boundaries-element=\"boundariesElement\"\n\t\t\t\t:container=\"boundariesElement\"\n\t\t\t\t:disabled=\"source._loading\"\n\t\t\t\t:force-title=\"true\"\n\t\t\t\t:force-menu=\"true\"\n\t\t\t\t:inline=\"enabledInlineActions.length\"\n\t\t\t\t:open.sync=\"openedMenu\">\n\t\t\t\t<NcActionButton v-for=\"action in enabledMenuActions\"\n\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t:class=\"'files-list__row-action-' + action.id\"\n\t\t\t\t\t@click=\"onActionClick(action)\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcLoadingIcon v-if=\"loading === action.id\" :size=\"18\" />\n\t\t\t\t\t\t<CustomSvgIconRender v-else :svg=\"action.iconSvgInline([source], currentView)\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ action.displayName([source], currentView) }}\n\t\t\t\t</NcActionButton>\n\t\t\t</NcActions>\n\t\t</td>\n\n\t\t\x3c!-- Size --\x3e\n\t\t<td v-if=\"isSizeAvailable\"\n\t\t\t:style=\"{ opacity: sizeOpacity }\"\n\t\t\tclass=\"files-list__row-size\"\n\t\t\t@click=\"openDetailsIfAvailable\">\n\t\t\t<span>{{ size }}</span>\n\t\t</td>\n\n\t\t\x3c!-- View columns --\x3e\n\t\t<td v-for=\"column in columns\"\n\t\t\t:key=\"column.id\"\n\t\t\t:class=\"`files-list__row-${currentView?.id}-${column.id}`\"\n\t\t\tclass=\"files-list__row-column-custom\"\n\t\t\t@click=\"openDetailsIfAvailable\">\n\t\t\t<CustomElementRender v-if=\"active\"\n\t\t\t\t:current-view=\"currentView\"\n\t\t\t\t:render=\"column.render\"\n\t\t\t\t:source=\"source\" />\n\t\t</td>\n\t</Fragment>\n</template>\n\n<script lang='ts'>\nimport { debounce } from 'debounce'\nimport { formatFileSize } from '@nextcloud/files'\nimport { Fragment } from 'vue-frag'\nimport { join } from 'path'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport CancelablePromise from 'cancelable-promise'\nimport FileIcon from 'vue-material-design-icons/File.vue'\nimport FolderIcon from 'vue-material-design-icons/Folder.vue'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport StarIcon from 'vue-material-design-icons/Star.vue'\nimport Vue from 'vue'\n\nimport { ACTION_DETAILS } from '../actions/sidebarAction.ts'\nimport { getFileActions } from '../services/FileAction.ts'\nimport { hashCode } from '../utils/hashUtils.ts'\nimport { isCachedPreview } from '../services/PreviewService.ts'\nimport { useActionsMenuStore } from '../store/actionsmenu.ts'\nimport { useFilesStore } from '../store/files.ts'\nimport { useKeyboardStore } from '../store/keyboard.ts'\nimport { useSelectionStore } from '../store/selection.ts'\nimport { useUserConfigStore } from '../store/userconfig.ts'\nimport CustomElementRender from './CustomElementRender.vue'\nimport CustomSvgIconRender from './CustomSvgIconRender.vue'\nimport logger from '../logger.js'\n\n// The registered actions list\nconst actions = getFileActions()\n\nexport default Vue.extend({\n\tname: 'FileEntry',\n\n\tcomponents: {\n\t\tCustomElementRender,\n\t\tCustomSvgIconRender,\n\t\tFileIcon,\n\t\tFolderIcon,\n\t\tFragment,\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcLoadingIcon,\n\t\tStarIcon,\n\t},\n\n\tprops: {\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisSizeAvailable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsource: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tnodes: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tfilesListWidth: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst actionsMenuStore = useActionsMenuStore()\n\t\tconst filesStore = useFilesStore()\n\t\tconst keyboardStore = useKeyboardStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\tconst userConfigStore = useUserConfigStore()\n\t\treturn {\n\t\t\tactionsMenuStore,\n\t\t\tfilesStore,\n\t\t\tkeyboardStore,\n\t\t\tselectionStore,\n\t\t\tuserConfigStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tbackgroundFailed: false,\n\t\t\tbackgroundImage: '',\n\t\t\tboundariesElement: document.querySelector('.app-content > .files-list'),\n\t\t\tloading: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tuserConfig() {\n\t\t\treturn this.userConfigStore.userConfig\n\t\t},\n\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\t\tcolumns() {\n\t\t\t// Hide columns if the list is too small\n\t\t\tif (this.filesListWidth < 512) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.currentView?.columns || []\n\t\t},\n\n\t\tdir() {\n\t\t\t// Remove any trailing slash but leave root slash\n\t\t\treturn (this.$route?.query?.dir || '/').replace(/^(.+)\\/$/, '$1')\n\t\t},\n\t\tfileid() {\n\t\t\treturn this.source?.fileid?.toString?.()\n\t\t},\n\t\tdisplayName() {\n\t\t\treturn this.source.attributes.displayName\n\t\t\t\t|| this.source.basename\n\t\t},\n\n\t\tsize() {\n\t\t\tconst size = parseInt(this.source.size, 10) || 0\n\t\t\tif (typeof size !== 'number' || size < 0) {\n\t\t\t\treturn this.t('files', 'Pending')\n\t\t\t}\n\t\t\treturn formatFileSize(size, true)\n\t\t},\n\t\tsizeOpacity() {\n\t\t\tconst size = parseInt(this.source.size, 10) || 0\n\t\t\tif (!size || size < 0) {\n\t\t\t\treturn 1\n\t\t\t}\n\n\t\t\t// Whatever theme is active, the contrast will pass WCAG AA\n\t\t\t// with color main text over main background and an opacity of 0.7\n\t\t\tconst minOpacity = 0.7\n\t\t\tconst maxOpacitySize = 10 * 1024 * 1024\n\t\t\treturn minOpacity + (1 - minOpacity) * Math.pow((this.source.size / maxOpacitySize), 2)\n\t\t},\n\n\t\tlinkTo() {\n\t\t\tif (this.source.type === 'folder') {\n\t\t\t\tconst to = { ...this.$route, query: { dir: join(this.dir, this.source.basename) } }\n\t\t\t\treturn {\n\t\t\t\t\tis: 'router-link',\n\t\t\t\t\ttitle: this.t('files', 'Open folder {name}', { name: this.displayName }),\n\t\t\t\t\tto,\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\tconst action = this.enabledDefaultActions[0]\n\t\t\t\tconst displayName = action.displayName([this.source], this.currentView)\n\t\t\t\treturn {\n\t\t\t\t\ttitle: displayName,\n\t\t\t\t\trole: 'button',\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\thref: this.source.source,\n\t\t\t\t// TODO: Use first action title ?\n\t\t\t\ttitle: this.t('files', 'Download file {name}', { name: this.displayName }),\n\t\t\t}\n\t\t},\n\n\t\tselectedFiles() {\n\t\t\treturn this.selectionStore.selected\n\t\t},\n\t\tisSelected() {\n\t\t\treturn this.selectedFiles.includes(this.source?.fileid?.toString?.())\n\t\t},\n\n\t\tcropPreviews() {\n\t\t\treturn this.userConfig.crop_image_previews\n\t\t},\n\t\tpreviewUrl() {\n\t\t\ttry {\n\t\t\t\tconst url = new URL(window.location.origin + this.source.attributes.previewUrl)\n\t\t\t\t// Request tiny previews\n\t\t\t\turl.searchParams.set('x', '32')\n\t\t\t\turl.searchParams.set('y', '32')\n\t\t\t\t// Handle cropping\n\t\t\t\turl.searchParams.set('a', this.cropPreviews === true ? '0' : '1')\n\t\t\t\treturn url.href\n\t\t\t} catch (e) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\t\tmimeIconUrl() {\n\t\t\tconst mimeType = this.source.mime || 'application/octet-stream'\n\t\t\tconst mimeIconUrl = window.OC?.MimeType?.getIconUrl?.(mimeType)\n\t\t\tif (mimeIconUrl) {\n\t\t\t\treturn `url(${mimeIconUrl})`\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\n\t\tenabledActions() {\n\t\t\treturn actions\n\t\t\t\t.filter(action => !action.enabled || action.enabled([this.source], this.currentView))\n\t\t\t\t.sort((a, b) => (a.order || 0) - (b.order || 0))\n\t\t},\n\t\tenabledInlineActions() {\n\t\t\tif (this.filesListWidth < 768) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\n\t\t},\n\t\tenabledMenuActions() {\n\t\t\tif (this.filesListWidth < 768) {\n\t\t\t\t// If we have a default action, do not render the first one\n\t\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\t\treturn this.enabledActions.slice(1)\n\t\t\t\t}\n\t\t\t\treturn this.enabledActions\n\t\t\t}\n\n\t\t\tconst actions = [\n\t\t\t\t...this.enabledInlineActions,\n\t\t\t\t...this.enabledActions.filter(action => !action.inline),\n\t\t\t]\n\n\t\t\t// If we have a default action, do not render the first one\n\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\treturn actions.slice(1)\n\t\t\t}\n\n\t\t\treturn actions\n\t\t},\n\t\tenabledDefaultActions() {\n\t\t\treturn [\n\t\t\t\t...this.enabledActions.filter(action => action.default),\n\t\t\t]\n\t\t},\n\t\topenedMenu: {\n\t\t\tget() {\n\t\t\t\treturn this.actionsMenuStore.opened === this.uniqueId\n\t\t\t},\n\t\t\tset(opened) {\n\t\t\t\tthis.actionsMenuStore.opened = opened ? this.uniqueId : null\n\t\t\t},\n\t\t},\n\n\t\tuniqueId() {\n\t\t\treturn hashCode(this.source.source)\n\t\t},\n\n\t\tisFavorite() {\n\t\t\treturn this.source.attributes.favorite === 1\n\t\t},\n\t},\n\n\twatch: {\n\t\tactive(active, before) {\n\t\t\tif (active === false && before === true) {\n\t\t\t\tthis.resetState()\n\n\t\t\t\t// When the row is not active anymore\n\t\t\t\t// remove the display from the row to prevent\n\t\t\t\t// keyboard interaction with it.\n\t\t\t\tthis.$el.parentNode.style.display = 'none'\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Restore default tabindex\n\t\t\tthis.$el.parentNode.style.display = ''\n\t\t},\n\n\t\t/**\n\t\t * When the source changes, reset the preview\n\t\t * and fetch the new one.\n\t\t */\n\t\tpreviewUrl() {\n\t\t\tthis.clearImg()\n\t\t\tthis.debounceIfNotCached()\n\t\t},\n\t},\n\n\t/**\n\t * The row is mounted once and reused as we scroll.\n\t */\n\tmounted() {\n\t\t// ⚠ Init the debounce function on mount and\n\t\t// not when the module is imported to\n\t\t// avoid sharing between recycled components\n\t\tthis.debounceGetPreview = debounce(function() {\n\t\t\tthis.fetchAndApplyPreview()\n\t\t}, 150, false)\n\n\t\t// Fetch the preview on init\n\t\tthis.debounceIfNotCached()\n\n\t\t// Right click watcher on tr\n\t\tthis.$el.parentNode?.addEventListener?.('contextmenu', this.onRightClick)\n\t},\n\n\tbeforeDestroy() {\n\t\tthis.resetState()\n\t},\n\n\tmethods: {\n\t\tasync debounceIfNotCached() {\n\t\t\tif (!this.previewUrl) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Check if we already have this preview cached\n\t\t\tconst isCached = await isCachedPreview(this.previewUrl)\n\t\t\tif (isCached) {\n\t\t\t\tthis.backgroundImage = `url(${this.previewUrl})`\n\t\t\t\tthis.backgroundFailed = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// We don't have this preview cached or it expired, requesting it\n\t\t\tthis.debounceGetPreview()\n\t\t},\n\n\t\tfetchAndApplyPreview() {\n\t\t\t// Ignore if no preview\n\t\t\tif (!this.previewUrl) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If any image is being processed, reset it\n\t\t\tif (this.previewPromise) {\n\t\t\t\tthis.clearImg()\n\t\t\t}\n\n\t\t\t// Store the promise to be able to cancel it\n\t\t\tthis.previewPromise = new CancelablePromise((resolve, reject, onCancel) => {\n\t\t\t\tconst img = new Image()\n\t\t\t\t// If active, load the preview with higher priority\n\t\t\t\timg.fetchpriority = this.active ? 'high' : 'auto'\n\t\t\t\timg.onload = () => {\n\t\t\t\t\tthis.backgroundImage = `url(${this.previewUrl})`\n\t\t\t\t\tthis.backgroundFailed = false\n\t\t\t\t\tresolve(img)\n\t\t\t\t}\n\t\t\t\timg.onerror = () => {\n\t\t\t\t\tthis.backgroundFailed = true\n\t\t\t\t\treject(img)\n\t\t\t\t}\n\t\t\t\timg.src = this.previewUrl\n\n\t\t\t\t// Image loading has been canceled\n\t\t\t\tonCancel(() => {\n\t\t\t\t\timg.onerror = null\n\t\t\t\t\timg.onload = null\n\t\t\t\t\timg.src = ''\n\t\t\t\t})\n\t\t\t})\n\t\t},\n\n\t\tresetState() {\n\t\t\t// Reset loading state\n\t\t\tthis.loading = ''\n\n\t\t\t// Reset the preview\n\t\t\tthis.clearImg()\n\n\t\t\t// Close menu\n\t\t\tthis.openedMenu = false\n\t\t},\n\n\t\tclearImg() {\n\t\t\tthis.backgroundImage = ''\n\t\t\tthis.backgroundFailed = false\n\n\t\t\tif (this.previewPromise) {\n\t\t\t\tthis.previewPromise.cancel()\n\t\t\t\tthis.previewPromise = null\n\t\t\t}\n\t\t},\n\n\t\tasync onActionClick(action) {\n\t\t\tconst displayName = action.displayName([this.source], this.currentView)\n\t\t\ttry {\n\t\t\t\t// Set the loading marker\n\t\t\t\tthis.loading = action.id\n\t\t\t\tVue.set(this.source, '_loading', true)\n\n\t\t\t\tconst success = await action.exec(this.source, this.currentView, this.dir)\n\n\t\t\t\t// If the action returns null, we stay silent\n\t\t\t\tif (success === null) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (success) {\n\t\t\t\t\tshowSuccess(this.t('files', '\"{displayName}\" action executed successfully', { displayName }))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tshowError(this.t('files', '\"{displayName}\" action failed', { displayName }))\n\t\t\t} catch (e) {\n\t\t\t\tlogger.error('Error while executing action', { action, e })\n\t\t\t\tshowError(this.t('files', '\"{displayName}\" action failed', { displayName }))\n\t\t\t} finally {\n\t\t\t\t// Reset the loading marker\n\t\t\t\tthis.loading = ''\n\t\t\t\tVue.set(this.source, '_loading', false)\n\t\t\t}\n\t\t},\n\t\texecDefaultAction(event) {\n\t\t\t// Do not execute the default action on the folder, navigate instead\n\t\t\tif (this.source.type === 'folder') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t\t// Execute the first default action if any\n\t\t\t\tthis.enabledDefaultActions[0].exec(this.source, this.currentView, this.dir)\n\t\t\t}\n\t\t},\n\n\t\topenDetailsIfAvailable(event) {\n\t\t\tconst detailsAction = this.enabledDefaultActions.find(action => action.id === ACTION_DETAILS)\n\t\t\tif (detailsAction) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tdetailsAction.exec(this.source, this.currentView)\n\t\t\t}\n\t\t},\n\n\t\tonSelectionChange(selection) {\n\t\t\tconst newSelectedIndex = this.index\n\t\t\tconst lastSelectedIndex = this.selectionStore.lastSelectedIndex\n\n\t\t\t// Get the last selected and select all files in between\n\t\t\tif (this.keyboardStore?.shiftKey && lastSelectedIndex !== null) {\n\t\t\t\tconst isAlreadySelected = this.selectedFiles.includes(this.fileid)\n\n\t\t\t\tconst start = Math.min(newSelectedIndex, lastSelectedIndex)\n\t\t\t\tconst end = Math.max(lastSelectedIndex, newSelectedIndex)\n\n\t\t\t\tconst lastSelection = this.selectionStore.lastSelection\n\t\t\t\tconst filesToSelect = this.nodes\n\t\t\t\t\t.map(file => file.fileid?.toString?.())\n\t\t\t\t\t.slice(start, end + 1)\n\n\t\t\t\t// If already selected, update the new selection _without_ the current file\n\t\t\t\tconst selection = [...lastSelection, ...filesToSelect]\n\t\t\t\t\t.filter(fileId => !isAlreadySelected || fileId !== this.fileid)\n\n\t\t\t\tlogger.debug('Shift key pressed, selecting all files in between', { start, end, filesToSelect, isAlreadySelected })\n\t\t\t\t// Keep previous lastSelectedIndex to be use for further shift selections\n\t\t\t\tthis.selectionStore.set(selection)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlogger.debug('Updating selection', { selection })\n\t\t\tthis.selectionStore.set(selection)\n\t\t\tthis.selectionStore.setLastIndex(newSelectedIndex)\n\t\t},\n\n\t\t// Open the actions menu on right click\n\t\tonRightClick(event) {\n\t\t\t// If already opened, fallback to default browser\n\t\t\tif (this.openedMenu) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If the clicked row is in the selection, open global menu\n\t\t\tconst isMoreThanOneSelected = this.selectedFiles.length > 1\n\t\t\tthis.actionsMenuStore.opened = this.isSelected && isMoreThanOneSelected ? 'global' : this.uniqueId\n\n\t\t\t// Prevent any browser defaults\n\t\t\tevent.preventDefault()\n\t\t\tevent.stopPropagation()\n\t\t},\n\n\t\tt: translate,\n\t\tformatFileSize,\n\t},\n})\n<\/script>\n\n<style scoped lang='scss'>\n/* Hover effect on tbody lines only */\ntr {\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n}\n\n/* Preview not loaded animation effect */\n.files-list__row-icon-preview:not([style*='background']) {\n background: var(--color-loading-dark);\n\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\n}\n</style>\n\n<style>\n/* @keyframes preview-gradient-fade {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n} */\n</style>\n"],sourceRoot:""}]);const a=r}},i={};function o(t){var e=i[t];if(void 0!==e)return e.exports;var s=i[t]={id:t,loaded:!1,exports:{}};return n[t].call(s.exports,s,s.exports,o),s.loaded=!0,s.exports}o.m=n,e=[],o.O=(t,n,i,s)=>{if(!n){var r=1/0;for(d=0;d<e.length;d++){n=e[d][0],i=e[d][1],s=e[d][2];for(var a=!0,l=0;l<n.length;l++)(!1&s||r>=s)&&Object.keys(o.O).every((t=>o.O[t](n[l])))?n.splice(l--,1):(a=!1,s<r&&(r=s));if(a){e.splice(d--,1);var c=i();void 0!==c&&(t=c)}}return t}s=s||0;for(var d=e.length;d>0&&e[d-1][2]>s;d--)e[d]=e[d-1];e[d]=[n,i,s]},o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),o.j=2181,(()=>{o.b=document.baseURI||self.location.href;var t={2181:0};o.O.j=e=>0===t[e];var e=(e,n)=>{var i,s,r=n[0],a=n[1],l=n[2],c=0;if(r.some((e=>0!==t[e]))){for(i in a)o.o(a,i)&&(o.m[i]=a[i]);if(l)var d=l(o)}for(e&&e(n);c<r.length;c++)s=r[c],o.o(t,s)&&t[s]&&t[s][0](),t[s]=0;return o.O(d)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),o.nc=void 0;var s=o.O(void 0,[7874],(()=>o(9570)));s=o.O(s)})();
+//# sourceMappingURL=files-main.js.map?v=3af3837e96b67c872e9d \ No newline at end of file
diff --git a/dist/files-main.js.map b/dist/files-main.js.map
index 85f61bf02cf..aa57b42a9e3 100644
--- a/dist/files-main.js.map
+++ b/dist/files-main.js.map
@@ -1 +1 @@
-{"version":3,"file":"files-main.js?v=0a5d904187d2f3ea5928","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?8258","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?81db","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c414","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?6cbe","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?afd8","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?1f7b","webpack:///nextcloud/apps/files/src/templates.js","webpack:///nextcloud/apps/files/src/legacy/filelistSearch.js","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/services/FileAction.ts","webpack:///nextcloud/apps/files/src/actions/deleteAction.ts","webpack:///nextcloud/apps/files/src/actions/sidebarAction.ts","webpack:///nextcloud/apps/files/src/store/files.ts","webpack:///nextcloud/apps/files/src/store/paths.ts","webpack:///nextcloud/apps/files/src/store/selection.ts","webpack:///nextcloud/apps/files/src/store/viewConfig.ts","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?e906","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?e59f","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?d357","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue","webpack:///nextcloud/apps/files/src/utils/hashUtils.ts","webpack:///nextcloud/apps/files/src/store/actionsmenu.ts","webpack:///nextcloud/apps/files/src/store/userconfig.ts","webpack:///nextcloud/apps/files/src/components/CustomElementRender.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/CustomElementRender.vue","webpack://nextcloud/./apps/files/src/components/CustomElementRender.vue?5f5c","webpack://nextcloud/./apps/files/src/components/CustomElementRender.vue?4ee7","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?2c34","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?6bea","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?5641","webpack:///nextcloud/apps/files/src/components/FileEntry.vue","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/store/keyboard.ts","webpack:///nextcloud/apps/files/src/services/PreviewService.ts","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?0601","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?bfb5","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?da7c","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?14b9","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?80db","webpack:///nextcloud/apps/files/src/mixins/filesListWidth.ts","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListHeaderActions.vue?993d","webpack://nextcloud/./apps/files/src/components/FilesListHeaderActions.vue?9823","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue","webpack:///nextcloud/apps/files/src/mixins/filesSorting.ts","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?d900","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?5686","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?c7b4","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?349b","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?034b","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?3555","webpack:///nextcloud/apps/files/src/services/Navigation.ts","webpack:///nextcloud/apps/files/src/views/FilesList.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/views/FilesList.vue","webpack://nextcloud/./apps/files/src/views/FilesList.vue?b2cc","webpack://nextcloud/./apps/files/src/views/FilesList.vue?1e5b","webpack://nextcloud/./apps/files/src/views/Navigation.vue?8122","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?08cb","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?ff39","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2966","webpack://nextcloud/./apps/files/src/views/Settings.vue?84f7","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack://nextcloud/./apps/files/src/components/Setting.vue?8d57","webpack:///nextcloud/apps/files/src/views/Settings.vue","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Settings.vue?7e31","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack:///nextcloud/apps/files/src/views/Navigation.vue","webpack:///nextcloud/core/src/OCP/accessibility.js","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Navigation.vue?e9dc","webpack://nextcloud/./apps/files/src/views/Navigation.vue?74b9","webpack:///nextcloud/apps/files/src/legacy/navigationMapper.js","webpack:///nextcloud/apps/files/src/router/router.js","webpack:///nextcloud/apps/files/src/main.ts","webpack:///nextcloud/apps/files/src/services/RouterService.ts","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/services/ServiceWorker.js","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport const getRootPath = function() {\n\tif (getCurrentUser()) {\n\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`)\n\t} else {\n\t\treturn generateRemoteUrl('webdav').replace('/remote.php', '/public.php')\n\t}\n}\n\nexport const isPublic = function() {\n\treturn !getCurrentUser()\n}\n\nexport const getToken = function() {\n\treturn document.getElementById('sharingToken') && document.getElementById('sharingToken').value\n}\n\n/**\n * Return the current directory, fallback to root\n *\n * @return {string}\n */\nexport const getCurrentDirectory = function() {\n\tconst currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo\n\t\t|| { path: '/', name: '' }\n\n\t// Make sure we don't have double slashes\n\treturn `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\\/\\//gi, '/')\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst encodeFilePath = function(path) {\n\tconst pathSections = (path.startsWith('/') ? path : `/${path}`).split('/')\n\tlet relativePath = ''\n\tpathSections.forEach((section) => {\n\t\tif (section !== '') {\n\t\t\trelativePath += '/' + encodeURIComponent(section)\n\t\t}\n\t})\n\treturn relativePath\n}\n\n/**\n * Extract dir and name from file path\n *\n * @param {string} path the full path\n * @return {string[]} [dirPath, fileName]\n */\nconst extractFilePaths = function(path) {\n\tconst pathSections = path.split('/')\n\tconst fileName = pathSections[pathSections.length - 1]\n\tconst dirPath = pathSections.slice(0, pathSections.length - 1).join('/')\n\treturn [dirPath, fileName]\n}\n\nexport { encodeFilePath, extractFilePaths }\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li class=\"template-picker__item\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\ttype=\"radio\"\n\t\t\tclass=\"radio\"\n\t\t\tname=\"template-picker\"\n\t\t\t@change=\"onCheck\">\n\n\t\t<label :for=\"id\" class=\"template-picker__label\">\n\t\t\t<div class=\"template-picker__preview\"\n\t\t\t\t:class=\"failedPreview ? 'template-picker__preview--failed' : ''\">\n\t\t\t\t<img class=\"template-picker__image\"\n\t\t\t\t\t:src=\"realPreviewUrl\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t@error=\"onFailure\">\n\t\t\t</div>\n\n\t\t\t<span class=\"template-picker__title\">\n\t\t\t\t{{ nameWithoutExt }}\n\t\t\t</span>\n\t\t</label>\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { encodeFilePath } from '../utils/fileUtils.js'\nimport { getToken, isPublic } from '../utils/davUtils.js'\n\n// preview width generation\nconst previewWidth = 256\n\nexport default {\n\tname: 'TemplatePreview',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpreviewUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\thasPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tratio: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailedPreview: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.basename.indexOf('.') > -1 ? this.basename.split('.').slice(0, -1).join('.') : this.basename\n\t\t},\n\n\t\tid() {\n\t\t\treturn `template-picker-${this.fileid}`\n\t\t},\n\n\t\trealPreviewUrl() {\n\t\t\t// If original preview failed, fallback to mime icon\n\t\t\tif (this.failedPreview && this.mimeIcon) {\n\t\t\t\treturn this.mimeIcon\n\t\t\t}\n\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn this.previewUrl\n\t\t\t}\n\t\t\t// TODO: find a nicer standard way of doing this?\n\t\t\tif (isPublic()) {\n\t\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${getToken()}?fileId=${this.fileid}&file=${encodeFilePath(this.filename)}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.fileid}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t},\n\n\t\tmimeIcon() {\n\t\t\treturn OC.MimeType.getIconUrl(this.mime)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonCheck() {\n\t\t\tthis.$emit('check', this.fileid)\n\t\t},\n\t\tonFailure() {\n\t\t\tthis.failedPreview = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePreview.vue?vue&type=template&id=6c072a31&scoped=true&\"\nimport script from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6c072a31\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"template-picker__item\"},[_c('input',{staticClass:\"radio\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"template-picker\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onCheck}}),_vm._v(\" \"),_c('label',{staticClass:\"template-picker__label\",attrs:{\"for\":_vm.id}},[_c('div',{staticClass:\"template-picker__preview\",class:_vm.failedPreview ? 'template-picker__preview--failed' : ''},[_c('img',{staticClass:\"template-picker__image\",attrs:{\"src\":_vm.realPreviewUrl,\"alt\":\"\",\"draggable\":\"false\"},on:{\"error\":_vm.onFailure}})]),_vm._v(\" \"),_c('span',{staticClass:\"template-picker__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.nameWithoutExt)+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<NcModal v-if=\"opened\"\n\t\t:clear-view-delay=\"-1\"\n\t\tclass=\"templates-picker\"\n\t\tsize=\"normal\"\n\t\t@close=\"close\">\n\t\t<form class=\"templates-picker__form\"\n\t\t\t:style=\"style\"\n\t\t\t@submit.prevent.stop=\"onSubmit\">\n\t\t\t<h2>{{ t('files', 'Pick a template for {name}', { name: nameWithoutExt }) }}</h2>\n\n\t\t\t<!-- Templates list -->\n\t\t\t<ul class=\"templates-picker__list\">\n\t\t\t\t<TemplatePreview v-bind=\"emptyTemplate\"\n\t\t\t\t\t:checked=\"checked === emptyTemplate.fileid\"\n\t\t\t\t\t@check=\"onCheck\" />\n\n\t\t\t\t<TemplatePreview v-for=\"template in provider.templates\"\n\t\t\t\t\t:key=\"template.fileid\"\n\t\t\t\t\tv-bind=\"template\"\n\t\t\t\t\t:checked=\"checked === template.fileid\"\n\t\t\t\t\t:ratio=\"provider.ratio\"\n\t\t\t\t\t@check=\"onCheck\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Cancel and submit -->\n\t\t\t<div class=\"templates-picker__buttons\">\n\t\t\t\t<button @click=\"close\">\n\t\t\t\t\t{{ t('files', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<input type=\"submit\"\n\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t:value=\"t('files', 'Create')\"\n\t\t\t\t\t:aria-label=\"t('files', 'Create a new file with the selected template')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<NcEmptyContent v-if=\"loading\" class=\"templates-picker__loading\" icon=\"icon-loading\">\n\t\t\t{{ t('files', 'Creating file') }}\n\t\t</NcEmptyContent>\n\t</NcModal>\n</template>\n\n<script>\nimport { normalize } from 'path'\nimport { showError } from '@nextcloud/dialogs'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal.js'\n\nimport { getCurrentDirectory } from '../utils/davUtils.js'\nimport { createFromTemplate, getTemplates } from '../services/Templates.js'\nimport TemplatePreview from '../components/TemplatePreview.vue'\n\nconst border = 2\nconst margin = 8\nconst width = margin * 20\n\nexport default {\n\tname: 'TemplatePicker',\n\n\tcomponents: {\n\t\tNcEmptyContent,\n\t\tNcModal,\n\t\tTemplatePreview,\n\t},\n\n\tprops: {\n\t\tlogger: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Check empty template by default\n\t\t\tchecked: -1,\n\t\t\tloading: false,\n\t\t\tname: null,\n\t\t\topened: false,\n\t\t\tprovider: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.name.indexOf('.') > -1\n\t\t\t\t? this.name.split('.').slice(0, -1).join('.')\n\t\t\t\t: this.name\n\t\t},\n\n\t\temptyTemplate() {\n\t\t\treturn {\n\t\t\t\tbasename: t('files', 'Blank'),\n\t\t\t\tfileid: -1,\n\t\t\t\tfilename: this.t('files', 'Blank'),\n\t\t\t\thasPreview: false,\n\t\t\t\tmime: this.provider?.mimetypes[0] || this.provider?.mimetypes,\n\t\t\t}\n\t\t},\n\n\t\tselectedTemplate() {\n\t\t\treturn this.provider.templates.find(template => template.fileid === this.checked)\n\t\t},\n\n\t\t/**\n\t\t * Style css vars bin,d\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--margin': margin + 'px',\n\t\t\t\t'--width': width + 'px',\n\t\t\t\t'--border': border + 'px',\n\t\t\t\t'--fullwidth': width + 2 * margin + 2 * border + 'px',\n\t\t\t\t'--height': this.provider.ratio ? Math.round(width / this.provider.ratio) + 'px' : null,\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the picker\n\t\t *\n\t\t * @param {string} name the file name to create\n\t\t * @param {object} provider the template provider picked\n\t\t */\n\t\tasync open(name, provider) {\n\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.name = name\n\t\t\tthis.provider = provider\n\n\t\t\tconst templates = await getTemplates()\n\t\t\tconst fetchedProvider = templates.find((fetchedProvider) => fetchedProvider.app === provider.app && fetchedProvider.label === provider.label)\n\t\t\tif (fetchedProvider === null) {\n\t\t\t\tthrow new Error('Failed to match provider in results')\n\t\t\t}\n\t\t\tthis.provider = fetchedProvider\n\n\t\t\t// If there is no templates available, just create an empty file\n\t\t\tif (fetchedProvider.templates.length === 0) {\n\t\t\t\tthis.onSubmit()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Else, open the picker\n\t\t\tthis.opened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the picker and reset variables\n\t\t */\n\t\tclose() {\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.loading = false\n\t\t\tthis.name = null\n\t\t\tthis.opened = false\n\t\t\tthis.provider = null\n\t\t},\n\n\t\t/**\n\t\t * Manages the radio template picker change\n\t\t *\n\t\t * @param {number} fileid the selected template file id\n\t\t */\n\t\tonCheck(fileid) {\n\t\t\tthis.checked = fileid\n\t\t},\n\n\t\tasync onSubmit() {\n\t\t\tthis.loading = true\n\t\t\tconst currentDirectory = getCurrentDirectory()\n\t\t\tconst fileList = OCA?.Files?.App?.currentFileList\n\n\t\t\t// If the file doesn't have an extension, add the default one\n\t\t\tif (this.nameWithoutExt === this.name) {\n\t\t\t\tthis.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })\n\t\t\t\tthis.name = this.name + this.provider?.extension\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await createFromTemplate(\n\t\t\t\t\tnormalize(`${currentDirectory}/${this.name}`),\n\t\t\t\t\tthis.selectedTemplate?.filename,\n\t\t\t\t\tthis.selectedTemplate?.templateType,\n\t\t\t\t)\n\t\t\t\tthis.logger.debug('Created new file', fileInfo)\n\n\t\t\t\t// Fetch FileInfo and model\n\t\t\t\tconst data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)\n\t\t\t\tconst model = new OCA.Files.FileInfoModel(data, {\n\t\t\t\t\tfilesClient: fileList?.filesClient,\n\t\t\t\t})\n\n\t\t\t\t// Run default action\n\t\t\t\tconst fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)\n\t\t\t\tif (fileAction) {\n\t\t\t\t\tfileAction.action(fileInfo.basename, {\n\t\t\t\t\t\t$file: fileList?.findFileEl(this.name),\n\t\t\t\t\t\tdir: currentDirectory,\n\t\t\t\t\t\tfileList,\n\t\t\t\t\t\tfileActions: fileList?.fileActions,\n\t\t\t\t\t\tfileInfoModel: model,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.close()\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Error while creating the new file from template')\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(this.t('files', 'Unable to create new file from template'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nexport const getTemplates = async function() {\n\tconst response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new file from a specified template\n *\n * @param {string} filePath The new file destination path\n * @param {string} templatePath The template source path\n * @param {string} templateType The template type e.g 'user'\n */\nexport const createFromTemplate = async function(filePath, templatePath, templateType) {\n\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {\n\t\tfilePath,\n\t\ttemplatePath,\n\t\ttemplateType,\n\t})\n\treturn response.data.ocs.data\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePicker.vue?vue&type=template&id=715b4161&scoped=true&\"\nimport script from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"715b4161\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.opened)?_c('NcModal',{staticClass:\"templates-picker\",attrs:{\"clear-view-delay\":-1,\"size\":\"normal\"},on:{\"close\":_vm.close}},[_c('form',{staticClass:\"templates-picker__form\",style:(_vm.style),on:{\"submit\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onSubmit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('files', 'Pick a template for {name}', { name: _vm.nameWithoutExt })))]),_vm._v(\" \"),_c('ul',{staticClass:\"templates-picker__list\"},[_c('TemplatePreview',_vm._b({attrs:{\"checked\":_vm.checked === _vm.emptyTemplate.fileid},on:{\"check\":_vm.onCheck}},'TemplatePreview',_vm.emptyTemplate,false)),_vm._v(\" \"),_vm._l((_vm.provider.templates),function(template){return _c('TemplatePreview',_vm._b({key:template.fileid,attrs:{\"checked\":_vm.checked === template.fileid,\"ratio\":_vm.provider.ratio},on:{\"check\":_vm.onCheck}},'TemplatePreview',template,false))})],2),_vm._v(\" \"),_c('div',{staticClass:\"templates-picker__buttons\"},[_c('button',{on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"aria-label\":_vm.t('files', 'Create a new file with the selected template')},domProps:{\"value\":_vm.t('files', 'Create')}})])]),_vm._v(\" \"),(_vm.loading)?_c('NcEmptyContent',{staticClass:\"templates-picker__loading\",attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files', 'Creating file'))+\"\\n\\t\")]):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentDirectory } from './utils/davUtils.js'\nimport axios from '@nextcloud/axios'\nimport Vue from 'vue'\n\nimport TemplatePickerView from './views/TemplatePicker.vue'\nimport { showError } from '@nextcloud/dialogs'\n\n// Set up logger\nconst logger = getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\n// Create document root\nconst TemplatePickerRoot = document.createElement('div')\nTemplatePickerRoot.id = 'template-picker'\ndocument.body.appendChild(TemplatePickerRoot)\n\n// Retrieve and init templates\nlet templates = loadState('files', 'templates', [])\nlet templatesPath = loadState('files', 'templates_path', false)\nlogger.debug('Templates providers', templates)\nlogger.debug('Templates folder', { templatesPath })\n\n// Init vue app\nconst View = Vue.extend(TemplatePickerView)\nconst TemplatePicker = new View({\n\tname: 'TemplatePicker',\n\tpropsData: {\n\t\tlogger,\n\t},\n})\nTemplatePicker.$mount('#template-picker')\n\n// Init template engine after load to make sure it's the last injected entry\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (!templatesPath) {\n\t\tlogger.debug('Templates folder not initialized')\n\t\tconst initTemplatesPlugin = {\n\t\t\tattach(menu) {\n\t\t\t\t// register the new menu entry\n\t\t\t\tmenu.addMenuEntry({\n\t\t\t\t\tid: 'template-init',\n\t\t\t\t\tdisplayName: t('files', 'Set up templates folder'),\n\t\t\t\t\ttemplateName: t('files', 'Templates'),\n\t\t\t\t\ticonClass: 'icon-template-add',\n\t\t\t\t\tfileType: 'file',\n\t\t\t\t\tactionHandler(name) {\n\t\t\t\t\t\tinitTemplatesFolder(name)\n\t\t\t\t\t\tmenu.removeMenuEntry('template-init')\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t\tOC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)\n\t}\n})\n\n// Init template files menu\ntemplates.forEach((provider, index) => {\n\tconst newTemplatePlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: `template-new-${provider.app}-${index}`,\n\t\t\t\tdisplayName: provider.label,\n\t\t\t\ttemplateName: provider.label + provider.extension,\n\t\t\t\ticonClass: provider.iconClass || 'icon-file',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tTemplatePicker.open(name, provider)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)\n})\n\n/**\n * Init the template directory\n *\n * @param {string} name the templates folder name\n */\nconst initTemplatesFolder = async function(name) {\n\tconst templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')\n\ttry {\n\t\tlogger.debug('Initializing the templates directory', { templatePath })\n\t\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {\n\t\t\ttemplatePath,\n\t\t\tcopySystemTemplates: true,\n\t\t})\n\n\t\t// Go to template directory\n\t\tOCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)\n\n\t\ttemplates = response.data.ocs.data.templates\n\t\ttemplatesPath = response.data.ocs.data.template_path\n\t} catch (error) {\n\t\tlogger.error('Unable to initialize the templates directory')\n\t\tshowError(t('files', 'Unable to initialize the templates directory'))\n\t}\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\n(function() {\n\n\tconst FilesPlugin = {\n\t\tattach(fileList) {\n\t\t\tsubscribe('nextcloud:unified-search.search', ({ query }) => {\n\t\t\t\tfileList.setFilter(query)\n\t\t\t})\n\t\t\tsubscribe('nextcloud:unified-search.reset', () => {\n\t\t\t\tthis.query = null\n\t\t\t\tfileList.setFilter('')\n\t\t\t})\n\n\t\t},\n\t}\n\n\twindow.OC.Plugins.register('OCA.Files.FileList', FilesPlugin)\n\n})()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport logger from '../logger';\nexport class FileAction {\n _action;\n constructor(action) {\n this.validateAction(action);\n this._action = action;\n }\n get id() {\n return this._action.id;\n }\n get displayName() {\n return this._action.displayName;\n }\n get iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\n }\n get execBatch() {\n return this._action.execBatch;\n }\n get order() {\n return this._action.order;\n }\n get default() {\n return this._action.default;\n }\n get inline() {\n return this._action.inline;\n }\n get renderInline() {\n return this._action.renderInline;\n }\n validateAction(action) {\n if (!action.id || typeof action.id !== 'string') {\n throw new Error('Invalid id');\n }\n if (!action.displayName || typeof action.displayName !== 'function') {\n throw new Error('Invalid displayName function');\n }\n if (!action.iconSvgInline || typeof action.iconSvgInline !== 'function') {\n throw new Error('Invalid iconSvgInline function');\n }\n if (!action.exec || typeof action.exec !== 'function') {\n throw new Error('Invalid exec function');\n }\n // Optional properties --------------------------------------------\n if ('enabled' in action && typeof action.enabled !== 'function') {\n throw new Error('Invalid enabled function');\n }\n if ('execBatch' in action && typeof action.execBatch !== 'function') {\n throw new Error('Invalid execBatch function');\n }\n if ('order' in action && typeof action.order !== 'number') {\n throw new Error('Invalid order');\n }\n if ('default' in action && typeof action.default !== 'boolean') {\n throw new Error('Invalid default');\n }\n if ('inline' in action && typeof action.inline !== 'function') {\n throw new Error('Invalid inline function');\n }\n if ('renderInline' in action && typeof action.renderInline !== 'function') {\n throw new Error('Invalid renderInline function');\n }\n }\n}\nexport const registerFileAction = function (action) {\n if (typeof window._nc_fileactions === 'undefined') {\n window._nc_fileactions = [];\n logger.debug('FileActions initialized');\n }\n // Check duplicates\n if (window._nc_fileactions.find(search => search.id === action.id)) {\n logger.error(`FileAction ${action.id} already registered`, { action });\n return;\n }\n window._nc_fileactions.push(action);\n};\nexport const getFileActions = function () {\n return window._nc_fileactions || [];\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { emit } from '@nextcloud/event-bus';\nimport { Permission, Node } from '@nextcloud/files';\nimport { translate as t } from '@nextcloud/l10n';\nimport axios from '@nextcloud/axios';\nimport TrashCan from '@mdi/svg/svg/trash-can.svg?raw';\nimport { registerFileAction, FileAction } from '../services/FileAction.ts';\nimport logger from '../logger.js';\nregisterFileAction(new FileAction({\n id: 'delete',\n displayName(nodes, view) {\n return view.id === 'trashbin'\n ? t('files_trashbin', 'Delete permanently')\n : t('files', 'Delete');\n },\n iconSvgInline: () => TrashCan,\n enabled(nodes) {\n return nodes.length > 0 && nodes\n .map(node => node.permissions)\n .every(permission => (permission & Permission.DELETE) !== 0);\n },\n async exec(node) {\n try {\n await axios.delete(node.source);\n // Let's delete even if it's moved to the trashbin\n // since it has been removed from the current view\n // and changing the view will trigger a reload anyway.\n emit('files:node:deleted', node);\n return true;\n }\n catch (error) {\n logger.error('Error while deleting a file', { error, source: node.source, node });\n return false;\n }\n },\n async execBatch(nodes, view, dir) {\n return Promise.all(nodes.map(node => this.exec(node, view, dir)));\n },\n order: 100,\n}));\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { translate as t } from '@nextcloud/l10n';\nimport InformationSvg from '@mdi/svg/svg/information-variant.svg?raw';\nimport { registerFileAction, FileAction } from '../services/FileAction.ts';\nimport logger from '../logger.js';\nexport const ACTION_DETAILS = 'details';\nregisterFileAction(new FileAction({\n id: ACTION_DETAILS,\n displayName: () => t('files', 'Details'),\n iconSvgInline: () => InformationSvg,\n // Sidebar currently supports user folder only, /files/USER\n enabled: (files) => !!window?.OCA?.Files?.Sidebar\n && files.some(node => node.root?.startsWith('/files/')),\n async exec(node) {\n try {\n // TODO: migrate Sidebar to use a Node instead\n window?.OCA?.Files?.Sidebar?.open?.(node.path);\n return null;\n }\n catch (error) {\n logger.error('Error while opening sidebar', { error });\n return false;\n }\n },\n default: true,\n order: -50,\n}));\n","import { defineStore } from 'pinia';\nimport { subscribe } from '@nextcloud/event-bus';\nimport logger from '../logger';\nimport Vue from 'vue';\nexport const useFilesStore = function () {\n const store = defineStore('files', {\n state: () => ({\n files: {},\n roots: {},\n }),\n getters: {\n /**\n * Get a file or folder by id\n */\n getNode: (state) => (id) => state.files[id],\n /**\n * Get a list of files or folders by their IDs\n * Does not return undefined values\n */\n getNodes: (state) => (ids) => ids\n .map(id => state.files[id])\n .filter(Boolean),\n /**\n * Get a file or folder by id\n */\n getRoot: (state) => (service) => state.roots[service],\n },\n actions: {\n updateNodes(nodes) {\n // Update the store all at once\n const files = nodes.reduce((acc, node) => {\n if (!node.fileid) {\n logger.warn('Trying to update/set a node without fileid', node);\n return acc;\n }\n acc[node.fileid] = node;\n return acc;\n }, {});\n Vue.set(this, 'files', { ...this.files, ...files });\n },\n deleteNodes(nodes) {\n nodes.forEach(node => {\n if (node.fileid) {\n Vue.delete(this.files, node.fileid);\n }\n });\n },\n setRoot({ service, root }) {\n Vue.set(this.roots, service, root);\n },\n onDeletedNode(node) {\n this.deleteNodes([node]);\n },\n }\n });\n const fileStore = store(...arguments);\n // Make sure we only register the listeners once\n if (!fileStore._initialized) {\n // subscribe('files:node:created', fileStore.onCreatedNode)\n subscribe('files:node:deleted', fileStore.onDeletedNode);\n // subscribe('files:node:moved', fileStore.onMovedNode)\n // subscribe('files:node:updated', fileStore.onUpdatedNode)\n fileStore._initialized = true;\n }\n return fileStore;\n};\n","import { defineStore } from 'pinia';\nimport { subscribe } from '@nextcloud/event-bus';\nimport Vue from 'vue';\nexport const usePathsStore = function () {\n const store = defineStore('paths', {\n state: () => ({\n paths: {}\n }),\n getters: {\n getPath: (state) => {\n return (service, path) => {\n if (!state.paths[service]) {\n return undefined;\n }\n return state.paths[service][path];\n };\n },\n },\n actions: {\n addPath(payload) {\n // If it doesn't exists, init the service state\n if (!this.paths[payload.service]) {\n Vue.set(this.paths, payload.service, {});\n }\n // Now we can set the provided path\n Vue.set(this.paths[payload.service], payload.path, payload.fileid);\n },\n }\n });\n const pathsStore = store(...arguments);\n // Make sure we only register the listeners once\n if (!pathsStore._initialized) {\n // TODO: watch folders to update paths?\n // subscribe('files:node:created', pathsStore.onCreatedNode)\n // subscribe('files:node:deleted', pathsStore.onDeletedNode)\n // subscribe('files:node:moved', pathsStore.onMovedNode)\n pathsStore._initialized = true;\n }\n return pathsStore;\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nimport Vue from 'vue';\nimport { FileId, SelectionStore } from '../types';\nexport const useSelectionStore = defineStore('selection', {\n state: () => ({\n selected: [],\n lastSelection: [],\n lastSelectedIndex: null,\n }),\n actions: {\n /**\n * Set the selection of fileIds\n */\n set(selection = []) {\n Vue.set(this, 'selected', selection);\n },\n /**\n * Set the last selected index\n */\n setLastIndex(lastSelectedIndex = null) {\n // Update the last selection if we provided a new selection starting point\n Vue.set(this, 'lastSelection', lastSelectedIndex ? this.selected : []);\n Vue.set(this, 'lastSelectedIndex', lastSelectedIndex);\n },\n /**\n * Reset the selection\n */\n reset() {\n Vue.set(this, 'selected', []);\n Vue.set(this, 'lastSelection', []);\n Vue.set(this, 'lastSelectedIndex', null);\n }\n }\n});\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nimport { emit, subscribe } from '@nextcloud/event-bus';\nimport { generateUrl } from '@nextcloud/router';\nimport { loadState } from '@nextcloud/initial-state';\nimport axios from '@nextcloud/axios';\nimport Vue from 'vue';\nconst viewConfig = loadState('files', 'viewConfigs', {});\nexport const useViewConfigStore = function () {\n const store = defineStore('viewconfig', {\n state: () => ({\n viewConfig,\n }),\n getters: {\n getConfig: (state) => (view) => state.viewConfig[view] || {},\n },\n actions: {\n /**\n * Update the view config local store\n */\n onUpdate(view, key, value) {\n if (!this.viewConfig[view]) {\n Vue.set(this.viewConfig, view, {});\n }\n Vue.set(this.viewConfig[view], key, value);\n },\n /**\n * Update the view config local store AND on server side\n */\n async update(view, key, value) {\n axios.put(generateUrl(`/apps/files/api/v1/views/${view}/${key}`), {\n value,\n });\n emit('files:viewconfig:updated', { view, key, value });\n },\n /**\n * Set the sorting key AND sort by ASC\n * The key param must be a valid key of a File object\n * If not found, will be searched within the File attributes\n */\n setSortingBy(key = 'basename', view = 'files') {\n // Save new config\n this.update(view, 'sorting_mode', key);\n this.update(view, 'sorting_direction', 'asc');\n },\n /**\n * Toggle the sorting direction\n */\n toggleSortingDirection(view = 'files') {\n const config = this.getConfig(view) || { 'sorting_direction': 'asc' };\n const newDirection = config.sorting_direction === 'asc' ? 'desc' : 'asc';\n // Save new config\n this.update(view, 'sorting_direction', newDirection);\n }\n }\n });\n const viewConfigStore = store(...arguments);\n // Make sure we only register the listeners once\n if (!viewConfigStore._initialized) {\n subscribe('files:viewconfig:updated', function ({ view, key, value }) {\n viewConfigStore.onUpdate(view, key, value);\n });\n viewConfigStore._initialized = true;\n }\n return viewConfigStore;\n};\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcBreadcrumbs',{attrs:{\"data-cy-files-content-breadcrumbs\":\"\"}},_vm._l((_vm.sections),function(section,index){return _c('NcBreadcrumb',_vm._b({key:section.dir,attrs:{\"aria-label\":_vm.ariaLabel(section),\"title\":_vm.ariaLabel(section)},nativeOn:{\"click\":function($event){return _vm.onClick(section.to)}},scopedSlots:_vm._u([(index === 0)?{key:\"icon\",fn:function(){return [_c('Home',{attrs:{\"size\":20}})]},proxy:true}:null],null,true)},'NcBreadcrumb',section,false))}),1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<NcBreadcrumbs data-cy-files-content-breadcrumbs>\n\t\t<!-- Current path sections -->\n\t\t<NcBreadcrumb v-for=\"(section, index) in sections\"\n\t\t\t:key=\"section.dir\"\n\t\t\t:aria-label=\"ariaLabel(section)\"\n\t\t\t:title=\"ariaLabel(section)\"\n\t\t\tv-bind=\"section\"\n\t\t\t@click.native=\"onClick(section.to)\">\n\t\t\t<template v-if=\"index === 0\" #icon>\n\t\t\t\t<Home :size=\"20\" />\n\t\t\t</template>\n\t\t</NcBreadcrumb>\n\t</NcBreadcrumbs>\n</template>\n\n<script>\nimport { basename } from 'path'\nimport Home from 'vue-material-design-icons/Home.vue'\nimport NcBreadcrumb from '@nextcloud/vue/dist/Components/NcBreadcrumb.js'\nimport NcBreadcrumbs from '@nextcloud/vue/dist/Components/NcBreadcrumbs.js'\nimport Vue from 'vue'\n\nimport { useFilesStore } from '../store/files.ts'\nimport { usePathsStore } from '../store/paths.ts'\n\nexport default Vue.extend({\n\tname: 'BreadCrumbs',\n\n\tcomponents: {\n\t\tHome,\n\t\tNcBreadcrumbs,\n\t\tNcBreadcrumb,\n\t},\n\n\tprops: {\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\tdefault: '/',\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst filesStore = useFilesStore()\n\t\tconst pathsStore = usePathsStore()\n\t\treturn {\n\t\t\tfilesStore,\n\t\t\tpathsStore,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\n\t\tdirs() {\n\t\t\tconst cumulativePath = (acc) => (value) => (acc += `${value}/`)\n\t\t\t// Generate a cumulative path for each path segment: ['/', '/foo', '/foo/bar', ...] etc\n\t\t\tconst paths = this.path.split('/').filter(Boolean).map(cumulativePath('/'))\n\t\t\t// Strip away trailing slash\n\t\t\treturn ['/', ...paths.map(path => path.replace(/^(.+)\\/$/, '$1'))]\n\t\t},\n\n\t\tsections() {\n\t\t\treturn this.dirs.map(dir => {\n\t\t\t\tconst to = { ...this.$route, query: { dir } }\n\t\t\t\treturn {\n\t\t\t\t\tdir,\n\t\t\t\t\texact: true,\n\t\t\t\t\tname: this.getDirDisplayName(dir),\n\t\t\t\t\tto,\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n\n\tmethods: {\n\t\tgetNodeFromId(id) {\n\t\t\treturn this.filesStore.getNode(id)\n\t\t},\n\t\tgetFileIdFromPath(path) {\n\t\t\treturn this.pathsStore.getPath(this.currentView?.id, path)\n\t\t},\n\t\tgetDirDisplayName(path) {\n\t\t\tif (path === '/') {\n\t\t\t\treturn t('files', 'Home')\n\t\t\t}\n\n\t\t\tconst fileId = this.getFileIdFromPath(path)\n\t\t\tconst node = this.getNodeFromId(fileId)\n\t\t\treturn node?.attributes?.displayName || basename(path)\n\t\t},\n\n\t\tonClick(to) {\n\t\t\tif (to?.query?.dir === this.$route.query.dir) {\n\t\t\t\tthis.$emit('reload')\n\t\t\t}\n\t\t},\n\n\t\tariaLabel(section) {\n\t\t\tif (section?.to?.query?.dir === this.$route.query.dir) {\n\t\t\t\treturn t('files', 'Reload current directory')\n\t\t\t}\n\t\t\treturn t('files', 'Go to the \"{dir}\" directory', section)\n\t\t},\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.breadcrumb {\n\t// Take as much space as possible\n\tflex: 1 1 100% !important;\n\twidth: 100%;\n\n\t::v-deep a {\n\t\tcursor: pointer !important;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./BreadCrumbs.vue?vue&type=template&id=68b3b20b&scoped=true&\"\nimport script from \"./BreadCrumbs.vue?vue&type=script&lang=js&\"\nexport * from \"./BreadCrumbs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"68b3b20b\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('RecycleScroller',{ref:\"recycleScroller\",staticClass:\"files-list\",attrs:{\"key-field\":\"source\",\"items\":_vm.nodes,\"item-size\":55,\"table-mode\":true,\"item-class\":\"files-list__row\",\"item-tag\":\"tr\",\"list-class\":\"files-list__body\",\"list-tag\":\"tbody\",\"role\":\"table\"},scopedSlots:_vm._u([{key:\"default\",fn:function({ item, active, index }){return [_c('FileEntry',{attrs:{\"active\":active,\"index\":index,\"is-size-available\":_vm.isSizeAvailable,\"files-list-width\":_vm.filesListWidth,\"nodes\":_vm.nodes,\"source\":item}})]}},{key:\"before\",fn:function(){return [_c('caption',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.currentView.caption || '')+\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list.'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('FilesListHeader',{attrs:{\"files-list-width\":_vm.filesListWidth,\"is-size-available\":_vm.isSizeAvailable,\"nodes\":_vm.nodes}})]},proxy:true},{key:\"after\",fn:function(){return [_c('FilesListFooter',{attrs:{\"files-list-width\":_vm.filesListWidth,\"is-size-available\":_vm.isSizeAvailable,\"nodes\":_vm.nodes,\"summary\":_vm.summary}})]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nexport const hashCode = function (str) {\n return str.split('').reduce(function (a, b) {\n a = ((a << 5) - a) + b.charCodeAt(0);\n return a & a;\n }, 0);\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nexport const useActionsMenuStore = defineStore('actionsmenu', {\n state: () => ({\n opened: null,\n }),\n});\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { loadState } from '@nextcloud/initial-state';\nimport { generateUrl } from '@nextcloud/router';\nimport { defineStore } from 'pinia';\nimport Vue from 'vue';\nimport axios from '@nextcloud/axios';\nimport { emit, subscribe } from '@nextcloud/event-bus';\nconst userConfig = loadState('files', 'config', {\n show_hidden: false,\n crop_image_previews: true,\n});\nexport const useUserConfigStore = function () {\n const store = defineStore('userconfig', {\n state: () => ({\n userConfig,\n }),\n actions: {\n /**\n * Update the user config local store\n */\n onUpdate(key, value) {\n Vue.set(this.userConfig, key, value);\n },\n /**\n * Update the user config local store AND on server side\n */\n async update(key, value) {\n await axios.put(generateUrl('/apps/files/api/v1/config/' + key), {\n value,\n });\n emit('files:config:updated', { key, value });\n }\n }\n });\n const userConfigStore = store(...arguments);\n // Make sure we only register the listeners once\n if (!userConfigStore._initialized) {\n subscribe('files:config:updated', function ({ key, value }) {\n userConfigStore.onUpdate(key, value);\n });\n userConfigStore._initialized = true;\n }\n return userConfigStore;\n};\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomElementRender.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomElementRender.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<span />\n</template>\n\n<script>\n/**\n * This component is used to render custom\n * elements provided by an API. Vue doesn't allow\n * to directly render an HTMLElement, so we can do\n * this magic here.\n */\nexport default {\n\tname: 'CustomElementRender',\n\tprops: {\n\t\tsource: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tcurrentView: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\trender: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\telement() {\n\t\t\treturn this.render(this.source, this.currentView)\n\t\t},\n\t},\n\twatch: {\n\t\telement() {\n\t\t\tthis.$el.replaceWith(this.element)\n\t\t\tthis.$el = this.element\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.replaceWith(this.element)\n\t\tthis.$el = this.element\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./CustomElementRender.vue?vue&type=template&id=a261c93e&\"\nimport script from \"./CustomElementRender.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomElementRender.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"custom-svg-icon\"})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<span class=\"custom-svg-icon\" />\n</template>\n\n<script>\n// eslint-disable-next-line import/named\nimport { sanitize } from 'dompurify'\n\nexport default {\n\tname: 'CustomSvgIconRender',\n\tprops: {\n\t\tsvg: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\twatch: {\n\t\tsvg() {\n\t\t\tthis.$el.innerHTML = sanitize(this.svg)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.innerHTML = sanitize(this.svg)\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.custom-svg-icon {\n\tdisplay: flex;\n\talign-items: center;\n\talign-self: center;\n\tjustify-content: center;\n\tjustify-self: center;\n\twidth: 44px;\n\theight: 44px;\n\topacity: 1;\n\n\t::v-deep svg {\n\t\t// mdi icons have a size of 24px\n\t\t// 22px results in roughly 16px inner size\n\t\theight: 22px;\n\t\twidth: 22px;\n\t\tfill: currentColor;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CustomSvgIconRender.vue?vue&type=template&id=93e9b2f4&scoped=true&\"\nimport script from \"./CustomSvgIconRender.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomSvgIconRender.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"93e9b2f4\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('Fragment',[_c('td',{staticClass:\"files-list__row-checkbox\"},[(_vm.active)?_c('NcCheckboxRadioSwitch',{attrs:{\"aria-label\":_vm.t('files', 'Select the row for {displayName}', { displayName: _vm.displayName }),\"checked\":_vm.selectedFiles,\"value\":_vm.fileid,\"name\":\"selectedFiles\"},on:{\"update:checked\":_vm.onSelectionChange}}):_vm._e()],1),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-name\"},[_c('a',_vm._b({ref:\"name\",on:{\"click\":_vm.execDefaultAction}},'a',_vm.linkTo,false),[_c('span',{staticClass:\"files-list__row-icon\"},[(_vm.source.type === 'folder')?_c('FolderIcon'):(_vm.previewUrl && !_vm.backgroundFailed)?_c('span',{ref:\"previewImg\",staticClass:\"files-list__row-icon-preview\",style:({ backgroundImage: _vm.backgroundImage })}):(_vm.mimeIconUrl)?_c('span',{staticClass:\"files-list__row-icon-preview files-list__row-icon-preview--mime\",style:({ backgroundImage: _vm.mimeIconUrl })}):_c('FileIcon'),_vm._v(\" \"),(_vm.isFavorite)?_c('span',{staticClass:\"files-list__row-icon-favorite\",attrs:{\"aria-label\":_vm.t('files', 'Favorite')}},[_c('StarIcon',{attrs:{\"aria-hidden\":\"true\",\"size\":20}})],1):_vm._e()],1),_vm._v(\" \"),_c('span',{staticClass:\"files-list__row-name-text\"},[_vm._v(_vm._s(_vm.displayName))])])]),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-actions\",class:`files-list__row-actions-${_vm.uniqueId}`},[(_vm.active)?_c('NcActions',{ref:\"actionsMenu\",attrs:{\"boundaries-element\":_vm.boundariesElement,\"container\":_vm.boundariesElement,\"disabled\":_vm.source._loading,\"force-title\":true,\"force-menu\":true,\"inline\":_vm.enabledInlineActions.length,\"open\":_vm.openedMenu},on:{\"update:open\":function($event){_vm.openedMenu=$event}}},_vm._l((_vm.enabledMenuActions),function(action){return _c('NcActionButton',{key:action.id,class:'files-list__row-action-' + action.id,on:{\"click\":function($event){return _vm.onActionClick(action)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading === action.id)?_c('NcLoadingIcon',{attrs:{\"size\":18}}):_c('CustomSvgIconRender',{attrs:{\"svg\":action.iconSvgInline([_vm.source], _vm.currentView)}})]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(action.displayName([_vm.source], _vm.currentView))+\"\\n\\t\\t\\t\")])}),1):_vm._e()],1),_vm._v(\" \"),(_vm.isSizeAvailable)?_c('td',{staticClass:\"files-list__row-size\",style:({ opacity: _vm.sizeOpacity }),on:{\"click\":_vm.openDetailsIfAvailable}},[_c('span',[_vm._v(_vm._s(_vm.size))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.columns),function(column){return _c('td',{key:column.id,staticClass:\"files-list__row-column-custom\",class:`files-list__row-${_vm.currentView?.id}-${column.id}`,on:{\"click\":_vm.openDetailsIfAvailable}},[(_vm.active)?_c('CustomElementRender',{attrs:{\"current-view\":_vm.currentView,\"render\":column.render,\"source\":_vm.source}}):_vm._e()],1)})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=script&lang=ts&\"","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nimport Vue from 'vue';\n/**\n * Observe various events and save the current\n * special keys states. Useful for checking the\n * current status of a key when executing a method.\n */\nexport const useKeyboardStore = function () {\n const store = defineStore('keyboard', {\n state: () => ({\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n }),\n actions: {\n onEvent(event) {\n if (!event) {\n event = window.event;\n }\n Vue.set(this, 'altKey', !!event.altKey);\n Vue.set(this, 'ctrlKey', !!event.ctrlKey);\n Vue.set(this, 'metaKey', !!event.metaKey);\n Vue.set(this, 'shiftKey', !!event.shiftKey);\n },\n }\n });\n const keyboardStore = store(...arguments);\n // Make sure we only register the listeners once\n if (!keyboardStore._initialized) {\n window.addEventListener('keydown', keyboardStore.onEvent);\n window.addEventListener('keyup', keyboardStore.onEvent);\n window.addEventListener('mousemove', keyboardStore.onEvent);\n keyboardStore._initialized = true;\n }\n return keyboardStore;\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n// The preview service worker cache name (see webpack config)\nconst SWCacheName = 'previews';\n/**\n * Check if the preview is already cached by the service worker\n */\nexport const isCachedPreview = function (previewUrl) {\n return caches.open(SWCacheName)\n .then(function (cache) {\n return cache.match(previewUrl)\n .then(function (response) {\n return !!response;\n });\n });\n};\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileEntry.vue?vue&type=template&id=0600090e&scoped=true&\"\nimport script from \"./FileEntry.vue?vue&type=script&lang=ts&\"\nexport * from \"./FileEntry.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&\"\nimport style1 from \"./FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0600090e\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=script&lang=ts&\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('tr',[_c('th',{staticClass:\"files-list__row-checkbox\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('files', 'Total rows summary')))])]),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-name\"},[_c('span',{staticClass:\"files-list__row-icon\"}),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.summary))])]),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-actions\"}),_vm._v(\" \"),(_vm.isSizeAvailable)?_c('td',{staticClass:\"files-list__column files-list__row-size\"},[_c('span',[_vm._v(_vm._s(_vm.totalSize))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.columns),function(column){return _c('th',{key:column.id,class:_vm.classForColumn(column)},[_c('span',[_vm._v(_vm._s(column.summary?.(_vm.nodes, _vm.currentView)))])])})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListFooter.vue?vue&type=template&id=e6a083be&scoped=true&\"\nimport script from \"./FilesListFooter.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListFooter.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e6a083be\",\n null\n \n)\n\nexport default component.exports","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nexport default Vue.extend({\n data() {\n return {\n filesListWidth: null,\n };\n },\n created() {\n const fileListEl = document.querySelector('#app-content-vue');\n this.$resizeObserver = new ResizeObserver((entries) => {\n if (entries.length > 0 && entries[0].target === fileListEl) {\n this.filesListWidth = entries[0].contentRect.width;\n }\n });\n this.$resizeObserver.observe(fileListEl);\n },\n beforeDestroy() {\n this.$resizeObserver.disconnect();\n },\n});\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('th',{staticClass:\"files-list__column files-list__row-actions-batch\",attrs:{\"colspan\":\"2\"}},[_c('NcActions',{ref:\"actionsMenu\",attrs:{\"disabled\":!!_vm.loading || _vm.areSomeNodesLoading,\"force-title\":true,\"inline\":_vm.inlineActions,\"menu-title\":_vm.inlineActions <= 1 ? _vm.t('files', 'Actions') : null,\"open\":_vm.openedMenu},on:{\"update:open\":function($event){_vm.openedMenu=$event}}},_vm._l((_vm.enabledActions),function(action){return _c('NcActionButton',{key:action.id,class:'files-list__row-actions-batch-' + action.id,on:{\"click\":function($event){return _vm.onActionClick(action)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading === action.id)?_c('NcLoadingIcon',{attrs:{\"size\":18}}):_c('CustomSvgIconRender',{attrs:{\"svg\":action.iconSvgInline(_vm.nodes, _vm.currentView)}})]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(action.displayName(_vm.nodes, _vm.currentView))+\"\\n\\t\\t\")])}),1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeaderActions.vue?vue&type=template&id=03e57b1e&scoped=true&\"\nimport script from \"./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"03e57b1e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcButton',{staticClass:\"files-list__column-sort-button\",class:{'files-list__column-sort-button--active': _vm.sortingMode === _vm.mode},attrs:{\"aria-label\":_vm.sortAriaLabel(_vm.name),\"type\":\"tertiary\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.toggleSortBy(_vm.mode)}}},[(_vm.sortingMode !== _vm.mode || _vm.isAscSorting)?_c('MenuUp',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}):_c('MenuDown',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}),_vm._v(\"\\n\\t\"+_vm._s(_vm.name)+\"\\n\")],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nimport { mapState } from 'pinia';\nimport { useViewConfigStore } from '../store/viewConfig';\nexport default Vue.extend({\n computed: {\n ...mapState(useViewConfigStore, ['getConfig', 'setSortingBy', 'toggleSortingDirection']),\n currentView() {\n return this.$navigation.active;\n },\n /**\n * Get the sorting mode for the current view\n */\n sortingMode() {\n return this.getConfig(this.currentView.id)?.sorting_mode\n || this.currentView?.defaultSortKey\n || 'basename';\n },\n /**\n * Get the sorting direction for the current view\n */\n isAscSorting() {\n const sortingDirection = this.getConfig(this.currentView.id)?.sorting_direction;\n return sortingDirection === 'asc';\n },\n },\n methods: {\n toggleSortBy(key) {\n // If we're already sorting by this key, flip the direction\n if (this.sortingMode === key) {\n this.toggleSortingDirection(this.currentView.id);\n return;\n }\n // else sort ASC by this new key\n this.setSortingBy(key, this.currentView.id);\n },\n },\n});\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeaderButton.vue?vue&type=template&id=e85a09d2&\"\nimport script from \"./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=script&lang=ts&\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('tr',[_c('th',{staticClass:\"files-list__column files-list__row-checkbox\"},[_c('NcCheckboxRadioSwitch',_vm._b({on:{\"update:checked\":_vm.onToggleAll}},'NcCheckboxRadioSwitch',_vm.selectAllBind,false))],1),_vm._v(\" \"),(!_vm.isNoneSelected)?_c('FilesListHeaderActions',{attrs:{\"current-view\":_vm.currentView,\"selected-nodes\":_vm.selectedNodes}}):[_c('th',{staticClass:\"files-list__column files-list__row-name files-list__column--sortable\",on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.toggleSortBy('basename')}}},[_c('span',{staticClass:\"files-list__row-icon\"}),_vm._v(\" \"),_c('FilesListHeaderButton',{attrs:{\"name\":_vm.t('files', 'Name'),\"mode\":\"basename\"}})],1),_vm._v(\" \"),_c('th',{staticClass:\"files-list__row-actions\"}),_vm._v(\" \"),(_vm.isSizeAvailable)?_c('th',{staticClass:\"files-list__column files-list__row-size\",class:{'files-list__column--sortable': _vm.isSizeAvailable}},[_c('FilesListHeaderButton',{attrs:{\"name\":_vm.t('files', 'Size'),\"mode\":\"size\"}})],1):_vm._e(),_vm._v(\" \"),_vm._l((_vm.columns),function(column){return _c('th',{key:column.id,class:_vm.classForColumn(column)},[(!!column.sort)?_c('FilesListHeaderButton',{attrs:{\"name\":column.title,\"mode\":column.id}}):_c('span',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(column.title)+\"\\n\\t\\t\\t\")])],1)})]],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeader.vue?vue&type=template&id=76b6186a&scoped=true&\"\nimport script from \"./FilesListHeader.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListHeader.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"76b6186a\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=script&lang=ts&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListVirtual.vue?vue&type=template&id=640a8bb8&scoped=true&\"\nimport script from \"./FilesListVirtual.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListVirtual.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"640a8bb8\",\n null\n \n)\n\nexport default component.exports","import isSvg from 'is-svg';\nimport logger from '../logger.js';\nexport default class {\n _views = [];\n _currentView = null;\n constructor() {\n logger.debug('Navigation service initialized');\n }\n register(view) {\n try {\n isValidNavigation(view);\n isUniqueNavigation(view, this._views);\n }\n catch (e) {\n if (e instanceof Error) {\n logger.error(e.message, { view });\n }\n throw e;\n }\n if (view.legacy) {\n logger.warn('Legacy view detected, please migrate to Vue');\n }\n if (view.iconClass) {\n view.legacy = true;\n }\n this._views.push(view);\n }\n remove(id) {\n const index = this._views.findIndex(view => view.id === id);\n if (index !== -1) {\n this._views.splice(index, 1);\n }\n }\n get views() {\n return this._views;\n }\n setActive(view) {\n this._currentView = view;\n }\n get active() {\n return this._currentView;\n }\n}\n/**\n * Make sure the given view is unique\n * and not already registered.\n */\nconst isUniqueNavigation = function (view, views) {\n if (views.find(search => search.id === view.id)) {\n throw new Error(`Navigation id ${view.id} is already registered`);\n }\n return true;\n};\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Navigation interface requirements.\n */\nconst isValidNavigation = function (view) {\n if (!view.id || typeof view.id !== 'string') {\n throw new Error('Navigation id is required and must be a string');\n }\n if (!view.name || typeof view.name !== 'string') {\n throw new Error('Navigation name is required and must be a string');\n }\n /**\n * Legacy handle their content and icon differently\n * TODO: remove when support for legacy views is removed\n */\n if (!view.legacy) {\n if (!view.getContents || typeof view.getContents !== 'function') {\n throw new Error('Navigation getContents is required and must be a function');\n }\n if (!view.icon || typeof view.icon !== 'string' || !isSvg(view.icon)) {\n throw new Error('Navigation icon is required and must be a valid svg string');\n }\n }\n if (!('order' in view) || typeof view.order !== 'number') {\n throw new Error('Navigation order is required and must be a number');\n }\n // Optional properties\n if (view.columns) {\n view.columns.forEach(isValidColumn);\n }\n if (view.emptyView && typeof view.emptyView !== 'function') {\n throw new Error('Navigation emptyView must be a function');\n }\n if (view.parent && typeof view.parent !== 'string') {\n throw new Error('Navigation parent must be a string');\n }\n if ('sticky' in view && typeof view.sticky !== 'boolean') {\n throw new Error('Navigation sticky must be a boolean');\n }\n if ('expanded' in view && typeof view.expanded !== 'boolean') {\n throw new Error('Navigation expanded must be a boolean');\n }\n if (view.defaultSortKey && typeof view.defaultSortKey !== 'string') {\n throw new Error('Navigation defaultSortKey must be a string');\n }\n return true;\n};\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Column interface requirements.\n */\nconst isValidColumn = function (column) {\n if (!column.id || typeof column.id !== 'string') {\n throw new Error('A column id is required');\n }\n if (!column.title || typeof column.title !== 'string') {\n throw new Error('A column title is required');\n }\n if (!column.render || typeof column.render !== 'function') {\n throw new Error('A render function is required');\n }\n // Optional properties\n if (column.sort && typeof column.sort !== 'function') {\n throw new Error('Column sortFunction must be a function');\n }\n if (column.summary && typeof column.summary !== 'function') {\n throw new Error('Column summary must be a function');\n }\n return true;\n};\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=script&lang=ts&\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcAppContent',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.currentView?.legacy),expression:\"!currentView?.legacy\"}],class:{'app-content--hidden': _vm.currentView?.legacy},attrs:{\"data-cy-files-content\":\"\"}},[_c('div',{staticClass:\"files-list__header\"},[_c('BreadCrumbs',{attrs:{\"path\":_vm.dir},on:{\"reload\":_vm.fetchContent}}),_vm._v(\" \"),(_vm.isRefreshing)?_c('NcLoadingIcon',{staticClass:\"files-list__refresh-icon\"}):_vm._e()],1),_vm._v(\" \"),(_vm.loading && !_vm.isRefreshing)?_c('NcLoadingIcon',{staticClass:\"files-list__loading-icon\",attrs:{\"size\":38,\"title\":_vm.t('files', 'Loading current folder')}}):(!_vm.loading && _vm.isEmptyDir)?_c('NcEmptyContent',{attrs:{\"title\":_vm.t('files', 'No files in here'),\"description\":_vm.t('files', 'No files or folders have been deleted yet'),\"data-cy-files-content-empty\":\"\"},scopedSlots:_vm._u([{key:\"action\",fn:function(){return [(_vm.dir !== '/')?_c('NcButton',{attrs:{\"aria-label\":\"t('files', 'Go to the previous folder')\",\"type\":\"primary\",\"to\":_vm.toPreviousDir}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Go back'))+\"\\n\\t\\t\\t\")]):_vm._e()]},proxy:true},{key:\"icon\",fn:function(){return [_c('TrashCan')]},proxy:true}])}):_c('FilesListVirtual',{ref:\"filesListVirtual\",attrs:{\"current-view\":_vm.currentView,\"nodes\":_vm.dirContents}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesList.vue?vue&type=template&id=66068cbb&scoped=true&\"\nimport script from \"./FilesList.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesList.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"66068cbb\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppNavigation',{attrs:{\"data-cy-files-navigation\":\"\"},scopedSlots:_vm._u([{key:\"list\",fn:function(){return _vm._l((_vm.parentViews),function(view){return _c('NcAppNavigationItem',{key:view.id,attrs:{\"allow-collapse\":true,\"data-cy-files-navigation-item\":view.id,\"icon\":view.iconClass,\"open\":_vm.isExpanded(view),\"pinned\":view.sticky,\"title\":view.name,\"to\":_vm.generateToNavigation(view)},on:{\"update:open\":function($event){return _vm.onToggleExpand(view)}}},[(view.icon)?_c('NcIconSvgWrapper',{attrs:{\"slot\":\"icon\",\"svg\":view.icon},slot:\"icon\"}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.childViews[view.id]),function(child){return _c('NcAppNavigationItem',{key:child.id,attrs:{\"data-cy-files-navigation-item\":child.id,\"exact\":true,\"icon\":child.iconClass,\"title\":child.name,\"to\":_vm.generateToNavigation(child)}},[(child.icon)?_c('NcIconSvgWrapper',{attrs:{\"slot\":\"icon\",\"svg\":child.icon},slot:\"icon\"}):_vm._e()],1)})],2)})},proxy:true},{key:\"footer\",fn:function(){return [_c('ul',{staticClass:\"app-navigation-entry__settings\"},[_c('NavigationQuota'),_vm._v(\" \"),_c('NcAppNavigationItem',{attrs:{\"aria-label\":_vm.t('files', 'Open the files app settings'),\"title\":_vm.t('files', 'Files settings'),\"data-cy-files-navigation-settings-button\":\"\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openSettings.apply(null, arguments)}}},[_c('Cog',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"})],1)],1)]},proxy:true}])},[_vm._v(\" \"),_vm._v(\" \"),_c('SettingsModal',{attrs:{\"open\":_vm.settingsOpened,\"data-cy-files-navigation-settings\":\"\"},on:{\"close\":_vm.onSettingsClose}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.storageStats)?_c('NcAppNavigationItem',{staticClass:\"app-navigation-entry__settings-quota\",class:{ 'app-navigation-entry__settings-quota--not-unlimited': _vm.storageStats.quota >= 0},attrs:{\"aria-label\":_vm.t('files', 'Storage informations'),\"loading\":_vm.loadingStorageStats,\"name\":_vm.storageStatsTitle,\"title\":_vm.storageStatsTooltip,\"data-cy-files-navigation-settings-quota\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.debounceUpdateStorageStats.apply(null, arguments)}}},[_c('ChartPie',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"}),_vm._v(\" \"),(_vm.storageStats.quota >= 0)?_c('NcProgressBar',{attrs:{\"slot\":\"extra\",\"error\":_vm.storageStats.relative > 80,\"value\":Math.min(_vm.storageStats.relative, 100)},slot:\"extra\"}):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<NcAppNavigationItem v-if=\"storageStats\"\n\t\t:aria-label=\"t('files', 'Storage informations')\"\n\t\t:class=\"{ 'app-navigation-entry__settings-quota--not-unlimited': storageStats.quota >= 0}\"\n\t\t:loading=\"loadingStorageStats\"\n\t\t:name=\"storageStatsTitle\"\n\t\t:title=\"storageStatsTooltip\"\n\t\tclass=\"app-navigation-entry__settings-quota\"\n\t\tdata-cy-files-navigation-settings-quota\n\t\t@click.stop.prevent=\"debounceUpdateStorageStats\">\n\t\t<ChartPie slot=\"icon\" :size=\"20\" />\n\n\t\t<!-- Progress bar -->\n\t\t<NcProgressBar v-if=\"storageStats.quota >= 0\"\n\t\t\tslot=\"extra\"\n\t\t\t:error=\"storageStats.relative > 80\"\n\t\t\t:value=\"Math.min(storageStats.relative, 100)\" />\n\t</NcAppNavigationItem>\n</template>\n\n<script>\nimport { formatFileSize } from '@nextcloud/files'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError } from '@nextcloud/dialogs'\nimport { debounce, throttle } from 'throttle-debounce'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\nimport ChartPie from 'vue-material-design-icons/ChartPie.vue'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\n\nimport logger from '../logger.js'\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport default {\n\tname: 'NavigationQuota',\n\n\tcomponents: {\n\t\tChartPie,\n\t\tNcAppNavigationItem,\n\t\tNcProgressBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingStorageStats: false,\n\t\t\tstorageStats: loadState('files', 'storageStats', null),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tstorageStatsTitle() {\n\t\t\tconst usedQuotaByte = formatFileSize(this.storageStats?.used)\n\t\t\tconst quotaByte = formatFileSize(this.storageStats?.quota)\n\n\t\t\t// If no quota set\n\t\t\tif (this.storageStats?.quota < 0) {\n\t\t\t\treturn this.t('files', '{usedQuotaByte} used', { usedQuotaByte })\n\t\t\t}\n\n\t\t\treturn this.t('files', '{used} of {quota} used', {\n\t\t\t\tused: usedQuotaByte,\n\t\t\t\tquota: quotaByte,\n\t\t\t})\n\t\t},\n\t\tstorageStatsTooltip() {\n\t\t\tif (!this.storageStats.relative) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\treturn this.t('files', '{relative}% used', this.storageStats)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t/**\n\t\t * Update storage stats every minute\n\t\t * TODO: remove when all views are migrated to Vue\n\t\t */\n\t\tsetInterval(this.throttleUpdateStorageStats, 60 * 1000)\n\n\t\tsubscribe('files:node:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:node:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:node:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:node:updated', this.throttleUpdateStorageStats)\n\t},\n\n\tmethods: {\n\t\t// From user input\n\t\tdebounceUpdateStorageStats: debounce(200, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\t\t// From interval or event bus\n\t\tthrottleUpdateStorageStats: throttle(1000, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\n\t\t/**\n\t\t * Update the storage stats\n\t\t * Throttled at max 1 refresh per minute\n\t\t *\n\t\t * @param {Event} [event = null] if user interaction\n\t\t */\n\t\tasync updateStorageStats(event = null) {\n\t\t\tif (this.loadingStorageStats) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingStorageStats = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl('/apps/files/api/v1/stats'))\n\t\t\t\tif (!response?.data?.data) {\n\t\t\t\t\tthrow new Error('Invalid storage stats')\n\t\t\t\t}\n\t\t\t\tthis.storageStats = response.data.data\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Could not refresh storage stats', { error })\n\t\t\t\t// Only show to the user if it was manually triggered\n\t\t\t\tif (event) {\n\t\t\t\t\tshowError(t('files', 'Could not refresh storage stats'))\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loadingStorageStats = false\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./NavigationQuota.vue?vue&type=template&id=918797b2&scoped=true&\"\nimport script from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"918797b2\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSettingsDialog',{attrs:{\"open\":_vm.open,\"show-navigation\":true,\"title\":_vm.t('files', 'Files settings')},on:{\"update:open\":_vm.onClose}},[_c('NcAppSettingsSection',{attrs:{\"id\":\"settings\",\"title\":_vm.t('files', 'Files settings')}},[_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.userConfig.show_hidden},on:{\"update:checked\":function($event){return _vm.setConfig('show_hidden', $event)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Show hidden files'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.userConfig.crop_image_previews},on:{\"update:checked\":function($event){return _vm.setConfig('crop_image_previews', $event)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Crop image previews'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.settings.length !== 0)?_c('NcAppSettingsSection',{attrs:{\"id\":\"more-settings\",\"title\":_vm.t('files', 'Additional settings')}},[_vm._l((_vm.settings),function(setting){return [_c('Setting',{key:setting.name,attrs:{\"el\":setting.el}})]})],2):_vm._e(),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"webdav\",\"title\":_vm.t('files', 'WebDAV')}},[_c('NcInputField',{attrs:{\"id\":\"webdav-url-input\",\"show-trailing-button\":true,\"success\":_vm.webdavUrlCopied,\"trailing-button-label\":_vm.t('files', 'Copy to clipboard'),\"value\":_vm.webdavUrl,\"readonly\":\"readonly\",\"type\":\"url\"},on:{\"focus\":function($event){return $event.target.select()},\"trailing-button-click\":_vm.copyCloudId},scopedSlots:_vm._u([{key:\"trailing-button-icon\",fn:function(){return [_c('Clipboard',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('em',[_c('a',{staticClass:\"setting-link\",attrs:{\"href\":_vm.webdavDocs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Use this address to access your Files via WebDAV'))+\" ↗\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('em',[_c('a',{staticClass:\"setting-link\",attrs:{\"href\":_vm.appPasswordUrl}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.'))+\" ↗\\n\\t\\t\\t\")])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div />\n</template>\n<script>\nexport default {\n\tname: 'Setting',\n\tprops: {\n\t\tel: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.appendChild(this.el())\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=61d69eae&\"\nimport script from \"./Setting.vue?vue&type=script&lang=js&\"\nexport * from \"./Setting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<NcAppSettingsDialog :open=\"open\"\n\t\t:show-navigation=\"true\"\n\t\t:title=\"t('files', 'Files settings')\"\n\t\t@update:open=\"onClose\">\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection id=\"settings\" :title=\"t('files', 'Files settings')\">\n\t\t\t<NcCheckboxRadioSwitch :checked=\"userConfig.show_hidden\"\n\t\t\t\t@update:checked=\"setConfig('show_hidden', $event)\">\n\t\t\t\t{{ t('files', 'Show hidden files') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch :checked=\"userConfig.crop_image_previews\"\n\t\t\t\t@update:checked=\"setConfig('crop_image_previews', $event)\">\n\t\t\t\t{{ t('files', 'Crop image previews') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection v-if=\"settings.length !== 0\"\n\t\t\tid=\"more-settings\"\n\t\t\t:title=\"t('files', 'Additional settings')\">\n\t\t\t<template v-for=\"setting in settings\">\n\t\t\t\t<Setting :key=\"setting.name\" :el=\"setting.el\" />\n\t\t\t</template>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Webdav URL-->\n\t\t<NcAppSettingsSection id=\"webdav\" :title=\"t('files', 'WebDAV')\">\n\t\t\t<NcInputField id=\"webdav-url-input\"\n\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t:success=\"webdavUrlCopied\"\n\t\t\t\t:trailing-button-label=\"t('files', 'Copy to clipboard')\"\n\t\t\t\t:value=\"webdavUrl\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\ttype=\"url\"\n\t\t\t\t@focus=\"$event.target.select()\"\n\t\t\t\t@trailing-button-click=\"copyCloudId\">\n\t\t\t\t<template #trailing-button-icon>\n\t\t\t\t\t<Clipboard :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcInputField>\n\t\t\t<em>\n\t\t\t\t<a class=\"setting-link\"\n\t\t\t\t\t:href=\"webdavDocs\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t{{ t('files', 'Use this address to access your Files via WebDAV') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t\t<br>\n\t\t\t<em>\n\t\t\t\t<a class=\"setting-link\" :href=\"appPasswordUrl\">\n\t\t\t\t\t{{ t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t</NcAppSettingsSection>\n\t</NcAppSettingsDialog>\n</template>\n\n<script>\nimport NcAppSettingsDialog from '@nextcloud/vue/dist/Components/NcAppSettingsDialog.js'\nimport NcAppSettingsSection from '@nextcloud/vue/dist/Components/NcAppSettingsSection.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport Clipboard from 'vue-material-design-icons/Clipboard.vue'\nimport NcInputField from '@nextcloud/vue/dist/Components/NcInputField.js'\nimport Setting from '../components/Setting.vue'\n\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport { useUserConfigStore } from '../store/userconfig.ts'\n\nexport default {\n\tname: 'Settings',\n\tcomponents: {\n\t\tClipboard,\n\t\tNcAppSettingsDialog,\n\t\tNcAppSettingsSection,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcInputField,\n\t\tSetting,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst userConfigStore = useUserConfigStore()\n\t\treturn {\n\t\t\tuserConfigStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Settings API\n\t\t\tsettings: window.OCA?.Files?.Settings?.settings || [],\n\n\t\t\t// Webdav infos\n\t\t\twebdavUrl: generateRemoteUrl('dav/files/' + encodeURIComponent(getCurrentUser()?.uid)),\n\t\t\twebdavDocs: 'https://docs.nextcloud.com/server/stable/go.php?to=user-webdav',\n\t\t\tappPasswordUrl: generateUrl('/settings/user/security#generate-app-token-section'),\n\t\t\twebdavUrlCopied: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tuserConfig() {\n\t\t\treturn this.userConfigStore.userConfig\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.open())\n\t},\n\n\tbeforeDestroy() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.close())\n\t},\n\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.$emit('close')\n\t\t},\n\n\t\tsetConfig(key, value) {\n\t\t\tthis.userConfigStore.update(key, value)\n\t\t},\n\n\t\tasync copyCloudId() {\n\t\t\tdocument.querySelector('input#webdav-url-input').select()\n\n\t\t\tif (!navigator.clipboard) {\n\t\t\t\t// Clipboard API not available\n\t\t\t\tshowError(t('files', 'Clipboard is not available'))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tawait navigator.clipboard.writeText(this.webdavUrl)\n\t\t\tthis.webdavUrlCopied = true\n\t\t\tshowSuccess(t('files', 'WebDAV URL copied to clipboard'))\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.webdavUrlCopied = false\n\t\t\t}, 5000)\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.setting-link:hover {\n\ttext-decoration: underline;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=76ca5d1f&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"76ca5d1f\",\n null\n \n)\n\nexport default component.exports","<!--\n - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<NcAppNavigation data-cy-files-navigation>\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem v-for=\"view in parentViews\"\n\t\t\t\t:key=\"view.id\"\n\t\t\t\t:allow-collapse=\"true\"\n\t\t\t\t:data-cy-files-navigation-item=\"view.id\"\n\t\t\t\t:icon=\"view.iconClass\"\n\t\t\t\t:open=\"isExpanded(view)\"\n\t\t\t\t:pinned=\"view.sticky\"\n\t\t\t\t:title=\"view.name\"\n\t\t\t\t:to=\"generateToNavigation(view)\"\n\t\t\t\t@update:open=\"onToggleExpand(view)\">\n\t\t\t\t<!-- Sanitized icon as svg if provided -->\n\t\t\t\t<NcIconSvgWrapper v-if=\"view.icon\" slot=\"icon\" :svg=\"view.icon\" />\n\n\t\t\t\t<!-- Child views if any -->\n\t\t\t\t<NcAppNavigationItem v-for=\"child in childViews[view.id]\"\n\t\t\t\t\t:key=\"child.id\"\n\t\t\t\t\t:data-cy-files-navigation-item=\"child.id\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:icon=\"child.iconClass\"\n\t\t\t\t\t:title=\"child.name\"\n\t\t\t\t\t:to=\"generateToNavigation(child)\">\n\t\t\t\t\t<!-- Sanitized icon as svg if provided -->\n\t\t\t\t\t<NcIconSvgWrapper v-if=\"child.icon\" slot=\"icon\" :svg=\"child.icon\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</NcAppNavigationItem>\n\t\t</template>\n\n\t\t<!-- Non-scrollable navigation bottom elements -->\n\t\t<template #footer>\n\t\t\t<ul class=\"app-navigation-entry__settings\">\n\t\t\t\t<!-- User storage usage statistics -->\n\t\t\t\t<NavigationQuota />\n\n\t\t\t\t<!-- Files settings modal toggle-->\n\t\t\t\t<NcAppNavigationItem :aria-label=\"t('files', 'Open the files app settings')\"\n\t\t\t\t\t:title=\"t('files', 'Files settings')\"\n\t\t\t\t\tdata-cy-files-navigation-settings-button\n\t\t\t\t\t@click.prevent.stop=\"openSettings\">\n\t\t\t\t\t<Cog slot=\"icon\" :size=\"20\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</ul>\n\t\t</template>\n\n\t\t<!-- Settings modal-->\n\t\t<SettingsModal :open=\"settingsOpened\"\n\t\t\tdata-cy-files-navigation-settings\n\t\t\t@close=\"onSettingsClose\" />\n\t</NcAppNavigation>\n</template>\n\n<script>\nimport { emit, subscribe } from '@nextcloud/event-bus'\nimport { translate } from '@nextcloud/l10n'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\n\nimport { setPageHeading } from '../../../../core/src/OCP/accessibility.js'\nimport { useViewConfigStore } from '../store/viewConfig.ts'\nimport logger from '../logger.js'\nimport Navigation from '../services/Navigation.ts'\nimport NavigationQuota from '../components/NavigationQuota.vue'\nimport SettingsModal from './Settings.vue'\n\nexport default {\n\tname: 'Navigation',\n\n\tcomponents: {\n\t\tCog,\n\t\tNavigationQuota,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationItem,\n\t\tNcIconSvgWrapper,\n\t\tSettingsModal,\n\t},\n\n\tprops: {\n\t\t// eslint-disable-next-line vue/prop-name-casing\n\t\tNavigation: {\n\t\t\ttype: Navigation,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst viewConfigStore = useViewConfigStore()\n\t\treturn {\n\t\t\tviewConfigStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsOpened: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentViewId() {\n\t\t\treturn this.$route?.params?.view || 'files'\n\t\t},\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.views.find(view => view.id === this.currentViewId)\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tviews() {\n\t\t\treturn this.Navigation.views\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tparentViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter child views\n\t\t\t\t.filter(view => !view.parent)\n\t\t\t\t// sort views by order\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.order - b.order\n\t\t\t\t})\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tchildViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter parent views\n\t\t\t\t.filter(view => !!view.parent)\n\t\t\t\t// create a map of parents and their children\n\t\t\t\t.reduce((list, view) => {\n\t\t\t\t\tlist[view.parent] = [...(list[view.parent] || []), view]\n\t\t\t\t\t// Sort children by order\n\t\t\t\t\tlist[view.parent].sort((a, b) => {\n\t\t\t\t\t\treturn a.order - b.order\n\t\t\t\t\t})\n\t\t\t\t\treturn list\n\t\t\t\t}, {})\n\t\t},\n\t},\n\n\twatch: {\n\t\tcurrentView(view, oldView) {\n\t\t\t// If undefined, it means we're initializing the view\n\t\t\t// This is handled by the legacy-view:initialized event\n\t\t\t// TODO: remove when legacy views are dropped\n\t\t\tif (view?.id === oldView?.id) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\tlogger.debug('Navigation changed', { id: view.id, view })\n\n\t\t\tthis.showView(view, oldView)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tif (this.currentView) {\n\t\t\tlogger.debug('Navigation mounted. Showing requested view', { view: this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t}\n\n\t\tsubscribe('files:legacy-navigation:changed', this.onLegacyNavigationChanged)\n\n\t\t// TODO: remove this once the legacy navigation is gone\n\t\tsubscribe('files:legacy-view:initialized', () => {\n\t\t\tlogger.debug('Legacy view initialized', { ...this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t})\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {Navigation} view the new active view\n\t\t * @param {Navigation} oldView the old active view\n\t\t */\n\t\tshowView(view, oldView) {\n\t\t\t// Closing any opened sidebar\n\t\t\twindow?.OCA?.Files?.Sidebar?.close?.()\n\n\t\t\tif (view?.legacy) {\n\t\t\t\tconst newAppContent = document.querySelector('#app-content #app-content-' + this.currentView.id + '.viewcontainer')\n\t\t\t\tdocument.querySelectorAll('#app-content .viewcontainer').forEach(el => {\n\t\t\t\t\tel.classList.add('hidden')\n\t\t\t\t})\n\t\t\t\tnewAppContent.classList.remove('hidden')\n\n\t\t\t\t// Triggering legacy navigation events\n\t\t\t\tconst { dir = '/' } = OC.Util.History.parseUrlQuery()\n\t\t\t\tconst params = { itemId: view.id, dir }\n\n\t\t\t\tlogger.debug('Triggering legacy navigation event', params)\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('show', params))\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('urlChanged', params))\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\tsetPageHeading(view.name)\n\t\t\temit('files:navigation:changed', view)\n\t\t},\n\n\t\t/**\n\t\t * Coming from the legacy files app.\n\t\t * TODO: remove when all views are migrated.\n\t\t *\n\t\t * @param {Navigation} view the new active view\n\t\t */\n\t\tonLegacyNavigationChanged({ id } = { id: 'files' }) {\n\t\t\tconst view = this.Navigation.views.find(view => view.id === id)\n\t\t\tif (view && view.legacy && view.id !== this.currentView.id) {\n\t\t\t\t// Force update the current route as the request comes\n\t\t\t\t// from the legacy files app router\n\t\t\t\tthis.$router.replace({ ...this.$route, params: { view: view.id } })\n\t\t\t\tthis.Navigation.setActive(view)\n\t\t\t\tthis.showView(view)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Expand/collapse a a view with children and permanently\n\t\t * save this setting in the server.\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tonToggleExpand(view) {\n\t\t\t// Invert state\n\t\t\tconst isExpanded = this.isExpanded(view)\n\t\t\t// Update the view expanded state, might not be necessary\n\t\t\tview.expanded = !isExpanded\n\t\t\tthis.viewConfigStore.update(view.id, 'expanded', !isExpanded)\n\t\t},\n\n\t\t/**\n\t\t * Check if a view is expanded by user config\n\t\t * or fallback to the default value.\n\t\t *\n\t\t * @param {Navigation} view the view to check\n\t\t */\n\t\tisExpanded(view) {\n\t\t\treturn typeof this.viewConfigStore.getConfig(view.id)?.expanded === 'boolean'\n\t\t\t\t? this.viewConfigStore.getConfig(view.id).expanded === true\n\t\t\t\t: view.expanded === true\n\t\t},\n\n\t\t/**\n\t\t * Generate the route to a view\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tgenerateToNavigation(view) {\n\t\t\tif (view.params) {\n\t\t\t\tconst { dir, fileid } = view.params\n\t\t\t\treturn { name: 'filelist', params: view.params, query: { dir, fileid } }\n\t\t\t}\n\t\t\treturn { name: 'filelist', params: { view: view.id } }\n\t\t},\n\n\t\t/**\n\t\t * Open the settings modal\n\t\t */\n\t\topenSettings() {\n\t\t\tthis.settingsOpened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the settings modal\n\t\t */\n\t\tonSettingsClose() {\n\t\t\tthis.settingsOpened = false\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n</style>\n","/**\n * @copyright Copyright (c) 2022 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\n/**\n * Set the page heading\n *\n * @param {string} heading page title from the history api\n * @since 27.0.0\n */\nexport function setPageHeading(heading) {\n\tconst headingEl = document.getElementById('page-heading-level-1')\n\tif (headingEl) {\n\t\theadingEl.textContent = heading\n\t}\n}\nexport default {\n\t/**\n\t * @return {boolean} Whether the user opted-out of shortcuts so that they should not be registered\n\t */\n\tdisableKeyboardShortcuts() {\n\t\treturn loadState('theming', 'shortcutsDisabled', false)\n\t},\n\tsetPageHeading,\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=657a978e&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"657a978e\",\n null\n \n)\n\nexport default component.exports","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport logger from '../logger.js'\n\n/**\n * Fetch and register the legacy files views\n */\nexport default function() {\n\tconst legacyViews = Object.values(loadState('files', 'navigation', {}))\n\n\tif (legacyViews.length > 0) {\n\t\tlogger.debug('Legacy files views detected. Processing...', legacyViews)\n\t\tlegacyViews.forEach(view => {\n\t\t\tregisterLegacyView(view)\n\t\t\tif (view.sublist) {\n\t\t\t\tview.sublist.forEach(subview => registerLegacyView({ ...subview, parent: view.id }))\n\t\t\t}\n\t\t})\n\t}\n}\n\nconst registerLegacyView = function({ id, name, order, icon, parent, classes = '', expanded, params }) {\n\tOCP.Files.Navigation.register({\n\t\tid,\n\t\tname,\n\t\torder,\n\t\tparams,\n\t\tparent,\n\t\texpanded: expanded === true,\n\t\ticonClass: icon ? `icon-${icon}` : 'nav-icon-' + id,\n\t\tlegacy: true,\n\t\tsticky: classes.includes('pinned'),\n\t})\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\nimport queryString from 'query-string'\n\nVue.use(Router)\n\nconst router = new Router({\n\tmode: 'history',\n\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl('/apps/files', ''),\n\tlinkActiveClass: 'active',\n\n\troutes: [\n\t\t{\n\t\t\tpath: '/',\n\t\t\t// Pretending we're using the default view\n\t\t\talias: '/files',\n\t\t},\n\t\t{\n\t\t\tpath: '/:view/:fileid?',\n\t\t\tname: 'filelist',\n\t\t\tprops: true,\n\t\t},\n\t],\n\n\t// Custom stringifyQuery to prevent encoding of slashes in the url\n\tstringifyQuery(query) {\n\t\tconst result = queryString.stringify(query).replace(/%2F/gmi, '/')\n\t\treturn result ? ('?' + result) : ''\n\t},\n})\n\nexport default router\n","import './templates.js';\nimport './legacy/filelistSearch.js';\nimport './actions/deleteAction';\nimport './actions/sidebarAction';\nimport Vue from 'vue';\nimport { createPinia, PiniaVuePlugin } from 'pinia';\nimport FilesListView from './views/FilesList.vue';\nimport NavigationService from './services/Navigation';\nimport NavigationView from './views/Navigation.vue';\nimport processLegacyFilesViews from './legacy/navigationMapper.js';\nimport registerPreviewServiceWorker from './services/ServiceWorker.js';\nimport router from './router/router.js';\nimport RouterService from './services/RouterService';\nimport SettingsModel from './models/Setting.js';\nimport SettingsService from './services/Settings.js';\n// Init private and public Files namespace\nwindow.OCA.Files = window.OCA.Files ?? {};\nwindow.OCP.Files = window.OCP.Files ?? {};\n// Expose router\nconst Router = new RouterService(router);\nObject.assign(window.OCP.Files, { Router });\n// Init Pinia store\nVue.use(PiniaVuePlugin);\nconst pinia = createPinia();\n// Init Navigation Service\nconst Navigation = new NavigationService();\nObject.assign(window.OCP.Files, { Navigation });\nVue.prototype.$navigation = Navigation;\n// Init Files App Settings Service\nconst Settings = new SettingsService();\nObject.assign(window.OCA.Files, { Settings });\nObject.assign(window.OCA.Files.Settings, { Setting: SettingsModel });\n// Init Navigation View\nconst View = Vue.extend(NavigationView);\nconst FilesNavigationRoot = new View({\n name: 'FilesNavigationRoot',\n propsData: {\n Navigation,\n },\n router,\n pinia,\n});\nFilesNavigationRoot.$mount('#app-navigation-files');\n// Init content list view\nconst ListView = Vue.extend(FilesListView);\nconst FilesList = new ListView({\n name: 'FilesListRoot',\n router,\n pinia,\n});\nFilesList.$mount('#app-content-vue');\n// Init legacy and new files views\nprocessLegacyFilesViews();\n// Register preview service worker\nregisterPreviewServiceWorker();\n","export default class RouterService {\n _router;\n constructor(router) {\n this._router = router;\n }\n /**\n * Trigger a route change on the files app\n *\n * @param path the url path, eg: '/trashbin?dir=/Deleted'\n * @param replace replace the current history\n * @see https://router.vuejs.org/guide/essentials/navigation.html#navigate-to-a-different-location\n */\n goTo(path, replace = false) {\n return this._router.push({\n path,\n replace,\n });\n }\n /**\n * Trigger a route change on the files App\n *\n * @param name the route name\n * @param params the route parameters\n * @param query the url query parameters\n * @param replace replace the current history\n * @see https://router.vuejs.org/guide/essentials/navigation.html#navigate-to-a-different-location\n */\n goToRoute(name, params, query, replace) {\n return this._router.push({\n name,\n query,\n params,\n replace,\n });\n }\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Settings {\n\n\t_settings\n\n\tconstructor() {\n\t\tthis._settings = []\n\t\tconsole.debug('OCA.Files.Settings initialized')\n\t}\n\n\t/**\n\t * Register a new setting\n\t *\n\t * @since 19.0.0\n\t * @param {OCA.Files.Settings.Setting} view element to add to settings\n\t * @return {boolean} whether registering was successful\n\t */\n\tregister(view) {\n\t\tif (this._settings.filter(e => e.name === view.name).length > 0) {\n\t\t\tconsole.error('A setting with the same name is already registered')\n\t\t\treturn false\n\t\t}\n\t\tthis._settings.push(view)\n\t\treturn true\n\t}\n\n\t/**\n\t * All settings elements\n\t *\n\t * @return {OCA.Files.Settings.Setting[]} All currently registered settings\n\t */\n\tget settings() {\n\t\treturn this._settings\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Setting {\n\n\t_close\n\t_el\n\t_name\n\t_open\n\n\t/**\n\t * Create a new files app setting\n\t *\n\t * @since 19.0.0\n\t * @param {string} name the name of this setting\n\t * @param {object} component the component\n\t * @param {Function} component.el function that returns an unmounted dom element to be added\n\t * @param {Function} [component.open] callback for when setting is added\n\t * @param {Function} [component.close] callback for when setting is closed\n\t */\n\tconstructor(name, { el, open, close }) {\n\t\tthis._name = name\n\t\tthis._el = el\n\t\tthis._open = open\n\t\tthis._close = close\n\n\t\tif (typeof this._open !== 'function') {\n\t\t\tthis._open = () => {}\n\t\t}\n\n\t\tif (typeof this._close !== 'function') {\n\t\t\tthis._close = () => {}\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this._name\n\t}\n\n\tget el() {\n\t\treturn this._el\n\t}\n\n\tget open() {\n\t\treturn this._open\n\t}\n\n\tget close() {\n\t\treturn this._close\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { generateUrl } from '@nextcloud/router'\nimport logger from '../logger.js'\n\nexport default () => {\n\tif ('serviceWorker' in navigator) {\n\t\t// Use the window load event to keep the page load performant\n\t\twindow.addEventListener('load', async () => {\n\t\t\ttry {\n\t\t\t\tconst url = generateUrl('/apps/files/preview-service-worker.js', {}, { noRewrite: true })\n\t\t\t\tconst registration = await navigator.serviceWorker.register(url, { scope: '/' })\n\t\t\t\tlogger.debug('SW registered: ', { registration })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('SW registration failed: ', { error })\n\t\t\t}\n\t\t})\n\t} else {\n\t\tlogger.debug('Service Worker is not enabled on this browser.')\n\t}\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".breadcrumb[data-v-68b3b20b]{flex:1 1 100% !important;width:100%}.breadcrumb[data-v-68b3b20b] a{cursor:pointer !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/BreadCrumbs.vue\"],\"names\":[],\"mappings\":\"AACA,6BAEC,wBAAA,CACA,UAAA,CAEA,+BACC,yBAAA\",\"sourcesContent\":[\"\\n.breadcrumb {\\n\\t// Take as much space as possible\\n\\tflex: 1 1 100% !important;\\n\\twidth: 100%;\\n\\n\\t::v-deep a {\\n\\t\\tcursor: pointer !important;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".custom-svg-icon[data-v-93e9b2f4]{display:flex;align-items:center;align-self:center;justify-content:center;justify-self:center;width:44px;height:44px;opacity:1}.custom-svg-icon[data-v-93e9b2f4] svg{height:22px;width:22px;fill:currentColor}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/CustomSvgIconRender.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,YAAA,CACA,kBAAA,CACA,iBAAA,CACA,sBAAA,CACA,mBAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CAEA,sCAGC,WAAA,CACA,UAAA,CACA,iBAAA\",\"sourcesContent\":[\"\\n.custom-svg-icon {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\talign-self: center;\\n\\tjustify-content: center;\\n\\tjustify-self: center;\\n\\twidth: 44px;\\n\\theight: 44px;\\n\\topacity: 1;\\n\\n\\t::v-deep svg {\\n\\t\\t// mdi icons have a size of 24px\\n\\t\\t// 22px results in roughly 16px inner size\\n\\t\\theight: 22px;\\n\\t\\twidth: 22px;\\n\\t\\tfill: currentColor;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"tr[data-v-0600090e]:hover,tr[data-v-0600090e]:focus,tr[data-v-0600090e]:active{background-color:var(--color-background-dark)}.files-list__row-icon-preview[data-v-0600090e]:not([style*=background]){background:var(--color-loading-dark)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FileEntry.vue\"],\"names\":[],\"mappings\":\"AAGC,+EAGC,6CAAA,CAKF,wEACI,oCAAA\",\"sourcesContent\":[\"\\n/* Hover effect on tbody lines only */\\ntr {\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n}\\n\\n/* Preview not loaded animation effect */\\n.files-list__row-icon-preview:not([style*='background']) {\\n background: var(--color-loading-dark);\\n\\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"tr[data-v-e6a083be]{padding-bottom:300px;border-top:1px solid var(--color-border);background-color:rgba(0,0,0,0) !important;border-bottom:none !important}td[data-v-e6a083be]{user-select:none;color:var(--color-text-maxcontrast) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListFooter.vue\"],\"names\":[],\"mappings\":\"AAEA,oBACC,oBAAA,CACA,wCAAA,CAEA,yCAAA,CACA,6BAAA,CAGD,oBACC,gBAAA,CAEA,8CAAA\",\"sourcesContent\":[\"\\n// Scoped row\\ntr {\\n\\tpadding-bottom: 300px;\\n\\tborder-top: 1px solid var(--color-border);\\n\\t// Prevent hover effect on the whole row\\n\\tbackground-color: transparent !important;\\n\\tborder-bottom: none !important;\\n}\\n\\ntd {\\n\\tuser-select: none;\\n\\t// Make sure the cell colors don't apply to column headers\\n\\tcolor: var(--color-text-maxcontrast) !important;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list__column[data-v-76b6186a]{user-select:none;color:var(--color-text-maxcontrast) !important}.files-list__column--sortable[data-v-76b6186a]{cursor:pointer}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListHeader.vue\"],\"names\":[],\"mappings\":\"AACA,qCACC,gBAAA,CAEA,8CAAA,CAEA,+CACC,cAAA\",\"sourcesContent\":[\"\\n.files-list__column {\\n\\tuser-select: none;\\n\\t// Make sure the cell colors don't apply to column headers\\n\\tcolor: var(--color-text-maxcontrast) !important;\\n\\n\\t&--sortable {\\n\\t\\tcursor: pointer;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list__row-actions-batch[data-v-03e57b1e]{flex:1 1 100% !important}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper{width:100%}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper span.button-vue__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListHeaderActions.vue\"],\"names\":[],\"mappings\":\"AACA,gDACC,wBAAA,CAGA,qEACC,UAAA,CACA,2FACC,eAAA,CACA,sBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n.files-list__row-actions-batch {\\n\\tflex: 1 1 100% !important;\\n\\n\\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\\n\\t::v-deep .button-vue__wrapper {\\n\\t\\twidth: 100%;\\n\\t\\tspan.button-vue__text {\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list__column-sort-button{margin:0 calc(var(--cell-margin)*-1);padding:0 4px 0 16px !important}.files-list__column-sort-button .button-vue__wrapper{flex-direction:row-reverse;width:100%}.files-list__column-sort-button .button-vue__icon{transition-timing-function:linear;transition-duration:.1s;transition-property:opacity;opacity:0}.files-list__column-sort-button .button-vue__text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__column-sort-button--active .button-vue__icon,.files-list__column-sort-button:hover .button-vue__icon,.files-list__column-sort-button:focus .button-vue__icon,.files-list__column-sort-button:active .button-vue__icon{opacity:1 !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListHeaderButton.vue\"],\"names\":[],\"mappings\":\"AACA,gCAEC,oCAAA,CAEA,+BAAA,CAGA,qDACC,0BAAA,CAGA,UAAA,CAGD,kDACC,iCAAA,CACA,uBAAA,CACA,2BAAA,CACA,SAAA,CAID,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAOA,mOACC,oBAAA\",\"sourcesContent\":[\"\\n.files-list__column-sort-button {\\n\\t// Compensate for cells margin\\n\\tmargin: 0 calc(var(--cell-margin) * -1);\\n\\t// Reverse padding\\n\\tpadding: 0 4px 0 16px !important;\\n\\n\\t// Icon after text\\n\\t.button-vue__wrapper {\\n\\t\\tflex-direction: row-reverse;\\n\\t\\t// Take max inner width for text overflow ellipsis\\n\\t\\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.button-vue__icon {\\n\\t\\ttransition-timing-function: linear;\\n\\t\\ttransition-duration: .1s;\\n\\t\\ttransition-property: opacity;\\n\\t\\topacity: 0;\\n\\t}\\n\\n\\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\\n\\t.button-vue__text {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\n\\t&--active,\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\t.button-vue__icon {\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list[data-v-640a8bb8]{--row-height: 55px;--cell-margin: 14px;--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);--checkbox-size: 24px;--clickable-area: 44px;--icon-preview-size: 32px;display:block;overflow:auto;height:100%}.files-list[data-v-640a8bb8] tbody,.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot{display:flex;flex-direction:column;width:100%;position:relative}.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot[role=thead]{position:sticky;z-index:10;top:0;height:var(--row-height);background-color:var(--color-main-background)}.files-list[data-v-640a8bb8] tr{position:absolute;display:flex;align-items:center;width:100%;border-bottom:1px solid var(--color-border)}.files-list[data-v-640a8bb8] td,.files-list[data-v-640a8bb8] th{display:flex;align-items:center;flex:0 0 auto;justify-content:left;width:var(--row-height);height:var(--row-height);margin:0;padding:0;color:var(--color-text-maxcontrast);border:none}.files-list[data-v-640a8bb8] td span,.files-list[data-v-640a8bb8] th span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list[data-v-640a8bb8] .files-list__row-checkbox{justify-content:center}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch label.checkbox-radio-switch__label{width:var(--clickable-area);height:var(--clickable-area);margin:0;padding:calc((var(--clickable-area) - var(--checkbox-size))/2)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list[data-v-640a8bb8] .files-list__row-icon{position:relative;display:flex;overflow:visible;align-items:center;flex:0 0 var(--icon-preview-size);justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list[data-v-640a8bb8] .files-list__row-icon>span{justify-content:flex-start}.files-list[data-v-640a8bb8] .files-list__row-icon>span:not(.files-list__row-icon-favorite) svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list[data-v-640a8bb8] .files-list__row-icon-preview{overflow:hidden;width:var(--icon-preview-size);height:var(--icon-preview-size);border-radius:var(--border-radius);background-repeat:no-repeat;background-position:center;background-size:contain}.files-list[data-v-640a8bb8] .files-list__row-icon-favorite{position:absolute;top:4px;right:-8px;color:#fc0}.files-list[data-v-640a8bb8] .files-list__row-name{overflow:hidden;flex:1 1 auto}.files-list[data-v-640a8bb8] .files-list__row-name a{display:flex;align-items:center;width:100%;height:100%}.files-list[data-v-640a8bb8] .files-list__row-name a:focus .files-list__row-name-text,.files-list[data-v-640a8bb8] .files-list__row-name a:focus-visible .files-list__row-name-text{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list[data-v-640a8bb8] .files-list__row-name .files-list__row-name-text{padding:5px 10px;margin-left:-10px}.files-list[data-v-640a8bb8] .files-list__row-actions{width:auto}.files-list[data-v-640a8bb8] .files-list__row-actions~td,.files-list[data-v-640a8bb8] .files-list__row-actions~th{margin:0 var(--cell-margin)}.files-list[data-v-640a8bb8] .files-list__row-actions button .button-vue__text{font-weight:normal}.files-list[data-v-640a8bb8] .files-list__row-actions button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list[data-v-640a8bb8] .files-list__row-size{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list[data-v-640a8bb8] .files-list__row-column-custom{width:calc(var(--row-height)*2)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListVirtual.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,kBAAA,CACA,mBAAA,CAEA,wEAAA,CACA,qBAAA,CACA,sBAAA,CACA,yBAAA,CAEA,aAAA,CACA,aAAA,CACA,WAAA,CAIC,4FACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,iBAAA,CAID,qEAEC,eAAA,CACA,UAAA,CACA,KAAA,CACA,wBAAA,CACA,6CAAA,CAGD,gCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,2CAAA,CAGD,gEACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,0EACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,uDACC,sBAAA,CACA,8EACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,iHACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,2GACC,mBAAA,CAKH,mDACC,iBAAA,CACA,YAAA,CACA,gBAAA,CACA,kBAAA,CAEA,iCAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,wDACC,0BAAA,CAGD,gGACC,8BAAA,CACA,+BAAA,CAGD,2DACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAGD,4DACC,iBAAA,CACA,OAAA,CACA,UAAA,CACA,UAAA,CAIF,mDAEC,eAAA,CAEA,aAAA,CAEA,qDACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,oLAEC,mDAAA,CACA,kBAAA,CAIF,8EAEC,gBAAA,CACA,iBAAA,CAIF,sDACC,UAAA,CAGA,kHAEC,2BAAA,CAIA,+EAEC,kBAAA,CAED,6GAEC,mCAAA,CAKH,mDAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,mFACC,+BAAA,CACA,wGACC,kBAAA,CAKH,4DACC,+BAAA\",\"sourcesContent\":[\"\\n.files-list {\\n\\t--row-height: 55px;\\n\\t--cell-margin: 14px;\\n\\n\\t--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);\\n\\t--checkbox-size: 24px;\\n\\t--clickable-area: 44px;\\n\\t--icon-preview-size: 32px;\\n\\n\\tdisplay: block;\\n\\toverflow: auto;\\n\\theight: 100%;\\n\\n\\t&::v-deep {\\n\\t\\t// Table head, body and footer\\n\\t\\ttbody, .vue-recycle-scroller__slot {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\t// Necessary for virtual scrolling absolute\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\n\\t\\t// Table header\\n\\t\\t.vue-recycle-scroller__slot[role='thead'] {\\n\\t\\t\\t// Pinned on top when scrolling\\n\\t\\t\\tposition: sticky;\\n\\t\\t\\tz-index: 10;\\n\\t\\t\\ttop: 0;\\n\\t\\t\\theight: var(--row-height);\\n\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t}\\n\\n\\t\\ttr {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\t}\\n\\n\\t\\ttd, th {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tflex: 0 0 auto;\\n\\t\\t\\tjustify-content: left;\\n\\t\\t\\twidth: var(--row-height);\\n\\t\\t\\theight: var(--row-height);\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\tborder: none;\\n\\n\\t\\t\\t// Columns should try to add any text\\n\\t\\t\\t// node wrapped in a span. That should help\\n\\t\\t\\t// with the ellipsis on overflow.\\n\\t\\t\\tspan {\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-checkbox {\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\t.checkbox-radio-switch {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\tjustify-content: center;\\n\\n\\t\\t\\t\\t--icon-size: var(--checkbox-size);\\n\\n\\t\\t\\t\\tlabel.checkbox-radio-switch__label {\\n\\t\\t\\t\\t\\twidth: var(--clickable-area);\\n\\t\\t\\t\\t\\theight: var(--clickable-area);\\n\\t\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t\\t\\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t.checkbox-radio-switch__icon {\\n\\t\\t\\t\\t\\tmargin: 0 !important;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-icon {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\toverflow: visible;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\t// No shrinking or growing allowed\\n\\t\\t\\tflex: 0 0 var(--icon-preview-size);\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\twidth: var(--icon-preview-size);\\n\\t\\t\\theight: 100%;\\n\\t\\t\\t// Show same padding as the checkbox right padding for visual balance\\n\\t\\t\\tmargin-right: var(--checkbox-padding);\\n\\t\\t\\tcolor: var(--color-primary-element);\\n\\n\\t\\t\\t& > span {\\n\\t\\t\\t\\tjustify-content: flex-start;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&> span:not(.files-list__row-icon-favorite) svg {\\n\\t\\t\\t\\twidth: var(--icon-preview-size);\\n\\t\\t\\t\\theight: var(--icon-preview-size);\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-preview {\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\twidth: var(--icon-preview-size);\\n\\t\\t\\t\\theight: var(--icon-preview-size);\\n\\t\\t\\t\\tborder-radius: var(--border-radius);\\n\\t\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\t\\t// Center and contain the preview\\n\\t\\t\\t\\tbackground-position: center;\\n\\t\\t\\t\\tbackground-size: contain;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-favorite {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: 4px;\\n\\t\\t\\t\\tright: -8px;\\n\\t\\t\\t\\tcolor: #ffcc00;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-name {\\n\\t\\t\\t// Prevent link from overflowing\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\t// Take as much space as possible\\n\\t\\t\\tflex: 1 1 auto;\\n\\n\\t\\t\\ta {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\talign-items: center;\\n\\t\\t\\t\\t// Fill cell height and width\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\theight: 100%;\\n\\n\\t\\t\\t\\t// Keyboard indicator a11y\\n\\t\\t\\t\\t&:focus .files-list__row-name-text,\\n\\t\\t\\t\\t&:focus-visible .files-list__row-name-text {\\n\\t\\t\\t\\t\\toutline: 2px solid var(--color-main-text) !important;\\n\\t\\t\\t\\t\\tborder-radius: 20px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t.files-list__row-name-text {\\n\\t\\t\\t\\t// Make some space for the outline\\n\\t\\t\\t\\tpadding: 5px 10px;\\n\\t\\t\\t\\tmargin-left: -10px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-actions {\\n\\t\\t\\twidth: auto;\\n\\n\\t\\t\\t// Add margin to all cells after the actions\\n\\t\\t\\t& ~ td,\\n\\t\\t\\t& ~ th {\\n\\t\\t\\t\\tmargin: 0 var(--cell-margin);\\n\\t\\t\\t}\\n\\n\\t\\t\\tbutton {\\n\\t\\t\\t\\t.button-vue__text {\\n\\t\\t\\t\\t\\t// Remove bold from default button styling\\n\\t\\t\\t\\t\\tfont-weight: normal;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t&:not(:hover, :focus, :active) .button-vue__wrapper {\\n\\t\\t\\t\\t\\t// Also apply color-text-maxcontrast to non-active button\\n\\t\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-size {\\n\\t\\t\\t// Right align text\\n\\t\\t\\tjustify-content: flex-end;\\n\\t\\t\\twidth: calc(var(--row-height) * 1.5);\\n\\t\\t\\t// opacity varies with the size\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\n\\t\\t\\t// Icon is before text since size is right aligned\\n\\t\\t\\t.files-list__column-sort-button {\\n\\t\\t\\t\\tpadding: 0 16px 0 4px !important;\\n\\t\\t\\t\\t.button-vue__wrapper {\\n\\t\\t\\t\\t\\tflex-direction: row;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-column-custom {\\n\\t\\t\\twidth: calc(var(--row-height) * 2);\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation-entry__settings-quota--not-unlimited[data-v-918797b2] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-918797b2]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/NavigationQuota.vue\"],\"names\":[],\"mappings\":\"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA\",\"sourcesContent\":[\"\\n// User storage stats display\\n.app-navigation-entry__settings-quota {\\n\\t// Align title with progress and icon\\n\\t&--not-unlimited::v-deep .app-navigation-entry__title {\\n\\t\\tmargin-top: -4px;\\n\\t}\\n\\n\\tprogress {\\n\\t\\tposition: absolute;\\n\\t\\tbottom: 10px;\\n\\t\\tmargin-left: 44px;\\n\\t\\twidth: calc(100% - 44px - 22px);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".template-picker__item[data-v-6c072a31]{display:flex}.template-picker__label[data-v-6c072a31]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-6c072a31],.template-picker__label *[data-v-6c072a31]{cursor:pointer;user-select:none}.template-picker__label[data-v-6c072a31]::before{display:none !important}.template-picker__preview[data-v-6c072a31]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-6c072a31]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-6c072a31]{display:flex}.template-picker__image[data-v-6c072a31]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-6c072a31]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-6c072a31]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/TemplatePreview.vue\"],\"names\":[],\"mappings\":\"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n\\n.template-picker {\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: flex;\\n\\t\\t// Align in the middle of the grid\\n\\t\\talign-items: center;\\n\\t\\tflex: 1 1;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&::before {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\t// Stretch so all entries are the same width\\n\\t\\tflex: 1 1;\\n\\t\\twidth: var(--width);\\n\\t\\tmin-height: var(--height);\\n\\t\\tmax-height: var(--height);\\n\\t\\tpadding: 0;\\n\\t\\tborder: var(--border) solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\n\\t\\tinput:checked + label > & {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&--failed {\\n\\t\\t\\t// Make sure to properly center fallback icon\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\t}\\n\\n\\t&__image {\\n\\t\\tmax-width: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n\\n\\t// Failed preview, fallback to mime icon\\n\\t&__preview--failed &__image {\\n\\t\\twidth: calc(var(--margin) * 8);\\n\\t\\t// Center mime icon\\n\\t\\tmargin: auto;\\n\\t\\tbackground-color: transparent !important;\\n\\n\\t\\tobject-fit: initial;\\n\\t}\\n\\n\\t&__title {\\n\\t\\toverflow: hidden;\\n\\t\\t// also count preview border\\n\\t\\tmax-width: calc(var(--width) + 2*2px);\\n\\t\\tpadding: var(--margin);\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-content[data-v-66068cbb]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-content[data-v-66068cbb]:not(.app-content--hidden)+#app-content{display:none}.files-list__header[data-v-66068cbb]{display:flex;align-content:center;flex:0 0;margin:4px 4px 4px 50px}.files-list__header>*[data-v-66068cbb]{flex:0 0}.files-list__refresh-icon[data-v-66068cbb]{flex:0 0 44px;width:44px;height:44px}.files-list__loading-icon[data-v-66068cbb]{margin:auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/FilesList.vue\"],\"names\":[],\"mappings\":\"AACA,8BAEC,YAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAIA,qEACC,YAAA,CAQD,qCACC,YAAA,CACA,oBAAA,CAEA,QAAA,CAEA,uBAAA,CACA,uCAGC,QAAA,CAGF,2CACC,aAAA,CACA,UAAA,CACA,WAAA,CAED,2CACC,WAAA\",\"sourcesContent\":[\"\\n.app-content {\\n\\t// Virtual list needs to be full height and is scrollable\\n\\tdisplay: flex;\\n\\toverflow: hidden;\\n\\tflex-direction: column;\\n\\tmax-height: 100%;\\n\\n\\t// TODO: remove after all legacy views are migrated\\n\\t// Hides the legacy app-content if shown view is not legacy\\n\\t&:not(&--hidden)::v-deep + #app-content {\\n\\t\\tdisplay: none;\\n\\t}\\n}\\n\\n$margin: 4px;\\n$navigationToggleSize: 50px;\\n\\n.files-list {\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\talign-content: center;\\n\\t\\t// Do not grow or shrink (vertically)\\n\\t\\tflex: 0 0;\\n\\t\\t// Align with the navigation toggle icon\\n\\t\\tmargin: $margin $margin $margin $navigationToggleSize;\\n\\t\\t> * {\\n\\t\\t\\t// Do not grow or shrink (horizontally)\\n\\t\\t\\t// Only the breadcrumbs shrinks\\n\\t\\t\\tflex: 0 0;\\n\\t\\t}\\n\\t}\\n\\t&__refresh-icon {\\n\\t\\tflex: 0 0 44px;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\t&__loading-icon {\\n\\t\\tmargin: auto;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation[data-v-657a978e] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-657a978e]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-657a978e]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Navigation.vue\"],\"names\":[],\"mappings\":\"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA\",\"sourcesContent\":[\"\\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\\n.app-navigation::v-deep .app-navigation-entry-icon {\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: center;\\n}\\n\\n.app-navigation > ul.app-navigation__list {\\n\\t// Use flex gap value for more elegant spacing\\n\\tpadding-bottom: var(--default-grid-baseline, 4px);\\n}\\n\\n.app-navigation-entry__settings {\\n\\theight: auto !important;\\n\\toverflow: hidden !important;\\n\\tpadding-top: 0 !important;\\n\\t// Prevent shrinking or growing\\n\\tflex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".setting-link[data-v-76ca5d1f]:hover{text-decoration:underline}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Settings.vue\"],\"names\":[],\"mappings\":\"AACA,qCACC,yBAAA\",\"sourcesContent\":[\"\\n.setting-link:hover {\\n\\ttext-decoration: underline;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".templates-picker__form[data-v-715b4161]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-715b4161]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-715b4161]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-715b4161]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-715b4161],.templates-picker__buttons input[type=submit][data-v-715b4161]{height:44px}.templates-picker[data-v-715b4161] .modal-container{position:relative}.templates-picker__loading[data-v-715b4161]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/TemplatePicker.vue\"],\"names\":[],\"mappings\":\"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA\",\"sourcesContent\":[\"\\n.templates-picker {\\n\\t&__form {\\n\\t\\tpadding: calc(var(--margin) * 2);\\n\\t\\t// Will be handled by the buttons\\n\\t\\tpadding-bottom: 0;\\n\\n\\t\\th2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: var(--margin) 0 calc(var(--margin) * 2);\\n\\t\\t}\\n\\t}\\n\\n\\t&__list {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-gap: calc(var(--margin) * 2);\\n\\t\\tgrid-auto-columns: 1fr;\\n\\t\\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\\n\\t\\tmax-width: calc(var(--fullwidth) * 6);\\n\\t\\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\\n\\t\\t// Make sure all rows are the same height\\n\\t\\tgrid-auto-rows: 1fr;\\n\\t\\t// Center the columns set\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: calc(var(--margin) * 2) var(--margin);\\n\\t\\tposition: sticky;\\n\\t\\tbottom: 0;\\n\\t\\tbackground-image: linear-gradient(0, var(--gradient-main-background));\\n\\n\\t\\tbutton, input[type='submit'] {\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Make sure we're relative for the loading emptycontent on top\\n\\t::v-deep .modal-container {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__loading {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmargin: 0;\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n/* @keyframes preview-gradient-fade {\\n 0% {\\n opacity: 1;\\n }\\n 50% {\\n opacity: 0.5;\\n }\\n 100% {\\n opacity: 1;\\n }\\n} */\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FileEntry.vue\"],\"names\":[],\"mappings\":\";AA6mBA;;;;;;;;;;GAUA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\\n -\\n - @author John Molakvoæ <skjnldsv@protonmail.com>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<Fragment>\\n\\t\\t<td class=\\\"files-list__row-checkbox\\\">\\n\\t\\t\\t<NcCheckboxRadioSwitch v-if=\\\"active\\\"\\n\\t\\t\\t\\t:aria-label=\\\"t('files', 'Select the row for {displayName}', { displayName })\\\"\\n\\t\\t\\t\\t:checked=\\\"selectedFiles\\\"\\n\\t\\t\\t\\t:value=\\\"fileid\\\"\\n\\t\\t\\t\\tname=\\\"selectedFiles\\\"\\n\\t\\t\\t\\t@update:checked=\\\"onSelectionChange\\\" />\\n\\t\\t</td>\\n\\n\\t\\t<!-- Link to file -->\\n\\t\\t<td class=\\\"files-list__row-name\\\">\\n\\t\\t\\t<a ref=\\\"name\\\" v-bind=\\\"linkTo\\\" @click=\\\"execDefaultAction\\\">\\n\\t\\t\\t\\t<!-- Icon or preview -->\\n\\t\\t\\t\\t<span class=\\\"files-list__row-icon\\\">\\n\\t\\t\\t\\t\\t<FolderIcon v-if=\\\"source.type === 'folder'\\\" />\\n\\n\\t\\t\\t\\t\\t<!-- Decorative image, should not be aria documented -->\\n\\t\\t\\t\\t\\t<span v-else-if=\\\"previewUrl && !backgroundFailed\\\"\\n\\t\\t\\t\\t\\t\\tref=\\\"previewImg\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"files-list__row-icon-preview\\\"\\n\\t\\t\\t\\t\\t\\t:style=\\\"{ backgroundImage }\\\" />\\n\\n\\t\\t\\t\\t\\t<span v-else-if=\\\"mimeIconUrl\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"files-list__row-icon-preview files-list__row-icon-preview--mime\\\"\\n\\t\\t\\t\\t\\t\\t:style=\\\"{ backgroundImage: mimeIconUrl }\\\" />\\n\\n\\t\\t\\t\\t\\t<FileIcon v-else />\\n\\n\\t\\t\\t\\t\\t<!-- Favorite icon -->\\n\\t\\t\\t\\t\\t<span v-if=\\\"isFavorite\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"files-list__row-icon-favorite\\\"\\n\\t\\t\\t\\t\\t\\t:aria-label=\\\"t('files', 'Favorite')\\\">\\n\\t\\t\\t\\t\\t\\t<StarIcon aria-hidden=\\\"true\\\" :size=\\\"20\\\" />\\n\\t\\t\\t\\t\\t</span>\\n\\t\\t\\t\\t</span>\\n\\n\\t\\t\\t\\t<!-- File name -->\\n\\t\\t\\t\\t<span class=\\\"files-list__row-name-text\\\">{{ displayName }}</span>\\n\\t\\t\\t</a>\\n\\t\\t</td>\\n\\n\\t\\t<!-- Actions -->\\n\\t\\t<td :class=\\\"`files-list__row-actions-${uniqueId}`\\\" class=\\\"files-list__row-actions\\\">\\n\\t\\t\\t<!-- Inline actions -->\\n\\t\\t\\t<!-- TODO: implement CustomElementRender -->\\n\\n\\t\\t\\t<!-- Menu actions -->\\n\\t\\t\\t<NcActions v-if=\\\"active\\\"\\n\\t\\t\\t\\tref=\\\"actionsMenu\\\"\\n\\t\\t\\t\\t:boundaries-element=\\\"boundariesElement\\\"\\n\\t\\t\\t\\t:container=\\\"boundariesElement\\\"\\n\\t\\t\\t\\t:disabled=\\\"source._loading\\\"\\n\\t\\t\\t\\t:force-title=\\\"true\\\"\\n\\t\\t\\t\\t:force-menu=\\\"true\\\"\\n\\t\\t\\t\\t:inline=\\\"enabledInlineActions.length\\\"\\n\\t\\t\\t\\t:open.sync=\\\"openedMenu\\\">\\n\\t\\t\\t\\t<NcActionButton v-for=\\\"action in enabledMenuActions\\\"\\n\\t\\t\\t\\t\\t:key=\\\"action.id\\\"\\n\\t\\t\\t\\t\\t:class=\\\"'files-list__row-action-' + action.id\\\"\\n\\t\\t\\t\\t\\t@click=\\\"onActionClick(action)\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcLoadingIcon v-if=\\\"loading === action.id\\\" :size=\\\"18\\\" />\\n\\t\\t\\t\\t\\t\\t<CustomSvgIconRender v-else :svg=\\\"action.iconSvgInline([source], currentView)\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t\\t{{ action.displayName([source], currentView) }}\\n\\t\\t\\t\\t</NcActionButton>\\n\\t\\t\\t</NcActions>\\n\\t\\t</td>\\n\\n\\t\\t<!-- Size -->\\n\\t\\t<td v-if=\\\"isSizeAvailable\\\"\\n\\t\\t\\t:style=\\\"{ opacity: sizeOpacity }\\\"\\n\\t\\t\\tclass=\\\"files-list__row-size\\\"\\n\\t\\t\\t@click=\\\"openDetailsIfAvailable\\\">\\n\\t\\t\\t<span>{{ size }}</span>\\n\\t\\t</td>\\n\\n\\t\\t<!-- View columns -->\\n\\t\\t<td v-for=\\\"column in columns\\\"\\n\\t\\t\\t:key=\\\"column.id\\\"\\n\\t\\t\\t:class=\\\"`files-list__row-${currentView?.id}-${column.id}`\\\"\\n\\t\\t\\tclass=\\\"files-list__row-column-custom\\\"\\n\\t\\t\\t@click=\\\"openDetailsIfAvailable\\\">\\n\\t\\t\\t<CustomElementRender v-if=\\\"active\\\"\\n\\t\\t\\t\\t:current-view=\\\"currentView\\\"\\n\\t\\t\\t\\t:render=\\\"column.render\\\"\\n\\t\\t\\t\\t:source=\\\"source\\\" />\\n\\t\\t</td>\\n\\t</Fragment>\\n</template>\\n\\n<script lang='ts'>\\nimport { debounce } from 'debounce'\\nimport { formatFileSize } from '@nextcloud/files'\\nimport { Fragment } from 'vue-frag'\\nimport { join } from 'path'\\nimport { showError, showSuccess } from '@nextcloud/dialogs'\\nimport { translate } from '@nextcloud/l10n'\\nimport CancelablePromise from 'cancelable-promise'\\nimport FileIcon from 'vue-material-design-icons/File.vue'\\nimport FolderIcon from 'vue-material-design-icons/Folder.vue'\\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\\nimport StarIcon from 'vue-material-design-icons/Star.vue'\\nimport Vue from 'vue'\\n\\nimport { ACTION_DETAILS } from '../actions/sidebarAction.ts'\\nimport { getFileActions } from '../services/FileAction.ts'\\nimport { hashCode } from '../utils/hashUtils.ts'\\nimport { isCachedPreview } from '../services/PreviewService.ts'\\nimport { useActionsMenuStore } from '../store/actionsmenu.ts'\\nimport { useFilesStore } from '../store/files.ts'\\nimport { useKeyboardStore } from '../store/keyboard.ts'\\nimport { useSelectionStore } from '../store/selection.ts'\\nimport { useUserConfigStore } from '../store/userconfig.ts'\\nimport CustomElementRender from './CustomElementRender.vue'\\nimport CustomSvgIconRender from './CustomSvgIconRender.vue'\\nimport logger from '../logger.js'\\n\\n// The registered actions list\\nconst actions = getFileActions()\\n\\nexport default Vue.extend({\\n\\tname: 'FileEntry',\\n\\n\\tcomponents: {\\n\\t\\tCustomElementRender,\\n\\t\\tCustomSvgIconRender,\\n\\t\\tFileIcon,\\n\\t\\tFolderIcon,\\n\\t\\tFragment,\\n\\t\\tNcActionButton,\\n\\t\\tNcActions,\\n\\t\\tNcCheckboxRadioSwitch,\\n\\t\\tNcLoadingIcon,\\n\\t\\tStarIcon,\\n\\t},\\n\\n\\tprops: {\\n\\t\\tactive: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: false,\\n\\t\\t},\\n\\t\\tisSizeAvailable: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: false,\\n\\t\\t},\\n\\t\\tsource: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tindex: {\\n\\t\\t\\ttype: Number,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tnodes: {\\n\\t\\t\\ttype: Array,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tfilesListWidth: {\\n\\t\\t\\ttype: Number,\\n\\t\\t\\tdefault: 0,\\n\\t\\t},\\n\\t},\\n\\n\\tsetup() {\\n\\t\\tconst actionsMenuStore = useActionsMenuStore()\\n\\t\\tconst filesStore = useFilesStore()\\n\\t\\tconst keyboardStore = useKeyboardStore()\\n\\t\\tconst selectionStore = useSelectionStore()\\n\\t\\tconst userConfigStore = useUserConfigStore()\\n\\t\\treturn {\\n\\t\\t\\tactionsMenuStore,\\n\\t\\t\\tfilesStore,\\n\\t\\t\\tkeyboardStore,\\n\\t\\t\\tselectionStore,\\n\\t\\t\\tuserConfigStore,\\n\\t\\t}\\n\\t},\\n\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tbackgroundFailed: false,\\n\\t\\t\\tbackgroundImage: '',\\n\\t\\t\\tboundariesElement: document.querySelector('.app-content > .files-list'),\\n\\t\\t\\tloading: '',\\n\\t\\t}\\n\\t},\\n\\n\\tcomputed: {\\n\\t\\tuserConfig() {\\n\\t\\t\\treturn this.userConfigStore.userConfig\\n\\t\\t},\\n\\n\\t\\tcurrentView() {\\n\\t\\t\\treturn this.$navigation.active\\n\\t\\t},\\n\\t\\tcolumns() {\\n\\t\\t\\t// Hide columns if the list is too small\\n\\t\\t\\tif (this.filesListWidth < 512) {\\n\\t\\t\\t\\treturn []\\n\\t\\t\\t}\\n\\t\\t\\treturn this.currentView?.columns || []\\n\\t\\t},\\n\\n\\t\\tdir() {\\n\\t\\t\\t// Remove any trailing slash but leave root slash\\n\\t\\t\\treturn (this.$route?.query?.dir || '/').replace(/^(.+)\\\\/$/, '$1')\\n\\t\\t},\\n\\t\\tfileid() {\\n\\t\\t\\treturn this.source?.fileid?.toString?.()\\n\\t\\t},\\n\\t\\tdisplayName() {\\n\\t\\t\\treturn this.source.attributes.displayName\\n\\t\\t\\t\\t|| this.source.basename\\n\\t\\t},\\n\\n\\t\\tsize() {\\n\\t\\t\\tconst size = parseInt(this.source.size, 10) || 0\\n\\t\\t\\tif (typeof size !== 'number' || size < 0) {\\n\\t\\t\\t\\treturn this.t('files', 'Pending')\\n\\t\\t\\t}\\n\\t\\t\\treturn formatFileSize(size, true)\\n\\t\\t},\\n\\t\\tsizeOpacity() {\\n\\t\\t\\tconst size = parseInt(this.source.size, 10) || 0\\n\\t\\t\\tif (!size || size < 0) {\\n\\t\\t\\t\\treturn 1\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Whatever theme is active, the contrast will pass WCAG AA\\n\\t\\t\\t// with color main text over main background and an opacity of 0.7\\n\\t\\t\\tconst minOpacity = 0.7\\n\\t\\t\\tconst maxOpacitySize = 10 * 1024 * 1024\\n\\t\\t\\treturn minOpacity + (1 - minOpacity) * Math.pow((this.source.size / maxOpacitySize), 2)\\n\\t\\t},\\n\\n\\t\\tlinkTo() {\\n\\t\\t\\tif (this.source.type === 'folder') {\\n\\t\\t\\t\\tconst to = { ...this.$route, query: { dir: join(this.dir, this.source.basename) } }\\n\\t\\t\\t\\treturn {\\n\\t\\t\\t\\t\\tis: 'router-link',\\n\\t\\t\\t\\t\\ttitle: this.t('files', 'Open folder {name}', { name: this.displayName }),\\n\\t\\t\\t\\t\\tto,\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\tconst action = this.enabledDefaultActions[0]\\n\\t\\t\\t\\tconst displayName = action.displayName([this.source], this.currentView)\\n\\t\\t\\t\\treturn {\\n\\t\\t\\t\\t\\ttitle: displayName,\\n\\t\\t\\t\\t\\trole: 'button',\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn {\\n\\t\\t\\t\\thref: this.source.source,\\n\\t\\t\\t\\t// TODO: Use first action title ?\\n\\t\\t\\t\\ttitle: this.t('files', 'Download file {name}', { name: this.displayName }),\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tselectedFiles() {\\n\\t\\t\\treturn this.selectionStore.selected\\n\\t\\t},\\n\\t\\tisSelected() {\\n\\t\\t\\treturn this.selectedFiles.includes(this.source?.fileid?.toString?.())\\n\\t\\t},\\n\\n\\t\\tcropPreviews() {\\n\\t\\t\\treturn this.userConfig.crop_image_previews\\n\\t\\t},\\n\\t\\tpreviewUrl() {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tconst url = new URL(window.location.origin + this.source.attributes.previewUrl)\\n\\t\\t\\t\\t// Request tiny previews\\n\\t\\t\\t\\turl.searchParams.set('x', '32')\\n\\t\\t\\t\\turl.searchParams.set('y', '32')\\n\\t\\t\\t\\t// Handle cropping\\n\\t\\t\\t\\turl.searchParams.set('a', this.cropPreviews === true ? '0' : '1')\\n\\t\\t\\t\\treturn url.href\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\treturn null\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tmimeIconUrl() {\\n\\t\\t\\tconst mimeType = this.source.mime || 'application/octet-stream'\\n\\t\\t\\tconst mimeIconUrl = window.OC?.MimeType?.getIconUrl?.(mimeType)\\n\\t\\t\\tif (mimeIconUrl) {\\n\\t\\t\\t\\treturn `url(${mimeIconUrl})`\\n\\t\\t\\t}\\n\\t\\t\\treturn ''\\n\\t\\t},\\n\\n\\t\\tenabledActions() {\\n\\t\\t\\treturn actions\\n\\t\\t\\t\\t.filter(action => !action.enabled || action.enabled([this.source], this.currentView))\\n\\t\\t\\t\\t.sort((a, b) => (a.order || 0) - (b.order || 0))\\n\\t\\t},\\n\\t\\tenabledInlineActions() {\\n\\t\\t\\tif (this.filesListWidth < 768) {\\n\\t\\t\\t\\treturn []\\n\\t\\t\\t}\\n\\t\\t\\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\\n\\t\\t},\\n\\t\\tenabledMenuActions() {\\n\\t\\t\\tif (this.filesListWidth < 768) {\\n\\t\\t\\t\\t// If we have a default action, do not render the first one\\n\\t\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\t\\treturn this.enabledActions.slice(1)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn this.enabledActions\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst actions = [\\n\\t\\t\\t\\t...this.enabledInlineActions,\\n\\t\\t\\t\\t...this.enabledActions.filter(action => !action.inline),\\n\\t\\t\\t]\\n\\n\\t\\t\\t// If we have a default action, do not render the first one\\n\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\treturn actions.slice(1)\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn actions\\n\\t\\t},\\n\\t\\tenabledDefaultActions() {\\n\\t\\t\\treturn [\\n\\t\\t\\t\\t...this.enabledActions.filter(action => action.default),\\n\\t\\t\\t]\\n\\t\\t},\\n\\t\\topenedMenu: {\\n\\t\\t\\tget() {\\n\\t\\t\\t\\treturn this.actionsMenuStore.opened === this.uniqueId\\n\\t\\t\\t},\\n\\t\\t\\tset(opened) {\\n\\t\\t\\t\\tthis.actionsMenuStore.opened = opened ? this.uniqueId : null\\n\\t\\t\\t},\\n\\t\\t},\\n\\n\\t\\tuniqueId() {\\n\\t\\t\\treturn hashCode(this.source.source)\\n\\t\\t},\\n\\n\\t\\tisFavorite() {\\n\\t\\t\\treturn this.source.attributes.favorite === 1\\n\\t\\t},\\n\\t},\\n\\n\\twatch: {\\n\\t\\tactive(active, before) {\\n\\t\\t\\tif (active === false && before === true) {\\n\\t\\t\\t\\tthis.resetState()\\n\\n\\t\\t\\t\\t// When the row is not active anymore\\n\\t\\t\\t\\t// remove the display from the row to prevent\\n\\t\\t\\t\\t// keyboard interaction with it.\\n\\t\\t\\t\\tthis.$el.parentNode.style.display = 'none'\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Restore default tabindex\\n\\t\\t\\tthis.$el.parentNode.style.display = ''\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * When the source changes, reset the preview\\n\\t\\t * and fetch the new one.\\n\\t\\t */\\n\\t\\tpreviewUrl() {\\n\\t\\t\\tthis.clearImg()\\n\\t\\t\\tthis.debounceIfNotCached()\\n\\t\\t},\\n\\t},\\n\\n\\t/**\\n\\t * The row is mounted once and reused as we scroll.\\n\\t */\\n\\tmounted() {\\n\\t\\t// ⚠ Init the debounce function on mount and\\n\\t\\t// not when the module is imported to\\n\\t\\t// avoid sharing between recycled components\\n\\t\\tthis.debounceGetPreview = debounce(function() {\\n\\t\\t\\tthis.fetchAndApplyPreview()\\n\\t\\t}, 150, false)\\n\\n\\t\\t// Fetch the preview on init\\n\\t\\tthis.debounceIfNotCached()\\n\\n\\t\\t// Right click watcher on tr\\n\\t\\tthis.$el.parentNode?.addEventListener?.('contextmenu', this.onRightClick)\\n\\t},\\n\\n\\tbeforeDestroy() {\\n\\t\\tthis.resetState()\\n\\t},\\n\\n\\tmethods: {\\n\\t\\tasync debounceIfNotCached() {\\n\\t\\t\\tif (!this.previewUrl) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Check if we already have this preview cached\\n\\t\\t\\tconst isCached = await isCachedPreview(this.previewUrl)\\n\\t\\t\\tif (isCached) {\\n\\t\\t\\t\\tthis.backgroundImage = `url(${this.previewUrl})`\\n\\t\\t\\t\\tthis.backgroundFailed = false\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// We don't have this preview cached or it expired, requesting it\\n\\t\\t\\tthis.debounceGetPreview()\\n\\t\\t},\\n\\n\\t\\tfetchAndApplyPreview() {\\n\\t\\t\\t// Ignore if no preview\\n\\t\\t\\tif (!this.previewUrl) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If any image is being processed, reset it\\n\\t\\t\\tif (this.previewPromise) {\\n\\t\\t\\t\\tthis.clearImg()\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Store the promise to be able to cancel it\\n\\t\\t\\tthis.previewPromise = new CancelablePromise((resolve, reject, onCancel) => {\\n\\t\\t\\t\\tconst img = new Image()\\n\\t\\t\\t\\t// If active, load the preview with higher priority\\n\\t\\t\\t\\timg.fetchpriority = this.active ? 'high' : 'auto'\\n\\t\\t\\t\\timg.onload = () => {\\n\\t\\t\\t\\t\\tthis.backgroundImage = `url(${this.previewUrl})`\\n\\t\\t\\t\\t\\tthis.backgroundFailed = false\\n\\t\\t\\t\\t\\tresolve(img)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg.onerror = () => {\\n\\t\\t\\t\\t\\tthis.backgroundFailed = true\\n\\t\\t\\t\\t\\treject(img)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg.src = this.previewUrl\\n\\n\\t\\t\\t\\t// Image loading has been canceled\\n\\t\\t\\t\\tonCancel(() => {\\n\\t\\t\\t\\t\\timg.onerror = null\\n\\t\\t\\t\\t\\timg.onload = null\\n\\t\\t\\t\\t\\timg.src = ''\\n\\t\\t\\t\\t})\\n\\t\\t\\t})\\n\\t\\t},\\n\\n\\t\\tresetState() {\\n\\t\\t\\t// Reset loading state\\n\\t\\t\\tthis.loading = ''\\n\\n\\t\\t\\t// Reset the preview\\n\\t\\t\\tthis.clearImg()\\n\\n\\t\\t\\t// Close menu\\n\\t\\t\\tthis.openedMenu = false\\n\\t\\t},\\n\\n\\t\\tclearImg() {\\n\\t\\t\\tthis.backgroundImage = ''\\n\\t\\t\\tthis.backgroundFailed = false\\n\\n\\t\\t\\tif (this.previewPromise) {\\n\\t\\t\\t\\tthis.previewPromise.cancel()\\n\\t\\t\\t\\tthis.previewPromise = null\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tasync onActionClick(action) {\\n\\t\\t\\tconst displayName = action.displayName([this.source], this.currentView)\\n\\t\\t\\ttry {\\n\\t\\t\\t\\t// Set the loading marker\\n\\t\\t\\t\\tthis.loading = action.id\\n\\t\\t\\t\\tVue.set(this.source, '_loading', true)\\n\\n\\t\\t\\t\\tconst success = await action.exec(this.source, this.currentView, this.dir)\\n\\n\\t\\t\\t\\t// If the action returns null, we stay silent\\n\\t\\t\\t\\tif (success === null) {\\n\\t\\t\\t\\t\\treturn\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (success) {\\n\\t\\t\\t\\t\\tshowSuccess(this.t('files', '\\\"{displayName}\\\" action executed successfully', { displayName }))\\n\\t\\t\\t\\t\\treturn\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tshowError(this.t('files', '\\\"{displayName}\\\" action failed', { displayName }))\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\tlogger.error('Error while executing action', { action, e })\\n\\t\\t\\t\\tshowError(this.t('files', '\\\"{displayName}\\\" action failed', { displayName }))\\n\\t\\t\\t} finally {\\n\\t\\t\\t\\t// Reset the loading marker\\n\\t\\t\\t\\tthis.loading = ''\\n\\t\\t\\t\\tVue.set(this.source, '_loading', false)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\texecDefaultAction(event) {\\n\\t\\t\\t// Do not execute the default action on the folder, navigate instead\\n\\t\\t\\tif (this.source.type === 'folder') {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\tevent.preventDefault()\\n\\t\\t\\t\\tevent.stopPropagation()\\n\\t\\t\\t\\t// Execute the first default action if any\\n\\t\\t\\t\\tthis.enabledDefaultActions[0].exec(this.source, this.currentView, this.dir)\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\topenDetailsIfAvailable(event) {\\n\\t\\t\\tconst detailsAction = this.enabledDefaultActions.find(action => action.id === ACTION_DETAILS)\\n\\t\\t\\tif (detailsAction) {\\n\\t\\t\\t\\tevent.preventDefault()\\n\\t\\t\\t\\tevent.stopPropagation()\\n\\t\\t\\t\\tdetailsAction.exec(this.source, this.currentView)\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tonSelectionChange(selection) {\\n\\t\\t\\tconst newSelectedIndex = this.index\\n\\t\\t\\tconst lastSelectedIndex = this.selectionStore.lastSelectedIndex\\n\\n\\t\\t\\t// Get the last selected and select all files in between\\n\\t\\t\\tif (this.keyboardStore?.shiftKey && lastSelectedIndex !== null) {\\n\\t\\t\\t\\tconst isAlreadySelected = this.selectedFiles.includes(this.fileid)\\n\\n\\t\\t\\t\\tconst start = Math.min(newSelectedIndex, lastSelectedIndex)\\n\\t\\t\\t\\tconst end = Math.max(lastSelectedIndex, newSelectedIndex)\\n\\n\\t\\t\\t\\tconst lastSelection = this.selectionStore.lastSelection\\n\\t\\t\\t\\tconst filesToSelect = this.nodes\\n\\t\\t\\t\\t\\t.map(file => file.fileid?.toString?.())\\n\\t\\t\\t\\t\\t.slice(start, end + 1)\\n\\n\\t\\t\\t\\t// If already selected, update the new selection _without_ the current file\\n\\t\\t\\t\\tconst selection = [...lastSelection, ...filesToSelect]\\n\\t\\t\\t\\t\\t.filter(fileId => !isAlreadySelected || fileId !== this.fileid)\\n\\n\\t\\t\\t\\tlogger.debug('Shift key pressed, selecting all files in between', { start, end, filesToSelect, isAlreadySelected })\\n\\t\\t\\t\\t// Keep previous lastSelectedIndex to be use for further shift selections\\n\\t\\t\\t\\tthis.selectionStore.set(selection)\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\tlogger.debug('Updating selection', { selection })\\n\\t\\t\\tthis.selectionStore.set(selection)\\n\\t\\t\\tthis.selectionStore.setLastIndex(newSelectedIndex)\\n\\t\\t},\\n\\n\\t\\t// Open the actions menu on right click\\n\\t\\tonRightClick(event) {\\n\\t\\t\\t// If already opened, fallback to default browser\\n\\t\\t\\tif (this.openedMenu) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If the clicked row is in the selection, open global menu\\n\\t\\t\\tconst isMoreThanOneSelected = this.selectedFiles.length > 1\\n\\t\\t\\tthis.actionsMenuStore.opened = this.isSelected && isMoreThanOneSelected ? 'global' : this.uniqueId\\n\\n\\t\\t\\t// Prevent any browser defaults\\n\\t\\t\\tevent.preventDefault()\\n\\t\\t\\tevent.stopPropagation()\\n\\t\\t},\\n\\n\\t\\tt: translate,\\n\\t\\tformatFileSize,\\n\\t},\\n})\\n</script>\\n\\n<style scoped lang='scss'>\\n/* Hover effect on tbody lines only */\\ntr {\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n}\\n\\n/* Preview not loaded animation effect */\\n.files-list__row-icon-preview:not([style*='background']) {\\n background: var(--color-loading-dark);\\n\\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\\n}\\n</style>\\n\\n<style>\\n/* @keyframes preview-gradient-fade {\\n 0% {\\n opacity: 1;\\n }\\n 50% {\\n opacity: 0.5;\\n }\\n 100% {\\n opacity: 1;\\n }\\n} */\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2181;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2181: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(9570)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getCurrentDirectory","_OCA","_OCA$Files","_OCA$Files$App","_OCA$Files$App$curren","currentDirInfo","OCA","Files","App","currentFileList","dirInfo","path","name","concat","replace","previewWidth","inheritAttrs","props","basename","type","String","required","checked","Boolean","default","fileid","Number","filename","previewUrl","hasPreview","mime","ratio","data","failedPreview","computed","nameWithoutExt","indexOf","split","slice","join","id","realPreviewUrl","mimeIcon","getCurrentUser","generateUrl","document","getElementById","value","pathSections","startsWith","relativePath","forEach","section","encodeURIComponent","encodeFilePath","OC","MimeType","getIconUrl","methods","onCheck","$emit","onFailure","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","domProps","on","_v","class","_s","components","NcEmptyContent","NcModal","TemplatePreview","logger","Object","loading","opened","provider","emptyTemplate","_this$provider","_this$provider2","t","mimetypes","selectedTemplate","templates","find","template","style","margin","width","border","Math","round","fetchedProvider","async","axios","generateOcsUrl","ocs","getTemplates","app","label","Error","length","onSubmit","close","currentDirectory","fileList","_this$provider3","_this$provider4","debug","extension","_this$selectedTemplat","_this$selectedTemplat2","fileInfo","filePath","templatePath","templateType","createFromTemplate","normalize","addAndFetchFileInfo","then","status","model","FileInfoModel","filesClient","fileAction","fileActions","getDefaultFileAction","PERMISSION_ALL","action","$file","findFileEl","dir","fileInfoModel","error","console","showError","$event","preventDefault","stopPropagation","apply","arguments","_b","_l","key","_e","getLoggerBuilder","setApp","detectUser","build","Vue","n","TemplatePickerRoot","createElement","body","appendChild","loadState","templatesPath","TemplatePicker","TemplatePickerView","propsData","$mount","window","addEventListener","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","initTemplatesFolder","removeMenuEntry","Plugins","register","index","newTemplatePlugin","open","response","copySystemTemplates","changeDirectory","template_path","FilesPlugin","subscribe","_ref","query","setFilter","FileAction","constructor","validateAction","_action","iconSvgInline","enabled","exec","execBatch","order","inline","renderInline","registerFileAction","_nc_fileactions","search","push","getFileActions","nodes","view","TrashCan","map","node","permissions","every","permission","Permission","source","emit","Promise","all","ACTION_DETAILS","InformationSvg","files","_window","_window$OCA","_window$OCA$Files","Sidebar","some","_node$root","root","_window2","_window2$OCA","_window2$OCA$Files","_window2$OCA$Files$Si","_window2$OCA$Files$Si2","call","useFilesStore","fileStore","defineStore","state","roots","getters","getNode","getNodes","ids","filter","getRoot","service","actions","updateNodes","reduce","acc","deleteNodes","setRoot","onDeletedNode","store","_initialized","usePathsStore","pathsStore","paths","getPath","addPath","payload","useSelectionStore","selected","lastSelection","lastSelectedIndex","set","selection","undefined","setLastIndex","reset","viewConfig","useViewConfigStore","getConfig","onUpdate","setSortingBy","update","toggleSortingDirection","newDirection","sorting_direction","viewConfigStore","Home","NcBreadcrumbs","NcBreadcrumb","setup","filesStore","currentView","$navigation","active","dirs","sections","to","$route","exact","getDirDisplayName","getNodeFromId","getFileIdFromPath","_this$currentView","_node$attributes","fileId","attributes","onClick","_to$query","ariaLabel","_section$to","_section$to$query","_setupProxy","nativeOn","scopedSlots","_u","fn","proxy","useActionsMenuStore","userConfig","show_hidden","crop_image_previews","useUserConfigStore","userConfigStore","render","Function","element","watch","$el","replaceWith","mounted","svg","innerHTML","sanitize","CustomElementRender","CustomSvgIconRender","FileIcon","FolderIcon","Fragment","NcActionButton","NcActions","NcCheckboxRadioSwitch","NcLoadingIcon","StarIcon","isSizeAvailable","Array","filesListWidth","actionsMenuStore","keyboardStore","altKey","ctrlKey","metaKey","shiftKey","onEvent","event","useKeyboardStore","selectionStore","backgroundFailed","backgroundImage","boundariesElement","querySelector","columns","_this$$route","_this$$route$query","_this$source","_this$source$fileid","_this$source$fileid$t","toString","size","parseInt","formatFileSize","sizeOpacity","pow","linkTo","is","title","enabledDefaultActions","role","href","selectedFiles","isSelected","_this$source2","_this$source2$fileid","_this$source2$fileid$","includes","cropPreviews","url","URL","location","origin","searchParams","e","mimeIconUrl","_window$OC","_window$OC$MimeType","_window$OC$MimeType$g","mimeType","enabledActions","sort","a","b","enabledInlineActions","_action$inline","enabledMenuActions","openedMenu","get","uniqueId","charCodeAt","isFavorite","favorite","before","resetState","parentNode","display","clearImg","debounceIfNotCached","_this$$el$parentNode","_this$$el$parentNode$","debounceGetPreview","debounce","fetchAndApplyPreview","onRightClick","beforeDestroy","caches","cache","match","previewPromise","CancelablePromise","resolve","reject","onCancel","img","Image","fetchpriority","onload","onerror","src","cancel","success","showSuccess","execDefaultAction","openDetailsIfAvailable","detailsAction","onSelectionChange","_this$keyboardStore","newSelectedIndex","isAlreadySelected","start","min","end","max","filesToSelect","file","_file$fileid","_file$fileid$toString","isMoreThanOneSelected","translate","ref","_loading","onActionClick","opacity","column","_vm$currentView","summary","currentFolder","_this$currentView2","totalSize","_this$currentFolder","total","classForColumn","_column$summary","created","fileListEl","$resizeObserver","ResizeObserver","entries","target","contentRect","observe","disconnect","mixins","filesListWidthMixin","selectedNodes","areSomeNodesLoading","inlineActions","selectionIds","results","result","failedIds","mapState","sortingMode","_this$getConfig","sorting_mode","defaultSortKey","isAscSorting","_this$getConfig2","toggleSortBy","MenuDown","MenuUp","NcButton","filesSortingMixin","mode","sortAriaLabel","direction","slot","FilesListHeaderButton","FilesListHeaderActions","selectAllBind","isNoneSelected","isSomeSelected","isAllSelected","indeterminate","onToggleAll","RecycleScroller","FileEntry","FilesListHeader","FilesListFooter","summaryFile","count","translatePlural","summaryFolder","slots","querySelectorAll","setAttribute","getFileId","item","caption","_defineProperty","isValidNavigation","isUniqueNavigation","_views","message","legacy","remove","findIndex","splice","views","setActive","_currentView","getContents","icon","isSvg","isValidColumn","emptyView","parent","sticky","expanded","BreadCrumbs","FilesListVirtual","NcAppContent","promise","dirContents","_this$currentFolder2","customColumn","_children","reverse","orderBy","v","isEmptyDir","isRefreshing","toPreviousDir","newView","oldView","fetchContent","newDir","oldDir","_this$$refs","_this$$refs$filesList","$refs","filesListVirtual","scrollTop","_this$currentView3","_this$promise","folder","contents","_vm$currentView2","directives","rawName","expression","ChartPie","NcAppNavigationItem","NcProgressBar","loadingStorageStats","storageStats","storageStatsTitle","_this$storageStats","_this$storageStats2","_this$storageStats3","usedQuotaByte","used","quotaByte","quota","storageStatsTooltip","relative","beforeMount","setInterval","throttleUpdateStorageStats","debounceUpdateStorageStats","updateStorageStats","throttle","_response$data","el","Clipboard","NcAppSettingsDialog","NcAppSettingsSection","NcInputField","Setting","_window$OCA$Files$Set","_getCurrentUser","settings","Settings","webdavUrl","generateRemoteUrl","uid","webdavDocs","appPasswordUrl","webdavUrlCopied","setting","onClose","setConfig","select","navigator","clipboard","writeText","setTimeout","copyCloudId","Cog","NavigationQuota","NcAppNavigation","NcIconSvgWrapper","SettingsModal","Navigation","settingsOpened","currentViewId","_this$$route$params","params","parentViews","childViews","list","showView","onLegacyNavigationChanged","_window$OCA$Files$Sid","_window$OCA$Files$Sid2","newAppContent","classList","add","Util","History","parseUrlQuery","itemId","jQuery","trigger","Event","heading","headingEl","textContent","setPageHeading","$router","onToggleExpand","isExpanded","_this$viewConfigStore","generateToNavigation","openSettings","onSettingsClose","child","registerLegacyView","classes","OCP","Router","base","linkActiveClass","routes","alias","stringifyQuery","queryString","_window$OCP$Files","router","_router","goTo","goToRoute","assign","PiniaVuePlugin","pinia","createPinia","NavigationService","_settings","_name","_el","_open","_close","NavigationView","FilesListView","legacyViews","values","sublist","subview","processLegacyFilesViews","noRewrite","registration","serviceWorker","scope","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","r","getter","__esModule","d","definition","o","defineProperty","enumerable","g","globalThis","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","children","baseURI","self","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"files-main.js?v=3af3837e96b67c872e9d","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?8258","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?81db","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c414","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?6cbe","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?afd8","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?1f7b","webpack:///nextcloud/apps/files/src/templates.js","webpack:///nextcloud/apps/files/src/legacy/filelistSearch.js","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/services/FileAction.ts","webpack:///nextcloud/apps/files/src/actions/deleteAction.ts","webpack:///nextcloud/apps/files/src/actions/sidebarAction.ts","webpack:///nextcloud/apps/files/src/store/files.ts","webpack:///nextcloud/apps/files/src/store/paths.ts","webpack:///nextcloud/apps/files/src/store/selection.ts","webpack:///nextcloud/apps/files/src/store/viewConfig.ts","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?e906","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?e59f","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?d357","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue","webpack:///nextcloud/apps/files/src/utils/hashUtils.ts","webpack:///nextcloud/apps/files/src/store/actionsmenu.ts","webpack:///nextcloud/apps/files/src/store/userconfig.ts","webpack:///nextcloud/apps/files/src/components/CustomElementRender.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/CustomElementRender.vue","webpack://nextcloud/./apps/files/src/components/CustomElementRender.vue?5f5c","webpack://nextcloud/./apps/files/src/components/CustomElementRender.vue?4ee7","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?2c34","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?6bea","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?5641","webpack:///nextcloud/apps/files/src/components/FileEntry.vue","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/store/keyboard.ts","webpack:///nextcloud/apps/files/src/services/PreviewService.ts","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?0601","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?bfb5","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?da7c","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?14b9","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?80db","webpack:///nextcloud/apps/files/src/mixins/filesListWidth.ts","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListHeaderActions.vue?993d","webpack://nextcloud/./apps/files/src/components/FilesListHeaderActions.vue?9823","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue","webpack:///nextcloud/apps/files/src/mixins/filesSorting.ts","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?d900","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?5686","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?c7b4","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?349b","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?034b","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?3555","webpack:///nextcloud/apps/files/src/services/Navigation.ts","webpack:///nextcloud/apps/files/src/views/FilesList.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/views/FilesList.vue","webpack://nextcloud/./apps/files/src/views/FilesList.vue?b2cc","webpack://nextcloud/./apps/files/src/views/FilesList.vue?1e5b","webpack://nextcloud/./apps/files/src/views/Navigation.vue?8122","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?08cb","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?ff39","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2966","webpack://nextcloud/./apps/files/src/views/Settings.vue?84f7","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack://nextcloud/./apps/files/src/components/Setting.vue?8d57","webpack:///nextcloud/apps/files/src/views/Settings.vue","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Settings.vue?7e31","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack:///nextcloud/apps/files/src/views/Navigation.vue","webpack:///nextcloud/core/src/OCP/accessibility.js","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Navigation.vue?e9dc","webpack://nextcloud/./apps/files/src/views/Navigation.vue?74b9","webpack:///nextcloud/apps/files/src/legacy/navigationMapper.js","webpack:///nextcloud/apps/files/src/router/router.js","webpack:///nextcloud/apps/files/src/main.ts","webpack:///nextcloud/apps/files/src/services/RouterService.ts","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/services/ServiceWorker.js","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport const getRootPath = function() {\n\tif (getCurrentUser()) {\n\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`)\n\t} else {\n\t\treturn generateRemoteUrl('webdav').replace('/remote.php', '/public.php')\n\t}\n}\n\nexport const isPublic = function() {\n\treturn !getCurrentUser()\n}\n\nexport const getToken = function() {\n\treturn document.getElementById('sharingToken') && document.getElementById('sharingToken').value\n}\n\n/**\n * Return the current directory, fallback to root\n *\n * @return {string}\n */\nexport const getCurrentDirectory = function() {\n\tconst currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo\n\t\t|| { path: '/', name: '' }\n\n\t// Make sure we don't have double slashes\n\treturn `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\\/\\//gi, '/')\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst encodeFilePath = function(path) {\n\tconst pathSections = (path.startsWith('/') ? path : `/${path}`).split('/')\n\tlet relativePath = ''\n\tpathSections.forEach((section) => {\n\t\tif (section !== '') {\n\t\t\trelativePath += '/' + encodeURIComponent(section)\n\t\t}\n\t})\n\treturn relativePath\n}\n\n/**\n * Extract dir and name from file path\n *\n * @param {string} path the full path\n * @return {string[]} [dirPath, fileName]\n */\nconst extractFilePaths = function(path) {\n\tconst pathSections = path.split('/')\n\tconst fileName = pathSections[pathSections.length - 1]\n\tconst dirPath = pathSections.slice(0, pathSections.length - 1).join('/')\n\treturn [dirPath, fileName]\n}\n\nexport { encodeFilePath, extractFilePaths }\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li class=\"template-picker__item\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\ttype=\"radio\"\n\t\t\tclass=\"radio\"\n\t\t\tname=\"template-picker\"\n\t\t\t@change=\"onCheck\">\n\n\t\t<label :for=\"id\" class=\"template-picker__label\">\n\t\t\t<div class=\"template-picker__preview\"\n\t\t\t\t:class=\"failedPreview ? 'template-picker__preview--failed' : ''\">\n\t\t\t\t<img class=\"template-picker__image\"\n\t\t\t\t\t:src=\"realPreviewUrl\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t@error=\"onFailure\">\n\t\t\t</div>\n\n\t\t\t<span class=\"template-picker__title\">\n\t\t\t\t{{ nameWithoutExt }}\n\t\t\t</span>\n\t\t</label>\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { encodeFilePath } from '../utils/fileUtils.js'\nimport { getToken, isPublic } from '../utils/davUtils.js'\n\n// preview width generation\nconst previewWidth = 256\n\nexport default {\n\tname: 'TemplatePreview',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpreviewUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\thasPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tratio: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailedPreview: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.basename.indexOf('.') > -1 ? this.basename.split('.').slice(0, -1).join('.') : this.basename\n\t\t},\n\n\t\tid() {\n\t\t\treturn `template-picker-${this.fileid}`\n\t\t},\n\n\t\trealPreviewUrl() {\n\t\t\t// If original preview failed, fallback to mime icon\n\t\t\tif (this.failedPreview && this.mimeIcon) {\n\t\t\t\treturn this.mimeIcon\n\t\t\t}\n\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn this.previewUrl\n\t\t\t}\n\t\t\t// TODO: find a nicer standard way of doing this?\n\t\t\tif (isPublic()) {\n\t\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${getToken()}?fileId=${this.fileid}&file=${encodeFilePath(this.filename)}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.fileid}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t},\n\n\t\tmimeIcon() {\n\t\t\treturn OC.MimeType.getIconUrl(this.mime)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonCheck() {\n\t\t\tthis.$emit('check', this.fileid)\n\t\t},\n\t\tonFailure() {\n\t\t\tthis.failedPreview = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePreview.vue?vue&type=template&id=6c072a31&scoped=true&\"\nimport script from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6c072a31\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"template-picker__item\"},[_c('input',{staticClass:\"radio\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"template-picker\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onCheck}}),_vm._v(\" \"),_c('label',{staticClass:\"template-picker__label\",attrs:{\"for\":_vm.id}},[_c('div',{staticClass:\"template-picker__preview\",class:_vm.failedPreview ? 'template-picker__preview--failed' : ''},[_c('img',{staticClass:\"template-picker__image\",attrs:{\"src\":_vm.realPreviewUrl,\"alt\":\"\",\"draggable\":\"false\"},on:{\"error\":_vm.onFailure}})]),_vm._v(\" \"),_c('span',{staticClass:\"template-picker__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.nameWithoutExt)+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<NcModal v-if=\"opened\"\n\t\t:clear-view-delay=\"-1\"\n\t\tclass=\"templates-picker\"\n\t\tsize=\"normal\"\n\t\t@close=\"close\">\n\t\t<form class=\"templates-picker__form\"\n\t\t\t:style=\"style\"\n\t\t\t@submit.prevent.stop=\"onSubmit\">\n\t\t\t<h2>{{ t('files', 'Pick a template for {name}', { name: nameWithoutExt }) }}</h2>\n\n\t\t\t<!-- Templates list -->\n\t\t\t<ul class=\"templates-picker__list\">\n\t\t\t\t<TemplatePreview v-bind=\"emptyTemplate\"\n\t\t\t\t\t:checked=\"checked === emptyTemplate.fileid\"\n\t\t\t\t\t@check=\"onCheck\" />\n\n\t\t\t\t<TemplatePreview v-for=\"template in provider.templates\"\n\t\t\t\t\t:key=\"template.fileid\"\n\t\t\t\t\tv-bind=\"template\"\n\t\t\t\t\t:checked=\"checked === template.fileid\"\n\t\t\t\t\t:ratio=\"provider.ratio\"\n\t\t\t\t\t@check=\"onCheck\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Cancel and submit -->\n\t\t\t<div class=\"templates-picker__buttons\">\n\t\t\t\t<button @click=\"close\">\n\t\t\t\t\t{{ t('files', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<input type=\"submit\"\n\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t:value=\"t('files', 'Create')\"\n\t\t\t\t\t:aria-label=\"t('files', 'Create a new file with the selected template')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<NcEmptyContent v-if=\"loading\" class=\"templates-picker__loading\" icon=\"icon-loading\">\n\t\t\t{{ t('files', 'Creating file') }}\n\t\t</NcEmptyContent>\n\t</NcModal>\n</template>\n\n<script>\nimport { normalize } from 'path'\nimport { showError } from '@nextcloud/dialogs'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal.js'\n\nimport { getCurrentDirectory } from '../utils/davUtils.js'\nimport { createFromTemplate, getTemplates } from '../services/Templates.js'\nimport TemplatePreview from '../components/TemplatePreview.vue'\n\nconst border = 2\nconst margin = 8\nconst width = margin * 20\n\nexport default {\n\tname: 'TemplatePicker',\n\n\tcomponents: {\n\t\tNcEmptyContent,\n\t\tNcModal,\n\t\tTemplatePreview,\n\t},\n\n\tprops: {\n\t\tlogger: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Check empty template by default\n\t\t\tchecked: -1,\n\t\t\tloading: false,\n\t\t\tname: null,\n\t\t\topened: false,\n\t\t\tprovider: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.name.indexOf('.') > -1\n\t\t\t\t? this.name.split('.').slice(0, -1).join('.')\n\t\t\t\t: this.name\n\t\t},\n\n\t\temptyTemplate() {\n\t\t\treturn {\n\t\t\t\tbasename: t('files', 'Blank'),\n\t\t\t\tfileid: -1,\n\t\t\t\tfilename: this.t('files', 'Blank'),\n\t\t\t\thasPreview: false,\n\t\t\t\tmime: this.provider?.mimetypes[0] || this.provider?.mimetypes,\n\t\t\t}\n\t\t},\n\n\t\tselectedTemplate() {\n\t\t\treturn this.provider.templates.find(template => template.fileid === this.checked)\n\t\t},\n\n\t\t/**\n\t\t * Style css vars bin,d\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--margin': margin + 'px',\n\t\t\t\t'--width': width + 'px',\n\t\t\t\t'--border': border + 'px',\n\t\t\t\t'--fullwidth': width + 2 * margin + 2 * border + 'px',\n\t\t\t\t'--height': this.provider.ratio ? Math.round(width / this.provider.ratio) + 'px' : null,\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the picker\n\t\t *\n\t\t * @param {string} name the file name to create\n\t\t * @param {object} provider the template provider picked\n\t\t */\n\t\tasync open(name, provider) {\n\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.name = name\n\t\t\tthis.provider = provider\n\n\t\t\tconst templates = await getTemplates()\n\t\t\tconst fetchedProvider = templates.find((fetchedProvider) => fetchedProvider.app === provider.app && fetchedProvider.label === provider.label)\n\t\t\tif (fetchedProvider === null) {\n\t\t\t\tthrow new Error('Failed to match provider in results')\n\t\t\t}\n\t\t\tthis.provider = fetchedProvider\n\n\t\t\t// If there is no templates available, just create an empty file\n\t\t\tif (fetchedProvider.templates.length === 0) {\n\t\t\t\tthis.onSubmit()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Else, open the picker\n\t\t\tthis.opened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the picker and reset variables\n\t\t */\n\t\tclose() {\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.loading = false\n\t\t\tthis.name = null\n\t\t\tthis.opened = false\n\t\t\tthis.provider = null\n\t\t},\n\n\t\t/**\n\t\t * Manages the radio template picker change\n\t\t *\n\t\t * @param {number} fileid the selected template file id\n\t\t */\n\t\tonCheck(fileid) {\n\t\t\tthis.checked = fileid\n\t\t},\n\n\t\tasync onSubmit() {\n\t\t\tthis.loading = true\n\t\t\tconst currentDirectory = getCurrentDirectory()\n\t\t\tconst fileList = OCA?.Files?.App?.currentFileList\n\n\t\t\t// If the file doesn't have an extension, add the default one\n\t\t\tif (this.nameWithoutExt === this.name) {\n\t\t\t\tthis.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })\n\t\t\t\tthis.name = this.name + this.provider?.extension\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await createFromTemplate(\n\t\t\t\t\tnormalize(`${currentDirectory}/${this.name}`),\n\t\t\t\t\tthis.selectedTemplate?.filename,\n\t\t\t\t\tthis.selectedTemplate?.templateType,\n\t\t\t\t)\n\t\t\t\tthis.logger.debug('Created new file', fileInfo)\n\n\t\t\t\t// Fetch FileInfo and model\n\t\t\t\tconst data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)\n\t\t\t\tconst model = new OCA.Files.FileInfoModel(data, {\n\t\t\t\t\tfilesClient: fileList?.filesClient,\n\t\t\t\t})\n\n\t\t\t\t// Run default action\n\t\t\t\tconst fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)\n\t\t\t\tif (fileAction) {\n\t\t\t\t\tfileAction.action(fileInfo.basename, {\n\t\t\t\t\t\t$file: fileList?.findFileEl(this.name),\n\t\t\t\t\t\tdir: currentDirectory,\n\t\t\t\t\t\tfileList,\n\t\t\t\t\t\tfileActions: fileList?.fileActions,\n\t\t\t\t\t\tfileInfoModel: model,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.close()\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Error while creating the new file from template')\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(this.t('files', 'Unable to create new file from template'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nexport const getTemplates = async function() {\n\tconst response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new file from a specified template\n *\n * @param {string} filePath The new file destination path\n * @param {string} templatePath The template source path\n * @param {string} templateType The template type e.g 'user'\n */\nexport const createFromTemplate = async function(filePath, templatePath, templateType) {\n\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {\n\t\tfilePath,\n\t\ttemplatePath,\n\t\ttemplateType,\n\t})\n\treturn response.data.ocs.data\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePicker.vue?vue&type=template&id=715b4161&scoped=true&\"\nimport script from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"715b4161\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.opened)?_c('NcModal',{staticClass:\"templates-picker\",attrs:{\"clear-view-delay\":-1,\"size\":\"normal\"},on:{\"close\":_vm.close}},[_c('form',{staticClass:\"templates-picker__form\",style:(_vm.style),on:{\"submit\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onSubmit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('files', 'Pick a template for {name}', { name: _vm.nameWithoutExt })))]),_vm._v(\" \"),_c('ul',{staticClass:\"templates-picker__list\"},[_c('TemplatePreview',_vm._b({attrs:{\"checked\":_vm.checked === _vm.emptyTemplate.fileid},on:{\"check\":_vm.onCheck}},'TemplatePreview',_vm.emptyTemplate,false)),_vm._v(\" \"),_vm._l((_vm.provider.templates),function(template){return _c('TemplatePreview',_vm._b({key:template.fileid,attrs:{\"checked\":_vm.checked === template.fileid,\"ratio\":_vm.provider.ratio},on:{\"check\":_vm.onCheck}},'TemplatePreview',template,false))})],2),_vm._v(\" \"),_c('div',{staticClass:\"templates-picker__buttons\"},[_c('button',{on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"aria-label\":_vm.t('files', 'Create a new file with the selected template')},domProps:{\"value\":_vm.t('files', 'Create')}})])]),_vm._v(\" \"),(_vm.loading)?_c('NcEmptyContent',{staticClass:\"templates-picker__loading\",attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files', 'Creating file'))+\"\\n\\t\")]):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentDirectory } from './utils/davUtils.js'\nimport axios from '@nextcloud/axios'\nimport Vue from 'vue'\n\nimport TemplatePickerView from './views/TemplatePicker.vue'\nimport { showError } from '@nextcloud/dialogs'\n\n// Set up logger\nconst logger = getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\n// Create document root\nconst TemplatePickerRoot = document.createElement('div')\nTemplatePickerRoot.id = 'template-picker'\ndocument.body.appendChild(TemplatePickerRoot)\n\n// Retrieve and init templates\nlet templates = loadState('files', 'templates', [])\nlet templatesPath = loadState('files', 'templates_path', false)\nlogger.debug('Templates providers', templates)\nlogger.debug('Templates folder', { templatesPath })\n\n// Init vue app\nconst View = Vue.extend(TemplatePickerView)\nconst TemplatePicker = new View({\n\tname: 'TemplatePicker',\n\tpropsData: {\n\t\tlogger,\n\t},\n})\nTemplatePicker.$mount('#template-picker')\n\n// Init template engine after load to make sure it's the last injected entry\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (!templatesPath) {\n\t\tlogger.debug('Templates folder not initialized')\n\t\tconst initTemplatesPlugin = {\n\t\t\tattach(menu) {\n\t\t\t\t// register the new menu entry\n\t\t\t\tmenu.addMenuEntry({\n\t\t\t\t\tid: 'template-init',\n\t\t\t\t\tdisplayName: t('files', 'Set up templates folder'),\n\t\t\t\t\ttemplateName: t('files', 'Templates'),\n\t\t\t\t\ticonClass: 'icon-template-add',\n\t\t\t\t\tfileType: 'file',\n\t\t\t\t\tactionLabel: t('files', 'Create new templates folder'),\n\t\t\t\t\tactionHandler(name) {\n\t\t\t\t\t\tinitTemplatesFolder(name)\n\t\t\t\t\t\tmenu.removeMenuEntry('template-init')\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t\tOC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)\n\t}\n})\n\n// Init template files menu\ntemplates.forEach((provider, index) => {\n\tconst newTemplatePlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: `template-new-${provider.app}-${index}`,\n\t\t\t\tdisplayName: provider.label,\n\t\t\t\ttemplateName: provider.label + provider.extension,\n\t\t\t\ticonClass: provider.iconClass || 'icon-file',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionLabel: provider.actionLabel,\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tTemplatePicker.open(name, provider)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)\n})\n\n/**\n * Init the template directory\n *\n * @param {string} name the templates folder name\n */\nconst initTemplatesFolder = async function(name) {\n\tconst templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')\n\ttry {\n\t\tlogger.debug('Initializing the templates directory', { templatePath })\n\t\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {\n\t\t\ttemplatePath,\n\t\t\tcopySystemTemplates: true,\n\t\t})\n\n\t\t// Go to template directory\n\t\tOCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)\n\n\t\ttemplates = response.data.ocs.data.templates\n\t\ttemplatesPath = response.data.ocs.data.template_path\n\t} catch (error) {\n\t\tlogger.error('Unable to initialize the templates directory')\n\t\tshowError(t('files', 'Unable to initialize the templates directory'))\n\t}\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\n(function() {\n\n\tconst FilesPlugin = {\n\t\tattach(fileList) {\n\t\t\tsubscribe('nextcloud:unified-search.search', ({ query }) => {\n\t\t\t\tfileList.setFilter(query)\n\t\t\t})\n\t\t\tsubscribe('nextcloud:unified-search.reset', () => {\n\t\t\t\tthis.query = null\n\t\t\t\tfileList.setFilter('')\n\t\t\t})\n\n\t\t},\n\t}\n\n\twindow.OC.Plugins.register('OCA.Files.FileList', FilesPlugin)\n\n})()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport logger from '../logger';\nexport class FileAction {\n _action;\n constructor(action) {\n this.validateAction(action);\n this._action = action;\n }\n get id() {\n return this._action.id;\n }\n get displayName() {\n return this._action.displayName;\n }\n get iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\n }\n get execBatch() {\n return this._action.execBatch;\n }\n get order() {\n return this._action.order;\n }\n get default() {\n return this._action.default;\n }\n get inline() {\n return this._action.inline;\n }\n get renderInline() {\n return this._action.renderInline;\n }\n validateAction(action) {\n if (!action.id || typeof action.id !== 'string') {\n throw new Error('Invalid id');\n }\n if (!action.displayName || typeof action.displayName !== 'function') {\n throw new Error('Invalid displayName function');\n }\n if (!action.iconSvgInline || typeof action.iconSvgInline !== 'function') {\n throw new Error('Invalid iconSvgInline function');\n }\n if (!action.exec || typeof action.exec !== 'function') {\n throw new Error('Invalid exec function');\n }\n // Optional properties --------------------------------------------\n if ('enabled' in action && typeof action.enabled !== 'function') {\n throw new Error('Invalid enabled function');\n }\n if ('execBatch' in action && typeof action.execBatch !== 'function') {\n throw new Error('Invalid execBatch function');\n }\n if ('order' in action && typeof action.order !== 'number') {\n throw new Error('Invalid order');\n }\n if ('default' in action && typeof action.default !== 'boolean') {\n throw new Error('Invalid default');\n }\n if ('inline' in action && typeof action.inline !== 'function') {\n throw new Error('Invalid inline function');\n }\n if ('renderInline' in action && typeof action.renderInline !== 'function') {\n throw new Error('Invalid renderInline function');\n }\n }\n}\nexport const registerFileAction = function (action) {\n if (typeof window._nc_fileactions === 'undefined') {\n window._nc_fileactions = [];\n logger.debug('FileActions initialized');\n }\n // Check duplicates\n if (window._nc_fileactions.find(search => search.id === action.id)) {\n logger.error(`FileAction ${action.id} already registered`, { action });\n return;\n }\n window._nc_fileactions.push(action);\n};\nexport const getFileActions = function () {\n return window._nc_fileactions || [];\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { emit } from '@nextcloud/event-bus';\nimport { Permission, Node } from '@nextcloud/files';\nimport { translate as t } from '@nextcloud/l10n';\nimport axios from '@nextcloud/axios';\nimport TrashCan from '@mdi/svg/svg/trash-can.svg?raw';\nimport { registerFileAction, FileAction } from '../services/FileAction.ts';\nimport logger from '../logger.js';\nregisterFileAction(new FileAction({\n id: 'delete',\n displayName(nodes, view) {\n return view.id === 'trashbin'\n ? t('files_trashbin', 'Delete permanently')\n : t('files', 'Delete');\n },\n iconSvgInline: () => TrashCan,\n enabled(nodes) {\n return nodes.length > 0 && nodes\n .map(node => node.permissions)\n .every(permission => (permission & Permission.DELETE) !== 0);\n },\n async exec(node) {\n try {\n await axios.delete(node.source);\n // Let's delete even if it's moved to the trashbin\n // since it has been removed from the current view\n // and changing the view will trigger a reload anyway.\n emit('files:node:deleted', node);\n return true;\n }\n catch (error) {\n logger.error('Error while deleting a file', { error, source: node.source, node });\n return false;\n }\n },\n async execBatch(nodes, view, dir) {\n return Promise.all(nodes.map(node => this.exec(node, view, dir)));\n },\n order: 100,\n}));\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { translate as t } from '@nextcloud/l10n';\nimport InformationSvg from '@mdi/svg/svg/information-variant.svg?raw';\nimport { registerFileAction, FileAction } from '../services/FileAction.ts';\nimport logger from '../logger.js';\nexport const ACTION_DETAILS = 'details';\nregisterFileAction(new FileAction({\n id: ACTION_DETAILS,\n displayName: () => t('files', 'Details'),\n iconSvgInline: () => InformationSvg,\n // Sidebar currently supports user folder only, /files/USER\n enabled: (files) => !!window?.OCA?.Files?.Sidebar\n && files.some(node => node.root?.startsWith('/files/')),\n async exec(node) {\n try {\n // TODO: migrate Sidebar to use a Node instead\n window?.OCA?.Files?.Sidebar?.open?.(node.path);\n return null;\n }\n catch (error) {\n logger.error('Error while opening sidebar', { error });\n return false;\n }\n },\n default: true,\n order: -50,\n}));\n","import { defineStore } from 'pinia';\nimport { subscribe } from '@nextcloud/event-bus';\nimport logger from '../logger';\nimport Vue from 'vue';\nexport const useFilesStore = function () {\n const store = defineStore('files', {\n state: () => ({\n files: {},\n roots: {},\n }),\n getters: {\n /**\n * Get a file or folder by id\n */\n getNode: (state) => (id) => state.files[id],\n /**\n * Get a list of files or folders by their IDs\n * Does not return undefined values\n */\n getNodes: (state) => (ids) => ids\n .map(id => state.files[id])\n .filter(Boolean),\n /**\n * Get a file or folder by id\n */\n getRoot: (state) => (service) => state.roots[service],\n },\n actions: {\n updateNodes(nodes) {\n // Update the store all at once\n const files = nodes.reduce((acc, node) => {\n if (!node.fileid) {\n logger.warn('Trying to update/set a node without fileid', node);\n return acc;\n }\n acc[node.fileid] = node;\n return acc;\n }, {});\n Vue.set(this, 'files', { ...this.files, ...files });\n },\n deleteNodes(nodes) {\n nodes.forEach(node => {\n if (node.fileid) {\n Vue.delete(this.files, node.fileid);\n }\n });\n },\n setRoot({ service, root }) {\n Vue.set(this.roots, service, root);\n },\n onDeletedNode(node) {\n this.deleteNodes([node]);\n },\n }\n });\n const fileStore = store(...arguments);\n // Make sure we only register the listeners once\n if (!fileStore._initialized) {\n // subscribe('files:node:created', fileStore.onCreatedNode)\n subscribe('files:node:deleted', fileStore.onDeletedNode);\n // subscribe('files:node:moved', fileStore.onMovedNode)\n // subscribe('files:node:updated', fileStore.onUpdatedNode)\n fileStore._initialized = true;\n }\n return fileStore;\n};\n","import { defineStore } from 'pinia';\nimport { subscribe } from '@nextcloud/event-bus';\nimport Vue from 'vue';\nexport const usePathsStore = function () {\n const store = defineStore('paths', {\n state: () => ({\n paths: {}\n }),\n getters: {\n getPath: (state) => {\n return (service, path) => {\n if (!state.paths[service]) {\n return undefined;\n }\n return state.paths[service][path];\n };\n },\n },\n actions: {\n addPath(payload) {\n // If it doesn't exists, init the service state\n if (!this.paths[payload.service]) {\n Vue.set(this.paths, payload.service, {});\n }\n // Now we can set the provided path\n Vue.set(this.paths[payload.service], payload.path, payload.fileid);\n },\n }\n });\n const pathsStore = store(...arguments);\n // Make sure we only register the listeners once\n if (!pathsStore._initialized) {\n // TODO: watch folders to update paths?\n // subscribe('files:node:created', pathsStore.onCreatedNode)\n // subscribe('files:node:deleted', pathsStore.onDeletedNode)\n // subscribe('files:node:moved', pathsStore.onMovedNode)\n pathsStore._initialized = true;\n }\n return pathsStore;\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nimport Vue from 'vue';\nimport { FileId, SelectionStore } from '../types';\nexport const useSelectionStore = defineStore('selection', {\n state: () => ({\n selected: [],\n lastSelection: [],\n lastSelectedIndex: null,\n }),\n actions: {\n /**\n * Set the selection of fileIds\n */\n set(selection = []) {\n Vue.set(this, 'selected', selection);\n },\n /**\n * Set the last selected index\n */\n setLastIndex(lastSelectedIndex = null) {\n // Update the last selection if we provided a new selection starting point\n Vue.set(this, 'lastSelection', lastSelectedIndex ? this.selected : []);\n Vue.set(this, 'lastSelectedIndex', lastSelectedIndex);\n },\n /**\n * Reset the selection\n */\n reset() {\n Vue.set(this, 'selected', []);\n Vue.set(this, 'lastSelection', []);\n Vue.set(this, 'lastSelectedIndex', null);\n }\n }\n});\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nimport { emit, subscribe } from '@nextcloud/event-bus';\nimport { generateUrl } from '@nextcloud/router';\nimport { loadState } from '@nextcloud/initial-state';\nimport axios from '@nextcloud/axios';\nimport Vue from 'vue';\nconst viewConfig = loadState('files', 'viewConfigs', {});\nexport const useViewConfigStore = function () {\n const store = defineStore('viewconfig', {\n state: () => ({\n viewConfig,\n }),\n getters: {\n getConfig: (state) => (view) => state.viewConfig[view] || {},\n },\n actions: {\n /**\n * Update the view config local store\n */\n onUpdate(view, key, value) {\n if (!this.viewConfig[view]) {\n Vue.set(this.viewConfig, view, {});\n }\n Vue.set(this.viewConfig[view], key, value);\n },\n /**\n * Update the view config local store AND on server side\n */\n async update(view, key, value) {\n axios.put(generateUrl(`/apps/files/api/v1/views/${view}/${key}`), {\n value,\n });\n emit('files:viewconfig:updated', { view, key, value });\n },\n /**\n * Set the sorting key AND sort by ASC\n * The key param must be a valid key of a File object\n * If not found, will be searched within the File attributes\n */\n setSortingBy(key = 'basename', view = 'files') {\n // Save new config\n this.update(view, 'sorting_mode', key);\n this.update(view, 'sorting_direction', 'asc');\n },\n /**\n * Toggle the sorting direction\n */\n toggleSortingDirection(view = 'files') {\n const config = this.getConfig(view) || { 'sorting_direction': 'asc' };\n const newDirection = config.sorting_direction === 'asc' ? 'desc' : 'asc';\n // Save new config\n this.update(view, 'sorting_direction', newDirection);\n }\n }\n });\n const viewConfigStore = store(...arguments);\n // Make sure we only register the listeners once\n if (!viewConfigStore._initialized) {\n subscribe('files:viewconfig:updated', function ({ view, key, value }) {\n viewConfigStore.onUpdate(view, key, value);\n });\n viewConfigStore._initialized = true;\n }\n return viewConfigStore;\n};\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcBreadcrumbs',{attrs:{\"data-cy-files-content-breadcrumbs\":\"\"}},_vm._l((_vm.sections),function(section,index){return _c('NcBreadcrumb',_vm._b({key:section.dir,attrs:{\"aria-label\":_vm.ariaLabel(section),\"title\":_vm.ariaLabel(section)},nativeOn:{\"click\":function($event){return _vm.onClick(section.to)}},scopedSlots:_vm._u([(index === 0)?{key:\"icon\",fn:function(){return [_c('Home',{attrs:{\"size\":20}})]},proxy:true}:null],null,true)},'NcBreadcrumb',section,false))}),1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<NcBreadcrumbs data-cy-files-content-breadcrumbs>\n\t\t<!-- Current path sections -->\n\t\t<NcBreadcrumb v-for=\"(section, index) in sections\"\n\t\t\t:key=\"section.dir\"\n\t\t\t:aria-label=\"ariaLabel(section)\"\n\t\t\t:title=\"ariaLabel(section)\"\n\t\t\tv-bind=\"section\"\n\t\t\t@click.native=\"onClick(section.to)\">\n\t\t\t<template v-if=\"index === 0\" #icon>\n\t\t\t\t<Home :size=\"20\" />\n\t\t\t</template>\n\t\t</NcBreadcrumb>\n\t</NcBreadcrumbs>\n</template>\n\n<script>\nimport { basename } from 'path'\nimport Home from 'vue-material-design-icons/Home.vue'\nimport NcBreadcrumb from '@nextcloud/vue/dist/Components/NcBreadcrumb.js'\nimport NcBreadcrumbs from '@nextcloud/vue/dist/Components/NcBreadcrumbs.js'\nimport Vue from 'vue'\n\nimport { useFilesStore } from '../store/files.ts'\nimport { usePathsStore } from '../store/paths.ts'\n\nexport default Vue.extend({\n\tname: 'BreadCrumbs',\n\n\tcomponents: {\n\t\tHome,\n\t\tNcBreadcrumbs,\n\t\tNcBreadcrumb,\n\t},\n\n\tprops: {\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\tdefault: '/',\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst filesStore = useFilesStore()\n\t\tconst pathsStore = usePathsStore()\n\t\treturn {\n\t\t\tfilesStore,\n\t\t\tpathsStore,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\n\t\tdirs() {\n\t\t\tconst cumulativePath = (acc) => (value) => (acc += `${value}/`)\n\t\t\t// Generate a cumulative path for each path segment: ['/', '/foo', '/foo/bar', ...] etc\n\t\t\tconst paths = this.path.split('/').filter(Boolean).map(cumulativePath('/'))\n\t\t\t// Strip away trailing slash\n\t\t\treturn ['/', ...paths.map(path => path.replace(/^(.+)\\/$/, '$1'))]\n\t\t},\n\n\t\tsections() {\n\t\t\treturn this.dirs.map(dir => {\n\t\t\t\tconst to = { ...this.$route, query: { dir } }\n\t\t\t\treturn {\n\t\t\t\t\tdir,\n\t\t\t\t\texact: true,\n\t\t\t\t\tname: this.getDirDisplayName(dir),\n\t\t\t\t\tto,\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n\n\tmethods: {\n\t\tgetNodeFromId(id) {\n\t\t\treturn this.filesStore.getNode(id)\n\t\t},\n\t\tgetFileIdFromPath(path) {\n\t\t\treturn this.pathsStore.getPath(this.currentView?.id, path)\n\t\t},\n\t\tgetDirDisplayName(path) {\n\t\t\tif (path === '/') {\n\t\t\t\treturn t('files', 'Home')\n\t\t\t}\n\n\t\t\tconst fileId = this.getFileIdFromPath(path)\n\t\t\tconst node = this.getNodeFromId(fileId)\n\t\t\treturn node?.attributes?.displayName || basename(path)\n\t\t},\n\n\t\tonClick(to) {\n\t\t\tif (to?.query?.dir === this.$route.query.dir) {\n\t\t\t\tthis.$emit('reload')\n\t\t\t}\n\t\t},\n\n\t\tariaLabel(section) {\n\t\t\tif (section?.to?.query?.dir === this.$route.query.dir) {\n\t\t\t\treturn t('files', 'Reload current directory')\n\t\t\t}\n\t\t\treturn t('files', 'Go to the \"{dir}\" directory', section)\n\t\t},\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.breadcrumb {\n\t// Take as much space as possible\n\tflex: 1 1 100% !important;\n\twidth: 100%;\n\n\t::v-deep a {\n\t\tcursor: pointer !important;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./BreadCrumbs.vue?vue&type=template&id=68b3b20b&scoped=true&\"\nimport script from \"./BreadCrumbs.vue?vue&type=script&lang=js&\"\nexport * from \"./BreadCrumbs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"68b3b20b\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('RecycleScroller',{ref:\"recycleScroller\",staticClass:\"files-list\",attrs:{\"key-field\":\"source\",\"items\":_vm.nodes,\"item-size\":55,\"table-mode\":true,\"item-class\":\"files-list__row\",\"item-tag\":\"tr\",\"list-class\":\"files-list__body\",\"list-tag\":\"tbody\",\"role\":\"table\"},scopedSlots:_vm._u([{key:\"default\",fn:function({ item, active, index }){return [_c('FileEntry',{attrs:{\"active\":active,\"index\":index,\"is-size-available\":_vm.isSizeAvailable,\"files-list-width\":_vm.filesListWidth,\"nodes\":_vm.nodes,\"source\":item}})]}},{key:\"before\",fn:function(){return [_c('caption',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.currentView.caption || '')+\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list.'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('FilesListHeader',{attrs:{\"files-list-width\":_vm.filesListWidth,\"is-size-available\":_vm.isSizeAvailable,\"nodes\":_vm.nodes}})]},proxy:true},{key:\"after\",fn:function(){return [_c('FilesListFooter',{attrs:{\"files-list-width\":_vm.filesListWidth,\"is-size-available\":_vm.isSizeAvailable,\"nodes\":_vm.nodes,\"summary\":_vm.summary}})]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nexport const hashCode = function (str) {\n return str.split('').reduce(function (a, b) {\n a = ((a << 5) - a) + b.charCodeAt(0);\n return a & a;\n }, 0);\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nexport const useActionsMenuStore = defineStore('actionsmenu', {\n state: () => ({\n opened: null,\n }),\n});\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { loadState } from '@nextcloud/initial-state';\nimport { generateUrl } from '@nextcloud/router';\nimport { defineStore } from 'pinia';\nimport Vue from 'vue';\nimport axios from '@nextcloud/axios';\nimport { emit, subscribe } from '@nextcloud/event-bus';\nconst userConfig = loadState('files', 'config', {\n show_hidden: false,\n crop_image_previews: true,\n});\nexport const useUserConfigStore = function () {\n const store = defineStore('userconfig', {\n state: () => ({\n userConfig,\n }),\n actions: {\n /**\n * Update the user config local store\n */\n onUpdate(key, value) {\n Vue.set(this.userConfig, key, value);\n },\n /**\n * Update the user config local store AND on server side\n */\n async update(key, value) {\n await axios.put(generateUrl('/apps/files/api/v1/config/' + key), {\n value,\n });\n emit('files:config:updated', { key, value });\n }\n }\n });\n const userConfigStore = store(...arguments);\n // Make sure we only register the listeners once\n if (!userConfigStore._initialized) {\n subscribe('files:config:updated', function ({ key, value }) {\n userConfigStore.onUpdate(key, value);\n });\n userConfigStore._initialized = true;\n }\n return userConfigStore;\n};\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomElementRender.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomElementRender.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<span />\n</template>\n\n<script>\n/**\n * This component is used to render custom\n * elements provided by an API. Vue doesn't allow\n * to directly render an HTMLElement, so we can do\n * this magic here.\n */\nexport default {\n\tname: 'CustomElementRender',\n\tprops: {\n\t\tsource: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tcurrentView: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\trender: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\telement() {\n\t\t\treturn this.render(this.source, this.currentView)\n\t\t},\n\t},\n\twatch: {\n\t\telement() {\n\t\t\tthis.$el.replaceWith(this.element)\n\t\t\tthis.$el = this.element\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.replaceWith(this.element)\n\t\tthis.$el = this.element\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./CustomElementRender.vue?vue&type=template&id=a261c93e&\"\nimport script from \"./CustomElementRender.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomElementRender.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"custom-svg-icon\"})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<span class=\"custom-svg-icon\" />\n</template>\n\n<script>\n// eslint-disable-next-line import/named\nimport { sanitize } from 'dompurify'\n\nexport default {\n\tname: 'CustomSvgIconRender',\n\tprops: {\n\t\tsvg: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\twatch: {\n\t\tsvg() {\n\t\t\tthis.$el.innerHTML = sanitize(this.svg)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.innerHTML = sanitize(this.svg)\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.custom-svg-icon {\n\tdisplay: flex;\n\talign-items: center;\n\talign-self: center;\n\tjustify-content: center;\n\tjustify-self: center;\n\twidth: 44px;\n\theight: 44px;\n\topacity: 1;\n\n\t::v-deep svg {\n\t\t// mdi icons have a size of 24px\n\t\t// 22px results in roughly 16px inner size\n\t\theight: 22px;\n\t\twidth: 22px;\n\t\tfill: currentColor;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CustomSvgIconRender.vue?vue&type=template&id=93e9b2f4&scoped=true&\"\nimport script from \"./CustomSvgIconRender.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomSvgIconRender.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"93e9b2f4\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('Fragment',[_c('td',{staticClass:\"files-list__row-checkbox\"},[(_vm.active)?_c('NcCheckboxRadioSwitch',{attrs:{\"aria-label\":_vm.t('files', 'Select the row for {displayName}', { displayName: _vm.displayName }),\"checked\":_vm.selectedFiles,\"value\":_vm.fileid,\"name\":\"selectedFiles\"},on:{\"update:checked\":_vm.onSelectionChange}}):_vm._e()],1),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-name\"},[_c('a',_vm._b({ref:\"name\",on:{\"click\":_vm.execDefaultAction}},'a',_vm.linkTo,false),[_c('span',{staticClass:\"files-list__row-icon\"},[(_vm.source.type === 'folder')?_c('FolderIcon'):(_vm.previewUrl && !_vm.backgroundFailed)?_c('span',{ref:\"previewImg\",staticClass:\"files-list__row-icon-preview\",style:({ backgroundImage: _vm.backgroundImage })}):(_vm.mimeIconUrl)?_c('span',{staticClass:\"files-list__row-icon-preview files-list__row-icon-preview--mime\",style:({ backgroundImage: _vm.mimeIconUrl })}):_c('FileIcon'),_vm._v(\" \"),(_vm.isFavorite)?_c('span',{staticClass:\"files-list__row-icon-favorite\",attrs:{\"aria-label\":_vm.t('files', 'Favorite')}},[_c('StarIcon',{attrs:{\"aria-hidden\":\"true\",\"size\":20}})],1):_vm._e()],1),_vm._v(\" \"),_c('span',{staticClass:\"files-list__row-name-text\"},[_vm._v(_vm._s(_vm.displayName))])])]),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-actions\",class:`files-list__row-actions-${_vm.uniqueId}`},[(_vm.active)?_c('NcActions',{ref:\"actionsMenu\",attrs:{\"boundaries-element\":_vm.boundariesElement,\"container\":_vm.boundariesElement,\"disabled\":_vm.source._loading,\"force-title\":true,\"force-menu\":true,\"inline\":_vm.enabledInlineActions.length,\"open\":_vm.openedMenu},on:{\"update:open\":function($event){_vm.openedMenu=$event}}},_vm._l((_vm.enabledMenuActions),function(action){return _c('NcActionButton',{key:action.id,class:'files-list__row-action-' + action.id,on:{\"click\":function($event){return _vm.onActionClick(action)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading === action.id)?_c('NcLoadingIcon',{attrs:{\"size\":18}}):_c('CustomSvgIconRender',{attrs:{\"svg\":action.iconSvgInline([_vm.source], _vm.currentView)}})]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(action.displayName([_vm.source], _vm.currentView))+\"\\n\\t\\t\\t\")])}),1):_vm._e()],1),_vm._v(\" \"),(_vm.isSizeAvailable)?_c('td',{staticClass:\"files-list__row-size\",style:({ opacity: _vm.sizeOpacity }),on:{\"click\":_vm.openDetailsIfAvailable}},[_c('span',[_vm._v(_vm._s(_vm.size))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.columns),function(column){return _c('td',{key:column.id,staticClass:\"files-list__row-column-custom\",class:`files-list__row-${_vm.currentView?.id}-${column.id}`,on:{\"click\":_vm.openDetailsIfAvailable}},[(_vm.active)?_c('CustomElementRender',{attrs:{\"current-view\":_vm.currentView,\"render\":column.render,\"source\":_vm.source}}):_vm._e()],1)})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=script&lang=ts&\"","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nimport Vue from 'vue';\n/**\n * Observe various events and save the current\n * special keys states. Useful for checking the\n * current status of a key when executing a method.\n */\nexport const useKeyboardStore = function () {\n const store = defineStore('keyboard', {\n state: () => ({\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n }),\n actions: {\n onEvent(event) {\n if (!event) {\n event = window.event;\n }\n Vue.set(this, 'altKey', !!event.altKey);\n Vue.set(this, 'ctrlKey', !!event.ctrlKey);\n Vue.set(this, 'metaKey', !!event.metaKey);\n Vue.set(this, 'shiftKey', !!event.shiftKey);\n },\n }\n });\n const keyboardStore = store(...arguments);\n // Make sure we only register the listeners once\n if (!keyboardStore._initialized) {\n window.addEventListener('keydown', keyboardStore.onEvent);\n window.addEventListener('keyup', keyboardStore.onEvent);\n window.addEventListener('mousemove', keyboardStore.onEvent);\n keyboardStore._initialized = true;\n }\n return keyboardStore;\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n// The preview service worker cache name (see webpack config)\nconst SWCacheName = 'previews';\n/**\n * Check if the preview is already cached by the service worker\n */\nexport const isCachedPreview = function (previewUrl) {\n return caches.open(SWCacheName)\n .then(function (cache) {\n return cache.match(previewUrl)\n .then(function (response) {\n return !!response;\n });\n });\n};\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileEntry.vue?vue&type=template&id=0600090e&scoped=true&\"\nimport script from \"./FileEntry.vue?vue&type=script&lang=ts&\"\nexport * from \"./FileEntry.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&\"\nimport style1 from \"./FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0600090e\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=script&lang=ts&\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('tr',[_c('th',{staticClass:\"files-list__row-checkbox\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('files', 'Total rows summary')))])]),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-name\"},[_c('span',{staticClass:\"files-list__row-icon\"}),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.summary))])]),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-actions\"}),_vm._v(\" \"),(_vm.isSizeAvailable)?_c('td',{staticClass:\"files-list__column files-list__row-size\"},[_c('span',[_vm._v(_vm._s(_vm.totalSize))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.columns),function(column){return _c('th',{key:column.id,class:_vm.classForColumn(column)},[_c('span',[_vm._v(_vm._s(column.summary?.(_vm.nodes, _vm.currentView)))])])})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListFooter.vue?vue&type=template&id=e6a083be&scoped=true&\"\nimport script from \"./FilesListFooter.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListFooter.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e6a083be\",\n null\n \n)\n\nexport default component.exports","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nexport default Vue.extend({\n data() {\n return {\n filesListWidth: null,\n };\n },\n created() {\n const fileListEl = document.querySelector('#app-content-vue');\n this.$resizeObserver = new ResizeObserver((entries) => {\n if (entries.length > 0 && entries[0].target === fileListEl) {\n this.filesListWidth = entries[0].contentRect.width;\n }\n });\n this.$resizeObserver.observe(fileListEl);\n },\n beforeDestroy() {\n this.$resizeObserver.disconnect();\n },\n});\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('th',{staticClass:\"files-list__column files-list__row-actions-batch\",attrs:{\"colspan\":\"2\"}},[_c('NcActions',{ref:\"actionsMenu\",attrs:{\"disabled\":!!_vm.loading || _vm.areSomeNodesLoading,\"force-title\":true,\"inline\":_vm.inlineActions,\"menu-title\":_vm.inlineActions <= 1 ? _vm.t('files', 'Actions') : null,\"open\":_vm.openedMenu},on:{\"update:open\":function($event){_vm.openedMenu=$event}}},_vm._l((_vm.enabledActions),function(action){return _c('NcActionButton',{key:action.id,class:'files-list__row-actions-batch-' + action.id,on:{\"click\":function($event){return _vm.onActionClick(action)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading === action.id)?_c('NcLoadingIcon',{attrs:{\"size\":18}}):_c('CustomSvgIconRender',{attrs:{\"svg\":action.iconSvgInline(_vm.nodes, _vm.currentView)}})]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(action.displayName(_vm.nodes, _vm.currentView))+\"\\n\\t\\t\")])}),1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeaderActions.vue?vue&type=template&id=03e57b1e&scoped=true&\"\nimport script from \"./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"03e57b1e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcButton',{staticClass:\"files-list__column-sort-button\",class:{'files-list__column-sort-button--active': _vm.sortingMode === _vm.mode},attrs:{\"aria-label\":_vm.sortAriaLabel(_vm.name),\"type\":\"tertiary\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.toggleSortBy(_vm.mode)}}},[(_vm.sortingMode !== _vm.mode || _vm.isAscSorting)?_c('MenuUp',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}):_c('MenuDown',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}),_vm._v(\"\\n\\t\"+_vm._s(_vm.name)+\"\\n\")],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nimport { mapState } from 'pinia';\nimport { useViewConfigStore } from '../store/viewConfig';\nexport default Vue.extend({\n computed: {\n ...mapState(useViewConfigStore, ['getConfig', 'setSortingBy', 'toggleSortingDirection']),\n currentView() {\n return this.$navigation.active;\n },\n /**\n * Get the sorting mode for the current view\n */\n sortingMode() {\n return this.getConfig(this.currentView.id)?.sorting_mode\n || this.currentView?.defaultSortKey\n || 'basename';\n },\n /**\n * Get the sorting direction for the current view\n */\n isAscSorting() {\n const sortingDirection = this.getConfig(this.currentView.id)?.sorting_direction;\n return sortingDirection === 'asc';\n },\n },\n methods: {\n toggleSortBy(key) {\n // If we're already sorting by this key, flip the direction\n if (this.sortingMode === key) {\n this.toggleSortingDirection(this.currentView.id);\n return;\n }\n // else sort ASC by this new key\n this.setSortingBy(key, this.currentView.id);\n },\n },\n});\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeaderButton.vue?vue&type=template&id=e85a09d2&\"\nimport script from \"./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=script&lang=ts&\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('tr',[_c('th',{staticClass:\"files-list__column files-list__row-checkbox\"},[_c('NcCheckboxRadioSwitch',_vm._b({on:{\"update:checked\":_vm.onToggleAll}},'NcCheckboxRadioSwitch',_vm.selectAllBind,false))],1),_vm._v(\" \"),(!_vm.isNoneSelected)?_c('FilesListHeaderActions',{attrs:{\"current-view\":_vm.currentView,\"selected-nodes\":_vm.selectedNodes}}):[_c('th',{staticClass:\"files-list__column files-list__row-name files-list__column--sortable\",on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.toggleSortBy('basename')}}},[_c('span',{staticClass:\"files-list__row-icon\"}),_vm._v(\" \"),_c('FilesListHeaderButton',{attrs:{\"name\":_vm.t('files', 'Name'),\"mode\":\"basename\"}})],1),_vm._v(\" \"),_c('th',{staticClass:\"files-list__row-actions\"}),_vm._v(\" \"),(_vm.isSizeAvailable)?_c('th',{staticClass:\"files-list__column files-list__row-size\",class:{'files-list__column--sortable': _vm.isSizeAvailable}},[_c('FilesListHeaderButton',{attrs:{\"name\":_vm.t('files', 'Size'),\"mode\":\"size\"}})],1):_vm._e(),_vm._v(\" \"),_vm._l((_vm.columns),function(column){return _c('th',{key:column.id,class:_vm.classForColumn(column)},[(!!column.sort)?_c('FilesListHeaderButton',{attrs:{\"name\":column.title,\"mode\":column.id}}):_c('span',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(column.title)+\"\\n\\t\\t\\t\")])],1)})]],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeader.vue?vue&type=template&id=76b6186a&scoped=true&\"\nimport script from \"./FilesListHeader.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListHeader.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"76b6186a\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=script&lang=ts&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListVirtual.vue?vue&type=template&id=640a8bb8&scoped=true&\"\nimport script from \"./FilesListVirtual.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListVirtual.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"640a8bb8\",\n null\n \n)\n\nexport default component.exports","import isSvg from 'is-svg';\nimport logger from '../logger.js';\nexport default class {\n _views = [];\n _currentView = null;\n constructor() {\n logger.debug('Navigation service initialized');\n }\n register(view) {\n try {\n isValidNavigation(view);\n isUniqueNavigation(view, this._views);\n }\n catch (e) {\n if (e instanceof Error) {\n logger.error(e.message, { view });\n }\n throw e;\n }\n if (view.legacy) {\n logger.warn('Legacy view detected, please migrate to Vue');\n }\n if (view.iconClass) {\n view.legacy = true;\n }\n this._views.push(view);\n }\n remove(id) {\n const index = this._views.findIndex(view => view.id === id);\n if (index !== -1) {\n this._views.splice(index, 1);\n }\n }\n get views() {\n return this._views;\n }\n setActive(view) {\n this._currentView = view;\n }\n get active() {\n return this._currentView;\n }\n}\n/**\n * Make sure the given view is unique\n * and not already registered.\n */\nconst isUniqueNavigation = function (view, views) {\n if (views.find(search => search.id === view.id)) {\n throw new Error(`Navigation id ${view.id} is already registered`);\n }\n return true;\n};\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Navigation interface requirements.\n */\nconst isValidNavigation = function (view) {\n if (!view.id || typeof view.id !== 'string') {\n throw new Error('Navigation id is required and must be a string');\n }\n if (!view.name || typeof view.name !== 'string') {\n throw new Error('Navigation name is required and must be a string');\n }\n /**\n * Legacy handle their content and icon differently\n * TODO: remove when support for legacy views is removed\n */\n if (!view.legacy) {\n if (!view.getContents || typeof view.getContents !== 'function') {\n throw new Error('Navigation getContents is required and must be a function');\n }\n if (!view.icon || typeof view.icon !== 'string' || !isSvg(view.icon)) {\n throw new Error('Navigation icon is required and must be a valid svg string');\n }\n }\n if (!('order' in view) || typeof view.order !== 'number') {\n throw new Error('Navigation order is required and must be a number');\n }\n // Optional properties\n if (view.columns) {\n view.columns.forEach(isValidColumn);\n }\n if (view.emptyView && typeof view.emptyView !== 'function') {\n throw new Error('Navigation emptyView must be a function');\n }\n if (view.parent && typeof view.parent !== 'string') {\n throw new Error('Navigation parent must be a string');\n }\n if ('sticky' in view && typeof view.sticky !== 'boolean') {\n throw new Error('Navigation sticky must be a boolean');\n }\n if ('expanded' in view && typeof view.expanded !== 'boolean') {\n throw new Error('Navigation expanded must be a boolean');\n }\n if (view.defaultSortKey && typeof view.defaultSortKey !== 'string') {\n throw new Error('Navigation defaultSortKey must be a string');\n }\n return true;\n};\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Column interface requirements.\n */\nconst isValidColumn = function (column) {\n if (!column.id || typeof column.id !== 'string') {\n throw new Error('A column id is required');\n }\n if (!column.title || typeof column.title !== 'string') {\n throw new Error('A column title is required');\n }\n if (!column.render || typeof column.render !== 'function') {\n throw new Error('A render function is required');\n }\n // Optional properties\n if (column.sort && typeof column.sort !== 'function') {\n throw new Error('Column sortFunction must be a function');\n }\n if (column.summary && typeof column.summary !== 'function') {\n throw new Error('Column summary must be a function');\n }\n return true;\n};\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=script&lang=ts&\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcAppContent',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.currentView?.legacy),expression:\"!currentView?.legacy\"}],class:{'app-content--hidden': _vm.currentView?.legacy},attrs:{\"data-cy-files-content\":\"\"}},[_c('div',{staticClass:\"files-list__header\"},[_c('BreadCrumbs',{attrs:{\"path\":_vm.dir},on:{\"reload\":_vm.fetchContent}}),_vm._v(\" \"),(_vm.isRefreshing)?_c('NcLoadingIcon',{staticClass:\"files-list__refresh-icon\"}):_vm._e()],1),_vm._v(\" \"),(_vm.loading && !_vm.isRefreshing)?_c('NcLoadingIcon',{staticClass:\"files-list__loading-icon\",attrs:{\"size\":38,\"title\":_vm.t('files', 'Loading current folder')}}):(!_vm.loading && _vm.isEmptyDir)?_c('NcEmptyContent',{attrs:{\"title\":_vm.t('files', 'No files in here'),\"description\":_vm.t('files', 'No files or folders have been deleted yet'),\"data-cy-files-content-empty\":\"\"},scopedSlots:_vm._u([{key:\"action\",fn:function(){return [(_vm.dir !== '/')?_c('NcButton',{attrs:{\"aria-label\":\"t('files', 'Go to the previous folder')\",\"type\":\"primary\",\"to\":_vm.toPreviousDir}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Go back'))+\"\\n\\t\\t\\t\")]):_vm._e()]},proxy:true},{key:\"icon\",fn:function(){return [_c('TrashCan')]},proxy:true}])}):_c('FilesListVirtual',{ref:\"filesListVirtual\",attrs:{\"current-view\":_vm.currentView,\"nodes\":_vm.dirContents}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesList.vue?vue&type=template&id=66068cbb&scoped=true&\"\nimport script from \"./FilesList.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesList.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"66068cbb\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppNavigation',{attrs:{\"data-cy-files-navigation\":\"\"},scopedSlots:_vm._u([{key:\"list\",fn:function(){return _vm._l((_vm.parentViews),function(view){return _c('NcAppNavigationItem',{key:view.id,attrs:{\"allow-collapse\":true,\"data-cy-files-navigation-item\":view.id,\"icon\":view.iconClass,\"open\":_vm.isExpanded(view),\"pinned\":view.sticky,\"title\":view.name,\"to\":_vm.generateToNavigation(view)},on:{\"update:open\":function($event){return _vm.onToggleExpand(view)}}},[(view.icon)?_c('NcIconSvgWrapper',{attrs:{\"slot\":\"icon\",\"svg\":view.icon},slot:\"icon\"}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.childViews[view.id]),function(child){return _c('NcAppNavigationItem',{key:child.id,attrs:{\"data-cy-files-navigation-item\":child.id,\"exact\":true,\"icon\":child.iconClass,\"title\":child.name,\"to\":_vm.generateToNavigation(child)}},[(child.icon)?_c('NcIconSvgWrapper',{attrs:{\"slot\":\"icon\",\"svg\":child.icon},slot:\"icon\"}):_vm._e()],1)})],2)})},proxy:true},{key:\"footer\",fn:function(){return [_c('ul',{staticClass:\"app-navigation-entry__settings\"},[_c('NavigationQuota'),_vm._v(\" \"),_c('NcAppNavigationItem',{attrs:{\"aria-label\":_vm.t('files', 'Open the files app settings'),\"title\":_vm.t('files', 'Files settings'),\"data-cy-files-navigation-settings-button\":\"\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openSettings.apply(null, arguments)}}},[_c('Cog',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"})],1)],1)]},proxy:true}])},[_vm._v(\" \"),_vm._v(\" \"),_c('SettingsModal',{attrs:{\"open\":_vm.settingsOpened,\"data-cy-files-navigation-settings\":\"\"},on:{\"close\":_vm.onSettingsClose}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.storageStats)?_c('NcAppNavigationItem',{staticClass:\"app-navigation-entry__settings-quota\",class:{ 'app-navigation-entry__settings-quota--not-unlimited': _vm.storageStats.quota >= 0},attrs:{\"aria-label\":_vm.t('files', 'Storage informations'),\"loading\":_vm.loadingStorageStats,\"name\":_vm.storageStatsTitle,\"title\":_vm.storageStatsTooltip,\"data-cy-files-navigation-settings-quota\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.debounceUpdateStorageStats.apply(null, arguments)}}},[_c('ChartPie',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"}),_vm._v(\" \"),(_vm.storageStats.quota >= 0)?_c('NcProgressBar',{attrs:{\"slot\":\"extra\",\"error\":_vm.storageStats.relative > 80,\"value\":Math.min(_vm.storageStats.relative, 100)},slot:\"extra\"}):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<NcAppNavigationItem v-if=\"storageStats\"\n\t\t:aria-label=\"t('files', 'Storage informations')\"\n\t\t:class=\"{ 'app-navigation-entry__settings-quota--not-unlimited': storageStats.quota >= 0}\"\n\t\t:loading=\"loadingStorageStats\"\n\t\t:name=\"storageStatsTitle\"\n\t\t:title=\"storageStatsTooltip\"\n\t\tclass=\"app-navigation-entry__settings-quota\"\n\t\tdata-cy-files-navigation-settings-quota\n\t\t@click.stop.prevent=\"debounceUpdateStorageStats\">\n\t\t<ChartPie slot=\"icon\" :size=\"20\" />\n\n\t\t<!-- Progress bar -->\n\t\t<NcProgressBar v-if=\"storageStats.quota >= 0\"\n\t\t\tslot=\"extra\"\n\t\t\t:error=\"storageStats.relative > 80\"\n\t\t\t:value=\"Math.min(storageStats.relative, 100)\" />\n\t</NcAppNavigationItem>\n</template>\n\n<script>\nimport { formatFileSize } from '@nextcloud/files'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError } from '@nextcloud/dialogs'\nimport { debounce, throttle } from 'throttle-debounce'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\nimport ChartPie from 'vue-material-design-icons/ChartPie.vue'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\n\nimport logger from '../logger.js'\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport default {\n\tname: 'NavigationQuota',\n\n\tcomponents: {\n\t\tChartPie,\n\t\tNcAppNavigationItem,\n\t\tNcProgressBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingStorageStats: false,\n\t\t\tstorageStats: loadState('files', 'storageStats', null),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tstorageStatsTitle() {\n\t\t\tconst usedQuotaByte = formatFileSize(this.storageStats?.used)\n\t\t\tconst quotaByte = formatFileSize(this.storageStats?.quota)\n\n\t\t\t// If no quota set\n\t\t\tif (this.storageStats?.quota < 0) {\n\t\t\t\treturn this.t('files', '{usedQuotaByte} used', { usedQuotaByte })\n\t\t\t}\n\n\t\t\treturn this.t('files', '{used} of {quota} used', {\n\t\t\t\tused: usedQuotaByte,\n\t\t\t\tquota: quotaByte,\n\t\t\t})\n\t\t},\n\t\tstorageStatsTooltip() {\n\t\t\tif (!this.storageStats.relative) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\treturn this.t('files', '{relative}% used', this.storageStats)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t/**\n\t\t * Update storage stats every minute\n\t\t * TODO: remove when all views are migrated to Vue\n\t\t */\n\t\tsetInterval(this.throttleUpdateStorageStats, 60 * 1000)\n\n\t\tsubscribe('files:node:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:node:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:node:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:node:updated', this.throttleUpdateStorageStats)\n\t},\n\n\tmethods: {\n\t\t// From user input\n\t\tdebounceUpdateStorageStats: debounce(200, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\t\t// From interval or event bus\n\t\tthrottleUpdateStorageStats: throttle(1000, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\n\t\t/**\n\t\t * Update the storage stats\n\t\t * Throttled at max 1 refresh per minute\n\t\t *\n\t\t * @param {Event} [event = null] if user interaction\n\t\t */\n\t\tasync updateStorageStats(event = null) {\n\t\t\tif (this.loadingStorageStats) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingStorageStats = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl('/apps/files/api/v1/stats'))\n\t\t\t\tif (!response?.data?.data) {\n\t\t\t\t\tthrow new Error('Invalid storage stats')\n\t\t\t\t}\n\t\t\t\tthis.storageStats = response.data.data\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Could not refresh storage stats', { error })\n\t\t\t\t// Only show to the user if it was manually triggered\n\t\t\t\tif (event) {\n\t\t\t\t\tshowError(t('files', 'Could not refresh storage stats'))\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loadingStorageStats = false\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./NavigationQuota.vue?vue&type=template&id=918797b2&scoped=true&\"\nimport script from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"918797b2\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSettingsDialog',{attrs:{\"open\":_vm.open,\"show-navigation\":true,\"title\":_vm.t('files', 'Files settings')},on:{\"update:open\":_vm.onClose}},[_c('NcAppSettingsSection',{attrs:{\"id\":\"settings\",\"title\":_vm.t('files', 'Files settings')}},[_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.userConfig.show_hidden},on:{\"update:checked\":function($event){return _vm.setConfig('show_hidden', $event)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Show hidden files'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.userConfig.crop_image_previews},on:{\"update:checked\":function($event){return _vm.setConfig('crop_image_previews', $event)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Crop image previews'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.settings.length !== 0)?_c('NcAppSettingsSection',{attrs:{\"id\":\"more-settings\",\"title\":_vm.t('files', 'Additional settings')}},[_vm._l((_vm.settings),function(setting){return [_c('Setting',{key:setting.name,attrs:{\"el\":setting.el}})]})],2):_vm._e(),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"webdav\",\"title\":_vm.t('files', 'WebDAV')}},[_c('NcInputField',{attrs:{\"id\":\"webdav-url-input\",\"show-trailing-button\":true,\"success\":_vm.webdavUrlCopied,\"trailing-button-label\":_vm.t('files', 'Copy to clipboard'),\"value\":_vm.webdavUrl,\"readonly\":\"readonly\",\"type\":\"url\"},on:{\"focus\":function($event){return $event.target.select()},\"trailing-button-click\":_vm.copyCloudId},scopedSlots:_vm._u([{key:\"trailing-button-icon\",fn:function(){return [_c('Clipboard',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('em',[_c('a',{staticClass:\"setting-link\",attrs:{\"href\":_vm.webdavDocs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Use this address to access your Files via WebDAV'))+\" ↗\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('em',[_c('a',{staticClass:\"setting-link\",attrs:{\"href\":_vm.appPasswordUrl}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.'))+\" ↗\\n\\t\\t\\t\")])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div />\n</template>\n<script>\nexport default {\n\tname: 'Setting',\n\tprops: {\n\t\tel: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.appendChild(this.el())\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=61d69eae&\"\nimport script from \"./Setting.vue?vue&type=script&lang=js&\"\nexport * from \"./Setting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<NcAppSettingsDialog :open=\"open\"\n\t\t:show-navigation=\"true\"\n\t\t:title=\"t('files', 'Files settings')\"\n\t\t@update:open=\"onClose\">\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection id=\"settings\" :title=\"t('files', 'Files settings')\">\n\t\t\t<NcCheckboxRadioSwitch :checked=\"userConfig.show_hidden\"\n\t\t\t\t@update:checked=\"setConfig('show_hidden', $event)\">\n\t\t\t\t{{ t('files', 'Show hidden files') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch :checked=\"userConfig.crop_image_previews\"\n\t\t\t\t@update:checked=\"setConfig('crop_image_previews', $event)\">\n\t\t\t\t{{ t('files', 'Crop image previews') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection v-if=\"settings.length !== 0\"\n\t\t\tid=\"more-settings\"\n\t\t\t:title=\"t('files', 'Additional settings')\">\n\t\t\t<template v-for=\"setting in settings\">\n\t\t\t\t<Setting :key=\"setting.name\" :el=\"setting.el\" />\n\t\t\t</template>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Webdav URL-->\n\t\t<NcAppSettingsSection id=\"webdav\" :title=\"t('files', 'WebDAV')\">\n\t\t\t<NcInputField id=\"webdav-url-input\"\n\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t:success=\"webdavUrlCopied\"\n\t\t\t\t:trailing-button-label=\"t('files', 'Copy to clipboard')\"\n\t\t\t\t:value=\"webdavUrl\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\ttype=\"url\"\n\t\t\t\t@focus=\"$event.target.select()\"\n\t\t\t\t@trailing-button-click=\"copyCloudId\">\n\t\t\t\t<template #trailing-button-icon>\n\t\t\t\t\t<Clipboard :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcInputField>\n\t\t\t<em>\n\t\t\t\t<a class=\"setting-link\"\n\t\t\t\t\t:href=\"webdavDocs\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t{{ t('files', 'Use this address to access your Files via WebDAV') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t\t<br>\n\t\t\t<em>\n\t\t\t\t<a class=\"setting-link\" :href=\"appPasswordUrl\">\n\t\t\t\t\t{{ t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t</NcAppSettingsSection>\n\t</NcAppSettingsDialog>\n</template>\n\n<script>\nimport NcAppSettingsDialog from '@nextcloud/vue/dist/Components/NcAppSettingsDialog.js'\nimport NcAppSettingsSection from '@nextcloud/vue/dist/Components/NcAppSettingsSection.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport Clipboard from 'vue-material-design-icons/Clipboard.vue'\nimport NcInputField from '@nextcloud/vue/dist/Components/NcInputField.js'\nimport Setting from '../components/Setting.vue'\n\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport { useUserConfigStore } from '../store/userconfig.ts'\n\nexport default {\n\tname: 'Settings',\n\tcomponents: {\n\t\tClipboard,\n\t\tNcAppSettingsDialog,\n\t\tNcAppSettingsSection,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcInputField,\n\t\tSetting,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst userConfigStore = useUserConfigStore()\n\t\treturn {\n\t\t\tuserConfigStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Settings API\n\t\t\tsettings: window.OCA?.Files?.Settings?.settings || [],\n\n\t\t\t// Webdav infos\n\t\t\twebdavUrl: generateRemoteUrl('dav/files/' + encodeURIComponent(getCurrentUser()?.uid)),\n\t\t\twebdavDocs: 'https://docs.nextcloud.com/server/stable/go.php?to=user-webdav',\n\t\t\tappPasswordUrl: generateUrl('/settings/user/security#generate-app-token-section'),\n\t\t\twebdavUrlCopied: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tuserConfig() {\n\t\t\treturn this.userConfigStore.userConfig\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.open())\n\t},\n\n\tbeforeDestroy() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.close())\n\t},\n\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.$emit('close')\n\t\t},\n\n\t\tsetConfig(key, value) {\n\t\t\tthis.userConfigStore.update(key, value)\n\t\t},\n\n\t\tasync copyCloudId() {\n\t\t\tdocument.querySelector('input#webdav-url-input').select()\n\n\t\t\tif (!navigator.clipboard) {\n\t\t\t\t// Clipboard API not available\n\t\t\t\tshowError(t('files', 'Clipboard is not available'))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tawait navigator.clipboard.writeText(this.webdavUrl)\n\t\t\tthis.webdavUrlCopied = true\n\t\t\tshowSuccess(t('files', 'WebDAV URL copied to clipboard'))\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.webdavUrlCopied = false\n\t\t\t}, 5000)\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.setting-link:hover {\n\ttext-decoration: underline;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=76ca5d1f&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"76ca5d1f\",\n null\n \n)\n\nexport default component.exports","<!--\n - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<NcAppNavigation data-cy-files-navigation>\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem v-for=\"view in parentViews\"\n\t\t\t\t:key=\"view.id\"\n\t\t\t\t:allow-collapse=\"true\"\n\t\t\t\t:data-cy-files-navigation-item=\"view.id\"\n\t\t\t\t:icon=\"view.iconClass\"\n\t\t\t\t:open=\"isExpanded(view)\"\n\t\t\t\t:pinned=\"view.sticky\"\n\t\t\t\t:title=\"view.name\"\n\t\t\t\t:to=\"generateToNavigation(view)\"\n\t\t\t\t@update:open=\"onToggleExpand(view)\">\n\t\t\t\t<!-- Sanitized icon as svg if provided -->\n\t\t\t\t<NcIconSvgWrapper v-if=\"view.icon\" slot=\"icon\" :svg=\"view.icon\" />\n\n\t\t\t\t<!-- Child views if any -->\n\t\t\t\t<NcAppNavigationItem v-for=\"child in childViews[view.id]\"\n\t\t\t\t\t:key=\"child.id\"\n\t\t\t\t\t:data-cy-files-navigation-item=\"child.id\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:icon=\"child.iconClass\"\n\t\t\t\t\t:title=\"child.name\"\n\t\t\t\t\t:to=\"generateToNavigation(child)\">\n\t\t\t\t\t<!-- Sanitized icon as svg if provided -->\n\t\t\t\t\t<NcIconSvgWrapper v-if=\"child.icon\" slot=\"icon\" :svg=\"child.icon\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</NcAppNavigationItem>\n\t\t</template>\n\n\t\t<!-- Non-scrollable navigation bottom elements -->\n\t\t<template #footer>\n\t\t\t<ul class=\"app-navigation-entry__settings\">\n\t\t\t\t<!-- User storage usage statistics -->\n\t\t\t\t<NavigationQuota />\n\n\t\t\t\t<!-- Files settings modal toggle-->\n\t\t\t\t<NcAppNavigationItem :aria-label=\"t('files', 'Open the files app settings')\"\n\t\t\t\t\t:title=\"t('files', 'Files settings')\"\n\t\t\t\t\tdata-cy-files-navigation-settings-button\n\t\t\t\t\t@click.prevent.stop=\"openSettings\">\n\t\t\t\t\t<Cog slot=\"icon\" :size=\"20\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</ul>\n\t\t</template>\n\n\t\t<!-- Settings modal-->\n\t\t<SettingsModal :open=\"settingsOpened\"\n\t\t\tdata-cy-files-navigation-settings\n\t\t\t@close=\"onSettingsClose\" />\n\t</NcAppNavigation>\n</template>\n\n<script>\nimport { emit, subscribe } from '@nextcloud/event-bus'\nimport { translate } from '@nextcloud/l10n'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\n\nimport { setPageHeading } from '../../../../core/src/OCP/accessibility.js'\nimport { useViewConfigStore } from '../store/viewConfig.ts'\nimport logger from '../logger.js'\nimport Navigation from '../services/Navigation.ts'\nimport NavigationQuota from '../components/NavigationQuota.vue'\nimport SettingsModal from './Settings.vue'\n\nexport default {\n\tname: 'Navigation',\n\n\tcomponents: {\n\t\tCog,\n\t\tNavigationQuota,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationItem,\n\t\tNcIconSvgWrapper,\n\t\tSettingsModal,\n\t},\n\n\tprops: {\n\t\t// eslint-disable-next-line vue/prop-name-casing\n\t\tNavigation: {\n\t\t\ttype: Navigation,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst viewConfigStore = useViewConfigStore()\n\t\treturn {\n\t\t\tviewConfigStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsOpened: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentViewId() {\n\t\t\treturn this.$route?.params?.view || 'files'\n\t\t},\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.views.find(view => view.id === this.currentViewId)\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tviews() {\n\t\t\treturn this.Navigation.views\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tparentViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter child views\n\t\t\t\t.filter(view => !view.parent)\n\t\t\t\t// sort views by order\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.order - b.order\n\t\t\t\t})\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tchildViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter parent views\n\t\t\t\t.filter(view => !!view.parent)\n\t\t\t\t// create a map of parents and their children\n\t\t\t\t.reduce((list, view) => {\n\t\t\t\t\tlist[view.parent] = [...(list[view.parent] || []), view]\n\t\t\t\t\t// Sort children by order\n\t\t\t\t\tlist[view.parent].sort((a, b) => {\n\t\t\t\t\t\treturn a.order - b.order\n\t\t\t\t\t})\n\t\t\t\t\treturn list\n\t\t\t\t}, {})\n\t\t},\n\t},\n\n\twatch: {\n\t\tcurrentView(view, oldView) {\n\t\t\t// If undefined, it means we're initializing the view\n\t\t\t// This is handled by the legacy-view:initialized event\n\t\t\t// TODO: remove when legacy views are dropped\n\t\t\tif (view?.id === oldView?.id) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\tlogger.debug('Navigation changed', { id: view.id, view })\n\n\t\t\tthis.showView(view, oldView)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tif (this.currentView) {\n\t\t\tlogger.debug('Navigation mounted. Showing requested view', { view: this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t}\n\n\t\tsubscribe('files:legacy-navigation:changed', this.onLegacyNavigationChanged)\n\n\t\t// TODO: remove this once the legacy navigation is gone\n\t\tsubscribe('files:legacy-view:initialized', () => {\n\t\t\tlogger.debug('Legacy view initialized', { ...this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t})\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {Navigation} view the new active view\n\t\t * @param {Navigation} oldView the old active view\n\t\t */\n\t\tshowView(view, oldView) {\n\t\t\t// Closing any opened sidebar\n\t\t\twindow?.OCA?.Files?.Sidebar?.close?.()\n\n\t\t\tif (view?.legacy) {\n\t\t\t\tconst newAppContent = document.querySelector('#app-content #app-content-' + this.currentView.id + '.viewcontainer')\n\t\t\t\tdocument.querySelectorAll('#app-content .viewcontainer').forEach(el => {\n\t\t\t\t\tel.classList.add('hidden')\n\t\t\t\t})\n\t\t\t\tnewAppContent.classList.remove('hidden')\n\n\t\t\t\t// Triggering legacy navigation events\n\t\t\t\tconst { dir = '/' } = OC.Util.History.parseUrlQuery()\n\t\t\t\tconst params = { itemId: view.id, dir }\n\n\t\t\t\tlogger.debug('Triggering legacy navigation event', params)\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('show', params))\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('urlChanged', params))\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\tsetPageHeading(view.name)\n\t\t\temit('files:navigation:changed', view)\n\t\t},\n\n\t\t/**\n\t\t * Coming from the legacy files app.\n\t\t * TODO: remove when all views are migrated.\n\t\t *\n\t\t * @param {Navigation} view the new active view\n\t\t */\n\t\tonLegacyNavigationChanged({ id } = { id: 'files' }) {\n\t\t\tconst view = this.Navigation.views.find(view => view.id === id)\n\t\t\tif (view && view.legacy && view.id !== this.currentView.id) {\n\t\t\t\t// Force update the current route as the request comes\n\t\t\t\t// from the legacy files app router\n\t\t\t\tthis.$router.replace({ ...this.$route, params: { view: view.id } })\n\t\t\t\tthis.Navigation.setActive(view)\n\t\t\t\tthis.showView(view)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Expand/collapse a a view with children and permanently\n\t\t * save this setting in the server.\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tonToggleExpand(view) {\n\t\t\t// Invert state\n\t\t\tconst isExpanded = this.isExpanded(view)\n\t\t\t// Update the view expanded state, might not be necessary\n\t\t\tview.expanded = !isExpanded\n\t\t\tthis.viewConfigStore.update(view.id, 'expanded', !isExpanded)\n\t\t},\n\n\t\t/**\n\t\t * Check if a view is expanded by user config\n\t\t * or fallback to the default value.\n\t\t *\n\t\t * @param {Navigation} view the view to check\n\t\t */\n\t\tisExpanded(view) {\n\t\t\treturn typeof this.viewConfigStore.getConfig(view.id)?.expanded === 'boolean'\n\t\t\t\t? this.viewConfigStore.getConfig(view.id).expanded === true\n\t\t\t\t: view.expanded === true\n\t\t},\n\n\t\t/**\n\t\t * Generate the route to a view\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tgenerateToNavigation(view) {\n\t\t\tif (view.params) {\n\t\t\t\tconst { dir, fileid } = view.params\n\t\t\t\treturn { name: 'filelist', params: view.params, query: { dir, fileid } }\n\t\t\t}\n\t\t\treturn { name: 'filelist', params: { view: view.id } }\n\t\t},\n\n\t\t/**\n\t\t * Open the settings modal\n\t\t */\n\t\topenSettings() {\n\t\t\tthis.settingsOpened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the settings modal\n\t\t */\n\t\tonSettingsClose() {\n\t\t\tthis.settingsOpened = false\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n</style>\n","/**\n * @copyright Copyright (c) 2022 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\n/**\n * Set the page heading\n *\n * @param {string} heading page title from the history api\n * @since 27.0.0\n */\nexport function setPageHeading(heading) {\n\tconst headingEl = document.getElementById('page-heading-level-1')\n\tif (headingEl) {\n\t\theadingEl.textContent = heading\n\t}\n}\nexport default {\n\t/**\n\t * @return {boolean} Whether the user opted-out of shortcuts so that they should not be registered\n\t */\n\tdisableKeyboardShortcuts() {\n\t\treturn loadState('theming', 'shortcutsDisabled', false)\n\t},\n\tsetPageHeading,\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=657a978e&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"657a978e\",\n null\n \n)\n\nexport default component.exports","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport logger from '../logger.js'\n\n/**\n * Fetch and register the legacy files views\n */\nexport default function() {\n\tconst legacyViews = Object.values(loadState('files', 'navigation', {}))\n\n\tif (legacyViews.length > 0) {\n\t\tlogger.debug('Legacy files views detected. Processing...', legacyViews)\n\t\tlegacyViews.forEach(view => {\n\t\t\tregisterLegacyView(view)\n\t\t\tif (view.sublist) {\n\t\t\t\tview.sublist.forEach(subview => registerLegacyView({ ...subview, parent: view.id }))\n\t\t\t}\n\t\t})\n\t}\n}\n\nconst registerLegacyView = function({ id, name, order, icon, parent, classes = '', expanded, params }) {\n\tOCP.Files.Navigation.register({\n\t\tid,\n\t\tname,\n\t\torder,\n\t\tparams,\n\t\tparent,\n\t\texpanded: expanded === true,\n\t\ticonClass: icon ? `icon-${icon}` : 'nav-icon-' + id,\n\t\tlegacy: true,\n\t\tsticky: classes.includes('pinned'),\n\t})\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\nimport queryString from 'query-string'\n\nVue.use(Router)\n\nconst router = new Router({\n\tmode: 'history',\n\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl('/apps/files', ''),\n\tlinkActiveClass: 'active',\n\n\troutes: [\n\t\t{\n\t\t\tpath: '/',\n\t\t\t// Pretending we're using the default view\n\t\t\talias: '/files',\n\t\t},\n\t\t{\n\t\t\tpath: '/:view/:fileid?',\n\t\t\tname: 'filelist',\n\t\t\tprops: true,\n\t\t},\n\t],\n\n\t// Custom stringifyQuery to prevent encoding of slashes in the url\n\tstringifyQuery(query) {\n\t\tconst result = queryString.stringify(query).replace(/%2F/gmi, '/')\n\t\treturn result ? ('?' + result) : ''\n\t},\n})\n\nexport default router\n","import './templates.js';\nimport './legacy/filelistSearch.js';\nimport './actions/deleteAction';\nimport './actions/sidebarAction';\nimport Vue from 'vue';\nimport { createPinia, PiniaVuePlugin } from 'pinia';\nimport FilesListView from './views/FilesList.vue';\nimport NavigationService from './services/Navigation';\nimport NavigationView from './views/Navigation.vue';\nimport processLegacyFilesViews from './legacy/navigationMapper.js';\nimport registerPreviewServiceWorker from './services/ServiceWorker.js';\nimport router from './router/router.js';\nimport RouterService from './services/RouterService';\nimport SettingsModel from './models/Setting.js';\nimport SettingsService from './services/Settings.js';\n// Init private and public Files namespace\nwindow.OCA.Files = window.OCA.Files ?? {};\nwindow.OCP.Files = window.OCP.Files ?? {};\n// Expose router\nconst Router = new RouterService(router);\nObject.assign(window.OCP.Files, { Router });\n// Init Pinia store\nVue.use(PiniaVuePlugin);\nconst pinia = createPinia();\n// Init Navigation Service\nconst Navigation = new NavigationService();\nObject.assign(window.OCP.Files, { Navigation });\nVue.prototype.$navigation = Navigation;\n// Init Files App Settings Service\nconst Settings = new SettingsService();\nObject.assign(window.OCA.Files, { Settings });\nObject.assign(window.OCA.Files.Settings, { Setting: SettingsModel });\n// Init Navigation View\nconst View = Vue.extend(NavigationView);\nconst FilesNavigationRoot = new View({\n name: 'FilesNavigationRoot',\n propsData: {\n Navigation,\n },\n router,\n pinia,\n});\nFilesNavigationRoot.$mount('#app-navigation-files');\n// Init content list view\nconst ListView = Vue.extend(FilesListView);\nconst FilesList = new ListView({\n name: 'FilesListRoot',\n router,\n pinia,\n});\nFilesList.$mount('#app-content-vue');\n// Init legacy and new files views\nprocessLegacyFilesViews();\n// Register preview service worker\nregisterPreviewServiceWorker();\n","export default class RouterService {\n _router;\n constructor(router) {\n this._router = router;\n }\n /**\n * Trigger a route change on the files app\n *\n * @param path the url path, eg: '/trashbin?dir=/Deleted'\n * @param replace replace the current history\n * @see https://router.vuejs.org/guide/essentials/navigation.html#navigate-to-a-different-location\n */\n goTo(path, replace = false) {\n return this._router.push({\n path,\n replace,\n });\n }\n /**\n * Trigger a route change on the files App\n *\n * @param name the route name\n * @param params the route parameters\n * @param query the url query parameters\n * @param replace replace the current history\n * @see https://router.vuejs.org/guide/essentials/navigation.html#navigate-to-a-different-location\n */\n goToRoute(name, params, query, replace) {\n return this._router.push({\n name,\n query,\n params,\n replace,\n });\n }\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Settings {\n\n\t_settings\n\n\tconstructor() {\n\t\tthis._settings = []\n\t\tconsole.debug('OCA.Files.Settings initialized')\n\t}\n\n\t/**\n\t * Register a new setting\n\t *\n\t * @since 19.0.0\n\t * @param {OCA.Files.Settings.Setting} view element to add to settings\n\t * @return {boolean} whether registering was successful\n\t */\n\tregister(view) {\n\t\tif (this._settings.filter(e => e.name === view.name).length > 0) {\n\t\t\tconsole.error('A setting with the same name is already registered')\n\t\t\treturn false\n\t\t}\n\t\tthis._settings.push(view)\n\t\treturn true\n\t}\n\n\t/**\n\t * All settings elements\n\t *\n\t * @return {OCA.Files.Settings.Setting[]} All currently registered settings\n\t */\n\tget settings() {\n\t\treturn this._settings\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Setting {\n\n\t_close\n\t_el\n\t_name\n\t_open\n\n\t/**\n\t * Create a new files app setting\n\t *\n\t * @since 19.0.0\n\t * @param {string} name the name of this setting\n\t * @param {object} component the component\n\t * @param {Function} component.el function that returns an unmounted dom element to be added\n\t * @param {Function} [component.open] callback for when setting is added\n\t * @param {Function} [component.close] callback for when setting is closed\n\t */\n\tconstructor(name, { el, open, close }) {\n\t\tthis._name = name\n\t\tthis._el = el\n\t\tthis._open = open\n\t\tthis._close = close\n\n\t\tif (typeof this._open !== 'function') {\n\t\t\tthis._open = () => {}\n\t\t}\n\n\t\tif (typeof this._close !== 'function') {\n\t\t\tthis._close = () => {}\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this._name\n\t}\n\n\tget el() {\n\t\treturn this._el\n\t}\n\n\tget open() {\n\t\treturn this._open\n\t}\n\n\tget close() {\n\t\treturn this._close\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { generateUrl } from '@nextcloud/router'\nimport logger from '../logger.js'\n\nexport default () => {\n\tif ('serviceWorker' in navigator) {\n\t\t// Use the window load event to keep the page load performant\n\t\twindow.addEventListener('load', async () => {\n\t\t\ttry {\n\t\t\t\tconst url = generateUrl('/apps/files/preview-service-worker.js', {}, { noRewrite: true })\n\t\t\t\tconst registration = await navigator.serviceWorker.register(url, { scope: '/' })\n\t\t\t\tlogger.debug('SW registered: ', { registration })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('SW registration failed: ', { error })\n\t\t\t}\n\t\t})\n\t} else {\n\t\tlogger.debug('Service Worker is not enabled on this browser.')\n\t}\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".breadcrumb[data-v-68b3b20b]{flex:1 1 100% !important;width:100%}.breadcrumb[data-v-68b3b20b] a{cursor:pointer !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/BreadCrumbs.vue\"],\"names\":[],\"mappings\":\"AACA,6BAEC,wBAAA,CACA,UAAA,CAEA,+BACC,yBAAA\",\"sourcesContent\":[\"\\n.breadcrumb {\\n\\t// Take as much space as possible\\n\\tflex: 1 1 100% !important;\\n\\twidth: 100%;\\n\\n\\t::v-deep a {\\n\\t\\tcursor: pointer !important;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".custom-svg-icon[data-v-93e9b2f4]{display:flex;align-items:center;align-self:center;justify-content:center;justify-self:center;width:44px;height:44px;opacity:1}.custom-svg-icon[data-v-93e9b2f4] svg{height:22px;width:22px;fill:currentColor}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/CustomSvgIconRender.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,YAAA,CACA,kBAAA,CACA,iBAAA,CACA,sBAAA,CACA,mBAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CAEA,sCAGC,WAAA,CACA,UAAA,CACA,iBAAA\",\"sourcesContent\":[\"\\n.custom-svg-icon {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\talign-self: center;\\n\\tjustify-content: center;\\n\\tjustify-self: center;\\n\\twidth: 44px;\\n\\theight: 44px;\\n\\topacity: 1;\\n\\n\\t::v-deep svg {\\n\\t\\t// mdi icons have a size of 24px\\n\\t\\t// 22px results in roughly 16px inner size\\n\\t\\theight: 22px;\\n\\t\\twidth: 22px;\\n\\t\\tfill: currentColor;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"tr[data-v-0600090e]:hover,tr[data-v-0600090e]:focus,tr[data-v-0600090e]:active{background-color:var(--color-background-dark)}.files-list__row-icon-preview[data-v-0600090e]:not([style*=background]){background:var(--color-loading-dark)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FileEntry.vue\"],\"names\":[],\"mappings\":\"AAGC,+EAGC,6CAAA,CAKF,wEACI,oCAAA\",\"sourcesContent\":[\"\\n/* Hover effect on tbody lines only */\\ntr {\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n}\\n\\n/* Preview not loaded animation effect */\\n.files-list__row-icon-preview:not([style*='background']) {\\n background: var(--color-loading-dark);\\n\\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"tr[data-v-e6a083be]{padding-bottom:300px;border-top:1px solid var(--color-border);background-color:rgba(0,0,0,0) !important;border-bottom:none !important}td[data-v-e6a083be]{user-select:none;color:var(--color-text-maxcontrast) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListFooter.vue\"],\"names\":[],\"mappings\":\"AAEA,oBACC,oBAAA,CACA,wCAAA,CAEA,yCAAA,CACA,6BAAA,CAGD,oBACC,gBAAA,CAEA,8CAAA\",\"sourcesContent\":[\"\\n// Scoped row\\ntr {\\n\\tpadding-bottom: 300px;\\n\\tborder-top: 1px solid var(--color-border);\\n\\t// Prevent hover effect on the whole row\\n\\tbackground-color: transparent !important;\\n\\tborder-bottom: none !important;\\n}\\n\\ntd {\\n\\tuser-select: none;\\n\\t// Make sure the cell colors don't apply to column headers\\n\\tcolor: var(--color-text-maxcontrast) !important;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list__column[data-v-76b6186a]{user-select:none;color:var(--color-text-maxcontrast) !important}.files-list__column--sortable[data-v-76b6186a]{cursor:pointer}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListHeader.vue\"],\"names\":[],\"mappings\":\"AACA,qCACC,gBAAA,CAEA,8CAAA,CAEA,+CACC,cAAA\",\"sourcesContent\":[\"\\n.files-list__column {\\n\\tuser-select: none;\\n\\t// Make sure the cell colors don't apply to column headers\\n\\tcolor: var(--color-text-maxcontrast) !important;\\n\\n\\t&--sortable {\\n\\t\\tcursor: pointer;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list__row-actions-batch[data-v-03e57b1e]{flex:1 1 100% !important}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper{width:100%}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper span.button-vue__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListHeaderActions.vue\"],\"names\":[],\"mappings\":\"AACA,gDACC,wBAAA,CAGA,qEACC,UAAA,CACA,2FACC,eAAA,CACA,sBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n.files-list__row-actions-batch {\\n\\tflex: 1 1 100% !important;\\n\\n\\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\\n\\t::v-deep .button-vue__wrapper {\\n\\t\\twidth: 100%;\\n\\t\\tspan.button-vue__text {\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list__column-sort-button{margin:0 calc(var(--cell-margin)*-1);padding:0 4px 0 16px !important}.files-list__column-sort-button .button-vue__wrapper{flex-direction:row-reverse;width:100%}.files-list__column-sort-button .button-vue__icon{transition-timing-function:linear;transition-duration:.1s;transition-property:opacity;opacity:0}.files-list__column-sort-button .button-vue__text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__column-sort-button--active .button-vue__icon,.files-list__column-sort-button:hover .button-vue__icon,.files-list__column-sort-button:focus .button-vue__icon,.files-list__column-sort-button:active .button-vue__icon{opacity:1 !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListHeaderButton.vue\"],\"names\":[],\"mappings\":\"AACA,gCAEC,oCAAA,CAEA,+BAAA,CAGA,qDACC,0BAAA,CAGA,UAAA,CAGD,kDACC,iCAAA,CACA,uBAAA,CACA,2BAAA,CACA,SAAA,CAID,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAOA,mOACC,oBAAA\",\"sourcesContent\":[\"\\n.files-list__column-sort-button {\\n\\t// Compensate for cells margin\\n\\tmargin: 0 calc(var(--cell-margin) * -1);\\n\\t// Reverse padding\\n\\tpadding: 0 4px 0 16px !important;\\n\\n\\t// Icon after text\\n\\t.button-vue__wrapper {\\n\\t\\tflex-direction: row-reverse;\\n\\t\\t// Take max inner width for text overflow ellipsis\\n\\t\\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.button-vue__icon {\\n\\t\\ttransition-timing-function: linear;\\n\\t\\ttransition-duration: .1s;\\n\\t\\ttransition-property: opacity;\\n\\t\\topacity: 0;\\n\\t}\\n\\n\\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\\n\\t.button-vue__text {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\n\\t&--active,\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\t.button-vue__icon {\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list[data-v-640a8bb8]{--row-height: 55px;--cell-margin: 14px;--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);--checkbox-size: 24px;--clickable-area: 44px;--icon-preview-size: 32px;display:block;overflow:auto;height:100%}.files-list[data-v-640a8bb8] tbody,.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot{display:flex;flex-direction:column;width:100%;position:relative}.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot[role=thead]{position:sticky;z-index:10;top:0;height:var(--row-height);background-color:var(--color-main-background)}.files-list[data-v-640a8bb8] tr{position:absolute;display:flex;align-items:center;width:100%;border-bottom:1px solid var(--color-border)}.files-list[data-v-640a8bb8] td,.files-list[data-v-640a8bb8] th{display:flex;align-items:center;flex:0 0 auto;justify-content:left;width:var(--row-height);height:var(--row-height);margin:0;padding:0;color:var(--color-text-maxcontrast);border:none}.files-list[data-v-640a8bb8] td span,.files-list[data-v-640a8bb8] th span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list[data-v-640a8bb8] .files-list__row-checkbox{justify-content:center}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch label.checkbox-radio-switch__label{width:var(--clickable-area);height:var(--clickable-area);margin:0;padding:calc((var(--clickable-area) - var(--checkbox-size))/2)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list[data-v-640a8bb8] .files-list__row-icon{position:relative;display:flex;overflow:visible;align-items:center;flex:0 0 var(--icon-preview-size);justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list[data-v-640a8bb8] .files-list__row-icon>span{justify-content:flex-start}.files-list[data-v-640a8bb8] .files-list__row-icon>span:not(.files-list__row-icon-favorite) svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list[data-v-640a8bb8] .files-list__row-icon-preview{overflow:hidden;width:var(--icon-preview-size);height:var(--icon-preview-size);border-radius:var(--border-radius);background-repeat:no-repeat;background-position:center;background-size:contain}.files-list[data-v-640a8bb8] .files-list__row-icon-favorite{position:absolute;top:4px;right:-8px;color:#fc0}.files-list[data-v-640a8bb8] .files-list__row-name{overflow:hidden;flex:1 1 auto}.files-list[data-v-640a8bb8] .files-list__row-name a{display:flex;align-items:center;width:100%;height:100%}.files-list[data-v-640a8bb8] .files-list__row-name a:focus .files-list__row-name-text,.files-list[data-v-640a8bb8] .files-list__row-name a:focus-visible .files-list__row-name-text{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list[data-v-640a8bb8] .files-list__row-name .files-list__row-name-text{padding:5px 10px;margin-left:-10px}.files-list[data-v-640a8bb8] .files-list__row-actions{width:auto}.files-list[data-v-640a8bb8] .files-list__row-actions~td,.files-list[data-v-640a8bb8] .files-list__row-actions~th{margin:0 var(--cell-margin)}.files-list[data-v-640a8bb8] .files-list__row-actions button .button-vue__text{font-weight:normal}.files-list[data-v-640a8bb8] .files-list__row-actions button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list[data-v-640a8bb8] .files-list__row-size{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list[data-v-640a8bb8] .files-list__row-column-custom{width:calc(var(--row-height)*2)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListVirtual.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,kBAAA,CACA,mBAAA,CAEA,wEAAA,CACA,qBAAA,CACA,sBAAA,CACA,yBAAA,CAEA,aAAA,CACA,aAAA,CACA,WAAA,CAIC,4FACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,iBAAA,CAID,qEAEC,eAAA,CACA,UAAA,CACA,KAAA,CACA,wBAAA,CACA,6CAAA,CAGD,gCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,2CAAA,CAGD,gEACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,0EACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,uDACC,sBAAA,CACA,8EACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,iHACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,2GACC,mBAAA,CAKH,mDACC,iBAAA,CACA,YAAA,CACA,gBAAA,CACA,kBAAA,CAEA,iCAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,wDACC,0BAAA,CAGD,gGACC,8BAAA,CACA,+BAAA,CAGD,2DACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAGD,4DACC,iBAAA,CACA,OAAA,CACA,UAAA,CACA,UAAA,CAIF,mDAEC,eAAA,CAEA,aAAA,CAEA,qDACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,oLAEC,mDAAA,CACA,kBAAA,CAIF,8EAEC,gBAAA,CACA,iBAAA,CAIF,sDACC,UAAA,CAGA,kHAEC,2BAAA,CAIA,+EAEC,kBAAA,CAED,6GAEC,mCAAA,CAKH,mDAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,mFACC,+BAAA,CACA,wGACC,kBAAA,CAKH,4DACC,+BAAA\",\"sourcesContent\":[\"\\n.files-list {\\n\\t--row-height: 55px;\\n\\t--cell-margin: 14px;\\n\\n\\t--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);\\n\\t--checkbox-size: 24px;\\n\\t--clickable-area: 44px;\\n\\t--icon-preview-size: 32px;\\n\\n\\tdisplay: block;\\n\\toverflow: auto;\\n\\theight: 100%;\\n\\n\\t&::v-deep {\\n\\t\\t// Table head, body and footer\\n\\t\\ttbody, .vue-recycle-scroller__slot {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\t// Necessary for virtual scrolling absolute\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\n\\t\\t// Table header\\n\\t\\t.vue-recycle-scroller__slot[role='thead'] {\\n\\t\\t\\t// Pinned on top when scrolling\\n\\t\\t\\tposition: sticky;\\n\\t\\t\\tz-index: 10;\\n\\t\\t\\ttop: 0;\\n\\t\\t\\theight: var(--row-height);\\n\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t}\\n\\n\\t\\ttr {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\t}\\n\\n\\t\\ttd, th {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tflex: 0 0 auto;\\n\\t\\t\\tjustify-content: left;\\n\\t\\t\\twidth: var(--row-height);\\n\\t\\t\\theight: var(--row-height);\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\tborder: none;\\n\\n\\t\\t\\t// Columns should try to add any text\\n\\t\\t\\t// node wrapped in a span. That should help\\n\\t\\t\\t// with the ellipsis on overflow.\\n\\t\\t\\tspan {\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-checkbox {\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\t.checkbox-radio-switch {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\tjustify-content: center;\\n\\n\\t\\t\\t\\t--icon-size: var(--checkbox-size);\\n\\n\\t\\t\\t\\tlabel.checkbox-radio-switch__label {\\n\\t\\t\\t\\t\\twidth: var(--clickable-area);\\n\\t\\t\\t\\t\\theight: var(--clickable-area);\\n\\t\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t\\t\\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t.checkbox-radio-switch__icon {\\n\\t\\t\\t\\t\\tmargin: 0 !important;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-icon {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\toverflow: visible;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\t// No shrinking or growing allowed\\n\\t\\t\\tflex: 0 0 var(--icon-preview-size);\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\twidth: var(--icon-preview-size);\\n\\t\\t\\theight: 100%;\\n\\t\\t\\t// Show same padding as the checkbox right padding for visual balance\\n\\t\\t\\tmargin-right: var(--checkbox-padding);\\n\\t\\t\\tcolor: var(--color-primary-element);\\n\\n\\t\\t\\t& > span {\\n\\t\\t\\t\\tjustify-content: flex-start;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&> span:not(.files-list__row-icon-favorite) svg {\\n\\t\\t\\t\\twidth: var(--icon-preview-size);\\n\\t\\t\\t\\theight: var(--icon-preview-size);\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-preview {\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\twidth: var(--icon-preview-size);\\n\\t\\t\\t\\theight: var(--icon-preview-size);\\n\\t\\t\\t\\tborder-radius: var(--border-radius);\\n\\t\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\t\\t// Center and contain the preview\\n\\t\\t\\t\\tbackground-position: center;\\n\\t\\t\\t\\tbackground-size: contain;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-favorite {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: 4px;\\n\\t\\t\\t\\tright: -8px;\\n\\t\\t\\t\\tcolor: #ffcc00;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-name {\\n\\t\\t\\t// Prevent link from overflowing\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\t// Take as much space as possible\\n\\t\\t\\tflex: 1 1 auto;\\n\\n\\t\\t\\ta {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\talign-items: center;\\n\\t\\t\\t\\t// Fill cell height and width\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\theight: 100%;\\n\\n\\t\\t\\t\\t// Keyboard indicator a11y\\n\\t\\t\\t\\t&:focus .files-list__row-name-text,\\n\\t\\t\\t\\t&:focus-visible .files-list__row-name-text {\\n\\t\\t\\t\\t\\toutline: 2px solid var(--color-main-text) !important;\\n\\t\\t\\t\\t\\tborder-radius: 20px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t.files-list__row-name-text {\\n\\t\\t\\t\\t// Make some space for the outline\\n\\t\\t\\t\\tpadding: 5px 10px;\\n\\t\\t\\t\\tmargin-left: -10px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-actions {\\n\\t\\t\\twidth: auto;\\n\\n\\t\\t\\t// Add margin to all cells after the actions\\n\\t\\t\\t& ~ td,\\n\\t\\t\\t& ~ th {\\n\\t\\t\\t\\tmargin: 0 var(--cell-margin);\\n\\t\\t\\t}\\n\\n\\t\\t\\tbutton {\\n\\t\\t\\t\\t.button-vue__text {\\n\\t\\t\\t\\t\\t// Remove bold from default button styling\\n\\t\\t\\t\\t\\tfont-weight: normal;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t&:not(:hover, :focus, :active) .button-vue__wrapper {\\n\\t\\t\\t\\t\\t// Also apply color-text-maxcontrast to non-active button\\n\\t\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-size {\\n\\t\\t\\t// Right align text\\n\\t\\t\\tjustify-content: flex-end;\\n\\t\\t\\twidth: calc(var(--row-height) * 1.5);\\n\\t\\t\\t// opacity varies with the size\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\n\\t\\t\\t// Icon is before text since size is right aligned\\n\\t\\t\\t.files-list__column-sort-button {\\n\\t\\t\\t\\tpadding: 0 16px 0 4px !important;\\n\\t\\t\\t\\t.button-vue__wrapper {\\n\\t\\t\\t\\t\\tflex-direction: row;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-column-custom {\\n\\t\\t\\twidth: calc(var(--row-height) * 2);\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation-entry__settings-quota--not-unlimited[data-v-918797b2] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-918797b2]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/NavigationQuota.vue\"],\"names\":[],\"mappings\":\"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA\",\"sourcesContent\":[\"\\n// User storage stats display\\n.app-navigation-entry__settings-quota {\\n\\t// Align title with progress and icon\\n\\t&--not-unlimited::v-deep .app-navigation-entry__title {\\n\\t\\tmargin-top: -4px;\\n\\t}\\n\\n\\tprogress {\\n\\t\\tposition: absolute;\\n\\t\\tbottom: 10px;\\n\\t\\tmargin-left: 44px;\\n\\t\\twidth: calc(100% - 44px - 22px);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".template-picker__item[data-v-6c072a31]{display:flex}.template-picker__label[data-v-6c072a31]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-6c072a31],.template-picker__label *[data-v-6c072a31]{cursor:pointer;user-select:none}.template-picker__label[data-v-6c072a31]::before{display:none !important}.template-picker__preview[data-v-6c072a31]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-6c072a31]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-6c072a31]{display:flex}.template-picker__image[data-v-6c072a31]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-6c072a31]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-6c072a31]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/TemplatePreview.vue\"],\"names\":[],\"mappings\":\"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n\\n.template-picker {\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: flex;\\n\\t\\t// Align in the middle of the grid\\n\\t\\talign-items: center;\\n\\t\\tflex: 1 1;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&::before {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\t// Stretch so all entries are the same width\\n\\t\\tflex: 1 1;\\n\\t\\twidth: var(--width);\\n\\t\\tmin-height: var(--height);\\n\\t\\tmax-height: var(--height);\\n\\t\\tpadding: 0;\\n\\t\\tborder: var(--border) solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\n\\t\\tinput:checked + label > & {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&--failed {\\n\\t\\t\\t// Make sure to properly center fallback icon\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\t}\\n\\n\\t&__image {\\n\\t\\tmax-width: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n\\n\\t// Failed preview, fallback to mime icon\\n\\t&__preview--failed &__image {\\n\\t\\twidth: calc(var(--margin) * 8);\\n\\t\\t// Center mime icon\\n\\t\\tmargin: auto;\\n\\t\\tbackground-color: transparent !important;\\n\\n\\t\\tobject-fit: initial;\\n\\t}\\n\\n\\t&__title {\\n\\t\\toverflow: hidden;\\n\\t\\t// also count preview border\\n\\t\\tmax-width: calc(var(--width) + 2*2px);\\n\\t\\tpadding: var(--margin);\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-content[data-v-66068cbb]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-content[data-v-66068cbb]:not(.app-content--hidden)+#app-content{display:none}.files-list__header[data-v-66068cbb]{display:flex;align-content:center;flex:0 0;margin:4px 4px 4px 50px}.files-list__header>*[data-v-66068cbb]{flex:0 0}.files-list__refresh-icon[data-v-66068cbb]{flex:0 0 44px;width:44px;height:44px}.files-list__loading-icon[data-v-66068cbb]{margin:auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/FilesList.vue\"],\"names\":[],\"mappings\":\"AACA,8BAEC,YAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAIA,qEACC,YAAA,CAQD,qCACC,YAAA,CACA,oBAAA,CAEA,QAAA,CAEA,uBAAA,CACA,uCAGC,QAAA,CAGF,2CACC,aAAA,CACA,UAAA,CACA,WAAA,CAED,2CACC,WAAA\",\"sourcesContent\":[\"\\n.app-content {\\n\\t// Virtual list needs to be full height and is scrollable\\n\\tdisplay: flex;\\n\\toverflow: hidden;\\n\\tflex-direction: column;\\n\\tmax-height: 100%;\\n\\n\\t// TODO: remove after all legacy views are migrated\\n\\t// Hides the legacy app-content if shown view is not legacy\\n\\t&:not(&--hidden)::v-deep + #app-content {\\n\\t\\tdisplay: none;\\n\\t}\\n}\\n\\n$margin: 4px;\\n$navigationToggleSize: 50px;\\n\\n.files-list {\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\talign-content: center;\\n\\t\\t// Do not grow or shrink (vertically)\\n\\t\\tflex: 0 0;\\n\\t\\t// Align with the navigation toggle icon\\n\\t\\tmargin: $margin $margin $margin $navigationToggleSize;\\n\\t\\t> * {\\n\\t\\t\\t// Do not grow or shrink (horizontally)\\n\\t\\t\\t// Only the breadcrumbs shrinks\\n\\t\\t\\tflex: 0 0;\\n\\t\\t}\\n\\t}\\n\\t&__refresh-icon {\\n\\t\\tflex: 0 0 44px;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\t&__loading-icon {\\n\\t\\tmargin: auto;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation[data-v-657a978e] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-657a978e]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-657a978e]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Navigation.vue\"],\"names\":[],\"mappings\":\"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA\",\"sourcesContent\":[\"\\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\\n.app-navigation::v-deep .app-navigation-entry-icon {\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: center;\\n}\\n\\n.app-navigation > ul.app-navigation__list {\\n\\t// Use flex gap value for more elegant spacing\\n\\tpadding-bottom: var(--default-grid-baseline, 4px);\\n}\\n\\n.app-navigation-entry__settings {\\n\\theight: auto !important;\\n\\toverflow: hidden !important;\\n\\tpadding-top: 0 !important;\\n\\t// Prevent shrinking or growing\\n\\tflex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".setting-link[data-v-76ca5d1f]:hover{text-decoration:underline}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Settings.vue\"],\"names\":[],\"mappings\":\"AACA,qCACC,yBAAA\",\"sourcesContent\":[\"\\n.setting-link:hover {\\n\\ttext-decoration: underline;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".templates-picker__form[data-v-715b4161]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-715b4161]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-715b4161]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-715b4161]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-715b4161],.templates-picker__buttons input[type=submit][data-v-715b4161]{height:44px}.templates-picker[data-v-715b4161] .modal-container{position:relative}.templates-picker__loading[data-v-715b4161]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/TemplatePicker.vue\"],\"names\":[],\"mappings\":\"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA\",\"sourcesContent\":[\"\\n.templates-picker {\\n\\t&__form {\\n\\t\\tpadding: calc(var(--margin) * 2);\\n\\t\\t// Will be handled by the buttons\\n\\t\\tpadding-bottom: 0;\\n\\n\\t\\th2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: var(--margin) 0 calc(var(--margin) * 2);\\n\\t\\t}\\n\\t}\\n\\n\\t&__list {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-gap: calc(var(--margin) * 2);\\n\\t\\tgrid-auto-columns: 1fr;\\n\\t\\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\\n\\t\\tmax-width: calc(var(--fullwidth) * 6);\\n\\t\\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\\n\\t\\t// Make sure all rows are the same height\\n\\t\\tgrid-auto-rows: 1fr;\\n\\t\\t// Center the columns set\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: calc(var(--margin) * 2) var(--margin);\\n\\t\\tposition: sticky;\\n\\t\\tbottom: 0;\\n\\t\\tbackground-image: linear-gradient(0, var(--gradient-main-background));\\n\\n\\t\\tbutton, input[type='submit'] {\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Make sure we're relative for the loading emptycontent on top\\n\\t::v-deep .modal-container {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__loading {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmargin: 0;\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n/* @keyframes preview-gradient-fade {\\n 0% {\\n opacity: 1;\\n }\\n 50% {\\n opacity: 0.5;\\n }\\n 100% {\\n opacity: 1;\\n }\\n} */\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FileEntry.vue\"],\"names\":[],\"mappings\":\";AA6mBA;;;;;;;;;;GAUA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\\n -\\n - @author John Molakvoæ <skjnldsv@protonmail.com>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<Fragment>\\n\\t\\t<td class=\\\"files-list__row-checkbox\\\">\\n\\t\\t\\t<NcCheckboxRadioSwitch v-if=\\\"active\\\"\\n\\t\\t\\t\\t:aria-label=\\\"t('files', 'Select the row for {displayName}', { displayName })\\\"\\n\\t\\t\\t\\t:checked=\\\"selectedFiles\\\"\\n\\t\\t\\t\\t:value=\\\"fileid\\\"\\n\\t\\t\\t\\tname=\\\"selectedFiles\\\"\\n\\t\\t\\t\\t@update:checked=\\\"onSelectionChange\\\" />\\n\\t\\t</td>\\n\\n\\t\\t<!-- Link to file -->\\n\\t\\t<td class=\\\"files-list__row-name\\\">\\n\\t\\t\\t<a ref=\\\"name\\\" v-bind=\\\"linkTo\\\" @click=\\\"execDefaultAction\\\">\\n\\t\\t\\t\\t<!-- Icon or preview -->\\n\\t\\t\\t\\t<span class=\\\"files-list__row-icon\\\">\\n\\t\\t\\t\\t\\t<FolderIcon v-if=\\\"source.type === 'folder'\\\" />\\n\\n\\t\\t\\t\\t\\t<!-- Decorative image, should not be aria documented -->\\n\\t\\t\\t\\t\\t<span v-else-if=\\\"previewUrl && !backgroundFailed\\\"\\n\\t\\t\\t\\t\\t\\tref=\\\"previewImg\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"files-list__row-icon-preview\\\"\\n\\t\\t\\t\\t\\t\\t:style=\\\"{ backgroundImage }\\\" />\\n\\n\\t\\t\\t\\t\\t<span v-else-if=\\\"mimeIconUrl\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"files-list__row-icon-preview files-list__row-icon-preview--mime\\\"\\n\\t\\t\\t\\t\\t\\t:style=\\\"{ backgroundImage: mimeIconUrl }\\\" />\\n\\n\\t\\t\\t\\t\\t<FileIcon v-else />\\n\\n\\t\\t\\t\\t\\t<!-- Favorite icon -->\\n\\t\\t\\t\\t\\t<span v-if=\\\"isFavorite\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"files-list__row-icon-favorite\\\"\\n\\t\\t\\t\\t\\t\\t:aria-label=\\\"t('files', 'Favorite')\\\">\\n\\t\\t\\t\\t\\t\\t<StarIcon aria-hidden=\\\"true\\\" :size=\\\"20\\\" />\\n\\t\\t\\t\\t\\t</span>\\n\\t\\t\\t\\t</span>\\n\\n\\t\\t\\t\\t<!-- File name -->\\n\\t\\t\\t\\t<span class=\\\"files-list__row-name-text\\\">{{ displayName }}</span>\\n\\t\\t\\t</a>\\n\\t\\t</td>\\n\\n\\t\\t<!-- Actions -->\\n\\t\\t<td :class=\\\"`files-list__row-actions-${uniqueId}`\\\" class=\\\"files-list__row-actions\\\">\\n\\t\\t\\t<!-- Inline actions -->\\n\\t\\t\\t<!-- TODO: implement CustomElementRender -->\\n\\n\\t\\t\\t<!-- Menu actions -->\\n\\t\\t\\t<NcActions v-if=\\\"active\\\"\\n\\t\\t\\t\\tref=\\\"actionsMenu\\\"\\n\\t\\t\\t\\t:boundaries-element=\\\"boundariesElement\\\"\\n\\t\\t\\t\\t:container=\\\"boundariesElement\\\"\\n\\t\\t\\t\\t:disabled=\\\"source._loading\\\"\\n\\t\\t\\t\\t:force-title=\\\"true\\\"\\n\\t\\t\\t\\t:force-menu=\\\"true\\\"\\n\\t\\t\\t\\t:inline=\\\"enabledInlineActions.length\\\"\\n\\t\\t\\t\\t:open.sync=\\\"openedMenu\\\">\\n\\t\\t\\t\\t<NcActionButton v-for=\\\"action in enabledMenuActions\\\"\\n\\t\\t\\t\\t\\t:key=\\\"action.id\\\"\\n\\t\\t\\t\\t\\t:class=\\\"'files-list__row-action-' + action.id\\\"\\n\\t\\t\\t\\t\\t@click=\\\"onActionClick(action)\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcLoadingIcon v-if=\\\"loading === action.id\\\" :size=\\\"18\\\" />\\n\\t\\t\\t\\t\\t\\t<CustomSvgIconRender v-else :svg=\\\"action.iconSvgInline([source], currentView)\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t\\t{{ action.displayName([source], currentView) }}\\n\\t\\t\\t\\t</NcActionButton>\\n\\t\\t\\t</NcActions>\\n\\t\\t</td>\\n\\n\\t\\t<!-- Size -->\\n\\t\\t<td v-if=\\\"isSizeAvailable\\\"\\n\\t\\t\\t:style=\\\"{ opacity: sizeOpacity }\\\"\\n\\t\\t\\tclass=\\\"files-list__row-size\\\"\\n\\t\\t\\t@click=\\\"openDetailsIfAvailable\\\">\\n\\t\\t\\t<span>{{ size }}</span>\\n\\t\\t</td>\\n\\n\\t\\t<!-- View columns -->\\n\\t\\t<td v-for=\\\"column in columns\\\"\\n\\t\\t\\t:key=\\\"column.id\\\"\\n\\t\\t\\t:class=\\\"`files-list__row-${currentView?.id}-${column.id}`\\\"\\n\\t\\t\\tclass=\\\"files-list__row-column-custom\\\"\\n\\t\\t\\t@click=\\\"openDetailsIfAvailable\\\">\\n\\t\\t\\t<CustomElementRender v-if=\\\"active\\\"\\n\\t\\t\\t\\t:current-view=\\\"currentView\\\"\\n\\t\\t\\t\\t:render=\\\"column.render\\\"\\n\\t\\t\\t\\t:source=\\\"source\\\" />\\n\\t\\t</td>\\n\\t</Fragment>\\n</template>\\n\\n<script lang='ts'>\\nimport { debounce } from 'debounce'\\nimport { formatFileSize } from '@nextcloud/files'\\nimport { Fragment } from 'vue-frag'\\nimport { join } from 'path'\\nimport { showError, showSuccess } from '@nextcloud/dialogs'\\nimport { translate } from '@nextcloud/l10n'\\nimport CancelablePromise from 'cancelable-promise'\\nimport FileIcon from 'vue-material-design-icons/File.vue'\\nimport FolderIcon from 'vue-material-design-icons/Folder.vue'\\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\\nimport StarIcon from 'vue-material-design-icons/Star.vue'\\nimport Vue from 'vue'\\n\\nimport { ACTION_DETAILS } from '../actions/sidebarAction.ts'\\nimport { getFileActions } from '../services/FileAction.ts'\\nimport { hashCode } from '../utils/hashUtils.ts'\\nimport { isCachedPreview } from '../services/PreviewService.ts'\\nimport { useActionsMenuStore } from '../store/actionsmenu.ts'\\nimport { useFilesStore } from '../store/files.ts'\\nimport { useKeyboardStore } from '../store/keyboard.ts'\\nimport { useSelectionStore } from '../store/selection.ts'\\nimport { useUserConfigStore } from '../store/userconfig.ts'\\nimport CustomElementRender from './CustomElementRender.vue'\\nimport CustomSvgIconRender from './CustomSvgIconRender.vue'\\nimport logger from '../logger.js'\\n\\n// The registered actions list\\nconst actions = getFileActions()\\n\\nexport default Vue.extend({\\n\\tname: 'FileEntry',\\n\\n\\tcomponents: {\\n\\t\\tCustomElementRender,\\n\\t\\tCustomSvgIconRender,\\n\\t\\tFileIcon,\\n\\t\\tFolderIcon,\\n\\t\\tFragment,\\n\\t\\tNcActionButton,\\n\\t\\tNcActions,\\n\\t\\tNcCheckboxRadioSwitch,\\n\\t\\tNcLoadingIcon,\\n\\t\\tStarIcon,\\n\\t},\\n\\n\\tprops: {\\n\\t\\tactive: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: false,\\n\\t\\t},\\n\\t\\tisSizeAvailable: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: false,\\n\\t\\t},\\n\\t\\tsource: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tindex: {\\n\\t\\t\\ttype: Number,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tnodes: {\\n\\t\\t\\ttype: Array,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tfilesListWidth: {\\n\\t\\t\\ttype: Number,\\n\\t\\t\\tdefault: 0,\\n\\t\\t},\\n\\t},\\n\\n\\tsetup() {\\n\\t\\tconst actionsMenuStore = useActionsMenuStore()\\n\\t\\tconst filesStore = useFilesStore()\\n\\t\\tconst keyboardStore = useKeyboardStore()\\n\\t\\tconst selectionStore = useSelectionStore()\\n\\t\\tconst userConfigStore = useUserConfigStore()\\n\\t\\treturn {\\n\\t\\t\\tactionsMenuStore,\\n\\t\\t\\tfilesStore,\\n\\t\\t\\tkeyboardStore,\\n\\t\\t\\tselectionStore,\\n\\t\\t\\tuserConfigStore,\\n\\t\\t}\\n\\t},\\n\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tbackgroundFailed: false,\\n\\t\\t\\tbackgroundImage: '',\\n\\t\\t\\tboundariesElement: document.querySelector('.app-content > .files-list'),\\n\\t\\t\\tloading: '',\\n\\t\\t}\\n\\t},\\n\\n\\tcomputed: {\\n\\t\\tuserConfig() {\\n\\t\\t\\treturn this.userConfigStore.userConfig\\n\\t\\t},\\n\\n\\t\\tcurrentView() {\\n\\t\\t\\treturn this.$navigation.active\\n\\t\\t},\\n\\t\\tcolumns() {\\n\\t\\t\\t// Hide columns if the list is too small\\n\\t\\t\\tif (this.filesListWidth < 512) {\\n\\t\\t\\t\\treturn []\\n\\t\\t\\t}\\n\\t\\t\\treturn this.currentView?.columns || []\\n\\t\\t},\\n\\n\\t\\tdir() {\\n\\t\\t\\t// Remove any trailing slash but leave root slash\\n\\t\\t\\treturn (this.$route?.query?.dir || '/').replace(/^(.+)\\\\/$/, '$1')\\n\\t\\t},\\n\\t\\tfileid() {\\n\\t\\t\\treturn this.source?.fileid?.toString?.()\\n\\t\\t},\\n\\t\\tdisplayName() {\\n\\t\\t\\treturn this.source.attributes.displayName\\n\\t\\t\\t\\t|| this.source.basename\\n\\t\\t},\\n\\n\\t\\tsize() {\\n\\t\\t\\tconst size = parseInt(this.source.size, 10) || 0\\n\\t\\t\\tif (typeof size !== 'number' || size < 0) {\\n\\t\\t\\t\\treturn this.t('files', 'Pending')\\n\\t\\t\\t}\\n\\t\\t\\treturn formatFileSize(size, true)\\n\\t\\t},\\n\\t\\tsizeOpacity() {\\n\\t\\t\\tconst size = parseInt(this.source.size, 10) || 0\\n\\t\\t\\tif (!size || size < 0) {\\n\\t\\t\\t\\treturn 1\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Whatever theme is active, the contrast will pass WCAG AA\\n\\t\\t\\t// with color main text over main background and an opacity of 0.7\\n\\t\\t\\tconst minOpacity = 0.7\\n\\t\\t\\tconst maxOpacitySize = 10 * 1024 * 1024\\n\\t\\t\\treturn minOpacity + (1 - minOpacity) * Math.pow((this.source.size / maxOpacitySize), 2)\\n\\t\\t},\\n\\n\\t\\tlinkTo() {\\n\\t\\t\\tif (this.source.type === 'folder') {\\n\\t\\t\\t\\tconst to = { ...this.$route, query: { dir: join(this.dir, this.source.basename) } }\\n\\t\\t\\t\\treturn {\\n\\t\\t\\t\\t\\tis: 'router-link',\\n\\t\\t\\t\\t\\ttitle: this.t('files', 'Open folder {name}', { name: this.displayName }),\\n\\t\\t\\t\\t\\tto,\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\tconst action = this.enabledDefaultActions[0]\\n\\t\\t\\t\\tconst displayName = action.displayName([this.source], this.currentView)\\n\\t\\t\\t\\treturn {\\n\\t\\t\\t\\t\\ttitle: displayName,\\n\\t\\t\\t\\t\\trole: 'button',\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn {\\n\\t\\t\\t\\thref: this.source.source,\\n\\t\\t\\t\\t// TODO: Use first action title ?\\n\\t\\t\\t\\ttitle: this.t('files', 'Download file {name}', { name: this.displayName }),\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tselectedFiles() {\\n\\t\\t\\treturn this.selectionStore.selected\\n\\t\\t},\\n\\t\\tisSelected() {\\n\\t\\t\\treturn this.selectedFiles.includes(this.source?.fileid?.toString?.())\\n\\t\\t},\\n\\n\\t\\tcropPreviews() {\\n\\t\\t\\treturn this.userConfig.crop_image_previews\\n\\t\\t},\\n\\t\\tpreviewUrl() {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tconst url = new URL(window.location.origin + this.source.attributes.previewUrl)\\n\\t\\t\\t\\t// Request tiny previews\\n\\t\\t\\t\\turl.searchParams.set('x', '32')\\n\\t\\t\\t\\turl.searchParams.set('y', '32')\\n\\t\\t\\t\\t// Handle cropping\\n\\t\\t\\t\\turl.searchParams.set('a', this.cropPreviews === true ? '0' : '1')\\n\\t\\t\\t\\treturn url.href\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\treturn null\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tmimeIconUrl() {\\n\\t\\t\\tconst mimeType = this.source.mime || 'application/octet-stream'\\n\\t\\t\\tconst mimeIconUrl = window.OC?.MimeType?.getIconUrl?.(mimeType)\\n\\t\\t\\tif (mimeIconUrl) {\\n\\t\\t\\t\\treturn `url(${mimeIconUrl})`\\n\\t\\t\\t}\\n\\t\\t\\treturn ''\\n\\t\\t},\\n\\n\\t\\tenabledActions() {\\n\\t\\t\\treturn actions\\n\\t\\t\\t\\t.filter(action => !action.enabled || action.enabled([this.source], this.currentView))\\n\\t\\t\\t\\t.sort((a, b) => (a.order || 0) - (b.order || 0))\\n\\t\\t},\\n\\t\\tenabledInlineActions() {\\n\\t\\t\\tif (this.filesListWidth < 768) {\\n\\t\\t\\t\\treturn []\\n\\t\\t\\t}\\n\\t\\t\\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\\n\\t\\t},\\n\\t\\tenabledMenuActions() {\\n\\t\\t\\tif (this.filesListWidth < 768) {\\n\\t\\t\\t\\t// If we have a default action, do not render the first one\\n\\t\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\t\\treturn this.enabledActions.slice(1)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn this.enabledActions\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst actions = [\\n\\t\\t\\t\\t...this.enabledInlineActions,\\n\\t\\t\\t\\t...this.enabledActions.filter(action => !action.inline),\\n\\t\\t\\t]\\n\\n\\t\\t\\t// If we have a default action, do not render the first one\\n\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\treturn actions.slice(1)\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn actions\\n\\t\\t},\\n\\t\\tenabledDefaultActions() {\\n\\t\\t\\treturn [\\n\\t\\t\\t\\t...this.enabledActions.filter(action => action.default),\\n\\t\\t\\t]\\n\\t\\t},\\n\\t\\topenedMenu: {\\n\\t\\t\\tget() {\\n\\t\\t\\t\\treturn this.actionsMenuStore.opened === this.uniqueId\\n\\t\\t\\t},\\n\\t\\t\\tset(opened) {\\n\\t\\t\\t\\tthis.actionsMenuStore.opened = opened ? this.uniqueId : null\\n\\t\\t\\t},\\n\\t\\t},\\n\\n\\t\\tuniqueId() {\\n\\t\\t\\treturn hashCode(this.source.source)\\n\\t\\t},\\n\\n\\t\\tisFavorite() {\\n\\t\\t\\treturn this.source.attributes.favorite === 1\\n\\t\\t},\\n\\t},\\n\\n\\twatch: {\\n\\t\\tactive(active, before) {\\n\\t\\t\\tif (active === false && before === true) {\\n\\t\\t\\t\\tthis.resetState()\\n\\n\\t\\t\\t\\t// When the row is not active anymore\\n\\t\\t\\t\\t// remove the display from the row to prevent\\n\\t\\t\\t\\t// keyboard interaction with it.\\n\\t\\t\\t\\tthis.$el.parentNode.style.display = 'none'\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Restore default tabindex\\n\\t\\t\\tthis.$el.parentNode.style.display = ''\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * When the source changes, reset the preview\\n\\t\\t * and fetch the new one.\\n\\t\\t */\\n\\t\\tpreviewUrl() {\\n\\t\\t\\tthis.clearImg()\\n\\t\\t\\tthis.debounceIfNotCached()\\n\\t\\t},\\n\\t},\\n\\n\\t/**\\n\\t * The row is mounted once and reused as we scroll.\\n\\t */\\n\\tmounted() {\\n\\t\\t// ⚠ Init the debounce function on mount and\\n\\t\\t// not when the module is imported to\\n\\t\\t// avoid sharing between recycled components\\n\\t\\tthis.debounceGetPreview = debounce(function() {\\n\\t\\t\\tthis.fetchAndApplyPreview()\\n\\t\\t}, 150, false)\\n\\n\\t\\t// Fetch the preview on init\\n\\t\\tthis.debounceIfNotCached()\\n\\n\\t\\t// Right click watcher on tr\\n\\t\\tthis.$el.parentNode?.addEventListener?.('contextmenu', this.onRightClick)\\n\\t},\\n\\n\\tbeforeDestroy() {\\n\\t\\tthis.resetState()\\n\\t},\\n\\n\\tmethods: {\\n\\t\\tasync debounceIfNotCached() {\\n\\t\\t\\tif (!this.previewUrl) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Check if we already have this preview cached\\n\\t\\t\\tconst isCached = await isCachedPreview(this.previewUrl)\\n\\t\\t\\tif (isCached) {\\n\\t\\t\\t\\tthis.backgroundImage = `url(${this.previewUrl})`\\n\\t\\t\\t\\tthis.backgroundFailed = false\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// We don't have this preview cached or it expired, requesting it\\n\\t\\t\\tthis.debounceGetPreview()\\n\\t\\t},\\n\\n\\t\\tfetchAndApplyPreview() {\\n\\t\\t\\t// Ignore if no preview\\n\\t\\t\\tif (!this.previewUrl) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If any image is being processed, reset it\\n\\t\\t\\tif (this.previewPromise) {\\n\\t\\t\\t\\tthis.clearImg()\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Store the promise to be able to cancel it\\n\\t\\t\\tthis.previewPromise = new CancelablePromise((resolve, reject, onCancel) => {\\n\\t\\t\\t\\tconst img = new Image()\\n\\t\\t\\t\\t// If active, load the preview with higher priority\\n\\t\\t\\t\\timg.fetchpriority = this.active ? 'high' : 'auto'\\n\\t\\t\\t\\timg.onload = () => {\\n\\t\\t\\t\\t\\tthis.backgroundImage = `url(${this.previewUrl})`\\n\\t\\t\\t\\t\\tthis.backgroundFailed = false\\n\\t\\t\\t\\t\\tresolve(img)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg.onerror = () => {\\n\\t\\t\\t\\t\\tthis.backgroundFailed = true\\n\\t\\t\\t\\t\\treject(img)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg.src = this.previewUrl\\n\\n\\t\\t\\t\\t// Image loading has been canceled\\n\\t\\t\\t\\tonCancel(() => {\\n\\t\\t\\t\\t\\timg.onerror = null\\n\\t\\t\\t\\t\\timg.onload = null\\n\\t\\t\\t\\t\\timg.src = ''\\n\\t\\t\\t\\t})\\n\\t\\t\\t})\\n\\t\\t},\\n\\n\\t\\tresetState() {\\n\\t\\t\\t// Reset loading state\\n\\t\\t\\tthis.loading = ''\\n\\n\\t\\t\\t// Reset the preview\\n\\t\\t\\tthis.clearImg()\\n\\n\\t\\t\\t// Close menu\\n\\t\\t\\tthis.openedMenu = false\\n\\t\\t},\\n\\n\\t\\tclearImg() {\\n\\t\\t\\tthis.backgroundImage = ''\\n\\t\\t\\tthis.backgroundFailed = false\\n\\n\\t\\t\\tif (this.previewPromise) {\\n\\t\\t\\t\\tthis.previewPromise.cancel()\\n\\t\\t\\t\\tthis.previewPromise = null\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tasync onActionClick(action) {\\n\\t\\t\\tconst displayName = action.displayName([this.source], this.currentView)\\n\\t\\t\\ttry {\\n\\t\\t\\t\\t// Set the loading marker\\n\\t\\t\\t\\tthis.loading = action.id\\n\\t\\t\\t\\tVue.set(this.source, '_loading', true)\\n\\n\\t\\t\\t\\tconst success = await action.exec(this.source, this.currentView, this.dir)\\n\\n\\t\\t\\t\\t// If the action returns null, we stay silent\\n\\t\\t\\t\\tif (success === null) {\\n\\t\\t\\t\\t\\treturn\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (success) {\\n\\t\\t\\t\\t\\tshowSuccess(this.t('files', '\\\"{displayName}\\\" action executed successfully', { displayName }))\\n\\t\\t\\t\\t\\treturn\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tshowError(this.t('files', '\\\"{displayName}\\\" action failed', { displayName }))\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\tlogger.error('Error while executing action', { action, e })\\n\\t\\t\\t\\tshowError(this.t('files', '\\\"{displayName}\\\" action failed', { displayName }))\\n\\t\\t\\t} finally {\\n\\t\\t\\t\\t// Reset the loading marker\\n\\t\\t\\t\\tthis.loading = ''\\n\\t\\t\\t\\tVue.set(this.source, '_loading', false)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\texecDefaultAction(event) {\\n\\t\\t\\t// Do not execute the default action on the folder, navigate instead\\n\\t\\t\\tif (this.source.type === 'folder') {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\tevent.preventDefault()\\n\\t\\t\\t\\tevent.stopPropagation()\\n\\t\\t\\t\\t// Execute the first default action if any\\n\\t\\t\\t\\tthis.enabledDefaultActions[0].exec(this.source, this.currentView, this.dir)\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\topenDetailsIfAvailable(event) {\\n\\t\\t\\tconst detailsAction = this.enabledDefaultActions.find(action => action.id === ACTION_DETAILS)\\n\\t\\t\\tif (detailsAction) {\\n\\t\\t\\t\\tevent.preventDefault()\\n\\t\\t\\t\\tevent.stopPropagation()\\n\\t\\t\\t\\tdetailsAction.exec(this.source, this.currentView)\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tonSelectionChange(selection) {\\n\\t\\t\\tconst newSelectedIndex = this.index\\n\\t\\t\\tconst lastSelectedIndex = this.selectionStore.lastSelectedIndex\\n\\n\\t\\t\\t// Get the last selected and select all files in between\\n\\t\\t\\tif (this.keyboardStore?.shiftKey && lastSelectedIndex !== null) {\\n\\t\\t\\t\\tconst isAlreadySelected = this.selectedFiles.includes(this.fileid)\\n\\n\\t\\t\\t\\tconst start = Math.min(newSelectedIndex, lastSelectedIndex)\\n\\t\\t\\t\\tconst end = Math.max(lastSelectedIndex, newSelectedIndex)\\n\\n\\t\\t\\t\\tconst lastSelection = this.selectionStore.lastSelection\\n\\t\\t\\t\\tconst filesToSelect = this.nodes\\n\\t\\t\\t\\t\\t.map(file => file.fileid?.toString?.())\\n\\t\\t\\t\\t\\t.slice(start, end + 1)\\n\\n\\t\\t\\t\\t// If already selected, update the new selection _without_ the current file\\n\\t\\t\\t\\tconst selection = [...lastSelection, ...filesToSelect]\\n\\t\\t\\t\\t\\t.filter(fileId => !isAlreadySelected || fileId !== this.fileid)\\n\\n\\t\\t\\t\\tlogger.debug('Shift key pressed, selecting all files in between', { start, end, filesToSelect, isAlreadySelected })\\n\\t\\t\\t\\t// Keep previous lastSelectedIndex to be use for further shift selections\\n\\t\\t\\t\\tthis.selectionStore.set(selection)\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\tlogger.debug('Updating selection', { selection })\\n\\t\\t\\tthis.selectionStore.set(selection)\\n\\t\\t\\tthis.selectionStore.setLastIndex(newSelectedIndex)\\n\\t\\t},\\n\\n\\t\\t// Open the actions menu on right click\\n\\t\\tonRightClick(event) {\\n\\t\\t\\t// If already opened, fallback to default browser\\n\\t\\t\\tif (this.openedMenu) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If the clicked row is in the selection, open global menu\\n\\t\\t\\tconst isMoreThanOneSelected = this.selectedFiles.length > 1\\n\\t\\t\\tthis.actionsMenuStore.opened = this.isSelected && isMoreThanOneSelected ? 'global' : this.uniqueId\\n\\n\\t\\t\\t// Prevent any browser defaults\\n\\t\\t\\tevent.preventDefault()\\n\\t\\t\\tevent.stopPropagation()\\n\\t\\t},\\n\\n\\t\\tt: translate,\\n\\t\\tformatFileSize,\\n\\t},\\n})\\n</script>\\n\\n<style scoped lang='scss'>\\n/* Hover effect on tbody lines only */\\ntr {\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n}\\n\\n/* Preview not loaded animation effect */\\n.files-list__row-icon-preview:not([style*='background']) {\\n background: var(--color-loading-dark);\\n\\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\\n}\\n</style>\\n\\n<style>\\n/* @keyframes preview-gradient-fade {\\n 0% {\\n opacity: 1;\\n }\\n 50% {\\n opacity: 0.5;\\n }\\n 100% {\\n opacity: 1;\\n }\\n} */\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2181;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2181: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(9570)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getCurrentDirectory","_OCA","_OCA$Files","_OCA$Files$App","_OCA$Files$App$curren","currentDirInfo","OCA","Files","App","currentFileList","dirInfo","path","name","concat","replace","previewWidth","inheritAttrs","props","basename","type","String","required","checked","Boolean","default","fileid","Number","filename","previewUrl","hasPreview","mime","ratio","data","failedPreview","computed","nameWithoutExt","indexOf","split","slice","join","id","realPreviewUrl","mimeIcon","getCurrentUser","generateUrl","document","getElementById","value","pathSections","startsWith","relativePath","forEach","section","encodeURIComponent","encodeFilePath","OC","MimeType","getIconUrl","methods","onCheck","$emit","onFailure","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","domProps","on","_v","class","_s","components","NcEmptyContent","NcModal","TemplatePreview","logger","Object","loading","opened","provider","emptyTemplate","_this$provider","_this$provider2","t","mimetypes","selectedTemplate","templates","find","template","style","margin","width","border","Math","round","fetchedProvider","async","axios","generateOcsUrl","ocs","getTemplates","app","label","Error","length","onSubmit","close","currentDirectory","fileList","_this$provider3","_this$provider4","debug","extension","_this$selectedTemplat","_this$selectedTemplat2","fileInfo","filePath","templatePath","templateType","createFromTemplate","normalize","addAndFetchFileInfo","then","status","model","FileInfoModel","filesClient","fileAction","fileActions","getDefaultFileAction","PERMISSION_ALL","action","$file","findFileEl","dir","fileInfoModel","error","console","showError","$event","preventDefault","stopPropagation","apply","arguments","_b","_l","key","_e","getLoggerBuilder","setApp","detectUser","build","Vue","n","TemplatePickerRoot","createElement","body","appendChild","loadState","templatesPath","TemplatePicker","TemplatePickerView","propsData","$mount","window","addEventListener","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionLabel","actionHandler","initTemplatesFolder","removeMenuEntry","Plugins","register","index","newTemplatePlugin","open","response","copySystemTemplates","changeDirectory","template_path","FilesPlugin","subscribe","_ref","query","setFilter","FileAction","constructor","validateAction","_action","iconSvgInline","enabled","exec","execBatch","order","inline","renderInline","registerFileAction","_nc_fileactions","search","push","getFileActions","nodes","view","TrashCan","map","node","permissions","every","permission","Permission","source","emit","Promise","all","ACTION_DETAILS","InformationSvg","files","_window","_window$OCA","_window$OCA$Files","Sidebar","some","_node$root","root","_window2","_window2$OCA","_window2$OCA$Files","_window2$OCA$Files$Si","_window2$OCA$Files$Si2","call","useFilesStore","fileStore","defineStore","state","roots","getters","getNode","getNodes","ids","filter","getRoot","service","actions","updateNodes","reduce","acc","deleteNodes","setRoot","onDeletedNode","store","_initialized","usePathsStore","pathsStore","paths","getPath","addPath","payload","useSelectionStore","selected","lastSelection","lastSelectedIndex","set","selection","undefined","setLastIndex","reset","viewConfig","useViewConfigStore","getConfig","onUpdate","setSortingBy","update","toggleSortingDirection","newDirection","sorting_direction","viewConfigStore","Home","NcBreadcrumbs","NcBreadcrumb","setup","filesStore","currentView","$navigation","active","dirs","sections","to","$route","exact","getDirDisplayName","getNodeFromId","getFileIdFromPath","_this$currentView","_node$attributes","fileId","attributes","onClick","_to$query","ariaLabel","_section$to","_section$to$query","_setupProxy","nativeOn","scopedSlots","_u","fn","proxy","useActionsMenuStore","userConfig","show_hidden","crop_image_previews","useUserConfigStore","userConfigStore","render","Function","element","watch","$el","replaceWith","mounted","svg","innerHTML","sanitize","CustomElementRender","CustomSvgIconRender","FileIcon","FolderIcon","Fragment","NcActionButton","NcActions","NcCheckboxRadioSwitch","NcLoadingIcon","StarIcon","isSizeAvailable","Array","filesListWidth","actionsMenuStore","keyboardStore","altKey","ctrlKey","metaKey","shiftKey","onEvent","event","useKeyboardStore","selectionStore","backgroundFailed","backgroundImage","boundariesElement","querySelector","columns","_this$$route","_this$$route$query","_this$source","_this$source$fileid","_this$source$fileid$t","toString","size","parseInt","formatFileSize","sizeOpacity","pow","linkTo","is","title","enabledDefaultActions","role","href","selectedFiles","isSelected","_this$source2","_this$source2$fileid","_this$source2$fileid$","includes","cropPreviews","url","URL","location","origin","searchParams","e","mimeIconUrl","_window$OC","_window$OC$MimeType","_window$OC$MimeType$g","mimeType","enabledActions","sort","a","b","enabledInlineActions","_action$inline","enabledMenuActions","openedMenu","get","uniqueId","charCodeAt","isFavorite","favorite","before","resetState","parentNode","display","clearImg","debounceIfNotCached","_this$$el$parentNode","_this$$el$parentNode$","debounceGetPreview","debounce","fetchAndApplyPreview","onRightClick","beforeDestroy","caches","cache","match","previewPromise","CancelablePromise","resolve","reject","onCancel","img","Image","fetchpriority","onload","onerror","src","cancel","success","showSuccess","execDefaultAction","openDetailsIfAvailable","detailsAction","onSelectionChange","_this$keyboardStore","newSelectedIndex","isAlreadySelected","start","min","end","max","filesToSelect","file","_file$fileid","_file$fileid$toString","isMoreThanOneSelected","translate","ref","_loading","onActionClick","opacity","column","_vm$currentView","summary","currentFolder","_this$currentView2","totalSize","_this$currentFolder","total","classForColumn","_column$summary","created","fileListEl","$resizeObserver","ResizeObserver","entries","target","contentRect","observe","disconnect","mixins","filesListWidthMixin","selectedNodes","areSomeNodesLoading","inlineActions","selectionIds","results","result","failedIds","mapState","sortingMode","_this$getConfig","sorting_mode","defaultSortKey","isAscSorting","_this$getConfig2","toggleSortBy","MenuDown","MenuUp","NcButton","filesSortingMixin","mode","sortAriaLabel","direction","slot","FilesListHeaderButton","FilesListHeaderActions","selectAllBind","isNoneSelected","isSomeSelected","isAllSelected","indeterminate","onToggleAll","RecycleScroller","FileEntry","FilesListHeader","FilesListFooter","summaryFile","count","translatePlural","summaryFolder","slots","querySelectorAll","setAttribute","getFileId","item","caption","_defineProperty","isValidNavigation","isUniqueNavigation","_views","message","legacy","remove","findIndex","splice","views","setActive","_currentView","getContents","icon","isSvg","isValidColumn","emptyView","parent","sticky","expanded","BreadCrumbs","FilesListVirtual","NcAppContent","promise","dirContents","_this$currentFolder2","customColumn","_children","reverse","orderBy","v","isEmptyDir","isRefreshing","toPreviousDir","newView","oldView","fetchContent","newDir","oldDir","_this$$refs","_this$$refs$filesList","$refs","filesListVirtual","scrollTop","_this$currentView3","_this$promise","folder","contents","_vm$currentView2","directives","rawName","expression","ChartPie","NcAppNavigationItem","NcProgressBar","loadingStorageStats","storageStats","storageStatsTitle","_this$storageStats","_this$storageStats2","_this$storageStats3","usedQuotaByte","used","quotaByte","quota","storageStatsTooltip","relative","beforeMount","setInterval","throttleUpdateStorageStats","debounceUpdateStorageStats","updateStorageStats","throttle","_response$data","el","Clipboard","NcAppSettingsDialog","NcAppSettingsSection","NcInputField","Setting","_window$OCA$Files$Set","_getCurrentUser","settings","Settings","webdavUrl","generateRemoteUrl","uid","webdavDocs","appPasswordUrl","webdavUrlCopied","setting","onClose","setConfig","select","navigator","clipboard","writeText","setTimeout","copyCloudId","Cog","NavigationQuota","NcAppNavigation","NcIconSvgWrapper","SettingsModal","Navigation","settingsOpened","currentViewId","_this$$route$params","params","parentViews","childViews","list","showView","onLegacyNavigationChanged","_window$OCA$Files$Sid","_window$OCA$Files$Sid2","newAppContent","classList","add","Util","History","parseUrlQuery","itemId","jQuery","trigger","Event","heading","headingEl","textContent","setPageHeading","$router","onToggleExpand","isExpanded","_this$viewConfigStore","generateToNavigation","openSettings","onSettingsClose","child","registerLegacyView","classes","OCP","Router","base","linkActiveClass","routes","alias","stringifyQuery","queryString","_window$OCP$Files","router","_router","goTo","goToRoute","assign","PiniaVuePlugin","pinia","createPinia","NavigationService","_settings","_name","_el","_open","_close","NavigationView","FilesListView","legacyViews","values","sublist","subview","processLegacyFilesViews","noRewrite","registration","serviceWorker","scope","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","r","getter","__esModule","d","definition","o","defineProperty","enumerable","g","globalThis","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","children","baseURI","self","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/files-reference-files.js b/dist/files-reference-files.js
index c214b19e081..afa6828dd4f 100644
--- a/dist/files-reference-files.js
+++ b/dist/files-reference-files.js
@@ -1,3 +1,3 @@
/*! For license information please see files-reference-files.js.LICENSE.txt */
-(()=>{"use strict";var e,i={90072:(e,i,n)=>{var o=n(20144),r=n(31352),a=n(86680),l=n(79753),s=n(62520),c=n.n(s),d=n(25108);const A={name:"ReferenceFileWidget",props:{richObject:{type:Object,required:!0},accessible:{type:Boolean,default:!0}},data(){return{previewUrl:window.OC.MimeType.getIconUrl(this.richObject.mimetype)}},computed:{fileSize(){return window.OC.Util.humanFileSize(this.richObject.size)},fileMtime(){return window.OC.Util.relativeModifiedDate(1e3*this.richObject.mtime)},filePath(){return c().dirname(this.richObject.path)},filePreview(){return this.previewUrl?{backgroundImage:"url("+this.previewUrl+")"}:{backgroundImage:"url("+window.OC.MimeType.getIconUrl(this.richObject.mimetype)+")"}},filePreviewClass(){return this.previewUrl?"widget-file--image--preview":"widget-file--image--icon"}},mounted(){if(this.richObject["preview-available"]){const e=(0,l.generateUrl)("/core/preview?fileId={fileId}&x=250&y=250",{fileId:this.richObject.id}),t=new Image;t.onload=()=>{this.previewUrl=e},t.onerror=e=>{d.error("could not load recommendation preview",e)},t.src=e}},methods:{navigate(){OCA.Viewer&&-1!==OCA.Viewer.mimetypes.indexOf(this.richObject.mimetype)?OCA.Viewer.open({path:this.richObject.path}):window.location=(0,l.generateUrl)("/f/"+this.id)}}};var p=n(93379),f=n.n(p),C=n(7795),g=n.n(C),w=n(90569),m=n.n(w),v=n(3565),u=n.n(v),h=n(19216),b=n.n(h),x=n(44589),k=n.n(x),y=n(87536),O={};O.styleTagTransform=k(),O.setAttributes=u(),O.insert=m().bind(null,"head"),O.domAPI=g(),O.insertStyleElement=b(),f()(y.Z,O),y.Z&&y.Z.locals&&y.Z.locals;var j=n(51900);const B=(0,j.Z)(A,(function(){var e=this,t=e._self._c;return e.accessible?t("a",{staticClass:"widget-file",attrs:{href:e.richObject.link},on:{click:function(t){return t.preventDefault(),e.navigate.apply(null,arguments)}}},[t("div",{staticClass:"widget-file--image",class:e.filePreviewClass,style:e.filePreview}),e._v(" "),t("div",{staticClass:"widget-file--details"},[t("p",{staticClass:"widget-file--title"},[e._v(e._s(e.richObject.name))]),e._v(" "),t("p",{staticClass:"widget-file--description"},[e._v(e._s(e.fileSize)),t("br"),e._v(e._s(e.fileMtime))]),e._v(" "),t("p",{staticClass:"widget-file--link"},[e._v(e._s(e.filePath))])])]):t("div",{staticClass:"widget-file widget-file--no-access"},[t("div",{staticClass:"widget-file--image widget-file--image--icon icon-folder"}),e._v(" "),t("div",{staticClass:"widget-file--details"},[t("p",{staticClass:"widget-file--title"},[e._v("\n\t\t\t"+e._s(e.t("files","File cannot be accessed"))+"\n\t\t")]),e._v(" "),t("p",{staticClass:"widget-file--description"},[e._v("\n\t\t\t"+e._s(e.t("files","You might not have have permissions to view it, ask the sender to share it"))+"\n\t\t")])])])}),[],!1,null,"88e0217c",null).exports;var _=n(64024);const I={name:"FileReferencePickerElement",components:{},props:{providerId:{type:String,required:!0},accessible:{type:Boolean,default:!1}},mounted(){this.openFilePicker(),window.addEventListener("click",this.onWindowClick)},beforeDestroy(){window.removeEventListener("click",this.onWindowClick)},methods:{onWindowClick(e){"A"===e.target.tagName&&e.target.classList.contains("oc-dialog-close")&&this.$emit("cancel")},async openFilePicker(){OC.dialogs.filepicker(t("files","Select file or folder to link to"),(e=>{OC.Files.getClient().getFileInfo(e).then(((e,t)=>{this.submit(t.id)}))}),!1,[],!1,_.K9.Choose,"",{target:this.$refs.picker})},submit(e){const t=window.location.protocol+"//"+window.location.host+(0,l.generateUrl)("/f/{fileId}",{fileId:e});this.$emit("submit",t)}}};var P=n(99999),E={};E.styleTagTransform=k(),E.setAttributes=u(),E.insert=m().bind(null,"head"),E.domAPI=g(),E.insertStyleElement=b(),f()(P.Z,E),P.Z&&P.Z.locals&&P.Z.locals;const F=(0,j.Z)(I,(function(){return(0,this._self._c)("div",{ref:"picker",staticClass:"reference-file-picker"})}),[],!1,null,"087c9640",null).exports;o.default.mixin({methods:{t:r.Iu}}),(0,a.registerWidget)("file",((e,t)=>{let{richObjectType:i,richObject:n,accessible:r}=t;new(o.default.extend(B))({propsData:{richObjectType:i,richObject:n,accessible:r}}).$mount(e)})),(0,a.registerCustomPickerElement)("files",((e,t)=>{let{providerId:i,accessible:n}=t;const r=new(o.default.extend(F))({propsData:{providerId:i,accessible:n}}).$mount(e);return new a.NcCustomPickerRenderResult(r.$el,r)}),((e,t)=>{t.object.$destroy()}))},99999:(e,t,i)=>{i.d(t,{Z:()=>l});var n=i(87537),o=i.n(n),r=i(23645),a=i.n(r)()(o());a.push([e.id,".reference-file-picker[data-v-087c9640]{flex-grow:1;margin-top:44px}.reference-file-picker[data-v-087c9640] .oc-dialog{transform:none !important;box-shadow:none !important;flex-grow:1 !important;position:static !important;width:100% !important;height:auto !important;padding:0 !important;max-width:initial}.reference-file-picker[data-v-087c9640] .oc-dialog .oc-dialog-close{display:none}.reference-file-picker[data-v-087c9640] .oc-dialog .oc-dialog-buttonrow.onebutton.aside{position:absolute;padding:12px 32px}.reference-file-picker[data-v-087c9640] .oc-dialog .oc-dialog-content{max-width:100% !important}","",{version:3,sources:["webpack://./apps/files/src/views/FileReferencePickerElement.vue"],names:[],mappings:"AACA,wCACC,WAAA,CACA,eAAA,CAEA,mDACC,yBAAA,CACA,0BAAA,CACA,sBAAA,CACA,0BAAA,CACA,qBAAA,CACA,sBAAA,CACA,oBAAA,CACA,iBAAA,CAEA,oEACC,YAAA,CAGD,wFACC,iBAAA,CACA,iBAAA,CAGD,sEACC,yBAAA",sourcesContent:["\n.reference-file-picker {\n\tflex-grow: 1;\n\tmargin-top: 44px;\n\n\t&:deep(.oc-dialog) {\n\t\ttransform: none !important;\n\t\tbox-shadow: none !important;\n\t\tflex-grow: 1 !important;\n\t\tposition: static !important;\n\t\twidth: 100% !important;\n\t\theight: auto !important;\n\t\tpadding: 0 !important;\n\t\tmax-width: initial;\n\n\t\t.oc-dialog-close {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.oc-dialog-buttonrow.onebutton.aside {\n\t\t\tposition: absolute;\n\t\t\tpadding: 12px 32px;\n\t\t}\n\n\t\t.oc-dialog-content {\n\t\t\tmax-width: 100% !important;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const l=a},87536:(e,t,i)=>{i.d(t,{Z:()=>l});var n=i(87537),o=i.n(n),r=i(23645),a=i.n(r)()(o());a.push([e.id,".widget-file[data-v-88e0217c]{display:flex;flex-grow:1;color:var(--color-main-text) !important;text-decoration:none !important}.widget-file--image[data-v-88e0217c]{min-width:40%;background-position:center;background-size:cover;background-repeat:no-repeat}.widget-file--image.widget-file--image--icon[data-v-88e0217c]{min-width:88px;background-size:44px}.widget-file--title[data-v-88e0217c]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:bold}.widget-file--details[data-v-88e0217c]{padding:12px;flex-grow:1;display:flex;flex-direction:column}.widget-file--details p[data-v-88e0217c]{margin:0;padding:0}.widget-file--description[data-v-88e0217c]{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical}.widget-file--link[data-v-88e0217c]{color:var(--color-text-maxcontrast)}.widget-file.widget-file--no-access[data-v-88e0217c]{padding:12px}.widget-file.widget-file--no-access .widget-file--details[data-v-88e0217c]{padding:0}","",{version:3,sources:["webpack://./apps/files/src/views/ReferenceFileWidget.vue"],names:[],mappings:"AACA,8BACC,YAAA,CACA,WAAA,CACA,uCAAA,CACA,+BAAA,CAEA,qCACC,aAAA,CACA,0BAAA,CACA,qBAAA,CACA,2BAAA,CAEA,8DACC,cAAA,CACA,oBAAA,CAIF,qCACC,eAAA,CACA,sBAAA,CACA,kBAAA,CACA,gBAAA,CAGD,uCACC,YAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CAEA,yCACC,QAAA,CACA,SAAA,CAIF,2CACC,eAAA,CACA,sBAAA,CACA,mBAAA,CACA,oBAAA,CACA,YAAA,CACA,2BAAA,CAGD,oCACC,mCAAA,CAGD,qDACC,YAAA,CAEA,2EACC,SAAA",sourcesContent:["\n.widget-file {\n\tdisplay: flex;\n\tflex-grow: 1;\n\tcolor: var(--color-main-text) !important;\n\ttext-decoration: none !important;\n\n\t&--image {\n\t\tmin-width: 40%;\n\t\tbackground-position: center;\n\t\tbackground-size: cover;\n\t\tbackground-repeat: no-repeat;\n\n\t\t&.widget-file--image--icon {\n\t\t\tmin-width: 88px;\n\t\t\tbackground-size: 44px;\n\t\t}\n\t}\n\n\t&--title {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-weight: bold;\n\t}\n\n\t&--details {\n\t\tpadding: 12px;\n\t\tflex-grow: 1;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\n\t\tp {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\n\t&--description {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tdisplay: -webkit-box;\n\t\t-webkit-line-clamp: 3;\n\t\tline-clamp: 3;\n\t\t-webkit-box-orient: vertical;\n\t}\n\n\t&--link {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&.widget-file--no-access {\n\t\tpadding: 12px;\n\n\t\t.widget-file--details {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const l=a}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={id:e,loaded:!1,exports:{}};return i[e].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=i,e=[],o.O=(t,i,n,r)=>{if(!i){var a=1/0;for(d=0;d<e.length;d++){i=e[d][0],n=e[d][1],r=e[d][2];for(var l=!0,s=0;s<i.length;s++)(!1&r||a>=r)&&Object.keys(o.O).every((e=>o.O[e](i[s])))?i.splice(s--,1):(l=!1,r<a&&(a=r));if(l){e.splice(d--,1);var c=n();void 0!==c&&(t=c)}}return t}r=r||0;for(var d=e.length;d>0&&e[d-1][2]>r;d--)e[d]=e[d-1];e[d]=[i,n,r]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var i in t)o.o(t,i)&&!o.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),o.j=9098,(()=>{o.b=document.baseURI||self.location.href;var e={9098:0};o.O.j=t=>0===e[t];var t=(t,i)=>{var n,r,a=i[0],l=i[1],s=i[2],c=0;if(a.some((t=>0!==e[t]))){for(n in l)o.o(l,n)&&(o.m[n]=l[n]);if(s)var d=s(o)}for(t&&t(i);c<a.length;c++)r=a[c],o.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return o.O(d)},i=self.webpackChunknextcloud=self.webpackChunknextcloud||[];i.forEach(t.bind(null,0)),i.push=t.bind(null,i.push.bind(i))})(),o.nc=void 0;var r=o.O(void 0,[7874],(()=>o(90072)));r=o.O(r)})();
-//# sourceMappingURL=files-reference-files.js.map?v=95daac366f4df4b551c4 \ No newline at end of file
+(()=>{"use strict";var e,i={13057:(e,i,n)=>{var o=n(20144),r=n(31352),a=n(86680),l=n(79753),s=n(62520),d=n.n(s),c=n(25108);const A={name:"ReferenceFileWidget",props:{richObject:{type:Object,required:!0},accessible:{type:Boolean,default:!0}},data(){return{previewUrl:window.OC.MimeType.getIconUrl(this.richObject.mimetype)}},computed:{fileSize(){return window.OC.Util.humanFileSize(this.richObject.size)},fileMtime(){return window.OC.Util.relativeModifiedDate(1e3*this.richObject.mtime)},filePath(){return d().dirname(this.richObject.path)},filePreview(){return this.previewUrl?{backgroundImage:"url("+this.previewUrl+")"}:{backgroundImage:"url("+window.OC.MimeType.getIconUrl(this.richObject.mimetype)+")"}},filePreviewClass(){return this.previewUrl?"widget-file--image--preview":"widget-file--image--icon"}},mounted(){if(this.richObject["preview-available"]){const e=(0,l.generateUrl)("/core/preview?fileId={fileId}&x=250&y=250",{fileId:this.richObject.id}),t=new Image;t.onload=()=>{this.previewUrl=e},t.onerror=e=>{c.error("could not load recommendation preview",e)},t.src=e}},methods:{navigate(){OCA.Viewer&&-1!==OCA.Viewer.mimetypes.indexOf(this.richObject.mimetype)?OCA.Viewer.open({path:this.richObject.path}):window.location=this.richObject.link}}};var p=n(93379),f=n.n(p),C=n(7795),g=n.n(C),w=n(90569),m=n.n(w),v=n(3565),u=n.n(v),h=n(19216),b=n.n(h),x=n(44589),k=n.n(x),y=n(7574),O={};O.styleTagTransform=k(),O.setAttributes=u(),O.insert=m().bind(null,"head"),O.domAPI=g(),O.insertStyleElement=b(),f()(y.Z,O),y.Z&&y.Z.locals&&y.Z.locals;var j=n(51900);const B=(0,j.Z)(A,(function(){var e=this,t=e._self._c;return e.accessible?t("a",{staticClass:"widget-file",attrs:{href:e.richObject.link},on:{click:function(t){return t.preventDefault(),e.navigate.apply(null,arguments)}}},[t("div",{staticClass:"widget-file--image",class:e.filePreviewClass,style:e.filePreview}),e._v(" "),t("div",{staticClass:"widget-file--details"},[t("p",{staticClass:"widget-file--title"},[e._v(e._s(e.richObject.name))]),e._v(" "),t("p",{staticClass:"widget-file--description"},[e._v(e._s(e.fileSize)),t("br"),e._v(e._s(e.fileMtime))]),e._v(" "),t("p",{staticClass:"widget-file--link"},[e._v(e._s(e.filePath))])])]):t("div",{staticClass:"widget-file widget-file--no-access"},[t("div",{staticClass:"widget-file--image widget-file--image--icon icon-folder"}),e._v(" "),t("div",{staticClass:"widget-file--details"},[t("p",{staticClass:"widget-file--title"},[e._v("\n\t\t\t"+e._s(e.t("files","File cannot be accessed"))+"\n\t\t")]),e._v(" "),t("p",{staticClass:"widget-file--description"},[e._v("\n\t\t\t"+e._s(e.t("files","You might not have have permissions to view it, ask the sender to share it"))+"\n\t\t")])])])}),[],!1,null,"3f729da0",null).exports;var _=n(64024);const I={name:"FileReferencePickerElement",components:{},props:{providerId:{type:String,required:!0},accessible:{type:Boolean,default:!1}},mounted(){this.openFilePicker(),window.addEventListener("click",this.onWindowClick)},beforeDestroy(){window.removeEventListener("click",this.onWindowClick)},methods:{onWindowClick(e){"A"===e.target.tagName&&e.target.classList.contains("oc-dialog-close")&&this.$emit("cancel")},async openFilePicker(){OC.dialogs.filepicker(t("files","Select file or folder to link to"),(e=>{OC.Files.getClient().getFileInfo(e).then(((e,t)=>{this.submit(t.id)}))}),!1,[],!1,_.K9.Choose,"",{target:this.$refs.picker})},submit(e){const t=window.location.protocol+"//"+window.location.host+(0,l.generateUrl)("/f/{fileId}",{fileId:e});this.$emit("submit",t)}}};var P=n(99999),E={};E.styleTagTransform=k(),E.setAttributes=u(),E.insert=m().bind(null,"head"),E.domAPI=g(),E.insertStyleElement=b(),f()(P.Z,E),P.Z&&P.Z.locals&&P.Z.locals;const F=(0,j.Z)(I,(function(){return(0,this._self._c)("div",{ref:"picker",staticClass:"reference-file-picker"})}),[],!1,null,"087c9640",null).exports;o.default.mixin({methods:{t:r.Iu}}),(0,a.registerWidget)("file",((e,t)=>{let{richObjectType:i,richObject:n,accessible:r}=t;new(o.default.extend(B))({propsData:{richObjectType:i,richObject:n,accessible:r}}).$mount(e)})),(0,a.registerCustomPickerElement)("files",((e,t)=>{let{providerId:i,accessible:n}=t;const r=new(o.default.extend(F))({propsData:{providerId:i,accessible:n}}).$mount(e);return new a.NcCustomPickerRenderResult(r.$el,r)}),((e,t)=>{t.object.$destroy()}))},99999:(e,t,i)=>{i.d(t,{Z:()=>l});var n=i(87537),o=i.n(n),r=i(23645),a=i.n(r)()(o());a.push([e.id,".reference-file-picker[data-v-087c9640]{flex-grow:1;margin-top:44px}.reference-file-picker[data-v-087c9640] .oc-dialog{transform:none !important;box-shadow:none !important;flex-grow:1 !important;position:static !important;width:100% !important;height:auto !important;padding:0 !important;max-width:initial}.reference-file-picker[data-v-087c9640] .oc-dialog .oc-dialog-close{display:none}.reference-file-picker[data-v-087c9640] .oc-dialog .oc-dialog-buttonrow.onebutton.aside{position:absolute;padding:12px 32px}.reference-file-picker[data-v-087c9640] .oc-dialog .oc-dialog-content{max-width:100% !important}","",{version:3,sources:["webpack://./apps/files/src/views/FileReferencePickerElement.vue"],names:[],mappings:"AACA,wCACC,WAAA,CACA,eAAA,CAEA,mDACC,yBAAA,CACA,0BAAA,CACA,sBAAA,CACA,0BAAA,CACA,qBAAA,CACA,sBAAA,CACA,oBAAA,CACA,iBAAA,CAEA,oEACC,YAAA,CAGD,wFACC,iBAAA,CACA,iBAAA,CAGD,sEACC,yBAAA",sourcesContent:["\n.reference-file-picker {\n\tflex-grow: 1;\n\tmargin-top: 44px;\n\n\t&:deep(.oc-dialog) {\n\t\ttransform: none !important;\n\t\tbox-shadow: none !important;\n\t\tflex-grow: 1 !important;\n\t\tposition: static !important;\n\t\twidth: 100% !important;\n\t\theight: auto !important;\n\t\tpadding: 0 !important;\n\t\tmax-width: initial;\n\n\t\t.oc-dialog-close {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.oc-dialog-buttonrow.onebutton.aside {\n\t\t\tposition: absolute;\n\t\t\tpadding: 12px 32px;\n\t\t}\n\n\t\t.oc-dialog-content {\n\t\t\tmax-width: 100% !important;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const l=a},7574:(e,t,i)=>{i.d(t,{Z:()=>l});var n=i(87537),o=i.n(n),r=i(23645),a=i.n(r)()(o());a.push([e.id,".widget-file[data-v-3f729da0]{display:flex;flex-grow:1;color:var(--color-main-text) !important;text-decoration:none !important}.widget-file--image[data-v-3f729da0]{min-width:40%;background-position:center;background-size:cover;background-repeat:no-repeat}.widget-file--image.widget-file--image--icon[data-v-3f729da0]{min-width:88px;background-size:44px}.widget-file--title[data-v-3f729da0]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:bold}.widget-file--details[data-v-3f729da0]{padding:12px;flex-grow:1;display:flex;flex-direction:column}.widget-file--details p[data-v-3f729da0]{margin:0;padding:0}.widget-file--description[data-v-3f729da0]{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical}.widget-file--link[data-v-3f729da0]{color:var(--color-text-maxcontrast)}.widget-file.widget-file--no-access[data-v-3f729da0]{padding:12px}.widget-file.widget-file--no-access .widget-file--details[data-v-3f729da0]{padding:0}","",{version:3,sources:["webpack://./apps/files/src/views/ReferenceFileWidget.vue"],names:[],mappings:"AACA,8BACC,YAAA,CACA,WAAA,CACA,uCAAA,CACA,+BAAA,CAEA,qCACC,aAAA,CACA,0BAAA,CACA,qBAAA,CACA,2BAAA,CAEA,8DACC,cAAA,CACA,oBAAA,CAIF,qCACC,eAAA,CACA,sBAAA,CACA,kBAAA,CACA,gBAAA,CAGD,uCACC,YAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CAEA,yCACC,QAAA,CACA,SAAA,CAIF,2CACC,eAAA,CACA,sBAAA,CACA,mBAAA,CACA,oBAAA,CACA,YAAA,CACA,2BAAA,CAGD,oCACC,mCAAA,CAGD,qDACC,YAAA,CAEA,2EACC,SAAA",sourcesContent:["\n.widget-file {\n\tdisplay: flex;\n\tflex-grow: 1;\n\tcolor: var(--color-main-text) !important;\n\ttext-decoration: none !important;\n\n\t&--image {\n\t\tmin-width: 40%;\n\t\tbackground-position: center;\n\t\tbackground-size: cover;\n\t\tbackground-repeat: no-repeat;\n\n\t\t&.widget-file--image--icon {\n\t\t\tmin-width: 88px;\n\t\t\tbackground-size: 44px;\n\t\t}\n\t}\n\n\t&--title {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-weight: bold;\n\t}\n\n\t&--details {\n\t\tpadding: 12px;\n\t\tflex-grow: 1;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\n\t\tp {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\n\t&--description {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tdisplay: -webkit-box;\n\t\t-webkit-line-clamp: 3;\n\t\tline-clamp: 3;\n\t\t-webkit-box-orient: vertical;\n\t}\n\n\t&--link {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&.widget-file--no-access {\n\t\tpadding: 12px;\n\n\t\t.widget-file--details {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const l=a}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={id:e,loaded:!1,exports:{}};return i[e].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=i,e=[],o.O=(t,i,n,r)=>{if(!i){var a=1/0;for(c=0;c<e.length;c++){i=e[c][0],n=e[c][1],r=e[c][2];for(var l=!0,s=0;s<i.length;s++)(!1&r||a>=r)&&Object.keys(o.O).every((e=>o.O[e](i[s])))?i.splice(s--,1):(l=!1,r<a&&(a=r));if(l){e.splice(c--,1);var d=n();void 0!==d&&(t=d)}}return t}r=r||0;for(var c=e.length;c>0&&e[c-1][2]>r;c--)e[c]=e[c-1];e[c]=[i,n,r]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var i in t)o.o(t,i)&&!o.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),o.j=9098,(()=>{o.b=document.baseURI||self.location.href;var e={9098:0};o.O.j=t=>0===e[t];var t=(t,i)=>{var n,r,a=i[0],l=i[1],s=i[2],d=0;if(a.some((t=>0!==e[t]))){for(n in l)o.o(l,n)&&(o.m[n]=l[n]);if(s)var c=s(o)}for(t&&t(i);d<a.length;d++)r=a[d],o.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return o.O(c)},i=self.webpackChunknextcloud=self.webpackChunknextcloud||[];i.forEach(t.bind(null,0)),i.push=t.bind(null,i.push.bind(i))})(),o.nc=void 0;var r=o.O(void 0,[7874],(()=>o(13057)));r=o.O(r)})();
+//# sourceMappingURL=files-reference-files.js.map?v=0e59efe2da30e1477cbb \ No newline at end of file
diff --git a/dist/files-reference-files.js.map b/dist/files-reference-files.js.map
index b1dbeedcda6..5d7f1317317 100644
--- a/dist/files-reference-files.js.map
+++ b/dist/files-reference-files.js.map
@@ -1 +1 @@
-{"version":3,"file":"files-reference-files.js?v=95daac366f4df4b551c4","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/views/ReferenceFileWidget.vue","webpack:///nextcloud/apps/files/src/views/ReferenceFileWidget.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/ReferenceFileWidget.vue?42cb","webpack://nextcloud/./apps/files/src/views/ReferenceFileWidget.vue?1c02","webpack://nextcloud/./apps/files/src/views/ReferenceFileWidget.vue?6acb","webpack://nextcloud/./apps/files/src/views/FileReferencePickerElement.vue?50c6","webpack:///nextcloud/apps/files/src/views/FileReferencePickerElement.vue","webpack:///nextcloud/apps/files/src/views/FileReferencePickerElement.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/FileReferencePickerElement.vue?27dc","webpack://nextcloud/./apps/files/src/views/FileReferencePickerElement.vue?71ed","webpack:///nextcloud/apps/files/src/reference-files.js","webpack:///nextcloud/apps/files/src/views/FileReferencePickerElement.vue?vue&type=style&index=0&id=087c9640&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/ReferenceFileWidget.vue?vue&type=style&index=0&id=88e0217c&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<!--\n - @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div v-if=\"!accessible\" class=\"widget-file widget-file--no-access\">\n\t\t<div class=\"widget-file--image widget-file--image--icon icon-folder\" />\n\t\t<div class=\"widget-file--details\">\n\t\t\t<p class=\"widget-file--title\">\n\t\t\t\t{{ t('files', 'File cannot be accessed') }}\n\t\t\t</p>\n\t\t\t<p class=\"widget-file--description\">\n\t\t\t\t{{ t('files', 'You might not have have permissions to view it, ask the sender to share it') }}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t<a v-else\n\t\tclass=\"widget-file\"\n\t\t:href=\"richObject.link\"\n\t\t@click.prevent=\"navigate\">\n\t\t<div class=\"widget-file--image\" :class=\"filePreviewClass\" :style=\"filePreview\" />\n\t\t<div class=\"widget-file--details\">\n\t\t\t<p class=\"widget-file--title\">{{ richObject.name }}</p>\n\t\t\t<p class=\"widget-file--description\">{{ fileSize }}<br>{{ fileMtime }}</p>\n\t\t\t<p class=\"widget-file--link\">{{ filePath }}</p>\n\t\t</div>\n\t</a>\n</template>\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport path from 'path'\n\nexport default {\n\tname: 'ReferenceFileWidget',\n\tprops: {\n\t\trichObject: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\taccessible: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpreviewUrl: window.OC.MimeType.getIconUrl(this.richObject.mimetype),\n\t\t}\n\t},\n\tcomputed: {\n\t\tfileSize() {\n\t\t\treturn window.OC.Util.humanFileSize(this.richObject.size)\n\t\t},\n\t\tfileMtime() {\n\t\t\treturn window.OC.Util.relativeModifiedDate(this.richObject.mtime * 1000)\n\t\t},\n\t\tfilePath() {\n\t\t\treturn path.dirname(this.richObject.path)\n\t\t},\n\t\tfilePreview() {\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn {\n\t\t\t\t\tbackgroundImage: 'url(' + this.previewUrl + ')',\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tbackgroundImage: 'url(' + window.OC.MimeType.getIconUrl(this.richObject.mimetype) + ')',\n\t\t\t}\n\n\t\t},\n\t\tfilePreviewClass() {\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn 'widget-file--image--preview'\n\t\t\t}\n\t\t\treturn 'widget-file--image--icon'\n\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.richObject['preview-available']) {\n\t\t\tconst previewUrl = generateUrl('/core/preview?fileId={fileId}&x=250&y=250', {\n\t\t\t\tfileId: this.richObject.id,\n\t\t\t})\n\t\t\tconst img = new Image()\n\t\t\timg.onload = () => {\n\t\t\t\tthis.previewUrl = previewUrl\n\t\t\t}\n\t\t\timg.onerror = err => {\n\t\t\t\tconsole.error('could not load recommendation preview', err)\n\t\t\t}\n\t\t\timg.src = previewUrl\n\t\t}\n\t},\n\tmethods: {\n\t\tnavigate() {\n\t\t\tif (OCA.Viewer && OCA.Viewer.mimetypes.indexOf(this.richObject.mimetype) !== -1) {\n\t\t\t\tOCA.Viewer.open({ path: this.richObject.path })\n\t\t\t\treturn\n\t\t\t}\n\t\t\twindow.location = generateUrl('/f/' + this.id)\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.widget-file {\n\tdisplay: flex;\n\tflex-grow: 1;\n\tcolor: var(--color-main-text) !important;\n\ttext-decoration: none !important;\n\n\t&--image {\n\t\tmin-width: 40%;\n\t\tbackground-position: center;\n\t\tbackground-size: cover;\n\t\tbackground-repeat: no-repeat;\n\n\t\t&.widget-file--image--icon {\n\t\t\tmin-width: 88px;\n\t\t\tbackground-size: 44px;\n\t\t}\n\t}\n\n\t&--title {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-weight: bold;\n\t}\n\n\t&--details {\n\t\tpadding: 12px;\n\t\tflex-grow: 1;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\n\t\tp {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\n\t&--description {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tdisplay: -webkit-box;\n\t\t-webkit-line-clamp: 3;\n\t\tline-clamp: 3;\n\t\t-webkit-box-orient: vertical;\n\t}\n\n\t&--link {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&.widget-file--no-access {\n\t\tpadding: 12px;\n\n\t\t.widget-file--details {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReferenceFileWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReferenceFileWidget.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReferenceFileWidget.vue?vue&type=style&index=0&id=88e0217c&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReferenceFileWidget.vue?vue&type=style&index=0&id=88e0217c&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ReferenceFileWidget.vue?vue&type=template&id=88e0217c&scoped=true&\"\nimport script from \"./ReferenceFileWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ReferenceFileWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ReferenceFileWidget.vue?vue&type=style&index=0&id=88e0217c&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"88e0217c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.accessible)?_c('div',{staticClass:\"widget-file widget-file--no-access\"},[_c('div',{staticClass:\"widget-file--image widget-file--image--icon icon-folder\"}),_vm._v(\" \"),_c('div',{staticClass:\"widget-file--details\"},[_c('p',{staticClass:\"widget-file--title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'File cannot be accessed'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('p',{staticClass:\"widget-file--description\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'You might not have have permissions to view it, ask the sender to share it'))+\"\\n\\t\\t\")])])]):_c('a',{staticClass:\"widget-file\",attrs:{\"href\":_vm.richObject.link},on:{\"click\":function($event){$event.preventDefault();return _vm.navigate.apply(null, arguments)}}},[_c('div',{staticClass:\"widget-file--image\",class:_vm.filePreviewClass,style:(_vm.filePreview)}),_vm._v(\" \"),_c('div',{staticClass:\"widget-file--details\"},[_c('p',{staticClass:\"widget-file--title\"},[_vm._v(_vm._s(_vm.richObject.name))]),_vm._v(\" \"),_c('p',{staticClass:\"widget-file--description\"},[_vm._v(_vm._s(_vm.fileSize)),_c('br'),_vm._v(_vm._s(_vm.fileMtime))]),_vm._v(\" \"),_c('p',{staticClass:\"widget-file--link\"},[_vm._v(_vm._s(_vm.filePath))])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:\"picker\",staticClass:\"reference-file-picker\"})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2023 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div ref=\"picker\" class=\"reference-file-picker\" />\n</template>\n\n<script>\nimport { FilePickerType } from '@nextcloud/dialogs'\nimport { generateUrl } from '@nextcloud/router'\nexport default {\n\tname: 'FileReferencePickerElement',\n\tcomponents: {\n\t},\n\tprops: {\n\t\tproviderId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\taccessible: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.openFilePicker()\n\t\twindow.addEventListener('click', this.onWindowClick)\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('click', this.onWindowClick)\n\t},\n\tmethods: {\n\t\tonWindowClick(e) {\n\t\t\tif (e.target.tagName === 'A' && e.target.classList.contains('oc-dialog-close')) {\n\t\t\t\tthis.$emit('cancel')\n\t\t\t}\n\t\t},\n\t\tasync openFilePicker() {\n\t\t\tOC.dialogs.filepicker(\n\t\t\t\tt('files', 'Select file or folder to link to'),\n\t\t\t\t(file) => {\n\t\t\t\t\tconst client = OC.Files.getClient()\n\t\t\t\t\tclient.getFileInfo(file).then((_status, fileInfo) => {\n\t\t\t\t\t\tthis.submit(fileInfo.id)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tfalse, // multiselect\n\t\t\t\t[], // mime filter\n\t\t\t\tfalse, // modal\n\t\t\t\tFilePickerType.Choose, // type\n\t\t\t\t'',\n\t\t\t\t{\n\t\t\t\t\ttarget: this.$refs.picker,\n\t\t\t\t},\n\t\t\t)\n\t\t},\n\t\tsubmit(fileId) {\n\t\t\tconst fileLink = window.location.protocol + '//' + window.location.host\n\t\t\t\t+ generateUrl('/f/{fileId}', { fileId })\n\t\t\tthis.$emit('submit', fileLink)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.reference-file-picker {\n\tflex-grow: 1;\n\tmargin-top: 44px;\n\n\t&:deep(.oc-dialog) {\n\t\ttransform: none !important;\n\t\tbox-shadow: none !important;\n\t\tflex-grow: 1 !important;\n\t\tposition: static !important;\n\t\twidth: 100% !important;\n\t\theight: auto !important;\n\t\tpadding: 0 !important;\n\t\tmax-width: initial;\n\n\t\t.oc-dialog-close {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.oc-dialog-buttonrow.onebutton.aside {\n\t\t\tposition: absolute;\n\t\t\tpadding: 12px 32px;\n\t\t}\n\n\t\t.oc-dialog-content {\n\t\t\tmax-width: 100% !important;\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileReferencePickerElement.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileReferencePickerElement.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileReferencePickerElement.vue?vue&type=style&index=0&id=087c9640&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileReferencePickerElement.vue?vue&type=style&index=0&id=087c9640&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileReferencePickerElement.vue?vue&type=template&id=087c9640&scoped=true&\"\nimport script from \"./FileReferencePickerElement.vue?vue&type=script&lang=js&\"\nexport * from \"./FileReferencePickerElement.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileReferencePickerElement.vue?vue&type=style&index=0&id=087c9640&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"087c9640\",\n null\n \n)\n\nexport default component.exports","/**\n * @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport Vue from 'vue'\nimport { translate as t } from '@nextcloud/l10n'\n\nimport { registerWidget, registerCustomPickerElement, NcCustomPickerRenderResult } from '@nextcloud/vue/dist/Components/NcRichText.js'\n\nimport FileWidget from './views/ReferenceFileWidget.vue'\nimport FileReferencePickerElement from './views/FileReferencePickerElement.vue'\n\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t},\n})\n\nregisterWidget('file', (el, { richObjectType, richObject, accessible }) => {\n\tconst Widget = Vue.extend(FileWidget)\n\tnew Widget({\n\t\tpropsData: {\n\t\t\trichObjectType,\n\t\t\trichObject,\n\t\t\taccessible,\n\t\t},\n\t}).$mount(el)\n})\n\nregisterCustomPickerElement('files', (el, { providerId, accessible }) => {\n\tconst Element = Vue.extend(FileReferencePickerElement)\n\tconst vueElement = new Element({\n\t\tpropsData: {\n\t\t\tproviderId,\n\t\t\taccessible,\n\t\t},\n\t}).$mount(el)\n\treturn new NcCustomPickerRenderResult(vueElement.$el, vueElement)\n}, (el, renderResult) => {\n\trenderResult.object.$destroy()\n})\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".reference-file-picker[data-v-087c9640]{flex-grow:1;margin-top:44px}.reference-file-picker[data-v-087c9640] .oc-dialog{transform:none !important;box-shadow:none !important;flex-grow:1 !important;position:static !important;width:100% !important;height:auto !important;padding:0 !important;max-width:initial}.reference-file-picker[data-v-087c9640] .oc-dialog .oc-dialog-close{display:none}.reference-file-picker[data-v-087c9640] .oc-dialog .oc-dialog-buttonrow.onebutton.aside{position:absolute;padding:12px 32px}.reference-file-picker[data-v-087c9640] .oc-dialog .oc-dialog-content{max-width:100% !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/FileReferencePickerElement.vue\"],\"names\":[],\"mappings\":\"AACA,wCACC,WAAA,CACA,eAAA,CAEA,mDACC,yBAAA,CACA,0BAAA,CACA,sBAAA,CACA,0BAAA,CACA,qBAAA,CACA,sBAAA,CACA,oBAAA,CACA,iBAAA,CAEA,oEACC,YAAA,CAGD,wFACC,iBAAA,CACA,iBAAA,CAGD,sEACC,yBAAA\",\"sourcesContent\":[\"\\n.reference-file-picker {\\n\\tflex-grow: 1;\\n\\tmargin-top: 44px;\\n\\n\\t&:deep(.oc-dialog) {\\n\\t\\ttransform: none !important;\\n\\t\\tbox-shadow: none !important;\\n\\t\\tflex-grow: 1 !important;\\n\\t\\tposition: static !important;\\n\\t\\twidth: 100% !important;\\n\\t\\theight: auto !important;\\n\\t\\tpadding: 0 !important;\\n\\t\\tmax-width: initial;\\n\\n\\t\\t.oc-dialog-close {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\n\\t\\t.oc-dialog-buttonrow.onebutton.aside {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tpadding: 12px 32px;\\n\\t\\t}\\n\\n\\t\\t.oc-dialog-content {\\n\\t\\t\\tmax-width: 100% !important;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".widget-file[data-v-88e0217c]{display:flex;flex-grow:1;color:var(--color-main-text) !important;text-decoration:none !important}.widget-file--image[data-v-88e0217c]{min-width:40%;background-position:center;background-size:cover;background-repeat:no-repeat}.widget-file--image.widget-file--image--icon[data-v-88e0217c]{min-width:88px;background-size:44px}.widget-file--title[data-v-88e0217c]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:bold}.widget-file--details[data-v-88e0217c]{padding:12px;flex-grow:1;display:flex;flex-direction:column}.widget-file--details p[data-v-88e0217c]{margin:0;padding:0}.widget-file--description[data-v-88e0217c]{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical}.widget-file--link[data-v-88e0217c]{color:var(--color-text-maxcontrast)}.widget-file.widget-file--no-access[data-v-88e0217c]{padding:12px}.widget-file.widget-file--no-access .widget-file--details[data-v-88e0217c]{padding:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/ReferenceFileWidget.vue\"],\"names\":[],\"mappings\":\"AACA,8BACC,YAAA,CACA,WAAA,CACA,uCAAA,CACA,+BAAA,CAEA,qCACC,aAAA,CACA,0BAAA,CACA,qBAAA,CACA,2BAAA,CAEA,8DACC,cAAA,CACA,oBAAA,CAIF,qCACC,eAAA,CACA,sBAAA,CACA,kBAAA,CACA,gBAAA,CAGD,uCACC,YAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CAEA,yCACC,QAAA,CACA,SAAA,CAIF,2CACC,eAAA,CACA,sBAAA,CACA,mBAAA,CACA,oBAAA,CACA,YAAA,CACA,2BAAA,CAGD,oCACC,mCAAA,CAGD,qDACC,YAAA,CAEA,2EACC,SAAA\",\"sourcesContent\":[\"\\n.widget-file {\\n\\tdisplay: flex;\\n\\tflex-grow: 1;\\n\\tcolor: var(--color-main-text) !important;\\n\\ttext-decoration: none !important;\\n\\n\\t&--image {\\n\\t\\tmin-width: 40%;\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-size: cover;\\n\\t\\tbackground-repeat: no-repeat;\\n\\n\\t\\t&.widget-file--image--icon {\\n\\t\\t\\tmin-width: 88px;\\n\\t\\t\\tbackground-size: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t&--title {\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\twhite-space: nowrap;\\n\\t\\tfont-weight: bold;\\n\\t}\\n\\n\\t&--details {\\n\\t\\tpadding: 12px;\\n\\t\\tflex-grow: 1;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\n\\t\\tp {\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\t}\\n\\n\\t&--description {\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tdisplay: -webkit-box;\\n\\t\\t-webkit-line-clamp: 3;\\n\\t\\tline-clamp: 3;\\n\\t\\t-webkit-box-orient: vertical;\\n\\t}\\n\\n\\t&--link {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&.widget-file--no-access {\\n\\t\\tpadding: 12px;\\n\\n\\t\\t.widget-file--details {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 9098;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t9098: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(90072)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","name","props","richObject","type","Object","required","accessible","Boolean","default","data","previewUrl","window","OC","MimeType","getIconUrl","mimetype","computed","fileSize","Util","humanFileSize","size","fileMtime","relativeModifiedDate","mtime","filePath","path","filePreview","backgroundImage","filePreviewClass","mounted","generateUrl","fileId","id","img","Image","onload","onerror","err","console","error","src","methods","navigate","OCA","Viewer","mimetypes","indexOf","open","location","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","link","on","$event","preventDefault","apply","arguments","class","style","_v","_s","t","components","providerId","String","openFilePicker","addEventListener","onWindowClick","beforeDestroy","removeEventListener","e","target","tagName","classList","contains","$emit","dialogs","filepicker","file","Files","getClient","getFileInfo","then","_status","fileInfo","submit","FilePickerType","$refs","picker","fileLink","protocol","host","ref","Vue","registerWidget","el","_ref","richObjectType","FileWidget","propsData","$mount","registerCustomPickerElement","_ref2","vueElement","FileReferencePickerElement","NcCustomPickerRenderResult","$el","renderResult","object","$destroy","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","keys","every","key","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","children","b","document","baseURI","self","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"files-reference-files.js?v=0e59efe2da30e1477cbb","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/views/ReferenceFileWidget.vue","webpack:///nextcloud/apps/files/src/views/ReferenceFileWidget.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/ReferenceFileWidget.vue?dd2e","webpack://nextcloud/./apps/files/src/views/ReferenceFileWidget.vue?1c02","webpack://nextcloud/./apps/files/src/views/ReferenceFileWidget.vue?6acb","webpack://nextcloud/./apps/files/src/views/FileReferencePickerElement.vue?50c6","webpack:///nextcloud/apps/files/src/views/FileReferencePickerElement.vue","webpack:///nextcloud/apps/files/src/views/FileReferencePickerElement.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/FileReferencePickerElement.vue?27dc","webpack://nextcloud/./apps/files/src/views/FileReferencePickerElement.vue?71ed","webpack:///nextcloud/apps/files/src/reference-files.js","webpack:///nextcloud/apps/files/src/views/FileReferencePickerElement.vue?vue&type=style&index=0&id=087c9640&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/ReferenceFileWidget.vue?vue&type=style&index=0&id=3f729da0&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<!--\n - @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div v-if=\"!accessible\" class=\"widget-file widget-file--no-access\">\n\t\t<div class=\"widget-file--image widget-file--image--icon icon-folder\" />\n\t\t<div class=\"widget-file--details\">\n\t\t\t<p class=\"widget-file--title\">\n\t\t\t\t{{ t('files', 'File cannot be accessed') }}\n\t\t\t</p>\n\t\t\t<p class=\"widget-file--description\">\n\t\t\t\t{{ t('files', 'You might not have have permissions to view it, ask the sender to share it') }}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t<a v-else\n\t\tclass=\"widget-file\"\n\t\t:href=\"richObject.link\"\n\t\t@click.prevent=\"navigate\">\n\t\t<div class=\"widget-file--image\" :class=\"filePreviewClass\" :style=\"filePreview\" />\n\t\t<div class=\"widget-file--details\">\n\t\t\t<p class=\"widget-file--title\">{{ richObject.name }}</p>\n\t\t\t<p class=\"widget-file--description\">{{ fileSize }}<br>{{ fileMtime }}</p>\n\t\t\t<p class=\"widget-file--link\">{{ filePath }}</p>\n\t\t</div>\n\t</a>\n</template>\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport path from 'path'\n\nexport default {\n\tname: 'ReferenceFileWidget',\n\tprops: {\n\t\trichObject: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\taccessible: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpreviewUrl: window.OC.MimeType.getIconUrl(this.richObject.mimetype),\n\t\t}\n\t},\n\tcomputed: {\n\t\tfileSize() {\n\t\t\treturn window.OC.Util.humanFileSize(this.richObject.size)\n\t\t},\n\t\tfileMtime() {\n\t\t\treturn window.OC.Util.relativeModifiedDate(this.richObject.mtime * 1000)\n\t\t},\n\t\tfilePath() {\n\t\t\treturn path.dirname(this.richObject.path)\n\t\t},\n\t\tfilePreview() {\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn {\n\t\t\t\t\tbackgroundImage: 'url(' + this.previewUrl + ')',\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tbackgroundImage: 'url(' + window.OC.MimeType.getIconUrl(this.richObject.mimetype) + ')',\n\t\t\t}\n\n\t\t},\n\t\tfilePreviewClass() {\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn 'widget-file--image--preview'\n\t\t\t}\n\t\t\treturn 'widget-file--image--icon'\n\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.richObject['preview-available']) {\n\t\t\tconst previewUrl = generateUrl('/core/preview?fileId={fileId}&x=250&y=250', {\n\t\t\t\tfileId: this.richObject.id,\n\t\t\t})\n\t\t\tconst img = new Image()\n\t\t\timg.onload = () => {\n\t\t\t\tthis.previewUrl = previewUrl\n\t\t\t}\n\t\t\timg.onerror = err => {\n\t\t\t\tconsole.error('could not load recommendation preview', err)\n\t\t\t}\n\t\t\timg.src = previewUrl\n\t\t}\n\t},\n\tmethods: {\n\t\tnavigate() {\n\t\t\tif (OCA.Viewer && OCA.Viewer.mimetypes.indexOf(this.richObject.mimetype) !== -1) {\n\t\t\t\tOCA.Viewer.open({ path: this.richObject.path })\n\t\t\t\treturn\n\t\t\t}\n\t\t\twindow.location = this.richObject.link\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.widget-file {\n\tdisplay: flex;\n\tflex-grow: 1;\n\tcolor: var(--color-main-text) !important;\n\ttext-decoration: none !important;\n\n\t&--image {\n\t\tmin-width: 40%;\n\t\tbackground-position: center;\n\t\tbackground-size: cover;\n\t\tbackground-repeat: no-repeat;\n\n\t\t&.widget-file--image--icon {\n\t\t\tmin-width: 88px;\n\t\t\tbackground-size: 44px;\n\t\t}\n\t}\n\n\t&--title {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-weight: bold;\n\t}\n\n\t&--details {\n\t\tpadding: 12px;\n\t\tflex-grow: 1;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\n\t\tp {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\n\t&--description {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tdisplay: -webkit-box;\n\t\t-webkit-line-clamp: 3;\n\t\tline-clamp: 3;\n\t\t-webkit-box-orient: vertical;\n\t}\n\n\t&--link {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&.widget-file--no-access {\n\t\tpadding: 12px;\n\n\t\t.widget-file--details {\n\t\t\tpadding: 0;\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReferenceFileWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReferenceFileWidget.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReferenceFileWidget.vue?vue&type=style&index=0&id=3f729da0&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReferenceFileWidget.vue?vue&type=style&index=0&id=3f729da0&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ReferenceFileWidget.vue?vue&type=template&id=3f729da0&scoped=true&\"\nimport script from \"./ReferenceFileWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ReferenceFileWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ReferenceFileWidget.vue?vue&type=style&index=0&id=3f729da0&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3f729da0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.accessible)?_c('div',{staticClass:\"widget-file widget-file--no-access\"},[_c('div',{staticClass:\"widget-file--image widget-file--image--icon icon-folder\"}),_vm._v(\" \"),_c('div',{staticClass:\"widget-file--details\"},[_c('p',{staticClass:\"widget-file--title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'File cannot be accessed'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('p',{staticClass:\"widget-file--description\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'You might not have have permissions to view it, ask the sender to share it'))+\"\\n\\t\\t\")])])]):_c('a',{staticClass:\"widget-file\",attrs:{\"href\":_vm.richObject.link},on:{\"click\":function($event){$event.preventDefault();return _vm.navigate.apply(null, arguments)}}},[_c('div',{staticClass:\"widget-file--image\",class:_vm.filePreviewClass,style:(_vm.filePreview)}),_vm._v(\" \"),_c('div',{staticClass:\"widget-file--details\"},[_c('p',{staticClass:\"widget-file--title\"},[_vm._v(_vm._s(_vm.richObject.name))]),_vm._v(\" \"),_c('p',{staticClass:\"widget-file--description\"},[_vm._v(_vm._s(_vm.fileSize)),_c('br'),_vm._v(_vm._s(_vm.fileMtime))]),_vm._v(\" \"),_c('p',{staticClass:\"widget-file--link\"},[_vm._v(_vm._s(_vm.filePath))])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:\"picker\",staticClass:\"reference-file-picker\"})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2023 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div ref=\"picker\" class=\"reference-file-picker\" />\n</template>\n\n<script>\nimport { FilePickerType } from '@nextcloud/dialogs'\nimport { generateUrl } from '@nextcloud/router'\nexport default {\n\tname: 'FileReferencePickerElement',\n\tcomponents: {\n\t},\n\tprops: {\n\t\tproviderId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\taccessible: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.openFilePicker()\n\t\twindow.addEventListener('click', this.onWindowClick)\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('click', this.onWindowClick)\n\t},\n\tmethods: {\n\t\tonWindowClick(e) {\n\t\t\tif (e.target.tagName === 'A' && e.target.classList.contains('oc-dialog-close')) {\n\t\t\t\tthis.$emit('cancel')\n\t\t\t}\n\t\t},\n\t\tasync openFilePicker() {\n\t\t\tOC.dialogs.filepicker(\n\t\t\t\tt('files', 'Select file or folder to link to'),\n\t\t\t\t(file) => {\n\t\t\t\t\tconst client = OC.Files.getClient()\n\t\t\t\t\tclient.getFileInfo(file).then((_status, fileInfo) => {\n\t\t\t\t\t\tthis.submit(fileInfo.id)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tfalse, // multiselect\n\t\t\t\t[], // mime filter\n\t\t\t\tfalse, // modal\n\t\t\t\tFilePickerType.Choose, // type\n\t\t\t\t'',\n\t\t\t\t{\n\t\t\t\t\ttarget: this.$refs.picker,\n\t\t\t\t},\n\t\t\t)\n\t\t},\n\t\tsubmit(fileId) {\n\t\t\tconst fileLink = window.location.protocol + '//' + window.location.host\n\t\t\t\t+ generateUrl('/f/{fileId}', { fileId })\n\t\t\tthis.$emit('submit', fileLink)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.reference-file-picker {\n\tflex-grow: 1;\n\tmargin-top: 44px;\n\n\t&:deep(.oc-dialog) {\n\t\ttransform: none !important;\n\t\tbox-shadow: none !important;\n\t\tflex-grow: 1 !important;\n\t\tposition: static !important;\n\t\twidth: 100% !important;\n\t\theight: auto !important;\n\t\tpadding: 0 !important;\n\t\tmax-width: initial;\n\n\t\t.oc-dialog-close {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.oc-dialog-buttonrow.onebutton.aside {\n\t\t\tposition: absolute;\n\t\t\tpadding: 12px 32px;\n\t\t}\n\n\t\t.oc-dialog-content {\n\t\t\tmax-width: 100% !important;\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileReferencePickerElement.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileReferencePickerElement.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileReferencePickerElement.vue?vue&type=style&index=0&id=087c9640&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileReferencePickerElement.vue?vue&type=style&index=0&id=087c9640&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileReferencePickerElement.vue?vue&type=template&id=087c9640&scoped=true&\"\nimport script from \"./FileReferencePickerElement.vue?vue&type=script&lang=js&\"\nexport * from \"./FileReferencePickerElement.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileReferencePickerElement.vue?vue&type=style&index=0&id=087c9640&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"087c9640\",\n null\n \n)\n\nexport default component.exports","/**\n * @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport Vue from 'vue'\nimport { translate as t } from '@nextcloud/l10n'\n\nimport { registerWidget, registerCustomPickerElement, NcCustomPickerRenderResult } from '@nextcloud/vue/dist/Components/NcRichText.js'\n\nimport FileWidget from './views/ReferenceFileWidget.vue'\nimport FileReferencePickerElement from './views/FileReferencePickerElement.vue'\n\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t},\n})\n\nregisterWidget('file', (el, { richObjectType, richObject, accessible }) => {\n\tconst Widget = Vue.extend(FileWidget)\n\tnew Widget({\n\t\tpropsData: {\n\t\t\trichObjectType,\n\t\t\trichObject,\n\t\t\taccessible,\n\t\t},\n\t}).$mount(el)\n})\n\nregisterCustomPickerElement('files', (el, { providerId, accessible }) => {\n\tconst Element = Vue.extend(FileReferencePickerElement)\n\tconst vueElement = new Element({\n\t\tpropsData: {\n\t\t\tproviderId,\n\t\t\taccessible,\n\t\t},\n\t}).$mount(el)\n\treturn new NcCustomPickerRenderResult(vueElement.$el, vueElement)\n}, (el, renderResult) => {\n\trenderResult.object.$destroy()\n})\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".reference-file-picker[data-v-087c9640]{flex-grow:1;margin-top:44px}.reference-file-picker[data-v-087c9640] .oc-dialog{transform:none !important;box-shadow:none !important;flex-grow:1 !important;position:static !important;width:100% !important;height:auto !important;padding:0 !important;max-width:initial}.reference-file-picker[data-v-087c9640] .oc-dialog .oc-dialog-close{display:none}.reference-file-picker[data-v-087c9640] .oc-dialog .oc-dialog-buttonrow.onebutton.aside{position:absolute;padding:12px 32px}.reference-file-picker[data-v-087c9640] .oc-dialog .oc-dialog-content{max-width:100% !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/FileReferencePickerElement.vue\"],\"names\":[],\"mappings\":\"AACA,wCACC,WAAA,CACA,eAAA,CAEA,mDACC,yBAAA,CACA,0BAAA,CACA,sBAAA,CACA,0BAAA,CACA,qBAAA,CACA,sBAAA,CACA,oBAAA,CACA,iBAAA,CAEA,oEACC,YAAA,CAGD,wFACC,iBAAA,CACA,iBAAA,CAGD,sEACC,yBAAA\",\"sourcesContent\":[\"\\n.reference-file-picker {\\n\\tflex-grow: 1;\\n\\tmargin-top: 44px;\\n\\n\\t&:deep(.oc-dialog) {\\n\\t\\ttransform: none !important;\\n\\t\\tbox-shadow: none !important;\\n\\t\\tflex-grow: 1 !important;\\n\\t\\tposition: static !important;\\n\\t\\twidth: 100% !important;\\n\\t\\theight: auto !important;\\n\\t\\tpadding: 0 !important;\\n\\t\\tmax-width: initial;\\n\\n\\t\\t.oc-dialog-close {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\n\\t\\t.oc-dialog-buttonrow.onebutton.aside {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tpadding: 12px 32px;\\n\\t\\t}\\n\\n\\t\\t.oc-dialog-content {\\n\\t\\t\\tmax-width: 100% !important;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".widget-file[data-v-3f729da0]{display:flex;flex-grow:1;color:var(--color-main-text) !important;text-decoration:none !important}.widget-file--image[data-v-3f729da0]{min-width:40%;background-position:center;background-size:cover;background-repeat:no-repeat}.widget-file--image.widget-file--image--icon[data-v-3f729da0]{min-width:88px;background-size:44px}.widget-file--title[data-v-3f729da0]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:bold}.widget-file--details[data-v-3f729da0]{padding:12px;flex-grow:1;display:flex;flex-direction:column}.widget-file--details p[data-v-3f729da0]{margin:0;padding:0}.widget-file--description[data-v-3f729da0]{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical}.widget-file--link[data-v-3f729da0]{color:var(--color-text-maxcontrast)}.widget-file.widget-file--no-access[data-v-3f729da0]{padding:12px}.widget-file.widget-file--no-access .widget-file--details[data-v-3f729da0]{padding:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/ReferenceFileWidget.vue\"],\"names\":[],\"mappings\":\"AACA,8BACC,YAAA,CACA,WAAA,CACA,uCAAA,CACA,+BAAA,CAEA,qCACC,aAAA,CACA,0BAAA,CACA,qBAAA,CACA,2BAAA,CAEA,8DACC,cAAA,CACA,oBAAA,CAIF,qCACC,eAAA,CACA,sBAAA,CACA,kBAAA,CACA,gBAAA,CAGD,uCACC,YAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CAEA,yCACC,QAAA,CACA,SAAA,CAIF,2CACC,eAAA,CACA,sBAAA,CACA,mBAAA,CACA,oBAAA,CACA,YAAA,CACA,2BAAA,CAGD,oCACC,mCAAA,CAGD,qDACC,YAAA,CAEA,2EACC,SAAA\",\"sourcesContent\":[\"\\n.widget-file {\\n\\tdisplay: flex;\\n\\tflex-grow: 1;\\n\\tcolor: var(--color-main-text) !important;\\n\\ttext-decoration: none !important;\\n\\n\\t&--image {\\n\\t\\tmin-width: 40%;\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-size: cover;\\n\\t\\tbackground-repeat: no-repeat;\\n\\n\\t\\t&.widget-file--image--icon {\\n\\t\\t\\tmin-width: 88px;\\n\\t\\t\\tbackground-size: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t&--title {\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\twhite-space: nowrap;\\n\\t\\tfont-weight: bold;\\n\\t}\\n\\n\\t&--details {\\n\\t\\tpadding: 12px;\\n\\t\\tflex-grow: 1;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\n\\t\\tp {\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\t}\\n\\n\\t&--description {\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tdisplay: -webkit-box;\\n\\t\\t-webkit-line-clamp: 3;\\n\\t\\tline-clamp: 3;\\n\\t\\t-webkit-box-orient: vertical;\\n\\t}\\n\\n\\t&--link {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&.widget-file--no-access {\\n\\t\\tpadding: 12px;\\n\\n\\t\\t.widget-file--details {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 9098;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t9098: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(13057)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","name","props","richObject","type","Object","required","accessible","Boolean","default","data","previewUrl","window","OC","MimeType","getIconUrl","mimetype","computed","fileSize","Util","humanFileSize","size","fileMtime","relativeModifiedDate","mtime","filePath","path","filePreview","backgroundImage","filePreviewClass","mounted","generateUrl","fileId","id","img","Image","onload","onerror","err","console","error","src","methods","navigate","OCA","Viewer","mimetypes","indexOf","open","location","link","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","on","$event","preventDefault","apply","arguments","class","style","_v","_s","t","components","providerId","String","openFilePicker","addEventListener","onWindowClick","beforeDestroy","removeEventListener","e","target","tagName","classList","contains","$emit","dialogs","filepicker","file","Files","getClient","getFileInfo","then","_status","fileInfo","submit","FilePickerType","$refs","picker","fileLink","protocol","host","ref","Vue","registerWidget","el","_ref","richObjectType","FileWidget","propsData","$mount","registerCustomPickerElement","_ref2","vueElement","FileReferencePickerElement","NcCustomPickerRenderResult","$el","renderResult","object","$destroy","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","keys","every","key","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","children","b","document","baseURI","self","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/settings-vue-settings-personal-info.js b/dist/settings-vue-settings-personal-info.js
index 84ef6f73bb2..ab30a9b827c 100644
--- a/dist/settings-vue-settings-personal-info.js
+++ b/dist/settings-vue-settings-personal-info.js
@@ -1,3 +1,3 @@
/*! For license information please see settings-vue-settings-personal-info.js.LICENSE.txt */
-(()=>{var e,a={28110:(e,a,n)=>{"use strict";var i=n(20144),o=n(45994),s=n(79954),r=n(31352),l=(n(36144),n(4820)),d=n(79753),c=n(64024),p=n(78595),A=n(75925),u=n.n(A),m=n(10861),h=n.n(m),g=n(17652),v=(n(74063),n(75762)),C=n(34829),f=n(57612),b=n(61149),y=n(12945),x=n.n(y),E=n(45400);const _={name:"FederationControlAction",components:{NcActionButton:n.n(E)()},props:{activeScope:{type:String,required:!0},displayName:{type:String,required:!0},handleScopeChange:{type:Function,default:()=>{}},iconClass:{type:String,required:!0},isSupportedScope:{type:Boolean,required:!0},name:{type:String,required:!0},tooltipDisabled:{type:String,default:""},tooltip:{type:String,required:!0}},methods:{updateScope(){this.handleScopeChange(this.name)}}};var w=n(93379),I=n.n(w),S=n(7795),P=n.n(S),L=n(90569),j=n.n(L),B=n(3565),k=n.n(B),D=n(19216),O=n.n(D),N=n(44589),R=n.n(N),T=n(28561),Z={};Z.styleTagTransform=R(),Z.setAttributes=k(),Z.insert=j().bind(null,"head"),Z.domAPI=P(),Z.insertStyleElement=O(),I()(T.Z,Z),T.Z&&T.Z.locals&&T.Z.locals;var M=n(51900);const U=(0,M.Z)(_,(function(){var t=this;return(0,t._self._c)("NcActionButton",{staticClass:"federation-actions__btn",class:{"federation-actions__btn--active":t.activeScope===t.name},attrs:{"aria-label":t.isSupportedScope?t.tooltip:t.tooltipDisabled,"close-after-click":!0,disabled:!t.isSupportedScope,icon:t.iconClass,title:t.isSupportedScope?t.tooltip:t.tooltipDisabled},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.updateScope.apply(null,arguments)}}},[t._v("\n\t"+t._s(t.isSupportedScope?t.tooltip:t.tooltipDisabled)+"\n")])}),[],!1,null,"d426ed04",null).exports,F=Object.freeze({ADDRESS:"address",AVATAR:"avatar",BIOGRAPHY:"biography",DISPLAYNAME:"displayname",EMAIL_COLLECTION:"additional_mail",EMAIL:"email",HEADLINE:"headline",NOTIFICATION_EMAIL:"notify_email",FEDIVERSE:"fediverse",ORGANISATION:"organisation",PHONE:"phone",PROFILE_ENABLED:"profile_enabled",ROLE:"role",TWITTER:"twitter",WEBSITE:"website"}),z=Object.freeze({ADDRESS:(0,r.Iu)("settings","Location"),AVATAR:(0,r.Iu)("settings","Profile picture"),BIOGRAPHY:(0,r.Iu)("settings","About"),DISPLAYNAME:(0,r.Iu)("settings","Full name"),EMAIL_COLLECTION:(0,r.Iu)("settings","Additional email"),EMAIL:(0,r.Iu)("settings","Email"),HEADLINE:(0,r.Iu)("settings","Headline"),ORGANISATION:(0,r.Iu)("settings","Organisation"),PHONE:(0,r.Iu)("settings","Phone number"),PROFILE_ENABLED:(0,r.Iu)("settings","Profile"),ROLE:(0,r.Iu)("settings","Role"),TWITTER:(0,r.Iu)("settings","Twitter"),FEDIVERSE:(0,r.Iu)("settings","Fediverse (e.g. Mastodon)"),WEBSITE:(0,r.Iu)("settings","Website")}),V=Object.freeze({[F.ADDRESS]:z.ADDRESS,[F.AVATAR]:z.AVATAR,[F.BIOGRAPHY]:z.BIOGRAPHY,[F.DISPLAYNAME]:z.DISPLAYNAME,[F.EMAIL_COLLECTION]:z.EMAIL_COLLECTION,[F.EMAIL]:z.EMAIL,[F.HEADLINE]:z.HEADLINE,[F.ORGANISATION]:z.ORGANISATION,[F.PHONE]:z.PHONE,[F.PROFILE_ENABLED]:z.PROFILE_ENABLED,[F.ROLE]:z.ROLE,[F.TWITTER]:z.TWITTER,[F.FEDIVERSE]:z.FEDIVERSE,[F.WEBSITE]:z.WEBSITE}),H=Object.freeze({PROFILE_VISIBILITY:(0,r.Iu)("settings","Profile visibility")}),G=Object.freeze({[z.ADDRESS]:F.ADDRESS,[z.AVATAR]:F.AVATAR,[z.BIOGRAPHY]:F.BIOGRAPHY,[z.DISPLAYNAME]:F.DISPLAYNAME,[z.EMAIL_COLLECTION]:F.EMAIL_COLLECTION,[z.EMAIL]:F.EMAIL,[z.HEADLINE]:F.HEADLINE,[z.ORGANISATION]:F.ORGANISATION,[z.PHONE]:F.PHONE,[z.PROFILE_ENABLED]:F.PROFILE_ENABLED,[z.ROLE]:F.ROLE,[z.TWITTER]:F.TWITTER,[z.FEDIVERSE]:F.FEDIVERSE,[z.WEBSITE]:F.WEBSITE}),q=Object.freeze({LANGUAGE:"language",LOCALE:"locale"}),Y=Object.freeze({LANGUAGE:(0,r.Iu)("settings","Language"),LOCALE:(0,r.Iu)("settings","Locale")}),$=Object.freeze({PRIVATE:"v2-private",LOCAL:"v2-local",FEDERATED:"v2-federated",PUBLISHED:"v2-published"}),W=Object.freeze({[z.ADDRESS]:[$.LOCAL,$.PRIVATE],[z.AVATAR]:[$.LOCAL,$.PRIVATE],[z.BIOGRAPHY]:[$.LOCAL,$.PRIVATE],[z.DISPLAYNAME]:[$.LOCAL],[z.EMAIL_COLLECTION]:[$.LOCAL],[z.EMAIL]:[$.LOCAL],[z.HEADLINE]:[$.LOCAL,$.PRIVATE],[z.ORGANISATION]:[$.LOCAL,$.PRIVATE],[z.PHONE]:[$.LOCAL,$.PRIVATE],[z.PROFILE_ENABLED]:[$.LOCAL,$.PRIVATE],[z.ROLE]:[$.LOCAL,$.PRIVATE],[z.TWITTER]:[$.LOCAL,$.PRIVATE],[z.FEDIVERSE]:[$.LOCAL,$.PRIVATE],[z.WEBSITE]:[$.LOCAL,$.PRIVATE]}),K=Object.freeze([z.BIOGRAPHY,z.HEADLINE,z.ORGANISATION,z.ROLE]),Q="Scope",J=Object.freeze({[$.PRIVATE]:{name:$.PRIVATE,displayName:(0,r.Iu)("settings","Private"),tooltip:(0,r.Iu)("settings","Only visible to people matched via phone number integration through Talk on mobile"),tooltipDisabled:(0,r.Iu)("settings","Not available as this property is required for core functionality including file sharing and calendar invitations"),iconClass:"icon-phone"},[$.LOCAL]:{name:$.LOCAL,displayName:(0,r.Iu)("settings","Local"),tooltip:(0,r.Iu)("settings","Only visible to people on this instance and guests"),iconClass:"icon-password"},[$.FEDERATED]:{name:$.FEDERATED,displayName:(0,r.Iu)("settings","Federated"),tooltip:(0,r.Iu)("settings","Only synchronize to trusted servers"),tooltipDisabled:(0,r.Iu)("settings","Not available as federation has been disabled for your account, contact your system administrator if you have any questions"),iconClass:"icon-contacts-dark"},[$.PUBLISHED]:{name:$.PUBLISHED,displayName:(0,r.Iu)("settings","Published"),tooltip:(0,r.Iu)("settings","Synchronize to trusted servers and the global and public address book"),tooltipDisabled:(0,r.Iu)("settings","Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions"),iconClass:"icon-link"}}),X=$.LOCAL,tt=Object.freeze({NOT_VERIFIED:0,VERIFICATION_IN_PROGRESS:1,VERIFIED:2}),et=/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/i;var at=n(10128);n(65509);const nt=async(t,e)=>{"boolean"==typeof e&&(e=e?"1":"0");const a=(0,o.ts)().uid,n=(0,d.generateOcsUrl)("cloud/users/{userId}",{userId:a});return await(0,at.confirmPassword)(),(await l.default.put(n,{key:t,value:e})).data},it=(0,n(17499).IY)().setApp("settings").detectUser().build(),ot=(t,e)=>{var a;let n="";e&&(n+=e),429===(null===(a=t.response)||void 0===a?void 0:a.status)&&(n&&(n+="\n"),n+=(0,r.Iu)("settings","There were too many requests from your network. Retry later or contact your administrator if this is an error.")),(0,c.x2)(n),it.error(n||(0,r.Iu)("Error"),t)},{federationEnabled:st,lookupServerUploadEnabled:rt}=(0,s.j)("settings","accountParameters",{}),lt={name:"FederationControl",components:{NcActions:x(),FederationControlAction:U},props:{readable:{type:String,required:!0,validator:t=>Object.values(z).includes(t)||Object.values(Y).includes(t)||t===H.PROFILE_VISIBILITY},additional:{type:Boolean,default:!1},additionalValue:{type:String,default:""},disabled:{type:Boolean,default:!1},handleAdditionalScopeChange:{type:Function,default:null},scope:{type:String,required:!0}},data(){return{readableLowerCase:this.readable.toLocaleLowerCase(),initialScope:this.scope}},computed:{ariaLabel(){return t("settings","Change scope level of {property}, current scope is {scope}",{property:this.readableLowerCase,scope:this.scopeDisplayNameLowerCase})},scopeDisplayNameLowerCase(){return J[this.scope].displayName.toLocaleLowerCase()},scopeIcon(){return J[this.scope].iconClass},federationScopes:()=>Object.values(J),supportedScopes(){const t=W[this.readable];return K.includes(this.readable)||(st&&t.push($.FEDERATED),rt&&t.push($.PUBLISHED)),t}},methods:{async changeScope(t){this.$emit("update:scope",t),this.additional?await this.updateAdditionalScope(t):await this.updatePrimaryScope(t)},async updatePrimaryScope(e){try{var a,n;const t=await(async(t,e)=>{const a=(0,o.ts)().uid,n=(0,d.generateOcsUrl)("cloud/users/{userId}",{userId:a});return await(0,at.confirmPassword)(),(await l.default.put(n,{key:"".concat(t).concat(Q),value:e})).data})(G[this.readable],e);this.handleResponse({scope:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update federation scope of the primary {property}",{property:this.readableLowerCase}),error:e})}},async updateAdditionalScope(e){try{var a,n;const t=await this.handleAdditionalScopeChange(this.additionalValue,e);this.handleResponse({scope:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update federation scope of additional {property}",{property:this.readableLowerCase}),error:e})}},handleResponse(t){let{scope:e,status:a,errorMessage:n,error:i}=t;"ok"===a?this.initialScope=e:(this.$emit("update:scope",this.initialScope),ot(i,n))}}},dt=lt;var ct=n(14036),pt={};pt.styleTagTransform=R(),pt.setAttributes=k(),pt.insert=j().bind(null,"head"),pt.domAPI=P(),pt.insertStyleElement=O(),I()(ct.Z,pt),ct.Z&&ct.Z.locals&&ct.Z.locals;const At=(0,M.Z)(dt,(function(){var t=this,e=t._self._c;return e("NcActions",{class:{"federation-actions":!t.additional,"federation-actions--additional":t.additional},attrs:{"aria-label":t.ariaLabel,"default-icon":t.scopeIcon,disabled:t.disabled}},t._l(t.federationScopes,(function(a){return e("FederationControlAction",{key:a.name,attrs:{"active-scope":t.scope,"display-name":a.displayName,"handle-scope-change":t.changeScope,"icon-class":a.iconClass,"is-supported-scope":t.supportedScopes.includes(a.name),name:a.name,"tooltip-disabled":a.tooltipDisabled,tooltip:a.tooltip,"aria-label":a.tooltip}})})),1)}),[],!1,null,"4ea07669",null).exports,ut={name:"HeaderBar",components:{FederationControl:At,NcButton:h(),Plus:b.Z},props:{scope:{type:String,default:null},readable:{type:String,required:!0},inputId:{type:String,default:null},isEditable:{type:Boolean,default:!0},isMultiValueSupported:{type:Boolean,default:!1},isValidSection:{type:Boolean,default:!0},isHeading:{type:Boolean,default:!1}},data(){return{localScope:this.scope}},computed:{isProfileProperty(){return this.readable===z.PROFILE_ENABLED},isSettingProperty(){return!Object.values(z).includes(this.readable)&&!Object.values(H).includes(this.readable)}},methods:{onAddAdditional(){this.$emit("add-additional")},onScopeChange(t){this.$emit("update:scope",t)}}};var mt=n(90564),ht={};ht.styleTagTransform=R(),ht.setAttributes=k(),ht.insert=j().bind(null,"head"),ht.domAPI=P(),ht.insertStyleElement=O(),I()(mt.Z,ht),mt.Z&&mt.Z.locals&&mt.Z.locals;const gt=(0,M.Z)(ut,(function(){var t=this,e=t._self._c;return e(t.isHeading?"h3":"div",{tag:"component",staticClass:"headerbar-label",class:{"setting-property":t.isSettingProperty,"profile-property":t.isProfileProperty}},[t.isHeading?e("span",[t._v("\n\t\t"+t._s(t.readable)+"\n\t")]):e("label",{attrs:{for:t.inputId}},[t._v("\n\t\t"+t._s(t.readable)+"\n\t")]),t._v(" "),t.scope?[e("FederationControl",{staticClass:"federation-control",attrs:{readable:t.readable,scope:t.localScope},on:{"update:scope":[function(e){t.localScope=e},t.onScopeChange]}})]:t._e(),t._v(" "),t.isEditable&&t.isMultiValueSupported?[e("NcButton",{attrs:{type:"tertiary",disabled:!t.isValidSection,"aria-label":t.t("settings","Add additional email")},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.onAddAdditional.apply(null,arguments)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Plus",{attrs:{size:20}})]},proxy:!0}],null,!1,32235154)},[t._v("\n\t\t\t"+t._s(t.t("settings","Add"))+"\n\t\t")])]:t._e()],2)}),[],!1,null,"b43fcc0c",null).exports,{avatar:vt}=(0,s.j)("settings","personalInfoParameters",{}),{avatarChangeSupported:Ct}=(0,s.j)("settings","accountParameters",{}),ft=["image/png","image/jpeg"],bt=(0,c.fn)(t("settings","Choose your profile picture")).setMultiSelect(!1).setMimeTypeFilter(ft).setModal(!0).setType(1).allowDirectories(!1).build(),yt={name:"AvatarSection",components:{Delete:f.Z,Folder:C.default,HeaderBar:gt,NcAvatar:u(),NcButton:h(),Upload:v.Z,VueCropper:g.Z},data:()=>({avatar:{...vt,readable:V[vt.name]},avatarChangeSupported:Ct,showCropper:!1,loading:!1,userId:(0,o.ts)().uid,displayName:(0,o.ts)().displayName,version:oc_userconfig.avatar.version,isGenerated:oc_userconfig.avatar.generated,validMimeTypes:ft,cropperOptions:{aspectRatio:1,viewMode:1,guides:!1,center:!1,highlight:!1,autoCropArea:1,minContainerWidth:300,minContainerHeight:300}}),computed:{inputId(){return"account-property-".concat(this.avatar.name)}},created(){(0,p.Ld)("settings:display-name:updated",this.handleDisplayNameUpdate)},beforeDestroy(){(0,p.r1)("settings:display-name:updated",this.handleDisplayNameUpdate)},methods:{activateLocalFilePicker(){this.$refs.input.value=null,this.$refs.input.click()},onChange(e){this.loading=!0;const a=e.target.files[0];if(!this.validMimeTypes.includes(a.type))return(0,c.x2)(t("settings","Please select a valid png or jpg file")),void this.cancel();const n=new FileReader;n.onload=t=>{this.$refs.cropper.replace(t.target.result),this.showCropper=!0},n.readAsDataURL(a)},async openFilePicker(){const e=await bt.pick();this.loading=!0;try{const{data:t}=await l.default.post((0,d.generateUrl)("/avatar"),{path:e});if("success"===t.status)this.handleAvatarUpdate(!1);else if("notsquare"===t.data){const t=(0,d.generateUrl)("/avatar/tmp")+"?requesttoken="+encodeURIComponent(OC.requestToken)+"#"+Math.floor(1e3*Math.random());this.$refs.cropper.replace(t),this.showCropper=!0}else(0,c.x2)(t.data.message),this.cancel()}catch(e){(0,c.x2)(t("settings","Error setting profile picture")),this.cancel()}},saveAvatar(){this.showCropper=!1,this.loading=!0;const e=this.$refs.cropper.getCroppedCanvas(),a=e.width>512?512/e.width:1;this.$refs.cropper.scale(a,a).getCroppedCanvas().toBlob((async e=>{if(null===e)return(0,c.x2)(t("settings","Error cropping profile picture")),void this.cancel();const a=new FormData;a.append("files[]",e);try{await l.default.post((0,d.generateUrl)("/avatar"),a),this.handleAvatarUpdate(!1)}catch(e){(0,c.x2)(t("settings","Error saving profile picture")),this.handleAvatarUpdate(this.isGenerated)}}))},async removeAvatar(){this.loading=!0;try{await l.default.delete((0,d.generateUrl)("/avatar")),this.handleAvatarUpdate(!0)}catch(e){(0,c.x2)(t("settings","Error removing profile picture")),this.handleAvatarUpdate(this.isGenerated)}},cancel(){this.showCropper=!1,this.loading=!1},handleAvatarUpdate(t){this.version=oc_userconfig.avatar.version=Date.now(),this.isGenerated=oc_userconfig.avatar.generated=t,this.loading=!1,(0,p.j8)("settings:avatar:updated",oc_userconfig.avatar.version)},handleDisplayNameUpdate(){this.version=oc_userconfig.avatar.version}}};var xt=n(31246),Et={};Et.styleTagTransform=R(),Et.setAttributes=k(),Et.insert=j().bind(null,"head"),Et.domAPI=P(),Et.insertStyleElement=O(),I()(xt.Z,Et),xt.Z&&xt.Z.locals&&xt.Z.locals;const _t=(0,M.Z)(yt,(function(){var t=this,e=t._self._c;return e("section",{attrs:{id:"vue-avatar-section"}},[e("h3",{staticClass:"hidden-visually"},[t._v(" "+t._s(t.t("settings","Your profile information"))+" ")]),t._v(" "),e("HeaderBar",{attrs:{"input-id":t.avatarChangeSupported?t.inputId:null,readable:t.avatar.readable,scope:t.avatar.scope},on:{"update:scope":function(e){return t.$set(t.avatar,"scope",e)}}}),t._v(" "),t.showCropper?t._e():e("div",{staticClass:"avatar__container"},[e("div",{staticClass:"avatar__preview"},[t.loading?e("div",{staticClass:"icon-loading"}):e("NcAvatar",{key:t.version,attrs:{user:t.userId,"aria-label":t.t("settings","Your profile picture"),"disabled-menu":!0,"disabled-tooltip":!0,"show-user-status":!1,size:180}})],1),t._v(" "),t.avatarChangeSupported?[e("div",{staticClass:"avatar__buttons"},[e("NcButton",{attrs:{"aria-label":t.t("settings","Upload profile picture")},on:{click:t.activateLocalFilePicker},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Upload",{attrs:{size:20}})]},proxy:!0}],null,!1,1329850251)}),t._v(" "),e("NcButton",{attrs:{"aria-label":t.t("settings","Choose profile picture from Files")},on:{click:t.openFilePicker},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Folder",{attrs:{size:20}})]},proxy:!0}],null,!1,4270628382)}),t._v(" "),t.isGenerated?t._e():e("NcButton",{attrs:{"aria-label":t.t("settings","Remove profile picture")},on:{click:t.removeAvatar},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Delete",{attrs:{size:20}})]},proxy:!0}],null,!1,2705356561)})],1),t._v(" "),e("span",[t._v(t._s(t.t("settings","The file must be a PNG or JPG")))]),t._v(" "),e("input",{ref:"input",attrs:{id:t.inputId,type:"file",accept:t.validMimeTypes.join(",")},on:{change:t.onChange}})]:e("span",[t._v("\n\t\t\t"+t._s(t.t("settings","Picture provided by original account"))+"\n\t\t")])],2),t._v(" "),e("div",{directives:[{name:"show",rawName:"v-show",value:t.showCropper,expression:"showCropper"}],staticClass:"avatar__container"},[e("VueCropper",t._b({ref:"cropper",staticClass:"avatar__cropper"},"VueCropper",t.cropperOptions,!1)),t._v(" "),e("div",{staticClass:"avatar__cropper-buttons"},[e("NcButton",{on:{click:t.cancel}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Cancel"))+"\n\t\t\t")]),t._v(" "),e("NcButton",{attrs:{type:"primary"},on:{click:t.saveAvatar}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Set as profile picture"))+"\n\t\t\t")])],1),t._v(" "),e("span",[t._v(t._s(t.t("settings","Please note that it can take up to 24 hours for your profile picture to be updated everywhere.")))])],1)],1)}),[],!1,null,"022fd5d4",null).exports;var wt=n(48959),It=n.n(wt),St=n(86158),Pt=n(34046);const{groups:Lt,quota:jt,totalSpace:Bt,usage:kt,usageRelative:Dt}=(0,s.j)("settings","personalInfoParameters",{}),Ot={name:"DetailsSection",components:{Account:St.Z,CircleSlice:Pt.Z,HeaderBar:gt,NcProgressBar:It()},computed:{quotaText:()=>-3===jt?t("settings","You are using <strong>{usage}</strong>",{usage:kt}):t("settings","You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)",{usage:kt,totalSpace:Bt,usageRelative:Dt})},data:()=>({groups:Lt,usageRelative:Dt})};var Nt=n(18118),Rt={};Rt.styleTagTransform=R(),Rt.setAttributes=k(),Rt.insert=j().bind(null,"head"),Rt.domAPI=P(),Rt.insertStyleElement=O(),I()(Nt.Z,Rt),Nt.Z&&Nt.Z.locals&&Nt.Z.locals;const Tt=(0,M.Z)(Ot,(function(){var t=this,e=t._self._c;return e("section",[e("HeaderBar",{attrs:{"is-heading":!0,readable:t.t("settings","Details")}}),t._v(" "),e("div",{staticClass:"details"},[e("div",{staticClass:"details__groups"},[e("Account",{attrs:{size:20}}),t._v(" "),e("div",{staticClass:"details__groups-info"},[e("p",[t._v(t._s(t.t("settings","You are a member of the following groups:")))]),t._v(" "),e("p",{staticClass:"details__groups-list"},[t._v(t._s(t.groups.join(", ")))])])],1),t._v(" "),e("div",{staticClass:"details__quota"},[e("CircleSlice",{attrs:{size:20}}),t._v(" "),e("div",{staticClass:"details__quota-info"},[e("p",{staticClass:"details__quota-text",domProps:{innerHTML:t._s(t.quotaText)}}),t._v(" "),e("NcProgressBar",{attrs:{size:"medium",value:t.usageRelative,error:t.usageRelative>80}})],1)],1)])],1)}),[],!1,null,"1ab46e68",null).exports;var Zt=n(20296),Mt=n.n(Zt),Ut=n(94603),Ft=n(31974),zt=n(80419);const Vt={name:"AccountPropertySection",components:{AlertCircle:Ut.default,AlertOctagon:Ft.Z,Check:zt.default,HeaderBar:gt},props:{name:{type:String,required:!0},value:{type:String,required:!0},scope:{type:String,required:!0},readable:{type:String,required:!0},placeholder:{type:String,required:!0},type:{type:String,default:"text"},isEditable:{type:Boolean,default:!0},multiLine:{type:Boolean,default:!1},onValidate:{type:Function,default:null},onSave:{type:Function,default:null}},data(){return{initialValue:this.value,helperText:null,showCheckmarkIcon:!1,showErrorIcon:!1}},computed:{inputId(){return"account-property-".concat(this.name)}},methods:{onPropertyChange(t){this.$emit("update:value",t.target.value),this.debouncePropertyChange(t.target.value.trim())},debouncePropertyChange:Mt()((async function(t){this.helperText=null,this.$refs.input&&this.$refs.input.validationMessage?this.helperText=this.$refs.input.validationMessage:this.onValidate&&!this.onValidate(t)||await this.updateProperty(t)}),500),async updateProperty(e){try{var a,n;const t=await nt(this.name,e);this.handleResponse({value:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update {property}",{property:this.readable.toLocaleLowerCase()}),error:e})}},handleResponse(t){let{value:e,status:a,errorMessage:n,error:i}=t;"ok"===a?(this.initialValue=e,this.onSave&&this.onSave(e),this.showCheckmarkIcon=!0,setTimeout((()=>{this.showCheckmarkIcon=!1}),2e3)):(this.$emit("update:value",this.initialValue),ot(i,n),this.showErrorIcon=!0,setTimeout((()=>{this.showErrorIcon=!1}),2e3))}}};var Ht=n(78784),Gt={};Gt.styleTagTransform=R(),Gt.setAttributes=k(),Gt.insert=j().bind(null,"head"),Gt.domAPI=P(),Gt.insertStyleElement=O(),I()(Ht.Z,Gt),Ht.Z&&Ht.Z.locals&&Ht.Z.locals;const qt=(0,M.Z)(Vt,(function(){var t=this,e=t._self._c;return e("section",[e("HeaderBar",{attrs:{scope:t.scope,readable:t.readable,"input-id":t.inputId,"is-editable":t.isEditable},on:{"update:scope":function(e){t.scope=e},"update:readable":function(e){t.readable=e}}}),t._v(" "),t.isEditable?e("div",{staticClass:"property"},[t.multiLine?e("textarea",{attrs:{id:t.inputId,placeholder:t.placeholder,rows:"8",autocapitalize:"none",autocomplete:"off",autocorrect:"off"},domProps:{value:t.value},on:{input:t.onPropertyChange}}):e("input",{ref:"input",attrs:{id:t.inputId,placeholder:t.placeholder,type:t.type,"aria-describedby":t.helperText?"".concat(t.name,"-helper-text"):"",autocapitalize:"none",autocomplete:"on",autocorrect:"off"},domProps:{value:t.value},on:{input:t.onPropertyChange}}),t._v(" "),e("div",{staticClass:"property__actions-container"},[e("transition",{attrs:{name:"fade"}},[t.showCheckmarkIcon?e("Check",{attrs:{size:20}}):t.showErrorIcon?e("AlertOctagon",{attrs:{size:20}}):t._e()],1)],1)]):e("span",[t._v("\n\t\t"+t._s(t.value||t.t("settings","No {property} set",{property:t.readable.toLocaleLowerCase()}))+"\n\t")]),t._v(" "),t.helperText?e("p",{staticClass:"property__helper-text-message property__helper-text-message--error",attrs:{id:"".concat(t.name,"-helper-text")}},[e("AlertCircle",{staticClass:"property__helper-text-message__icon",attrs:{size:18}}),t._v("\n\t\t"+t._s(t.helperText)+"\n\t")],1):t._e()],1)}),[],!1,null,"6eb7d8e0",null).exports,{displayName:Yt}=(0,s.j)("settings","personalInfoParameters",{}),{displayNameChangeSupported:$t}=(0,s.j)("settings","accountParameters",{}),Wt={name:"DisplayNameSection",components:{AccountPropertySection:qt},data:()=>({displayName:{...Yt,readable:V[Yt.name]},displayNameChangeSupported:$t}),methods:{onValidate:t=>""!==t,onSave(t){oc_userconfig.avatar.generated&&(oc_userconfig.avatar.version=Date.now()),(0,p.j8)("settings:display-name:updated",t)}}},Kt=(0,M.Z)(Wt,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your full name"),"is-editable":t.displayNameChangeSupported,"on-validate":t.onValidate,"on-save":t.onSave}},"AccountPropertySection",t.displayName,!1,!0))}),[],!1,null,null,null).exports;var Qt=n(15961);const Jt=async t=>{const e=(0,o.ts)().uid,a=(0,d.generateOcsUrl)("cloud/users/{userId}",{userId:e});return await(0,at.confirmPassword)(),(await l.default.put(a,{key:F.EMAIL,value:t})).data},Xt=async t=>{const e=(0,o.ts)().uid,a=(0,d.generateOcsUrl)("cloud/users/{userId}/{collection}",{userId:e,collection:F.EMAIL_COLLECTION});return await(0,at.confirmPassword)(),(await l.default.put(a,{key:t,value:""})).data},te=async t=>{const e=(0,o.ts)().uid,a=(0,d.generateOcsUrl)("cloud/users/{userId}",{userId:e});return await(0,at.confirmPassword)(),(await l.default.put(a,{key:"".concat(F.EMAIL).concat(Q),value:t})).data},ee=async(t,e)=>{const a=(0,o.ts)().uid,n=(0,d.generateOcsUrl)("cloud/users/{userId}/{collectionScope}",{userId:a,collectionScope:"".concat(F.EMAIL_COLLECTION).concat(Q)});return await(0,at.confirmPassword)(),(await l.default.put(n,{key:t,value:e})).data};function ae(t){return"string"==typeof t&&et.test(t)&&"\n"!==t.slice(-1)&&t.length<=320&&encodeURIComponent(t).replace(/%../g,"x").length<=320}const ne={name:"Email",components:{NcActions:Qt.O3,NcActionButton:Qt.Js,AlertCircle:Ut.default,AlertOctagon:Ft.Z,Check:zt.default,FederationControl:At},props:{email:{type:String,required:!0},index:{type:Number,default:0},primary:{type:Boolean,default:!1},scope:{type:String,required:!0},activeNotificationEmail:{type:String,default:""},localVerificationState:{type:Number,default:tt.NOT_VERIFIED}},data(){return{propertyReadable:z.EMAIL,initialEmail:this.email,localScope:this.scope,saveAdditionalEmailScope:ee,helperText:null,showCheckmarkIcon:!1,showErrorIcon:!1}},computed:{deleteDisabled(){return this.primary?""===this.email||this.initialEmail!==this.email:""!==this.initialEmail&&this.initialEmail!==this.email},deleteEmailLabel(){return this.primary?t("settings","Remove primary email"):t("settings","Delete email")},setNotificationMailDisabled(){return!this.primary&&this.localVerificationState!==tt.VERIFIED},setNotificationMailLabel(){return this.isNotificationEmail?t("settings","Unset as primary email"):this.primary||this.localVerificationState===tt.VERIFIED?t("settings","Set as primary email"):t("settings","This address is not confirmed")},federationDisabled(){return!this.initialEmail},inputId(){return this.primary?"email":"email-".concat(this.index)},inputPlaceholder(){return this.primary?t("settings","Your email address"):t("settings","Additional email address {index}",{index:this.index+1})},isNotificationEmail(){return this.email&&this.email===this.activeNotificationEmail||this.primary&&""===this.activeNotificationEmail}},mounted(){this.primary||""!==this.initialEmail||this.$nextTick((()=>{var t;return null===(t=this.$refs.email)||void 0===t?void 0:t.focus()}))},methods:{onEmailChange(t){this.$emit("update:email",t.target.value),this.debounceEmailChange(t.target.value.trim())},debounceEmailChange:Mt()((async function(t){var e;this.helperText=null,null!==(e=this.$refs.email)&&void 0!==e&&e.validationMessage?this.helperText=this.$refs.email.validationMessage:(ae(t)||""===t)&&(this.primary?await this.updatePrimaryEmail(t):t&&(""===this.initialEmail?await this.addAdditionalEmail(t):await this.updateAdditionalEmail(t)))}),500),async deleteEmail(){this.primary?(this.$emit("update:email",""),await this.updatePrimaryEmail("")):await this.deleteAdditionalEmail()},async updatePrimaryEmail(e){try{var a,n;const t=await Jt(e);this.handleResponse({email:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(a){""===e?this.handleResponse({errorMessage:t("settings","Unable to delete primary email address"),error:a}):this.handleResponse({errorMessage:t("settings","Unable to update primary email address"),error:a})}},async addAdditionalEmail(e){try{var a,n;const t=await(async t=>{const e=(0,o.ts)().uid,a=(0,d.generateOcsUrl)("cloud/users/{userId}",{userId:e});return await(0,at.confirmPassword)(),(await l.default.put(a,{key:F.EMAIL_COLLECTION,value:t})).data})(e);this.handleResponse({email:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to add additional email address"),error:e})}},async setNotificationMail(){try{var t,e;const a=this.primary||this.isNotificationEmail?"":this.initialEmail,n=await(async t=>{const e=(0,o.ts)().uid,a=(0,d.generateOcsUrl)("cloud/users/{userId}",{userId:e});return await(0,at.confirmPassword)(),(await l.default.put(a,{key:F.NOTIFICATION_EMAIL,value:t})).data})(a);this.handleResponse({notificationEmail:a,status:null===(t=n.ocs)||void 0===t||null===(e=t.meta)||void 0===e?void 0:e.status})}catch(t){this.handleResponse({errorMessage:"Unable to choose this email for notifications",error:t})}},async updateAdditionalEmail(e){try{var a,n;const t=await(async(t,e)=>{const a=(0,o.ts)().uid,n=(0,d.generateOcsUrl)("cloud/users/{userId}/{collection}",{userId:a,collection:F.EMAIL_COLLECTION});return await(0,at.confirmPassword)(),(await l.default.put(n,{key:t,value:e})).data})(this.initialEmail,e);this.handleResponse({email:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update additional email address"),error:e})}},async deleteAdditionalEmail(){try{var e,a;const t=await Xt(this.initialEmail);this.handleDeleteAdditionalEmail(null===(e=t.ocs)||void 0===e||null===(a=e.meta)||void 0===a?void 0:a.status)}catch(e){this.handleResponse({errorMessage:t("settings","Unable to delete additional email address"),error:e})}},handleDeleteAdditionalEmail(e){"ok"===e?this.$emit("delete-additional-email"):this.handleResponse({errorMessage:t("settings","Unable to delete additional email address")})},handleResponse(t){let{email:e,notificationEmail:a,status:n,errorMessage:i,error:o}=t;"ok"===n?(e?this.initialEmail=e:void 0!==a&&this.$emit("update:notification-email",a),this.showCheckmarkIcon=!0,setTimeout((()=>{this.showCheckmarkIcon=!1}),2e3)):(ot(o,i),this.showErrorIcon=!0,setTimeout((()=>{this.showErrorIcon=!1}),2e3))},onScopeChange(t){this.$emit("update:scope",t)}}},ie=ne;var oe=n(11121),se={};se.styleTagTransform=R(),se.setAttributes=k(),se.insert=j().bind(null,"head"),se.domAPI=P(),se.insertStyleElement=O(),I()(oe.Z,se),oe.Z&&oe.Z.locals&&oe.Z.locals;const re=(0,M.Z)(ie,(function(){var t=this,e=t._self._c;return e("div",[e("div",{staticClass:"email"},[e("input",{ref:"email",attrs:{id:t.inputId,type:"email",placeholder:t.inputPlaceholder,"aria-describedby":t.helperText?"".concat(t.inputId,"-helper-text"):"",autocapitalize:"none",autocomplete:"on",autocorrect:"off"},domProps:{value:t.email},on:{input:t.onEmailChange}}),t._v(" "),e("div",{staticClass:"email__actions-container"},[e("transition",{attrs:{name:"fade"}},[t.showCheckmarkIcon?e("Check",{attrs:{size:20}}):t.showErrorIcon?e("AlertOctagon",{attrs:{size:20}}):t._e()],1),t._v(" "),t.primary?t._e():[e("FederationControl",{attrs:{readable:t.propertyReadable,additional:!0,"additional-value":t.email,disabled:t.federationDisabled,"handle-additional-scope-change":t.saveAdditionalEmailScope,scope:t.localScope},on:{"update:scope":[function(e){t.localScope=e},t.onScopeChange]}})],t._v(" "),e("NcActions",{staticClass:"email__actions",attrs:{"aria-label":t.t("settings","Email options"),"force-menu":!0}},[e("NcActionButton",{attrs:{"aria-label":t.deleteEmailLabel,"close-after-click":!0,disabled:t.deleteDisabled,icon:"icon-delete"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.deleteEmail.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t"+t._s(t.deleteEmailLabel)+"\n\t\t\t\t")]),t._v(" "),t.primary&&t.isNotificationEmail?t._e():e("NcActionButton",{attrs:{"aria-label":t.setNotificationMailLabel,"close-after-click":!0,disabled:t.setNotificationMailDisabled,icon:"icon-favorite"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.setNotificationMail.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t"+t._s(t.setNotificationMailLabel)+"\n\t\t\t\t")])],1)],2)]),t._v(" "),t.helperText?e("p",{staticClass:"email__helper-text-message email__helper-text-message--error",attrs:{id:"".concat(t.inputId,"-helper-text")}},[e("AlertCircle",{staticClass:"email__helper-text-message__icon",attrs:{size:18}}),t._v("\n\t\t"+t._s(t.helperText)+"\n\t")],1):t._e(),t._v(" "),t.isNotificationEmail?e("em",[t._v("\n\t\t"+t._s(t.t("settings","Primary email for password reset and notifications"))+"\n\t")]):t._e()])}),[],!1,null,"5ff85d38",null).exports,{emailMap:{additionalEmails:le,primaryEmail:de,notificationEmail:ce}}=(0,s.j)("settings","personalInfoParameters",{}),{displayNameChangeSupported:pe}=(0,s.j)("settings","accountParameters",{}),Ae={name:"EmailSection",components:{HeaderBar:gt,Email:re},data(){return{accountProperty:z.EMAIL,additionalEmails:le.map((t=>({...t,key:this.generateUniqueKey()}))),displayNameChangeSupported:pe,primaryEmail:{...de,readable:V[de.name]},savePrimaryEmailScope:te,notificationEmail:ce}},computed:{firstAdditionalEmail(){return this.additionalEmails.length?this.additionalEmails[0].value:null},inputId(){return"account-property-".concat(this.primaryEmail.name)},isValidSection(){return ae(this.primaryEmail.value)&&this.additionalEmails.map((t=>{let{value:e}=t;return e})).every(ae)},primaryEmailValue:{get(){return this.primaryEmail.value},set(t){this.primaryEmail.value=t}}},methods:{onAddAdditionalEmail(){this.isValidSection&&this.additionalEmails.push({value:"",scope:X,key:this.generateUniqueKey()})},onDeleteAdditionalEmail(t){this.$delete(this.additionalEmails,t)},async onUpdateEmail(){if(""===this.primaryEmailValue&&this.firstAdditionalEmail){const t=this.firstAdditionalEmail;await this.deleteFirstAdditionalEmail(),this.primaryEmailValue=t,await this.updatePrimaryEmail()}},async onUpdateNotificationEmail(t){this.notificationEmail=t},async updatePrimaryEmail(){try{var e,a;const t=await Jt(this.primaryEmailValue);this.handleResponse(null===(e=t.ocs)||void 0===e||null===(a=e.meta)||void 0===a?void 0:a.status)}catch(e){this.handleResponse("error",t("settings","Unable to update primary email address"),e)}},async deleteFirstAdditionalEmail(){try{var e,a;const t=await Xt(this.firstAdditionalEmail);this.handleDeleteFirstAdditionalEmail(null===(e=t.ocs)||void 0===e||null===(a=e.meta)||void 0===a?void 0:a.status)}catch(e){this.handleResponse("error",t("settings","Unable to delete additional email address"),e)}},handleDeleteFirstAdditionalEmail(e){"ok"===e?this.$delete(this.additionalEmails,0):this.handleResponse("error",t("settings","Unable to delete additional email address"),{})},handleResponse(t,e,a){"ok"!==t&&ot(a,e)},generateUniqueKey:()=>Math.random().toString(36).substring(2)}};var ue=n(73070),me={};me.styleTagTransform=R(),me.setAttributes=k(),me.insert=j().bind(null,"head"),me.domAPI=P(),me.insertStyleElement=O(),I()(ue.Z,me),ue.Z&&ue.Z.locals&&ue.Z.locals;const he=(0,M.Z)(Ae,(function(){var t=this,e=t._self._c;return e("section",[e("HeaderBar",{attrs:{"input-id":t.inputId,readable:t.primaryEmail.readable,"handle-scope-change":t.savePrimaryEmailScope,"is-editable":!0,"is-multi-value-supported":!0,"is-valid-section":t.isValidSection,scope:t.primaryEmail.scope},on:{"update:scope":function(e){return t.$set(t.primaryEmail,"scope",e)},"add-additional":t.onAddAdditionalEmail}}),t._v(" "),t.displayNameChangeSupported?[e("Email",{attrs:{primary:!0,scope:t.primaryEmail.scope,email:t.primaryEmail.value,"active-notification-email":t.notificationEmail},on:{"update:scope":function(e){return t.$set(t.primaryEmail,"scope",e)},"update:email":[function(e){return t.$set(t.primaryEmail,"value",e)},t.onUpdateEmail],"update:activeNotificationEmail":function(e){t.notificationEmail=e},"update:active-notification-email":function(e){t.notificationEmail=e},"update:notification-email":t.onUpdateNotificationEmail}})]:e("span",[t._v("\n\t\t"+t._s(t.primaryEmail.value||t.t("settings","No email address set"))+"\n\t")]),t._v(" "),t.additionalEmails.length?[e("em",{staticClass:"additional-emails-label"},[t._v(t._s(t.t("settings","Additional emails")))]),t._v(" "),t._l(t.additionalEmails,(function(a,n){return e("Email",{key:a.key,attrs:{index:n,scope:a.scope,email:a.value,"local-verification-state":parseInt(a.locallyVerified,10),"active-notification-email":t.notificationEmail},on:{"update:scope":function(e){return t.$set(a,"scope",e)},"update:email":[function(e){return t.$set(a,"value",e)},t.onUpdateEmail],"update:activeNotificationEmail":function(e){t.notificationEmail=e},"update:active-notification-email":function(e){t.notificationEmail=e},"update:notification-email":t.onUpdateNotificationEmail,"delete-additional-email":function(e){return t.onDeleteAdditionalEmail(n)}}})}))]:t._e()],2)}),[],!1,null,"46c7eb7e",null).exports;var ge=n(45004);const{defaultPhoneRegion:ve,phone:Ce}=(0,s.j)("settings","personalInfoParameters",{}),fe={name:"PhoneSection",components:{AccountPropertySection:qt},data:()=>({phone:{...Ce,readable:V[Ce.name]}}),methods:{onValidate:t=>ve?(0,ge.y)(t,ve):(0,ge.y)(t)}},be=(0,M.Z)(fe,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your phone number"),type:"tel","on-validate":t.onValidate}},"AccountPropertySection",t.phone,!1,!0))}),[],!1,null,null,null).exports,{location:ye}=(0,s.j)("settings","personalInfoParameters",{}),xe={name:"LocationSection",components:{AccountPropertySection:qt},data:()=>({location:{...ye,readable:V[ye.name]}})},Ee=(0,M.Z)(xe,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your location")}},"AccountPropertySection",t.location,!1,!0))}),[],!1,null,null,null).exports,{website:_e}=(0,s.j)("settings","personalInfoParameters",{}),we={name:"WebsiteSection",components:{AccountPropertySection:qt},data:()=>({website:{..._e,readable:V[_e.name]}}),methods:{onValidate:t=>function(t){try{return new URL(t),!0}catch(t){return!1}}(t)}},Ie=(0,M.Z)(we,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your website"),type:"url","on-validate":t.onValidate}},"AccountPropertySection",t.website,!1,!0))}),[],!1,null,null,null).exports,{twitter:Se}=(0,s.j)("settings","personalInfoParameters",{}),Pe={name:"TwitterSection",components:{AccountPropertySection:qt},data:()=>({twitter:{...Se,readable:V[Se.name]}})},Le=(0,M.Z)(Pe,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your Twitter handle")}},"AccountPropertySection",t.twitter,!1,!0))}),[],!1,null,null,null).exports,{fediverse:je}=(0,s.j)("settings","personalInfoParameters",{}),Be={name:"FediverseSection",components:{AccountPropertySection:qt},data:()=>({fediverse:{...je,readable:V[je.name]}})},ke=(0,M.Z)(Be,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your handle")}},"AccountPropertySection",t.fediverse,!1,!0))}),[],!1,null,null,null).exports,De={name:"Language",props:{inputId:{type:String,default:null},commonLanguages:{type:Array,required:!0},otherLanguages:{type:Array,required:!0},language:{type:Object,required:!0}},data(){return{initialLanguage:this.language}},computed:{allLanguages(){return Object.freeze([...this.commonLanguages,...this.otherLanguages].reduce(((t,e)=>{let{code:a,name:n}=e;return{...t,[a]:n}}),{}))}},methods:{async onLanguageChange(t){const e=this.constructLanguage(t.target.value);var a;this.$emit("update:language",e),""!==(a=e).code&&""!==a.name&&void 0!==a.name&&await this.updateLanguage(e)},async updateLanguage(e){try{var a,n;const t=await nt(q.LANGUAGE,e.code);this.handleResponse({language:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status}),this.reloadPage()}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update language"),error:e})}},constructLanguage(t){return{code:t,name:this.allLanguages[t]}},handleResponse(t){let{language:e,status:a,errorMessage:n,error:i}=t;"ok"===a?this.initialLanguage=e:ot(i,n)},reloadPage(){location.reload()}}};var Oe=n(42569),Ne={};Ne.styleTagTransform=R(),Ne.setAttributes=k(),Ne.insert=j().bind(null,"head"),Ne.domAPI=P(),Ne.insertStyleElement=O(),I()(Oe.Z,Ne),Oe.Z&&Oe.Z.locals&&Oe.Z.locals;const Re=(0,M.Z)(De,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"language"},[e("select",{attrs:{id:t.inputId,placeholder:t.t("settings","Language")},on:{change:t.onLanguageChange}},[t._l(t.commonLanguages,(function(a){return e("option",{key:a.code,domProps:{selected:t.language.code===a.code,value:a.code}},[t._v("\n\t\t\t"+t._s(a.name)+"\n\t\t")])})),t._v(" "),e("option",{attrs:{disabled:""}},[t._v("\n\t\t\t──────────\n\t\t")]),t._v(" "),t._l(t.otherLanguages,(function(a){return e("option",{key:a.code,domProps:{selected:t.language.code===a.code,value:a.code}},[t._v("\n\t\t\t"+t._s(a.name)+"\n\t\t")])}))],2),t._v(" "),e("a",{attrs:{href:"https://www.transifex.com/nextcloud/nextcloud/",target:"_blank",rel:"noreferrer noopener"}},[e("em",[t._v(t._s(t.t("settings","Help translate")))])])])}),[],!1,null,"5c847b3a",null).exports,{languageMap:{activeLanguage:Te,commonLanguages:Ze,otherLanguages:Me}}=(0,s.j)("settings","personalInfoParameters",{}),Ue={name:"LanguageSection",components:{Language:Re,HeaderBar:gt},data:()=>({propertyReadable:Y.LANGUAGE,commonLanguages:Ze,otherLanguages:Me,language:Te}),computed:{inputId:()=>"account-setting-".concat(q.LANGUAGE),isEditable(){return Boolean(this.language)}}};var Fe=n(12531),ze={};ze.styleTagTransform=R(),ze.setAttributes=k(),ze.insert=j().bind(null,"head"),ze.domAPI=P(),ze.insertStyleElement=O(),I()(Fe.Z,ze),Fe.Z&&Fe.Z.locals&&Fe.Z.locals;const Ve=(0,M.Z)(Ue,(function(){var t=this,e=t._self._c;return e("section",[e("HeaderBar",{attrs:{"input-id":t.inputId,readable:t.propertyReadable}}),t._v(" "),t.isEditable?[e("Language",{attrs:{"input-id":t.inputId,"common-languages":t.commonLanguages,"other-languages":t.otherLanguages,language:t.language},on:{"update:language":function(e){t.language=e}}})]:e("span",[t._v("\n\t\t"+t._s(t.t("settings","No language set"))+"\n\t")])],2)}),[],!1,null,"92685b76",null).exports;var He=n(80351),Ge=n.n(He);const qe={name:"Locale",components:{Web:n(97859).default},props:{inputId:{type:String,default:null},locale:{type:Object,required:!0},localesForLanguage:{type:Array,required:!0},otherLocales:{type:Array,required:!0}},data(){return{initialLocale:this.locale,example:{date:Ge()().format("L"),time:Ge()().format("LTS"),firstDayOfWeek:window.dayNames[window.firstDay]}}},computed:{allLocales(){return Object.freeze([...this.localesForLanguage,...this.otherLocales].reduce(((t,e)=>{let{code:a,name:n}=e;return{...t,[a]:n}}),{}))}},created(){setInterval(this.refreshExample,1e3)},methods:{async onLocaleChange(t){const e=this.constructLocale(t.target.value);var a;this.$emit("update:locale",e),""!==(a=e).code&&""!==a.name&&void 0!==a.name&&await this.updateLocale(e)},async updateLocale(e){try{var a,n;const t=await nt(q.LOCALE,e.code);this.handleResponse({locale:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status}),this.reloadPage()}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update locale"),error:e})}},constructLocale(t){return{code:t,name:this.allLocales[t]}},handleResponse(t){let{locale:e,status:a,errorMessage:n,error:i}=t;"ok"===a?this.initialLocale=e:(this.$emit("update:locale",this.initialLocale),ot(i,n))},refreshExample(){this.example={date:Ge()().format("L"),time:Ge()().format("LTS"),firstDayOfWeek:window.dayNames[window.firstDay]}},reloadPage(){location.reload()}}};var Ye=n(87229),$e={};$e.styleTagTransform=R(),$e.setAttributes=k(),$e.insert=j().bind(null,"head"),$e.domAPI=P(),$e.insertStyleElement=O(),I()(Ye.Z,$e),Ye.Z&&Ye.Z.locals&&Ye.Z.locals;const We=(0,M.Z)(qe,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"locale"},[e("select",{attrs:{id:t.inputId,placeholder:t.t("settings","Locale")},on:{change:t.onLocaleChange}},[t._l(t.localesForLanguage,(function(a){return e("option",{key:a.code,domProps:{selected:t.locale.code===a.code,value:a.code}},[t._v("\n\t\t\t"+t._s(a.name)+"\n\t\t")])})),t._v(" "),e("option",{attrs:{disabled:""}},[t._v("\n\t\t\t──────────\n\t\t")]),t._v(" "),t._l(t.otherLocales,(function(a){return e("option",{key:a.code,domProps:{selected:t.locale.code===a.code,value:a.code}},[t._v("\n\t\t\t"+t._s(a.name)+"\n\t\t")])}))],2),t._v(" "),e("div",{staticClass:"example"},[e("Web",{attrs:{size:20}}),t._v(" "),e("div",{staticClass:"example__text"},[e("p",[e("span",[t._v(t._s(t.example.date))]),t._v(" "),e("span",[t._v(t._s(t.example.time))])]),t._v(" "),e("p",[t._v("\n\t\t\t\t"+t._s(t.t("settings","Week starts on {firstDayOfWeek}",{firstDayOfWeek:this.example.firstDayOfWeek}))+"\n\t\t\t")])])],1)])}),[],!1,null,"1ac456dc",null).exports,{localeMap:{activeLocale:Ke,localesForLanguage:Qe,otherLocales:Je}}=(0,s.j)("settings","personalInfoParameters",{}),Xe={name:"LocaleSection",components:{Locale:We,HeaderBar:gt},data:()=>({propertyReadable:Y.LOCALE,localesForLanguage:Qe,otherLocales:Je,locale:Ke}),computed:{inputId:()=>"account-setting-".concat(q.LOCALE),isEditable(){return Boolean(this.locale)}}};var ta=n(682),ea={};ea.styleTagTransform=R(),ea.setAttributes=k(),ea.insert=j().bind(null,"head"),ea.domAPI=P(),ea.insertStyleElement=O(),I()(ta.Z,ea),ta.Z&&ta.Z.locals&&ta.Z.locals;const aa=(0,M.Z)(Xe,(function(){var t=this,e=t._self._c;return e("section",[e("HeaderBar",{attrs:{"input-id":t.inputId,readable:t.propertyReadable}}),t._v(" "),t.isEditable?[e("Locale",{attrs:{"input-id":t.inputId,"locales-for-language":t.localesForLanguage,"other-locales":t.otherLocales,locale:t.locale},on:{"update:locale":function(e){t.locale=e}}})]:e("span",[t._v("\n\t\t"+t._s(t.t("settings","No locale set"))+"\n\t")])],2)}),[],!1,null,"84fca724",null).exports,na={name:"EditProfileAnchorLink",components:{ChevronDownIcon:n(41622).default},props:{profileEnabled:{type:Boolean,required:!0}},computed:{disabled(){return!this.profileEnabled}}};var ia=n(64534),oa={};oa.styleTagTransform=R(),oa.setAttributes=k(),oa.insert=j().bind(null,"head"),oa.domAPI=P(),oa.insertStyleElement=O(),I()(ia.Z,oa),ia.Z&&ia.Z.locals&&ia.Z.locals;var sa=n(40001),ra={};ra.styleTagTransform=R(),ra.setAttributes=k(),ra.insert=j().bind(null,"head"),ra.domAPI=P(),ra.insertStyleElement=O(),I()(sa.Z,ra),sa.Z&&sa.Z.locals&&sa.Z.locals;const la=(0,M.Z)(na,(function(){var t=this,e=t._self._c;return e("a",t._g({class:{disabled:t.disabled},attrs:{href:"#profile-visibility"}},t.$listeners),[e("ChevronDownIcon",{staticClass:"anchor-icon",attrs:{size:22}}),t._v("\n\t"+t._s(t.t("settings","Edit your Profile visibility"))+"\n")],1)}),[],!1,null,"1caba458",null).exports;var da=n(20571);const ca={name:"ProfileCheckbox",components:{NcCheckboxRadioSwitch:n.n(da)()},props:{profileEnabled:{type:Boolean,required:!0}},data(){return{isProfileEnabled:this.profileEnabled,loading:!1}},methods:{async saveEnableProfile(){this.loading=!0;try{var e,a;const t=await nt(F.PROFILE_ENABLED,this.isProfileEnabled);this.handleResponse({isProfileEnabled:this.isProfileEnabled,status:null===(e=t.ocs)||void 0===e||null===(a=e.meta)||void 0===a?void 0:a.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update profile enabled state"),error:e})}},handleResponse(t){let{isProfileEnabled:e,status:a,errorMessage:n,error:i}=t;"ok"===a?(0,p.j8)("settings:profile-enabled:updated",e):ot(i,n),this.loading=!1}}},pa=(0,M.Z)(ca,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"checkbox-container"},[e("NcCheckboxRadioSwitch",{attrs:{type:"switch",checked:t.isProfileEnabled,loading:t.loading},on:{"update:checked":[function(e){t.isProfileEnabled=e},t.saveEnableProfile]}},[t._v("\n\t\t"+t._s(t.t("settings","Enable Profile"))+"\n\t")])],1)}),[],!1,null,null,null).exports,Aa={name:"ProfilePreviewCard",components:{NcAvatar:u()},props:{displayName:{type:String,required:!0},organisation:{type:String,required:!0},profileEnabled:{type:Boolean,required:!0},userId:{type:String,required:!0}},computed:{disabled(){return!this.profileEnabled},profilePageLink(){return this.profileEnabled?(0,d.generateUrl)("/u/{userId}",{userId:(0,o.ts)().uid}):null}}};var ua=n(80507),ma={};ma.styleTagTransform=R(),ma.setAttributes=k(),ma.insert=j().bind(null,"head"),ma.domAPI=P(),ma.insertStyleElement=O(),I()(ua.Z,ma),ua.Z&&ua.Z.locals&&ua.Z.locals;const ha=(0,M.Z)(Aa,(function(){var t=this,e=t._self._c;return e("a",{staticClass:"preview-card",class:{disabled:t.disabled},attrs:{href:t.profilePageLink}},[e("NcAvatar",{staticClass:"preview-card__avatar",attrs:{user:t.userId,size:48,"show-user-status":!0,"show-user-status-compact":!1,"disable-menu":!0,"disable-tooltip":!0}}),t._v(" "),e("div",{staticClass:"preview-card__header"},[e("span",[t._v(t._s(t.displayName))])]),t._v(" "),e("div",{staticClass:"preview-card__footer"},[e("span",[t._v(t._s(t.organisation))])])],1)}),[],!1,null,"61586aa5",null).exports,{organisation:{value:ga},displayName:{value:va},profileEnabled:Ca,userId:fa}=(0,s.j)("settings","personalInfoParameters",{}),ba={name:"ProfileSection",components:{EditProfileAnchorLink:la,HeaderBar:gt,ProfileCheckbox:pa,ProfilePreviewCard:ha},data:()=>({propertyReadable:z.PROFILE_ENABLED,organisation:ga,displayName:va,profileEnabled:Ca,userId:fa}),mounted(){(0,p.Ld)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,p.Ld)("settings:organisation:updated",this.handleOrganisationUpdate)},beforeDestroy(){(0,p.r1)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,p.r1)("settings:organisation:updated",this.handleOrganisationUpdate)},methods:{handleDisplayNameUpdate(t){this.displayName=t},handleOrganisationUpdate(t){this.organisation=t}}},ya=ba;var xa=n(90552),Ea={};Ea.styleTagTransform=R(),Ea.setAttributes=k(),Ea.insert=j().bind(null,"head"),Ea.domAPI=P(),Ea.insertStyleElement=O(),I()(xa.Z,Ea),xa.Z&&xa.Z.locals&&xa.Z.locals;const _a=(0,M.Z)(ya,(function(){var t=this,e=t._self._c;return e("section",[e("HeaderBar",{attrs:{readable:t.propertyReadable}}),t._v(" "),e("ProfileCheckbox",{attrs:{"profile-enabled":t.profileEnabled},on:{"update:profileEnabled":function(e){t.profileEnabled=e},"update:profile-enabled":function(e){t.profileEnabled=e}}}),t._v(" "),e("ProfilePreviewCard",{attrs:{organisation:t.organisation,"display-name":t.displayName,"profile-enabled":t.profileEnabled,"user-id":t.userId}}),t._v(" "),e("EditProfileAnchorLink",{attrs:{"profile-enabled":t.profileEnabled}})],1)}),[],!1,null,"cf64d964",null).exports,{organisation:wa}=(0,s.j)("settings","personalInfoParameters",{}),Ia={name:"OrganisationSection",components:{AccountPropertySection:qt},data:()=>({organisation:{...wa,readable:V[wa.name]}})},Sa=(0,M.Z)(Ia,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your organisation")}},"AccountPropertySection",t.organisation,!1,!0))}),[],!1,null,null,null).exports,{role:Pa}=(0,s.j)("settings","personalInfoParameters",{}),La={name:"RoleSection",components:{AccountPropertySection:qt},data:()=>({role:{...Pa,readable:V[Pa.name]}})},ja=(0,M.Z)(La,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your role")}},"AccountPropertySection",t.role,!1,!0))}),[],!1,null,null,null).exports,{headline:Ba}=(0,s.j)("settings","personalInfoParameters",{}),ka={name:"HeadlineSection",components:{AccountPropertySection:qt},data:()=>({headline:{...Ba,readable:V[Ba.name]}})},Da=(0,M.Z)(ka,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your headline")}},"AccountPropertySection",t.headline,!1,!0))}),[],!1,null,null,null).exports,{biography:Oa}=(0,s.j)("settings","personalInfoParameters",{}),Na={name:"BiographySection",components:{AccountPropertySection:qt},data:()=>({biography:{...Oa,readable:V[Oa.name]}})},Ra=(0,M.Z)(Na,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your biography"),"multi-line":!0}},"AccountPropertySection",t.biography,!1,!0))}),[],!1,null,null,null).exports;var Ta=n(36456),Za=n.n(Ta);const Ma=Object.freeze({SHOW:"show",SHOW_USERS_ONLY:"show_users_only",HIDE:"hide"}),Ua=Object.freeze({[Ma.SHOW]:{name:Ma.SHOW,label:t("settings","Show to everyone")},[Ma.SHOW_USERS_ONLY]:{name:Ma.SHOW_USERS_ONLY,label:t("settings","Show to logged in users only")},[Ma.HIDE]:{name:Ma.HIDE,label:t("settings","Hide")}}),{profileEnabled:Fa}=(0,s.j)("settings","personalInfoParameters",!1),za={name:"VisibilityDropdown",components:{NcSelect:Za()},props:{paramId:{type:String,required:!0},displayId:{type:String,required:!0},visibility:{type:String,required:!0}},data(){return{initialVisibility:this.visibility,profileEnabled:Fa}},computed:{disabled(){return!this.profileEnabled},inputId(){return"profile-visibility-".concat(this.paramId)},visibilityObject(){return Ua[this.visibility]},visibilityOptions:()=>Object.values(Ua)},mounted(){(0,p.Ld)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate)},beforeDestroy(){(0,p.r1)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate)},methods:{async onVisibilityChange(t){if(null!==t){const{name:e}=t;this.$emit("update:visibility",e),""!==e&&await this.updateVisibility(e)}},async updateVisibility(e){try{var a,n;const t=await(async(t,e)=>{const a=(0,o.ts)().uid,n=(0,d.generateOcsUrl)("/profile/{userId}",{userId:a});return await(0,at.confirmPassword)(),(await l.default.put(n,{paramId:t,visibility:e})).data})(this.paramId,e);this.handleResponse({visibility:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update visibility of {displayId}",{displayId:this.displayId}),error:e})}},handleResponse(t){let{visibility:e,status:a,errorMessage:n,error:i}=t;"ok"===a?this.initialVisibility=e:ot(i,n)},handleProfileEnabledUpdate(t){this.profileEnabled=t}}},Va=za;var Ha=n(63019),Ga={};Ga.styleTagTransform=R(),Ga.setAttributes=k(),Ga.insert=j().bind(null,"head"),Ga.domAPI=P(),Ga.insertStyleElement=O(),I()(Ha.Z,Ga),Ha.Z&&Ha.Z.locals&&Ha.Z.locals;const qa=(0,M.Z)(Va,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"visibility-container",class:{disabled:t.disabled}},[e("label",{attrs:{for:t.inputId}},[t._v("\n\t\t"+t._s(t.displayId)+"\n\t")]),t._v(" "),e("NcSelect",{staticClass:"visibility-container__select",attrs:{"input-id":t.inputId,clearable:!1,options:t.visibilityOptions,value:t.visibilityObject},on:{"option:selected":t.onVisibilityChange}})],1)}),[],!1,null,"b13d20da",null).exports,{profileConfig:Ya}=(0,s.j)("settings","profileParameters",{}),{profileEnabled:$a}=(0,s.j)("settings","personalInfoParameters",!1),Wa=(t,e)=>t.appId===e.appId||"core"!==t.appId&&"core"!==e.appId?t.displayId.localeCompare(e.displayId):"core"===t.appId?1:-1,Ka={name:"ProfileVisibilitySection",components:{HeaderBar:gt,VisibilityDropdown:qa},data:()=>({heading:H.PROFILE_VISIBILITY,profileEnabled:$a,visibilityParams:Object.entries(Ya).map((t=>{let[e,{appId:a,displayId:n,visibility:i}]=t;return{id:e,appId:a,displayId:n,visibility:i}})).sort(Wa),marginLeft:window.matchMedia("(min-width: 1600px)").matches?window.getComputedStyle(document.getElementById("vue-avatar-section")).getPropertyValue("width").trim():"0px"}),computed:{disabled(){return!this.profileEnabled},rows(){return Math.ceil(this.visibilityParams.length/2)}},mounted(){(0,p.Ld)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),window.onresize=()=>{this.marginLeft=window.matchMedia("(min-width: 1600px)").matches?window.getComputedStyle(document.getElementById("vue-avatar-section")).getPropertyValue("width").trim():"0px"}},beforeDestroy(){(0,p.r1)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate)},methods:{handleProfileEnabledUpdate(t){this.profileEnabled=t}}},Qa=Ka;var Ja=n(45386),Xa={};Xa.styleTagTransform=R(),Xa.setAttributes=k(),Xa.insert=j().bind(null,"head"),Xa.domAPI=P(),Xa.insertStyleElement=O(),I()(Ja.Z,Xa),Ja.Z&&Ja.Z.locals&&Ja.Z.locals;const tn=(0,M.Z)(Qa,(function(){var t=this,e=t._self._c;return e("section",{style:{marginLeft:t.marginLeft},attrs:{id:"profile-visibility"}},[e("HeaderBar",{attrs:{"is-heading":!0,readable:t.heading}}),t._v(" "),e("em",{class:{disabled:t.disabled}},[t._v("\n\t\t"+t._s(t.t("settings",'The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to "Show to everyone" and scope is set to "Private", "Private" is respected.'))+"\n\t")]),t._v(" "),e("div",{staticClass:"visibility-dropdowns",style:{gridTemplateRows:"repeat(".concat(t.rows,", 44px)")}},t._l(t.visibilityParams,(function(a){return e("VisibilityDropdown",{key:a.id,attrs:{"param-id":a.id,"display-id":a.displayId,visibility:a.visibility},on:{"update:visibility":function(e){return t.$set(a,"visibility",e)}}})})),1)],1)}),[],!1,null,"a07dbf96",null).exports;n.nc=btoa((0,o.IH)());const en=(0,s.j)("settings","profileEnabledGlobally",!0);i.default.mixin({methods:{t:r.Iu}});const an=i.default.extend(_t),nn=i.default.extend(Tt),on=i.default.extend(Kt),sn=i.default.extend(he),rn=i.default.extend(be),ln=i.default.extend(Ee),dn=i.default.extend(Ie),cn=i.default.extend(Le),pn=i.default.extend(ke),An=i.default.extend(Ve),un=i.default.extend(aa);if((new an).$mount("#vue-avatar-section"),(new nn).$mount("#vue-details-section"),(new on).$mount("#vue-displayname-section"),(new sn).$mount("#vue-email-section"),(new rn).$mount("#vue-phone-section"),(new ln).$mount("#vue-location-section"),(new dn).$mount("#vue-website-section"),(new cn).$mount("#vue-twitter-section"),(new pn).$mount("#vue-fediverse-section"),(new An).$mount("#vue-language-section"),(new un).$mount("#vue-locale-section"),en){const t=i.default.extend(_a),e=i.default.extend(Sa),a=i.default.extend(ja),n=i.default.extend(Da),o=i.default.extend(Ra),s=i.default.extend(tn);(new t).$mount("#vue-profile-section"),(new e).$mount("#vue-organisation-section"),(new a).$mount("#vue-role-section"),(new n).$mount("#vue-headline-section"),(new o).$mount("#vue-biography-section"),(new s).$mount("#vue-profile-visibility-section")}},31246:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-022fd5d4]{grid-row:1/3}.avatar__container[data-v-022fd5d4]{margin:0 auto;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:16px 0;width:300px}.avatar__container span[data-v-022fd5d4]{color:var(--color-text-lighter)}.avatar__preview[data-v-022fd5d4]{display:flex;justify-content:center;align-items:center;width:180px;height:180px}.avatar__buttons[data-v-022fd5d4]{display:flex;gap:0 10px}.avatar__cropper[data-v-022fd5d4]{width:300px;height:300px;overflow:hidden}.avatar__cropper-buttons[data-v-022fd5d4]{width:100%;display:flex;justify-content:space-between}.avatar__cropper[data-v-022fd5d4] .cropper-view-box{border-radius:50%}input[type=file][data-v-022fd5d4]{display:none}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/AvatarSection.vue"],names:[],mappings:"AACA,yBACC,YAAA,CAGA,oCACC,aAAA,CACA,YAAA,CACA,qBAAA,CACA,sBAAA,CACA,kBAAA,CACA,UAAA,CACA,WAAA,CAEA,yCACC,+BAAA,CAIF,kCACC,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,WAAA,CACA,YAAA,CAGD,kCACC,YAAA,CACA,UAAA,CAGD,kCACC,WAAA,CACA,YAAA,CACA,eAAA,CAEA,0CACC,UAAA,CACA,YAAA,CACA,6BAAA,CAGD,oDACC,iBAAA,CAKH,kCACC,YAAA",sourcesContent:['\nsection {\n\tgrid-row: 1/3;\n}\n.avatar {\n\t&__container {\n\t\tmargin: 0 auto;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tgap: 16px 0;\n\t\twidth: 300px;\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\twidth: 180px;\n\t\theight: 180px;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tgap: 0 10px;\n\t}\n\n\t&__cropper {\n\t\twidth: 300px;\n\t\theight: 300px;\n\t\toverflow: hidden;\n\n\t\t&-buttons {\n\t\t\twidth: 100%;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t}\n\n\t\t&::v-deep .cropper-view-box {\n\t\t\tborder-radius: 50%;\n\t\t}\n\t}\n}\n\ninput[type="file"] {\n\tdisplay: none;\n}\n'],sourceRoot:""}]);const r=s},18118:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".details[data-v-1ab46e68]{display:flex;flex-direction:column;margin:10px 32px 10px 0;gap:16px 0;color:var(--color-text-lighter)}.details__groups[data-v-1ab46e68],.details__quota[data-v-1ab46e68]{display:flex;gap:0 10px}.details__groups-info[data-v-1ab46e68],.details__quota-info[data-v-1ab46e68]{display:flex;flex-direction:column;width:100%;gap:4px 0}.details__groups-list[data-v-1ab46e68],.details__quota-list[data-v-1ab46e68]{font-weight:bold}.details__groups[data-v-1ab46e68] .material-design-icon,.details__quota[data-v-1ab46e68] .material-design-icon{align-self:flex-start;margin-top:2px}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/DetailsSection.vue"],names:[],mappings:"AACA,0BACC,YAAA,CACA,qBAAA,CACA,uBAAA,CACA,UAAA,CACA,+BAAA,CAEA,mEAEC,YAAA,CACA,UAAA,CAEA,6EACC,YAAA,CACA,qBAAA,CACA,UAAA,CACA,SAAA,CAGD,6EACC,gBAAA,CAGD,+GACC,qBAAA,CACA,cAAA",sourcesContent:["\n.details {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: 10px 32px 10px 0;\n\tgap: 16px 0;\n\tcolor: var(--color-text-lighter);\n\n\t&__groups,\n\t&__quota {\n\t\tdisplay: flex;\n\t\tgap: 0 10px;\n\n\t\t&-info {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\twidth: 100%;\n\t\t\tgap: 4px 0;\n\t\t}\n\n\t\t&-list {\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\t&::v-deep .material-design-icon {\n\t\t\talign-self: flex-start;\n\t\t\tmargin-top: 2px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=s},11121:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".email[data-v-5ff85d38]{display:grid;align-items:center}.email input[data-v-5ff85d38]{grid-area:1/1;width:100%}.email .email__actions-container[data-v-5ff85d38]{grid-area:1/1;justify-self:flex-end;height:30px;display:flex;gap:0 2px;margin-right:5px}.email .email__actions-container .email__actions[data-v-5ff85d38]{opacity:.4 !important}.email .email__actions-container .email__actions[data-v-5ff85d38]:hover,.email .email__actions-container .email__actions[data-v-5ff85d38]:focus,.email .email__actions-container .email__actions[data-v-5ff85d38]:active{opacity:.8 !important}.email .email__actions-container .email__actions[data-v-5ff85d38] button{height:30px !important;min-height:30px !important;width:30px !important;min-width:30px !important}.email__helper-text-message[data-v-5ff85d38]{padding:4px 0;display:flex;align-items:center}.email__helper-text-message__icon[data-v-5ff85d38]{margin-right:8px;align-self:start;margin-top:4px}.email__helper-text-message--error[data-v-5ff85d38]{color:var(--color-error)}.fade-enter[data-v-5ff85d38],.fade-leave-to[data-v-5ff85d38]{opacity:0}.fade-enter-active[data-v-5ff85d38]{transition:opacity 200ms ease-out}.fade-leave-active[data-v-5ff85d38]{transition:opacity 300ms ease-out}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/EmailSection/Email.vue"],names:[],mappings:"AACA,wBACC,YAAA,CACA,kBAAA,CAEA,8BACC,aAAA,CACA,UAAA,CAGD,kDACC,aAAA,CACA,qBAAA,CACA,WAAA,CAEA,YAAA,CACA,SAAA,CACA,gBAAA,CAEA,kEACC,qBAAA,CAEA,yNAGC,qBAAA,CAGD,yEACC,sBAAA,CACA,0BAAA,CACA,qBAAA,CACA,yBAAA,CAKH,6CACC,aAAA,CACA,YAAA,CACA,kBAAA,CAEA,mDACC,gBAAA,CACA,gBAAA,CACA,cAAA,CAGD,oDACC,wBAAA,CAKH,6DAEC,SAAA,CAGD,oCACC,iCAAA,CAGD,oCACC,iCAAA",sourcesContent:["\n.email {\n\tdisplay: grid;\n\talign-items: center;\n\n\tinput {\n\t\tgrid-area: 1 / 1;\n\t\twidth: 100%;\n\t}\n\n\t.email__actions-container {\n\t\tgrid-area: 1 / 1;\n\t\tjustify-self: flex-end;\n\t\theight: 30px;\n\n\t\tdisplay: flex;\n\t\tgap: 0 2px;\n\t\tmargin-right: 5px;\n\n\t\t.email__actions {\n\t\t\topacity: 0.4 !important;\n\n\t\t\t&:hover,\n\t\t\t&:focus,\n\t\t\t&:active {\n\t\t\t\topacity: 0.8 !important;\n\t\t\t}\n\n\t\t\t&::v-deep button {\n\t\t\t\theight: 30px !important;\n\t\t\t\tmin-height: 30px !important;\n\t\t\t\twidth: 30px !important;\n\t\t\t\tmin-width: 30px !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__helper-text-message {\n\t\tpadding: 4px 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t&__icon {\n\t\t\tmargin-right: 8px;\n\t\t\talign-self: start;\n\t\t\tmargin-top: 4px;\n\t\t}\n\n\t\t&--error {\n\t\t\tcolor: var(--color-error);\n\t\t}\n\t}\n}\n\n.fade-enter,\n.fade-leave-to {\n\topacity: 0;\n}\n\n.fade-enter-active {\n\ttransition: opacity 200ms ease-out;\n}\n\n.fade-leave-active {\n\ttransition: opacity 300ms ease-out;\n}\n"],sourceRoot:""}]);const r=s},73070:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-46c7eb7e]{padding:10px 10px}section[data-v-46c7eb7e] button:disabled{cursor:default}section .additional-emails-label[data-v-46c7eb7e]{display:block;margin-top:16px}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue"],names:[],mappings:"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA,CAGD,kDACC,aAAA,CACA,eAAA",sourcesContent:["\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n\n\t.additional-emails-label {\n\t\tdisplay: block;\n\t\tmargin-top: 16px;\n\t}\n}\n"],sourceRoot:""}]);const r=s},42569:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".language[data-v-5c847b3a]{display:grid}.language select[data-v-5c847b3a]{width:100%}.language a[data-v-5c847b3a]{color:var(--color-main-text);text-decoration:none;width:max-content}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue"],names:[],mappings:"AACA,2BACC,YAAA,CAEA,kCACC,UAAA,CAGD,6BACC,4BAAA,CACA,oBAAA,CACA,iBAAA",sourcesContent:["\n.language {\n\tdisplay: grid;\n\n\tselect {\n\t\twidth: 100%;\n\t}\n\n\ta {\n\t\tcolor: var(--color-main-text);\n\t\ttext-decoration: none;\n\t\twidth: max-content;\n\t}\n}\n"],sourceRoot:""}]);const r=s},12531:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-92685b76]{padding:10px 10px}section[data-v-92685b76] button:disabled{cursor:default}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue"],names:[],mappings:"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA",sourcesContent:["\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n}\n"],sourceRoot:""}]);const r=s},87229:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".locale[data-v-1ac456dc]{display:grid}.locale select[data-v-1ac456dc]{width:100%}.example[data-v-1ac456dc]{margin:10px 0;display:flex;gap:0 10px;color:var(--color-text-lighter)}.example[data-v-1ac456dc] .material-design-icon{align-self:flex-start;margin-top:2px}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue"],names:[],mappings:"AACA,yBACC,YAAA,CAEA,gCACC,UAAA,CAIF,0BACC,aAAA,CACA,YAAA,CACA,UAAA,CACA,+BAAA,CAEA,gDACC,qBAAA,CACA,cAAA",sourcesContent:["\n.locale {\n\tdisplay: grid;\n\n\tselect {\n\t\twidth: 100%;\n\t}\n}\n\n.example {\n\tmargin: 10px 0;\n\tdisplay: flex;\n\tgap: 0 10px;\n\tcolor: var(--color-text-lighter);\n\n\t&::v-deep .material-design-icon {\n\t\talign-self: flex-start;\n\t\tmargin-top: 2px;\n\t}\n}\n"],sourceRoot:""}]);const r=s},682:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-84fca724]{padding:10px 10px}section[data-v-84fca724] button:disabled{cursor:default}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue"],names:[],mappings:"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA",sourcesContent:["\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n}\n"],sourceRoot:""}]);const r=s},64534:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"html{scroll-behavior:smooth}@media screen and (prefers-reduced-motion: reduce){html{scroll-behavior:auto}}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue"],names:[],mappings:"AACA,KACC,sBAAA,CAEA,mDAHD,KAIE,oBAAA,CAAA",sourcesContent:["\nhtml {\n\tscroll-behavior: smooth;\n\n\t@media screen and (prefers-reduced-motion: reduce) {\n\t\tscroll-behavior: auto;\n\t}\n}\n"],sourceRoot:""}]);const r=s},40001:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"a[data-v-1caba458]{display:block;height:44px;width:290px;line-height:44px;padding:0 16px;margin:14px auto;border-radius:var(--border-radius-pill);opacity:.4;background-color:rgba(0,0,0,0)}a .anchor-icon[data-v-1caba458]{display:inline-block;vertical-align:middle;margin-top:6px;margin-right:8px}a[data-v-1caba458]:hover,a[data-v-1caba458]:focus,a[data-v-1caba458]:active{opacity:.8;background-color:rgba(127,127,127,.25)}a.disabled[data-v-1caba458]{pointer-events:none}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue"],names:[],mappings:"AACA,mBACC,aAAA,CACA,WAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,uCAAA,CACA,UAAA,CACA,8BAAA,CAEA,gCACC,oBAAA,CACA,qBAAA,CACA,cAAA,CACA,gBAAA,CAGD,4EAGC,UAAA,CACA,sCAAA,CAGD,4BACC,mBAAA",sourcesContent:["\na {\n\tdisplay: block;\n\theight: 44px;\n\twidth: 290px;\n\tline-height: 44px;\n\tpadding: 0 16px;\n\tmargin: 14px auto;\n\tborder-radius: var(--border-radius-pill);\n\topacity: 0.4;\n\tbackground-color: transparent;\n\n\t.anchor-icon {\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t\tmargin-top: 6px;\n\t\tmargin-right: 8px;\n\t}\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\topacity: 0.8;\n\t\tbackground-color: rgba(127, 127, 127, .25);\n\t}\n\n\t&.disabled {\n\t\tpointer-events: none;\n\t}\n}\n"],sourceRoot:""}]);const r=s},80507:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".preview-card[data-v-61586aa5]{display:flex;flex-direction:column;position:relative;width:290px;height:116px;margin:14px auto;border-radius:var(--border-radius-large);background-color:var(--color-main-background);font-weight:bold;box-shadow:0 2px 9px var(--color-box-shadow)}.preview-card[data-v-61586aa5]:hover,.preview-card[data-v-61586aa5]:focus,.preview-card[data-v-61586aa5]:active{box-shadow:0 2px 12px var(--color-box-shadow)}.preview-card[data-v-61586aa5]:focus-visible{outline:var(--color-main-text) solid 1px;outline-offset:3px}.preview-card.disabled[data-v-61586aa5]{filter:grayscale(1);opacity:.5;cursor:default;box-shadow:0 0 3px var(--color-box-shadow)}.preview-card.disabled *[data-v-61586aa5],.preview-card.disabled[data-v-61586aa5] *{cursor:default}.preview-card__avatar[data-v-61586aa5]{position:absolute !important;top:40px;left:18px;z-index:1}.preview-card__avatar[data-v-61586aa5]:not(.avatardiv--unknown){box-shadow:0 0 0 3px var(--color-main-background) !important}.preview-card__header[data-v-61586aa5],.preview-card__footer[data-v-61586aa5]{position:relative;width:auto}.preview-card__header span[data-v-61586aa5],.preview-card__footer span[data-v-61586aa5]{position:absolute;left:78px;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere}@supports(-webkit-line-clamp: 2){.preview-card__header span[data-v-61586aa5],.preview-card__footer span[data-v-61586aa5]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.preview-card__header[data-v-61586aa5]{height:70px;border-radius:var(--border-radius-large) var(--border-radius-large) 0 0;background-color:var(--color-primary);background-image:var(--gradient-primary-background)}.preview-card__header span[data-v-61586aa5]{bottom:0;color:var(--color-primary-text);font-size:18px;font-weight:bold;margin:0 4px 8px 0}.preview-card__footer[data-v-61586aa5]{height:46px}.preview-card__footer span[data-v-61586aa5]{top:0;color:var(--color-text-maxcontrast);font-size:14px;font-weight:normal;margin:4px 4px 0 0;line-height:1.3}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue"],names:[],mappings:"AACA,+BACC,YAAA,CACA,qBAAA,CACA,iBAAA,CACA,WAAA,CACA,YAAA,CACA,gBAAA,CACA,wCAAA,CACA,6CAAA,CACA,gBAAA,CACA,4CAAA,CAEA,gHAGC,6CAAA,CAGD,6CACC,wCAAA,CACA,kBAAA,CAGD,wCACC,mBAAA,CACA,UAAA,CACA,cAAA,CACA,0CAAA,CAEA,oFAEC,cAAA,CAIF,uCAEC,4BAAA,CACA,QAAA,CACA,SAAA,CACA,SAAA,CAEA,gEACC,4DAAA,CAIF,8EAEC,iBAAA,CACA,UAAA,CAEA,wFACC,iBAAA,CACA,SAAA,CACA,eAAA,CACA,sBAAA,CACA,sBAAA,CAEA,iCAPD,wFAQE,mBAAA,CACA,oBAAA,CACA,2BAAA,CAAA,CAKH,uCACC,WAAA,CACA,uEAAA,CACA,qCAAA,CACA,mDAAA,CAEA,4CACC,QAAA,CACA,+BAAA,CACA,cAAA,CACA,gBAAA,CACA,kBAAA,CAIF,uCACC,WAAA,CAEA,4CACC,KAAA,CACA,mCAAA,CACA,cAAA,CACA,kBAAA,CACA,kBAAA,CACA,eAAA",sourcesContent:["\n.preview-card {\n\tdisplay: flex;\n\tflex-direction: column;\n\tposition: relative;\n\twidth: 290px;\n\theight: 116px;\n\tmargin: 14px auto;\n\tborder-radius: var(--border-radius-large);\n\tbackground-color: var(--color-main-background);\n\tfont-weight: bold;\n\tbox-shadow: 0 2px 9px var(--color-box-shadow);\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbox-shadow: 0 2px 12px var(--color-box-shadow);\n\t}\n\n\t&:focus-visible {\n\t\toutline: var(--color-main-text) solid 1px;\n\t\toutline-offset: 3px;\n\t}\n\n\t&.disabled {\n\t\tfilter: grayscale(1);\n\t\topacity: 0.5;\n\t\tcursor: default;\n\t\tbox-shadow: 0 0 3px var(--color-box-shadow);\n\n\t\t& *,\n\t\t&::v-deep * {\n\t\t\tcursor: default;\n\t\t}\n\t}\n\n\t&__avatar {\n\t\t// Override Avatar component position to fix positioning on rerender\n\t\tposition: absolute !important;\n\t\ttop: 40px;\n\t\tleft: 18px;\n\t\tz-index: 1;\n\n\t\t&:not(.avatardiv--unknown) {\n\t\t\tbox-shadow: 0 0 0 3px var(--color-main-background) !important;\n\t\t}\n\t}\n\n\t&__header,\n\t&__footer {\n\t\tposition: relative;\n\t\twidth: auto;\n\n\t\tspan {\n\t\t\tposition: absolute;\n\t\t\tleft: 78px;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow-wrap: anywhere;\n\n\t\t\t@supports (-webkit-line-clamp: 2) {\n\t\t\t\tdisplay: -webkit-box;\n\t\t\t\t-webkit-line-clamp: 2;\n\t\t\t\t-webkit-box-orient: vertical;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__header {\n\t\theight: 70px;\n\t\tborder-radius: var(--border-radius-large) var(--border-radius-large) 0 0;\n\t\tbackground-color: var(--color-primary);\n\t\tbackground-image: var(--gradient-primary-background);\n\n\t\tspan {\n\t\t\tbottom: 0;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tfont-size: 18px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: 0 4px 8px 0;\n\t\t}\n\t}\n\n\t&__footer {\n\t\theight: 46px;\n\n\t\tspan {\n\t\t\ttop: 0;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tmargin: 4px 4px 0 0;\n\t\t\tline-height: 1.3;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=s},90552:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-cf64d964]{padding:10px 10px}section[data-v-cf64d964] button:disabled{cursor:default}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue"],names:[],mappings:"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA",sourcesContent:["\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n}\n"],sourceRoot:""}]);const r=s},45386:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-a07dbf96]{padding:30px;max-width:900px;width:100%}section em[data-v-a07dbf96]{display:block;margin:16px 0}section em.disabled[data-v-a07dbf96]{filter:grayscale(1);opacity:.5;cursor:default;pointer-events:none}section em.disabled *[data-v-a07dbf96],section em.disabled[data-v-a07dbf96] *{cursor:default;pointer-events:none}section .visibility-dropdowns[data-v-a07dbf96]{display:grid;gap:10px 40px}@media(min-width: 1200px){section[data-v-a07dbf96]{width:940px}section .visibility-dropdowns[data-v-a07dbf96]{grid-auto-flow:column}}@media(max-width: 1200px){section[data-v-a07dbf96]{width:470px}}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue"],names:[],mappings:"AACA,yBACC,YAAA,CACA,eAAA,CACA,UAAA,CAEA,4BACC,aAAA,CACA,aAAA,CAEA,qCACC,mBAAA,CACA,UAAA,CACA,cAAA,CACA,mBAAA,CAEA,8EAEC,cAAA,CACA,mBAAA,CAKH,+CACC,YAAA,CACA,aAAA,CAGD,0BA5BD,yBA6BE,WAAA,CAEA,+CACC,qBAAA,CAAA,CAIF,0BApCD,yBAqCE,WAAA,CAAA",sourcesContent:["\nsection {\n\tpadding: 30px;\n\tmax-width: 900px;\n\twidth: 100%;\n\n\tem {\n\t\tdisplay: block;\n\t\tmargin: 16px 0;\n\n\t\t&.disabled {\n\t\t\tfilter: grayscale(1);\n\t\t\topacity: 0.5;\n\t\t\tcursor: default;\n\t\t\tpointer-events: none;\n\n\t\t\t& *,\n\t\t\t&::v-deep * {\n\t\t\t\tcursor: default;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t.visibility-dropdowns {\n\t\tdisplay: grid;\n\t\tgap: 10px 40px;\n\t}\n\n\t@media (min-width: 1200px) {\n\t\twidth: 940px;\n\n\t\t.visibility-dropdowns {\n\t\t\tgrid-auto-flow: column;\n\t\t}\n\t}\n\n\t@media (max-width: 1200px) {\n\t\twidth: 470px;\n\t}\n}\n"],sourceRoot:""}]);const r=s},63019:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".visibility-container[data-v-b13d20da]{display:flex;width:max-content}.visibility-container.disabled[data-v-b13d20da]{filter:grayscale(1);opacity:.5;cursor:default;pointer-events:none}.visibility-container.disabled *[data-v-b13d20da],.visibility-container.disabled[data-v-b13d20da] *{cursor:default;pointer-events:none}.visibility-container label[data-v-b13d20da]{color:var(--color-text-lighter);width:150px;line-height:50px}.visibility-container__select[data-v-b13d20da]{width:270px;max-width:40vw}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue"],names:[],mappings:"AACA,uCACC,YAAA,CACA,iBAAA,CAEA,gDACC,mBAAA,CACA,UAAA,CACA,cAAA,CACA,mBAAA,CAEA,oGAEC,cAAA,CACA,mBAAA,CAIF,6CACC,+BAAA,CACA,WAAA,CACA,gBAAA,CAGD,+CACC,WAAA,CACA,cAAA",sourcesContent:["\n.visibility-container {\n\tdisplay: flex;\n\twidth: max-content;\n\n\t&.disabled {\n\t\tfilter: grayscale(1);\n\t\topacity: 0.5;\n\t\tcursor: default;\n\t\tpointer-events: none;\n\n\t\t& *,\n\t\t&::v-deep * {\n\t\t\tcursor: default;\n\t\t\tpointer-events: none;\n\t\t}\n\t}\n\n\tlabel {\n\t\tcolor: var(--color-text-lighter);\n\t\twidth: 150px;\n\t\tline-height: 50px;\n\t}\n\n\t&__select {\n\t\twidth: 270px;\n\t\tmax-width: 40vw;\n\t}\n}\n"],sourceRoot:""}]);const r=s},78784:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-6eb7d8e0]{padding:10px 10px}section[data-v-6eb7d8e0] button:disabled{cursor:default}section .property[data-v-6eb7d8e0]{display:grid;align-items:center}section .property textarea[data-v-6eb7d8e0]{resize:vertical;grid-area:1/1;width:100%}section .property input[data-v-6eb7d8e0]{grid-area:1/1;width:100%}section .property .property__actions-container[data-v-6eb7d8e0]{grid-area:1/1;justify-self:flex-end;align-self:flex-end;height:30px;display:flex;gap:0 2px;margin-right:5px;margin-bottom:5px}section .property__helper-text-message[data-v-6eb7d8e0]{padding:4px 0;display:flex;align-items:center}section .property__helper-text-message__icon[data-v-6eb7d8e0]{margin-right:8px;align-self:start;margin-top:4px}section .property__helper-text-message--error[data-v-6eb7d8e0]{color:var(--color-error)}section .fade-enter[data-v-6eb7d8e0],section .fade-leave-to[data-v-6eb7d8e0]{opacity:0}section .fade-enter-active[data-v-6eb7d8e0]{transition:opacity 200ms ease-out}section .fade-leave-active[data-v-6eb7d8e0]{transition:opacity 300ms ease-out}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue"],names:[],mappings:"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA,CAGD,mCACC,YAAA,CACA,kBAAA,CAEA,4CACC,eAAA,CACA,aAAA,CACA,UAAA,CAGD,yCACC,aAAA,CACA,UAAA,CAGD,gEACC,aAAA,CACA,qBAAA,CACA,mBAAA,CACA,WAAA,CAEA,YAAA,CACA,SAAA,CACA,gBAAA,CACA,iBAAA,CAIF,wDACC,aAAA,CACA,YAAA,CACA,kBAAA,CAEA,8DACC,gBAAA,CACA,gBAAA,CACA,cAAA,CAGD,+DACC,wBAAA,CAIF,6EAEC,SAAA,CAGD,4CACC,iCAAA,CAGD,4CACC,iCAAA",sourcesContent:["\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n\n\t.property {\n\t\tdisplay: grid;\n\t\talign-items: center;\n\n\t\ttextarea {\n\t\t\tresize: vertical;\n\t\t\tgrid-area: 1 / 1;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tinput {\n\t\t\tgrid-area: 1 / 1;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.property__actions-container {\n\t\t\tgrid-area: 1 / 1;\n\t\t\tjustify-self: flex-end;\n\t\t\talign-self: flex-end;\n\t\t\theight: 30px;\n\n\t\t\tdisplay: flex;\n\t\t\tgap: 0 2px;\n\t\t\tmargin-right: 5px;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\t}\n\n\t.property__helper-text-message {\n\t\tpadding: 4px 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t&__icon {\n\t\t\tmargin-right: 8px;\n\t\t\talign-self: start;\n\t\t\tmargin-top: 4px;\n\t\t}\n\n\t\t&--error {\n\t\t\tcolor: var(--color-error);\n\t\t}\n\t}\n\n\t.fade-enter,\n\t.fade-leave-to {\n\t\topacity: 0;\n\t}\n\n\t.fade-enter-active {\n\t\ttransition: opacity 200ms ease-out;\n\t}\n\n\t.fade-leave-active {\n\t\ttransition: opacity 300ms ease-out;\n\t}\n}\n"],sourceRoot:""}]);const r=s},14036:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".federation-actions[data-v-4ea07669],.federation-actions--additional[data-v-4ea07669]{opacity:.4 !important}.federation-actions[data-v-4ea07669]:hover,.federation-actions[data-v-4ea07669]:focus,.federation-actions[data-v-4ea07669]:active,.federation-actions--additional[data-v-4ea07669]:hover,.federation-actions--additional[data-v-4ea07669]:focus,.federation-actions--additional[data-v-4ea07669]:active{opacity:.8 !important}.federation-actions--additional[data-v-4ea07669] button{padding-bottom:7px;height:30px !important;min-height:30px !important;width:30px !important;min-width:30px !important}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/shared/FederationControl.vue"],names:[],mappings:"AACA,sFAEC,qBAAA,CAEA,wSAGC,qBAAA,CAKD,wDAEC,kBAAA,CACA,sBAAA,CACA,0BAAA,CACA,qBAAA,CACA,yBAAA",sourcesContent:["\n.federation-actions,\n.federation-actions--additional {\n\topacity: 0.4 !important;\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\topacity: 0.8 !important;\n\t}\n}\n\n.federation-actions--additional {\n\t&::v-deep button {\n\t\t// TODO remove this hack\n\t\tpadding-bottom: 7px;\n\t\theight: 30px !important;\n\t\tmin-height: 30px !important;\n\t\twidth: 30px !important;\n\t\tmin-width: 30px !important;\n\t}\n}\n"],sourceRoot:""}]);const r=s},28561:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".federation-actions__btn[data-v-d426ed04] p{width:150px !important;padding:8px 0 !important;color:var(--color-main-text) !important;font-size:12.8px !important;line-height:1.5em !important}.federation-actions__btn--active[data-v-d426ed04]{background-color:var(--color-primary-light) !important;box-shadow:inset 2px 0 var(--color-primary) !important}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue"],names:[],mappings:"AAEC,4CACC,sBAAA,CACA,wBAAA,CACA,uCAAA,CACA,2BAAA,CACA,4BAAA,CAIF,kDACC,sDAAA,CACA,sDAAA",sourcesContent:["\n.federation-actions__btn {\n\t&::v-deep p {\n\t\twidth: 150px !important;\n\t\tpadding: 8px 0 !important;\n\t\tcolor: var(--color-main-text) !important;\n\t\tfont-size: 12.8px !important;\n\t\tline-height: 1.5em !important;\n\t}\n}\n\n.federation-actions__btn--active {\n\tbackground-color: var(--color-primary-light) !important;\n\tbox-shadow: inset 2px 0 var(--color-primary) !important;\n}\n"],sourceRoot:""}]);const r=s},90564:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".headerbar-label[data-v-b43fcc0c]{font-weight:normal;display:inline-flex;width:100%;margin:12px 0 0 0;gap:8px;align-items:center;font-size:16px;color:var(--color-text-light)}.headerbar-label.profile-property[data-v-b43fcc0c]{height:38px}.headerbar-label.setting-property[data-v-b43fcc0c]{height:44px}.headerbar-label label[data-v-b43fcc0c]{cursor:pointer}.federation-control[data-v-b43fcc0c]{margin:0}.button-vue[data-v-b43fcc0c]{margin:0 0 0 auto !important}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue"],names:[],mappings:"AACA,kCACC,kBAAA,CACA,mBAAA,CACA,UAAA,CACA,iBAAA,CACA,OAAA,CACA,kBAAA,CACA,cAAA,CACA,6BAAA,CAEA,mDACC,WAAA,CAGD,mDACC,WAAA,CAGD,wCACC,cAAA,CAIF,qCACC,QAAA,CAGD,6BACC,4BAAA",sourcesContent:["\n.headerbar-label {\n\tfont-weight: normal;\n\tdisplay: inline-flex;\n\twidth: 100%;\n\tmargin: 12px 0 0 0;\n\tgap: 8px;\n\talign-items: center;\n\tfont-size: 16px;\n\tcolor: var(--color-text-light);\n\n\t&.profile-property {\n\t\theight: 38px;\n\t}\n\n\t&.setting-property {\n\t\theight: 44px;\n\t}\n\n\tlabel {\n\t\tcursor: pointer;\n\t}\n}\n\n.federation-control {\n\tmargin: 0;\n}\n\n.button-vue {\n\tmargin: 0 0 0 auto !important;\n}\n"],sourceRoot:""}]);const r=s},46700:(t,e,a)=>{var n={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function i(t){var e=o(t);return a(e)}function o(t){if(!a.o(n,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return n[t]}i.keys=function(){return Object.keys(n)},i.resolve=o,t.exports=i,i.id=46700},8738:t=>{"use strict";t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC"},81490:t=>{"use strict";t.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+CiAgPHBhdGggZD0iTTE0IDEyLjNMMTIuMyAxNCA4IDkuNyAzLjcgMTQgMiAxMi4zIDYuMyA4IDIgMy43IDMuNyAyIDggNi4zIDEyLjMgMiAxNCAzLjcgOS43IDh6Ii8+Cjwvc3ZnPgo="},90888:t=>{"use strict";t.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+CiAgPHBhdGggZD0iTTE0IDEyLjNMMTIuMyAxNCA4IDkuNyAzLjcgMTQgMiAxMi4zIDYuMyA4IDIgMy43IDMuNyAyIDggNi4zIDEyLjMgMiAxNCAzLjcgOS43IDh6IiBzdHlsZT0iZmlsbC1vcGFjaXR5OjE7ZmlsbDojZmZmZmZmIi8+Cjwvc3ZnPgo="}},n={};function i(t){var e=n[t];if(void 0!==e)return e.exports;var o=n[t]={id:t,loaded:!1,exports:{}};return a[t].call(o.exports,o,o.exports,i),o.loaded=!0,o.exports}i.m=a,e=[],i.O=(t,a,n,o)=>{if(!a){var s=1/0;for(c=0;c<e.length;c++){a=e[c][0],n=e[c][1],o=e[c][2];for(var r=!0,l=0;l<a.length;l++)(!1&o||s>=o)&&Object.keys(i.O).every((t=>i.O[t](a[l])))?a.splice(l--,1):(r=!1,o<s&&(s=o));if(r){e.splice(c--,1);var d=n();void 0!==d&&(t=d)}}return t}o=o||0;for(var c=e.length;c>0&&e[c-1][2]>o;c--)e[c]=e[c-1];e[c]=[a,n,o]},i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var a in e)i.o(e,a)&&!i.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),i.j=4418,(()=>{i.b=document.baseURI||self.location.href;var t={4418:0};i.O.j=e=>0===t[e];var e=(e,a)=>{var n,o,s=a[0],r=a[1],l=a[2],d=0;if(s.some((e=>0!==t[e]))){for(n in r)i.o(r,n)&&(i.m[n]=r[n]);if(l)var c=l(i)}for(e&&e(a);d<s.length;d++)o=s[d],i.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return i.O(c)},a=self.webpackChunknextcloud=self.webpackChunknextcloud||[];a.forEach(e.bind(null,0)),a.push=e.bind(null,a.push.bind(a))})(),i.nc=void 0;var o=i.O(void 0,[7874],(()=>i(28110)));o=i.O(o)})();
-//# sourceMappingURL=settings-vue-settings-personal-info.js.map?v=c3c6597eed6e57c37261 \ No newline at end of file
+(()=>{var e,a={71945:(e,a,n)=>{"use strict";var i=n(20144),o=n(45994),s=n(79954),r=n(31352),l=(n(36144),n(4820)),d=n(79753),c=n(64024),p=n(78595),A=n(75925),u=n.n(A),m=n(10861),h=n.n(m),g=n(17652),v=(n(74063),n(75762)),f=n(34829),C=n(57612),y=n(61149),b=n(12945),x=n.n(b),E=n(45400);const _={name:"FederationControlAction",components:{NcActionButton:n.n(E)()},props:{activeScope:{type:String,required:!0},displayName:{type:String,required:!0},handleScopeChange:{type:Function,default:()=>{}},iconClass:{type:String,required:!0},isSupportedScope:{type:Boolean,required:!0},name:{type:String,required:!0},tooltipDisabled:{type:String,default:""},tooltip:{type:String,required:!0}},methods:{updateScope(){this.handleScopeChange(this.name)}}};var w=n(93379),I=n.n(w),S=n(7795),P=n.n(S),L=n(90569),j=n.n(L),B=n(3565),k=n.n(B),D=n(19216),O=n.n(D),N=n(44589),R=n.n(N),T=n(69205),Z={};Z.styleTagTransform=R(),Z.setAttributes=k(),Z.insert=j().bind(null,"head"),Z.domAPI=P(),Z.insertStyleElement=O(),I()(T.Z,Z),T.Z&&T.Z.locals&&T.Z.locals;var M=n(51900);const U=(0,M.Z)(_,(function(){var t=this;return(0,t._self._c)("NcActionButton",{staticClass:"federation-actions__btn",class:{"federation-actions__btn--active":t.activeScope===t.name},attrs:{"aria-label":t.isSupportedScope?t.tooltip:t.tooltipDisabled,"close-after-click":!0,disabled:!t.isSupportedScope,icon:t.iconClass,title:t.displayName},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.updateScope.apply(null,arguments)}}},[t._v("\n\t"+t._s(t.isSupportedScope?t.tooltip:t.tooltipDisabled)+"\n")])}),[],!1,null,"404f7a30",null).exports,F=Object.freeze({ADDRESS:"address",AVATAR:"avatar",BIOGRAPHY:"biography",DISPLAYNAME:"displayname",EMAIL_COLLECTION:"additional_mail",EMAIL:"email",HEADLINE:"headline",NOTIFICATION_EMAIL:"notify_email",FEDIVERSE:"fediverse",ORGANISATION:"organisation",PHONE:"phone",PROFILE_ENABLED:"profile_enabled",ROLE:"role",TWITTER:"twitter",WEBSITE:"website"}),z=Object.freeze({ADDRESS:(0,r.Iu)("settings","Location"),AVATAR:(0,r.Iu)("settings","Profile picture"),BIOGRAPHY:(0,r.Iu)("settings","About"),DISPLAYNAME:(0,r.Iu)("settings","Full name"),EMAIL_COLLECTION:(0,r.Iu)("settings","Additional email"),EMAIL:(0,r.Iu)("settings","Email"),HEADLINE:(0,r.Iu)("settings","Headline"),ORGANISATION:(0,r.Iu)("settings","Organisation"),PHONE:(0,r.Iu)("settings","Phone number"),PROFILE_ENABLED:(0,r.Iu)("settings","Profile"),ROLE:(0,r.Iu)("settings","Role"),TWITTER:(0,r.Iu)("settings","Twitter"),FEDIVERSE:(0,r.Iu)("settings","Fediverse (e.g. Mastodon)"),WEBSITE:(0,r.Iu)("settings","Website")}),V=Object.freeze({[F.ADDRESS]:z.ADDRESS,[F.AVATAR]:z.AVATAR,[F.BIOGRAPHY]:z.BIOGRAPHY,[F.DISPLAYNAME]:z.DISPLAYNAME,[F.EMAIL_COLLECTION]:z.EMAIL_COLLECTION,[F.EMAIL]:z.EMAIL,[F.HEADLINE]:z.HEADLINE,[F.ORGANISATION]:z.ORGANISATION,[F.PHONE]:z.PHONE,[F.PROFILE_ENABLED]:z.PROFILE_ENABLED,[F.ROLE]:z.ROLE,[F.TWITTER]:z.TWITTER,[F.FEDIVERSE]:z.FEDIVERSE,[F.WEBSITE]:z.WEBSITE}),H=Object.freeze({PROFILE_VISIBILITY:(0,r.Iu)("settings","Profile visibility")}),G=Object.freeze({[z.ADDRESS]:F.ADDRESS,[z.AVATAR]:F.AVATAR,[z.BIOGRAPHY]:F.BIOGRAPHY,[z.DISPLAYNAME]:F.DISPLAYNAME,[z.EMAIL_COLLECTION]:F.EMAIL_COLLECTION,[z.EMAIL]:F.EMAIL,[z.HEADLINE]:F.HEADLINE,[z.ORGANISATION]:F.ORGANISATION,[z.PHONE]:F.PHONE,[z.PROFILE_ENABLED]:F.PROFILE_ENABLED,[z.ROLE]:F.ROLE,[z.TWITTER]:F.TWITTER,[z.FEDIVERSE]:F.FEDIVERSE,[z.WEBSITE]:F.WEBSITE}),q=Object.freeze({LANGUAGE:"language",LOCALE:"locale"}),Y=Object.freeze({LANGUAGE:(0,r.Iu)("settings","Language"),LOCALE:(0,r.Iu)("settings","Locale")}),$=Object.freeze({PRIVATE:"v2-private",LOCAL:"v2-local",FEDERATED:"v2-federated",PUBLISHED:"v2-published"}),W=Object.freeze({[z.ADDRESS]:[$.LOCAL,$.PRIVATE],[z.AVATAR]:[$.LOCAL,$.PRIVATE],[z.BIOGRAPHY]:[$.LOCAL,$.PRIVATE],[z.DISPLAYNAME]:[$.LOCAL],[z.EMAIL_COLLECTION]:[$.LOCAL],[z.EMAIL]:[$.LOCAL],[z.HEADLINE]:[$.LOCAL,$.PRIVATE],[z.ORGANISATION]:[$.LOCAL,$.PRIVATE],[z.PHONE]:[$.LOCAL,$.PRIVATE],[z.PROFILE_ENABLED]:[$.LOCAL,$.PRIVATE],[z.ROLE]:[$.LOCAL,$.PRIVATE],[z.TWITTER]:[$.LOCAL,$.PRIVATE],[z.FEDIVERSE]:[$.LOCAL,$.PRIVATE],[z.WEBSITE]:[$.LOCAL,$.PRIVATE]}),K=Object.freeze([z.BIOGRAPHY,z.HEADLINE,z.ORGANISATION,z.ROLE]),Q="Scope",J=Object.freeze({[$.PRIVATE]:{name:$.PRIVATE,displayName:(0,r.Iu)("settings","Private"),tooltip:(0,r.Iu)("settings","Only visible to people matched via phone number integration through Talk on mobile"),tooltipDisabled:(0,r.Iu)("settings","Not available as this property is required for core functionality including file sharing and calendar invitations"),iconClass:"icon-phone"},[$.LOCAL]:{name:$.LOCAL,displayName:(0,r.Iu)("settings","Local"),tooltip:(0,r.Iu)("settings","Only visible to people on this instance and guests"),iconClass:"icon-password"},[$.FEDERATED]:{name:$.FEDERATED,displayName:(0,r.Iu)("settings","Federated"),tooltip:(0,r.Iu)("settings","Only synchronize to trusted servers"),tooltipDisabled:(0,r.Iu)("settings","Not available as federation has been disabled for your account, contact your system administrator if you have any questions"),iconClass:"icon-contacts-dark"},[$.PUBLISHED]:{name:$.PUBLISHED,displayName:(0,r.Iu)("settings","Published"),tooltip:(0,r.Iu)("settings","Synchronize to trusted servers and the global and public address book"),tooltipDisabled:(0,r.Iu)("settings","Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions"),iconClass:"icon-link"}}),X=$.LOCAL,tt=Object.freeze({NOT_VERIFIED:0,VERIFICATION_IN_PROGRESS:1,VERIFIED:2}),et=/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/i;var at=n(10128);n(65509);const nt=async(t,e)=>{"boolean"==typeof e&&(e=e?"1":"0");const a=(0,o.ts)().uid,n=(0,d.generateOcsUrl)("cloud/users/{userId}",{userId:a});return await(0,at.confirmPassword)(),(await l.default.put(n,{key:t,value:e})).data},it=(0,n(17499).IY)().setApp("settings").detectUser().build(),ot=(t,e)=>{var a;let n="";e&&(n+=e),429===(null===(a=t.response)||void 0===a?void 0:a.status)&&(n&&(n+="\n"),n+=(0,r.Iu)("settings","There were too many requests from your network. Retry later or contact your administrator if this is an error.")),(0,c.x2)(n),it.error(n||(0,r.Iu)("Error"),t)},{federationEnabled:st,lookupServerUploadEnabled:rt}=(0,s.j)("settings","accountParameters",{}),lt={name:"FederationControl",components:{NcActions:x(),FederationControlAction:U},props:{readable:{type:String,required:!0,validator:t=>Object.values(z).includes(t)||Object.values(Y).includes(t)||t===H.PROFILE_VISIBILITY},additional:{type:Boolean,default:!1},additionalValue:{type:String,default:""},disabled:{type:Boolean,default:!1},handleAdditionalScopeChange:{type:Function,default:null},scope:{type:String,required:!0}},data(){return{readableLowerCase:this.readable.toLocaleLowerCase(),initialScope:this.scope}},computed:{ariaLabel(){return t("settings","Change scope level of {property}, current scope is {scope}",{property:this.readableLowerCase,scope:this.scopeDisplayNameLowerCase})},scopeDisplayNameLowerCase(){return J[this.scope].displayName.toLocaleLowerCase()},scopeIcon(){return J[this.scope].iconClass},federationScopes:()=>Object.values(J),supportedScopes(){const t=W[this.readable];return K.includes(this.readable)||(st&&t.push($.FEDERATED),rt&&t.push($.PUBLISHED)),t}},methods:{async changeScope(t){this.$emit("update:scope",t),this.additional?await this.updateAdditionalScope(t):await this.updatePrimaryScope(t)},async updatePrimaryScope(e){try{var a,n;const t=await(async(t,e)=>{const a=(0,o.ts)().uid,n=(0,d.generateOcsUrl)("cloud/users/{userId}",{userId:a});return await(0,at.confirmPassword)(),(await l.default.put(n,{key:"".concat(t).concat(Q),value:e})).data})(G[this.readable],e);this.handleResponse({scope:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update federation scope of the primary {property}",{property:this.readableLowerCase}),error:e})}},async updateAdditionalScope(e){try{var a,n;const t=await this.handleAdditionalScopeChange(this.additionalValue,e);this.handleResponse({scope:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update federation scope of additional {property}",{property:this.readableLowerCase}),error:e})}},handleResponse(t){let{scope:e,status:a,errorMessage:n,error:i}=t;"ok"===a?this.initialScope=e:(this.$emit("update:scope",this.initialScope),ot(i,n))}}},dt=lt;var ct=n(14036),pt={};pt.styleTagTransform=R(),pt.setAttributes=k(),pt.insert=j().bind(null,"head"),pt.domAPI=P(),pt.insertStyleElement=O(),I()(ct.Z,pt),ct.Z&&ct.Z.locals&&ct.Z.locals;const At=(0,M.Z)(dt,(function(){var t=this,e=t._self._c;return e("NcActions",{class:{"federation-actions":!t.additional,"federation-actions--additional":t.additional},attrs:{"aria-label":t.ariaLabel,"default-icon":t.scopeIcon,disabled:t.disabled}},t._l(t.federationScopes,(function(a){return e("FederationControlAction",{key:a.name,attrs:{"active-scope":t.scope,"display-name":a.displayName,"handle-scope-change":t.changeScope,"icon-class":a.iconClass,"is-supported-scope":t.supportedScopes.includes(a.name),name:a.name,"tooltip-disabled":a.tooltipDisabled,tooltip:a.tooltip,"aria-label":a.tooltip}})})),1)}),[],!1,null,"4ea07669",null).exports,ut={name:"HeaderBar",components:{FederationControl:At,NcButton:h(),Plus:y.Z},props:{scope:{type:String,default:null},readable:{type:String,required:!0},inputId:{type:String,default:null},isEditable:{type:Boolean,default:!0},isMultiValueSupported:{type:Boolean,default:!1},isValidSection:{type:Boolean,default:!0},isHeading:{type:Boolean,default:!1}},data(){return{localScope:this.scope}},computed:{isProfileProperty(){return this.readable===z.PROFILE_ENABLED},isSettingProperty(){return!Object.values(z).includes(this.readable)&&!Object.values(H).includes(this.readable)}},methods:{onAddAdditional(){this.$emit("add-additional")},onScopeChange(t){this.$emit("update:scope",t)}}};var mt=n(90564),ht={};ht.styleTagTransform=R(),ht.setAttributes=k(),ht.insert=j().bind(null,"head"),ht.domAPI=P(),ht.insertStyleElement=O(),I()(mt.Z,ht),mt.Z&&mt.Z.locals&&mt.Z.locals;const gt=(0,M.Z)(ut,(function(){var t=this,e=t._self._c;return e(t.isHeading?"h3":"div",{tag:"component",staticClass:"headerbar-label",class:{"setting-property":t.isSettingProperty,"profile-property":t.isProfileProperty}},[t.isHeading?e("span",[t._v("\n\t\t"+t._s(t.readable)+"\n\t")]):e("label",{attrs:{for:t.inputId}},[t._v("\n\t\t"+t._s(t.readable)+"\n\t")]),t._v(" "),t.scope?[e("FederationControl",{staticClass:"federation-control",attrs:{readable:t.readable,scope:t.localScope},on:{"update:scope":[function(e){t.localScope=e},t.onScopeChange]}})]:t._e(),t._v(" "),t.isEditable&&t.isMultiValueSupported?[e("NcButton",{attrs:{type:"tertiary",disabled:!t.isValidSection,"aria-label":t.t("settings","Add additional email")},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.onAddAdditional.apply(null,arguments)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Plus",{attrs:{size:20}})]},proxy:!0}],null,!1,32235154)},[t._v("\n\t\t\t"+t._s(t.t("settings","Add"))+"\n\t\t")])]:t._e()],2)}),[],!1,null,"b43fcc0c",null).exports,{avatar:vt}=(0,s.j)("settings","personalInfoParameters",{}),{avatarChangeSupported:ft}=(0,s.j)("settings","accountParameters",{}),Ct=["image/png","image/jpeg"],yt=(0,c.fn)(t("settings","Choose your profile picture")).setMultiSelect(!1).setMimeTypeFilter(Ct).setModal(!0).setType(1).allowDirectories(!1).build(),bt={name:"AvatarSection",components:{Delete:C.Z,Folder:f.default,HeaderBar:gt,NcAvatar:u(),NcButton:h(),Upload:v.Z,VueCropper:g.Z},data:()=>({avatar:{...vt,readable:V[vt.name]},avatarChangeSupported:ft,showCropper:!1,loading:!1,userId:(0,o.ts)().uid,displayName:(0,o.ts)().displayName,version:oc_userconfig.avatar.version,isGenerated:oc_userconfig.avatar.generated,validMimeTypes:Ct,cropperOptions:{aspectRatio:1,viewMode:1,guides:!1,center:!1,highlight:!1,autoCropArea:1,minContainerWidth:300,minContainerHeight:300}}),computed:{inputId(){return"account-property-".concat(this.avatar.name)}},created(){(0,p.Ld)("settings:display-name:updated",this.handleDisplayNameUpdate)},beforeDestroy(){(0,p.r1)("settings:display-name:updated",this.handleDisplayNameUpdate)},methods:{activateLocalFilePicker(){this.$refs.input.value=null,this.$refs.input.click()},onChange(e){this.loading=!0;const a=e.target.files[0];if(!this.validMimeTypes.includes(a.type))return(0,c.x2)(t("settings","Please select a valid png or jpg file")),void this.cancel();const n=new FileReader;n.onload=t=>{this.$refs.cropper.replace(t.target.result),this.showCropper=!0},n.readAsDataURL(a)},async openFilePicker(){const e=await yt.pick();this.loading=!0;try{const{data:t}=await l.default.post((0,d.generateUrl)("/avatar"),{path:e});if("success"===t.status)this.handleAvatarUpdate(!1);else if("notsquare"===t.data){const t=(0,d.generateUrl)("/avatar/tmp")+"?requesttoken="+encodeURIComponent(OC.requestToken)+"#"+Math.floor(1e3*Math.random());this.$refs.cropper.replace(t),this.showCropper=!0}else(0,c.x2)(t.data.message),this.cancel()}catch(e){(0,c.x2)(t("settings","Error setting profile picture")),this.cancel()}},saveAvatar(){this.showCropper=!1,this.loading=!0;const e=this.$refs.cropper.getCroppedCanvas(),a=e.width>512?512/e.width:1;this.$refs.cropper.scale(a,a).getCroppedCanvas().toBlob((async e=>{if(null===e)return(0,c.x2)(t("settings","Error cropping profile picture")),void this.cancel();const a=new FormData;a.append("files[]",e);try{await l.default.post((0,d.generateUrl)("/avatar"),a),this.handleAvatarUpdate(!1)}catch(e){(0,c.x2)(t("settings","Error saving profile picture")),this.handleAvatarUpdate(this.isGenerated)}}))},async removeAvatar(){this.loading=!0;try{await l.default.delete((0,d.generateUrl)("/avatar")),this.handleAvatarUpdate(!0)}catch(e){(0,c.x2)(t("settings","Error removing profile picture")),this.handleAvatarUpdate(this.isGenerated)}},cancel(){this.showCropper=!1,this.loading=!1},handleAvatarUpdate(t){this.version=oc_userconfig.avatar.version=Date.now(),this.isGenerated=oc_userconfig.avatar.generated=t,this.loading=!1,(0,p.j8)("settings:avatar:updated",oc_userconfig.avatar.version)},handleDisplayNameUpdate(){this.version=oc_userconfig.avatar.version}}};var xt=n(31246),Et={};Et.styleTagTransform=R(),Et.setAttributes=k(),Et.insert=j().bind(null,"head"),Et.domAPI=P(),Et.insertStyleElement=O(),I()(xt.Z,Et),xt.Z&&xt.Z.locals&&xt.Z.locals;const _t=(0,M.Z)(bt,(function(){var t=this,e=t._self._c;return e("section",{attrs:{id:"vue-avatar-section"}},[e("h3",{staticClass:"hidden-visually"},[t._v(" "+t._s(t.t("settings","Your profile information"))+" ")]),t._v(" "),e("HeaderBar",{attrs:{"input-id":t.avatarChangeSupported?t.inputId:null,readable:t.avatar.readable,scope:t.avatar.scope},on:{"update:scope":function(e){return t.$set(t.avatar,"scope",e)}}}),t._v(" "),t.showCropper?t._e():e("div",{staticClass:"avatar__container"},[e("div",{staticClass:"avatar__preview"},[t.loading?e("div",{staticClass:"icon-loading"}):e("NcAvatar",{key:t.version,attrs:{user:t.userId,"aria-label":t.t("settings","Your profile picture"),"disabled-menu":!0,"disabled-tooltip":!0,"show-user-status":!1,size:180}})],1),t._v(" "),t.avatarChangeSupported?[e("div",{staticClass:"avatar__buttons"},[e("NcButton",{attrs:{"aria-label":t.t("settings","Upload profile picture")},on:{click:t.activateLocalFilePicker},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Upload",{attrs:{size:20}})]},proxy:!0}],null,!1,1329850251)}),t._v(" "),e("NcButton",{attrs:{"aria-label":t.t("settings","Choose profile picture from Files")},on:{click:t.openFilePicker},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Folder",{attrs:{size:20}})]},proxy:!0}],null,!1,4270628382)}),t._v(" "),t.isGenerated?t._e():e("NcButton",{attrs:{"aria-label":t.t("settings","Remove profile picture")},on:{click:t.removeAvatar},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Delete",{attrs:{size:20}})]},proxy:!0}],null,!1,2705356561)})],1),t._v(" "),e("span",[t._v(t._s(t.t("settings","The file must be a PNG or JPG")))]),t._v(" "),e("input",{ref:"input",attrs:{id:t.inputId,type:"file",accept:t.validMimeTypes.join(",")},on:{change:t.onChange}})]:e("span",[t._v("\n\t\t\t"+t._s(t.t("settings","Picture provided by original account"))+"\n\t\t")])],2),t._v(" "),e("div",{directives:[{name:"show",rawName:"v-show",value:t.showCropper,expression:"showCropper"}],staticClass:"avatar__container"},[e("VueCropper",t._b({ref:"cropper",staticClass:"avatar__cropper"},"VueCropper",t.cropperOptions,!1)),t._v(" "),e("div",{staticClass:"avatar__cropper-buttons"},[e("NcButton",{on:{click:t.cancel}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Cancel"))+"\n\t\t\t")]),t._v(" "),e("NcButton",{attrs:{type:"primary"},on:{click:t.saveAvatar}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Set as profile picture"))+"\n\t\t\t")])],1),t._v(" "),e("span",[t._v(t._s(t.t("settings","Please note that it can take up to 24 hours for your profile picture to be updated everywhere.")))])],1)],1)}),[],!1,null,"022fd5d4",null).exports;var wt=n(48959),It=n.n(wt),St=n(86158),Pt=n(34046);const{groups:Lt,quota:jt,totalSpace:Bt,usage:kt,usageRelative:Dt}=(0,s.j)("settings","personalInfoParameters",{}),Ot={name:"DetailsSection",components:{Account:St.Z,CircleSlice:Pt.Z,HeaderBar:gt,NcProgressBar:It()},computed:{quotaText:()=>-3===jt?t("settings","You are using <strong>{usage}</strong>",{usage:kt}):t("settings","You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)",{usage:kt,totalSpace:Bt,usageRelative:Dt})},data:()=>({groups:Lt,usageRelative:Dt})};var Nt=n(18118),Rt={};Rt.styleTagTransform=R(),Rt.setAttributes=k(),Rt.insert=j().bind(null,"head"),Rt.domAPI=P(),Rt.insertStyleElement=O(),I()(Nt.Z,Rt),Nt.Z&&Nt.Z.locals&&Nt.Z.locals;const Tt=(0,M.Z)(Ot,(function(){var t=this,e=t._self._c;return e("section",[e("HeaderBar",{attrs:{"is-heading":!0,readable:t.t("settings","Details")}}),t._v(" "),e("div",{staticClass:"details"},[e("div",{staticClass:"details__groups"},[e("Account",{attrs:{size:20}}),t._v(" "),e("div",{staticClass:"details__groups-info"},[e("p",[t._v(t._s(t.t("settings","You are a member of the following groups:")))]),t._v(" "),e("p",{staticClass:"details__groups-list"},[t._v(t._s(t.groups.join(", ")))])])],1),t._v(" "),e("div",{staticClass:"details__quota"},[e("CircleSlice",{attrs:{size:20}}),t._v(" "),e("div",{staticClass:"details__quota-info"},[e("p",{staticClass:"details__quota-text",domProps:{innerHTML:t._s(t.quotaText)}}),t._v(" "),e("NcProgressBar",{attrs:{size:"medium",value:t.usageRelative,error:t.usageRelative>80}})],1)],1)])],1)}),[],!1,null,"1ab46e68",null).exports;var Zt=n(20296),Mt=n.n(Zt),Ut=n(94603),Ft=n(31974),zt=n(80419);const Vt={name:"AccountPropertySection",components:{AlertCircle:Ut.default,AlertOctagon:Ft.Z,Check:zt.default,HeaderBar:gt},props:{name:{type:String,required:!0},value:{type:String,required:!0},scope:{type:String,required:!0},readable:{type:String,required:!0},placeholder:{type:String,required:!0},type:{type:String,default:"text"},isEditable:{type:Boolean,default:!0},multiLine:{type:Boolean,default:!1},onValidate:{type:Function,default:null},onSave:{type:Function,default:null}},data(){return{initialValue:this.value,helperText:null,showCheckmarkIcon:!1,showErrorIcon:!1}},computed:{inputId(){return"account-property-".concat(this.name)}},methods:{onPropertyChange(t){this.$emit("update:value",t.target.value),this.debouncePropertyChange(t.target.value.trim())},debouncePropertyChange:Mt()((async function(t){this.helperText=null,this.$refs.input&&this.$refs.input.validationMessage?this.helperText=this.$refs.input.validationMessage:this.onValidate&&!this.onValidate(t)||await this.updateProperty(t)}),500),async updateProperty(e){try{var a,n;const t=await nt(this.name,e);this.handleResponse({value:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update {property}",{property:this.readable.toLocaleLowerCase()}),error:e})}},handleResponse(t){let{value:e,status:a,errorMessage:n,error:i}=t;"ok"===a?(this.initialValue=e,this.onSave&&this.onSave(e),this.showCheckmarkIcon=!0,setTimeout((()=>{this.showCheckmarkIcon=!1}),2e3)):(this.$emit("update:value",this.initialValue),ot(i,n),this.showErrorIcon=!0,setTimeout((()=>{this.showErrorIcon=!1}),2e3))}}};var Ht=n(78784),Gt={};Gt.styleTagTransform=R(),Gt.setAttributes=k(),Gt.insert=j().bind(null,"head"),Gt.domAPI=P(),Gt.insertStyleElement=O(),I()(Ht.Z,Gt),Ht.Z&&Ht.Z.locals&&Ht.Z.locals;const qt=(0,M.Z)(Vt,(function(){var t=this,e=t._self._c;return e("section",[e("HeaderBar",{attrs:{scope:t.scope,readable:t.readable,"input-id":t.inputId,"is-editable":t.isEditable},on:{"update:scope":function(e){t.scope=e},"update:readable":function(e){t.readable=e}}}),t._v(" "),t.isEditable?e("div",{staticClass:"property"},[t.multiLine?e("textarea",{attrs:{id:t.inputId,placeholder:t.placeholder,rows:"8",autocapitalize:"none",autocomplete:"off",autocorrect:"off"},domProps:{value:t.value},on:{input:t.onPropertyChange}}):e("input",{ref:"input",attrs:{id:t.inputId,placeholder:t.placeholder,type:t.type,"aria-describedby":t.helperText?"".concat(t.name,"-helper-text"):"",autocapitalize:"none",autocomplete:"on",autocorrect:"off"},domProps:{value:t.value},on:{input:t.onPropertyChange}}),t._v(" "),e("div",{staticClass:"property__actions-container"},[e("transition",{attrs:{name:"fade"}},[t.showCheckmarkIcon?e("Check",{attrs:{size:20}}):t.showErrorIcon?e("AlertOctagon",{attrs:{size:20}}):t._e()],1)],1)]):e("span",[t._v("\n\t\t"+t._s(t.value||t.t("settings","No {property} set",{property:t.readable.toLocaleLowerCase()}))+"\n\t")]),t._v(" "),t.helperText?e("p",{staticClass:"property__helper-text-message property__helper-text-message--error",attrs:{id:"".concat(t.name,"-helper-text")}},[e("AlertCircle",{staticClass:"property__helper-text-message__icon",attrs:{size:18}}),t._v("\n\t\t"+t._s(t.helperText)+"\n\t")],1):t._e()],1)}),[],!1,null,"6eb7d8e0",null).exports,{displayName:Yt}=(0,s.j)("settings","personalInfoParameters",{}),{displayNameChangeSupported:$t}=(0,s.j)("settings","accountParameters",{}),Wt={name:"DisplayNameSection",components:{AccountPropertySection:qt},data:()=>({displayName:{...Yt,readable:V[Yt.name]},displayNameChangeSupported:$t}),methods:{onValidate:t=>""!==t,onSave(t){oc_userconfig.avatar.generated&&(oc_userconfig.avatar.version=Date.now()),(0,p.j8)("settings:display-name:updated",t)}}},Kt=(0,M.Z)(Wt,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your full name"),"is-editable":t.displayNameChangeSupported,"on-validate":t.onValidate,"on-save":t.onSave}},"AccountPropertySection",t.displayName,!1,!0))}),[],!1,null,null,null).exports;var Qt=n(15961);const Jt=async t=>{const e=(0,o.ts)().uid,a=(0,d.generateOcsUrl)("cloud/users/{userId}",{userId:e});return await(0,at.confirmPassword)(),(await l.default.put(a,{key:F.EMAIL,value:t})).data},Xt=async t=>{const e=(0,o.ts)().uid,a=(0,d.generateOcsUrl)("cloud/users/{userId}/{collection}",{userId:e,collection:F.EMAIL_COLLECTION});return await(0,at.confirmPassword)(),(await l.default.put(a,{key:t,value:""})).data},te=async t=>{const e=(0,o.ts)().uid,a=(0,d.generateOcsUrl)("cloud/users/{userId}",{userId:e});return await(0,at.confirmPassword)(),(await l.default.put(a,{key:"".concat(F.EMAIL).concat(Q),value:t})).data},ee=async(t,e)=>{const a=(0,o.ts)().uid,n=(0,d.generateOcsUrl)("cloud/users/{userId}/{collectionScope}",{userId:a,collectionScope:"".concat(F.EMAIL_COLLECTION).concat(Q)});return await(0,at.confirmPassword)(),(await l.default.put(n,{key:t,value:e})).data};function ae(t){return"string"==typeof t&&et.test(t)&&"\n"!==t.slice(-1)&&t.length<=320&&encodeURIComponent(t).replace(/%../g,"x").length<=320}const ne={name:"Email",components:{NcActions:Qt.O3,NcActionButton:Qt.Js,AlertCircle:Ut.default,AlertOctagon:Ft.Z,Check:zt.default,FederationControl:At},props:{email:{type:String,required:!0},index:{type:Number,default:0},primary:{type:Boolean,default:!1},scope:{type:String,required:!0},activeNotificationEmail:{type:String,default:""},localVerificationState:{type:Number,default:tt.NOT_VERIFIED}},data(){return{propertyReadable:z.EMAIL,initialEmail:this.email,localScope:this.scope,saveAdditionalEmailScope:ee,helperText:null,showCheckmarkIcon:!1,showErrorIcon:!1}},computed:{deleteDisabled(){return this.primary?""===this.email||this.initialEmail!==this.email:""!==this.initialEmail&&this.initialEmail!==this.email},deleteEmailLabel(){return this.primary?t("settings","Remove primary email"):t("settings","Delete email")},setNotificationMailDisabled(){return!this.primary&&this.localVerificationState!==tt.VERIFIED},setNotificationMailLabel(){return this.isNotificationEmail?t("settings","Unset as primary email"):this.primary||this.localVerificationState===tt.VERIFIED?t("settings","Set as primary email"):t("settings","This address is not confirmed")},federationDisabled(){return!this.initialEmail},inputId(){return this.primary?"email":"email-".concat(this.index)},inputPlaceholder(){return this.primary?t("settings","Your email address"):t("settings","Additional email address {index}",{index:this.index+1})},isNotificationEmail(){return this.email&&this.email===this.activeNotificationEmail||this.primary&&""===this.activeNotificationEmail}},mounted(){this.primary||""!==this.initialEmail||this.$nextTick((()=>{var t;return null===(t=this.$refs.email)||void 0===t?void 0:t.focus()}))},methods:{onEmailChange(t){this.$emit("update:email",t.target.value),this.debounceEmailChange(t.target.value.trim())},debounceEmailChange:Mt()((async function(t){var e;this.helperText=null,null!==(e=this.$refs.email)&&void 0!==e&&e.validationMessage?this.helperText=this.$refs.email.validationMessage:(ae(t)||""===t)&&(this.primary?await this.updatePrimaryEmail(t):t&&(""===this.initialEmail?await this.addAdditionalEmail(t):await this.updateAdditionalEmail(t)))}),500),async deleteEmail(){this.primary?(this.$emit("update:email",""),await this.updatePrimaryEmail("")):await this.deleteAdditionalEmail()},async updatePrimaryEmail(e){try{var a,n;const t=await Jt(e);this.handleResponse({email:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(a){""===e?this.handleResponse({errorMessage:t("settings","Unable to delete primary email address"),error:a}):this.handleResponse({errorMessage:t("settings","Unable to update primary email address"),error:a})}},async addAdditionalEmail(e){try{var a,n;const t=await(async t=>{const e=(0,o.ts)().uid,a=(0,d.generateOcsUrl)("cloud/users/{userId}",{userId:e});return await(0,at.confirmPassword)(),(await l.default.put(a,{key:F.EMAIL_COLLECTION,value:t})).data})(e);this.handleResponse({email:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to add additional email address"),error:e})}},async setNotificationMail(){try{var t,e;const a=this.primary||this.isNotificationEmail?"":this.initialEmail,n=await(async t=>{const e=(0,o.ts)().uid,a=(0,d.generateOcsUrl)("cloud/users/{userId}",{userId:e});return await(0,at.confirmPassword)(),(await l.default.put(a,{key:F.NOTIFICATION_EMAIL,value:t})).data})(a);this.handleResponse({notificationEmail:a,status:null===(t=n.ocs)||void 0===t||null===(e=t.meta)||void 0===e?void 0:e.status})}catch(t){this.handleResponse({errorMessage:"Unable to choose this email for notifications",error:t})}},async updateAdditionalEmail(e){try{var a,n;const t=await(async(t,e)=>{const a=(0,o.ts)().uid,n=(0,d.generateOcsUrl)("cloud/users/{userId}/{collection}",{userId:a,collection:F.EMAIL_COLLECTION});return await(0,at.confirmPassword)(),(await l.default.put(n,{key:t,value:e})).data})(this.initialEmail,e);this.handleResponse({email:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update additional email address"),error:e})}},async deleteAdditionalEmail(){try{var e,a;const t=await Xt(this.initialEmail);this.handleDeleteAdditionalEmail(null===(e=t.ocs)||void 0===e||null===(a=e.meta)||void 0===a?void 0:a.status)}catch(e){this.handleResponse({errorMessage:t("settings","Unable to delete additional email address"),error:e})}},handleDeleteAdditionalEmail(e){"ok"===e?this.$emit("delete-additional-email"):this.handleResponse({errorMessage:t("settings","Unable to delete additional email address")})},handleResponse(t){let{email:e,notificationEmail:a,status:n,errorMessage:i,error:o}=t;"ok"===n?(e?this.initialEmail=e:void 0!==a&&this.$emit("update:notification-email",a),this.showCheckmarkIcon=!0,setTimeout((()=>{this.showCheckmarkIcon=!1}),2e3)):(ot(o,i),this.showErrorIcon=!0,setTimeout((()=>{this.showErrorIcon=!1}),2e3))},onScopeChange(t){this.$emit("update:scope",t)}}},ie=ne;var oe=n(11121),se={};se.styleTagTransform=R(),se.setAttributes=k(),se.insert=j().bind(null,"head"),se.domAPI=P(),se.insertStyleElement=O(),I()(oe.Z,se),oe.Z&&oe.Z.locals&&oe.Z.locals;const re=(0,M.Z)(ie,(function(){var t=this,e=t._self._c;return e("div",[e("div",{staticClass:"email"},[e("input",{ref:"email",attrs:{id:t.inputId,type:"email",placeholder:t.inputPlaceholder,"aria-describedby":t.helperText?"".concat(t.inputId,"-helper-text"):"",autocapitalize:"none",autocomplete:"on",autocorrect:"off"},domProps:{value:t.email},on:{input:t.onEmailChange}}),t._v(" "),e("div",{staticClass:"email__actions-container"},[e("transition",{attrs:{name:"fade"}},[t.showCheckmarkIcon?e("Check",{attrs:{size:20}}):t.showErrorIcon?e("AlertOctagon",{attrs:{size:20}}):t._e()],1),t._v(" "),t.primary?t._e():[e("FederationControl",{attrs:{readable:t.propertyReadable,additional:!0,"additional-value":t.email,disabled:t.federationDisabled,"handle-additional-scope-change":t.saveAdditionalEmailScope,scope:t.localScope},on:{"update:scope":[function(e){t.localScope=e},t.onScopeChange]}})],t._v(" "),e("NcActions",{staticClass:"email__actions",attrs:{"aria-label":t.t("settings","Email options"),"force-menu":!0}},[e("NcActionButton",{attrs:{"aria-label":t.deleteEmailLabel,"close-after-click":!0,disabled:t.deleteDisabled,icon:"icon-delete"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.deleteEmail.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t"+t._s(t.deleteEmailLabel)+"\n\t\t\t\t")]),t._v(" "),t.primary&&t.isNotificationEmail?t._e():e("NcActionButton",{attrs:{"aria-label":t.setNotificationMailLabel,"close-after-click":!0,disabled:t.setNotificationMailDisabled,icon:"icon-favorite"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.setNotificationMail.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t"+t._s(t.setNotificationMailLabel)+"\n\t\t\t\t")])],1)],2)]),t._v(" "),t.helperText?e("p",{staticClass:"email__helper-text-message email__helper-text-message--error",attrs:{id:"".concat(t.inputId,"-helper-text")}},[e("AlertCircle",{staticClass:"email__helper-text-message__icon",attrs:{size:18}}),t._v("\n\t\t"+t._s(t.helperText)+"\n\t")],1):t._e(),t._v(" "),t.isNotificationEmail?e("em",[t._v("\n\t\t"+t._s(t.t("settings","Primary email for password reset and notifications"))+"\n\t")]):t._e()])}),[],!1,null,"5ff85d38",null).exports,{emailMap:{additionalEmails:le,primaryEmail:de,notificationEmail:ce}}=(0,s.j)("settings","personalInfoParameters",{}),{displayNameChangeSupported:pe}=(0,s.j)("settings","accountParameters",{}),Ae={name:"EmailSection",components:{HeaderBar:gt,Email:re},data(){return{accountProperty:z.EMAIL,additionalEmails:le.map((t=>({...t,key:this.generateUniqueKey()}))),displayNameChangeSupported:pe,primaryEmail:{...de,readable:V[de.name]},savePrimaryEmailScope:te,notificationEmail:ce}},computed:{firstAdditionalEmail(){return this.additionalEmails.length?this.additionalEmails[0].value:null},inputId(){return"account-property-".concat(this.primaryEmail.name)},isValidSection(){return ae(this.primaryEmail.value)&&this.additionalEmails.map((t=>{let{value:e}=t;return e})).every(ae)},primaryEmailValue:{get(){return this.primaryEmail.value},set(t){this.primaryEmail.value=t}}},methods:{onAddAdditionalEmail(){this.isValidSection&&this.additionalEmails.push({value:"",scope:X,key:this.generateUniqueKey()})},onDeleteAdditionalEmail(t){this.$delete(this.additionalEmails,t)},async onUpdateEmail(){if(""===this.primaryEmailValue&&this.firstAdditionalEmail){const t=this.firstAdditionalEmail;await this.deleteFirstAdditionalEmail(),this.primaryEmailValue=t,await this.updatePrimaryEmail()}},async onUpdateNotificationEmail(t){this.notificationEmail=t},async updatePrimaryEmail(){try{var e,a;const t=await Jt(this.primaryEmailValue);this.handleResponse(null===(e=t.ocs)||void 0===e||null===(a=e.meta)||void 0===a?void 0:a.status)}catch(e){this.handleResponse("error",t("settings","Unable to update primary email address"),e)}},async deleteFirstAdditionalEmail(){try{var e,a;const t=await Xt(this.firstAdditionalEmail);this.handleDeleteFirstAdditionalEmail(null===(e=t.ocs)||void 0===e||null===(a=e.meta)||void 0===a?void 0:a.status)}catch(e){this.handleResponse("error",t("settings","Unable to delete additional email address"),e)}},handleDeleteFirstAdditionalEmail(e){"ok"===e?this.$delete(this.additionalEmails,0):this.handleResponse("error",t("settings","Unable to delete additional email address"),{})},handleResponse(t,e,a){"ok"!==t&&ot(a,e)},generateUniqueKey:()=>Math.random().toString(36).substring(2)}};var ue=n(73070),me={};me.styleTagTransform=R(),me.setAttributes=k(),me.insert=j().bind(null,"head"),me.domAPI=P(),me.insertStyleElement=O(),I()(ue.Z,me),ue.Z&&ue.Z.locals&&ue.Z.locals;const he=(0,M.Z)(Ae,(function(){var t=this,e=t._self._c;return e("section",[e("HeaderBar",{attrs:{"input-id":t.inputId,readable:t.primaryEmail.readable,"handle-scope-change":t.savePrimaryEmailScope,"is-editable":!0,"is-multi-value-supported":!0,"is-valid-section":t.isValidSection,scope:t.primaryEmail.scope},on:{"update:scope":function(e){return t.$set(t.primaryEmail,"scope",e)},"add-additional":t.onAddAdditionalEmail}}),t._v(" "),t.displayNameChangeSupported?[e("Email",{attrs:{primary:!0,scope:t.primaryEmail.scope,email:t.primaryEmail.value,"active-notification-email":t.notificationEmail},on:{"update:scope":function(e){return t.$set(t.primaryEmail,"scope",e)},"update:email":[function(e){return t.$set(t.primaryEmail,"value",e)},t.onUpdateEmail],"update:activeNotificationEmail":function(e){t.notificationEmail=e},"update:active-notification-email":function(e){t.notificationEmail=e},"update:notification-email":t.onUpdateNotificationEmail}})]:e("span",[t._v("\n\t\t"+t._s(t.primaryEmail.value||t.t("settings","No email address set"))+"\n\t")]),t._v(" "),t.additionalEmails.length?[e("em",{staticClass:"additional-emails-label"},[t._v(t._s(t.t("settings","Additional emails")))]),t._v(" "),t._l(t.additionalEmails,(function(a,n){return e("Email",{key:a.key,attrs:{index:n,scope:a.scope,email:a.value,"local-verification-state":parseInt(a.locallyVerified,10),"active-notification-email":t.notificationEmail},on:{"update:scope":function(e){return t.$set(a,"scope",e)},"update:email":[function(e){return t.$set(a,"value",e)},t.onUpdateEmail],"update:activeNotificationEmail":function(e){t.notificationEmail=e},"update:active-notification-email":function(e){t.notificationEmail=e},"update:notification-email":t.onUpdateNotificationEmail,"delete-additional-email":function(e){return t.onDeleteAdditionalEmail(n)}}})}))]:t._e()],2)}),[],!1,null,"46c7eb7e",null).exports;var ge=n(45004);const{defaultPhoneRegion:ve,phone:fe}=(0,s.j)("settings","personalInfoParameters",{}),Ce={name:"PhoneSection",components:{AccountPropertySection:qt},data:()=>({phone:{...fe,readable:V[fe.name]}}),methods:{onValidate:t=>ve?(0,ge.y)(t,ve):(0,ge.y)(t)}},ye=(0,M.Z)(Ce,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your phone number"),type:"tel","on-validate":t.onValidate}},"AccountPropertySection",t.phone,!1,!0))}),[],!1,null,null,null).exports,{location:be}=(0,s.j)("settings","personalInfoParameters",{}),xe={name:"LocationSection",components:{AccountPropertySection:qt},data:()=>({location:{...be,readable:V[be.name]}})},Ee=(0,M.Z)(xe,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your location")}},"AccountPropertySection",t.location,!1,!0))}),[],!1,null,null,null).exports,{website:_e}=(0,s.j)("settings","personalInfoParameters",{}),we={name:"WebsiteSection",components:{AccountPropertySection:qt},data:()=>({website:{..._e,readable:V[_e.name]}}),methods:{onValidate:t=>function(t){try{return new URL(t),!0}catch(t){return!1}}(t)}},Ie=(0,M.Z)(we,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your website"),type:"url","on-validate":t.onValidate}},"AccountPropertySection",t.website,!1,!0))}),[],!1,null,null,null).exports,{twitter:Se}=(0,s.j)("settings","personalInfoParameters",{}),Pe={name:"TwitterSection",components:{AccountPropertySection:qt},data:()=>({twitter:{...Se,readable:V[Se.name]}})},Le=(0,M.Z)(Pe,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your Twitter handle")}},"AccountPropertySection",t.twitter,!1,!0))}),[],!1,null,null,null).exports,{fediverse:je}=(0,s.j)("settings","personalInfoParameters",{}),Be={name:"FediverseSection",components:{AccountPropertySection:qt},data:()=>({fediverse:{...je,readable:V[je.name]}})},ke=(0,M.Z)(Be,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your handle")}},"AccountPropertySection",t.fediverse,!1,!0))}),[],!1,null,null,null).exports,De={name:"Language",props:{inputId:{type:String,default:null},commonLanguages:{type:Array,required:!0},otherLanguages:{type:Array,required:!0},language:{type:Object,required:!0}},data(){return{initialLanguage:this.language}},computed:{allLanguages(){return Object.freeze([...this.commonLanguages,...this.otherLanguages].reduce(((t,e)=>{let{code:a,name:n}=e;return{...t,[a]:n}}),{}))}},methods:{async onLanguageChange(t){const e=this.constructLanguage(t.target.value);var a;this.$emit("update:language",e),""!==(a=e).code&&""!==a.name&&void 0!==a.name&&await this.updateLanguage(e)},async updateLanguage(e){try{var a,n;const t=await nt(q.LANGUAGE,e.code);this.handleResponse({language:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status}),this.reloadPage()}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update language"),error:e})}},constructLanguage(t){return{code:t,name:this.allLanguages[t]}},handleResponse(t){let{language:e,status:a,errorMessage:n,error:i}=t;"ok"===a?this.initialLanguage=e:ot(i,n)},reloadPage(){location.reload()}}};var Oe=n(42569),Ne={};Ne.styleTagTransform=R(),Ne.setAttributes=k(),Ne.insert=j().bind(null,"head"),Ne.domAPI=P(),Ne.insertStyleElement=O(),I()(Oe.Z,Ne),Oe.Z&&Oe.Z.locals&&Oe.Z.locals;const Re=(0,M.Z)(De,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"language"},[e("select",{attrs:{id:t.inputId,placeholder:t.t("settings","Language")},on:{change:t.onLanguageChange}},[t._l(t.commonLanguages,(function(a){return e("option",{key:a.code,domProps:{selected:t.language.code===a.code,value:a.code}},[t._v("\n\t\t\t"+t._s(a.name)+"\n\t\t")])})),t._v(" "),e("option",{attrs:{disabled:""}},[t._v("\n\t\t\t──────────\n\t\t")]),t._v(" "),t._l(t.otherLanguages,(function(a){return e("option",{key:a.code,domProps:{selected:t.language.code===a.code,value:a.code}},[t._v("\n\t\t\t"+t._s(a.name)+"\n\t\t")])}))],2),t._v(" "),e("a",{attrs:{href:"https://www.transifex.com/nextcloud/nextcloud/",target:"_blank",rel:"noreferrer noopener"}},[e("em",[t._v(t._s(t.t("settings","Help translate")))])])])}),[],!1,null,"5c847b3a",null).exports,{languageMap:{activeLanguage:Te,commonLanguages:Ze,otherLanguages:Me}}=(0,s.j)("settings","personalInfoParameters",{}),Ue={name:"LanguageSection",components:{Language:Re,HeaderBar:gt},data:()=>({propertyReadable:Y.LANGUAGE,commonLanguages:Ze,otherLanguages:Me,language:Te}),computed:{inputId:()=>"account-setting-".concat(q.LANGUAGE),isEditable(){return Boolean(this.language)}}};var Fe=n(12531),ze={};ze.styleTagTransform=R(),ze.setAttributes=k(),ze.insert=j().bind(null,"head"),ze.domAPI=P(),ze.insertStyleElement=O(),I()(Fe.Z,ze),Fe.Z&&Fe.Z.locals&&Fe.Z.locals;const Ve=(0,M.Z)(Ue,(function(){var t=this,e=t._self._c;return e("section",[e("HeaderBar",{attrs:{"input-id":t.inputId,readable:t.propertyReadable}}),t._v(" "),t.isEditable?[e("Language",{attrs:{"input-id":t.inputId,"common-languages":t.commonLanguages,"other-languages":t.otherLanguages,language:t.language},on:{"update:language":function(e){t.language=e}}})]:e("span",[t._v("\n\t\t"+t._s(t.t("settings","No language set"))+"\n\t")])],2)}),[],!1,null,"92685b76",null).exports;var He=n(80351),Ge=n.n(He);const qe={name:"Locale",components:{Web:n(97859).default},props:{inputId:{type:String,default:null},locale:{type:Object,required:!0},localesForLanguage:{type:Array,required:!0},otherLocales:{type:Array,required:!0}},data(){return{initialLocale:this.locale,example:{date:Ge()().format("L"),time:Ge()().format("LTS"),firstDayOfWeek:window.dayNames[window.firstDay]}}},computed:{allLocales(){return Object.freeze([...this.localesForLanguage,...this.otherLocales].reduce(((t,e)=>{let{code:a,name:n}=e;return{...t,[a]:n}}),{}))}},created(){setInterval(this.refreshExample,1e3)},methods:{async onLocaleChange(t){const e=this.constructLocale(t.target.value);var a;this.$emit("update:locale",e),""!==(a=e).code&&""!==a.name&&void 0!==a.name&&await this.updateLocale(e)},async updateLocale(e){try{var a,n;const t=await nt(q.LOCALE,e.code);this.handleResponse({locale:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status}),this.reloadPage()}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update locale"),error:e})}},constructLocale(t){return{code:t,name:this.allLocales[t]}},handleResponse(t){let{locale:e,status:a,errorMessage:n,error:i}=t;"ok"===a?this.initialLocale=e:(this.$emit("update:locale",this.initialLocale),ot(i,n))},refreshExample(){this.example={date:Ge()().format("L"),time:Ge()().format("LTS"),firstDayOfWeek:window.dayNames[window.firstDay]}},reloadPage(){location.reload()}}};var Ye=n(87229),$e={};$e.styleTagTransform=R(),$e.setAttributes=k(),$e.insert=j().bind(null,"head"),$e.domAPI=P(),$e.insertStyleElement=O(),I()(Ye.Z,$e),Ye.Z&&Ye.Z.locals&&Ye.Z.locals;const We=(0,M.Z)(qe,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"locale"},[e("select",{attrs:{id:t.inputId,placeholder:t.t("settings","Locale")},on:{change:t.onLocaleChange}},[t._l(t.localesForLanguage,(function(a){return e("option",{key:a.code,domProps:{selected:t.locale.code===a.code,value:a.code}},[t._v("\n\t\t\t"+t._s(a.name)+"\n\t\t")])})),t._v(" "),e("option",{attrs:{disabled:""}},[t._v("\n\t\t\t──────────\n\t\t")]),t._v(" "),t._l(t.otherLocales,(function(a){return e("option",{key:a.code,domProps:{selected:t.locale.code===a.code,value:a.code}},[t._v("\n\t\t\t"+t._s(a.name)+"\n\t\t")])}))],2),t._v(" "),e("div",{staticClass:"example"},[e("Web",{attrs:{size:20}}),t._v(" "),e("div",{staticClass:"example__text"},[e("p",[e("span",[t._v(t._s(t.example.date))]),t._v(" "),e("span",[t._v(t._s(t.example.time))])]),t._v(" "),e("p",[t._v("\n\t\t\t\t"+t._s(t.t("settings","Week starts on {firstDayOfWeek}",{firstDayOfWeek:this.example.firstDayOfWeek}))+"\n\t\t\t")])])],1)])}),[],!1,null,"1ac456dc",null).exports,{localeMap:{activeLocale:Ke,localesForLanguage:Qe,otherLocales:Je}}=(0,s.j)("settings","personalInfoParameters",{}),Xe={name:"LocaleSection",components:{Locale:We,HeaderBar:gt},data:()=>({propertyReadable:Y.LOCALE,localesForLanguage:Qe,otherLocales:Je,locale:Ke}),computed:{inputId:()=>"account-setting-".concat(q.LOCALE),isEditable(){return Boolean(this.locale)}}};var ta=n(682),ea={};ea.styleTagTransform=R(),ea.setAttributes=k(),ea.insert=j().bind(null,"head"),ea.domAPI=P(),ea.insertStyleElement=O(),I()(ta.Z,ea),ta.Z&&ta.Z.locals&&ta.Z.locals;const aa=(0,M.Z)(Xe,(function(){var t=this,e=t._self._c;return e("section",[e("HeaderBar",{attrs:{"input-id":t.inputId,readable:t.propertyReadable}}),t._v(" "),t.isEditable?[e("Locale",{attrs:{"input-id":t.inputId,"locales-for-language":t.localesForLanguage,"other-locales":t.otherLocales,locale:t.locale},on:{"update:locale":function(e){t.locale=e}}})]:e("span",[t._v("\n\t\t"+t._s(t.t("settings","No locale set"))+"\n\t")])],2)}),[],!1,null,"84fca724",null).exports,na={name:"EditProfileAnchorLink",components:{ChevronDownIcon:n(41622).default},props:{profileEnabled:{type:Boolean,required:!0}},computed:{disabled(){return!this.profileEnabled}}};var ia=n(64534),oa={};oa.styleTagTransform=R(),oa.setAttributes=k(),oa.insert=j().bind(null,"head"),oa.domAPI=P(),oa.insertStyleElement=O(),I()(ia.Z,oa),ia.Z&&ia.Z.locals&&ia.Z.locals;var sa=n(40001),ra={};ra.styleTagTransform=R(),ra.setAttributes=k(),ra.insert=j().bind(null,"head"),ra.domAPI=P(),ra.insertStyleElement=O(),I()(sa.Z,ra),sa.Z&&sa.Z.locals&&sa.Z.locals;const la=(0,M.Z)(na,(function(){var t=this,e=t._self._c;return e("a",t._g({class:{disabled:t.disabled},attrs:{href:"#profile-visibility"}},t.$listeners),[e("ChevronDownIcon",{staticClass:"anchor-icon",attrs:{size:22}}),t._v("\n\t"+t._s(t.t("settings","Edit your Profile visibility"))+"\n")],1)}),[],!1,null,"1caba458",null).exports;var da=n(20571);const ca={name:"ProfileCheckbox",components:{NcCheckboxRadioSwitch:n.n(da)()},props:{profileEnabled:{type:Boolean,required:!0}},data(){return{isProfileEnabled:this.profileEnabled,loading:!1}},methods:{async saveEnableProfile(){this.loading=!0;try{var e,a;const t=await nt(F.PROFILE_ENABLED,this.isProfileEnabled);this.handleResponse({isProfileEnabled:this.isProfileEnabled,status:null===(e=t.ocs)||void 0===e||null===(a=e.meta)||void 0===a?void 0:a.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update profile enabled state"),error:e})}},handleResponse(t){let{isProfileEnabled:e,status:a,errorMessage:n,error:i}=t;"ok"===a?(0,p.j8)("settings:profile-enabled:updated",e):ot(i,n),this.loading=!1}}},pa=(0,M.Z)(ca,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"checkbox-container"},[e("NcCheckboxRadioSwitch",{attrs:{type:"switch",checked:t.isProfileEnabled,loading:t.loading},on:{"update:checked":[function(e){t.isProfileEnabled=e},t.saveEnableProfile]}},[t._v("\n\t\t"+t._s(t.t("settings","Enable Profile"))+"\n\t")])],1)}),[],!1,null,null,null).exports,Aa={name:"ProfilePreviewCard",components:{NcAvatar:u()},props:{displayName:{type:String,required:!0},organisation:{type:String,required:!0},profileEnabled:{type:Boolean,required:!0},userId:{type:String,required:!0}},computed:{disabled(){return!this.profileEnabled},profilePageLink(){return this.profileEnabled?(0,d.generateUrl)("/u/{userId}",{userId:(0,o.ts)().uid}):null}}};var ua=n(80507),ma={};ma.styleTagTransform=R(),ma.setAttributes=k(),ma.insert=j().bind(null,"head"),ma.domAPI=P(),ma.insertStyleElement=O(),I()(ua.Z,ma),ua.Z&&ua.Z.locals&&ua.Z.locals;const ha=(0,M.Z)(Aa,(function(){var t=this,e=t._self._c;return e("a",{staticClass:"preview-card",class:{disabled:t.disabled},attrs:{href:t.profilePageLink}},[e("NcAvatar",{staticClass:"preview-card__avatar",attrs:{user:t.userId,size:48,"show-user-status":!0,"show-user-status-compact":!1,"disable-menu":!0,"disable-tooltip":!0}}),t._v(" "),e("div",{staticClass:"preview-card__header"},[e("span",[t._v(t._s(t.displayName))])]),t._v(" "),e("div",{staticClass:"preview-card__footer"},[e("span",[t._v(t._s(t.organisation))])])],1)}),[],!1,null,"61586aa5",null).exports,{organisation:{value:ga},displayName:{value:va},profileEnabled:fa,userId:Ca}=(0,s.j)("settings","personalInfoParameters",{}),ya={name:"ProfileSection",components:{EditProfileAnchorLink:la,HeaderBar:gt,ProfileCheckbox:pa,ProfilePreviewCard:ha},data:()=>({propertyReadable:z.PROFILE_ENABLED,organisation:ga,displayName:va,profileEnabled:fa,userId:Ca}),mounted(){(0,p.Ld)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,p.Ld)("settings:organisation:updated",this.handleOrganisationUpdate)},beforeDestroy(){(0,p.r1)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,p.r1)("settings:organisation:updated",this.handleOrganisationUpdate)},methods:{handleDisplayNameUpdate(t){this.displayName=t},handleOrganisationUpdate(t){this.organisation=t}}},ba=ya;var xa=n(90552),Ea={};Ea.styleTagTransform=R(),Ea.setAttributes=k(),Ea.insert=j().bind(null,"head"),Ea.domAPI=P(),Ea.insertStyleElement=O(),I()(xa.Z,Ea),xa.Z&&xa.Z.locals&&xa.Z.locals;const _a=(0,M.Z)(ba,(function(){var t=this,e=t._self._c;return e("section",[e("HeaderBar",{attrs:{readable:t.propertyReadable}}),t._v(" "),e("ProfileCheckbox",{attrs:{"profile-enabled":t.profileEnabled},on:{"update:profileEnabled":function(e){t.profileEnabled=e},"update:profile-enabled":function(e){t.profileEnabled=e}}}),t._v(" "),e("ProfilePreviewCard",{attrs:{organisation:t.organisation,"display-name":t.displayName,"profile-enabled":t.profileEnabled,"user-id":t.userId}}),t._v(" "),e("EditProfileAnchorLink",{attrs:{"profile-enabled":t.profileEnabled}})],1)}),[],!1,null,"cf64d964",null).exports,{organisation:wa}=(0,s.j)("settings","personalInfoParameters",{}),Ia={name:"OrganisationSection",components:{AccountPropertySection:qt},data:()=>({organisation:{...wa,readable:V[wa.name]}})},Sa=(0,M.Z)(Ia,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your organisation")}},"AccountPropertySection",t.organisation,!1,!0))}),[],!1,null,null,null).exports,{role:Pa}=(0,s.j)("settings","personalInfoParameters",{}),La={name:"RoleSection",components:{AccountPropertySection:qt},data:()=>({role:{...Pa,readable:V[Pa.name]}})},ja=(0,M.Z)(La,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your role")}},"AccountPropertySection",t.role,!1,!0))}),[],!1,null,null,null).exports,{headline:Ba}=(0,s.j)("settings","personalInfoParameters",{}),ka={name:"HeadlineSection",components:{AccountPropertySection:qt},data:()=>({headline:{...Ba,readable:V[Ba.name]}})},Da=(0,M.Z)(ka,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your headline")}},"AccountPropertySection",t.headline,!1,!0))}),[],!1,null,null,null).exports,{biography:Oa}=(0,s.j)("settings","personalInfoParameters",{}),Na={name:"BiographySection",components:{AccountPropertySection:qt},data:()=>({biography:{...Oa,readable:V[Oa.name]}})},Ra=(0,M.Z)(Na,(function(){var t=this;return(0,t._self._c)("AccountPropertySection",t._b({attrs:{placeholder:t.t("settings","Your biography"),"multi-line":!0}},"AccountPropertySection",t.biography,!1,!0))}),[],!1,null,null,null).exports;var Ta=n(36456),Za=n.n(Ta);const Ma=Object.freeze({SHOW:"show",SHOW_USERS_ONLY:"show_users_only",HIDE:"hide"}),Ua=Object.freeze({[Ma.SHOW]:{name:Ma.SHOW,label:t("settings","Show to everyone")},[Ma.SHOW_USERS_ONLY]:{name:Ma.SHOW_USERS_ONLY,label:t("settings","Show to logged in users only")},[Ma.HIDE]:{name:Ma.HIDE,label:t("settings","Hide")}}),{profileEnabled:Fa}=(0,s.j)("settings","personalInfoParameters",!1),za={name:"VisibilityDropdown",components:{NcSelect:Za()},props:{paramId:{type:String,required:!0},displayId:{type:String,required:!0},visibility:{type:String,required:!0}},data(){return{initialVisibility:this.visibility,profileEnabled:Fa}},computed:{disabled(){return!this.profileEnabled},inputId(){return"profile-visibility-".concat(this.paramId)},visibilityObject(){return Ua[this.visibility]},visibilityOptions:()=>Object.values(Ua)},mounted(){(0,p.Ld)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate)},beforeDestroy(){(0,p.r1)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate)},methods:{async onVisibilityChange(t){if(null!==t){const{name:e}=t;this.$emit("update:visibility",e),""!==e&&await this.updateVisibility(e)}},async updateVisibility(e){try{var a,n;const t=await(async(t,e)=>{const a=(0,o.ts)().uid,n=(0,d.generateOcsUrl)("/profile/{userId}",{userId:a});return await(0,at.confirmPassword)(),(await l.default.put(n,{paramId:t,visibility:e})).data})(this.paramId,e);this.handleResponse({visibility:e,status:null===(a=t.ocs)||void 0===a||null===(n=a.meta)||void 0===n?void 0:n.status})}catch(e){this.handleResponse({errorMessage:t("settings","Unable to update visibility of {displayId}",{displayId:this.displayId}),error:e})}},handleResponse(t){let{visibility:e,status:a,errorMessage:n,error:i}=t;"ok"===a?this.initialVisibility=e:ot(i,n)},handleProfileEnabledUpdate(t){this.profileEnabled=t}}},Va=za;var Ha=n(63019),Ga={};Ga.styleTagTransform=R(),Ga.setAttributes=k(),Ga.insert=j().bind(null,"head"),Ga.domAPI=P(),Ga.insertStyleElement=O(),I()(Ha.Z,Ga),Ha.Z&&Ha.Z.locals&&Ha.Z.locals;const qa=(0,M.Z)(Va,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"visibility-container",class:{disabled:t.disabled}},[e("label",{attrs:{for:t.inputId}},[t._v("\n\t\t"+t._s(t.displayId)+"\n\t")]),t._v(" "),e("NcSelect",{staticClass:"visibility-container__select",attrs:{"input-id":t.inputId,clearable:!1,options:t.visibilityOptions,value:t.visibilityObject},on:{"option:selected":t.onVisibilityChange}})],1)}),[],!1,null,"b13d20da",null).exports,{profileConfig:Ya}=(0,s.j)("settings","profileParameters",{}),{profileEnabled:$a}=(0,s.j)("settings","personalInfoParameters",!1),Wa=(t,e)=>t.appId===e.appId||"core"!==t.appId&&"core"!==e.appId?t.displayId.localeCompare(e.displayId):"core"===t.appId?1:-1,Ka={name:"ProfileVisibilitySection",components:{HeaderBar:gt,VisibilityDropdown:qa},data:()=>({heading:H.PROFILE_VISIBILITY,profileEnabled:$a,visibilityParams:Object.entries(Ya).map((t=>{let[e,{appId:a,displayId:n,visibility:i}]=t;return{id:e,appId:a,displayId:n,visibility:i}})).sort(Wa),marginLeft:window.matchMedia("(min-width: 1600px)").matches?window.getComputedStyle(document.getElementById("vue-avatar-section")).getPropertyValue("width").trim():"0px"}),computed:{disabled(){return!this.profileEnabled},rows(){return Math.ceil(this.visibilityParams.length/2)}},mounted(){(0,p.Ld)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),window.onresize=()=>{this.marginLeft=window.matchMedia("(min-width: 1600px)").matches?window.getComputedStyle(document.getElementById("vue-avatar-section")).getPropertyValue("width").trim():"0px"}},beforeDestroy(){(0,p.r1)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate)},methods:{handleProfileEnabledUpdate(t){this.profileEnabled=t}}},Qa=Ka;var Ja=n(45386),Xa={};Xa.styleTagTransform=R(),Xa.setAttributes=k(),Xa.insert=j().bind(null,"head"),Xa.domAPI=P(),Xa.insertStyleElement=O(),I()(Ja.Z,Xa),Ja.Z&&Ja.Z.locals&&Ja.Z.locals;const tn=(0,M.Z)(Qa,(function(){var t=this,e=t._self._c;return e("section",{style:{marginLeft:t.marginLeft},attrs:{id:"profile-visibility"}},[e("HeaderBar",{attrs:{"is-heading":!0,readable:t.heading}}),t._v(" "),e("em",{class:{disabled:t.disabled}},[t._v("\n\t\t"+t._s(t.t("settings",'The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to "Show to everyone" and scope is set to "Private", "Private" is respected.'))+"\n\t")]),t._v(" "),e("div",{staticClass:"visibility-dropdowns",style:{gridTemplateRows:"repeat(".concat(t.rows,", 44px)")}},t._l(t.visibilityParams,(function(a){return e("VisibilityDropdown",{key:a.id,attrs:{"param-id":a.id,"display-id":a.displayId,visibility:a.visibility},on:{"update:visibility":function(e){return t.$set(a,"visibility",e)}}})})),1)],1)}),[],!1,null,"a07dbf96",null).exports;n.nc=btoa((0,o.IH)());const en=(0,s.j)("settings","profileEnabledGlobally",!0);i.default.mixin({methods:{t:r.Iu}});const an=i.default.extend(_t),nn=i.default.extend(Tt),on=i.default.extend(Kt),sn=i.default.extend(he),rn=i.default.extend(ye),ln=i.default.extend(Ee),dn=i.default.extend(Ie),cn=i.default.extend(Le),pn=i.default.extend(ke),An=i.default.extend(Ve),un=i.default.extend(aa);if((new an).$mount("#vue-avatar-section"),(new nn).$mount("#vue-details-section"),(new on).$mount("#vue-displayname-section"),(new sn).$mount("#vue-email-section"),(new rn).$mount("#vue-phone-section"),(new ln).$mount("#vue-location-section"),(new dn).$mount("#vue-website-section"),(new cn).$mount("#vue-twitter-section"),(new pn).$mount("#vue-fediverse-section"),(new An).$mount("#vue-language-section"),(new un).$mount("#vue-locale-section"),en){const t=i.default.extend(_a),e=i.default.extend(Sa),a=i.default.extend(ja),n=i.default.extend(Da),o=i.default.extend(Ra),s=i.default.extend(tn);(new t).$mount("#vue-profile-section"),(new e).$mount("#vue-organisation-section"),(new a).$mount("#vue-role-section"),(new n).$mount("#vue-headline-section"),(new o).$mount("#vue-biography-section"),(new s).$mount("#vue-profile-visibility-section")}},31246:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-022fd5d4]{grid-row:1/3}.avatar__container[data-v-022fd5d4]{margin:0 auto;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:16px 0;width:300px}.avatar__container span[data-v-022fd5d4]{color:var(--color-text-lighter)}.avatar__preview[data-v-022fd5d4]{display:flex;justify-content:center;align-items:center;width:180px;height:180px}.avatar__buttons[data-v-022fd5d4]{display:flex;gap:0 10px}.avatar__cropper[data-v-022fd5d4]{width:300px;height:300px;overflow:hidden}.avatar__cropper-buttons[data-v-022fd5d4]{width:100%;display:flex;justify-content:space-between}.avatar__cropper[data-v-022fd5d4] .cropper-view-box{border-radius:50%}input[type=file][data-v-022fd5d4]{display:none}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/AvatarSection.vue"],names:[],mappings:"AACA,yBACC,YAAA,CAGA,oCACC,aAAA,CACA,YAAA,CACA,qBAAA,CACA,sBAAA,CACA,kBAAA,CACA,UAAA,CACA,WAAA,CAEA,yCACC,+BAAA,CAIF,kCACC,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,WAAA,CACA,YAAA,CAGD,kCACC,YAAA,CACA,UAAA,CAGD,kCACC,WAAA,CACA,YAAA,CACA,eAAA,CAEA,0CACC,UAAA,CACA,YAAA,CACA,6BAAA,CAGD,oDACC,iBAAA,CAKH,kCACC,YAAA",sourcesContent:['\nsection {\n\tgrid-row: 1/3;\n}\n.avatar {\n\t&__container {\n\t\tmargin: 0 auto;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tgap: 16px 0;\n\t\twidth: 300px;\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\twidth: 180px;\n\t\theight: 180px;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tgap: 0 10px;\n\t}\n\n\t&__cropper {\n\t\twidth: 300px;\n\t\theight: 300px;\n\t\toverflow: hidden;\n\n\t\t&-buttons {\n\t\t\twidth: 100%;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t}\n\n\t\t&::v-deep .cropper-view-box {\n\t\t\tborder-radius: 50%;\n\t\t}\n\t}\n}\n\ninput[type="file"] {\n\tdisplay: none;\n}\n'],sourceRoot:""}]);const r=s},18118:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".details[data-v-1ab46e68]{display:flex;flex-direction:column;margin:10px 32px 10px 0;gap:16px 0;color:var(--color-text-lighter)}.details__groups[data-v-1ab46e68],.details__quota[data-v-1ab46e68]{display:flex;gap:0 10px}.details__groups-info[data-v-1ab46e68],.details__quota-info[data-v-1ab46e68]{display:flex;flex-direction:column;width:100%;gap:4px 0}.details__groups-list[data-v-1ab46e68],.details__quota-list[data-v-1ab46e68]{font-weight:bold}.details__groups[data-v-1ab46e68] .material-design-icon,.details__quota[data-v-1ab46e68] .material-design-icon{align-self:flex-start;margin-top:2px}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/DetailsSection.vue"],names:[],mappings:"AACA,0BACC,YAAA,CACA,qBAAA,CACA,uBAAA,CACA,UAAA,CACA,+BAAA,CAEA,mEAEC,YAAA,CACA,UAAA,CAEA,6EACC,YAAA,CACA,qBAAA,CACA,UAAA,CACA,SAAA,CAGD,6EACC,gBAAA,CAGD,+GACC,qBAAA,CACA,cAAA",sourcesContent:["\n.details {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: 10px 32px 10px 0;\n\tgap: 16px 0;\n\tcolor: var(--color-text-lighter);\n\n\t&__groups,\n\t&__quota {\n\t\tdisplay: flex;\n\t\tgap: 0 10px;\n\n\t\t&-info {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\twidth: 100%;\n\t\t\tgap: 4px 0;\n\t\t}\n\n\t\t&-list {\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\t&::v-deep .material-design-icon {\n\t\t\talign-self: flex-start;\n\t\t\tmargin-top: 2px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=s},11121:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".email[data-v-5ff85d38]{display:grid;align-items:center}.email input[data-v-5ff85d38]{grid-area:1/1;width:100%}.email .email__actions-container[data-v-5ff85d38]{grid-area:1/1;justify-self:flex-end;height:30px;display:flex;gap:0 2px;margin-right:5px}.email .email__actions-container .email__actions[data-v-5ff85d38]{opacity:.4 !important}.email .email__actions-container .email__actions[data-v-5ff85d38]:hover,.email .email__actions-container .email__actions[data-v-5ff85d38]:focus,.email .email__actions-container .email__actions[data-v-5ff85d38]:active{opacity:.8 !important}.email .email__actions-container .email__actions[data-v-5ff85d38] button{height:30px !important;min-height:30px !important;width:30px !important;min-width:30px !important}.email__helper-text-message[data-v-5ff85d38]{padding:4px 0;display:flex;align-items:center}.email__helper-text-message__icon[data-v-5ff85d38]{margin-right:8px;align-self:start;margin-top:4px}.email__helper-text-message--error[data-v-5ff85d38]{color:var(--color-error)}.fade-enter[data-v-5ff85d38],.fade-leave-to[data-v-5ff85d38]{opacity:0}.fade-enter-active[data-v-5ff85d38]{transition:opacity 200ms ease-out}.fade-leave-active[data-v-5ff85d38]{transition:opacity 300ms ease-out}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/EmailSection/Email.vue"],names:[],mappings:"AACA,wBACC,YAAA,CACA,kBAAA,CAEA,8BACC,aAAA,CACA,UAAA,CAGD,kDACC,aAAA,CACA,qBAAA,CACA,WAAA,CAEA,YAAA,CACA,SAAA,CACA,gBAAA,CAEA,kEACC,qBAAA,CAEA,yNAGC,qBAAA,CAGD,yEACC,sBAAA,CACA,0BAAA,CACA,qBAAA,CACA,yBAAA,CAKH,6CACC,aAAA,CACA,YAAA,CACA,kBAAA,CAEA,mDACC,gBAAA,CACA,gBAAA,CACA,cAAA,CAGD,oDACC,wBAAA,CAKH,6DAEC,SAAA,CAGD,oCACC,iCAAA,CAGD,oCACC,iCAAA",sourcesContent:["\n.email {\n\tdisplay: grid;\n\talign-items: center;\n\n\tinput {\n\t\tgrid-area: 1 / 1;\n\t\twidth: 100%;\n\t}\n\n\t.email__actions-container {\n\t\tgrid-area: 1 / 1;\n\t\tjustify-self: flex-end;\n\t\theight: 30px;\n\n\t\tdisplay: flex;\n\t\tgap: 0 2px;\n\t\tmargin-right: 5px;\n\n\t\t.email__actions {\n\t\t\topacity: 0.4 !important;\n\n\t\t\t&:hover,\n\t\t\t&:focus,\n\t\t\t&:active {\n\t\t\t\topacity: 0.8 !important;\n\t\t\t}\n\n\t\t\t&::v-deep button {\n\t\t\t\theight: 30px !important;\n\t\t\t\tmin-height: 30px !important;\n\t\t\t\twidth: 30px !important;\n\t\t\t\tmin-width: 30px !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__helper-text-message {\n\t\tpadding: 4px 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t&__icon {\n\t\t\tmargin-right: 8px;\n\t\t\talign-self: start;\n\t\t\tmargin-top: 4px;\n\t\t}\n\n\t\t&--error {\n\t\t\tcolor: var(--color-error);\n\t\t}\n\t}\n}\n\n.fade-enter,\n.fade-leave-to {\n\topacity: 0;\n}\n\n.fade-enter-active {\n\ttransition: opacity 200ms ease-out;\n}\n\n.fade-leave-active {\n\ttransition: opacity 300ms ease-out;\n}\n"],sourceRoot:""}]);const r=s},73070:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-46c7eb7e]{padding:10px 10px}section[data-v-46c7eb7e] button:disabled{cursor:default}section .additional-emails-label[data-v-46c7eb7e]{display:block;margin-top:16px}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue"],names:[],mappings:"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA,CAGD,kDACC,aAAA,CACA,eAAA",sourcesContent:["\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n\n\t.additional-emails-label {\n\t\tdisplay: block;\n\t\tmargin-top: 16px;\n\t}\n}\n"],sourceRoot:""}]);const r=s},42569:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".language[data-v-5c847b3a]{display:grid}.language select[data-v-5c847b3a]{width:100%}.language a[data-v-5c847b3a]{color:var(--color-main-text);text-decoration:none;width:max-content}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue"],names:[],mappings:"AACA,2BACC,YAAA,CAEA,kCACC,UAAA,CAGD,6BACC,4BAAA,CACA,oBAAA,CACA,iBAAA",sourcesContent:["\n.language {\n\tdisplay: grid;\n\n\tselect {\n\t\twidth: 100%;\n\t}\n\n\ta {\n\t\tcolor: var(--color-main-text);\n\t\ttext-decoration: none;\n\t\twidth: max-content;\n\t}\n}\n"],sourceRoot:""}]);const r=s},12531:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-92685b76]{padding:10px 10px}section[data-v-92685b76] button:disabled{cursor:default}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue"],names:[],mappings:"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA",sourcesContent:["\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n}\n"],sourceRoot:""}]);const r=s},87229:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".locale[data-v-1ac456dc]{display:grid}.locale select[data-v-1ac456dc]{width:100%}.example[data-v-1ac456dc]{margin:10px 0;display:flex;gap:0 10px;color:var(--color-text-lighter)}.example[data-v-1ac456dc] .material-design-icon{align-self:flex-start;margin-top:2px}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue"],names:[],mappings:"AACA,yBACC,YAAA,CAEA,gCACC,UAAA,CAIF,0BACC,aAAA,CACA,YAAA,CACA,UAAA,CACA,+BAAA,CAEA,gDACC,qBAAA,CACA,cAAA",sourcesContent:["\n.locale {\n\tdisplay: grid;\n\n\tselect {\n\t\twidth: 100%;\n\t}\n}\n\n.example {\n\tmargin: 10px 0;\n\tdisplay: flex;\n\tgap: 0 10px;\n\tcolor: var(--color-text-lighter);\n\n\t&::v-deep .material-design-icon {\n\t\talign-self: flex-start;\n\t\tmargin-top: 2px;\n\t}\n}\n"],sourceRoot:""}]);const r=s},682:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-84fca724]{padding:10px 10px}section[data-v-84fca724] button:disabled{cursor:default}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue"],names:[],mappings:"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA",sourcesContent:["\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n}\n"],sourceRoot:""}]);const r=s},64534:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"html{scroll-behavior:smooth}@media screen and (prefers-reduced-motion: reduce){html{scroll-behavior:auto}}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue"],names:[],mappings:"AACA,KACC,sBAAA,CAEA,mDAHD,KAIE,oBAAA,CAAA",sourcesContent:["\nhtml {\n\tscroll-behavior: smooth;\n\n\t@media screen and (prefers-reduced-motion: reduce) {\n\t\tscroll-behavior: auto;\n\t}\n}\n"],sourceRoot:""}]);const r=s},40001:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"a[data-v-1caba458]{display:block;height:44px;width:290px;line-height:44px;padding:0 16px;margin:14px auto;border-radius:var(--border-radius-pill);opacity:.4;background-color:rgba(0,0,0,0)}a .anchor-icon[data-v-1caba458]{display:inline-block;vertical-align:middle;margin-top:6px;margin-right:8px}a[data-v-1caba458]:hover,a[data-v-1caba458]:focus,a[data-v-1caba458]:active{opacity:.8;background-color:rgba(127,127,127,.25)}a.disabled[data-v-1caba458]{pointer-events:none}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue"],names:[],mappings:"AACA,mBACC,aAAA,CACA,WAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,uCAAA,CACA,UAAA,CACA,8BAAA,CAEA,gCACC,oBAAA,CACA,qBAAA,CACA,cAAA,CACA,gBAAA,CAGD,4EAGC,UAAA,CACA,sCAAA,CAGD,4BACC,mBAAA",sourcesContent:["\na {\n\tdisplay: block;\n\theight: 44px;\n\twidth: 290px;\n\tline-height: 44px;\n\tpadding: 0 16px;\n\tmargin: 14px auto;\n\tborder-radius: var(--border-radius-pill);\n\topacity: 0.4;\n\tbackground-color: transparent;\n\n\t.anchor-icon {\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t\tmargin-top: 6px;\n\t\tmargin-right: 8px;\n\t}\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\topacity: 0.8;\n\t\tbackground-color: rgba(127, 127, 127, .25);\n\t}\n\n\t&.disabled {\n\t\tpointer-events: none;\n\t}\n}\n"],sourceRoot:""}]);const r=s},80507:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".preview-card[data-v-61586aa5]{display:flex;flex-direction:column;position:relative;width:290px;height:116px;margin:14px auto;border-radius:var(--border-radius-large);background-color:var(--color-main-background);font-weight:bold;box-shadow:0 2px 9px var(--color-box-shadow)}.preview-card[data-v-61586aa5]:hover,.preview-card[data-v-61586aa5]:focus,.preview-card[data-v-61586aa5]:active{box-shadow:0 2px 12px var(--color-box-shadow)}.preview-card[data-v-61586aa5]:focus-visible{outline:var(--color-main-text) solid 1px;outline-offset:3px}.preview-card.disabled[data-v-61586aa5]{filter:grayscale(1);opacity:.5;cursor:default;box-shadow:0 0 3px var(--color-box-shadow)}.preview-card.disabled *[data-v-61586aa5],.preview-card.disabled[data-v-61586aa5] *{cursor:default}.preview-card__avatar[data-v-61586aa5]{position:absolute !important;top:40px;left:18px;z-index:1}.preview-card__avatar[data-v-61586aa5]:not(.avatardiv--unknown){box-shadow:0 0 0 3px var(--color-main-background) !important}.preview-card__header[data-v-61586aa5],.preview-card__footer[data-v-61586aa5]{position:relative;width:auto}.preview-card__header span[data-v-61586aa5],.preview-card__footer span[data-v-61586aa5]{position:absolute;left:78px;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere}@supports(-webkit-line-clamp: 2){.preview-card__header span[data-v-61586aa5],.preview-card__footer span[data-v-61586aa5]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.preview-card__header[data-v-61586aa5]{height:70px;border-radius:var(--border-radius-large) var(--border-radius-large) 0 0;background-color:var(--color-primary);background-image:var(--gradient-primary-background)}.preview-card__header span[data-v-61586aa5]{bottom:0;color:var(--color-primary-text);font-size:18px;font-weight:bold;margin:0 4px 8px 0}.preview-card__footer[data-v-61586aa5]{height:46px}.preview-card__footer span[data-v-61586aa5]{top:0;color:var(--color-text-maxcontrast);font-size:14px;font-weight:normal;margin:4px 4px 0 0;line-height:1.3}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue"],names:[],mappings:"AACA,+BACC,YAAA,CACA,qBAAA,CACA,iBAAA,CACA,WAAA,CACA,YAAA,CACA,gBAAA,CACA,wCAAA,CACA,6CAAA,CACA,gBAAA,CACA,4CAAA,CAEA,gHAGC,6CAAA,CAGD,6CACC,wCAAA,CACA,kBAAA,CAGD,wCACC,mBAAA,CACA,UAAA,CACA,cAAA,CACA,0CAAA,CAEA,oFAEC,cAAA,CAIF,uCAEC,4BAAA,CACA,QAAA,CACA,SAAA,CACA,SAAA,CAEA,gEACC,4DAAA,CAIF,8EAEC,iBAAA,CACA,UAAA,CAEA,wFACC,iBAAA,CACA,SAAA,CACA,eAAA,CACA,sBAAA,CACA,sBAAA,CAEA,iCAPD,wFAQE,mBAAA,CACA,oBAAA,CACA,2BAAA,CAAA,CAKH,uCACC,WAAA,CACA,uEAAA,CACA,qCAAA,CACA,mDAAA,CAEA,4CACC,QAAA,CACA,+BAAA,CACA,cAAA,CACA,gBAAA,CACA,kBAAA,CAIF,uCACC,WAAA,CAEA,4CACC,KAAA,CACA,mCAAA,CACA,cAAA,CACA,kBAAA,CACA,kBAAA,CACA,eAAA",sourcesContent:["\n.preview-card {\n\tdisplay: flex;\n\tflex-direction: column;\n\tposition: relative;\n\twidth: 290px;\n\theight: 116px;\n\tmargin: 14px auto;\n\tborder-radius: var(--border-radius-large);\n\tbackground-color: var(--color-main-background);\n\tfont-weight: bold;\n\tbox-shadow: 0 2px 9px var(--color-box-shadow);\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbox-shadow: 0 2px 12px var(--color-box-shadow);\n\t}\n\n\t&:focus-visible {\n\t\toutline: var(--color-main-text) solid 1px;\n\t\toutline-offset: 3px;\n\t}\n\n\t&.disabled {\n\t\tfilter: grayscale(1);\n\t\topacity: 0.5;\n\t\tcursor: default;\n\t\tbox-shadow: 0 0 3px var(--color-box-shadow);\n\n\t\t& *,\n\t\t&::v-deep * {\n\t\t\tcursor: default;\n\t\t}\n\t}\n\n\t&__avatar {\n\t\t// Override Avatar component position to fix positioning on rerender\n\t\tposition: absolute !important;\n\t\ttop: 40px;\n\t\tleft: 18px;\n\t\tz-index: 1;\n\n\t\t&:not(.avatardiv--unknown) {\n\t\t\tbox-shadow: 0 0 0 3px var(--color-main-background) !important;\n\t\t}\n\t}\n\n\t&__header,\n\t&__footer {\n\t\tposition: relative;\n\t\twidth: auto;\n\n\t\tspan {\n\t\t\tposition: absolute;\n\t\t\tleft: 78px;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow-wrap: anywhere;\n\n\t\t\t@supports (-webkit-line-clamp: 2) {\n\t\t\t\tdisplay: -webkit-box;\n\t\t\t\t-webkit-line-clamp: 2;\n\t\t\t\t-webkit-box-orient: vertical;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__header {\n\t\theight: 70px;\n\t\tborder-radius: var(--border-radius-large) var(--border-radius-large) 0 0;\n\t\tbackground-color: var(--color-primary);\n\t\tbackground-image: var(--gradient-primary-background);\n\n\t\tspan {\n\t\t\tbottom: 0;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tfont-size: 18px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: 0 4px 8px 0;\n\t\t}\n\t}\n\n\t&__footer {\n\t\theight: 46px;\n\n\t\tspan {\n\t\t\ttop: 0;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tmargin: 4px 4px 0 0;\n\t\t\tline-height: 1.3;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=s},90552:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-cf64d964]{padding:10px 10px}section[data-v-cf64d964] button:disabled{cursor:default}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue"],names:[],mappings:"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA",sourcesContent:["\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n}\n"],sourceRoot:""}]);const r=s},45386:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-a07dbf96]{padding:30px;max-width:900px;width:100%}section em[data-v-a07dbf96]{display:block;margin:16px 0}section em.disabled[data-v-a07dbf96]{filter:grayscale(1);opacity:.5;cursor:default;pointer-events:none}section em.disabled *[data-v-a07dbf96],section em.disabled[data-v-a07dbf96] *{cursor:default;pointer-events:none}section .visibility-dropdowns[data-v-a07dbf96]{display:grid;gap:10px 40px}@media(min-width: 1200px){section[data-v-a07dbf96]{width:940px}section .visibility-dropdowns[data-v-a07dbf96]{grid-auto-flow:column}}@media(max-width: 1200px){section[data-v-a07dbf96]{width:470px}}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue"],names:[],mappings:"AACA,yBACC,YAAA,CACA,eAAA,CACA,UAAA,CAEA,4BACC,aAAA,CACA,aAAA,CAEA,qCACC,mBAAA,CACA,UAAA,CACA,cAAA,CACA,mBAAA,CAEA,8EAEC,cAAA,CACA,mBAAA,CAKH,+CACC,YAAA,CACA,aAAA,CAGD,0BA5BD,yBA6BE,WAAA,CAEA,+CACC,qBAAA,CAAA,CAIF,0BApCD,yBAqCE,WAAA,CAAA",sourcesContent:["\nsection {\n\tpadding: 30px;\n\tmax-width: 900px;\n\twidth: 100%;\n\n\tem {\n\t\tdisplay: block;\n\t\tmargin: 16px 0;\n\n\t\t&.disabled {\n\t\t\tfilter: grayscale(1);\n\t\t\topacity: 0.5;\n\t\t\tcursor: default;\n\t\t\tpointer-events: none;\n\n\t\t\t& *,\n\t\t\t&::v-deep * {\n\t\t\t\tcursor: default;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t.visibility-dropdowns {\n\t\tdisplay: grid;\n\t\tgap: 10px 40px;\n\t}\n\n\t@media (min-width: 1200px) {\n\t\twidth: 940px;\n\n\t\t.visibility-dropdowns {\n\t\t\tgrid-auto-flow: column;\n\t\t}\n\t}\n\n\t@media (max-width: 1200px) {\n\t\twidth: 470px;\n\t}\n}\n"],sourceRoot:""}]);const r=s},63019:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".visibility-container[data-v-b13d20da]{display:flex;width:max-content}.visibility-container.disabled[data-v-b13d20da]{filter:grayscale(1);opacity:.5;cursor:default;pointer-events:none}.visibility-container.disabled *[data-v-b13d20da],.visibility-container.disabled[data-v-b13d20da] *{cursor:default;pointer-events:none}.visibility-container label[data-v-b13d20da]{color:var(--color-text-lighter);width:150px;line-height:50px}.visibility-container__select[data-v-b13d20da]{width:270px;max-width:40vw}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue"],names:[],mappings:"AACA,uCACC,YAAA,CACA,iBAAA,CAEA,gDACC,mBAAA,CACA,UAAA,CACA,cAAA,CACA,mBAAA,CAEA,oGAEC,cAAA,CACA,mBAAA,CAIF,6CACC,+BAAA,CACA,WAAA,CACA,gBAAA,CAGD,+CACC,WAAA,CACA,cAAA",sourcesContent:["\n.visibility-container {\n\tdisplay: flex;\n\twidth: max-content;\n\n\t&.disabled {\n\t\tfilter: grayscale(1);\n\t\topacity: 0.5;\n\t\tcursor: default;\n\t\tpointer-events: none;\n\n\t\t& *,\n\t\t&::v-deep * {\n\t\t\tcursor: default;\n\t\t\tpointer-events: none;\n\t\t}\n\t}\n\n\tlabel {\n\t\tcolor: var(--color-text-lighter);\n\t\twidth: 150px;\n\t\tline-height: 50px;\n\t}\n\n\t&__select {\n\t\twidth: 270px;\n\t\tmax-width: 40vw;\n\t}\n}\n"],sourceRoot:""}]);const r=s},78784:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,"section[data-v-6eb7d8e0]{padding:10px 10px}section[data-v-6eb7d8e0] button:disabled{cursor:default}section .property[data-v-6eb7d8e0]{display:grid;align-items:center}section .property textarea[data-v-6eb7d8e0]{resize:vertical;grid-area:1/1;width:100%}section .property input[data-v-6eb7d8e0]{grid-area:1/1;width:100%}section .property .property__actions-container[data-v-6eb7d8e0]{grid-area:1/1;justify-self:flex-end;align-self:flex-end;height:30px;display:flex;gap:0 2px;margin-right:5px;margin-bottom:5px}section .property__helper-text-message[data-v-6eb7d8e0]{padding:4px 0;display:flex;align-items:center}section .property__helper-text-message__icon[data-v-6eb7d8e0]{margin-right:8px;align-self:start;margin-top:4px}section .property__helper-text-message--error[data-v-6eb7d8e0]{color:var(--color-error)}section .fade-enter[data-v-6eb7d8e0],section .fade-leave-to[data-v-6eb7d8e0]{opacity:0}section .fade-enter-active[data-v-6eb7d8e0]{transition:opacity 200ms ease-out}section .fade-leave-active[data-v-6eb7d8e0]{transition:opacity 300ms ease-out}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue"],names:[],mappings:"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA,CAGD,mCACC,YAAA,CACA,kBAAA,CAEA,4CACC,eAAA,CACA,aAAA,CACA,UAAA,CAGD,yCACC,aAAA,CACA,UAAA,CAGD,gEACC,aAAA,CACA,qBAAA,CACA,mBAAA,CACA,WAAA,CAEA,YAAA,CACA,SAAA,CACA,gBAAA,CACA,iBAAA,CAIF,wDACC,aAAA,CACA,YAAA,CACA,kBAAA,CAEA,8DACC,gBAAA,CACA,gBAAA,CACA,cAAA,CAGD,+DACC,wBAAA,CAIF,6EAEC,SAAA,CAGD,4CACC,iCAAA,CAGD,4CACC,iCAAA",sourcesContent:["\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n\n\t.property {\n\t\tdisplay: grid;\n\t\talign-items: center;\n\n\t\ttextarea {\n\t\t\tresize: vertical;\n\t\t\tgrid-area: 1 / 1;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tinput {\n\t\t\tgrid-area: 1 / 1;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.property__actions-container {\n\t\t\tgrid-area: 1 / 1;\n\t\t\tjustify-self: flex-end;\n\t\t\talign-self: flex-end;\n\t\t\theight: 30px;\n\n\t\t\tdisplay: flex;\n\t\t\tgap: 0 2px;\n\t\t\tmargin-right: 5px;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\t}\n\n\t.property__helper-text-message {\n\t\tpadding: 4px 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t&__icon {\n\t\t\tmargin-right: 8px;\n\t\t\talign-self: start;\n\t\t\tmargin-top: 4px;\n\t\t}\n\n\t\t&--error {\n\t\t\tcolor: var(--color-error);\n\t\t}\n\t}\n\n\t.fade-enter,\n\t.fade-leave-to {\n\t\topacity: 0;\n\t}\n\n\t.fade-enter-active {\n\t\ttransition: opacity 200ms ease-out;\n\t}\n\n\t.fade-leave-active {\n\t\ttransition: opacity 300ms ease-out;\n\t}\n}\n"],sourceRoot:""}]);const r=s},14036:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".federation-actions[data-v-4ea07669],.federation-actions--additional[data-v-4ea07669]{opacity:.4 !important}.federation-actions[data-v-4ea07669]:hover,.federation-actions[data-v-4ea07669]:focus,.federation-actions[data-v-4ea07669]:active,.federation-actions--additional[data-v-4ea07669]:hover,.federation-actions--additional[data-v-4ea07669]:focus,.federation-actions--additional[data-v-4ea07669]:active{opacity:.8 !important}.federation-actions--additional[data-v-4ea07669] button{padding-bottom:7px;height:30px !important;min-height:30px !important;width:30px !important;min-width:30px !important}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/shared/FederationControl.vue"],names:[],mappings:"AACA,sFAEC,qBAAA,CAEA,wSAGC,qBAAA,CAKD,wDAEC,kBAAA,CACA,sBAAA,CACA,0BAAA,CACA,qBAAA,CACA,yBAAA",sourcesContent:["\n.federation-actions,\n.federation-actions--additional {\n\topacity: 0.4 !important;\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\topacity: 0.8 !important;\n\t}\n}\n\n.federation-actions--additional {\n\t&::v-deep button {\n\t\t// TODO remove this hack\n\t\tpadding-bottom: 7px;\n\t\theight: 30px !important;\n\t\tmin-height: 30px !important;\n\t\twidth: 30px !important;\n\t\tmin-width: 30px !important;\n\t}\n}\n"],sourceRoot:""}]);const r=s},69205:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".federation-actions__btn[data-v-404f7a30] p{width:150px !important;padding:8px 0 !important;color:var(--color-main-text) !important;font-size:12.8px !important;line-height:1.5em !important}.federation-actions__btn--active[data-v-404f7a30]{background-color:var(--color-primary-light) !important;box-shadow:inset 2px 0 var(--color-primary) !important}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue"],names:[],mappings:"AAEC,4CACC,sBAAA,CACA,wBAAA,CACA,uCAAA,CACA,2BAAA,CACA,4BAAA,CAIF,kDACC,sDAAA,CACA,sDAAA",sourcesContent:["\n.federation-actions__btn {\n\t&::v-deep p {\n\t\twidth: 150px !important;\n\t\tpadding: 8px 0 !important;\n\t\tcolor: var(--color-main-text) !important;\n\t\tfont-size: 12.8px !important;\n\t\tline-height: 1.5em !important;\n\t}\n}\n\n.federation-actions__btn--active {\n\tbackground-color: var(--color-primary-light) !important;\n\tbox-shadow: inset 2px 0 var(--color-primary) !important;\n}\n"],sourceRoot:""}]);const r=s},90564:(t,e,a)=>{"use strict";a.d(e,{Z:()=>r});var n=a(87537),i=a.n(n),o=a(23645),s=a.n(o)()(i());s.push([t.id,".headerbar-label[data-v-b43fcc0c]{font-weight:normal;display:inline-flex;width:100%;margin:12px 0 0 0;gap:8px;align-items:center;font-size:16px;color:var(--color-text-light)}.headerbar-label.profile-property[data-v-b43fcc0c]{height:38px}.headerbar-label.setting-property[data-v-b43fcc0c]{height:44px}.headerbar-label label[data-v-b43fcc0c]{cursor:pointer}.federation-control[data-v-b43fcc0c]{margin:0}.button-vue[data-v-b43fcc0c]{margin:0 0 0 auto !important}","",{version:3,sources:["webpack://./apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue"],names:[],mappings:"AACA,kCACC,kBAAA,CACA,mBAAA,CACA,UAAA,CACA,iBAAA,CACA,OAAA,CACA,kBAAA,CACA,cAAA,CACA,6BAAA,CAEA,mDACC,WAAA,CAGD,mDACC,WAAA,CAGD,wCACC,cAAA,CAIF,qCACC,QAAA,CAGD,6BACC,4BAAA",sourcesContent:["\n.headerbar-label {\n\tfont-weight: normal;\n\tdisplay: inline-flex;\n\twidth: 100%;\n\tmargin: 12px 0 0 0;\n\tgap: 8px;\n\talign-items: center;\n\tfont-size: 16px;\n\tcolor: var(--color-text-light);\n\n\t&.profile-property {\n\t\theight: 38px;\n\t}\n\n\t&.setting-property {\n\t\theight: 44px;\n\t}\n\n\tlabel {\n\t\tcursor: pointer;\n\t}\n}\n\n.federation-control {\n\tmargin: 0;\n}\n\n.button-vue {\n\tmargin: 0 0 0 auto !important;\n}\n"],sourceRoot:""}]);const r=s},46700:(t,e,a)=>{var n={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function i(t){var e=o(t);return a(e)}function o(t){if(!a.o(n,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return n[t]}i.keys=function(){return Object.keys(n)},i.resolve=o,t.exports=i,i.id=46700},8738:t=>{"use strict";t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC"},81490:t=>{"use strict";t.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+CiAgPHBhdGggZD0iTTE0IDEyLjNMMTIuMyAxNCA4IDkuNyAzLjcgMTQgMiAxMi4zIDYuMyA4IDIgMy43IDMuNyAyIDggNi4zIDEyLjMgMiAxNCAzLjcgOS43IDh6Ii8+Cjwvc3ZnPgo="},90888:t=>{"use strict";t.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+CiAgPHBhdGggZD0iTTE0IDEyLjNMMTIuMyAxNCA4IDkuNyAzLjcgMTQgMiAxMi4zIDYuMyA4IDIgMy43IDMuNyAyIDggNi4zIDEyLjMgMiAxNCAzLjcgOS43IDh6IiBzdHlsZT0iZmlsbC1vcGFjaXR5OjE7ZmlsbDojZmZmZmZmIi8+Cjwvc3ZnPgo="}},n={};function i(t){var e=n[t];if(void 0!==e)return e.exports;var o=n[t]={id:t,loaded:!1,exports:{}};return a[t].call(o.exports,o,o.exports,i),o.loaded=!0,o.exports}i.m=a,e=[],i.O=(t,a,n,o)=>{if(!a){var s=1/0;for(c=0;c<e.length;c++){a=e[c][0],n=e[c][1],o=e[c][2];for(var r=!0,l=0;l<a.length;l++)(!1&o||s>=o)&&Object.keys(i.O).every((t=>i.O[t](a[l])))?a.splice(l--,1):(r=!1,o<s&&(s=o));if(r){e.splice(c--,1);var d=n();void 0!==d&&(t=d)}}return t}o=o||0;for(var c=e.length;c>0&&e[c-1][2]>o;c--)e[c]=e[c-1];e[c]=[a,n,o]},i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var a in e)i.o(e,a)&&!i.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),i.j=4418,(()=>{i.b=document.baseURI||self.location.href;var t={4418:0};i.O.j=e=>0===t[e];var e=(e,a)=>{var n,o,s=a[0],r=a[1],l=a[2],d=0;if(s.some((e=>0!==t[e]))){for(n in r)i.o(r,n)&&(i.m[n]=r[n]);if(l)var c=l(i)}for(e&&e(a);d<s.length;d++)o=s[d],i.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return i.O(c)},a=self.webpackChunknextcloud=self.webpackChunknextcloud||[];a.forEach(e.bind(null,0)),a.push=e.bind(null,a.push.bind(a))})(),i.nc=void 0;var o=i.O(void 0,[7874],(()=>i(71945)));o=i.O(o)})();
+//# sourceMappingURL=settings-vue-settings-personal-info.js.map?v=445880c59941764a9abd \ No newline at end of file
diff --git a/dist/settings-vue-settings-personal-info.js.map b/dist/settings-vue-settings-personal-info.js.map
index 7c5788f72de..00e0becfe30 100644
--- a/dist/settings-vue-settings-personal-info.js.map
+++ b/dist/settings-vue-settings-personal-info.js.map
@@ -1 +1 @@
-{"version":3,"file":"settings-vue-settings-personal-info.js?v=c3c6597eed6e57c37261","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue?0b38","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue?90b5","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue?02db","webpack:///nextcloud/apps/settings/src/constants/AccountPropertyConstants.js","webpack:///nextcloud/apps/settings/src/service/PersonalInfo/PersonalInfoService.js","webpack:///nextcloud/apps/settings/src/logger.js","webpack:///nextcloud/apps/settings/src/utils/handlers.js","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/FederationControl.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/FederationControl.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/FederationControl.vue?b9f2","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/FederationControl.vue?e342","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/FederationControl.vue?d068","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue?c843","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue?feed","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue?e65f","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/AvatarSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/AvatarSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/AvatarSection.vue?a960","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/AvatarSection.vue?5014","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/AvatarSection.vue?5282","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/DetailsSection.vue?08e9","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/DetailsSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/DetailsSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/DetailsSection.vue?e7aa","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/DetailsSection.vue?295f","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/DisplayNameSection.vue?3162","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue?096a","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue?ac46","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue?d38d","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/DisplayNameSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/DisplayNameSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/DisplayNameSection.vue?bde5","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue?3dd6","webpack:///nextcloud/apps/settings/src/service/PersonalInfo/EmailService.js","webpack:///nextcloud/apps/settings/src/utils/validate.js","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/EmailSection/Email.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/EmailSection/Email.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/EmailSection/Email.vue?7a13","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/EmailSection/Email.vue?bd2c","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/EmailSection/Email.vue?04df","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue?b77b","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue?1258","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/PhoneSection.vue?8b50","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/PhoneSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/PhoneSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/PhoneSection.vue?d5e3","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocationSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocationSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocationSection.vue?fdc7","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocationSection.vue?414f","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/WebsiteSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/WebsiteSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/WebsiteSection.vue?897b","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/WebsiteSection.vue?4b20","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/TwitterSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/TwitterSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/TwitterSection.vue?7e82","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/TwitterSection.vue?8ae2","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/FediverseSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/FediverseSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/FediverseSection.vue?e202","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/FediverseSection.vue?4a92","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue?22ad","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue?6358","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue?94ab","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue?6762","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue?a350","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue?41aa","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue?6463","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue?16dc","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue?9b6c","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue?8511","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue?1e8d","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue?fafb","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?f65d","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?fb42","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?7d4b","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?253f","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileCheckbox.vue?9b34","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfileCheckbox.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfileCheckbox.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileCheckbox.vue?7612","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue?2aa0","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue?240c","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue?564e","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue?accf","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue?c85f","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue?3f25","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/OrganisationSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/OrganisationSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/OrganisationSection.vue?5684","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/OrganisationSection.vue?adaf","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/RoleSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/RoleSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/RoleSection.vue?a7b4","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/RoleSection.vue?49db","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/HeadlineSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/HeadlineSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/HeadlineSection.vue?9d73","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/HeadlineSection.vue?d565","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/BiographySection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/BiographySection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/BiographySection.vue?a6b2","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/BiographySection.vue?7384","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue?d7f0","webpack:///nextcloud/apps/settings/src/service/ProfileService.js","webpack:///nextcloud/apps/settings/src/constants/ProfileConstants.js","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue?1509","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue?c222","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue?5e5d","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue?1d28","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue?7729","webpack:///nextcloud/apps/settings/src/main-personal-info.js","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/AvatarSection.vue?vue&type=style&index=0&id=022fd5d4&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/DetailsSection.vue?vue&type=style&index=0&id=1ab46e68&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/EmailSection/Email.vue?vue&type=style&index=0&id=5ff85d38&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue?vue&type=style&index=0&id=46c7eb7e&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue?vue&type=style&index=0&id=5c847b3a&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue?vue&type=style&index=0&id=92685b76&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue?vue&type=style&index=0&id=1ac456dc&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue?vue&type=style&index=0&id=84fca724&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?vue&type=style&index=0&id=1caba458&prod&lang=scss&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?vue&type=style&index=1&id=1caba458&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue?vue&type=style&index=0&id=61586aa5&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue?vue&type=style&index=0&id=cf64d964&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue?vue&type=style&index=0&id=a07dbf96&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue?vue&type=style&index=0&id=b13d20da&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue?vue&type=style&index=0&id=6eb7d8e0&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/FederationControl.vue?vue&type=style&index=0&id=4ea07669&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue?vue&type=style&index=0&id=d426ed04&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue?vue&type=style&index=0&id=b43fcc0c&prod&lang=scss&scoped=true&","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<!--\n\t- @copyright 2021 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<NcActionButton :aria-label=\"isSupportedScope ? tooltip : tooltipDisabled\"\n\t\tclass=\"federation-actions__btn\"\n\t\t:class=\"{ 'federation-actions__btn--active': activeScope === name }\"\n\t\t:close-after-click=\"true\"\n\t\t:disabled=\"!isSupportedScope\"\n\t\t:icon=\"iconClass\"\n\t\t:title=\"isSupportedScope ? tooltip : tooltipDisabled\"\n\t\t@click.stop.prevent=\"updateScope\">\n\t\t{{ isSupportedScope ? tooltip : tooltipDisabled }}\n\t</NcActionButton>\n</template>\n\n<script>\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\n\nexport default {\n\tname: 'FederationControlAction',\n\n\tcomponents: {\n\t\tNcActionButton,\n\t},\n\n\tprops: {\n\t\tactiveScope: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\thandleScopeChange: {\n\t\t\ttype: Function,\n\t\t\tdefault: () => {},\n\t\t},\n\t\ticonClass: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tisSupportedScope: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttooltipDisabled: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\ttooltip: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tmethods: {\n\t\tupdateScope() {\n\t\t\tthis.handleScopeChange(this.name)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.federation-actions__btn {\n\t\t&::v-deep p {\n\t\t\twidth: 150px !important;\n\t\t\tpadding: 8px 0 !important;\n\t\t\tcolor: var(--color-main-text) !important;\n\t\t\tfont-size: 12.8px !important;\n\t\t\tline-height: 1.5em !important;\n\t\t}\n\t}\n\n\t.federation-actions__btn--active {\n\t\tbackground-color: var(--color-primary-light) !important;\n\t\tbox-shadow: inset 2px 0 var(--color-primary) !important;\n\t}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControlAction.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControlAction.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControlAction.vue?vue&type=style&index=0&id=d426ed04&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControlAction.vue?vue&type=style&index=0&id=d426ed04&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FederationControlAction.vue?vue&type=template&id=d426ed04&scoped=true&\"\nimport script from \"./FederationControlAction.vue?vue&type=script&lang=js&\"\nexport * from \"./FederationControlAction.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FederationControlAction.vue?vue&type=style&index=0&id=d426ed04&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d426ed04\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcActionButton',{staticClass:\"federation-actions__btn\",class:{ 'federation-actions__btn--active': _vm.activeScope === _vm.name },attrs:{\"aria-label\":_vm.isSupportedScope ? _vm.tooltip : _vm.tooltipDisabled,\"close-after-click\":true,\"disabled\":!_vm.isSupportedScope,\"icon\":_vm.iconClass,\"title\":_vm.isSupportedScope ? _vm.tooltip : _vm.tooltipDisabled},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.updateScope.apply(null, arguments)}}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.isSupportedScope ? _vm.tooltip : _vm.tooltipDisabled)+\"\\n\")])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2021, Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/*\n * SYNC to be kept in sync with `lib/public/Accounts/IAccountManager.php`\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/** Enum of account properties */\nexport const ACCOUNT_PROPERTY_ENUM = Object.freeze({\n\tADDRESS: 'address',\n\tAVATAR: 'avatar',\n\tBIOGRAPHY: 'biography',\n\tDISPLAYNAME: 'displayname',\n\tEMAIL_COLLECTION: 'additional_mail',\n\tEMAIL: 'email',\n\tHEADLINE: 'headline',\n\tNOTIFICATION_EMAIL: 'notify_email',\n\tFEDIVERSE: 'fediverse',\n\tORGANISATION: 'organisation',\n\tPHONE: 'phone',\n\tPROFILE_ENABLED: 'profile_enabled',\n\tROLE: 'role',\n\tTWITTER: 'twitter',\n\tWEBSITE: 'website',\n})\n\n/** Enum of account properties to human readable account property names */\nexport const ACCOUNT_PROPERTY_READABLE_ENUM = Object.freeze({\n\tADDRESS: t('settings', 'Location'),\n\tAVATAR: t('settings', 'Profile picture'),\n\tBIOGRAPHY: t('settings', 'About'),\n\tDISPLAYNAME: t('settings', 'Full name'),\n\tEMAIL_COLLECTION: t('settings', 'Additional email'),\n\tEMAIL: t('settings', 'Email'),\n\tHEADLINE: t('settings', 'Headline'),\n\tORGANISATION: t('settings', 'Organisation'),\n\tPHONE: t('settings', 'Phone number'),\n\tPROFILE_ENABLED: t('settings', 'Profile'),\n\tROLE: t('settings', 'Role'),\n\tTWITTER: t('settings', 'Twitter'),\n\tFEDIVERSE: t('settings', 'Fediverse (e.g. Mastodon)'),\n\tWEBSITE: t('settings', 'Website'),\n})\n\nexport const NAME_READABLE_ENUM = Object.freeze({\n\t[ACCOUNT_PROPERTY_ENUM.ADDRESS]: ACCOUNT_PROPERTY_READABLE_ENUM.ADDRESS,\n\t[ACCOUNT_PROPERTY_ENUM.AVATAR]: ACCOUNT_PROPERTY_READABLE_ENUM.AVATAR,\n\t[ACCOUNT_PROPERTY_ENUM.BIOGRAPHY]: ACCOUNT_PROPERTY_READABLE_ENUM.BIOGRAPHY,\n\t[ACCOUNT_PROPERTY_ENUM.DISPLAYNAME]: ACCOUNT_PROPERTY_READABLE_ENUM.DISPLAYNAME,\n\t[ACCOUNT_PROPERTY_ENUM.EMAIL_COLLECTION]: ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL_COLLECTION,\n\t[ACCOUNT_PROPERTY_ENUM.EMAIL]: ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL,\n\t[ACCOUNT_PROPERTY_ENUM.HEADLINE]: ACCOUNT_PROPERTY_READABLE_ENUM.HEADLINE,\n\t[ACCOUNT_PROPERTY_ENUM.ORGANISATION]: ACCOUNT_PROPERTY_READABLE_ENUM.ORGANISATION,\n\t[ACCOUNT_PROPERTY_ENUM.PHONE]: ACCOUNT_PROPERTY_READABLE_ENUM.PHONE,\n\t[ACCOUNT_PROPERTY_ENUM.PROFILE_ENABLED]: ACCOUNT_PROPERTY_READABLE_ENUM.PROFILE_ENABLED,\n\t[ACCOUNT_PROPERTY_ENUM.ROLE]: ACCOUNT_PROPERTY_READABLE_ENUM.ROLE,\n\t[ACCOUNT_PROPERTY_ENUM.TWITTER]: ACCOUNT_PROPERTY_READABLE_ENUM.TWITTER,\n\t[ACCOUNT_PROPERTY_ENUM.FEDIVERSE]: ACCOUNT_PROPERTY_READABLE_ENUM.FEDIVERSE,\n\t[ACCOUNT_PROPERTY_ENUM.WEBSITE]: ACCOUNT_PROPERTY_READABLE_ENUM.WEBSITE,\n})\n\n/** Enum of profile specific sections to human readable names */\nexport const PROFILE_READABLE_ENUM = Object.freeze({\n\tPROFILE_VISIBILITY: t('settings', 'Profile visibility'),\n})\n\n/** Enum of readable account properties to account property keys used by the server */\nexport const PROPERTY_READABLE_KEYS_ENUM = Object.freeze({\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.ADDRESS]: ACCOUNT_PROPERTY_ENUM.ADDRESS,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.AVATAR]: ACCOUNT_PROPERTY_ENUM.AVATAR,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.BIOGRAPHY]: ACCOUNT_PROPERTY_ENUM.BIOGRAPHY,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.DISPLAYNAME]: ACCOUNT_PROPERTY_ENUM.DISPLAYNAME,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL_COLLECTION]: ACCOUNT_PROPERTY_ENUM.EMAIL_COLLECTION,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL]: ACCOUNT_PROPERTY_ENUM.EMAIL,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.HEADLINE]: ACCOUNT_PROPERTY_ENUM.HEADLINE,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.ORGANISATION]: ACCOUNT_PROPERTY_ENUM.ORGANISATION,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.PHONE]: ACCOUNT_PROPERTY_ENUM.PHONE,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.PROFILE_ENABLED]: ACCOUNT_PROPERTY_ENUM.PROFILE_ENABLED,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.ROLE]: ACCOUNT_PROPERTY_ENUM.ROLE,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.TWITTER]: ACCOUNT_PROPERTY_ENUM.TWITTER,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.FEDIVERSE]: ACCOUNT_PROPERTY_ENUM.FEDIVERSE,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.WEBSITE]: ACCOUNT_PROPERTY_ENUM.WEBSITE,\n})\n\n/**\n * Enum of account setting properties\n *\n * Account setting properties unlike account properties do not support scopes*\n */\nexport const ACCOUNT_SETTING_PROPERTY_ENUM = Object.freeze({\n\tLANGUAGE: 'language',\n\tLOCALE: 'locale',\n})\n\n/** Enum of account setting properties to human readable setting properties */\nexport const ACCOUNT_SETTING_PROPERTY_READABLE_ENUM = Object.freeze({\n\tLANGUAGE: t('settings', 'Language'),\n\tLOCALE: t('settings', 'Locale'),\n})\n\n/** Enum of scopes */\nexport const SCOPE_ENUM = Object.freeze({\n\tPRIVATE: 'v2-private',\n\tLOCAL: 'v2-local',\n\tFEDERATED: 'v2-federated',\n\tPUBLISHED: 'v2-published',\n})\n\n/** Enum of readable account properties to supported scopes */\nexport const PROPERTY_READABLE_SUPPORTED_SCOPES_ENUM = Object.freeze({\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.ADDRESS]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.AVATAR]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.BIOGRAPHY]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.DISPLAYNAME]: [SCOPE_ENUM.LOCAL],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL_COLLECTION]: [SCOPE_ENUM.LOCAL],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL]: [SCOPE_ENUM.LOCAL],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.HEADLINE]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.ORGANISATION]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.PHONE]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.PROFILE_ENABLED]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.ROLE]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.TWITTER]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.FEDIVERSE]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.WEBSITE]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n})\n\n/** List of readable account properties which aren't published to the lookup server */\nexport const UNPUBLISHED_READABLE_PROPERTIES = Object.freeze([\n\tACCOUNT_PROPERTY_READABLE_ENUM.BIOGRAPHY,\n\tACCOUNT_PROPERTY_READABLE_ENUM.HEADLINE,\n\tACCOUNT_PROPERTY_READABLE_ENUM.ORGANISATION,\n\tACCOUNT_PROPERTY_READABLE_ENUM.ROLE,\n])\n\n/** Scope suffix */\nexport const SCOPE_SUFFIX = 'Scope'\n\n/**\n * Enum of scope names to properties\n *\n * Used for federation control*\n */\nexport const SCOPE_PROPERTY_ENUM = Object.freeze({\n\t[SCOPE_ENUM.PRIVATE]: {\n\t\tname: SCOPE_ENUM.PRIVATE,\n\t\tdisplayName: t('settings', 'Private'),\n\t\ttooltip: t('settings', 'Only visible to people matched via phone number integration through Talk on mobile'),\n\t\ttooltipDisabled: t('settings', 'Not available as this property is required for core functionality including file sharing and calendar invitations'),\n\t\ticonClass: 'icon-phone',\n\t},\n\t[SCOPE_ENUM.LOCAL]: {\n\t\tname: SCOPE_ENUM.LOCAL,\n\t\tdisplayName: t('settings', 'Local'),\n\t\ttooltip: t('settings', 'Only visible to people on this instance and guests'),\n\t\t// tooltipDisabled is not required here as this scope is supported by all account properties\n\t\ticonClass: 'icon-password',\n\t},\n\t[SCOPE_ENUM.FEDERATED]: {\n\t\tname: SCOPE_ENUM.FEDERATED,\n\t\tdisplayName: t('settings', 'Federated'),\n\t\ttooltip: t('settings', 'Only synchronize to trusted servers'),\n\t\ttooltipDisabled: t('settings', 'Not available as federation has been disabled for your account, contact your system administrator if you have any questions'),\n\t\ticonClass: 'icon-contacts-dark',\n\t},\n\t[SCOPE_ENUM.PUBLISHED]: {\n\t\tname: SCOPE_ENUM.PUBLISHED,\n\t\tdisplayName: t('settings', 'Published'),\n\t\ttooltip: t('settings', 'Synchronize to trusted servers and the global and public address book'),\n\t\ttooltipDisabled: t('settings', 'Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions'),\n\t\ticonClass: 'icon-link',\n\t},\n})\n\n/** Default additional email scope */\nexport const DEFAULT_ADDITIONAL_EMAIL_SCOPE = SCOPE_ENUM.LOCAL\n\n/** Enum of verification constants, according to IAccountManager */\nexport const VERIFICATION_ENUM = Object.freeze({\n\tNOT_VERIFIED: 0,\n\tVERIFICATION_IN_PROGRESS: 1,\n\tVERIFIED: 2,\n})\n\n/**\n * Email validation regex\n *\n * Sourced from https://github.com/mpyw/FILTER_VALIDATE_EMAIL.js/blob/71e62ca48841d2246a1b531e7e84f5a01f15e615/src/regexp/ascii.ts*\n */\n// eslint-disable-next-line no-control-regex\nexport const VALIDATE_EMAIL_REGEX = /^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/i\n","/**\n * @copyright 2021, Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\nimport { SCOPE_SUFFIX } from '../../constants/AccountPropertyConstants.js'\n\n/**\n * Save the primary account property value for the user\n *\n * @param {string} accountProperty the account property\n * @param {string|boolean} value the primary value\n * @return {object}\n */\nexport const savePrimaryAccountProperty = async (accountProperty, value) => {\n\t// TODO allow boolean values on backend route handler\n\t// Convert boolean to string for compatibility\n\tif (typeof value === 'boolean') {\n\t\tvalue = value ? '1' : '0'\n\t}\n\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: accountProperty,\n\t\tvalue,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Save the federation scope of the primary account property for the user\n *\n * @param {string} accountProperty the account property\n * @param {string} scope the federation scope\n * @return {object}\n */\nexport const savePrimaryAccountPropertyScope = async (accountProperty, scope) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: `${accountProperty}${SCOPE_SUFFIX}`,\n\t\tvalue: scope,\n\t})\n\n\treturn res.data\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('settings')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError } from '@nextcloud/dialogs'\nimport { translate as t } from '@nextcloud/l10n'\n\nimport logger from '../logger.js'\n\n/**\n * @param {import('axios').AxiosError} error the error\n * @param {string?} message the message to display\n */\nexport const handleError = (error, message) => {\n\tlet fullMessage = ''\n\n\tif (message) {\n\t\tfullMessage += message\n\t}\n\n\tif (error.response?.status === 429) {\n\t\tif (fullMessage) {\n\t\t\tfullMessage += '\\n'\n\t\t}\n\t\tfullMessage += t('settings', 'There were too many requests from your network. Retry later or contact your administrator if this is an error.')\n\t}\n\n\tshowError(fullMessage)\n\tlogger.error(fullMessage || t('Error'), error)\n}\n","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<NcActions :class=\"{ 'federation-actions': !additional, 'federation-actions--additional': additional }\"\n\t\t:aria-label=\"ariaLabel\"\n\t\t:default-icon=\"scopeIcon\"\n\t\t:disabled=\"disabled\">\n\t\t<FederationControlAction v-for=\"federationScope in federationScopes\"\n\t\t\t:key=\"federationScope.name\"\n\t\t\t:active-scope=\"scope\"\n\t\t\t:display-name=\"federationScope.displayName\"\n\t\t\t:handle-scope-change=\"changeScope\"\n\t\t\t:icon-class=\"federationScope.iconClass\"\n\t\t\t:is-supported-scope=\"supportedScopes.includes(federationScope.name)\"\n\t\t\t:name=\"federationScope.name\"\n\t\t\t:tooltip-disabled=\"federationScope.tooltipDisabled\"\n\t\t\t:tooltip=\"federationScope.tooltip\"\n\t\t\t:aria-label=\"federationScope.tooltip\" />\n\t</NcActions>\n</template>\n\n<script>\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport FederationControlAction from './FederationControlAction.vue'\n\nimport {\n\tACCOUNT_PROPERTY_READABLE_ENUM,\n\tACCOUNT_SETTING_PROPERTY_READABLE_ENUM,\n\tPROFILE_READABLE_ENUM,\n\tPROPERTY_READABLE_KEYS_ENUM,\n\tPROPERTY_READABLE_SUPPORTED_SCOPES_ENUM,\n\tSCOPE_ENUM, SCOPE_PROPERTY_ENUM,\n\tUNPUBLISHED_READABLE_PROPERTIES,\n} from '../../../constants/AccountPropertyConstants.js'\nimport { savePrimaryAccountPropertyScope } from '../../../service/PersonalInfo/PersonalInfoService.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nconst {\n\tfederationEnabled,\n\tlookupServerUploadEnabled,\n} = loadState('settings', 'accountParameters', {})\n\nexport default {\n\tname: 'FederationControl',\n\n\tcomponents: {\n\t\tNcActions,\n\t\tFederationControlAction,\n\t},\n\n\tprops: {\n\t\treadable: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tvalidator: (value) => Object.values(ACCOUNT_PROPERTY_READABLE_ENUM).includes(value) || Object.values(ACCOUNT_SETTING_PROPERTY_READABLE_ENUM).includes(value) || value === PROFILE_READABLE_ENUM.PROFILE_VISIBILITY,\n\t\t},\n\t\tadditional: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tadditionalValue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\thandleAdditionalScopeChange: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\t\tscope: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\treadableLowerCase: this.readable.toLocaleLowerCase(),\n\t\t\tinitialScope: this.scope,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tariaLabel() {\n\t\t\treturn t('settings', 'Change scope level of {property}, current scope is {scope}', { property: this.readableLowerCase, scope: this.scopeDisplayNameLowerCase })\n\t\t},\n\n\t\tscopeDisplayNameLowerCase() {\n\t\t\treturn SCOPE_PROPERTY_ENUM[this.scope].displayName.toLocaleLowerCase()\n\t\t},\n\n\t\tscopeIcon() {\n\t\t\treturn SCOPE_PROPERTY_ENUM[this.scope].iconClass\n\t\t},\n\n\t\tfederationScopes() {\n\t\t\treturn Object.values(SCOPE_PROPERTY_ENUM)\n\t\t},\n\n\t\tsupportedScopes() {\n\t\t\tconst scopes = PROPERTY_READABLE_SUPPORTED_SCOPES_ENUM[this.readable]\n\n\t\t\tif (UNPUBLISHED_READABLE_PROPERTIES.includes(this.readable)) {\n\t\t\t\treturn scopes\n\t\t\t}\n\n\t\t\tif (federationEnabled) {\n\t\t\t\tscopes.push(SCOPE_ENUM.FEDERATED)\n\t\t\t}\n\n\t\t\tif (lookupServerUploadEnabled) {\n\t\t\t\tscopes.push(SCOPE_ENUM.PUBLISHED)\n\t\t\t}\n\n\t\t\treturn scopes\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync changeScope(scope) {\n\t\t\tthis.$emit('update:scope', scope)\n\n\t\t\tif (!this.additional) {\n\t\t\t\tawait this.updatePrimaryScope(scope)\n\t\t\t} else {\n\t\t\t\tawait this.updateAdditionalScope(scope)\n\t\t\t}\n\t\t},\n\n\t\tasync updatePrimaryScope(scope) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryAccountPropertyScope(PROPERTY_READABLE_KEYS_ENUM[this.readable], scope)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tscope,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update federation scope of the primary {property}', { property: this.readableLowerCase }),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tasync updateAdditionalScope(scope) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await this.handleAdditionalScopeChange(this.additionalValue, scope)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tscope,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update federation scope of additional {property}', { property: this.readableLowerCase }),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ scope, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\tthis.initialScope = scope\n\t\t\t} else {\n\t\t\t\tthis.$emit('update:scope', this.initialScope)\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.federation-actions,\n\t.federation-actions--additional {\n\t\topacity: 0.4 !important;\n\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:active {\n\t\t\topacity: 0.8 !important;\n\t\t}\n\t}\n\n\t.federation-actions--additional {\n\t\t&::v-deep button {\n\t\t\t// TODO remove this hack\n\t\t\tpadding-bottom: 7px;\n\t\t\theight: 30px !important;\n\t\t\tmin-height: 30px !important;\n\t\t\twidth: 30px !important;\n\t\t\tmin-width: 30px !important;\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControl.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControl.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControl.vue?vue&type=style&index=0&id=4ea07669&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControl.vue?vue&type=style&index=0&id=4ea07669&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FederationControl.vue?vue&type=template&id=4ea07669&scoped=true&\"\nimport script from \"./FederationControl.vue?vue&type=script&lang=js&\"\nexport * from \"./FederationControl.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FederationControl.vue?vue&type=style&index=0&id=4ea07669&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4ea07669\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcActions',{class:{ 'federation-actions': !_vm.additional, 'federation-actions--additional': _vm.additional },attrs:{\"aria-label\":_vm.ariaLabel,\"default-icon\":_vm.scopeIcon,\"disabled\":_vm.disabled}},_vm._l((_vm.federationScopes),function(federationScope){return _c('FederationControlAction',{key:federationScope.name,attrs:{\"active-scope\":_vm.scope,\"display-name\":federationScope.displayName,\"handle-scope-change\":_vm.changeScope,\"icon-class\":federationScope.iconClass,\"is-supported-scope\":_vm.supportedScopes.includes(federationScope.name),\"name\":federationScope.name,\"tooltip-disabled\":federationScope.tooltipDisabled,\"tooltip\":federationScope.tooltip,\"aria-label\":federationScope.tooltip}})}),1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderBar.vue?vue&type=script&lang=js&\"","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<component :is=\"isHeading ? `h3` : `div`\" class=\"headerbar-label\" :class=\"{ 'setting-property': isSettingProperty, 'profile-property': isProfileProperty }\">\n\t\t<span v-if=\"isHeading\">\n\t\t\t<!-- Already translated as required by prop validator -->\n\t\t\t{{ readable }}\n\t\t</span>\n\t\t<label v-else :for=\"inputId\">\n\t\t\t<!-- Already translated as required by prop validator -->\n\t\t\t{{ readable }}\n\t\t</label>\n\n\t\t<template v-if=\"scope\">\n\t\t\t<FederationControl class=\"federation-control\"\n\t\t\t\t:readable=\"readable\"\n\t\t\t\t:scope.sync=\"localScope\"\n\t\t\t\t@update:scope=\"onScopeChange\" />\n\t\t</template>\n\n\t\t<template v-if=\"isEditable && isMultiValueSupported\">\n\t\t\t<NcButton type=\"tertiary\"\n\t\t\t\t:disabled=\"!isValidSection\"\n\t\t\t\t:aria-label=\"t('settings', 'Add additional email')\"\n\t\t\t\t@click.stop.prevent=\"onAddAdditional\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Plus :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('settings', 'Add') }}\n\t\t\t</NcButton>\n\t\t</template>\n\t</component>\n</template>\n\n<script>\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport Plus from 'vue-material-design-icons/Plus.vue'\n\nimport FederationControl from './FederationControl.vue'\n\nimport {\n\tACCOUNT_PROPERTY_READABLE_ENUM,\n\tPROFILE_READABLE_ENUM,\n} from '../../../constants/AccountPropertyConstants.js'\n\nexport default {\n\tname: 'HeaderBar',\n\n\tcomponents: {\n\t\tFederationControl,\n\t\tNcButton,\n\t\tPlus,\n\t},\n\n\tprops: {\n\t\tscope: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\treadable: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tinputId: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tisEditable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tisMultiValueSupported: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisValidSection: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tisHeading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tlocalScope: this.scope,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisProfileProperty() {\n\t\t\treturn this.readable === ACCOUNT_PROPERTY_READABLE_ENUM.PROFILE_ENABLED\n\t\t},\n\n\t\tisSettingProperty() {\n\t\t\treturn !Object.values(ACCOUNT_PROPERTY_READABLE_ENUM).includes(this.readable) && !Object.values(PROFILE_READABLE_ENUM).includes(this.readable)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonAddAdditional() {\n\t\t\tthis.$emit('add-additional')\n\t\t},\n\n\t\tonScopeChange(scope) {\n\t\t\tthis.$emit('update:scope', scope)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.headerbar-label {\n\t\tfont-weight: normal;\n\t\tdisplay: inline-flex;\n\t\twidth: 100%;\n\t\tmargin: 12px 0 0 0;\n\t\tgap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 16px;\n\t\tcolor: var(--color-text-light);\n\n\t\t&.profile-property {\n\t\t\theight: 38px;\n\t\t}\n\n\t\t&.setting-property {\n\t\t\theight: 44px;\n\t\t}\n\n\t\tlabel {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t.federation-control {\n\t\tmargin: 0;\n\t}\n\n\t.button-vue {\n\t\tmargin: 0 0 0 auto !important;\n\t}\n</style>\n","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderBar.vue?vue&type=style&index=0&id=b43fcc0c&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderBar.vue?vue&type=style&index=0&id=b43fcc0c&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./HeaderBar.vue?vue&type=template&id=b43fcc0c&scoped=true&\"\nimport script from \"./HeaderBar.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderBar.vue?vue&type=style&index=0&id=b43fcc0c&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b43fcc0c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.isHeading ? `h3` : `div`,{tag:\"component\",staticClass:\"headerbar-label\",class:{ 'setting-property': _vm.isSettingProperty, 'profile-property': _vm.isProfileProperty }},[(_vm.isHeading)?_c('span',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.readable)+\"\\n\\t\")]):_c('label',{attrs:{\"for\":_vm.inputId}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.readable)+\"\\n\\t\")]),_vm._v(\" \"),(_vm.scope)?[_c('FederationControl',{staticClass:\"federation-control\",attrs:{\"readable\":_vm.readable,\"scope\":_vm.localScope},on:{\"update:scope\":[function($event){_vm.localScope=$event},_vm.onScopeChange]}})]:_vm._e(),_vm._v(\" \"),(_vm.isEditable && _vm.isMultiValueSupported)?[_c('NcButton',{attrs:{\"type\":\"tertiary\",\"disabled\":!_vm.isValidSection,\"aria-label\":_vm.t('settings', 'Add additional email')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.onAddAdditional.apply(null, arguments)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Plus',{attrs:{\"size\":20}})]},proxy:true}],null,false,32235154)},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Add'))+\"\\n\\t\\t\")])]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section id=\"vue-avatar-section\">\n\t\t<h3 class=\"hidden-visually\"> {{ t('settings', 'Your profile information') }} </h3>\n\t\t<HeaderBar :input-id=\"avatarChangeSupported ? inputId : null\"\n\t\t\t:readable=\"avatar.readable\"\n\t\t\t:scope.sync=\"avatar.scope\" />\n\n\t\t<div v-if=\"!showCropper\" class=\"avatar__container\">\n\t\t\t<div class=\"avatar__preview\">\n\t\t\t\t<NcAvatar v-if=\"!loading\"\n\t\t\t\t\t:user=\"userId\"\n\t\t\t\t\t:aria-label=\"t('settings', 'Your profile picture')\"\n\t\t\t\t\t:disabled-menu=\"true\"\n\t\t\t\t\t:disabled-tooltip=\"true\"\n\t\t\t\t\t:show-user-status=\"false\"\n\t\t\t\t\t:size=\"180\"\n\t\t\t\t\t:key=\"version\" />\n\t\t\t\t<div v-else class=\"icon-loading\" />\n\t\t\t</div>\n\t\t\t<template v-if=\"avatarChangeSupported\">\n\t\t\t\t<div class=\"avatar__buttons\">\n\t\t\t\t\t<NcButton :aria-label=\"t('settings', 'Upload profile picture')\"\n\t\t\t\t\t\t@click=\"activateLocalFilePicker\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Upload :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton :aria-label=\"t('settings', 'Choose profile picture from Files')\"\n\t\t\t\t\t\t@click=\"openFilePicker\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Folder :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton v-if=\"!isGenerated\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Remove profile picture')\"\n\t\t\t\t\t\t@click=\"removeAvatar\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Delete :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t\t<span>{{ t('settings', 'The file must be a PNG or JPG') }}</span>\n\t\t\t\t<input ref=\"input\"\n\t\t\t\t\t:id=\"inputId\"\n\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t:accept=\"validMimeTypes.join(',')\"\n\t\t\t\t\t@change=\"onChange\">\n\t\t\t</template>\n\t\t\t<span v-else>\n\t\t\t\t{{ t('settings', 'Picture provided by original account') }}\n\t\t\t</span>\n\t\t</div>\n\n\t\t<!-- Use v-show to ensure early cropper ref availability -->\n\t\t<div v-show=\"showCropper\" class=\"avatar__container\">\n\t\t\t<VueCropper ref=\"cropper\"\n\t\t\t\tclass=\"avatar__cropper\"\n\t\t\t\tv-bind=\"cropperOptions\" />\n\t\t\t<div class=\"avatar__cropper-buttons\">\n\t\t\t\t<NcButton @click=\"cancel\">\n\t\t\t\t\t{{ t('settings', 'Cancel') }}\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton type=\"primary\"\n\t\t\t\t\t@click=\"saveAvatar\">\n\t\t\t\t\t{{ t('settings', 'Set as profile picture') }}\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t\t<span>{{ t('settings', 'Please note that it can take up to 24 hours for your profile picture to be updated everywhere.') }}</span>\n\t\t</div>\n\t</section>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getFilePickerBuilder, showError } from '@nextcloud/dialogs'\nimport { emit, subscribe, unsubscribe } from '@nextcloud/event-bus'\n\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport VueCropper from 'vue-cropperjs'\n// eslint-disable-next-line n/no-extraneous-import\nimport 'cropperjs/dist/cropper.css'\n\nimport Upload from 'vue-material-design-icons/Upload.vue'\nimport Folder from 'vue-material-design-icons/Folder.vue'\nimport Delete from 'vue-material-design-icons/Delete.vue'\n\nimport HeaderBar from './shared/HeaderBar.vue'\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { avatar } = loadState('settings', 'personalInfoParameters', {})\nconst { avatarChangeSupported } = loadState('settings', 'accountParameters', {})\n\nconst VALID_MIME_TYPES = ['image/png', 'image/jpeg']\n\nconst picker = getFilePickerBuilder(t('settings', 'Choose your profile picture'))\n\t.setMultiSelect(false)\n\t.setMimeTypeFilter(VALID_MIME_TYPES)\n\t.setModal(true)\n\t.setType(1)\n\t.allowDirectories(false)\n\t.build()\n\nexport default {\n\tname: 'AvatarSection',\n\n\tcomponents: {\n\t\tDelete,\n\t\tFolder,\n\t\tHeaderBar,\n\t\tNcAvatar,\n\t\tNcButton,\n\t\tUpload,\n\t\tVueCropper,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tavatar: { ...avatar, readable: NAME_READABLE_ENUM[avatar.name] },\n\t\t\tavatarChangeSupported,\n\t\t\tshowCropper: false,\n\t\t\tloading: false,\n\t\t\tuserId: getCurrentUser().uid,\n\t\t\tdisplayName: getCurrentUser().displayName,\n\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\tisGenerated: oc_userconfig.avatar.generated,\n\t\t\tvalidMimeTypes: VALID_MIME_TYPES,\n\t\t\tcropperOptions: {\n\t\t\t\taspectRatio: 1 / 1,\n\t\t\t\tviewMode: 1,\n\t\t\t\tguides: false,\n\t\t\t\tcenter: false,\n\t\t\t\thighlight: false,\n\t\t\t\tautoCropArea: 1,\n\t\t\t\tminContainerWidth: 300,\n\t\t\t\tminContainerHeight: 300,\n\t\t\t},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tinputId() {\n\t\t\treturn `account-property-${this.avatar.name}`\n\t\t},\n\t},\n\n\tcreated() {\n\t\tsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t},\n\n\tmethods: {\n\t\tactivateLocalFilePicker() {\n\t\t\t// Set to null so that selecting the same file will trigger the change event\n\t\t\tthis.$refs.input.value = null\n\t\t\tthis.$refs.input.click()\n\t\t},\n\n\t\tonChange(e) {\n\t\t\tthis.loading = true\n\t\t\tconst file = e.target.files[0]\n\t\t\tif (!this.validMimeTypes.includes(file.type)) {\n\t\t\t\tshowError(t('settings', 'Please select a valid png or jpg file'))\n\t\t\t\tthis.cancel()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst reader = new FileReader()\n\t\t\treader.onload = (e) => {\n\t\t\t\tthis.$refs.cropper.replace(e.target.result)\n\t\t\t\tthis.showCropper = true\n\t\t\t}\n\t\t\treader.readAsDataURL(file)\n\t\t},\n\n\t\tasync openFilePicker() {\n\t\t\tconst path = await picker.pick()\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst { data } = await axios.post(generateUrl('/avatar'), { path })\n\t\t\t\tif (data.status === 'success') {\n\t\t\t\t\tthis.handleAvatarUpdate(false)\n\t\t\t\t} else if (data.data === 'notsquare') {\n\t\t\t\t\tconst tempAvatar = generateUrl('/avatar/tmp') + '?requesttoken=' + encodeURIComponent(OC.requestToken) + '#' + Math.floor(Math.random() * 1000)\n\t\t\t\t\tthis.$refs.cropper.replace(tempAvatar)\n\t\t\t\t\tthis.showCropper = true\n\t\t\t\t} else {\n\t\t\t\t\tshowError(data.data.message)\n\t\t\t\t\tthis.cancel()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tshowError(t('settings', 'Error setting profile picture'))\n\t\t\t\tthis.cancel()\n\t\t\t}\n\t\t},\n\n\t\tsaveAvatar() {\n\t\t\tthis.showCropper = false\n\t\t\tthis.loading = true\n\n\t\t\tconst canvasData = this.$refs.cropper.getCroppedCanvas()\n\t\t\tconst scaleFactor = canvasData.width > 512 ? 512 / canvasData.width : 1\n\n\t\t\tthis.$refs.cropper.scale(scaleFactor, scaleFactor).getCroppedCanvas().toBlob(async (blob) => {\n\t\t\t\tif (blob === null) {\n\t\t\t\t\tshowError(t('settings', 'Error cropping profile picture'))\n\t\t\t\t\tthis.cancel()\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst formData = new FormData()\n\t\t\t\tformData.append('files[]', blob)\n\t\t\t\ttry {\n\t\t\t\t\tawait axios.post(generateUrl('/avatar'), formData)\n\t\t\t\t\tthis.handleAvatarUpdate(false)\n\t\t\t\t} catch (e) {\n\t\t\t\t\tshowError(t('settings', 'Error saving profile picture'))\n\t\t\t\t\tthis.handleAvatarUpdate(this.isGenerated)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tasync removeAvatar() {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait axios.delete(generateUrl('/avatar'))\n\t\t\t\tthis.handleAvatarUpdate(true)\n\t\t\t} catch (e) {\n\t\t\t\tshowError(t('settings', 'Error removing profile picture'))\n\t\t\t\tthis.handleAvatarUpdate(this.isGenerated)\n\t\t\t}\n\t\t},\n\n\t\tcancel() {\n\t\t\tthis.showCropper = false\n\t\t\tthis.loading = false\n\t\t},\n\n\t\thandleAvatarUpdate(isGenerated) {\n\t\t\t// Update the avatar version so that avatar update handlers refresh correctly\n\t\t\tthis.version = oc_userconfig.avatar.version = Date.now()\n\t\t\tthis.isGenerated = oc_userconfig.avatar.generated = isGenerated\n\t\t\tthis.loading = false\n\t\t\temit('settings:avatar:updated', oc_userconfig.avatar.version)\n\t\t},\n\n\t\thandleDisplayNameUpdate() {\n\t\t\tthis.version = oc_userconfig.avatar.version\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tgrid-row: 1/3;\n}\n.avatar {\n\t&__container {\n\t\tmargin: 0 auto;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tgap: 16px 0;\n\t\twidth: 300px;\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\twidth: 180px;\n\t\theight: 180px;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tgap: 0 10px;\n\t}\n\n\t&__cropper {\n\t\twidth: 300px;\n\t\theight: 300px;\n\t\toverflow: hidden;\n\n\t\t&-buttons {\n\t\t\twidth: 100%;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t}\n\n\t\t&::v-deep .cropper-view-box {\n\t\t\tborder-radius: 50%;\n\t\t}\n\t}\n}\n\ninput[type=\"file\"] {\n\tdisplay: none;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AvatarSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AvatarSection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AvatarSection.vue?vue&type=style&index=0&id=022fd5d4&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AvatarSection.vue?vue&type=style&index=0&id=022fd5d4&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AvatarSection.vue?vue&type=template&id=022fd5d4&scoped=true&\"\nimport script from \"./AvatarSection.vue?vue&type=script&lang=js&\"\nexport * from \"./AvatarSection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AvatarSection.vue?vue&type=style&index=0&id=022fd5d4&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"022fd5d4\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',{attrs:{\"id\":\"vue-avatar-section\"}},[_c('h3',{staticClass:\"hidden-visually\"},[_vm._v(\" \"+_vm._s(_vm.t('settings', 'Your profile information'))+\" \")]),_vm._v(\" \"),_c('HeaderBar',{attrs:{\"input-id\":_vm.avatarChangeSupported ? _vm.inputId : null,\"readable\":_vm.avatar.readable,\"scope\":_vm.avatar.scope},on:{\"update:scope\":function($event){return _vm.$set(_vm.avatar, \"scope\", $event)}}}),_vm._v(\" \"),(!_vm.showCropper)?_c('div',{staticClass:\"avatar__container\"},[_c('div',{staticClass:\"avatar__preview\"},[(!_vm.loading)?_c('NcAvatar',{key:_vm.version,attrs:{\"user\":_vm.userId,\"aria-label\":_vm.t('settings', 'Your profile picture'),\"disabled-menu\":true,\"disabled-tooltip\":true,\"show-user-status\":false,\"size\":180}}):_c('div',{staticClass:\"icon-loading\"})],1),_vm._v(\" \"),(_vm.avatarChangeSupported)?[_c('div',{staticClass:\"avatar__buttons\"},[_c('NcButton',{attrs:{\"aria-label\":_vm.t('settings', 'Upload profile picture')},on:{\"click\":_vm.activateLocalFilePicker},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Upload',{attrs:{\"size\":20}})]},proxy:true}],null,false,1329850251)}),_vm._v(\" \"),_c('NcButton',{attrs:{\"aria-label\":_vm.t('settings', 'Choose profile picture from Files')},on:{\"click\":_vm.openFilePicker},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Folder',{attrs:{\"size\":20}})]},proxy:true}],null,false,4270628382)}),_vm._v(\" \"),(!_vm.isGenerated)?_c('NcButton',{attrs:{\"aria-label\":_vm.t('settings', 'Remove profile picture')},on:{\"click\":_vm.removeAvatar},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Delete',{attrs:{\"size\":20}})]},proxy:true}],null,false,2705356561)}):_vm._e()],1),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.t('settings', 'The file must be a PNG or JPG')))]),_vm._v(\" \"),_c('input',{ref:\"input\",attrs:{\"id\":_vm.inputId,\"type\":\"file\",\"accept\":_vm.validMimeTypes.join(',')},on:{\"change\":_vm.onChange}})]:_c('span',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Picture provided by original account'))+\"\\n\\t\\t\")])],2):_vm._e(),_vm._v(\" \"),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showCropper),expression:\"showCropper\"}],staticClass:\"avatar__container\"},[_c('VueCropper',_vm._b({ref:\"cropper\",staticClass:\"avatar__cropper\"},'VueCropper',_vm.cropperOptions,false)),_vm._v(\" \"),_c('div',{staticClass:\"avatar__cropper-buttons\"},[_c('NcButton',{on:{\"click\":_vm.cancel}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.saveAvatar}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Set as profile picture'))+\"\\n\\t\\t\\t\")])],1),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Please note that it can take up to 24 hours for your profile picture to be updated everywhere.')))])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('HeaderBar',{attrs:{\"is-heading\":true,\"readable\":_vm.t('settings', 'Details')}}),_vm._v(\" \"),_c('div',{staticClass:\"details\"},[_c('div',{staticClass:\"details__groups\"},[_c('Account',{attrs:{\"size\":20}}),_vm._v(\" \"),_c('div',{staticClass:\"details__groups-info\"},[_c('p',[_vm._v(_vm._s(_vm.t('settings', 'You are a member of the following groups:')))]),_vm._v(\" \"),_c('p',{staticClass:\"details__groups-list\"},[_vm._v(_vm._s(_vm.groups.join(', ')))])])],1),_vm._v(\" \"),_c('div',{staticClass:\"details__quota\"},[_c('CircleSlice',{attrs:{\"size\":20}}),_vm._v(\" \"),_c('div',{staticClass:\"details__quota-info\"},[_c('p',{staticClass:\"details__quota-text\",domProps:{\"innerHTML\":_vm._s(_vm.quotaText)}}),_vm._v(\" \"),_c('NcProgressBar',{attrs:{\"size\":\"medium\",\"value\":_vm.usageRelative,\"error\":_vm.usageRelative > 80}})],1)],1)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section>\n\t\t<HeaderBar :is-heading=\"true\" :readable=\"t('settings', 'Details')\" />\n\n\t\t<div class=\"details\">\n\t\t\t<div class=\"details__groups\">\n\t\t\t\t<Account :size=\"20\" />\n\t\t\t\t<div class=\"details__groups-info\">\n\t\t\t\t\t<p>{{ t('settings', 'You are a member of the following groups:') }}</p>\n\t\t\t\t\t<p class=\"details__groups-list\">{{ groups.join(', ') }}</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"details__quota\">\n\t\t\t\t<CircleSlice :size=\"20\" />\n\t\t\t\t<div class=\"details__quota-info\">\n\t\t\t\t\t<p class=\"details__quota-text\" v-html=\"quotaText\" />\n\t\t\t\t\t<NcProgressBar size=\"medium\"\n\t\t\t\t\t\t:value=\"usageRelative\"\n\t\t\t\t\t\t:error=\"usageRelative > 80\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\n\nimport Account from 'vue-material-design-icons/Account.vue'\nimport CircleSlice from 'vue-material-design-icons/CircleSlice3.vue'\n\nimport HeaderBar from './shared/HeaderBar.vue'\n\n/** SYNC to be kept in sync with `lib/public/Files/FileInfo.php` */\nconst SPACE_UNLIMITED = -3\n\nconst { groups, quota, totalSpace, usage, usageRelative } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'DetailsSection',\n\n\tcomponents: {\n\t\tAccount,\n\t\tCircleSlice,\n\t\tHeaderBar,\n\t\tNcProgressBar,\n\t},\n\n\tcomputed: {\n\t\tquotaText() {\n\t\t\tif (quota === SPACE_UNLIMITED) {\n\t\t\t\treturn t('settings', 'You are using <strong>{usage}</strong>', { usage })\n\t\t\t}\n\t\t\treturn t(\n\t\t\t\t'settings',\n\t\t\t\t'You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)',\n\t\t\t\t{ usage, totalSpace, usageRelative },\n\t\t\t)\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroups,\n\t\t\tusageRelative,\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.details {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: 10px 32px 10px 0;\n\tgap: 16px 0;\n\tcolor: var(--color-text-lighter);\n\n\t&__groups,\n\t&__quota {\n\t\tdisplay: flex;\n\t\tgap: 0 10px;\n\n\t\t&-info {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\twidth: 100%;\n\t\t\tgap: 4px 0;\n\t\t}\n\n\t\t&-list {\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\t&::v-deep .material-design-icon {\n\t\t\talign-self: flex-start;\n\t\t\tmargin-top: 2px;\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailsSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailsSection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailsSection.vue?vue&type=style&index=0&id=1ab46e68&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailsSection.vue?vue&type=style&index=0&id=1ab46e68&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./DetailsSection.vue?vue&type=template&id=1ab46e68&scoped=true&\"\nimport script from \"./DetailsSection.vue?vue&type=script&lang=js&\"\nexport * from \"./DetailsSection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DetailsSection.vue?vue&type=style&index=0&id=1ab46e68&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1ab46e68\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your full name'),\"is-editable\":_vm.displayNameChangeSupported,\"on-validate\":_vm.onValidate,\"on-save\":_vm.onSave}},'AccountPropertySection',_vm.displayName,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section>\n\t\t<HeaderBar :scope.sync=\"scope\"\n\t\t\t:readable.sync=\"readable\"\n\t\t\t:input-id=\"inputId\"\n\t\t\t:is-editable=\"isEditable\" />\n\n\t\t<div v-if=\"isEditable\" class=\"property\">\n\t\t\t<textarea v-if=\"multiLine\"\n\t\t\t\t:id=\"inputId\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:value=\"value\"\n\t\t\t\trows=\"8\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\t@input=\"onPropertyChange\" />\n\t\t\t<input v-else\n\t\t\t\tref=\"input\"\n\t\t\t\t:id=\"inputId\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:type=\"type\"\n\t\t\t\t:value=\"value\"\n\t\t\t\t:aria-describedby=\"helperText ? `${name}-helper-text` : ''\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\tautocomplete=\"on\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\t@input=\"onPropertyChange\">\n\n\t\t\t<div class=\"property__actions-container\">\n\t\t\t\t<transition name=\"fade\">\n\t\t\t\t\t<Check v-if=\"showCheckmarkIcon\" :size=\"20\" />\n\t\t\t\t\t<AlertOctagon v-else-if=\"showErrorIcon\" :size=\"20\" />\n\t\t\t\t</transition>\n\t\t\t</div>\n\t\t</div>\n\t\t<span v-else>\n\t\t\t{{ value || t('settings', 'No {property} set', { property: readable.toLocaleLowerCase() }) }}\n\t\t</span>\n\n\t\t<p v-if=\"helperText\"\n\t\t\t:id=\"`${name}-helper-text`\"\n\t\t\tclass=\"property__helper-text-message property__helper-text-message--error\">\n\t\t\t<AlertCircle class=\"property__helper-text-message__icon\" :size=\"18\" />\n\t\t\t{{ helperText }}\n\t\t</p>\n\t</section>\n</template>\n\n<script>\nimport debounce from 'debounce'\n\nimport AlertCircle from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport AlertOctagon from 'vue-material-design-icons/AlertOctagon.vue'\nimport Check from 'vue-material-design-icons/Check.vue'\n\nimport HeaderBar from '../shared/HeaderBar.vue'\n\nimport { savePrimaryAccountProperty } from '../../../service/PersonalInfo/PersonalInfoService.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nexport default {\n\tname: 'AccountPropertySection',\n\n\tcomponents: {\n\t\tAlertCircle,\n\t\tAlertOctagon,\n\t\tCheck,\n\t\tHeaderBar,\n\t},\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tscope: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\treadable: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: 'text',\n\t\t},\n\t\tisEditable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmultiLine: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tonValidate: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\t\tonSave: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tinitialValue: this.value,\n\t\t\thelperText: null,\n\t\t\tshowCheckmarkIcon: false,\n\t\t\tshowErrorIcon: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tinputId() {\n\t\t\treturn `account-property-${this.name}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonPropertyChange(e) {\n\t\t\tthis.$emit('update:value', e.target.value)\n\t\t\tthis.debouncePropertyChange(e.target.value.trim())\n\t\t},\n\n\t\tdebouncePropertyChange: debounce(async function(value) {\n\t\t\tthis.helperText = null\n\t\t\tif (this.$refs.input && this.$refs.input.validationMessage) {\n\t\t\t\tthis.helperText = this.$refs.input.validationMessage\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.onValidate && !this.onValidate(value)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tawait this.updateProperty(value)\n\t\t}, 500),\n\n\t\tasync updateProperty(value) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryAccountProperty(\n\t\t\t\t\tthis.name,\n\t\t\t\t\tvalue,\n\t\t\t\t)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tvalue,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update {property}', { property: this.readable.toLocaleLowerCase() }),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ value, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\tthis.initialValue = value\n\t\t\t\tif (this.onSave) {\n\t\t\t\t\tthis.onSave(value)\n\t\t\t\t}\n\t\t\t\tthis.showCheckmarkIcon = true\n\t\t\t\tsetTimeout(() => { this.showCheckmarkIcon = false }, 2000)\n\t\t\t} else {\n\t\t\t\tthis.$emit('update:value', this.initialValue)\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t\tthis.showErrorIcon = true\n\t\t\t\tsetTimeout(() => { this.showErrorIcon = false }, 2000)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n\n\t.property {\n\t\tdisplay: grid;\n\t\talign-items: center;\n\n\t\ttextarea {\n\t\t\tresize: vertical;\n\t\t\tgrid-area: 1 / 1;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tinput {\n\t\t\tgrid-area: 1 / 1;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.property__actions-container {\n\t\t\tgrid-area: 1 / 1;\n\t\t\tjustify-self: flex-end;\n\t\t\talign-self: flex-end;\n\t\t\theight: 30px;\n\n\t\t\tdisplay: flex;\n\t\t\tgap: 0 2px;\n\t\t\tmargin-right: 5px;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\t}\n\n\t.property__helper-text-message {\n\t\tpadding: 4px 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t&__icon {\n\t\t\tmargin-right: 8px;\n\t\t\talign-self: start;\n\t\t\tmargin-top: 4px;\n\t\t}\n\n\t\t&--error {\n\t\t\tcolor: var(--color-error);\n\t\t}\n\t}\n\n\t.fade-enter,\n\t.fade-leave-to {\n\t\topacity: 0;\n\t}\n\n\t.fade-enter-active {\n\t\ttransition: opacity 200ms ease-out;\n\t}\n\n\t.fade-leave-active {\n\t\ttransition: opacity 300ms ease-out;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AccountPropertySection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AccountPropertySection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AccountPropertySection.vue?vue&type=style&index=0&id=6eb7d8e0&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AccountPropertySection.vue?vue&type=style&index=0&id=6eb7d8e0&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AccountPropertySection.vue?vue&type=template&id=6eb7d8e0&scoped=true&\"\nimport script from \"./AccountPropertySection.vue?vue&type=script&lang=js&\"\nexport * from \"./AccountPropertySection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AccountPropertySection.vue?vue&type=style&index=0&id=6eb7d8e0&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6eb7d8e0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('HeaderBar',{attrs:{\"scope\":_vm.scope,\"readable\":_vm.readable,\"input-id\":_vm.inputId,\"is-editable\":_vm.isEditable},on:{\"update:scope\":function($event){_vm.scope=$event},\"update:readable\":function($event){_vm.readable=$event}}}),_vm._v(\" \"),(_vm.isEditable)?_c('div',{staticClass:\"property\"},[(_vm.multiLine)?_c('textarea',{attrs:{\"id\":_vm.inputId,\"placeholder\":_vm.placeholder,\"rows\":\"8\",\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\"},domProps:{\"value\":_vm.value},on:{\"input\":_vm.onPropertyChange}}):_c('input',{ref:\"input\",attrs:{\"id\":_vm.inputId,\"placeholder\":_vm.placeholder,\"type\":_vm.type,\"aria-describedby\":_vm.helperText ? `${_vm.name}-helper-text` : '',\"autocapitalize\":\"none\",\"autocomplete\":\"on\",\"autocorrect\":\"off\"},domProps:{\"value\":_vm.value},on:{\"input\":_vm.onPropertyChange}}),_vm._v(\" \"),_c('div',{staticClass:\"property__actions-container\"},[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.showCheckmarkIcon)?_c('Check',{attrs:{\"size\":20}}):(_vm.showErrorIcon)?_c('AlertOctagon',{attrs:{\"size\":20}}):_vm._e()],1)],1)]):_c('span',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.value || _vm.t('settings', 'No {property} set', { property: _vm.readable.toLocaleLowerCase() }))+\"\\n\\t\")]),_vm._v(\" \"),(_vm.helperText)?_c('p',{staticClass:\"property__helper-text-message property__helper-text-message--error\",attrs:{\"id\":`${_vm.name}-helper-text`}},[_c('AlertCircle',{staticClass:\"property__helper-text-message__icon\",attrs:{\"size\":18}}),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.helperText)+\"\\n\\t\")],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"displayName\"\n\t\t:placeholder=\"t('settings', 'Your full name')\"\n\t\t:is-editable=\"displayNameChangeSupported\"\n\t\t:on-validate=\"onValidate\"\n\t\t:on-save=\"onSave\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport { emit } from '@nextcloud/event-bus'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { displayName } = loadState('settings', 'personalInfoParameters', {})\nconst { displayNameChangeSupported } = loadState('settings', 'accountParameters', {})\n\nexport default {\n\tname: 'DisplayNameSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdisplayName: { ...displayName, readable: NAME_READABLE_ENUM[displayName.name] },\n\t\t\tdisplayNameChangeSupported,\n\t\t}\n\t},\n\n\tmethods: {\n\t\tonValidate(value) {\n\t\t\treturn value !== ''\n\t\t},\n\n\t\tonSave(value) {\n\t\t\tif (oc_userconfig.avatar.generated) {\n\t\t\t\t// Update the avatar version so that avatar update handlers refresh correctly\n\t\t\t\toc_userconfig.avatar.version = Date.now()\n\t\t\t}\n\t\t\temit('settings:display-name:updated', value)\n\t\t},\n\t}\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DisplayNameSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DisplayNameSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DisplayNameSection.vue?vue&type=template&id=8950c424&\"\nimport script from \"./DisplayNameSection.vue?vue&type=script&lang=js&\"\nexport * from \"./DisplayNameSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('HeaderBar',{attrs:{\"input-id\":_vm.inputId,\"readable\":_vm.primaryEmail.readable,\"handle-scope-change\":_vm.savePrimaryEmailScope,\"is-editable\":true,\"is-multi-value-supported\":true,\"is-valid-section\":_vm.isValidSection,\"scope\":_vm.primaryEmail.scope},on:{\"update:scope\":function($event){return _vm.$set(_vm.primaryEmail, \"scope\", $event)},\"add-additional\":_vm.onAddAdditionalEmail}}),_vm._v(\" \"),(_vm.displayNameChangeSupported)?[_c('Email',{attrs:{\"primary\":true,\"scope\":_vm.primaryEmail.scope,\"email\":_vm.primaryEmail.value,\"active-notification-email\":_vm.notificationEmail},on:{\"update:scope\":function($event){return _vm.$set(_vm.primaryEmail, \"scope\", $event)},\"update:email\":[function($event){return _vm.$set(_vm.primaryEmail, \"value\", $event)},_vm.onUpdateEmail],\"update:activeNotificationEmail\":function($event){_vm.notificationEmail=$event},\"update:active-notification-email\":function($event){_vm.notificationEmail=$event},\"update:notification-email\":_vm.onUpdateNotificationEmail}})]:_c('span',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.primaryEmail.value || _vm.t('settings', 'No email address set'))+\"\\n\\t\")]),_vm._v(\" \"),(_vm.additionalEmails.length)?[_c('em',{staticClass:\"additional-emails-label\"},[_vm._v(_vm._s(_vm.t('settings', 'Additional emails')))]),_vm._v(\" \"),_vm._l((_vm.additionalEmails),function(additionalEmail,index){return _c('Email',{key:additionalEmail.key,attrs:{\"index\":index,\"scope\":additionalEmail.scope,\"email\":additionalEmail.value,\"local-verification-state\":parseInt(additionalEmail.locallyVerified, 10),\"active-notification-email\":_vm.notificationEmail},on:{\"update:scope\":function($event){return _vm.$set(additionalEmail, \"scope\", $event)},\"update:email\":[function($event){return _vm.$set(additionalEmail, \"value\", $event)},_vm.onUpdateEmail],\"update:activeNotificationEmail\":function($event){_vm.notificationEmail=$event},\"update:active-notification-email\":function($event){_vm.notificationEmail=$event},\"update:notification-email\":_vm.onUpdateNotificationEmail,\"delete-additional-email\":function($event){return _vm.onDeleteAdditionalEmail(index)}}})})]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2021, Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\nimport { ACCOUNT_PROPERTY_ENUM, SCOPE_SUFFIX } from '../../constants/AccountPropertyConstants.js'\n\n/**\n * Save the primary email of the user\n *\n * @param {string} email the primary email\n * @return {object}\n */\nexport const savePrimaryEmail = async (email) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: ACCOUNT_PROPERTY_ENUM.EMAIL,\n\t\tvalue: email,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Save an additional email of the user\n *\n * Will be appended to the user's additional emails*\n *\n * @param {string} email the additional email\n * @return {object}\n */\nexport const saveAdditionalEmail = async (email) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: ACCOUNT_PROPERTY_ENUM.EMAIL_COLLECTION,\n\t\tvalue: email,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Save the notification email of the user\n *\n * @param {string} email the notification email\n * @return {object}\n */\nexport const saveNotificationEmail = async (email) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: ACCOUNT_PROPERTY_ENUM.NOTIFICATION_EMAIL,\n\t\tvalue: email,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Remove an additional email of the user\n *\n * @param {string} email the additional email\n * @return {object}\n */\nexport const removeAdditionalEmail = async (email) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}/{collection}', { userId, collection: ACCOUNT_PROPERTY_ENUM.EMAIL_COLLECTION })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: email,\n\t\tvalue: '',\n\t})\n\n\treturn res.data\n}\n\n/**\n * Update an additional email of the user\n *\n * @param {string} prevEmail the additional email to be updated\n * @param {string} newEmail the new additional email\n * @return {object}\n */\nexport const updateAdditionalEmail = async (prevEmail, newEmail) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}/{collection}', { userId, collection: ACCOUNT_PROPERTY_ENUM.EMAIL_COLLECTION })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: prevEmail,\n\t\tvalue: newEmail,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Save the federation scope for the primary email of the user\n *\n * @param {string} scope the federation scope\n * @return {object}\n */\nexport const savePrimaryEmailScope = async (scope) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: `${ACCOUNT_PROPERTY_ENUM.EMAIL}${SCOPE_SUFFIX}`,\n\t\tvalue: scope,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Save the federation scope for the additional email of the user\n *\n * @param {string} email the additional email\n * @param {string} scope the federation scope\n * @return {object}\n */\nexport const saveAdditionalEmailScope = async (email, scope) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}/{collectionScope}', { userId, collectionScope: `${ACCOUNT_PROPERTY_ENUM.EMAIL_COLLECTION}${SCOPE_SUFFIX}` })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: email,\n\t\tvalue: scope,\n\t})\n\n\treturn res.data\n}\n","/**\n * @copyright 2021, Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/*\n * Frontend validators, less strict than backend validators\n *\n * TODO add nice validation errors for Profile page settings modal\n */\n\nimport { VALIDATE_EMAIL_REGEX } from '../constants/AccountPropertyConstants.js'\n\n/**\n * Validate the email input\n *\n * Compliant with PHP core FILTER_VALIDATE_EMAIL validator*\n *\n * Reference implementation https://github.com/mpyw/FILTER_VALIDATE_EMAIL.js/blob/71e62ca48841d2246a1b531e7e84f5a01f15e615/src/index.ts*\n *\n * @param {string} input the input\n * @return {boolean}\n */\nexport function validateEmail(input) {\n\treturn typeof input === 'string'\n\t\t&& VALIDATE_EMAIL_REGEX.test(input)\n\t\t&& input.slice(-1) !== '\\n'\n\t\t&& input.length <= 320\n\t\t&& encodeURIComponent(input).replace(/%../g, 'x').length <= 320\n}\n\n/**\n * Validate the URL input\n *\n * @param {string} input the input\n * @return {boolean}\n */\nexport function validateUrl(input) {\n\ttry {\n\t\t// eslint-disable-next-line no-new\n\t\tnew URL(input)\n\t\treturn true\n\t} catch (e) {\n\t\treturn false\n\t}\n}\n\n/**\n * Validate the language input\n *\n * @param {object} input the input\n * @return {boolean}\n */\nexport function validateLanguage(input) {\n\treturn input.code !== ''\n\t\t&& input.name !== ''\n\t\t&& input.name !== undefined\n}\n\n/**\n * Validate the locale input\n *\n * @param {object} input the input\n * @return {boolean}\n */\nexport function validateLocale(input) {\n\treturn input.code !== ''\n\t\t&& input.name !== ''\n\t\t&& input.name !== undefined\n}\n\n/**\n * Validate boolean input\n *\n * @param {boolean} input the input\n * @return {boolean}\n */\nexport function validateBoolean(input) {\n\treturn typeof input === 'boolean'\n}\n","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<div>\n\t\t<div class=\"email\">\n\t\t\t<input :id=\"inputId\"\n\t\t\t\tref=\"email\"\n\t\t\t\ttype=\"email\"\n\t\t\t\t:placeholder=\"inputPlaceholder\"\n\t\t\t\t:value=\"email\"\n\t\t\t\t:aria-describedby=\"helperText ? `${inputId}-helper-text` : ''\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\tautocomplete=\"on\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\t@input=\"onEmailChange\">\n\n\t\t\t<div class=\"email__actions-container\">\n\t\t\t\t<transition name=\"fade\">\n\t\t\t\t\t<Check v-if=\"showCheckmarkIcon\" :size=\"20\" />\n\t\t\t\t\t<AlertOctagon v-else-if=\"showErrorIcon\" :size=\"20\" />\n\t\t\t\t</transition>\n\n\t\t\t\t<template v-if=\"!primary\">\n\t\t\t\t\t<FederationControl :readable=\"propertyReadable\"\n\t\t\t\t\t\t:additional=\"true\"\n\t\t\t\t\t\t:additional-value=\"email\"\n\t\t\t\t\t\t:disabled=\"federationDisabled\"\n\t\t\t\t\t\t:handle-additional-scope-change=\"saveAdditionalEmailScope\"\n\t\t\t\t\t\t:scope.sync=\"localScope\"\n\t\t\t\t\t\t@update:scope=\"onScopeChange\" />\n\t\t\t\t</template>\n\n\t\t\t\t<NcActions class=\"email__actions\"\n\t\t\t\t\t:aria-label=\"t('settings', 'Email options')\"\n\t\t\t\t\t:force-menu=\"true\">\n\t\t\t\t\t<NcActionButton :aria-label=\"deleteEmailLabel\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t:disabled=\"deleteDisabled\"\n\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t@click.stop.prevent=\"deleteEmail\">\n\t\t\t\t\t\t{{ deleteEmailLabel }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton v-if=\"!primary || !isNotificationEmail\"\n\t\t\t\t\t\t:aria-label=\"setNotificationMailLabel\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t:disabled=\"setNotificationMailDisabled\"\n\t\t\t\t\t\ticon=\"icon-favorite\"\n\t\t\t\t\t\t@click.stop.prevent=\"setNotificationMail\">\n\t\t\t\t\t\t{{ setNotificationMailLabel }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<p v-if=\"helperText\"\n\t\t\t:id=\"`${inputId}-helper-text`\"\n\t\t\tclass=\"email__helper-text-message email__helper-text-message--error\">\n\t\t\t<AlertCircle class=\"email__helper-text-message__icon\" :size=\"18\" />\n\t\t\t{{ helperText }}\n\t\t</p>\n\n\t\t<em v-if=\"isNotificationEmail\">\n\t\t\t{{ t('settings', 'Primary email for password reset and notifications') }}\n\t\t</em>\n\t</div>\n</template>\n\n<script>\nimport { NcActions, NcActionButton } from '@nextcloud/vue'\nimport AlertCircle from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport AlertOctagon from 'vue-material-design-icons/AlertOctagon.vue'\nimport Check from 'vue-material-design-icons/Check.vue'\nimport debounce from 'debounce'\n\nimport FederationControl from '../shared/FederationControl.vue'\nimport { handleError } from '../../../utils/handlers.js'\n\nimport { ACCOUNT_PROPERTY_READABLE_ENUM, VERIFICATION_ENUM } from '../../../constants/AccountPropertyConstants.js'\nimport {\n\tremoveAdditionalEmail,\n\tsaveAdditionalEmail,\n\tsaveAdditionalEmailScope,\n\tsaveNotificationEmail,\n\tsavePrimaryEmail,\n\tupdateAdditionalEmail,\n} from '../../../service/PersonalInfo/EmailService.js'\nimport { validateEmail } from '../../../utils/validate.js'\n\nexport default {\n\tname: 'Email',\n\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tAlertCircle,\n\t\tAlertOctagon,\n\t\tCheck,\n\t\tFederationControl,\n\t},\n\n\tprops: {\n\t\temail: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t\tprimary: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tscope: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactiveNotificationEmail: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tlocalVerificationState: {\n\t\t\ttype: Number,\n\t\t\tdefault: VERIFICATION_ENUM.NOT_VERIFIED,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tpropertyReadable: ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL,\n\t\t\tinitialEmail: this.email,\n\t\t\tlocalScope: this.scope,\n\t\t\tsaveAdditionalEmailScope,\n\t\t\thelperText: null,\n\t\t\tshowCheckmarkIcon: false,\n\t\t\tshowErrorIcon: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tdeleteDisabled() {\n\t\t\tif (this.primary) {\n\t\t\t\t// Disable for empty primary email as there is nothing to delete\n\t\t\t\t// OR when initialEmail (reflects server state) and email (current input) are not the same\n\t\t\t\treturn this.email === '' || this.initialEmail !== this.email\n\t\t\t} else if (this.initialEmail !== '') {\n\t\t\t\treturn this.initialEmail !== this.email\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\n\t\tdeleteEmailLabel() {\n\t\t\tif (this.primary) {\n\t\t\t\treturn t('settings', 'Remove primary email')\n\t\t\t}\n\t\t\treturn t('settings', 'Delete email')\n\t\t},\n\n\t setNotificationMailDisabled() {\n\t\t\treturn !this.primary && this.localVerificationState !== VERIFICATION_ENUM.VERIFIED\n\t\t},\n\n\t setNotificationMailLabel() {\n\t\t\tif (this.isNotificationEmail) {\n\t\t\t\treturn t('settings', 'Unset as primary email')\n\t\t\t} else if (!this.primary && this.localVerificationState !== VERIFICATION_ENUM.VERIFIED) {\n\t\t\t\treturn t('settings', 'This address is not confirmed')\n\t\t\t}\n\t\t\treturn t('settings', 'Set as primary email')\n\t\t},\n\n\t\tfederationDisabled() {\n\t\t\treturn !this.initialEmail\n\t\t},\n\n\t\tinputId() {\n\t\t\tif (this.primary) {\n\t\t\t\treturn 'email'\n\t\t\t}\n\t\t\treturn `email-${this.index}`\n\t\t},\n\n\t\tinputPlaceholder() {\n\t\t\tif (this.primary) {\n\t\t\t\treturn t('settings', 'Your email address')\n\t\t\t}\n\t\t\treturn t('settings', 'Additional email address {index}', { index: this.index + 1 })\n\t\t},\n\n\t\tisNotificationEmail() {\n\t\t\treturn (this.email && this.email === this.activeNotificationEmail)\n\t\t\t\t|| (this.primary && this.activeNotificationEmail === '')\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (!this.primary && this.initialEmail === '') {\n\t\t\t// $nextTick is needed here, otherwise it may not always work https://stackoverflow.com/questions/51922767/autofocus-input-on-mount-vue-ios/63485725#63485725\n\t\t\tthis.$nextTick(() => this.$refs.email?.focus())\n\t\t}\n\t},\n\n\tmethods: {\n\t\tonEmailChange(e) {\n\t\t\tthis.$emit('update:email', e.target.value)\n\t\t\tthis.debounceEmailChange(e.target.value.trim())\n\t\t},\n\n\t\tdebounceEmailChange: debounce(async function(email) {\n\t\t\tthis.helperText = null\n\t\t\tif (this.$refs.email?.validationMessage) {\n\t\t\t\tthis.helperText = this.$refs.email.validationMessage\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (validateEmail(email) || email === '') {\n\t\t\t\tif (this.primary) {\n\t\t\t\t\tawait this.updatePrimaryEmail(email)\n\t\t\t\t} else {\n\t\t\t\t\tif (email) {\n\t\t\t\t\t\tif (this.initialEmail === '') {\n\t\t\t\t\t\t\tawait this.addAdditionalEmail(email)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait this.updateAdditionalEmail(email)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 500),\n\n\t\tasync deleteEmail() {\n\t\t\tif (this.primary) {\n\t\t\t\tthis.$emit('update:email', '')\n\t\t\t\tawait this.updatePrimaryEmail('')\n\t\t\t} else {\n\t\t\t\tawait this.deleteAdditionalEmail()\n\t\t\t}\n\t\t},\n\n\t\tasync updatePrimaryEmail(email) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryEmail(email)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\temail,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tif (email === '') {\n\t\t\t\t\tthis.handleResponse({\n\t\t\t\t\t\terrorMessage: t('settings', 'Unable to delete primary email address'),\n\t\t\t\t\t\terror: e,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tthis.handleResponse({\n\t\t\t\t\t\terrorMessage: t('settings', 'Unable to update primary email address'),\n\t\t\t\t\t\terror: e,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tasync addAdditionalEmail(email) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await saveAdditionalEmail(email)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\temail,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to add additional email address'),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tasync setNotificationMail() {\n\t\t try {\n\t\t\t const newNotificationMailValue = (this.primary || this.isNotificationEmail) ? '' : this.initialEmail\n\t\t\t const responseData = await saveNotificationEmail(newNotificationMailValue)\n\t\t\t this.handleResponse({\n\t\t\t\t notificationEmail: newNotificationMailValue,\n\t\t\t\t status: responseData.ocs?.meta?.status,\n\t\t\t })\n\t\t } catch (e) {\n\t\t\t this.handleResponse({\n\t\t\t\t errorMessage: 'Unable to choose this email for notifications',\n\t\t\t\t error: e,\n\t\t\t })\n\t\t }\n\t\t},\n\n\t\tasync updateAdditionalEmail(email) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await updateAdditionalEmail(this.initialEmail, email)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\temail,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update additional email address'),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tasync deleteAdditionalEmail() {\n\t\t\ttry {\n\t\t\t\tconst responseData = await removeAdditionalEmail(this.initialEmail)\n\t\t\t\tthis.handleDeleteAdditionalEmail(responseData.ocs?.meta?.status)\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to delete additional email address'),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\thandleDeleteAdditionalEmail(status) {\n\t\t\tif (status === 'ok') {\n\t\t\t\tthis.$emit('delete-additional-email')\n\t\t\t} else {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to delete additional email address'),\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ email, notificationEmail, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\t// Ensure that local state reflects server state\n\t\t\t\tif (email) {\n\t\t\t\t\tthis.initialEmail = email\n\t\t\t\t} else if (notificationEmail !== undefined) {\n\t\t\t\t\tthis.$emit('update:notification-email', notificationEmail)\n\t\t\t\t}\n\t\t\t\tthis.showCheckmarkIcon = true\n\t\t\t\tsetTimeout(() => { this.showCheckmarkIcon = false }, 2000)\n\t\t\t} else {\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t\tthis.showErrorIcon = true\n\t\t\t\tsetTimeout(() => { this.showErrorIcon = false }, 2000)\n\t\t\t}\n\t\t},\n\n\t\tonScopeChange(scope) {\n\t\t\tthis.$emit('update:scope', scope)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.email {\n\tdisplay: grid;\n\talign-items: center;\n\n\tinput {\n\t\tgrid-area: 1 / 1;\n\t\twidth: 100%;\n\t}\n\n\t.email__actions-container {\n\t\tgrid-area: 1 / 1;\n\t\tjustify-self: flex-end;\n\t\theight: 30px;\n\n\t\tdisplay: flex;\n\t\tgap: 0 2px;\n\t\tmargin-right: 5px;\n\n\t\t.email__actions {\n\t\t\topacity: 0.4 !important;\n\n\t\t\t&:hover,\n\t\t\t&:focus,\n\t\t\t&:active {\n\t\t\t\topacity: 0.8 !important;\n\t\t\t}\n\n\t\t\t&::v-deep button {\n\t\t\t\theight: 30px !important;\n\t\t\t\tmin-height: 30px !important;\n\t\t\t\twidth: 30px !important;\n\t\t\t\tmin-width: 30px !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__helper-text-message {\n\t\tpadding: 4px 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t&__icon {\n\t\t\tmargin-right: 8px;\n\t\t\talign-self: start;\n\t\t\tmargin-top: 4px;\n\t\t}\n\n\t\t&--error {\n\t\t\tcolor: var(--color-error);\n\t\t}\n\t}\n}\n\n.fade-enter,\n.fade-leave-to {\n\topacity: 0;\n}\n\n.fade-enter-active {\n\ttransition: opacity 200ms ease-out;\n}\n\n.fade-leave-active {\n\ttransition: opacity 300ms ease-out;\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Email.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Email.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Email.vue?vue&type=style&index=0&id=5ff85d38&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Email.vue?vue&type=style&index=0&id=5ff85d38&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Email.vue?vue&type=template&id=5ff85d38&scoped=true&\"\nimport script from \"./Email.vue?vue&type=script&lang=js&\"\nexport * from \"./Email.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Email.vue?vue&type=style&index=0&id=5ff85d38&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5ff85d38\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"email\"},[_c('input',{ref:\"email\",attrs:{\"id\":_vm.inputId,\"type\":\"email\",\"placeholder\":_vm.inputPlaceholder,\"aria-describedby\":_vm.helperText ? `${_vm.inputId}-helper-text` : '',\"autocapitalize\":\"none\",\"autocomplete\":\"on\",\"autocorrect\":\"off\"},domProps:{\"value\":_vm.email},on:{\"input\":_vm.onEmailChange}}),_vm._v(\" \"),_c('div',{staticClass:\"email__actions-container\"},[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.showCheckmarkIcon)?_c('Check',{attrs:{\"size\":20}}):(_vm.showErrorIcon)?_c('AlertOctagon',{attrs:{\"size\":20}}):_vm._e()],1),_vm._v(\" \"),(!_vm.primary)?[_c('FederationControl',{attrs:{\"readable\":_vm.propertyReadable,\"additional\":true,\"additional-value\":_vm.email,\"disabled\":_vm.federationDisabled,\"handle-additional-scope-change\":_vm.saveAdditionalEmailScope,\"scope\":_vm.localScope},on:{\"update:scope\":[function($event){_vm.localScope=$event},_vm.onScopeChange]}})]:_vm._e(),_vm._v(\" \"),_c('NcActions',{staticClass:\"email__actions\",attrs:{\"aria-label\":_vm.t('settings', 'Email options'),\"force-menu\":true}},[_c('NcActionButton',{attrs:{\"aria-label\":_vm.deleteEmailLabel,\"close-after-click\":true,\"disabled\":_vm.deleteDisabled,\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.deleteEmail.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.deleteEmailLabel)+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(!_vm.primary || !_vm.isNotificationEmail)?_c('NcActionButton',{attrs:{\"aria-label\":_vm.setNotificationMailLabel,\"close-after-click\":true,\"disabled\":_vm.setNotificationMailDisabled,\"icon\":\"icon-favorite\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.setNotificationMail.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.setNotificationMailLabel)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1)],2)]),_vm._v(\" \"),(_vm.helperText)?_c('p',{staticClass:\"email__helper-text-message email__helper-text-message--error\",attrs:{\"id\":`${_vm.inputId}-helper-text`}},[_c('AlertCircle',{staticClass:\"email__helper-text-message__icon\",attrs:{\"size\":18}}),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.helperText)+\"\\n\\t\")],1):_vm._e(),_vm._v(\" \"),(_vm.isNotificationEmail)?_c('em',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Primary email for password reset and notifications'))+\"\\n\\t\")]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section>\n\t\t<HeaderBar :input-id=\"inputId\"\n\t\t\t:readable=\"primaryEmail.readable\"\n\t\t\t:handle-scope-change=\"savePrimaryEmailScope\"\n\t\t\t:is-editable=\"true\"\n\t\t\t:is-multi-value-supported=\"true\"\n\t\t\t:is-valid-section=\"isValidSection\"\n\t\t\t:scope.sync=\"primaryEmail.scope\"\n\t\t\t@add-additional=\"onAddAdditionalEmail\" />\n\n\t\t<template v-if=\"displayNameChangeSupported\">\n\t\t\t<Email :primary=\"true\"\n\t\t\t\t:scope.sync=\"primaryEmail.scope\"\n\t\t\t\t:email.sync=\"primaryEmail.value\"\n\t\t\t\t:active-notification-email.sync=\"notificationEmail\"\n\t\t\t\t@update:email=\"onUpdateEmail\"\n\t\t\t\t@update:notification-email=\"onUpdateNotificationEmail\" />\n\t\t</template>\n\n\t\t<span v-else>\n\t\t\t{{ primaryEmail.value || t('settings', 'No email address set') }}\n\t\t</span>\n\n\t\t<template v-if=\"additionalEmails.length\">\n\t\t\t<em class=\"additional-emails-label\">{{ t('settings', 'Additional emails') }}</em>\n\t\t\t<!-- TODO use unique key for additional email when uniqueness can be guaranteed, see https://github.com/nextcloud/server/issues/26866 -->\n\t\t\t<Email v-for=\"(additionalEmail, index) in additionalEmails\"\n\t\t\t\t:key=\"additionalEmail.key\"\n\t\t\t\t:index=\"index\"\n\t\t\t\t:scope.sync=\"additionalEmail.scope\"\n\t\t\t\t:email.sync=\"additionalEmail.value\"\n\t\t\t\t:local-verification-state=\"parseInt(additionalEmail.locallyVerified, 10)\"\n\t\t\t\t:active-notification-email.sync=\"notificationEmail\"\n\t\t\t\t@update:email=\"onUpdateEmail\"\n\t\t\t\t@update:notification-email=\"onUpdateNotificationEmail\"\n\t\t\t\t@delete-additional-email=\"onDeleteAdditionalEmail(index)\" />\n\t\t</template>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport Email from './Email.vue'\nimport HeaderBar from '../shared/HeaderBar.vue'\n\nimport { ACCOUNT_PROPERTY_READABLE_ENUM, DEFAULT_ADDITIONAL_EMAIL_SCOPE, NAME_READABLE_ENUM } from '../../../constants/AccountPropertyConstants.js'\nimport { savePrimaryEmail, savePrimaryEmailScope, removeAdditionalEmail } from '../../../service/PersonalInfo/EmailService.js'\nimport { validateEmail } from '../../../utils/validate.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nconst { emailMap: { additionalEmails, primaryEmail, notificationEmail } } = loadState('settings', 'personalInfoParameters', {})\nconst { displayNameChangeSupported } = loadState('settings', 'accountParameters', {})\n\nexport default {\n\tname: 'EmailSection',\n\n\tcomponents: {\n\t\tHeaderBar,\n\t\tEmail,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\taccountProperty: ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL,\n\t\t\tadditionalEmails: additionalEmails.map(properties => ({ ...properties, key: this.generateUniqueKey() })),\n\t\t\tdisplayNameChangeSupported,\n\t\t\tprimaryEmail: { ...primaryEmail, readable: NAME_READABLE_ENUM[primaryEmail.name] },\n\t\t\tsavePrimaryEmailScope,\n\t\t\tnotificationEmail,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tfirstAdditionalEmail() {\n\t\t\tif (this.additionalEmails.length) {\n\t\t\t\treturn this.additionalEmails[0].value\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\tinputId() {\n\t\t\treturn `account-property-${this.primaryEmail.name}`\n\t\t},\n\n\t\tisValidSection() {\n\t\t\treturn validateEmail(this.primaryEmail.value)\n\t\t\t\t&& this.additionalEmails.map(({ value }) => value).every(validateEmail)\n\t\t},\n\n\t\tprimaryEmailValue: {\n\t\t\tget() {\n\t\t\t\treturn this.primaryEmail.value\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.primaryEmail.value = value\n\t\t\t},\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonAddAdditionalEmail() {\n\t\t\tif (this.isValidSection) {\n\t\t\t\tthis.additionalEmails.push({ value: '', scope: DEFAULT_ADDITIONAL_EMAIL_SCOPE, key: this.generateUniqueKey() })\n\t\t\t}\n\t\t},\n\n\t\tonDeleteAdditionalEmail(index) {\n\t\t\tthis.$delete(this.additionalEmails, index)\n\t\t},\n\n\t\tasync onUpdateEmail() {\n\t\t\tif (this.primaryEmailValue === '' && this.firstAdditionalEmail) {\n\t\t\t\tconst deletedEmail = this.firstAdditionalEmail\n\t\t\t\tawait this.deleteFirstAdditionalEmail()\n\t\t\t\tthis.primaryEmailValue = deletedEmail\n\t\t\t\tawait this.updatePrimaryEmail()\n\t\t\t}\n\t\t},\n\n\t\tasync onUpdateNotificationEmail(email) {\n\t\t\tthis.notificationEmail = email\n\t\t},\n\n\t\tasync updatePrimaryEmail() {\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryEmail(this.primaryEmailValue)\n\t\t\t\tthis.handleResponse(responseData.ocs?.meta?.status)\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse(\n\t\t\t\t\t'error',\n\t\t\t\t\tt('settings', 'Unable to update primary email address'),\n\t\t\t\t\te\n\t\t\t\t)\n\t\t\t}\n\t\t},\n\n\t\tasync deleteFirstAdditionalEmail() {\n\t\t\ttry {\n\t\t\t\tconst responseData = await removeAdditionalEmail(this.firstAdditionalEmail)\n\t\t\t\tthis.handleDeleteFirstAdditionalEmail(responseData.ocs?.meta?.status)\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse(\n\t\t\t\t\t'error',\n\t\t\t\t\tt('settings', 'Unable to delete additional email address'),\n\t\t\t\t\te\n\t\t\t\t)\n\t\t\t}\n\t\t},\n\n\t\thandleDeleteFirstAdditionalEmail(status) {\n\t\t\tif (status === 'ok') {\n\t\t\t\tthis.$delete(this.additionalEmails, 0)\n\t\t\t} else {\n\t\t\t\tthis.handleResponse(\n\t\t\t\t\t'error',\n\t\t\t\t\tt('settings', 'Unable to delete additional email address'),\n\t\t\t\t\t{}\n\t\t\t\t)\n\t\t\t}\n\t\t},\n\n\t\thandleResponse(status, errorMessage, error) {\n\t\t\tif (status !== 'ok') {\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t}\n\t\t},\n\n\t\tgenerateUniqueKey() {\n\t\t\treturn Math.random().toString(36).substring(2)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n\n\t.additional-emails-label {\n\t\tdisplay: block;\n\t\tmargin-top: 16px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailSection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailSection.vue?vue&type=style&index=0&id=46c7eb7e&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailSection.vue?vue&type=style&index=0&id=46c7eb7e&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./EmailSection.vue?vue&type=template&id=46c7eb7e&scoped=true&\"\nimport script from \"./EmailSection.vue?vue&type=script&lang=js&\"\nexport * from \"./EmailSection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EmailSection.vue?vue&type=style&index=0&id=46c7eb7e&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"46c7eb7e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your phone number'),\"type\":\"tel\",\"on-validate\":_vm.onValidate}},'AccountPropertySection',_vm.phone,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"phone\"\n\t\t:placeholder=\"t('settings', 'Your phone number')\"\n\t\ttype=\"tel\"\n\t\t:on-validate=\"onValidate\" />\n</template>\n\n<script>\nimport { isValidPhoneNumber } from 'libphonenumber-js'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst {\n\tdefaultPhoneRegion,\n\tphone,\n} = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'PhoneSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tphone: { ...phone, readable: NAME_READABLE_ENUM[phone.name] },\n\t\t}\n\t},\n\n\tmethods: {\n\t\tonValidate(value) {\n\t\t\tif (defaultPhoneRegion) {\n\t\t\t\treturn isValidPhoneNumber(value, defaultPhoneRegion)\n\t\t\t}\n\t\t\treturn isValidPhoneNumber(value)\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PhoneSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PhoneSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PhoneSection.vue?vue&type=template&id=4a6cc7c9&\"\nimport script from \"./PhoneSection.vue?vue&type=script&lang=js&\"\nexport * from \"./PhoneSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"location\"\n\t\t:placeholder=\"t('settings', 'Your location')\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { location } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'LocationSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tlocation: { ...location, readable: NAME_READABLE_ENUM[location.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocationSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocationSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LocationSection.vue?vue&type=template&id=3b6d0ee7&\"\nimport script from \"./LocationSection.vue?vue&type=script&lang=js&\"\nexport * from \"./LocationSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your location')}},'AccountPropertySection',_vm.location,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"website\"\n\t\t:placeholder=\"t('settings', 'Your website')\"\n\t\ttype=\"url\"\n\t\t:on-validate=\"onValidate\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\nimport { validateUrl } from '../../utils/validate.js'\n\nconst { website } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'WebsiteSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\twebsite: { ...website, readable: NAME_READABLE_ENUM[website.name] },\n\t\t}\n\t},\n\n\tmethods: {\n\t\tonValidate(value) {\n\t\t\treturn validateUrl(value)\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WebsiteSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WebsiteSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./WebsiteSection.vue?vue&type=template&id=b18d14ae&\"\nimport script from \"./WebsiteSection.vue?vue&type=script&lang=js&\"\nexport * from \"./WebsiteSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your website'),\"type\":\"url\",\"on-validate\":_vm.onValidate}},'AccountPropertySection',_vm.website,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"twitter\"\n\t\t:placeholder=\"t('settings', 'Your Twitter handle')\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { twitter } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'TwitterSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\ttwitter: { ...twitter, readable: NAME_READABLE_ENUM[twitter.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TwitterSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TwitterSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TwitterSection.vue?vue&type=template&id=203feaef&\"\nimport script from \"./TwitterSection.vue?vue&type=script&lang=js&\"\nexport * from \"./TwitterSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your Twitter handle')}},'AccountPropertySection',_vm.twitter,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"fediverse\"\n\t\t:placeholder=\"t('settings', 'Your handle')\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { fediverse } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'FediverseSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfediverse: { ...fediverse, readable: NAME_READABLE_ENUM[fediverse.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FediverseSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FediverseSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FediverseSection.vue?vue&type=template&id=78433a38&\"\nimport script from \"./FediverseSection.vue?vue&type=script&lang=js&\"\nexport * from \"./FediverseSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your handle')}},'AccountPropertySection',_vm.fediverse,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Language.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Language.vue?vue&type=script&lang=js&\"","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<div class=\"language\">\n\t\t<select :id=\"inputId\"\n\t\t\t:placeholder=\"t('settings', 'Language')\"\n\t\t\t@change=\"onLanguageChange\">\n\t\t\t<option v-for=\"commonLanguage in commonLanguages\"\n\t\t\t\t:key=\"commonLanguage.code\"\n\t\t\t\t:selected=\"language.code === commonLanguage.code\"\n\t\t\t\t:value=\"commonLanguage.code\">\n\t\t\t\t{{ commonLanguage.name }}\n\t\t\t</option>\n\t\t\t<option disabled>\n\t\t\t\t──────────\n\t\t\t</option>\n\t\t\t<option v-for=\"otherLanguage in otherLanguages\"\n\t\t\t\t:key=\"otherLanguage.code\"\n\t\t\t\t:selected=\"language.code === otherLanguage.code\"\n\t\t\t\t:value=\"otherLanguage.code\">\n\t\t\t\t{{ otherLanguage.name }}\n\t\t\t</option>\n\t\t</select>\n\n\t\t<a href=\"https://www.transifex.com/nextcloud/nextcloud/\"\n\t\t\ttarget=\"_blank\"\n\t\t\trel=\"noreferrer noopener\">\n\t\t\t<em>{{ t('settings', 'Help translate') }}</em>\n\t\t</a>\n\t</div>\n</template>\n\n<script>\nimport { ACCOUNT_SETTING_PROPERTY_ENUM } from '../../../constants/AccountPropertyConstants.js'\nimport { savePrimaryAccountProperty } from '../../../service/PersonalInfo/PersonalInfoService.js'\nimport { validateLanguage } from '../../../utils/validate.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nexport default {\n\tname: 'Language',\n\n\tprops: {\n\t\tinputId: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tcommonLanguages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\totherLanguages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tlanguage: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tinitialLanguage: this.language,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tallLanguages() {\n\t\t\treturn Object.freeze(\n\t\t\t\t[...this.commonLanguages, ...this.otherLanguages]\n\t\t\t\t\t.reduce((acc, { code, name }) => ({ ...acc, [code]: name }), {})\n\t\t\t)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync onLanguageChange(e) {\n\t\t\tconst language = this.constructLanguage(e.target.value)\n\t\t\tthis.$emit('update:language', language)\n\n\t\t\tif (validateLanguage(language)) {\n\t\t\t\tawait this.updateLanguage(language)\n\t\t\t}\n\t\t},\n\n\t\tasync updateLanguage(language) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryAccountProperty(ACCOUNT_SETTING_PROPERTY_ENUM.LANGUAGE, language.code)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tlanguage,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t\tthis.reloadPage()\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update language'),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tconstructLanguage(languageCode) {\n\t\t\treturn {\n\t\t\t\tcode: languageCode,\n\t\t\t\tname: this.allLanguages[languageCode],\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ language, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\t// Ensure that local state reflects server state\n\t\t\t\tthis.initialLanguage = language\n\t\t\t} else {\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t}\n\t\t},\n\n\t\treloadPage() {\n\t\t\tlocation.reload()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.language {\n\tdisplay: grid;\n\n\tselect {\n\t\twidth: 100%;\n\t}\n\n\ta {\n\t\tcolor: var(--color-main-text);\n\t\ttext-decoration: none;\n\t\twidth: max-content;\n\t}\n}\n</style>\n","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Language.vue?vue&type=style&index=0&id=5c847b3a&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Language.vue?vue&type=style&index=0&id=5c847b3a&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Language.vue?vue&type=template&id=5c847b3a&scoped=true&\"\nimport script from \"./Language.vue?vue&type=script&lang=js&\"\nexport * from \"./Language.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Language.vue?vue&type=style&index=0&id=5c847b3a&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5c847b3a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"language\"},[_c('select',{attrs:{\"id\":_vm.inputId,\"placeholder\":_vm.t('settings', 'Language')},on:{\"change\":_vm.onLanguageChange}},[_vm._l((_vm.commonLanguages),function(commonLanguage){return _c('option',{key:commonLanguage.code,domProps:{\"selected\":_vm.language.code === commonLanguage.code,\"value\":commonLanguage.code}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(commonLanguage.name)+\"\\n\\t\\t\")])}),_vm._v(\" \"),_c('option',{attrs:{\"disabled\":\"\"}},[_vm._v(\"\\n\\t\\t\\t──────────\\n\\t\\t\")]),_vm._v(\" \"),_vm._l((_vm.otherLanguages),function(otherLanguage){return _c('option',{key:otherLanguage.code,domProps:{\"selected\":_vm.language.code === otherLanguage.code,\"value\":otherLanguage.code}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(otherLanguage.name)+\"\\n\\t\\t\")])})],2),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"https://www.transifex.com/nextcloud/nextcloud/\",\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_c('em',[_vm._v(_vm._s(_vm.t('settings', 'Help translate')))])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section>\n\t\t<HeaderBar :input-id=\"inputId\"\n\t\t\t:readable=\"propertyReadable\" />\n\n\t\t<template v-if=\"isEditable\">\n\t\t\t<Language :input-id=\"inputId\"\n\t\t\t\t:common-languages=\"commonLanguages\"\n\t\t\t\t:other-languages=\"otherLanguages\"\n\t\t\t\t:language.sync=\"language\" />\n\t\t</template>\n\n\t\t<span v-else>\n\t\t\t{{ t('settings', 'No language set') }}\n\t\t</span>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport Language from './Language.vue'\nimport HeaderBar from '../shared/HeaderBar.vue'\n\nimport { ACCOUNT_SETTING_PROPERTY_ENUM, ACCOUNT_SETTING_PROPERTY_READABLE_ENUM } from '../../../constants/AccountPropertyConstants.js'\n\nconst { languageMap: { activeLanguage, commonLanguages, otherLanguages } } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'LanguageSection',\n\n\tcomponents: {\n\t\tLanguage,\n\t\tHeaderBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tpropertyReadable: ACCOUNT_SETTING_PROPERTY_READABLE_ENUM.LANGUAGE,\n\t\t\tcommonLanguages,\n\t\t\totherLanguages,\n\t\t\tlanguage: activeLanguage,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tinputId() {\n\t\t\treturn `account-setting-${ACCOUNT_SETTING_PROPERTY_ENUM.LANGUAGE}`\n\t\t},\n\n\t\tisEditable() {\n\t\t\treturn Boolean(this.language)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LanguageSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LanguageSection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LanguageSection.vue?vue&type=style&index=0&id=92685b76&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LanguageSection.vue?vue&type=style&index=0&id=92685b76&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LanguageSection.vue?vue&type=template&id=92685b76&scoped=true&\"\nimport script from \"./LanguageSection.vue?vue&type=script&lang=js&\"\nexport * from \"./LanguageSection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LanguageSection.vue?vue&type=style&index=0&id=92685b76&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"92685b76\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('HeaderBar',{attrs:{\"input-id\":_vm.inputId,\"readable\":_vm.propertyReadable}}),_vm._v(\" \"),(_vm.isEditable)?[_c('Language',{attrs:{\"input-id\":_vm.inputId,\"common-languages\":_vm.commonLanguages,\"other-languages\":_vm.otherLanguages,\"language\":_vm.language},on:{\"update:language\":function($event){_vm.language=$event}}})]:_c('span',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'No language set'))+\"\\n\\t\")])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('HeaderBar',{attrs:{\"input-id\":_vm.inputId,\"readable\":_vm.propertyReadable}}),_vm._v(\" \"),(_vm.isEditable)?[_c('Locale',{attrs:{\"input-id\":_vm.inputId,\"locales-for-language\":_vm.localesForLanguage,\"other-locales\":_vm.otherLocales,\"locale\":_vm.locale},on:{\"update:locale\":function($event){_vm.locale=$event}}})]:_c('span',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'No locale set'))+\"\\n\\t\")])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<div class=\"locale\">\n\t\t<select :id=\"inputId\"\n\t\t\t:placeholder=\"t('settings', 'Locale')\"\n\t\t\t@change=\"onLocaleChange\">\n\t\t\t<option v-for=\"currentLocale in localesForLanguage\"\n\t\t\t\t:key=\"currentLocale.code\"\n\t\t\t\t:selected=\"locale.code === currentLocale.code\"\n\t\t\t\t:value=\"currentLocale.code\">\n\t\t\t\t{{ currentLocale.name }}\n\t\t\t</option>\n\t\t\t<option disabled>\n\t\t\t\t──────────\n\t\t\t</option>\n\t\t\t<option v-for=\"currentLocale in otherLocales\"\n\t\t\t\t:key=\"currentLocale.code\"\n\t\t\t\t:selected=\"locale.code === currentLocale.code\"\n\t\t\t\t:value=\"currentLocale.code\">\n\t\t\t\t{{ currentLocale.name }}\n\t\t\t</option>\n\t\t</select>\n\n\t\t<div class=\"example\">\n\t\t\t<Web :size=\"20\" />\n\t\t\t<div class=\"example__text\">\n\t\t\t\t<p>\n\t\t\t\t\t<span>{{ example.date }}</span>\n\t\t\t\t\t<span>{{ example.time }}</span>\n\t\t\t\t</p>\n\t\t\t\t<p>\n\t\t\t\t\t{{ t('settings', 'Week starts on {firstDayOfWeek}', { firstDayOfWeek: this.example.firstDayOfWeek }) }}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport moment from '@nextcloud/moment'\nimport Web from 'vue-material-design-icons/Web.vue'\n\nimport { ACCOUNT_SETTING_PROPERTY_ENUM } from '../../../constants/AccountPropertyConstants.js'\nimport { savePrimaryAccountProperty } from '../../../service/PersonalInfo/PersonalInfoService.js'\nimport { validateLocale } from '../../../utils/validate.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nexport default {\n\tname: 'Locale',\n\n\tcomponents: {\n\t\tWeb,\n\t},\n\n\tprops: {\n\t\tinputId: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tlocale: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tlocalesForLanguage: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\totherLocales: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tinitialLocale: this.locale,\n\t\t\texample: {\n\t\t\t\tdate: moment().format('L'),\n\t\t\t\ttime: moment().format('LTS'),\n\t\t\t\tfirstDayOfWeek: window.dayNames[window.firstDay],\n\t\t\t},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tallLocales() {\n\t\t\treturn Object.freeze(\n\t\t\t\t[...this.localesForLanguage, ...this.otherLocales]\n\t\t\t\t\t.reduce((acc, { code, name }) => ({ ...acc, [code]: name }), {})\n\t\t\t)\n\t\t},\n\t},\n\n\tcreated() {\n\t\tsetInterval(this.refreshExample, 1000)\n\t},\n\n\tmethods: {\n\t\tasync onLocaleChange(e) {\n\t\t\tconst locale = this.constructLocale(e.target.value)\n\t\t\tthis.$emit('update:locale', locale)\n\n\t\t\tif (validateLocale(locale)) {\n\t\t\t\tawait this.updateLocale(locale)\n\t\t\t}\n\t\t},\n\n\t\tasync updateLocale(locale) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryAccountProperty(ACCOUNT_SETTING_PROPERTY_ENUM.LOCALE, locale.code)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tlocale,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t\tthis.reloadPage()\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update locale'),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tconstructLocale(localeCode) {\n\t\t\treturn {\n\t\t\t\tcode: localeCode,\n\t\t\t\tname: this.allLocales[localeCode],\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ locale, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\tthis.initialLocale = locale\n\t\t\t} else {\n\t\t\t\tthis.$emit('update:locale', this.initialLocale)\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t}\n\t\t},\n\n\t\trefreshExample() {\n\t\t\tthis.example = {\n\t\t\t\tdate: moment().format('L'),\n\t\t\t\ttime: moment().format('LTS'),\n\t\t\t\tfirstDayOfWeek: window.dayNames[window.firstDay],\n\t\t\t}\n\t\t},\n\n\t\treloadPage() {\n\t\t\tlocation.reload()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.locale {\n\tdisplay: grid;\n\n\tselect {\n\t\twidth: 100%;\n\t}\n}\n\n.example {\n\tmargin: 10px 0;\n\tdisplay: flex;\n\tgap: 0 10px;\n\tcolor: var(--color-text-lighter);\n\n\t&::v-deep .material-design-icon {\n\t\talign-self: flex-start;\n\t\tmargin-top: 2px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Locale.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Locale.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Locale.vue?vue&type=style&index=0&id=1ac456dc&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Locale.vue?vue&type=style&index=0&id=1ac456dc&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Locale.vue?vue&type=template&id=1ac456dc&scoped=true&\"\nimport script from \"./Locale.vue?vue&type=script&lang=js&\"\nexport * from \"./Locale.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Locale.vue?vue&type=style&index=0&id=1ac456dc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1ac456dc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"locale\"},[_c('select',{attrs:{\"id\":_vm.inputId,\"placeholder\":_vm.t('settings', 'Locale')},on:{\"change\":_vm.onLocaleChange}},[_vm._l((_vm.localesForLanguage),function(currentLocale){return _c('option',{key:currentLocale.code,domProps:{\"selected\":_vm.locale.code === currentLocale.code,\"value\":currentLocale.code}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(currentLocale.name)+\"\\n\\t\\t\")])}),_vm._v(\" \"),_c('option',{attrs:{\"disabled\":\"\"}},[_vm._v(\"\\n\\t\\t\\t──────────\\n\\t\\t\")]),_vm._v(\" \"),_vm._l((_vm.otherLocales),function(currentLocale){return _c('option',{key:currentLocale.code,domProps:{\"selected\":_vm.locale.code === currentLocale.code,\"value\":currentLocale.code}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(currentLocale.name)+\"\\n\\t\\t\")])})],2),_vm._v(\" \"),_c('div',{staticClass:\"example\"},[_c('Web',{attrs:{\"size\":20}}),_vm._v(\" \"),_c('div',{staticClass:\"example__text\"},[_c('p',[_c('span',[_vm._v(_vm._s(_vm.example.date))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.example.time))])]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Week starts on {firstDayOfWeek}', { firstDayOfWeek: this.example.firstDayOfWeek }))+\"\\n\\t\\t\\t\")])])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section>\n\t\t<HeaderBar :input-id=\"inputId\"\n\t\t\t:readable=\"propertyReadable\" />\n\n\t\t<template v-if=\"isEditable\">\n\t\t\t<Locale :input-id=\"inputId\"\n\t\t\t\t:locales-for-language=\"localesForLanguage\"\n\t\t\t\t:other-locales=\"otherLocales\"\n\t\t\t\t:locale.sync=\"locale\" />\n\t\t</template>\n\n\t\t<span v-else>\n\t\t\t{{ t('settings', 'No locale set') }}\n\t\t</span>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport Locale from './Locale.vue'\nimport HeaderBar from '../shared/HeaderBar.vue'\n\nimport { ACCOUNT_SETTING_PROPERTY_ENUM, ACCOUNT_SETTING_PROPERTY_READABLE_ENUM } from '../../../constants/AccountPropertyConstants.js'\n\nconst { localeMap: { activeLocale, localesForLanguage, otherLocales } } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'LocaleSection',\n\n\tcomponents: {\n\t\tLocale,\n\t\tHeaderBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tpropertyReadable: ACCOUNT_SETTING_PROPERTY_READABLE_ENUM.LOCALE,\n\t\t\tlocalesForLanguage,\n\t\t\totherLocales,\n\t\t\tlocale: activeLocale,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tinputId() {\n\t\t\treturn `account-setting-${ACCOUNT_SETTING_PROPERTY_ENUM.LOCALE}`\n\t\t},\n\n\t\tisEditable() {\n\t\t\treturn Boolean(this.locale)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocaleSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocaleSection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocaleSection.vue?vue&type=style&index=0&id=84fca724&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocaleSection.vue?vue&type=style&index=0&id=84fca724&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LocaleSection.vue?vue&type=template&id=84fca724&scoped=true&\"\nimport script from \"./LocaleSection.vue?vue&type=script&lang=js&\"\nexport * from \"./LocaleSection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LocaleSection.vue?vue&type=style&index=0&id=84fca724&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"84fca724\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProfileAnchorLink.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProfileAnchorLink.vue?vue&type=script&lang=js&\"","<!--\n\t- @copyright 2021 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<a :class=\"{ disabled }\"\n\t\thref=\"#profile-visibility\"\n\t\tv-on=\"$listeners\">\n\t\t<ChevronDownIcon class=\"anchor-icon\"\n\t\t\t:size=\"22\" />\n\t\t{{ t('settings', 'Edit your Profile visibility') }}\n\t</a>\n</template>\n\n<script>\nimport ChevronDownIcon from 'vue-material-design-icons/ChevronDown.vue'\n\nexport default {\n\tname: 'EditProfileAnchorLink',\n\n\tcomponents: {\n\t\tChevronDownIcon,\n\t},\n\n\tprops: {\n\t\tprofileEnabled: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tdisabled() {\n\t\t\treturn !this.profileEnabled\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\nhtml {\n\tscroll-behavior: smooth;\n\n\t@media screen and (prefers-reduced-motion: reduce) {\n\t\tscroll-behavior: auto;\n\t}\n}\n</style>\n\n<style lang=\"scss\" scoped>\na {\n\tdisplay: block;\n\theight: 44px;\n\twidth: 290px;\n\tline-height: 44px;\n\tpadding: 0 16px;\n\tmargin: 14px auto;\n\tborder-radius: var(--border-radius-pill);\n\topacity: 0.4;\n\tbackground-color: transparent;\n\n\t.anchor-icon {\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t\tmargin-top: 6px;\n\t\tmargin-right: 8px;\n\t}\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\topacity: 0.8;\n\t\tbackground-color: rgba(127, 127, 127, .25);\n\t}\n\n\t&.disabled {\n\t\tpointer-events: none;\n\t}\n}\n</style>\n","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProfileAnchorLink.vue?vue&type=style&index=0&id=1caba458&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProfileAnchorLink.vue?vue&type=style&index=0&id=1caba458&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProfileAnchorLink.vue?vue&type=style&index=1&id=1caba458&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProfileAnchorLink.vue?vue&type=style&index=1&id=1caba458&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./EditProfileAnchorLink.vue?vue&type=template&id=1caba458&scoped=true&\"\nimport script from \"./EditProfileAnchorLink.vue?vue&type=script&lang=js&\"\nexport * from \"./EditProfileAnchorLink.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditProfileAnchorLink.vue?vue&type=style&index=0&id=1caba458&prod&lang=scss&\"\nimport style1 from \"./EditProfileAnchorLink.vue?vue&type=style&index=1&id=1caba458&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1caba458\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('a',_vm._g({class:{ disabled: _vm.disabled },attrs:{\"href\":\"#profile-visibility\"}},_vm.$listeners),[_c('ChevronDownIcon',{staticClass:\"anchor-icon\",attrs:{\"size\":22}}),_vm._v(\"\\n\\t\"+_vm._s(_vm.t('settings', 'Edit your Profile visibility'))+\"\\n\")],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"checkbox-container\"},[_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"switch\",\"checked\":_vm.isProfileEnabled,\"loading\":_vm.loading},on:{\"update:checked\":[function($event){_vm.isProfileEnabled=$event},_vm.saveEnableProfile]}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Enable Profile'))+\"\\n\\t\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<div class=\"checkbox-container\">\n\t\t<NcCheckboxRadioSwitch type=\"switch\"\n\t\t\t:checked.sync=\"isProfileEnabled\"\n\t\t\t:loading=\"loading\"\n\t\t\t@update:checked=\"saveEnableProfile\">\n\t\t\t{{ t('settings', 'Enable Profile') }}\n\t\t</NcCheckboxRadioSwitch>\n\t</div>\n</template>\n\n<script>\nimport { emit } from '@nextcloud/event-bus'\n\nimport { savePrimaryAccountProperty } from '../../../service/PersonalInfo/PersonalInfoService.js'\nimport { ACCOUNT_PROPERTY_ENUM } from '../../../constants/AccountPropertyConstants.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nexport default {\n\tname: 'ProfileCheckbox',\n\n\tcomponents: {\n\t\tNcCheckboxRadioSwitch,\n\t},\n\n\tprops: {\n\t\tprofileEnabled: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tisProfileEnabled: this.profileEnabled,\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync saveEnableProfile() {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryAccountProperty(ACCOUNT_PROPERTY_ENUM.PROFILE_ENABLED, this.isProfileEnabled)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tisProfileEnabled: this.isProfileEnabled,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update profile enabled state'),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ isProfileEnabled, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\temit('settings:profile-enabled:updated', isProfileEnabled)\n\t\t\t} else {\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t}\n\t\t\tthis.loading = false\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileCheckbox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileCheckbox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProfileCheckbox.vue?vue&type=template&id=061ac04c&\"\nimport script from \"./ProfileCheckbox.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfileCheckbox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfilePreviewCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfilePreviewCard.vue?vue&type=script&lang=js&\"","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<a class=\"preview-card\"\n\t\t:class=\"{ disabled }\"\n\t\t:href=\"profilePageLink\">\n\t\t<NcAvatar class=\"preview-card__avatar\"\n\t\t\t:user=\"userId\"\n\t\t\t:size=\"48\"\n\t\t\t:show-user-status=\"true\"\n\t\t\t:show-user-status-compact=\"false\"\n\t\t\t:disable-menu=\"true\"\n\t\t\t:disable-tooltip=\"true\" />\n\t\t<div class=\"preview-card__header\">\n\t\t\t<span>{{ displayName }}</span>\n\t\t</div>\n\t\t<div class=\"preview-card__footer\">\n\t\t\t<span>{{ organisation }}</span>\n\t\t</div>\n\t</a>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateUrl } from '@nextcloud/router'\n\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\n\nexport default {\n\tname: 'ProfilePreviewCard',\n\n\tcomponents: {\n\t\tNcAvatar,\n\t},\n\n\tprops: {\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\torganisation: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tprofileEnabled: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tdisabled() {\n\t\t\treturn !this.profileEnabled\n\t\t},\n\n\t\tprofilePageLink() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\treturn generateUrl('/u/{userId}', { userId: getCurrentUser().uid })\n\t\t\t}\n\t\t\t// Since an anchor element is used rather than a button for better UX,\n\t\t\t// this hack removes href if the profile is disabled so that disabling pointer-events is not needed to prevent a click from opening a page\n\t\t\t// and to allow the hover event (which disabling pointer-events wouldn't allow) for styling\n\t\t\treturn null\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.preview-card {\n\tdisplay: flex;\n\tflex-direction: column;\n\tposition: relative;\n\twidth: 290px;\n\theight: 116px;\n\tmargin: 14px auto;\n\tborder-radius: var(--border-radius-large);\n\tbackground-color: var(--color-main-background);\n\tfont-weight: bold;\n\tbox-shadow: 0 2px 9px var(--color-box-shadow);\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbox-shadow: 0 2px 12px var(--color-box-shadow);\n\t}\n\n\t&:focus-visible {\n\t\toutline: var(--color-main-text) solid 1px;\n\t\toutline-offset: 3px;\n\t}\n\n\t&.disabled {\n\t\tfilter: grayscale(1);\n\t\topacity: 0.5;\n\t\tcursor: default;\n\t\tbox-shadow: 0 0 3px var(--color-box-shadow);\n\n\t\t& *,\n\t\t&::v-deep * {\n\t\t\tcursor: default;\n\t\t}\n\t}\n\n\t&__avatar {\n\t\t// Override Avatar component position to fix positioning on rerender\n\t\tposition: absolute !important;\n\t\ttop: 40px;\n\t\tleft: 18px;\n\t\tz-index: 1;\n\n\t\t&:not(.avatardiv--unknown) {\n\t\t\tbox-shadow: 0 0 0 3px var(--color-main-background) !important;\n\t\t}\n\t}\n\n\t&__header,\n\t&__footer {\n\t\tposition: relative;\n\t\twidth: auto;\n\n\t\tspan {\n\t\t\tposition: absolute;\n\t\t\tleft: 78px;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow-wrap: anywhere;\n\n\t\t\t@supports (-webkit-line-clamp: 2) {\n\t\t\t\tdisplay: -webkit-box;\n\t\t\t\t-webkit-line-clamp: 2;\n\t\t\t\t-webkit-box-orient: vertical;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__header {\n\t\theight: 70px;\n\t\tborder-radius: var(--border-radius-large) var(--border-radius-large) 0 0;\n\t\tbackground-color: var(--color-primary);\n\t\tbackground-image: var(--gradient-primary-background);\n\n\t\tspan {\n\t\t\tbottom: 0;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tfont-size: 18px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: 0 4px 8px 0;\n\t\t}\n\t}\n\n\t&__footer {\n\t\theight: 46px;\n\n\t\tspan {\n\t\t\ttop: 0;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tmargin: 4px 4px 0 0;\n\t\t\tline-height: 1.3;\n\t\t}\n\t}\n}\n</style>\n","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfilePreviewCard.vue?vue&type=style&index=0&id=61586aa5&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfilePreviewCard.vue?vue&type=style&index=0&id=61586aa5&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ProfilePreviewCard.vue?vue&type=template&id=61586aa5&scoped=true&\"\nimport script from \"./ProfilePreviewCard.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfilePreviewCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProfilePreviewCard.vue?vue&type=style&index=0&id=61586aa5&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"61586aa5\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('a',{staticClass:\"preview-card\",class:{ disabled: _vm.disabled },attrs:{\"href\":_vm.profilePageLink}},[_c('NcAvatar',{staticClass:\"preview-card__avatar\",attrs:{\"user\":_vm.userId,\"size\":48,\"show-user-status\":true,\"show-user-status-compact\":false,\"disable-menu\":true,\"disable-tooltip\":true}}),_vm._v(\" \"),_c('div',{staticClass:\"preview-card__header\"},[_c('span',[_vm._v(_vm._s(_vm.displayName))])]),_vm._v(\" \"),_c('div',{staticClass:\"preview-card__footer\"},[_c('span',[_vm._v(_vm._s(_vm.organisation))])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section>\n\t\t<HeaderBar :readable=\"propertyReadable\" />\n\n\t\t<ProfileCheckbox :profile-enabled.sync=\"profileEnabled\" />\n\n\t\t<ProfilePreviewCard :organisation=\"organisation\"\n\t\t\t:display-name=\"displayName\"\n\t\t\t:profile-enabled=\"profileEnabled\"\n\t\t\t:user-id=\"userId\" />\n\n\t\t<EditProfileAnchorLink :profile-enabled=\"profileEnabled\" />\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\n\nimport EditProfileAnchorLink from './EditProfileAnchorLink.vue'\nimport HeaderBar from '../shared/HeaderBar.vue'\nimport ProfileCheckbox from './ProfileCheckbox.vue'\nimport ProfilePreviewCard from './ProfilePreviewCard.vue'\n\nimport { ACCOUNT_PROPERTY_READABLE_ENUM } from '../../../constants/AccountPropertyConstants.js'\n\nconst {\n\torganisation: { value: organisation },\n\tdisplayName: { value: displayName },\n\tprofileEnabled,\n\tuserId,\n} = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'ProfileSection',\n\n\tcomponents: {\n\t\tEditProfileAnchorLink,\n\t\tHeaderBar,\n\t\tProfileCheckbox,\n\t\tProfilePreviewCard,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tpropertyReadable: ACCOUNT_PROPERTY_READABLE_ENUM.PROFILE_ENABLED,\n\t\t\torganisation,\n\t\t\tdisplayName,\n\t\t\tprofileEnabled,\n\t\t\tuserId,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tsubscribe('settings:organisation:updated', this.handleOrganisationUpdate)\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tunsubscribe('settings:organisation:updated', this.handleOrganisationUpdate)\n\t},\n\n\tmethods: {\n\t\thandleDisplayNameUpdate(displayName) {\n\t\t\tthis.displayName = displayName\n\t\t},\n\n\t\thandleOrganisationUpdate(organisation) {\n\t\t\tthis.organisation = organisation\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSection.vue?vue&type=style&index=0&id=cf64d964&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSection.vue?vue&type=style&index=0&id=cf64d964&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ProfileSection.vue?vue&type=template&id=cf64d964&scoped=true&\"\nimport script from \"./ProfileSection.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfileSection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProfileSection.vue?vue&type=style&index=0&id=cf64d964&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cf64d964\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('HeaderBar',{attrs:{\"readable\":_vm.propertyReadable}}),_vm._v(\" \"),_c('ProfileCheckbox',{attrs:{\"profile-enabled\":_vm.profileEnabled},on:{\"update:profileEnabled\":function($event){_vm.profileEnabled=$event},\"update:profile-enabled\":function($event){_vm.profileEnabled=$event}}}),_vm._v(\" \"),_c('ProfilePreviewCard',{attrs:{\"organisation\":_vm.organisation,\"display-name\":_vm.displayName,\"profile-enabled\":_vm.profileEnabled,\"user-id\":_vm.userId}}),_vm._v(\" \"),_c('EditProfileAnchorLink',{attrs:{\"profile-enabled\":_vm.profileEnabled}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"organisation\"\n\t\t:placeholder=\"t('settings', 'Your organisation')\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { organisation } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'OrganisationSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\torganisation: { ...organisation, readable: NAME_READABLE_ENUM[organisation.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrganisationSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrganisationSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OrganisationSection.vue?vue&type=template&id=50ddf4bd&\"\nimport script from \"./OrganisationSection.vue?vue&type=script&lang=js&\"\nexport * from \"./OrganisationSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your organisation')}},'AccountPropertySection',_vm.organisation,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"role\"\n\t\t:placeholder=\"t('settings', 'Your role')\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { role } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'RoleSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\trole: { ...role, readable: NAME_READABLE_ENUM[role.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RoleSection.vue?vue&type=template&id=3dbe0705&\"\nimport script from \"./RoleSection.vue?vue&type=script&lang=js&\"\nexport * from \"./RoleSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your role')}},'AccountPropertySection',_vm.role,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"headline\"\n\t\t:placeholder=\"t('settings', 'Your headline')\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { headline } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'HeadlineSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\theadline: { ...headline, readable: NAME_READABLE_ENUM[headline.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeadlineSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeadlineSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeadlineSection.vue?vue&type=template&id=0f3859ee&\"\nimport script from \"./HeadlineSection.vue?vue&type=script&lang=js&\"\nexport * from \"./HeadlineSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your headline')}},'AccountPropertySection',_vm.headline,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"biography\"\n\t\t:placeholder=\"t('settings', 'Your biography')\"\n\t\t:multi-line=\"true\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { biography } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'BiographySection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tbiography: { ...biography, readable: NAME_READABLE_ENUM[biography.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BiographySection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BiographySection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BiographySection.vue?vue&type=template&id=a916ca60&\"\nimport script from \"./BiographySection.vue?vue&type=script&lang=js&\"\nexport * from \"./BiographySection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your biography'),\"multi-line\":true}},'AccountPropertySection',_vm.biography,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',{style:({ marginLeft: _vm.marginLeft }),attrs:{\"id\":\"profile-visibility\"}},[_c('HeaderBar',{attrs:{\"is-heading\":true,\"readable\":_vm.heading}}),_vm._v(\" \"),_c('em',{class:{ disabled: _vm.disabled }},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"visibility-dropdowns\",style:({\n\t\t\tgridTemplateRows: `repeat(${_vm.rows}, 44px)`,\n\t\t})},_vm._l((_vm.visibilityParams),function(param){return _c('VisibilityDropdown',{key:param.id,attrs:{\"param-id\":param.id,\"display-id\":param.displayId,\"visibility\":param.visibility},on:{\"update:visibility\":function($event){return _vm.$set(param, \"visibility\", $event)}}})}),1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2021 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\n/**\n * Save the visibility of the profile parameter\n *\n * @param {string} paramId the profile parameter ID\n * @param {string} visibility the visibility\n * @return {object}\n */\nexport const saveProfileParameterVisibility = async (paramId, visibility) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('/profile/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tparamId,\n\t\tvisibility,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Save profile default\n *\n * @param {boolean} isEnabled the default\n * @return {object}\n */\nexport const saveProfileDefault = async (isEnabled) => {\n\t// Convert to string for compatibility\n\tisEnabled = isEnabled ? '1' : '0'\n\n\tconst url = generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/{appId}/{key}', {\n\t\tappId: 'settings',\n\t\tkey: 'profile_enabled_by_default',\n\t})\n\n\tawait confirmPassword()\n\n\tconst res = await axios.post(url, {\n\t\tvalue: isEnabled,\n\t})\n\n\treturn res.data\n}\n","/**\n * @copyright 2021 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/*\n * SYNC to be kept in sync with `core/Db/ProfileConfig.php`\n */\n\n/** Enum of profile visibility constants */\nexport const VISIBILITY_ENUM = Object.freeze({\n\tSHOW: 'show',\n\tSHOW_USERS_ONLY: 'show_users_only',\n\tHIDE: 'hide',\n})\n\n/**\n * Enum of profile visibility constants to properties\n */\nexport const VISIBILITY_PROPERTY_ENUM = Object.freeze({\n\t[VISIBILITY_ENUM.SHOW]: {\n\t\tname: VISIBILITY_ENUM.SHOW,\n\t\tlabel: t('settings', 'Show to everyone'),\n\t},\n\t[VISIBILITY_ENUM.SHOW_USERS_ONLY]: {\n\t\tname: VISIBILITY_ENUM.SHOW_USERS_ONLY,\n\t\tlabel: t('settings', 'Show to logged in users only'),\n\t},\n\t[VISIBILITY_ENUM.HIDE]: {\n\t\tname: VISIBILITY_ENUM.HIDE,\n\t\tlabel: t('settings', 'Hide'),\n\t},\n})\n","<!--\n\t- @copyright 2021 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<div class=\"visibility-container\"\n\t\t:class=\"{ disabled }\">\n\t\t<label :for=\"inputId\">\n\t\t\t{{ displayId }}\n\t\t</label>\n\t\t<NcSelect :input-id=\"inputId\"\n\t\t\tclass=\"visibility-container__select\"\n\t\t\t:clearable=\"false\"\n\t\t\t:options=\"visibilityOptions\"\n\t\t\t:value=\"visibilityObject\"\n\t\t\t@option:selected=\"onVisibilityChange\" />\n\t</div>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\n\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'\n\nimport { saveProfileParameterVisibility } from '../../../service/ProfileService.js'\nimport { VISIBILITY_PROPERTY_ENUM } from '../../../constants/ProfileConstants.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nconst { profileEnabled } = loadState('settings', 'personalInfoParameters', false)\n\nexport default {\n\tname: 'VisibilityDropdown',\n\n\tcomponents: {\n\t\tNcSelect,\n\t},\n\n\tprops: {\n\t\tparamId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvisibility: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tinitialVisibility: this.visibility,\n\t\t\tprofileEnabled,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tdisabled() {\n\t\t\treturn !this.profileEnabled\n\t\t},\n\n\t\tinputId() {\n\t\t\treturn `profile-visibility-${this.paramId}`\n\t\t},\n\n\t\tvisibilityObject() {\n\t\t\treturn VISIBILITY_PROPERTY_ENUM[this.visibility]\n\t\t},\n\n\t\tvisibilityOptions() {\n\t\t\treturn Object.values(VISIBILITY_PROPERTY_ENUM)\n\t\t},\n\t},\n\n\tmounted() {\n\t\tsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t},\n\n\tmethods: {\n\t\tasync onVisibilityChange(visibilityObject) {\n\t\t\t// This check is needed as the argument is null when selecting the same option\n\t\t\tif (visibilityObject !== null) {\n\t\t\t\tconst { name: visibility } = visibilityObject\n\t\t\t\tthis.$emit('update:visibility', visibility)\n\n\t\t\t\tif (visibility !== '') {\n\t\t\t\t\tawait this.updateVisibility(visibility)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tasync updateVisibility(visibility) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await saveProfileParameterVisibility(this.paramId, visibility)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tvisibility,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update visibility of {displayId}', { displayId: this.displayId }),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ visibility, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\t// Ensure that local state reflects server state\n\t\t\t\tthis.initialVisibility = visibility\n\t\t\t} else {\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t}\n\t\t},\n\n\t\thandleProfileEnabledUpdate(profileEnabled) {\n\t\t\tthis.profileEnabled = profileEnabled\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.visibility-container {\n\tdisplay: flex;\n\twidth: max-content;\n\n\t&.disabled {\n\t\tfilter: grayscale(1);\n\t\topacity: 0.5;\n\t\tcursor: default;\n\t\tpointer-events: none;\n\n\t\t& *,\n\t\t&::v-deep * {\n\t\t\tcursor: default;\n\t\t\tpointer-events: none;\n\t\t}\n\t}\n\n\tlabel {\n\t\tcolor: var(--color-text-lighter);\n\t\twidth: 150px;\n\t\tline-height: 50px;\n\t}\n\n\t&__select {\n\t\twidth: 270px;\n\t\tmax-width: 40vw;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisibilityDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisibilityDropdown.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisibilityDropdown.vue?vue&type=style&index=0&id=b13d20da&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisibilityDropdown.vue?vue&type=style&index=0&id=b13d20da&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./VisibilityDropdown.vue?vue&type=template&id=b13d20da&scoped=true&\"\nimport script from \"./VisibilityDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./VisibilityDropdown.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VisibilityDropdown.vue?vue&type=style&index=0&id=b13d20da&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b13d20da\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"visibility-container\",class:{ disabled: _vm.disabled }},[_c('label',{attrs:{\"for\":_vm.inputId}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.displayId)+\"\\n\\t\")]),_vm._v(\" \"),_c('NcSelect',{staticClass:\"visibility-container__select\",attrs:{\"input-id\":_vm.inputId,\"clearable\":false,\"options\":_vm.visibilityOptions,\"value\":_vm.visibilityObject},on:{\"option:selected\":_vm.onVisibilityChange}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2021 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<!-- TODO remove this inline margin placeholder once the settings layout is updated -->\n\t<section id=\"profile-visibility\"\n\t\t:style=\"{ marginLeft }\">\n\t\t<HeaderBar :is-heading=\"true\" :readable=\"heading\" />\n\n\t\t<em :class=\"{ disabled }\">\n\t\t\t{{ t('settings', 'The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected.') }}\n\t\t</em>\n\n\t\t<div class=\"visibility-dropdowns\"\n\t\t\t:style=\"{\n\t\t\t\tgridTemplateRows: `repeat(${rows}, 44px)`,\n\t\t\t}\">\n\t\t\t<VisibilityDropdown v-for=\"param in visibilityParams\"\n\t\t\t\t:key=\"param.id\"\n\t\t\t\t:param-id=\"param.id\"\n\t\t\t\t:display-id=\"param.displayId\"\n\t\t\t\t:visibility.sync=\"param.visibility\" />\n\t\t</div>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\n\nimport HeaderBar from '../shared/HeaderBar.vue'\nimport VisibilityDropdown from './VisibilityDropdown.vue'\nimport { PROFILE_READABLE_ENUM } from '../../../constants/AccountPropertyConstants.js'\n\nconst { profileConfig } = loadState('settings', 'profileParameters', {})\nconst { profileEnabled } = loadState('settings', 'personalInfoParameters', false)\n\nconst compareParams = (a, b) => {\n\tif (a.appId === b.appId || (a.appId !== 'core' && b.appId !== 'core')) {\n\t\treturn a.displayId.localeCompare(b.displayId)\n\t} else if (a.appId === 'core') {\n\t\treturn 1\n\t} else {\n\t\treturn -1\n\t}\n}\n\nexport default {\n\tname: 'ProfileVisibilitySection',\n\n\tcomponents: {\n\t\tHeaderBar,\n\t\tVisibilityDropdown,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\theading: PROFILE_READABLE_ENUM.PROFILE_VISIBILITY,\n\t\t\tprofileEnabled,\n\t\t\tvisibilityParams: Object.entries(profileConfig)\n\t\t\t\t.map(([paramId, { appId, displayId, visibility }]) => ({ id: paramId, appId, displayId, visibility }))\n\t\t\t\t.sort(compareParams),\n\t\t\t// TODO remove this when not used once the settings layout is updated\n\t\t\tmarginLeft: window.matchMedia('(min-width: 1600px)').matches\n\t\t\t\t? window.getComputedStyle(document.getElementById('vue-avatar-section')).getPropertyValue('width').trim()\n\t\t\t\t: '0px',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tdisabled() {\n\t\t\treturn !this.profileEnabled\n\t\t},\n\n\t\trows() {\n\t\t\treturn Math.ceil(this.visibilityParams.length / 2)\n\t\t},\n\t},\n\n\tmounted() {\n\t\tsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t\t// TODO remove this when not used once the settings layout is updated\n\t\twindow.onresize = () => {\n\t\t\tthis.marginLeft = window.matchMedia('(min-width: 1600px)').matches\n\t\t\t\t? window.getComputedStyle(document.getElementById('vue-avatar-section')).getPropertyValue('width').trim()\n\t\t\t\t: '0px'\n\t\t}\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t},\n\n\tmethods: {\n\t\thandleProfileEnabledUpdate(profileEnabled) {\n\t\t\tthis.profileEnabled = profileEnabled\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tpadding: 30px;\n\tmax-width: 900px;\n\twidth: 100%;\n\n\tem {\n\t\tdisplay: block;\n\t\tmargin: 16px 0;\n\n\t\t&.disabled {\n\t\t\tfilter: grayscale(1);\n\t\t\topacity: 0.5;\n\t\t\tcursor: default;\n\t\t\tpointer-events: none;\n\n\t\t\t& *,\n\t\t\t&::v-deep * {\n\t\t\t\tcursor: default;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t.visibility-dropdowns {\n\t\tdisplay: grid;\n\t\tgap: 10px 40px;\n\t}\n\n\t@media (min-width: 1200px) {\n\t\twidth: 940px;\n\n\t\t.visibility-dropdowns {\n\t\t\tgrid-auto-flow: column;\n\t\t}\n\t}\n\n\t@media (max-width: 1200px) {\n\t\twidth: 470px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileVisibilitySection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileVisibilitySection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileVisibilitySection.vue?vue&type=style&index=0&id=a07dbf96&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileVisibilitySection.vue?vue&type=style&index=0&id=a07dbf96&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ProfileVisibilitySection.vue?vue&type=template&id=a07dbf96&scoped=true&\"\nimport script from \"./ProfileVisibilitySection.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfileVisibilitySection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProfileVisibilitySection.vue?vue&type=style&index=0&id=a07dbf96&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a07dbf96\",\n null\n \n)\n\nexport default component.exports","/**\n * @copyright 2021, Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport { getRequestToken } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t } from '@nextcloud/l10n'\nimport '@nextcloud/dialogs/dist/index.css'\n\nimport AvatarSection from './components/PersonalInfo/AvatarSection.vue'\nimport DetailsSection from './components/PersonalInfo/DetailsSection.vue'\nimport DisplayNameSection from './components/PersonalInfo/DisplayNameSection.vue'\nimport EmailSection from './components/PersonalInfo/EmailSection/EmailSection.vue'\nimport PhoneSection from './components/PersonalInfo/PhoneSection.vue'\nimport LocationSection from './components/PersonalInfo/LocationSection.vue'\nimport WebsiteSection from './components/PersonalInfo/WebsiteSection.vue'\nimport TwitterSection from './components/PersonalInfo/TwitterSection.vue'\nimport FediverseSection from './components/PersonalInfo/FediverseSection.vue'\nimport LanguageSection from './components/PersonalInfo/LanguageSection/LanguageSection.vue'\nimport LocaleSection from './components/PersonalInfo/LocaleSection/LocaleSection.vue'\nimport ProfileSection from './components/PersonalInfo/ProfileSection/ProfileSection.vue'\nimport OrganisationSection from './components/PersonalInfo/OrganisationSection.vue'\nimport RoleSection from './components/PersonalInfo/RoleSection.vue'\nimport HeadlineSection from './components/PersonalInfo/HeadlineSection.vue'\nimport BiographySection from './components/PersonalInfo/BiographySection.vue'\nimport ProfileVisibilitySection from './components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue'\n\n__webpack_nonce__ = btoa(getRequestToken())\n\nconst profileEnabledGlobally = loadState('settings', 'profileEnabledGlobally', true)\n\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t},\n})\n\nconst AvatarView = Vue.extend(AvatarSection)\nconst DetailsView = Vue.extend(DetailsSection)\nconst DisplayNameView = Vue.extend(DisplayNameSection)\nconst EmailView = Vue.extend(EmailSection)\nconst PhoneView = Vue.extend(PhoneSection)\nconst LocationView = Vue.extend(LocationSection)\nconst WebsiteView = Vue.extend(WebsiteSection)\nconst TwitterView = Vue.extend(TwitterSection)\nconst FediverseView = Vue.extend(FediverseSection)\nconst LanguageView = Vue.extend(LanguageSection)\nconst LocaleView = Vue.extend(LocaleSection)\n\nnew AvatarView().$mount('#vue-avatar-section')\nnew DetailsView().$mount('#vue-details-section')\nnew DisplayNameView().$mount('#vue-displayname-section')\nnew EmailView().$mount('#vue-email-section')\nnew PhoneView().$mount('#vue-phone-section')\nnew LocationView().$mount('#vue-location-section')\nnew WebsiteView().$mount('#vue-website-section')\nnew TwitterView().$mount('#vue-twitter-section')\nnew FediverseView().$mount('#vue-fediverse-section')\nnew LanguageView().$mount('#vue-language-section')\nnew LocaleView().$mount('#vue-locale-section')\n\nif (profileEnabledGlobally) {\n\tconst ProfileView = Vue.extend(ProfileSection)\n\tconst OrganisationView = Vue.extend(OrganisationSection)\n\tconst RoleView = Vue.extend(RoleSection)\n\tconst HeadlineView = Vue.extend(HeadlineSection)\n\tconst BiographyView = Vue.extend(BiographySection)\n\tconst ProfileVisibilityView = Vue.extend(ProfileVisibilitySection)\n\n\tnew ProfileView().$mount('#vue-profile-section')\n\tnew OrganisationView().$mount('#vue-organisation-section')\n\tnew RoleView().$mount('#vue-role-section')\n\tnew HeadlineView().$mount('#vue-headline-section')\n\tnew BiographyView().$mount('#vue-biography-section')\n\tnew ProfileVisibilityView().$mount('#vue-profile-visibility-section')\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-022fd5d4]{grid-row:1/3}.avatar__container[data-v-022fd5d4]{margin:0 auto;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:16px 0;width:300px}.avatar__container span[data-v-022fd5d4]{color:var(--color-text-lighter)}.avatar__preview[data-v-022fd5d4]{display:flex;justify-content:center;align-items:center;width:180px;height:180px}.avatar__buttons[data-v-022fd5d4]{display:flex;gap:0 10px}.avatar__cropper[data-v-022fd5d4]{width:300px;height:300px;overflow:hidden}.avatar__cropper-buttons[data-v-022fd5d4]{width:100%;display:flex;justify-content:space-between}.avatar__cropper[data-v-022fd5d4] .cropper-view-box{border-radius:50%}input[type=file][data-v-022fd5d4]{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/AvatarSection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,YAAA,CAGA,oCACC,aAAA,CACA,YAAA,CACA,qBAAA,CACA,sBAAA,CACA,kBAAA,CACA,UAAA,CACA,WAAA,CAEA,yCACC,+BAAA,CAIF,kCACC,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,WAAA,CACA,YAAA,CAGD,kCACC,YAAA,CACA,UAAA,CAGD,kCACC,WAAA,CACA,YAAA,CACA,eAAA,CAEA,0CACC,UAAA,CACA,YAAA,CACA,6BAAA,CAGD,oDACC,iBAAA,CAKH,kCACC,YAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tgrid-row: 1/3;\\n}\\n.avatar {\\n\\t&__container {\\n\\t\\tmargin: 0 auto;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: center;\\n\\t\\talign-items: center;\\n\\t\\tgap: 16px 0;\\n\\t\\twidth: 300px;\\n\\n\\t\\tspan {\\n\\t\\t\\tcolor: var(--color-text-lighter);\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\t\\talign-items: center;\\n\\t\\twidth: 180px;\\n\\t\\theight: 180px;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 10px;\\n\\t}\\n\\n\\t&__cropper {\\n\\t\\twidth: 300px;\\n\\t\\theight: 300px;\\n\\t\\toverflow: hidden;\\n\\n\\t\\t&-buttons {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tjustify-content: space-between;\\n\\t\\t}\\n\\n\\t\\t&::v-deep .cropper-view-box {\\n\\t\\t\\tborder-radius: 50%;\\n\\t\\t}\\n\\t}\\n}\\n\\ninput[type=\\\"file\\\"] {\\n\\tdisplay: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".details[data-v-1ab46e68]{display:flex;flex-direction:column;margin:10px 32px 10px 0;gap:16px 0;color:var(--color-text-lighter)}.details__groups[data-v-1ab46e68],.details__quota[data-v-1ab46e68]{display:flex;gap:0 10px}.details__groups-info[data-v-1ab46e68],.details__quota-info[data-v-1ab46e68]{display:flex;flex-direction:column;width:100%;gap:4px 0}.details__groups-list[data-v-1ab46e68],.details__quota-list[data-v-1ab46e68]{font-weight:bold}.details__groups[data-v-1ab46e68] .material-design-icon,.details__quota[data-v-1ab46e68] .material-design-icon{align-self:flex-start;margin-top:2px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/DetailsSection.vue\"],\"names\":[],\"mappings\":\"AACA,0BACC,YAAA,CACA,qBAAA,CACA,uBAAA,CACA,UAAA,CACA,+BAAA,CAEA,mEAEC,YAAA,CACA,UAAA,CAEA,6EACC,YAAA,CACA,qBAAA,CACA,UAAA,CACA,SAAA,CAGD,6EACC,gBAAA,CAGD,+GACC,qBAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n.details {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin: 10px 32px 10px 0;\\n\\tgap: 16px 0;\\n\\tcolor: var(--color-text-lighter);\\n\\n\\t&__groups,\\n\\t&__quota {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 10px;\\n\\n\\t\\t&-info {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tgap: 4px 0;\\n\\t\\t}\\n\\n\\t\\t&-list {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t}\\n\\n\\t\\t&::v-deep .material-design-icon {\\n\\t\\t\\talign-self: flex-start;\\n\\t\\t\\tmargin-top: 2px;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".email[data-v-5ff85d38]{display:grid;align-items:center}.email input[data-v-5ff85d38]{grid-area:1/1;width:100%}.email .email__actions-container[data-v-5ff85d38]{grid-area:1/1;justify-self:flex-end;height:30px;display:flex;gap:0 2px;margin-right:5px}.email .email__actions-container .email__actions[data-v-5ff85d38]{opacity:.4 !important}.email .email__actions-container .email__actions[data-v-5ff85d38]:hover,.email .email__actions-container .email__actions[data-v-5ff85d38]:focus,.email .email__actions-container .email__actions[data-v-5ff85d38]:active{opacity:.8 !important}.email .email__actions-container .email__actions[data-v-5ff85d38] button{height:30px !important;min-height:30px !important;width:30px !important;min-width:30px !important}.email__helper-text-message[data-v-5ff85d38]{padding:4px 0;display:flex;align-items:center}.email__helper-text-message__icon[data-v-5ff85d38]{margin-right:8px;align-self:start;margin-top:4px}.email__helper-text-message--error[data-v-5ff85d38]{color:var(--color-error)}.fade-enter[data-v-5ff85d38],.fade-leave-to[data-v-5ff85d38]{opacity:0}.fade-enter-active[data-v-5ff85d38]{transition:opacity 200ms ease-out}.fade-leave-active[data-v-5ff85d38]{transition:opacity 300ms ease-out}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/EmailSection/Email.vue\"],\"names\":[],\"mappings\":\"AACA,wBACC,YAAA,CACA,kBAAA,CAEA,8BACC,aAAA,CACA,UAAA,CAGD,kDACC,aAAA,CACA,qBAAA,CACA,WAAA,CAEA,YAAA,CACA,SAAA,CACA,gBAAA,CAEA,kEACC,qBAAA,CAEA,yNAGC,qBAAA,CAGD,yEACC,sBAAA,CACA,0BAAA,CACA,qBAAA,CACA,yBAAA,CAKH,6CACC,aAAA,CACA,YAAA,CACA,kBAAA,CAEA,mDACC,gBAAA,CACA,gBAAA,CACA,cAAA,CAGD,oDACC,wBAAA,CAKH,6DAEC,SAAA,CAGD,oCACC,iCAAA,CAGD,oCACC,iCAAA\",\"sourcesContent\":[\"\\n.email {\\n\\tdisplay: grid;\\n\\talign-items: center;\\n\\n\\tinput {\\n\\t\\tgrid-area: 1 / 1;\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.email__actions-container {\\n\\t\\tgrid-area: 1 / 1;\\n\\t\\tjustify-self: flex-end;\\n\\t\\theight: 30px;\\n\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 2px;\\n\\t\\tmargin-right: 5px;\\n\\n\\t\\t.email__actions {\\n\\t\\t\\topacity: 0.4 !important;\\n\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus,\\n\\t\\t\\t&:active {\\n\\t\\t\\t\\topacity: 0.8 !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&::v-deep button {\\n\\t\\t\\t\\theight: 30px !important;\\n\\t\\t\\t\\tmin-height: 30px !important;\\n\\t\\t\\t\\twidth: 30px !important;\\n\\t\\t\\t\\tmin-width: 30px !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__helper-text-message {\\n\\t\\tpadding: 4px 0;\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\n\\t\\t&__icon {\\n\\t\\t\\tmargin-right: 8px;\\n\\t\\t\\talign-self: start;\\n\\t\\t\\tmargin-top: 4px;\\n\\t\\t}\\n\\n\\t\\t&--error {\\n\\t\\t\\tcolor: var(--color-error);\\n\\t\\t}\\n\\t}\\n}\\n\\n.fade-enter,\\n.fade-leave-to {\\n\\topacity: 0;\\n}\\n\\n.fade-enter-active {\\n\\ttransition: opacity 200ms ease-out;\\n}\\n\\n.fade-leave-active {\\n\\ttransition: opacity 300ms ease-out;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-46c7eb7e]{padding:10px 10px}section[data-v-46c7eb7e] button:disabled{cursor:default}section .additional-emails-label[data-v-46c7eb7e]{display:block;margin-top:16px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA,CAGD,kDACC,aAAA,CACA,eAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tpadding: 10px 10px;\\n\\n\\t&::v-deep button:disabled {\\n\\t\\tcursor: default;\\n\\t}\\n\\n\\t.additional-emails-label {\\n\\t\\tdisplay: block;\\n\\t\\tmargin-top: 16px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".language[data-v-5c847b3a]{display:grid}.language select[data-v-5c847b3a]{width:100%}.language a[data-v-5c847b3a]{color:var(--color-main-text);text-decoration:none;width:max-content}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue\"],\"names\":[],\"mappings\":\"AACA,2BACC,YAAA,CAEA,kCACC,UAAA,CAGD,6BACC,4BAAA,CACA,oBAAA,CACA,iBAAA\",\"sourcesContent\":[\"\\n.language {\\n\\tdisplay: grid;\\n\\n\\tselect {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\ta {\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\ttext-decoration: none;\\n\\t\\twidth: max-content;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-92685b76]{padding:10px 10px}section[data-v-92685b76] button:disabled{cursor:default}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tpadding: 10px 10px;\\n\\n\\t&::v-deep button:disabled {\\n\\t\\tcursor: default;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".locale[data-v-1ac456dc]{display:grid}.locale select[data-v-1ac456dc]{width:100%}.example[data-v-1ac456dc]{margin:10px 0;display:flex;gap:0 10px;color:var(--color-text-lighter)}.example[data-v-1ac456dc] .material-design-icon{align-self:flex-start;margin-top:2px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,YAAA,CAEA,gCACC,UAAA,CAIF,0BACC,aAAA,CACA,YAAA,CACA,UAAA,CACA,+BAAA,CAEA,gDACC,qBAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n.locale {\\n\\tdisplay: grid;\\n\\n\\tselect {\\n\\t\\twidth: 100%;\\n\\t}\\n}\\n\\n.example {\\n\\tmargin: 10px 0;\\n\\tdisplay: flex;\\n\\tgap: 0 10px;\\n\\tcolor: var(--color-text-lighter);\\n\\n\\t&::v-deep .material-design-icon {\\n\\t\\talign-self: flex-start;\\n\\t\\tmargin-top: 2px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-84fca724]{padding:10px 10px}section[data-v-84fca724] button:disabled{cursor:default}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tpadding: 10px 10px;\\n\\n\\t&::v-deep button:disabled {\\n\\t\\tcursor: default;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"html{scroll-behavior:smooth}@media screen and (prefers-reduced-motion: reduce){html{scroll-behavior:auto}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue\"],\"names\":[],\"mappings\":\"AACA,KACC,sBAAA,CAEA,mDAHD,KAIE,oBAAA,CAAA\",\"sourcesContent\":[\"\\nhtml {\\n\\tscroll-behavior: smooth;\\n\\n\\t@media screen and (prefers-reduced-motion: reduce) {\\n\\t\\tscroll-behavior: auto;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"a[data-v-1caba458]{display:block;height:44px;width:290px;line-height:44px;padding:0 16px;margin:14px auto;border-radius:var(--border-radius-pill);opacity:.4;background-color:rgba(0,0,0,0)}a .anchor-icon[data-v-1caba458]{display:inline-block;vertical-align:middle;margin-top:6px;margin-right:8px}a[data-v-1caba458]:hover,a[data-v-1caba458]:focus,a[data-v-1caba458]:active{opacity:.8;background-color:rgba(127,127,127,.25)}a.disabled[data-v-1caba458]{pointer-events:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue\"],\"names\":[],\"mappings\":\"AACA,mBACC,aAAA,CACA,WAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,uCAAA,CACA,UAAA,CACA,8BAAA,CAEA,gCACC,oBAAA,CACA,qBAAA,CACA,cAAA,CACA,gBAAA,CAGD,4EAGC,UAAA,CACA,sCAAA,CAGD,4BACC,mBAAA\",\"sourcesContent\":[\"\\na {\\n\\tdisplay: block;\\n\\theight: 44px;\\n\\twidth: 290px;\\n\\tline-height: 44px;\\n\\tpadding: 0 16px;\\n\\tmargin: 14px auto;\\n\\tborder-radius: var(--border-radius-pill);\\n\\topacity: 0.4;\\n\\tbackground-color: transparent;\\n\\n\\t.anchor-icon {\\n\\t\\tdisplay: inline-block;\\n\\t\\tvertical-align: middle;\\n\\t\\tmargin-top: 6px;\\n\\t\\tmargin-right: 8px;\\n\\t}\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\topacity: 0.8;\\n\\t\\tbackground-color: rgba(127, 127, 127, .25);\\n\\t}\\n\\n\\t&.disabled {\\n\\t\\tpointer-events: none;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".preview-card[data-v-61586aa5]{display:flex;flex-direction:column;position:relative;width:290px;height:116px;margin:14px auto;border-radius:var(--border-radius-large);background-color:var(--color-main-background);font-weight:bold;box-shadow:0 2px 9px var(--color-box-shadow)}.preview-card[data-v-61586aa5]:hover,.preview-card[data-v-61586aa5]:focus,.preview-card[data-v-61586aa5]:active{box-shadow:0 2px 12px var(--color-box-shadow)}.preview-card[data-v-61586aa5]:focus-visible{outline:var(--color-main-text) solid 1px;outline-offset:3px}.preview-card.disabled[data-v-61586aa5]{filter:grayscale(1);opacity:.5;cursor:default;box-shadow:0 0 3px var(--color-box-shadow)}.preview-card.disabled *[data-v-61586aa5],.preview-card.disabled[data-v-61586aa5] *{cursor:default}.preview-card__avatar[data-v-61586aa5]{position:absolute !important;top:40px;left:18px;z-index:1}.preview-card__avatar[data-v-61586aa5]:not(.avatardiv--unknown){box-shadow:0 0 0 3px var(--color-main-background) !important}.preview-card__header[data-v-61586aa5],.preview-card__footer[data-v-61586aa5]{position:relative;width:auto}.preview-card__header span[data-v-61586aa5],.preview-card__footer span[data-v-61586aa5]{position:absolute;left:78px;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere}@supports(-webkit-line-clamp: 2){.preview-card__header span[data-v-61586aa5],.preview-card__footer span[data-v-61586aa5]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.preview-card__header[data-v-61586aa5]{height:70px;border-radius:var(--border-radius-large) var(--border-radius-large) 0 0;background-color:var(--color-primary);background-image:var(--gradient-primary-background)}.preview-card__header span[data-v-61586aa5]{bottom:0;color:var(--color-primary-text);font-size:18px;font-weight:bold;margin:0 4px 8px 0}.preview-card__footer[data-v-61586aa5]{height:46px}.preview-card__footer span[data-v-61586aa5]{top:0;color:var(--color-text-maxcontrast);font-size:14px;font-weight:normal;margin:4px 4px 0 0;line-height:1.3}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue\"],\"names\":[],\"mappings\":\"AACA,+BACC,YAAA,CACA,qBAAA,CACA,iBAAA,CACA,WAAA,CACA,YAAA,CACA,gBAAA,CACA,wCAAA,CACA,6CAAA,CACA,gBAAA,CACA,4CAAA,CAEA,gHAGC,6CAAA,CAGD,6CACC,wCAAA,CACA,kBAAA,CAGD,wCACC,mBAAA,CACA,UAAA,CACA,cAAA,CACA,0CAAA,CAEA,oFAEC,cAAA,CAIF,uCAEC,4BAAA,CACA,QAAA,CACA,SAAA,CACA,SAAA,CAEA,gEACC,4DAAA,CAIF,8EAEC,iBAAA,CACA,UAAA,CAEA,wFACC,iBAAA,CACA,SAAA,CACA,eAAA,CACA,sBAAA,CACA,sBAAA,CAEA,iCAPD,wFAQE,mBAAA,CACA,oBAAA,CACA,2BAAA,CAAA,CAKH,uCACC,WAAA,CACA,uEAAA,CACA,qCAAA,CACA,mDAAA,CAEA,4CACC,QAAA,CACA,+BAAA,CACA,cAAA,CACA,gBAAA,CACA,kBAAA,CAIF,uCACC,WAAA,CAEA,4CACC,KAAA,CACA,mCAAA,CACA,cAAA,CACA,kBAAA,CACA,kBAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n.preview-card {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tposition: relative;\\n\\twidth: 290px;\\n\\theight: 116px;\\n\\tmargin: 14px auto;\\n\\tborder-radius: var(--border-radius-large);\\n\\tbackground-color: var(--color-main-background);\\n\\tfont-weight: bold;\\n\\tbox-shadow: 0 2px 9px var(--color-box-shadow);\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbox-shadow: 0 2px 12px var(--color-box-shadow);\\n\\t}\\n\\n\\t&:focus-visible {\\n\\t\\toutline: var(--color-main-text) solid 1px;\\n\\t\\toutline-offset: 3px;\\n\\t}\\n\\n\\t&.disabled {\\n\\t\\tfilter: grayscale(1);\\n\\t\\topacity: 0.5;\\n\\t\\tcursor: default;\\n\\t\\tbox-shadow: 0 0 3px var(--color-box-shadow);\\n\\n\\t\\t& *,\\n\\t\\t&::v-deep * {\\n\\t\\t\\tcursor: default;\\n\\t\\t}\\n\\t}\\n\\n\\t&__avatar {\\n\\t\\t// Override Avatar component position to fix positioning on rerender\\n\\t\\tposition: absolute !important;\\n\\t\\ttop: 40px;\\n\\t\\tleft: 18px;\\n\\t\\tz-index: 1;\\n\\n\\t\\t&:not(.avatardiv--unknown) {\\n\\t\\t\\tbox-shadow: 0 0 0 3px var(--color-main-background) !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__header,\\n\\t&__footer {\\n\\t\\tposition: relative;\\n\\t\\twidth: auto;\\n\\n\\t\\tspan {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tleft: 78px;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\toverflow-wrap: anywhere;\\n\\n\\t\\t\\t@supports (-webkit-line-clamp: 2) {\\n\\t\\t\\t\\tdisplay: -webkit-box;\\n\\t\\t\\t\\t-webkit-line-clamp: 2;\\n\\t\\t\\t\\t-webkit-box-orient: vertical;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__header {\\n\\t\\theight: 70px;\\n\\t\\tborder-radius: var(--border-radius-large) var(--border-radius-large) 0 0;\\n\\t\\tbackground-color: var(--color-primary);\\n\\t\\tbackground-image: var(--gradient-primary-background);\\n\\n\\t\\tspan {\\n\\t\\t\\tbottom: 0;\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t\\tfont-size: 18px;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: 0 4px 8px 0;\\n\\t\\t}\\n\\t}\\n\\n\\t&__footer {\\n\\t\\theight: 46px;\\n\\n\\t\\tspan {\\n\\t\\t\\ttop: 0;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\tfont-size: 14px;\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t\\tmargin: 4px 4px 0 0;\\n\\t\\t\\tline-height: 1.3;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-cf64d964]{padding:10px 10px}section[data-v-cf64d964] button:disabled{cursor:default}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tpadding: 10px 10px;\\n\\n\\t&::v-deep button:disabled {\\n\\t\\tcursor: default;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-a07dbf96]{padding:30px;max-width:900px;width:100%}section em[data-v-a07dbf96]{display:block;margin:16px 0}section em.disabled[data-v-a07dbf96]{filter:grayscale(1);opacity:.5;cursor:default;pointer-events:none}section em.disabled *[data-v-a07dbf96],section em.disabled[data-v-a07dbf96] *{cursor:default;pointer-events:none}section .visibility-dropdowns[data-v-a07dbf96]{display:grid;gap:10px 40px}@media(min-width: 1200px){section[data-v-a07dbf96]{width:940px}section .visibility-dropdowns[data-v-a07dbf96]{grid-auto-flow:column}}@media(max-width: 1200px){section[data-v-a07dbf96]{width:470px}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,YAAA,CACA,eAAA,CACA,UAAA,CAEA,4BACC,aAAA,CACA,aAAA,CAEA,qCACC,mBAAA,CACA,UAAA,CACA,cAAA,CACA,mBAAA,CAEA,8EAEC,cAAA,CACA,mBAAA,CAKH,+CACC,YAAA,CACA,aAAA,CAGD,0BA5BD,yBA6BE,WAAA,CAEA,+CACC,qBAAA,CAAA,CAIF,0BApCD,yBAqCE,WAAA,CAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tpadding: 30px;\\n\\tmax-width: 900px;\\n\\twidth: 100%;\\n\\n\\tem {\\n\\t\\tdisplay: block;\\n\\t\\tmargin: 16px 0;\\n\\n\\t\\t&.disabled {\\n\\t\\t\\tfilter: grayscale(1);\\n\\t\\t\\topacity: 0.5;\\n\\t\\t\\tcursor: default;\\n\\t\\t\\tpointer-events: none;\\n\\n\\t\\t\\t& *,\\n\\t\\t\\t&::v-deep * {\\n\\t\\t\\t\\tcursor: default;\\n\\t\\t\\t\\tpointer-events: none;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t.visibility-dropdowns {\\n\\t\\tdisplay: grid;\\n\\t\\tgap: 10px 40px;\\n\\t}\\n\\n\\t@media (min-width: 1200px) {\\n\\t\\twidth: 940px;\\n\\n\\t\\t.visibility-dropdowns {\\n\\t\\t\\tgrid-auto-flow: column;\\n\\t\\t}\\n\\t}\\n\\n\\t@media (max-width: 1200px) {\\n\\t\\twidth: 470px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".visibility-container[data-v-b13d20da]{display:flex;width:max-content}.visibility-container.disabled[data-v-b13d20da]{filter:grayscale(1);opacity:.5;cursor:default;pointer-events:none}.visibility-container.disabled *[data-v-b13d20da],.visibility-container.disabled[data-v-b13d20da] *{cursor:default;pointer-events:none}.visibility-container label[data-v-b13d20da]{color:var(--color-text-lighter);width:150px;line-height:50px}.visibility-container__select[data-v-b13d20da]{width:270px;max-width:40vw}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue\"],\"names\":[],\"mappings\":\"AACA,uCACC,YAAA,CACA,iBAAA,CAEA,gDACC,mBAAA,CACA,UAAA,CACA,cAAA,CACA,mBAAA,CAEA,oGAEC,cAAA,CACA,mBAAA,CAIF,6CACC,+BAAA,CACA,WAAA,CACA,gBAAA,CAGD,+CACC,WAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n.visibility-container {\\n\\tdisplay: flex;\\n\\twidth: max-content;\\n\\n\\t&.disabled {\\n\\t\\tfilter: grayscale(1);\\n\\t\\topacity: 0.5;\\n\\t\\tcursor: default;\\n\\t\\tpointer-events: none;\\n\\n\\t\\t& *,\\n\\t\\t&::v-deep * {\\n\\t\\t\\tcursor: default;\\n\\t\\t\\tpointer-events: none;\\n\\t\\t}\\n\\t}\\n\\n\\tlabel {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t\\twidth: 150px;\\n\\t\\tline-height: 50px;\\n\\t}\\n\\n\\t&__select {\\n\\t\\twidth: 270px;\\n\\t\\tmax-width: 40vw;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-6eb7d8e0]{padding:10px 10px}section[data-v-6eb7d8e0] button:disabled{cursor:default}section .property[data-v-6eb7d8e0]{display:grid;align-items:center}section .property textarea[data-v-6eb7d8e0]{resize:vertical;grid-area:1/1;width:100%}section .property input[data-v-6eb7d8e0]{grid-area:1/1;width:100%}section .property .property__actions-container[data-v-6eb7d8e0]{grid-area:1/1;justify-self:flex-end;align-self:flex-end;height:30px;display:flex;gap:0 2px;margin-right:5px;margin-bottom:5px}section .property__helper-text-message[data-v-6eb7d8e0]{padding:4px 0;display:flex;align-items:center}section .property__helper-text-message__icon[data-v-6eb7d8e0]{margin-right:8px;align-self:start;margin-top:4px}section .property__helper-text-message--error[data-v-6eb7d8e0]{color:var(--color-error)}section .fade-enter[data-v-6eb7d8e0],section .fade-leave-to[data-v-6eb7d8e0]{opacity:0}section .fade-enter-active[data-v-6eb7d8e0]{transition:opacity 200ms ease-out}section .fade-leave-active[data-v-6eb7d8e0]{transition:opacity 300ms ease-out}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA,CAGD,mCACC,YAAA,CACA,kBAAA,CAEA,4CACC,eAAA,CACA,aAAA,CACA,UAAA,CAGD,yCACC,aAAA,CACA,UAAA,CAGD,gEACC,aAAA,CACA,qBAAA,CACA,mBAAA,CACA,WAAA,CAEA,YAAA,CACA,SAAA,CACA,gBAAA,CACA,iBAAA,CAIF,wDACC,aAAA,CACA,YAAA,CACA,kBAAA,CAEA,8DACC,gBAAA,CACA,gBAAA,CACA,cAAA,CAGD,+DACC,wBAAA,CAIF,6EAEC,SAAA,CAGD,4CACC,iCAAA,CAGD,4CACC,iCAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tpadding: 10px 10px;\\n\\n\\t&::v-deep button:disabled {\\n\\t\\tcursor: default;\\n\\t}\\n\\n\\t.property {\\n\\t\\tdisplay: grid;\\n\\t\\talign-items: center;\\n\\n\\t\\ttextarea {\\n\\t\\t\\tresize: vertical;\\n\\t\\t\\tgrid-area: 1 / 1;\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\n\\t\\tinput {\\n\\t\\t\\tgrid-area: 1 / 1;\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\n\\t\\t.property__actions-container {\\n\\t\\t\\tgrid-area: 1 / 1;\\n\\t\\t\\tjustify-self: flex-end;\\n\\t\\t\\talign-self: flex-end;\\n\\t\\t\\theight: 30px;\\n\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tgap: 0 2px;\\n\\t\\t\\tmargin-right: 5px;\\n\\t\\t\\tmargin-bottom: 5px;\\n\\t\\t}\\n\\t}\\n\\n\\t.property__helper-text-message {\\n\\t\\tpadding: 4px 0;\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\n\\t\\t&__icon {\\n\\t\\t\\tmargin-right: 8px;\\n\\t\\t\\talign-self: start;\\n\\t\\t\\tmargin-top: 4px;\\n\\t\\t}\\n\\n\\t\\t&--error {\\n\\t\\t\\tcolor: var(--color-error);\\n\\t\\t}\\n\\t}\\n\\n\\t.fade-enter,\\n\\t.fade-leave-to {\\n\\t\\topacity: 0;\\n\\t}\\n\\n\\t.fade-enter-active {\\n\\t\\ttransition: opacity 200ms ease-out;\\n\\t}\\n\\n\\t.fade-leave-active {\\n\\t\\ttransition: opacity 300ms ease-out;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".federation-actions[data-v-4ea07669],.federation-actions--additional[data-v-4ea07669]{opacity:.4 !important}.federation-actions[data-v-4ea07669]:hover,.federation-actions[data-v-4ea07669]:focus,.federation-actions[data-v-4ea07669]:active,.federation-actions--additional[data-v-4ea07669]:hover,.federation-actions--additional[data-v-4ea07669]:focus,.federation-actions--additional[data-v-4ea07669]:active{opacity:.8 !important}.federation-actions--additional[data-v-4ea07669] button{padding-bottom:7px;height:30px !important;min-height:30px !important;width:30px !important;min-width:30px !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/shared/FederationControl.vue\"],\"names\":[],\"mappings\":\"AACA,sFAEC,qBAAA,CAEA,wSAGC,qBAAA,CAKD,wDAEC,kBAAA,CACA,sBAAA,CACA,0BAAA,CACA,qBAAA,CACA,yBAAA\",\"sourcesContent\":[\"\\n.federation-actions,\\n.federation-actions--additional {\\n\\topacity: 0.4 !important;\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\topacity: 0.8 !important;\\n\\t}\\n}\\n\\n.federation-actions--additional {\\n\\t&::v-deep button {\\n\\t\\t// TODO remove this hack\\n\\t\\tpadding-bottom: 7px;\\n\\t\\theight: 30px !important;\\n\\t\\tmin-height: 30px !important;\\n\\t\\twidth: 30px !important;\\n\\t\\tmin-width: 30px !important;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".federation-actions__btn[data-v-d426ed04] p{width:150px !important;padding:8px 0 !important;color:var(--color-main-text) !important;font-size:12.8px !important;line-height:1.5em !important}.federation-actions__btn--active[data-v-d426ed04]{background-color:var(--color-primary-light) !important;box-shadow:inset 2px 0 var(--color-primary) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue\"],\"names\":[],\"mappings\":\"AAEC,4CACC,sBAAA,CACA,wBAAA,CACA,uCAAA,CACA,2BAAA,CACA,4BAAA,CAIF,kDACC,sDAAA,CACA,sDAAA\",\"sourcesContent\":[\"\\n.federation-actions__btn {\\n\\t&::v-deep p {\\n\\t\\twidth: 150px !important;\\n\\t\\tpadding: 8px 0 !important;\\n\\t\\tcolor: var(--color-main-text) !important;\\n\\t\\tfont-size: 12.8px !important;\\n\\t\\tline-height: 1.5em !important;\\n\\t}\\n}\\n\\n.federation-actions__btn--active {\\n\\tbackground-color: var(--color-primary-light) !important;\\n\\tbox-shadow: inset 2px 0 var(--color-primary) !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".headerbar-label[data-v-b43fcc0c]{font-weight:normal;display:inline-flex;width:100%;margin:12px 0 0 0;gap:8px;align-items:center;font-size:16px;color:var(--color-text-light)}.headerbar-label.profile-property[data-v-b43fcc0c]{height:38px}.headerbar-label.setting-property[data-v-b43fcc0c]{height:44px}.headerbar-label label[data-v-b43fcc0c]{cursor:pointer}.federation-control[data-v-b43fcc0c]{margin:0}.button-vue[data-v-b43fcc0c]{margin:0 0 0 auto !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,kBAAA,CACA,mBAAA,CACA,UAAA,CACA,iBAAA,CACA,OAAA,CACA,kBAAA,CACA,cAAA,CACA,6BAAA,CAEA,mDACC,WAAA,CAGD,mDACC,WAAA,CAGD,wCACC,cAAA,CAIF,qCACC,QAAA,CAGD,6BACC,4BAAA\",\"sourcesContent\":[\"\\n.headerbar-label {\\n\\tfont-weight: normal;\\n\\tdisplay: inline-flex;\\n\\twidth: 100%;\\n\\tmargin: 12px 0 0 0;\\n\\tgap: 8px;\\n\\talign-items: center;\\n\\tfont-size: 16px;\\n\\tcolor: var(--color-text-light);\\n\\n\\t&.profile-property {\\n\\t\\theight: 38px;\\n\\t}\\n\\n\\t&.setting-property {\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\tlabel {\\n\\t\\tcursor: pointer;\\n\\t}\\n}\\n\\n.federation-control {\\n\\tmargin: 0;\\n}\\n\\n.button-vue {\\n\\tmargin: 0 0 0 auto !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 4418;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t4418: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(28110)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","name","components","NcActionButton","props","activeScope","type","String","required","displayName","handleScopeChange","Function","default","iconClass","isSupportedScope","Boolean","tooltipDisabled","tooltip","methods","updateScope","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","class","attrs","on","$event","stopPropagation","preventDefault","apply","arguments","_v","_s","ACCOUNT_PROPERTY_ENUM","Object","freeze","ADDRESS","AVATAR","BIOGRAPHY","DISPLAYNAME","EMAIL_COLLECTION","EMAIL","HEADLINE","NOTIFICATION_EMAIL","FEDIVERSE","ORGANISATION","PHONE","PROFILE_ENABLED","ROLE","TWITTER","WEBSITE","ACCOUNT_PROPERTY_READABLE_ENUM","t","NAME_READABLE_ENUM","PROFILE_READABLE_ENUM","PROFILE_VISIBILITY","PROPERTY_READABLE_KEYS_ENUM","ACCOUNT_SETTING_PROPERTY_ENUM","LANGUAGE","LOCALE","ACCOUNT_SETTING_PROPERTY_READABLE_ENUM","SCOPE_ENUM","PRIVATE","LOCAL","FEDERATED","PUBLISHED","PROPERTY_READABLE_SUPPORTED_SCOPES_ENUM","UNPUBLISHED_READABLE_PROPERTIES","SCOPE_SUFFIX","SCOPE_PROPERTY_ENUM","DEFAULT_ADDITIONAL_EMAIL_SCOPE","VERIFICATION_ENUM","NOT_VERIFIED","VERIFICATION_IN_PROGRESS","VERIFIED","VALIDATE_EMAIL_REGEX","savePrimaryAccountProperty","async","accountProperty","value","userId","getCurrentUser","uid","url","generateOcsUrl","confirmPassword","axios","key","data","getLoggerBuilder","setApp","detectUser","build","handleError","error","message","_error$response","fullMessage","response","status","showError","logger","federationEnabled","lookupServerUploadEnabled","loadState","NcActions","FederationControlAction","readable","validator","values","includes","additional","additionalValue","disabled","handleAdditionalScopeChange","scope","readableLowerCase","toLocaleLowerCase","initialScope","computed","ariaLabel","property","scopeDisplayNameLowerCase","scopeIcon","federationScopes","supportedScopes","scopes","push","$emit","updateAdditionalScope","updatePrimaryScope","_responseData$ocs","_responseData$ocs$met","responseData","concat","savePrimaryAccountPropertyScope","handleResponse","ocs","meta","e","errorMessage","_responseData$ocs2","_responseData$ocs2$me","_ref","_l","federationScope","changeScope","FederationControl","NcButton","Plus","inputId","isEditable","isMultiValueSupported","isValidSection","isHeading","localScope","isProfileProperty","isSettingProperty","onAddAdditional","onScopeChange","tag","_e","scopedSlots","_u","fn","proxy","avatar","avatarChangeSupported","VALID_MIME_TYPES","picker","getFilePickerBuilder","setMultiSelect","setMimeTypeFilter","setModal","setType","allowDirectories","Delete","Folder","HeaderBar","NcAvatar","Upload","VueCropper","showCropper","loading","version","oc_userconfig","isGenerated","generated","validMimeTypes","cropperOptions","aspectRatio","viewMode","guides","center","highlight","autoCropArea","minContainerWidth","minContainerHeight","created","subscribe","handleDisplayNameUpdate","beforeDestroy","unsubscribe","activateLocalFilePicker","$refs","input","click","onChange","file","target","files","cancel","reader","FileReader","onload","cropper","replace","result","readAsDataURL","path","pick","generateUrl","handleAvatarUpdate","tempAvatar","encodeURIComponent","OC","requestToken","Math","floor","random","saveAvatar","canvasData","getCroppedCanvas","scaleFactor","width","scale","toBlob","blob","formData","FormData","append","Date","now","emit","$set","openFilePicker","removeAvatar","ref","join","directives","rawName","expression","_b","groups","quota","totalSpace","usage","usageRelative","Account","CircleSlice","NcProgressBar","quotaText","domProps","AlertCircle","AlertOctagon","Check","placeholder","multiLine","onValidate","onSave","initialValue","helperText","showCheckmarkIcon","showErrorIcon","onPropertyChange","debouncePropertyChange","trim","debounce","validationMessage","updateProperty","setTimeout","displayNameChangeSupported","AccountPropertySection","savePrimaryEmail","email","removeAdditionalEmail","collection","savePrimaryEmailScope","saveAdditionalEmailScope","collectionScope","validateEmail","test","slice","length","index","Number","primary","activeNotificationEmail","localVerificationState","propertyReadable","initialEmail","deleteDisabled","deleteEmailLabel","setNotificationMailDisabled","setNotificationMailLabel","isNotificationEmail","federationDisabled","inputPlaceholder","mounted","$nextTick","_this$$refs$email","focus","onEmailChange","debounceEmailChange","_this$$refs$email2","updatePrimaryEmail","addAdditionalEmail","updateAdditionalEmail","deleteAdditionalEmail","saveAdditionalEmail","_responseData$ocs3","_responseData$ocs3$me","newNotificationMailValue","saveNotificationEmail","notificationEmail","_responseData$ocs4","_responseData$ocs4$me","prevEmail","newEmail","_responseData$ocs5","_responseData$ocs5$me","handleDeleteAdditionalEmail","undefined","deleteEmail","setNotificationMail","emailMap","additionalEmails","primaryEmail","Email","map","properties","generateUniqueKey","firstAdditionalEmail","every","primaryEmailValue","get","set","onAddAdditionalEmail","onDeleteAdditionalEmail","$delete","deletedEmail","deleteFirstAdditionalEmail","handleDeleteFirstAdditionalEmail","toString","substring","onUpdateEmail","onUpdateNotificationEmail","additionalEmail","parseInt","locallyVerified","defaultPhoneRegion","phone","isValidPhoneNumber","location","website","URL","validateUrl","twitter","fediverse","commonLanguages","Array","otherLanguages","language","initialLanguage","allLanguages","reduce","acc","code","constructLanguage","updateLanguage","reloadPage","languageCode","_ref2","reload","onLanguageChange","commonLanguage","otherLanguage","languageMap","activeLanguage","Language","Web","locale","localesForLanguage","otherLocales","initialLocale","example","date","moment","format","time","firstDayOfWeek","window","dayNames","firstDay","allLocales","setInterval","refreshExample","constructLocale","updateLocale","localeCode","onLocaleChange","currentLocale","localeMap","activeLocale","Locale","ChevronDownIcon","profileEnabled","_g","$listeners","NcCheckboxRadioSwitch","isProfileEnabled","saveEnableProfile","organisation","profilePageLink","EditProfileAnchorLink","ProfileCheckbox","ProfilePreviewCard","handleOrganisationUpdate","role","headline","biography","VISIBILITY_ENUM","SHOW","SHOW_USERS_ONLY","HIDE","VISIBILITY_PROPERTY_ENUM","label","NcSelect","paramId","displayId","visibility","initialVisibility","visibilityObject","visibilityOptions","handleProfileEnabledUpdate","updateVisibility","saveProfileParameterVisibility","onVisibilityChange","profileConfig","compareParams","a","b","appId","localeCompare","VisibilityDropdown","heading","visibilityParams","entries","id","sort","marginLeft","matchMedia","matches","getComputedStyle","document","getElementById","getPropertyValue","rows","ceil","onresize","style","gridTemplateRows","param","__webpack_nonce__","btoa","getRequestToken","profileEnabledGlobally","Vue","AvatarView","AvatarSection","DetailsView","DetailsSection","DisplayNameView","DisplayNameSection","EmailView","EmailSection","PhoneView","PhoneSection","LocationView","LocationSection","WebsiteView","WebsiteSection","TwitterView","TwitterSection","FediverseView","FediverseSection","LanguageView","LanguageSection","LocaleView","LocaleSection","$mount","ProfileView","ProfileSection","OrganisationView","OrganisationSection","RoleView","RoleSection","HeadlineView","HeadlineSection","BiographyView","BiographySection","ProfileVisibilityView","ProfileVisibilitySection","___CSS_LOADER_EXPORT___","module","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","keys","resolve","exports","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","splice","r","n","getter","__esModule","d","definition","defineProperty","enumerable","g","globalThis","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","baseURI","self","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"settings-vue-settings-personal-info.js?v=445880c59941764a9abd","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue?7c57","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue?90b5","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue?02db","webpack:///nextcloud/apps/settings/src/constants/AccountPropertyConstants.js","webpack:///nextcloud/apps/settings/src/service/PersonalInfo/PersonalInfoService.js","webpack:///nextcloud/apps/settings/src/logger.js","webpack:///nextcloud/apps/settings/src/utils/handlers.js","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/FederationControl.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/FederationControl.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/FederationControl.vue?b9f2","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/FederationControl.vue?e342","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/FederationControl.vue?d068","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue?c843","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue?feed","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue?e65f","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/AvatarSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/AvatarSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/AvatarSection.vue?a960","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/AvatarSection.vue?5014","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/AvatarSection.vue?5282","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/DetailsSection.vue?08e9","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/DetailsSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/DetailsSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/DetailsSection.vue?e7aa","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/DetailsSection.vue?295f","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/DisplayNameSection.vue?3162","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue?096a","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue?ac46","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue?d38d","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/DisplayNameSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/DisplayNameSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/DisplayNameSection.vue?bde5","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue?3dd6","webpack:///nextcloud/apps/settings/src/service/PersonalInfo/EmailService.js","webpack:///nextcloud/apps/settings/src/utils/validate.js","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/EmailSection/Email.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/EmailSection/Email.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/EmailSection/Email.vue?7a13","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/EmailSection/Email.vue?bd2c","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/EmailSection/Email.vue?04df","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue?b77b","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue?1258","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/PhoneSection.vue?8b50","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/PhoneSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/PhoneSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/PhoneSection.vue?d5e3","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocationSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocationSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocationSection.vue?fdc7","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocationSection.vue?414f","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/WebsiteSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/WebsiteSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/WebsiteSection.vue?897b","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/WebsiteSection.vue?4b20","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/TwitterSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/TwitterSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/TwitterSection.vue?7e82","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/TwitterSection.vue?8ae2","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/FediverseSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/FediverseSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/FediverseSection.vue?e202","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/FediverseSection.vue?4a92","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue?22ad","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue?6358","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue?94ab","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue?6762","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue?a350","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue?41aa","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue?6463","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue?16dc","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue?9b6c","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue?8511","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue?1e8d","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue?fafb","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?f65d","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?fb42","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?7d4b","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?253f","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileCheckbox.vue?9b34","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfileCheckbox.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfileCheckbox.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileCheckbox.vue?7612","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue?2aa0","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue?240c","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue?564e","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue?accf","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue?c85f","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue?3f25","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/OrganisationSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/OrganisationSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/OrganisationSection.vue?5684","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/OrganisationSection.vue?adaf","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/RoleSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/RoleSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/RoleSection.vue?a7b4","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/RoleSection.vue?49db","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/HeadlineSection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/HeadlineSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/HeadlineSection.vue?9d73","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/HeadlineSection.vue?d565","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/BiographySection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/BiographySection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/BiographySection.vue?a6b2","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/BiographySection.vue?7384","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue?d7f0","webpack:///nextcloud/apps/settings/src/service/ProfileService.js","webpack:///nextcloud/apps/settings/src/constants/ProfileConstants.js","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue?1509","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue?c222","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue?5e5d","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue?1d28","webpack://nextcloud/./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue?7729","webpack:///nextcloud/apps/settings/src/main-personal-info.js","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/AvatarSection.vue?vue&type=style&index=0&id=022fd5d4&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/DetailsSection.vue?vue&type=style&index=0&id=1ab46e68&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/EmailSection/Email.vue?vue&type=style&index=0&id=5ff85d38&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue?vue&type=style&index=0&id=46c7eb7e&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue?vue&type=style&index=0&id=5c847b3a&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue?vue&type=style&index=0&id=92685b76&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue?vue&type=style&index=0&id=1ac456dc&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue?vue&type=style&index=0&id=84fca724&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?vue&type=style&index=0&id=1caba458&prod&lang=scss&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue?vue&type=style&index=1&id=1caba458&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue?vue&type=style&index=0&id=61586aa5&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue?vue&type=style&index=0&id=cf64d964&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue?vue&type=style&index=0&id=a07dbf96&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue?vue&type=style&index=0&id=b13d20da&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue?vue&type=style&index=0&id=6eb7d8e0&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/FederationControl.vue?vue&type=style&index=0&id=4ea07669&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue?vue&type=style&index=0&id=404f7a30&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue?vue&type=style&index=0&id=b43fcc0c&prod&lang=scss&scoped=true&","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<!--\n\t- @copyright 2021 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<NcActionButton :aria-label=\"isSupportedScope ? tooltip : tooltipDisabled\"\n\t\tclass=\"federation-actions__btn\"\n\t\t:class=\"{ 'federation-actions__btn--active': activeScope === name }\"\n\t\t:close-after-click=\"true\"\n\t\t:disabled=\"!isSupportedScope\"\n\t\t:icon=\"iconClass\"\n\t\t:title=\"displayName\"\n\t\t@click.stop.prevent=\"updateScope\">\n\t\t{{ isSupportedScope ? tooltip : tooltipDisabled }}\n\t</NcActionButton>\n</template>\n\n<script>\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\n\nexport default {\n\tname: 'FederationControlAction',\n\n\tcomponents: {\n\t\tNcActionButton,\n\t},\n\n\tprops: {\n\t\tactiveScope: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\thandleScopeChange: {\n\t\t\ttype: Function,\n\t\t\tdefault: () => {},\n\t\t},\n\t\ticonClass: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tisSupportedScope: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttooltipDisabled: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\ttooltip: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tmethods: {\n\t\tupdateScope() {\n\t\t\tthis.handleScopeChange(this.name)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.federation-actions__btn {\n\t\t&::v-deep p {\n\t\t\twidth: 150px !important;\n\t\t\tpadding: 8px 0 !important;\n\t\t\tcolor: var(--color-main-text) !important;\n\t\t\tfont-size: 12.8px !important;\n\t\t\tline-height: 1.5em !important;\n\t\t}\n\t}\n\n\t.federation-actions__btn--active {\n\t\tbackground-color: var(--color-primary-light) !important;\n\t\tbox-shadow: inset 2px 0 var(--color-primary) !important;\n\t}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControlAction.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControlAction.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControlAction.vue?vue&type=style&index=0&id=404f7a30&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControlAction.vue?vue&type=style&index=0&id=404f7a30&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FederationControlAction.vue?vue&type=template&id=404f7a30&scoped=true&\"\nimport script from \"./FederationControlAction.vue?vue&type=script&lang=js&\"\nexport * from \"./FederationControlAction.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FederationControlAction.vue?vue&type=style&index=0&id=404f7a30&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"404f7a30\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcActionButton',{staticClass:\"federation-actions__btn\",class:{ 'federation-actions__btn--active': _vm.activeScope === _vm.name },attrs:{\"aria-label\":_vm.isSupportedScope ? _vm.tooltip : _vm.tooltipDisabled,\"close-after-click\":true,\"disabled\":!_vm.isSupportedScope,\"icon\":_vm.iconClass,\"title\":_vm.displayName},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.updateScope.apply(null, arguments)}}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.isSupportedScope ? _vm.tooltip : _vm.tooltipDisabled)+\"\\n\")])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2021, Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/*\n * SYNC to be kept in sync with `lib/public/Accounts/IAccountManager.php`\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/** Enum of account properties */\nexport const ACCOUNT_PROPERTY_ENUM = Object.freeze({\n\tADDRESS: 'address',\n\tAVATAR: 'avatar',\n\tBIOGRAPHY: 'biography',\n\tDISPLAYNAME: 'displayname',\n\tEMAIL_COLLECTION: 'additional_mail',\n\tEMAIL: 'email',\n\tHEADLINE: 'headline',\n\tNOTIFICATION_EMAIL: 'notify_email',\n\tFEDIVERSE: 'fediverse',\n\tORGANISATION: 'organisation',\n\tPHONE: 'phone',\n\tPROFILE_ENABLED: 'profile_enabled',\n\tROLE: 'role',\n\tTWITTER: 'twitter',\n\tWEBSITE: 'website',\n})\n\n/** Enum of account properties to human readable account property names */\nexport const ACCOUNT_PROPERTY_READABLE_ENUM = Object.freeze({\n\tADDRESS: t('settings', 'Location'),\n\tAVATAR: t('settings', 'Profile picture'),\n\tBIOGRAPHY: t('settings', 'About'),\n\tDISPLAYNAME: t('settings', 'Full name'),\n\tEMAIL_COLLECTION: t('settings', 'Additional email'),\n\tEMAIL: t('settings', 'Email'),\n\tHEADLINE: t('settings', 'Headline'),\n\tORGANISATION: t('settings', 'Organisation'),\n\tPHONE: t('settings', 'Phone number'),\n\tPROFILE_ENABLED: t('settings', 'Profile'),\n\tROLE: t('settings', 'Role'),\n\tTWITTER: t('settings', 'Twitter'),\n\tFEDIVERSE: t('settings', 'Fediverse (e.g. Mastodon)'),\n\tWEBSITE: t('settings', 'Website'),\n})\n\nexport const NAME_READABLE_ENUM = Object.freeze({\n\t[ACCOUNT_PROPERTY_ENUM.ADDRESS]: ACCOUNT_PROPERTY_READABLE_ENUM.ADDRESS,\n\t[ACCOUNT_PROPERTY_ENUM.AVATAR]: ACCOUNT_PROPERTY_READABLE_ENUM.AVATAR,\n\t[ACCOUNT_PROPERTY_ENUM.BIOGRAPHY]: ACCOUNT_PROPERTY_READABLE_ENUM.BIOGRAPHY,\n\t[ACCOUNT_PROPERTY_ENUM.DISPLAYNAME]: ACCOUNT_PROPERTY_READABLE_ENUM.DISPLAYNAME,\n\t[ACCOUNT_PROPERTY_ENUM.EMAIL_COLLECTION]: ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL_COLLECTION,\n\t[ACCOUNT_PROPERTY_ENUM.EMAIL]: ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL,\n\t[ACCOUNT_PROPERTY_ENUM.HEADLINE]: ACCOUNT_PROPERTY_READABLE_ENUM.HEADLINE,\n\t[ACCOUNT_PROPERTY_ENUM.ORGANISATION]: ACCOUNT_PROPERTY_READABLE_ENUM.ORGANISATION,\n\t[ACCOUNT_PROPERTY_ENUM.PHONE]: ACCOUNT_PROPERTY_READABLE_ENUM.PHONE,\n\t[ACCOUNT_PROPERTY_ENUM.PROFILE_ENABLED]: ACCOUNT_PROPERTY_READABLE_ENUM.PROFILE_ENABLED,\n\t[ACCOUNT_PROPERTY_ENUM.ROLE]: ACCOUNT_PROPERTY_READABLE_ENUM.ROLE,\n\t[ACCOUNT_PROPERTY_ENUM.TWITTER]: ACCOUNT_PROPERTY_READABLE_ENUM.TWITTER,\n\t[ACCOUNT_PROPERTY_ENUM.FEDIVERSE]: ACCOUNT_PROPERTY_READABLE_ENUM.FEDIVERSE,\n\t[ACCOUNT_PROPERTY_ENUM.WEBSITE]: ACCOUNT_PROPERTY_READABLE_ENUM.WEBSITE,\n})\n\n/** Enum of profile specific sections to human readable names */\nexport const PROFILE_READABLE_ENUM = Object.freeze({\n\tPROFILE_VISIBILITY: t('settings', 'Profile visibility'),\n})\n\n/** Enum of readable account properties to account property keys used by the server */\nexport const PROPERTY_READABLE_KEYS_ENUM = Object.freeze({\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.ADDRESS]: ACCOUNT_PROPERTY_ENUM.ADDRESS,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.AVATAR]: ACCOUNT_PROPERTY_ENUM.AVATAR,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.BIOGRAPHY]: ACCOUNT_PROPERTY_ENUM.BIOGRAPHY,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.DISPLAYNAME]: ACCOUNT_PROPERTY_ENUM.DISPLAYNAME,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL_COLLECTION]: ACCOUNT_PROPERTY_ENUM.EMAIL_COLLECTION,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL]: ACCOUNT_PROPERTY_ENUM.EMAIL,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.HEADLINE]: ACCOUNT_PROPERTY_ENUM.HEADLINE,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.ORGANISATION]: ACCOUNT_PROPERTY_ENUM.ORGANISATION,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.PHONE]: ACCOUNT_PROPERTY_ENUM.PHONE,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.PROFILE_ENABLED]: ACCOUNT_PROPERTY_ENUM.PROFILE_ENABLED,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.ROLE]: ACCOUNT_PROPERTY_ENUM.ROLE,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.TWITTER]: ACCOUNT_PROPERTY_ENUM.TWITTER,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.FEDIVERSE]: ACCOUNT_PROPERTY_ENUM.FEDIVERSE,\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.WEBSITE]: ACCOUNT_PROPERTY_ENUM.WEBSITE,\n})\n\n/**\n * Enum of account setting properties\n *\n * Account setting properties unlike account properties do not support scopes*\n */\nexport const ACCOUNT_SETTING_PROPERTY_ENUM = Object.freeze({\n\tLANGUAGE: 'language',\n\tLOCALE: 'locale',\n})\n\n/** Enum of account setting properties to human readable setting properties */\nexport const ACCOUNT_SETTING_PROPERTY_READABLE_ENUM = Object.freeze({\n\tLANGUAGE: t('settings', 'Language'),\n\tLOCALE: t('settings', 'Locale'),\n})\n\n/** Enum of scopes */\nexport const SCOPE_ENUM = Object.freeze({\n\tPRIVATE: 'v2-private',\n\tLOCAL: 'v2-local',\n\tFEDERATED: 'v2-federated',\n\tPUBLISHED: 'v2-published',\n})\n\n/** Enum of readable account properties to supported scopes */\nexport const PROPERTY_READABLE_SUPPORTED_SCOPES_ENUM = Object.freeze({\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.ADDRESS]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.AVATAR]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.BIOGRAPHY]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.DISPLAYNAME]: [SCOPE_ENUM.LOCAL],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL_COLLECTION]: [SCOPE_ENUM.LOCAL],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL]: [SCOPE_ENUM.LOCAL],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.HEADLINE]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.ORGANISATION]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.PHONE]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.PROFILE_ENABLED]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.ROLE]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.TWITTER]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.FEDIVERSE]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n\t[ACCOUNT_PROPERTY_READABLE_ENUM.WEBSITE]: [SCOPE_ENUM.LOCAL, SCOPE_ENUM.PRIVATE],\n})\n\n/** List of readable account properties which aren't published to the lookup server */\nexport const UNPUBLISHED_READABLE_PROPERTIES = Object.freeze([\n\tACCOUNT_PROPERTY_READABLE_ENUM.BIOGRAPHY,\n\tACCOUNT_PROPERTY_READABLE_ENUM.HEADLINE,\n\tACCOUNT_PROPERTY_READABLE_ENUM.ORGANISATION,\n\tACCOUNT_PROPERTY_READABLE_ENUM.ROLE,\n])\n\n/** Scope suffix */\nexport const SCOPE_SUFFIX = 'Scope'\n\n/**\n * Enum of scope names to properties\n *\n * Used for federation control*\n */\nexport const SCOPE_PROPERTY_ENUM = Object.freeze({\n\t[SCOPE_ENUM.PRIVATE]: {\n\t\tname: SCOPE_ENUM.PRIVATE,\n\t\tdisplayName: t('settings', 'Private'),\n\t\ttooltip: t('settings', 'Only visible to people matched via phone number integration through Talk on mobile'),\n\t\ttooltipDisabled: t('settings', 'Not available as this property is required for core functionality including file sharing and calendar invitations'),\n\t\ticonClass: 'icon-phone',\n\t},\n\t[SCOPE_ENUM.LOCAL]: {\n\t\tname: SCOPE_ENUM.LOCAL,\n\t\tdisplayName: t('settings', 'Local'),\n\t\ttooltip: t('settings', 'Only visible to people on this instance and guests'),\n\t\t// tooltipDisabled is not required here as this scope is supported by all account properties\n\t\ticonClass: 'icon-password',\n\t},\n\t[SCOPE_ENUM.FEDERATED]: {\n\t\tname: SCOPE_ENUM.FEDERATED,\n\t\tdisplayName: t('settings', 'Federated'),\n\t\ttooltip: t('settings', 'Only synchronize to trusted servers'),\n\t\ttooltipDisabled: t('settings', 'Not available as federation has been disabled for your account, contact your system administrator if you have any questions'),\n\t\ticonClass: 'icon-contacts-dark',\n\t},\n\t[SCOPE_ENUM.PUBLISHED]: {\n\t\tname: SCOPE_ENUM.PUBLISHED,\n\t\tdisplayName: t('settings', 'Published'),\n\t\ttooltip: t('settings', 'Synchronize to trusted servers and the global and public address book'),\n\t\ttooltipDisabled: t('settings', 'Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions'),\n\t\ticonClass: 'icon-link',\n\t},\n})\n\n/** Default additional email scope */\nexport const DEFAULT_ADDITIONAL_EMAIL_SCOPE = SCOPE_ENUM.LOCAL\n\n/** Enum of verification constants, according to IAccountManager */\nexport const VERIFICATION_ENUM = Object.freeze({\n\tNOT_VERIFIED: 0,\n\tVERIFICATION_IN_PROGRESS: 1,\n\tVERIFIED: 2,\n})\n\n/**\n * Email validation regex\n *\n * Sourced from https://github.com/mpyw/FILTER_VALIDATE_EMAIL.js/blob/71e62ca48841d2246a1b531e7e84f5a01f15e615/src/regexp/ascii.ts*\n */\n// eslint-disable-next-line no-control-regex\nexport const VALIDATE_EMAIL_REGEX = /^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/i\n","/**\n * @copyright 2021, Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\nimport { SCOPE_SUFFIX } from '../../constants/AccountPropertyConstants.js'\n\n/**\n * Save the primary account property value for the user\n *\n * @param {string} accountProperty the account property\n * @param {string|boolean} value the primary value\n * @return {object}\n */\nexport const savePrimaryAccountProperty = async (accountProperty, value) => {\n\t// TODO allow boolean values on backend route handler\n\t// Convert boolean to string for compatibility\n\tif (typeof value === 'boolean') {\n\t\tvalue = value ? '1' : '0'\n\t}\n\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: accountProperty,\n\t\tvalue,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Save the federation scope of the primary account property for the user\n *\n * @param {string} accountProperty the account property\n * @param {string} scope the federation scope\n * @return {object}\n */\nexport const savePrimaryAccountPropertyScope = async (accountProperty, scope) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: `${accountProperty}${SCOPE_SUFFIX}`,\n\t\tvalue: scope,\n\t})\n\n\treturn res.data\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('settings')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError } from '@nextcloud/dialogs'\nimport { translate as t } from '@nextcloud/l10n'\n\nimport logger from '../logger.js'\n\n/**\n * @param {import('axios').AxiosError} error the error\n * @param {string?} message the message to display\n */\nexport const handleError = (error, message) => {\n\tlet fullMessage = ''\n\n\tif (message) {\n\t\tfullMessage += message\n\t}\n\n\tif (error.response?.status === 429) {\n\t\tif (fullMessage) {\n\t\t\tfullMessage += '\\n'\n\t\t}\n\t\tfullMessage += t('settings', 'There were too many requests from your network. Retry later or contact your administrator if this is an error.')\n\t}\n\n\tshowError(fullMessage)\n\tlogger.error(fullMessage || t('Error'), error)\n}\n","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<NcActions :class=\"{ 'federation-actions': !additional, 'federation-actions--additional': additional }\"\n\t\t:aria-label=\"ariaLabel\"\n\t\t:default-icon=\"scopeIcon\"\n\t\t:disabled=\"disabled\">\n\t\t<FederationControlAction v-for=\"federationScope in federationScopes\"\n\t\t\t:key=\"federationScope.name\"\n\t\t\t:active-scope=\"scope\"\n\t\t\t:display-name=\"federationScope.displayName\"\n\t\t\t:handle-scope-change=\"changeScope\"\n\t\t\t:icon-class=\"federationScope.iconClass\"\n\t\t\t:is-supported-scope=\"supportedScopes.includes(federationScope.name)\"\n\t\t\t:name=\"federationScope.name\"\n\t\t\t:tooltip-disabled=\"federationScope.tooltipDisabled\"\n\t\t\t:tooltip=\"federationScope.tooltip\"\n\t\t\t:aria-label=\"federationScope.tooltip\" />\n\t</NcActions>\n</template>\n\n<script>\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport FederationControlAction from './FederationControlAction.vue'\n\nimport {\n\tACCOUNT_PROPERTY_READABLE_ENUM,\n\tACCOUNT_SETTING_PROPERTY_READABLE_ENUM,\n\tPROFILE_READABLE_ENUM,\n\tPROPERTY_READABLE_KEYS_ENUM,\n\tPROPERTY_READABLE_SUPPORTED_SCOPES_ENUM,\n\tSCOPE_ENUM, SCOPE_PROPERTY_ENUM,\n\tUNPUBLISHED_READABLE_PROPERTIES,\n} from '../../../constants/AccountPropertyConstants.js'\nimport { savePrimaryAccountPropertyScope } from '../../../service/PersonalInfo/PersonalInfoService.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nconst {\n\tfederationEnabled,\n\tlookupServerUploadEnabled,\n} = loadState('settings', 'accountParameters', {})\n\nexport default {\n\tname: 'FederationControl',\n\n\tcomponents: {\n\t\tNcActions,\n\t\tFederationControlAction,\n\t},\n\n\tprops: {\n\t\treadable: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tvalidator: (value) => Object.values(ACCOUNT_PROPERTY_READABLE_ENUM).includes(value) || Object.values(ACCOUNT_SETTING_PROPERTY_READABLE_ENUM).includes(value) || value === PROFILE_READABLE_ENUM.PROFILE_VISIBILITY,\n\t\t},\n\t\tadditional: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tadditionalValue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\thandleAdditionalScopeChange: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\t\tscope: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\treadableLowerCase: this.readable.toLocaleLowerCase(),\n\t\t\tinitialScope: this.scope,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tariaLabel() {\n\t\t\treturn t('settings', 'Change scope level of {property}, current scope is {scope}', { property: this.readableLowerCase, scope: this.scopeDisplayNameLowerCase })\n\t\t},\n\n\t\tscopeDisplayNameLowerCase() {\n\t\t\treturn SCOPE_PROPERTY_ENUM[this.scope].displayName.toLocaleLowerCase()\n\t\t},\n\n\t\tscopeIcon() {\n\t\t\treturn SCOPE_PROPERTY_ENUM[this.scope].iconClass\n\t\t},\n\n\t\tfederationScopes() {\n\t\t\treturn Object.values(SCOPE_PROPERTY_ENUM)\n\t\t},\n\n\t\tsupportedScopes() {\n\t\t\tconst scopes = PROPERTY_READABLE_SUPPORTED_SCOPES_ENUM[this.readable]\n\n\t\t\tif (UNPUBLISHED_READABLE_PROPERTIES.includes(this.readable)) {\n\t\t\t\treturn scopes\n\t\t\t}\n\n\t\t\tif (federationEnabled) {\n\t\t\t\tscopes.push(SCOPE_ENUM.FEDERATED)\n\t\t\t}\n\n\t\t\tif (lookupServerUploadEnabled) {\n\t\t\t\tscopes.push(SCOPE_ENUM.PUBLISHED)\n\t\t\t}\n\n\t\t\treturn scopes\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync changeScope(scope) {\n\t\t\tthis.$emit('update:scope', scope)\n\n\t\t\tif (!this.additional) {\n\t\t\t\tawait this.updatePrimaryScope(scope)\n\t\t\t} else {\n\t\t\t\tawait this.updateAdditionalScope(scope)\n\t\t\t}\n\t\t},\n\n\t\tasync updatePrimaryScope(scope) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryAccountPropertyScope(PROPERTY_READABLE_KEYS_ENUM[this.readable], scope)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tscope,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update federation scope of the primary {property}', { property: this.readableLowerCase }),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tasync updateAdditionalScope(scope) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await this.handleAdditionalScopeChange(this.additionalValue, scope)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tscope,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update federation scope of additional {property}', { property: this.readableLowerCase }),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ scope, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\tthis.initialScope = scope\n\t\t\t} else {\n\t\t\t\tthis.$emit('update:scope', this.initialScope)\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.federation-actions,\n\t.federation-actions--additional {\n\t\topacity: 0.4 !important;\n\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:active {\n\t\t\topacity: 0.8 !important;\n\t\t}\n\t}\n\n\t.federation-actions--additional {\n\t\t&::v-deep button {\n\t\t\t// TODO remove this hack\n\t\t\tpadding-bottom: 7px;\n\t\t\theight: 30px !important;\n\t\t\tmin-height: 30px !important;\n\t\t\twidth: 30px !important;\n\t\t\tmin-width: 30px !important;\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControl.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControl.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControl.vue?vue&type=style&index=0&id=4ea07669&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FederationControl.vue?vue&type=style&index=0&id=4ea07669&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FederationControl.vue?vue&type=template&id=4ea07669&scoped=true&\"\nimport script from \"./FederationControl.vue?vue&type=script&lang=js&\"\nexport * from \"./FederationControl.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FederationControl.vue?vue&type=style&index=0&id=4ea07669&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4ea07669\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcActions',{class:{ 'federation-actions': !_vm.additional, 'federation-actions--additional': _vm.additional },attrs:{\"aria-label\":_vm.ariaLabel,\"default-icon\":_vm.scopeIcon,\"disabled\":_vm.disabled}},_vm._l((_vm.federationScopes),function(federationScope){return _c('FederationControlAction',{key:federationScope.name,attrs:{\"active-scope\":_vm.scope,\"display-name\":federationScope.displayName,\"handle-scope-change\":_vm.changeScope,\"icon-class\":federationScope.iconClass,\"is-supported-scope\":_vm.supportedScopes.includes(federationScope.name),\"name\":federationScope.name,\"tooltip-disabled\":federationScope.tooltipDisabled,\"tooltip\":federationScope.tooltip,\"aria-label\":federationScope.tooltip}})}),1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderBar.vue?vue&type=script&lang=js&\"","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<component :is=\"isHeading ? `h3` : `div`\" class=\"headerbar-label\" :class=\"{ 'setting-property': isSettingProperty, 'profile-property': isProfileProperty }\">\n\t\t<span v-if=\"isHeading\">\n\t\t\t<!-- Already translated as required by prop validator -->\n\t\t\t{{ readable }}\n\t\t</span>\n\t\t<label v-else :for=\"inputId\">\n\t\t\t<!-- Already translated as required by prop validator -->\n\t\t\t{{ readable }}\n\t\t</label>\n\n\t\t<template v-if=\"scope\">\n\t\t\t<FederationControl class=\"federation-control\"\n\t\t\t\t:readable=\"readable\"\n\t\t\t\t:scope.sync=\"localScope\"\n\t\t\t\t@update:scope=\"onScopeChange\" />\n\t\t</template>\n\n\t\t<template v-if=\"isEditable && isMultiValueSupported\">\n\t\t\t<NcButton type=\"tertiary\"\n\t\t\t\t:disabled=\"!isValidSection\"\n\t\t\t\t:aria-label=\"t('settings', 'Add additional email')\"\n\t\t\t\t@click.stop.prevent=\"onAddAdditional\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Plus :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('settings', 'Add') }}\n\t\t\t</NcButton>\n\t\t</template>\n\t</component>\n</template>\n\n<script>\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport Plus from 'vue-material-design-icons/Plus.vue'\n\nimport FederationControl from './FederationControl.vue'\n\nimport {\n\tACCOUNT_PROPERTY_READABLE_ENUM,\n\tPROFILE_READABLE_ENUM,\n} from '../../../constants/AccountPropertyConstants.js'\n\nexport default {\n\tname: 'HeaderBar',\n\n\tcomponents: {\n\t\tFederationControl,\n\t\tNcButton,\n\t\tPlus,\n\t},\n\n\tprops: {\n\t\tscope: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\treadable: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tinputId: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tisEditable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tisMultiValueSupported: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisValidSection: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tisHeading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tlocalScope: this.scope,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisProfileProperty() {\n\t\t\treturn this.readable === ACCOUNT_PROPERTY_READABLE_ENUM.PROFILE_ENABLED\n\t\t},\n\n\t\tisSettingProperty() {\n\t\t\treturn !Object.values(ACCOUNT_PROPERTY_READABLE_ENUM).includes(this.readable) && !Object.values(PROFILE_READABLE_ENUM).includes(this.readable)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonAddAdditional() {\n\t\t\tthis.$emit('add-additional')\n\t\t},\n\n\t\tonScopeChange(scope) {\n\t\t\tthis.$emit('update:scope', scope)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.headerbar-label {\n\t\tfont-weight: normal;\n\t\tdisplay: inline-flex;\n\t\twidth: 100%;\n\t\tmargin: 12px 0 0 0;\n\t\tgap: 8px;\n\t\talign-items: center;\n\t\tfont-size: 16px;\n\t\tcolor: var(--color-text-light);\n\n\t\t&.profile-property {\n\t\t\theight: 38px;\n\t\t}\n\n\t\t&.setting-property {\n\t\t\theight: 44px;\n\t\t}\n\n\t\tlabel {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t.federation-control {\n\t\tmargin: 0;\n\t}\n\n\t.button-vue {\n\t\tmargin: 0 0 0 auto !important;\n\t}\n</style>\n","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderBar.vue?vue&type=style&index=0&id=b43fcc0c&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderBar.vue?vue&type=style&index=0&id=b43fcc0c&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./HeaderBar.vue?vue&type=template&id=b43fcc0c&scoped=true&\"\nimport script from \"./HeaderBar.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderBar.vue?vue&type=style&index=0&id=b43fcc0c&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b43fcc0c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.isHeading ? `h3` : `div`,{tag:\"component\",staticClass:\"headerbar-label\",class:{ 'setting-property': _vm.isSettingProperty, 'profile-property': _vm.isProfileProperty }},[(_vm.isHeading)?_c('span',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.readable)+\"\\n\\t\")]):_c('label',{attrs:{\"for\":_vm.inputId}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.readable)+\"\\n\\t\")]),_vm._v(\" \"),(_vm.scope)?[_c('FederationControl',{staticClass:\"federation-control\",attrs:{\"readable\":_vm.readable,\"scope\":_vm.localScope},on:{\"update:scope\":[function($event){_vm.localScope=$event},_vm.onScopeChange]}})]:_vm._e(),_vm._v(\" \"),(_vm.isEditable && _vm.isMultiValueSupported)?[_c('NcButton',{attrs:{\"type\":\"tertiary\",\"disabled\":!_vm.isValidSection,\"aria-label\":_vm.t('settings', 'Add additional email')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.onAddAdditional.apply(null, arguments)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Plus',{attrs:{\"size\":20}})]},proxy:true}],null,false,32235154)},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Add'))+\"\\n\\t\\t\")])]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section id=\"vue-avatar-section\">\n\t\t<h3 class=\"hidden-visually\"> {{ t('settings', 'Your profile information') }} </h3>\n\t\t<HeaderBar :input-id=\"avatarChangeSupported ? inputId : null\"\n\t\t\t:readable=\"avatar.readable\"\n\t\t\t:scope.sync=\"avatar.scope\" />\n\n\t\t<div v-if=\"!showCropper\" class=\"avatar__container\">\n\t\t\t<div class=\"avatar__preview\">\n\t\t\t\t<NcAvatar v-if=\"!loading\"\n\t\t\t\t\t:user=\"userId\"\n\t\t\t\t\t:aria-label=\"t('settings', 'Your profile picture')\"\n\t\t\t\t\t:disabled-menu=\"true\"\n\t\t\t\t\t:disabled-tooltip=\"true\"\n\t\t\t\t\t:show-user-status=\"false\"\n\t\t\t\t\t:size=\"180\"\n\t\t\t\t\t:key=\"version\" />\n\t\t\t\t<div v-else class=\"icon-loading\" />\n\t\t\t</div>\n\t\t\t<template v-if=\"avatarChangeSupported\">\n\t\t\t\t<div class=\"avatar__buttons\">\n\t\t\t\t\t<NcButton :aria-label=\"t('settings', 'Upload profile picture')\"\n\t\t\t\t\t\t@click=\"activateLocalFilePicker\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Upload :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton :aria-label=\"t('settings', 'Choose profile picture from Files')\"\n\t\t\t\t\t\t@click=\"openFilePicker\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Folder :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton v-if=\"!isGenerated\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Remove profile picture')\"\n\t\t\t\t\t\t@click=\"removeAvatar\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Delete :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t\t<span>{{ t('settings', 'The file must be a PNG or JPG') }}</span>\n\t\t\t\t<input ref=\"input\"\n\t\t\t\t\t:id=\"inputId\"\n\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t:accept=\"validMimeTypes.join(',')\"\n\t\t\t\t\t@change=\"onChange\">\n\t\t\t</template>\n\t\t\t<span v-else>\n\t\t\t\t{{ t('settings', 'Picture provided by original account') }}\n\t\t\t</span>\n\t\t</div>\n\n\t\t<!-- Use v-show to ensure early cropper ref availability -->\n\t\t<div v-show=\"showCropper\" class=\"avatar__container\">\n\t\t\t<VueCropper ref=\"cropper\"\n\t\t\t\tclass=\"avatar__cropper\"\n\t\t\t\tv-bind=\"cropperOptions\" />\n\t\t\t<div class=\"avatar__cropper-buttons\">\n\t\t\t\t<NcButton @click=\"cancel\">\n\t\t\t\t\t{{ t('settings', 'Cancel') }}\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton type=\"primary\"\n\t\t\t\t\t@click=\"saveAvatar\">\n\t\t\t\t\t{{ t('settings', 'Set as profile picture') }}\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t\t<span>{{ t('settings', 'Please note that it can take up to 24 hours for your profile picture to be updated everywhere.') }}</span>\n\t\t</div>\n\t</section>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getFilePickerBuilder, showError } from '@nextcloud/dialogs'\nimport { emit, subscribe, unsubscribe } from '@nextcloud/event-bus'\n\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport VueCropper from 'vue-cropperjs'\n// eslint-disable-next-line n/no-extraneous-import\nimport 'cropperjs/dist/cropper.css'\n\nimport Upload from 'vue-material-design-icons/Upload.vue'\nimport Folder from 'vue-material-design-icons/Folder.vue'\nimport Delete from 'vue-material-design-icons/Delete.vue'\n\nimport HeaderBar from './shared/HeaderBar.vue'\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { avatar } = loadState('settings', 'personalInfoParameters', {})\nconst { avatarChangeSupported } = loadState('settings', 'accountParameters', {})\n\nconst VALID_MIME_TYPES = ['image/png', 'image/jpeg']\n\nconst picker = getFilePickerBuilder(t('settings', 'Choose your profile picture'))\n\t.setMultiSelect(false)\n\t.setMimeTypeFilter(VALID_MIME_TYPES)\n\t.setModal(true)\n\t.setType(1)\n\t.allowDirectories(false)\n\t.build()\n\nexport default {\n\tname: 'AvatarSection',\n\n\tcomponents: {\n\t\tDelete,\n\t\tFolder,\n\t\tHeaderBar,\n\t\tNcAvatar,\n\t\tNcButton,\n\t\tUpload,\n\t\tVueCropper,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tavatar: { ...avatar, readable: NAME_READABLE_ENUM[avatar.name] },\n\t\t\tavatarChangeSupported,\n\t\t\tshowCropper: false,\n\t\t\tloading: false,\n\t\t\tuserId: getCurrentUser().uid,\n\t\t\tdisplayName: getCurrentUser().displayName,\n\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\tisGenerated: oc_userconfig.avatar.generated,\n\t\t\tvalidMimeTypes: VALID_MIME_TYPES,\n\t\t\tcropperOptions: {\n\t\t\t\taspectRatio: 1 / 1,\n\t\t\t\tviewMode: 1,\n\t\t\t\tguides: false,\n\t\t\t\tcenter: false,\n\t\t\t\thighlight: false,\n\t\t\t\tautoCropArea: 1,\n\t\t\t\tminContainerWidth: 300,\n\t\t\t\tminContainerHeight: 300,\n\t\t\t},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tinputId() {\n\t\t\treturn `account-property-${this.avatar.name}`\n\t\t},\n\t},\n\n\tcreated() {\n\t\tsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t},\n\n\tmethods: {\n\t\tactivateLocalFilePicker() {\n\t\t\t// Set to null so that selecting the same file will trigger the change event\n\t\t\tthis.$refs.input.value = null\n\t\t\tthis.$refs.input.click()\n\t\t},\n\n\t\tonChange(e) {\n\t\t\tthis.loading = true\n\t\t\tconst file = e.target.files[0]\n\t\t\tif (!this.validMimeTypes.includes(file.type)) {\n\t\t\t\tshowError(t('settings', 'Please select a valid png or jpg file'))\n\t\t\t\tthis.cancel()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst reader = new FileReader()\n\t\t\treader.onload = (e) => {\n\t\t\t\tthis.$refs.cropper.replace(e.target.result)\n\t\t\t\tthis.showCropper = true\n\t\t\t}\n\t\t\treader.readAsDataURL(file)\n\t\t},\n\n\t\tasync openFilePicker() {\n\t\t\tconst path = await picker.pick()\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst { data } = await axios.post(generateUrl('/avatar'), { path })\n\t\t\t\tif (data.status === 'success') {\n\t\t\t\t\tthis.handleAvatarUpdate(false)\n\t\t\t\t} else if (data.data === 'notsquare') {\n\t\t\t\t\tconst tempAvatar = generateUrl('/avatar/tmp') + '?requesttoken=' + encodeURIComponent(OC.requestToken) + '#' + Math.floor(Math.random() * 1000)\n\t\t\t\t\tthis.$refs.cropper.replace(tempAvatar)\n\t\t\t\t\tthis.showCropper = true\n\t\t\t\t} else {\n\t\t\t\t\tshowError(data.data.message)\n\t\t\t\t\tthis.cancel()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tshowError(t('settings', 'Error setting profile picture'))\n\t\t\t\tthis.cancel()\n\t\t\t}\n\t\t},\n\n\t\tsaveAvatar() {\n\t\t\tthis.showCropper = false\n\t\t\tthis.loading = true\n\n\t\t\tconst canvasData = this.$refs.cropper.getCroppedCanvas()\n\t\t\tconst scaleFactor = canvasData.width > 512 ? 512 / canvasData.width : 1\n\n\t\t\tthis.$refs.cropper.scale(scaleFactor, scaleFactor).getCroppedCanvas().toBlob(async (blob) => {\n\t\t\t\tif (blob === null) {\n\t\t\t\t\tshowError(t('settings', 'Error cropping profile picture'))\n\t\t\t\t\tthis.cancel()\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst formData = new FormData()\n\t\t\t\tformData.append('files[]', blob)\n\t\t\t\ttry {\n\t\t\t\t\tawait axios.post(generateUrl('/avatar'), formData)\n\t\t\t\t\tthis.handleAvatarUpdate(false)\n\t\t\t\t} catch (e) {\n\t\t\t\t\tshowError(t('settings', 'Error saving profile picture'))\n\t\t\t\t\tthis.handleAvatarUpdate(this.isGenerated)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tasync removeAvatar() {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait axios.delete(generateUrl('/avatar'))\n\t\t\t\tthis.handleAvatarUpdate(true)\n\t\t\t} catch (e) {\n\t\t\t\tshowError(t('settings', 'Error removing profile picture'))\n\t\t\t\tthis.handleAvatarUpdate(this.isGenerated)\n\t\t\t}\n\t\t},\n\n\t\tcancel() {\n\t\t\tthis.showCropper = false\n\t\t\tthis.loading = false\n\t\t},\n\n\t\thandleAvatarUpdate(isGenerated) {\n\t\t\t// Update the avatar version so that avatar update handlers refresh correctly\n\t\t\tthis.version = oc_userconfig.avatar.version = Date.now()\n\t\t\tthis.isGenerated = oc_userconfig.avatar.generated = isGenerated\n\t\t\tthis.loading = false\n\t\t\temit('settings:avatar:updated', oc_userconfig.avatar.version)\n\t\t},\n\n\t\thandleDisplayNameUpdate() {\n\t\t\tthis.version = oc_userconfig.avatar.version\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tgrid-row: 1/3;\n}\n.avatar {\n\t&__container {\n\t\tmargin: 0 auto;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tgap: 16px 0;\n\t\twidth: 300px;\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\twidth: 180px;\n\t\theight: 180px;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tgap: 0 10px;\n\t}\n\n\t&__cropper {\n\t\twidth: 300px;\n\t\theight: 300px;\n\t\toverflow: hidden;\n\n\t\t&-buttons {\n\t\t\twidth: 100%;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: space-between;\n\t\t}\n\n\t\t&::v-deep .cropper-view-box {\n\t\t\tborder-radius: 50%;\n\t\t}\n\t}\n}\n\ninput[type=\"file\"] {\n\tdisplay: none;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AvatarSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AvatarSection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AvatarSection.vue?vue&type=style&index=0&id=022fd5d4&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AvatarSection.vue?vue&type=style&index=0&id=022fd5d4&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AvatarSection.vue?vue&type=template&id=022fd5d4&scoped=true&\"\nimport script from \"./AvatarSection.vue?vue&type=script&lang=js&\"\nexport * from \"./AvatarSection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AvatarSection.vue?vue&type=style&index=0&id=022fd5d4&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"022fd5d4\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',{attrs:{\"id\":\"vue-avatar-section\"}},[_c('h3',{staticClass:\"hidden-visually\"},[_vm._v(\" \"+_vm._s(_vm.t('settings', 'Your profile information'))+\" \")]),_vm._v(\" \"),_c('HeaderBar',{attrs:{\"input-id\":_vm.avatarChangeSupported ? _vm.inputId : null,\"readable\":_vm.avatar.readable,\"scope\":_vm.avatar.scope},on:{\"update:scope\":function($event){return _vm.$set(_vm.avatar, \"scope\", $event)}}}),_vm._v(\" \"),(!_vm.showCropper)?_c('div',{staticClass:\"avatar__container\"},[_c('div',{staticClass:\"avatar__preview\"},[(!_vm.loading)?_c('NcAvatar',{key:_vm.version,attrs:{\"user\":_vm.userId,\"aria-label\":_vm.t('settings', 'Your profile picture'),\"disabled-menu\":true,\"disabled-tooltip\":true,\"show-user-status\":false,\"size\":180}}):_c('div',{staticClass:\"icon-loading\"})],1),_vm._v(\" \"),(_vm.avatarChangeSupported)?[_c('div',{staticClass:\"avatar__buttons\"},[_c('NcButton',{attrs:{\"aria-label\":_vm.t('settings', 'Upload profile picture')},on:{\"click\":_vm.activateLocalFilePicker},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Upload',{attrs:{\"size\":20}})]},proxy:true}],null,false,1329850251)}),_vm._v(\" \"),_c('NcButton',{attrs:{\"aria-label\":_vm.t('settings', 'Choose profile picture from Files')},on:{\"click\":_vm.openFilePicker},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Folder',{attrs:{\"size\":20}})]},proxy:true}],null,false,4270628382)}),_vm._v(\" \"),(!_vm.isGenerated)?_c('NcButton',{attrs:{\"aria-label\":_vm.t('settings', 'Remove profile picture')},on:{\"click\":_vm.removeAvatar},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Delete',{attrs:{\"size\":20}})]},proxy:true}],null,false,2705356561)}):_vm._e()],1),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.t('settings', 'The file must be a PNG or JPG')))]),_vm._v(\" \"),_c('input',{ref:\"input\",attrs:{\"id\":_vm.inputId,\"type\":\"file\",\"accept\":_vm.validMimeTypes.join(',')},on:{\"change\":_vm.onChange}})]:_c('span',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Picture provided by original account'))+\"\\n\\t\\t\")])],2):_vm._e(),_vm._v(\" \"),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showCropper),expression:\"showCropper\"}],staticClass:\"avatar__container\"},[_c('VueCropper',_vm._b({ref:\"cropper\",staticClass:\"avatar__cropper\"},'VueCropper',_vm.cropperOptions,false)),_vm._v(\" \"),_c('div',{staticClass:\"avatar__cropper-buttons\"},[_c('NcButton',{on:{\"click\":_vm.cancel}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.saveAvatar}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Set as profile picture'))+\"\\n\\t\\t\\t\")])],1),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Please note that it can take up to 24 hours for your profile picture to be updated everywhere.')))])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('HeaderBar',{attrs:{\"is-heading\":true,\"readable\":_vm.t('settings', 'Details')}}),_vm._v(\" \"),_c('div',{staticClass:\"details\"},[_c('div',{staticClass:\"details__groups\"},[_c('Account',{attrs:{\"size\":20}}),_vm._v(\" \"),_c('div',{staticClass:\"details__groups-info\"},[_c('p',[_vm._v(_vm._s(_vm.t('settings', 'You are a member of the following groups:')))]),_vm._v(\" \"),_c('p',{staticClass:\"details__groups-list\"},[_vm._v(_vm._s(_vm.groups.join(', ')))])])],1),_vm._v(\" \"),_c('div',{staticClass:\"details__quota\"},[_c('CircleSlice',{attrs:{\"size\":20}}),_vm._v(\" \"),_c('div',{staticClass:\"details__quota-info\"},[_c('p',{staticClass:\"details__quota-text\",domProps:{\"innerHTML\":_vm._s(_vm.quotaText)}}),_vm._v(\" \"),_c('NcProgressBar',{attrs:{\"size\":\"medium\",\"value\":_vm.usageRelative,\"error\":_vm.usageRelative > 80}})],1)],1)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section>\n\t\t<HeaderBar :is-heading=\"true\" :readable=\"t('settings', 'Details')\" />\n\n\t\t<div class=\"details\">\n\t\t\t<div class=\"details__groups\">\n\t\t\t\t<Account :size=\"20\" />\n\t\t\t\t<div class=\"details__groups-info\">\n\t\t\t\t\t<p>{{ t('settings', 'You are a member of the following groups:') }}</p>\n\t\t\t\t\t<p class=\"details__groups-list\">{{ groups.join(', ') }}</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"details__quota\">\n\t\t\t\t<CircleSlice :size=\"20\" />\n\t\t\t\t<div class=\"details__quota-info\">\n\t\t\t\t\t<p class=\"details__quota-text\" v-html=\"quotaText\" />\n\t\t\t\t\t<NcProgressBar size=\"medium\"\n\t\t\t\t\t\t:value=\"usageRelative\"\n\t\t\t\t\t\t:error=\"usageRelative > 80\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\n\nimport Account from 'vue-material-design-icons/Account.vue'\nimport CircleSlice from 'vue-material-design-icons/CircleSlice3.vue'\n\nimport HeaderBar from './shared/HeaderBar.vue'\n\n/** SYNC to be kept in sync with `lib/public/Files/FileInfo.php` */\nconst SPACE_UNLIMITED = -3\n\nconst { groups, quota, totalSpace, usage, usageRelative } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'DetailsSection',\n\n\tcomponents: {\n\t\tAccount,\n\t\tCircleSlice,\n\t\tHeaderBar,\n\t\tNcProgressBar,\n\t},\n\n\tcomputed: {\n\t\tquotaText() {\n\t\t\tif (quota === SPACE_UNLIMITED) {\n\t\t\t\treturn t('settings', 'You are using <strong>{usage}</strong>', { usage })\n\t\t\t}\n\t\t\treturn t(\n\t\t\t\t'settings',\n\t\t\t\t'You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)',\n\t\t\t\t{ usage, totalSpace, usageRelative },\n\t\t\t)\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroups,\n\t\t\tusageRelative,\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.details {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: 10px 32px 10px 0;\n\tgap: 16px 0;\n\tcolor: var(--color-text-lighter);\n\n\t&__groups,\n\t&__quota {\n\t\tdisplay: flex;\n\t\tgap: 0 10px;\n\n\t\t&-info {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\twidth: 100%;\n\t\t\tgap: 4px 0;\n\t\t}\n\n\t\t&-list {\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\t&::v-deep .material-design-icon {\n\t\t\talign-self: flex-start;\n\t\t\tmargin-top: 2px;\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailsSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailsSection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailsSection.vue?vue&type=style&index=0&id=1ab46e68&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailsSection.vue?vue&type=style&index=0&id=1ab46e68&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./DetailsSection.vue?vue&type=template&id=1ab46e68&scoped=true&\"\nimport script from \"./DetailsSection.vue?vue&type=script&lang=js&\"\nexport * from \"./DetailsSection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DetailsSection.vue?vue&type=style&index=0&id=1ab46e68&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1ab46e68\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your full name'),\"is-editable\":_vm.displayNameChangeSupported,\"on-validate\":_vm.onValidate,\"on-save\":_vm.onSave}},'AccountPropertySection',_vm.displayName,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section>\n\t\t<HeaderBar :scope.sync=\"scope\"\n\t\t\t:readable.sync=\"readable\"\n\t\t\t:input-id=\"inputId\"\n\t\t\t:is-editable=\"isEditable\" />\n\n\t\t<div v-if=\"isEditable\" class=\"property\">\n\t\t\t<textarea v-if=\"multiLine\"\n\t\t\t\t:id=\"inputId\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:value=\"value\"\n\t\t\t\trows=\"8\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\t@input=\"onPropertyChange\" />\n\t\t\t<input v-else\n\t\t\t\tref=\"input\"\n\t\t\t\t:id=\"inputId\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:type=\"type\"\n\t\t\t\t:value=\"value\"\n\t\t\t\t:aria-describedby=\"helperText ? `${name}-helper-text` : ''\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\tautocomplete=\"on\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\t@input=\"onPropertyChange\">\n\n\t\t\t<div class=\"property__actions-container\">\n\t\t\t\t<transition name=\"fade\">\n\t\t\t\t\t<Check v-if=\"showCheckmarkIcon\" :size=\"20\" />\n\t\t\t\t\t<AlertOctagon v-else-if=\"showErrorIcon\" :size=\"20\" />\n\t\t\t\t</transition>\n\t\t\t</div>\n\t\t</div>\n\t\t<span v-else>\n\t\t\t{{ value || t('settings', 'No {property} set', { property: readable.toLocaleLowerCase() }) }}\n\t\t</span>\n\n\t\t<p v-if=\"helperText\"\n\t\t\t:id=\"`${name}-helper-text`\"\n\t\t\tclass=\"property__helper-text-message property__helper-text-message--error\">\n\t\t\t<AlertCircle class=\"property__helper-text-message__icon\" :size=\"18\" />\n\t\t\t{{ helperText }}\n\t\t</p>\n\t</section>\n</template>\n\n<script>\nimport debounce from 'debounce'\n\nimport AlertCircle from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport AlertOctagon from 'vue-material-design-icons/AlertOctagon.vue'\nimport Check from 'vue-material-design-icons/Check.vue'\n\nimport HeaderBar from '../shared/HeaderBar.vue'\n\nimport { savePrimaryAccountProperty } from '../../../service/PersonalInfo/PersonalInfoService.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nexport default {\n\tname: 'AccountPropertySection',\n\n\tcomponents: {\n\t\tAlertCircle,\n\t\tAlertOctagon,\n\t\tCheck,\n\t\tHeaderBar,\n\t},\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tscope: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\treadable: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: 'text',\n\t\t},\n\t\tisEditable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmultiLine: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tonValidate: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\t\tonSave: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tinitialValue: this.value,\n\t\t\thelperText: null,\n\t\t\tshowCheckmarkIcon: false,\n\t\t\tshowErrorIcon: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tinputId() {\n\t\t\treturn `account-property-${this.name}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonPropertyChange(e) {\n\t\t\tthis.$emit('update:value', e.target.value)\n\t\t\tthis.debouncePropertyChange(e.target.value.trim())\n\t\t},\n\n\t\tdebouncePropertyChange: debounce(async function(value) {\n\t\t\tthis.helperText = null\n\t\t\tif (this.$refs.input && this.$refs.input.validationMessage) {\n\t\t\t\tthis.helperText = this.$refs.input.validationMessage\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.onValidate && !this.onValidate(value)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tawait this.updateProperty(value)\n\t\t}, 500),\n\n\t\tasync updateProperty(value) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryAccountProperty(\n\t\t\t\t\tthis.name,\n\t\t\t\t\tvalue,\n\t\t\t\t)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tvalue,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update {property}', { property: this.readable.toLocaleLowerCase() }),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ value, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\tthis.initialValue = value\n\t\t\t\tif (this.onSave) {\n\t\t\t\t\tthis.onSave(value)\n\t\t\t\t}\n\t\t\t\tthis.showCheckmarkIcon = true\n\t\t\t\tsetTimeout(() => { this.showCheckmarkIcon = false }, 2000)\n\t\t\t} else {\n\t\t\t\tthis.$emit('update:value', this.initialValue)\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t\tthis.showErrorIcon = true\n\t\t\t\tsetTimeout(() => { this.showErrorIcon = false }, 2000)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n\n\t.property {\n\t\tdisplay: grid;\n\t\talign-items: center;\n\n\t\ttextarea {\n\t\t\tresize: vertical;\n\t\t\tgrid-area: 1 / 1;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tinput {\n\t\t\tgrid-area: 1 / 1;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.property__actions-container {\n\t\t\tgrid-area: 1 / 1;\n\t\t\tjustify-self: flex-end;\n\t\t\talign-self: flex-end;\n\t\t\theight: 30px;\n\n\t\t\tdisplay: flex;\n\t\t\tgap: 0 2px;\n\t\t\tmargin-right: 5px;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\t}\n\n\t.property__helper-text-message {\n\t\tpadding: 4px 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t&__icon {\n\t\t\tmargin-right: 8px;\n\t\t\talign-self: start;\n\t\t\tmargin-top: 4px;\n\t\t}\n\n\t\t&--error {\n\t\t\tcolor: var(--color-error);\n\t\t}\n\t}\n\n\t.fade-enter,\n\t.fade-leave-to {\n\t\topacity: 0;\n\t}\n\n\t.fade-enter-active {\n\t\ttransition: opacity 200ms ease-out;\n\t}\n\n\t.fade-leave-active {\n\t\ttransition: opacity 300ms ease-out;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AccountPropertySection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AccountPropertySection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AccountPropertySection.vue?vue&type=style&index=0&id=6eb7d8e0&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AccountPropertySection.vue?vue&type=style&index=0&id=6eb7d8e0&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AccountPropertySection.vue?vue&type=template&id=6eb7d8e0&scoped=true&\"\nimport script from \"./AccountPropertySection.vue?vue&type=script&lang=js&\"\nexport * from \"./AccountPropertySection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AccountPropertySection.vue?vue&type=style&index=0&id=6eb7d8e0&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6eb7d8e0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('HeaderBar',{attrs:{\"scope\":_vm.scope,\"readable\":_vm.readable,\"input-id\":_vm.inputId,\"is-editable\":_vm.isEditable},on:{\"update:scope\":function($event){_vm.scope=$event},\"update:readable\":function($event){_vm.readable=$event}}}),_vm._v(\" \"),(_vm.isEditable)?_c('div',{staticClass:\"property\"},[(_vm.multiLine)?_c('textarea',{attrs:{\"id\":_vm.inputId,\"placeholder\":_vm.placeholder,\"rows\":\"8\",\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\"},domProps:{\"value\":_vm.value},on:{\"input\":_vm.onPropertyChange}}):_c('input',{ref:\"input\",attrs:{\"id\":_vm.inputId,\"placeholder\":_vm.placeholder,\"type\":_vm.type,\"aria-describedby\":_vm.helperText ? `${_vm.name}-helper-text` : '',\"autocapitalize\":\"none\",\"autocomplete\":\"on\",\"autocorrect\":\"off\"},domProps:{\"value\":_vm.value},on:{\"input\":_vm.onPropertyChange}}),_vm._v(\" \"),_c('div',{staticClass:\"property__actions-container\"},[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.showCheckmarkIcon)?_c('Check',{attrs:{\"size\":20}}):(_vm.showErrorIcon)?_c('AlertOctagon',{attrs:{\"size\":20}}):_vm._e()],1)],1)]):_c('span',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.value || _vm.t('settings', 'No {property} set', { property: _vm.readable.toLocaleLowerCase() }))+\"\\n\\t\")]),_vm._v(\" \"),(_vm.helperText)?_c('p',{staticClass:\"property__helper-text-message property__helper-text-message--error\",attrs:{\"id\":`${_vm.name}-helper-text`}},[_c('AlertCircle',{staticClass:\"property__helper-text-message__icon\",attrs:{\"size\":18}}),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.helperText)+\"\\n\\t\")],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"displayName\"\n\t\t:placeholder=\"t('settings', 'Your full name')\"\n\t\t:is-editable=\"displayNameChangeSupported\"\n\t\t:on-validate=\"onValidate\"\n\t\t:on-save=\"onSave\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport { emit } from '@nextcloud/event-bus'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { displayName } = loadState('settings', 'personalInfoParameters', {})\nconst { displayNameChangeSupported } = loadState('settings', 'accountParameters', {})\n\nexport default {\n\tname: 'DisplayNameSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdisplayName: { ...displayName, readable: NAME_READABLE_ENUM[displayName.name] },\n\t\t\tdisplayNameChangeSupported,\n\t\t}\n\t},\n\n\tmethods: {\n\t\tonValidate(value) {\n\t\t\treturn value !== ''\n\t\t},\n\n\t\tonSave(value) {\n\t\t\tif (oc_userconfig.avatar.generated) {\n\t\t\t\t// Update the avatar version so that avatar update handlers refresh correctly\n\t\t\t\toc_userconfig.avatar.version = Date.now()\n\t\t\t}\n\t\t\temit('settings:display-name:updated', value)\n\t\t},\n\t}\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DisplayNameSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DisplayNameSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DisplayNameSection.vue?vue&type=template&id=8950c424&\"\nimport script from \"./DisplayNameSection.vue?vue&type=script&lang=js&\"\nexport * from \"./DisplayNameSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('HeaderBar',{attrs:{\"input-id\":_vm.inputId,\"readable\":_vm.primaryEmail.readable,\"handle-scope-change\":_vm.savePrimaryEmailScope,\"is-editable\":true,\"is-multi-value-supported\":true,\"is-valid-section\":_vm.isValidSection,\"scope\":_vm.primaryEmail.scope},on:{\"update:scope\":function($event){return _vm.$set(_vm.primaryEmail, \"scope\", $event)},\"add-additional\":_vm.onAddAdditionalEmail}}),_vm._v(\" \"),(_vm.displayNameChangeSupported)?[_c('Email',{attrs:{\"primary\":true,\"scope\":_vm.primaryEmail.scope,\"email\":_vm.primaryEmail.value,\"active-notification-email\":_vm.notificationEmail},on:{\"update:scope\":function($event){return _vm.$set(_vm.primaryEmail, \"scope\", $event)},\"update:email\":[function($event){return _vm.$set(_vm.primaryEmail, \"value\", $event)},_vm.onUpdateEmail],\"update:activeNotificationEmail\":function($event){_vm.notificationEmail=$event},\"update:active-notification-email\":function($event){_vm.notificationEmail=$event},\"update:notification-email\":_vm.onUpdateNotificationEmail}})]:_c('span',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.primaryEmail.value || _vm.t('settings', 'No email address set'))+\"\\n\\t\")]),_vm._v(\" \"),(_vm.additionalEmails.length)?[_c('em',{staticClass:\"additional-emails-label\"},[_vm._v(_vm._s(_vm.t('settings', 'Additional emails')))]),_vm._v(\" \"),_vm._l((_vm.additionalEmails),function(additionalEmail,index){return _c('Email',{key:additionalEmail.key,attrs:{\"index\":index,\"scope\":additionalEmail.scope,\"email\":additionalEmail.value,\"local-verification-state\":parseInt(additionalEmail.locallyVerified, 10),\"active-notification-email\":_vm.notificationEmail},on:{\"update:scope\":function($event){return _vm.$set(additionalEmail, \"scope\", $event)},\"update:email\":[function($event){return _vm.$set(additionalEmail, \"value\", $event)},_vm.onUpdateEmail],\"update:activeNotificationEmail\":function($event){_vm.notificationEmail=$event},\"update:active-notification-email\":function($event){_vm.notificationEmail=$event},\"update:notification-email\":_vm.onUpdateNotificationEmail,\"delete-additional-email\":function($event){return _vm.onDeleteAdditionalEmail(index)}}})})]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2021, Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\nimport { ACCOUNT_PROPERTY_ENUM, SCOPE_SUFFIX } from '../../constants/AccountPropertyConstants.js'\n\n/**\n * Save the primary email of the user\n *\n * @param {string} email the primary email\n * @return {object}\n */\nexport const savePrimaryEmail = async (email) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: ACCOUNT_PROPERTY_ENUM.EMAIL,\n\t\tvalue: email,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Save an additional email of the user\n *\n * Will be appended to the user's additional emails*\n *\n * @param {string} email the additional email\n * @return {object}\n */\nexport const saveAdditionalEmail = async (email) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: ACCOUNT_PROPERTY_ENUM.EMAIL_COLLECTION,\n\t\tvalue: email,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Save the notification email of the user\n *\n * @param {string} email the notification email\n * @return {object}\n */\nexport const saveNotificationEmail = async (email) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: ACCOUNT_PROPERTY_ENUM.NOTIFICATION_EMAIL,\n\t\tvalue: email,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Remove an additional email of the user\n *\n * @param {string} email the additional email\n * @return {object}\n */\nexport const removeAdditionalEmail = async (email) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}/{collection}', { userId, collection: ACCOUNT_PROPERTY_ENUM.EMAIL_COLLECTION })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: email,\n\t\tvalue: '',\n\t})\n\n\treturn res.data\n}\n\n/**\n * Update an additional email of the user\n *\n * @param {string} prevEmail the additional email to be updated\n * @param {string} newEmail the new additional email\n * @return {object}\n */\nexport const updateAdditionalEmail = async (prevEmail, newEmail) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}/{collection}', { userId, collection: ACCOUNT_PROPERTY_ENUM.EMAIL_COLLECTION })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: prevEmail,\n\t\tvalue: newEmail,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Save the federation scope for the primary email of the user\n *\n * @param {string} scope the federation scope\n * @return {object}\n */\nexport const savePrimaryEmailScope = async (scope) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: `${ACCOUNT_PROPERTY_ENUM.EMAIL}${SCOPE_SUFFIX}`,\n\t\tvalue: scope,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Save the federation scope for the additional email of the user\n *\n * @param {string} email the additional email\n * @param {string} scope the federation scope\n * @return {object}\n */\nexport const saveAdditionalEmailScope = async (email, scope) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('cloud/users/{userId}/{collectionScope}', { userId, collectionScope: `${ACCOUNT_PROPERTY_ENUM.EMAIL_COLLECTION}${SCOPE_SUFFIX}` })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tkey: email,\n\t\tvalue: scope,\n\t})\n\n\treturn res.data\n}\n","/**\n * @copyright 2021, Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/*\n * Frontend validators, less strict than backend validators\n *\n * TODO add nice validation errors for Profile page settings modal\n */\n\nimport { VALIDATE_EMAIL_REGEX } from '../constants/AccountPropertyConstants.js'\n\n/**\n * Validate the email input\n *\n * Compliant with PHP core FILTER_VALIDATE_EMAIL validator*\n *\n * Reference implementation https://github.com/mpyw/FILTER_VALIDATE_EMAIL.js/blob/71e62ca48841d2246a1b531e7e84f5a01f15e615/src/index.ts*\n *\n * @param {string} input the input\n * @return {boolean}\n */\nexport function validateEmail(input) {\n\treturn typeof input === 'string'\n\t\t&& VALIDATE_EMAIL_REGEX.test(input)\n\t\t&& input.slice(-1) !== '\\n'\n\t\t&& input.length <= 320\n\t\t&& encodeURIComponent(input).replace(/%../g, 'x').length <= 320\n}\n\n/**\n * Validate the URL input\n *\n * @param {string} input the input\n * @return {boolean}\n */\nexport function validateUrl(input) {\n\ttry {\n\t\t// eslint-disable-next-line no-new\n\t\tnew URL(input)\n\t\treturn true\n\t} catch (e) {\n\t\treturn false\n\t}\n}\n\n/**\n * Validate the language input\n *\n * @param {object} input the input\n * @return {boolean}\n */\nexport function validateLanguage(input) {\n\treturn input.code !== ''\n\t\t&& input.name !== ''\n\t\t&& input.name !== undefined\n}\n\n/**\n * Validate the locale input\n *\n * @param {object} input the input\n * @return {boolean}\n */\nexport function validateLocale(input) {\n\treturn input.code !== ''\n\t\t&& input.name !== ''\n\t\t&& input.name !== undefined\n}\n\n/**\n * Validate boolean input\n *\n * @param {boolean} input the input\n * @return {boolean}\n */\nexport function validateBoolean(input) {\n\treturn typeof input === 'boolean'\n}\n","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<div>\n\t\t<div class=\"email\">\n\t\t\t<input :id=\"inputId\"\n\t\t\t\tref=\"email\"\n\t\t\t\ttype=\"email\"\n\t\t\t\t:placeholder=\"inputPlaceholder\"\n\t\t\t\t:value=\"email\"\n\t\t\t\t:aria-describedby=\"helperText ? `${inputId}-helper-text` : ''\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\tautocomplete=\"on\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\t@input=\"onEmailChange\">\n\n\t\t\t<div class=\"email__actions-container\">\n\t\t\t\t<transition name=\"fade\">\n\t\t\t\t\t<Check v-if=\"showCheckmarkIcon\" :size=\"20\" />\n\t\t\t\t\t<AlertOctagon v-else-if=\"showErrorIcon\" :size=\"20\" />\n\t\t\t\t</transition>\n\n\t\t\t\t<template v-if=\"!primary\">\n\t\t\t\t\t<FederationControl :readable=\"propertyReadable\"\n\t\t\t\t\t\t:additional=\"true\"\n\t\t\t\t\t\t:additional-value=\"email\"\n\t\t\t\t\t\t:disabled=\"federationDisabled\"\n\t\t\t\t\t\t:handle-additional-scope-change=\"saveAdditionalEmailScope\"\n\t\t\t\t\t\t:scope.sync=\"localScope\"\n\t\t\t\t\t\t@update:scope=\"onScopeChange\" />\n\t\t\t\t</template>\n\n\t\t\t\t<NcActions class=\"email__actions\"\n\t\t\t\t\t:aria-label=\"t('settings', 'Email options')\"\n\t\t\t\t\t:force-menu=\"true\">\n\t\t\t\t\t<NcActionButton :aria-label=\"deleteEmailLabel\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t:disabled=\"deleteDisabled\"\n\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t@click.stop.prevent=\"deleteEmail\">\n\t\t\t\t\t\t{{ deleteEmailLabel }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton v-if=\"!primary || !isNotificationEmail\"\n\t\t\t\t\t\t:aria-label=\"setNotificationMailLabel\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t:disabled=\"setNotificationMailDisabled\"\n\t\t\t\t\t\ticon=\"icon-favorite\"\n\t\t\t\t\t\t@click.stop.prevent=\"setNotificationMail\">\n\t\t\t\t\t\t{{ setNotificationMailLabel }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<p v-if=\"helperText\"\n\t\t\t:id=\"`${inputId}-helper-text`\"\n\t\t\tclass=\"email__helper-text-message email__helper-text-message--error\">\n\t\t\t<AlertCircle class=\"email__helper-text-message__icon\" :size=\"18\" />\n\t\t\t{{ helperText }}\n\t\t</p>\n\n\t\t<em v-if=\"isNotificationEmail\">\n\t\t\t{{ t('settings', 'Primary email for password reset and notifications') }}\n\t\t</em>\n\t</div>\n</template>\n\n<script>\nimport { NcActions, NcActionButton } from '@nextcloud/vue'\nimport AlertCircle from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport AlertOctagon from 'vue-material-design-icons/AlertOctagon.vue'\nimport Check from 'vue-material-design-icons/Check.vue'\nimport debounce from 'debounce'\n\nimport FederationControl from '../shared/FederationControl.vue'\nimport { handleError } from '../../../utils/handlers.js'\n\nimport { ACCOUNT_PROPERTY_READABLE_ENUM, VERIFICATION_ENUM } from '../../../constants/AccountPropertyConstants.js'\nimport {\n\tremoveAdditionalEmail,\n\tsaveAdditionalEmail,\n\tsaveAdditionalEmailScope,\n\tsaveNotificationEmail,\n\tsavePrimaryEmail,\n\tupdateAdditionalEmail,\n} from '../../../service/PersonalInfo/EmailService.js'\nimport { validateEmail } from '../../../utils/validate.js'\n\nexport default {\n\tname: 'Email',\n\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tAlertCircle,\n\t\tAlertOctagon,\n\t\tCheck,\n\t\tFederationControl,\n\t},\n\n\tprops: {\n\t\temail: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t\tprimary: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tscope: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactiveNotificationEmail: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tlocalVerificationState: {\n\t\t\ttype: Number,\n\t\t\tdefault: VERIFICATION_ENUM.NOT_VERIFIED,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tpropertyReadable: ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL,\n\t\t\tinitialEmail: this.email,\n\t\t\tlocalScope: this.scope,\n\t\t\tsaveAdditionalEmailScope,\n\t\t\thelperText: null,\n\t\t\tshowCheckmarkIcon: false,\n\t\t\tshowErrorIcon: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tdeleteDisabled() {\n\t\t\tif (this.primary) {\n\t\t\t\t// Disable for empty primary email as there is nothing to delete\n\t\t\t\t// OR when initialEmail (reflects server state) and email (current input) are not the same\n\t\t\t\treturn this.email === '' || this.initialEmail !== this.email\n\t\t\t} else if (this.initialEmail !== '') {\n\t\t\t\treturn this.initialEmail !== this.email\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\n\t\tdeleteEmailLabel() {\n\t\t\tif (this.primary) {\n\t\t\t\treturn t('settings', 'Remove primary email')\n\t\t\t}\n\t\t\treturn t('settings', 'Delete email')\n\t\t},\n\n\t setNotificationMailDisabled() {\n\t\t\treturn !this.primary && this.localVerificationState !== VERIFICATION_ENUM.VERIFIED\n\t\t},\n\n\t setNotificationMailLabel() {\n\t\t\tif (this.isNotificationEmail) {\n\t\t\t\treturn t('settings', 'Unset as primary email')\n\t\t\t} else if (!this.primary && this.localVerificationState !== VERIFICATION_ENUM.VERIFIED) {\n\t\t\t\treturn t('settings', 'This address is not confirmed')\n\t\t\t}\n\t\t\treturn t('settings', 'Set as primary email')\n\t\t},\n\n\t\tfederationDisabled() {\n\t\t\treturn !this.initialEmail\n\t\t},\n\n\t\tinputId() {\n\t\t\tif (this.primary) {\n\t\t\t\treturn 'email'\n\t\t\t}\n\t\t\treturn `email-${this.index}`\n\t\t},\n\n\t\tinputPlaceholder() {\n\t\t\tif (this.primary) {\n\t\t\t\treturn t('settings', 'Your email address')\n\t\t\t}\n\t\t\treturn t('settings', 'Additional email address {index}', { index: this.index + 1 })\n\t\t},\n\n\t\tisNotificationEmail() {\n\t\t\treturn (this.email && this.email === this.activeNotificationEmail)\n\t\t\t\t|| (this.primary && this.activeNotificationEmail === '')\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (!this.primary && this.initialEmail === '') {\n\t\t\t// $nextTick is needed here, otherwise it may not always work https://stackoverflow.com/questions/51922767/autofocus-input-on-mount-vue-ios/63485725#63485725\n\t\t\tthis.$nextTick(() => this.$refs.email?.focus())\n\t\t}\n\t},\n\n\tmethods: {\n\t\tonEmailChange(e) {\n\t\t\tthis.$emit('update:email', e.target.value)\n\t\t\tthis.debounceEmailChange(e.target.value.trim())\n\t\t},\n\n\t\tdebounceEmailChange: debounce(async function(email) {\n\t\t\tthis.helperText = null\n\t\t\tif (this.$refs.email?.validationMessage) {\n\t\t\t\tthis.helperText = this.$refs.email.validationMessage\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (validateEmail(email) || email === '') {\n\t\t\t\tif (this.primary) {\n\t\t\t\t\tawait this.updatePrimaryEmail(email)\n\t\t\t\t} else {\n\t\t\t\t\tif (email) {\n\t\t\t\t\t\tif (this.initialEmail === '') {\n\t\t\t\t\t\t\tawait this.addAdditionalEmail(email)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait this.updateAdditionalEmail(email)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 500),\n\n\t\tasync deleteEmail() {\n\t\t\tif (this.primary) {\n\t\t\t\tthis.$emit('update:email', '')\n\t\t\t\tawait this.updatePrimaryEmail('')\n\t\t\t} else {\n\t\t\t\tawait this.deleteAdditionalEmail()\n\t\t\t}\n\t\t},\n\n\t\tasync updatePrimaryEmail(email) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryEmail(email)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\temail,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tif (email === '') {\n\t\t\t\t\tthis.handleResponse({\n\t\t\t\t\t\terrorMessage: t('settings', 'Unable to delete primary email address'),\n\t\t\t\t\t\terror: e,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tthis.handleResponse({\n\t\t\t\t\t\terrorMessage: t('settings', 'Unable to update primary email address'),\n\t\t\t\t\t\terror: e,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tasync addAdditionalEmail(email) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await saveAdditionalEmail(email)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\temail,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to add additional email address'),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tasync setNotificationMail() {\n\t\t try {\n\t\t\t const newNotificationMailValue = (this.primary || this.isNotificationEmail) ? '' : this.initialEmail\n\t\t\t const responseData = await saveNotificationEmail(newNotificationMailValue)\n\t\t\t this.handleResponse({\n\t\t\t\t notificationEmail: newNotificationMailValue,\n\t\t\t\t status: responseData.ocs?.meta?.status,\n\t\t\t })\n\t\t } catch (e) {\n\t\t\t this.handleResponse({\n\t\t\t\t errorMessage: 'Unable to choose this email for notifications',\n\t\t\t\t error: e,\n\t\t\t })\n\t\t }\n\t\t},\n\n\t\tasync updateAdditionalEmail(email) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await updateAdditionalEmail(this.initialEmail, email)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\temail,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update additional email address'),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tasync deleteAdditionalEmail() {\n\t\t\ttry {\n\t\t\t\tconst responseData = await removeAdditionalEmail(this.initialEmail)\n\t\t\t\tthis.handleDeleteAdditionalEmail(responseData.ocs?.meta?.status)\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to delete additional email address'),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\thandleDeleteAdditionalEmail(status) {\n\t\t\tif (status === 'ok') {\n\t\t\t\tthis.$emit('delete-additional-email')\n\t\t\t} else {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to delete additional email address'),\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ email, notificationEmail, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\t// Ensure that local state reflects server state\n\t\t\t\tif (email) {\n\t\t\t\t\tthis.initialEmail = email\n\t\t\t\t} else if (notificationEmail !== undefined) {\n\t\t\t\t\tthis.$emit('update:notification-email', notificationEmail)\n\t\t\t\t}\n\t\t\t\tthis.showCheckmarkIcon = true\n\t\t\t\tsetTimeout(() => { this.showCheckmarkIcon = false }, 2000)\n\t\t\t} else {\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t\tthis.showErrorIcon = true\n\t\t\t\tsetTimeout(() => { this.showErrorIcon = false }, 2000)\n\t\t\t}\n\t\t},\n\n\t\tonScopeChange(scope) {\n\t\t\tthis.$emit('update:scope', scope)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.email {\n\tdisplay: grid;\n\talign-items: center;\n\n\tinput {\n\t\tgrid-area: 1 / 1;\n\t\twidth: 100%;\n\t}\n\n\t.email__actions-container {\n\t\tgrid-area: 1 / 1;\n\t\tjustify-self: flex-end;\n\t\theight: 30px;\n\n\t\tdisplay: flex;\n\t\tgap: 0 2px;\n\t\tmargin-right: 5px;\n\n\t\t.email__actions {\n\t\t\topacity: 0.4 !important;\n\n\t\t\t&:hover,\n\t\t\t&:focus,\n\t\t\t&:active {\n\t\t\t\topacity: 0.8 !important;\n\t\t\t}\n\n\t\t\t&::v-deep button {\n\t\t\t\theight: 30px !important;\n\t\t\t\tmin-height: 30px !important;\n\t\t\t\twidth: 30px !important;\n\t\t\t\tmin-width: 30px !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__helper-text-message {\n\t\tpadding: 4px 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t&__icon {\n\t\t\tmargin-right: 8px;\n\t\t\talign-self: start;\n\t\t\tmargin-top: 4px;\n\t\t}\n\n\t\t&--error {\n\t\t\tcolor: var(--color-error);\n\t\t}\n\t}\n}\n\n.fade-enter,\n.fade-leave-to {\n\topacity: 0;\n}\n\n.fade-enter-active {\n\ttransition: opacity 200ms ease-out;\n}\n\n.fade-leave-active {\n\ttransition: opacity 300ms ease-out;\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Email.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Email.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Email.vue?vue&type=style&index=0&id=5ff85d38&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Email.vue?vue&type=style&index=0&id=5ff85d38&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Email.vue?vue&type=template&id=5ff85d38&scoped=true&\"\nimport script from \"./Email.vue?vue&type=script&lang=js&\"\nexport * from \"./Email.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Email.vue?vue&type=style&index=0&id=5ff85d38&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5ff85d38\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"email\"},[_c('input',{ref:\"email\",attrs:{\"id\":_vm.inputId,\"type\":\"email\",\"placeholder\":_vm.inputPlaceholder,\"aria-describedby\":_vm.helperText ? `${_vm.inputId}-helper-text` : '',\"autocapitalize\":\"none\",\"autocomplete\":\"on\",\"autocorrect\":\"off\"},domProps:{\"value\":_vm.email},on:{\"input\":_vm.onEmailChange}}),_vm._v(\" \"),_c('div',{staticClass:\"email__actions-container\"},[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.showCheckmarkIcon)?_c('Check',{attrs:{\"size\":20}}):(_vm.showErrorIcon)?_c('AlertOctagon',{attrs:{\"size\":20}}):_vm._e()],1),_vm._v(\" \"),(!_vm.primary)?[_c('FederationControl',{attrs:{\"readable\":_vm.propertyReadable,\"additional\":true,\"additional-value\":_vm.email,\"disabled\":_vm.federationDisabled,\"handle-additional-scope-change\":_vm.saveAdditionalEmailScope,\"scope\":_vm.localScope},on:{\"update:scope\":[function($event){_vm.localScope=$event},_vm.onScopeChange]}})]:_vm._e(),_vm._v(\" \"),_c('NcActions',{staticClass:\"email__actions\",attrs:{\"aria-label\":_vm.t('settings', 'Email options'),\"force-menu\":true}},[_c('NcActionButton',{attrs:{\"aria-label\":_vm.deleteEmailLabel,\"close-after-click\":true,\"disabled\":_vm.deleteDisabled,\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.deleteEmail.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.deleteEmailLabel)+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(!_vm.primary || !_vm.isNotificationEmail)?_c('NcActionButton',{attrs:{\"aria-label\":_vm.setNotificationMailLabel,\"close-after-click\":true,\"disabled\":_vm.setNotificationMailDisabled,\"icon\":\"icon-favorite\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.setNotificationMail.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.setNotificationMailLabel)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1)],2)]),_vm._v(\" \"),(_vm.helperText)?_c('p',{staticClass:\"email__helper-text-message email__helper-text-message--error\",attrs:{\"id\":`${_vm.inputId}-helper-text`}},[_c('AlertCircle',{staticClass:\"email__helper-text-message__icon\",attrs:{\"size\":18}}),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.helperText)+\"\\n\\t\")],1):_vm._e(),_vm._v(\" \"),(_vm.isNotificationEmail)?_c('em',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Primary email for password reset and notifications'))+\"\\n\\t\")]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section>\n\t\t<HeaderBar :input-id=\"inputId\"\n\t\t\t:readable=\"primaryEmail.readable\"\n\t\t\t:handle-scope-change=\"savePrimaryEmailScope\"\n\t\t\t:is-editable=\"true\"\n\t\t\t:is-multi-value-supported=\"true\"\n\t\t\t:is-valid-section=\"isValidSection\"\n\t\t\t:scope.sync=\"primaryEmail.scope\"\n\t\t\t@add-additional=\"onAddAdditionalEmail\" />\n\n\t\t<template v-if=\"displayNameChangeSupported\">\n\t\t\t<Email :primary=\"true\"\n\t\t\t\t:scope.sync=\"primaryEmail.scope\"\n\t\t\t\t:email.sync=\"primaryEmail.value\"\n\t\t\t\t:active-notification-email.sync=\"notificationEmail\"\n\t\t\t\t@update:email=\"onUpdateEmail\"\n\t\t\t\t@update:notification-email=\"onUpdateNotificationEmail\" />\n\t\t</template>\n\n\t\t<span v-else>\n\t\t\t{{ primaryEmail.value || t('settings', 'No email address set') }}\n\t\t</span>\n\n\t\t<template v-if=\"additionalEmails.length\">\n\t\t\t<em class=\"additional-emails-label\">{{ t('settings', 'Additional emails') }}</em>\n\t\t\t<!-- TODO use unique key for additional email when uniqueness can be guaranteed, see https://github.com/nextcloud/server/issues/26866 -->\n\t\t\t<Email v-for=\"(additionalEmail, index) in additionalEmails\"\n\t\t\t\t:key=\"additionalEmail.key\"\n\t\t\t\t:index=\"index\"\n\t\t\t\t:scope.sync=\"additionalEmail.scope\"\n\t\t\t\t:email.sync=\"additionalEmail.value\"\n\t\t\t\t:local-verification-state=\"parseInt(additionalEmail.locallyVerified, 10)\"\n\t\t\t\t:active-notification-email.sync=\"notificationEmail\"\n\t\t\t\t@update:email=\"onUpdateEmail\"\n\t\t\t\t@update:notification-email=\"onUpdateNotificationEmail\"\n\t\t\t\t@delete-additional-email=\"onDeleteAdditionalEmail(index)\" />\n\t\t</template>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport Email from './Email.vue'\nimport HeaderBar from '../shared/HeaderBar.vue'\n\nimport { ACCOUNT_PROPERTY_READABLE_ENUM, DEFAULT_ADDITIONAL_EMAIL_SCOPE, NAME_READABLE_ENUM } from '../../../constants/AccountPropertyConstants.js'\nimport { savePrimaryEmail, savePrimaryEmailScope, removeAdditionalEmail } from '../../../service/PersonalInfo/EmailService.js'\nimport { validateEmail } from '../../../utils/validate.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nconst { emailMap: { additionalEmails, primaryEmail, notificationEmail } } = loadState('settings', 'personalInfoParameters', {})\nconst { displayNameChangeSupported } = loadState('settings', 'accountParameters', {})\n\nexport default {\n\tname: 'EmailSection',\n\n\tcomponents: {\n\t\tHeaderBar,\n\t\tEmail,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\taccountProperty: ACCOUNT_PROPERTY_READABLE_ENUM.EMAIL,\n\t\t\tadditionalEmails: additionalEmails.map(properties => ({ ...properties, key: this.generateUniqueKey() })),\n\t\t\tdisplayNameChangeSupported,\n\t\t\tprimaryEmail: { ...primaryEmail, readable: NAME_READABLE_ENUM[primaryEmail.name] },\n\t\t\tsavePrimaryEmailScope,\n\t\t\tnotificationEmail,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tfirstAdditionalEmail() {\n\t\t\tif (this.additionalEmails.length) {\n\t\t\t\treturn this.additionalEmails[0].value\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\tinputId() {\n\t\t\treturn `account-property-${this.primaryEmail.name}`\n\t\t},\n\n\t\tisValidSection() {\n\t\t\treturn validateEmail(this.primaryEmail.value)\n\t\t\t\t&& this.additionalEmails.map(({ value }) => value).every(validateEmail)\n\t\t},\n\n\t\tprimaryEmailValue: {\n\t\t\tget() {\n\t\t\t\treturn this.primaryEmail.value\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.primaryEmail.value = value\n\t\t\t},\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonAddAdditionalEmail() {\n\t\t\tif (this.isValidSection) {\n\t\t\t\tthis.additionalEmails.push({ value: '', scope: DEFAULT_ADDITIONAL_EMAIL_SCOPE, key: this.generateUniqueKey() })\n\t\t\t}\n\t\t},\n\n\t\tonDeleteAdditionalEmail(index) {\n\t\t\tthis.$delete(this.additionalEmails, index)\n\t\t},\n\n\t\tasync onUpdateEmail() {\n\t\t\tif (this.primaryEmailValue === '' && this.firstAdditionalEmail) {\n\t\t\t\tconst deletedEmail = this.firstAdditionalEmail\n\t\t\t\tawait this.deleteFirstAdditionalEmail()\n\t\t\t\tthis.primaryEmailValue = deletedEmail\n\t\t\t\tawait this.updatePrimaryEmail()\n\t\t\t}\n\t\t},\n\n\t\tasync onUpdateNotificationEmail(email) {\n\t\t\tthis.notificationEmail = email\n\t\t},\n\n\t\tasync updatePrimaryEmail() {\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryEmail(this.primaryEmailValue)\n\t\t\t\tthis.handleResponse(responseData.ocs?.meta?.status)\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse(\n\t\t\t\t\t'error',\n\t\t\t\t\tt('settings', 'Unable to update primary email address'),\n\t\t\t\t\te\n\t\t\t\t)\n\t\t\t}\n\t\t},\n\n\t\tasync deleteFirstAdditionalEmail() {\n\t\t\ttry {\n\t\t\t\tconst responseData = await removeAdditionalEmail(this.firstAdditionalEmail)\n\t\t\t\tthis.handleDeleteFirstAdditionalEmail(responseData.ocs?.meta?.status)\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse(\n\t\t\t\t\t'error',\n\t\t\t\t\tt('settings', 'Unable to delete additional email address'),\n\t\t\t\t\te\n\t\t\t\t)\n\t\t\t}\n\t\t},\n\n\t\thandleDeleteFirstAdditionalEmail(status) {\n\t\t\tif (status === 'ok') {\n\t\t\t\tthis.$delete(this.additionalEmails, 0)\n\t\t\t} else {\n\t\t\t\tthis.handleResponse(\n\t\t\t\t\t'error',\n\t\t\t\t\tt('settings', 'Unable to delete additional email address'),\n\t\t\t\t\t{}\n\t\t\t\t)\n\t\t\t}\n\t\t},\n\n\t\thandleResponse(status, errorMessage, error) {\n\t\t\tif (status !== 'ok') {\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t}\n\t\t},\n\n\t\tgenerateUniqueKey() {\n\t\t\treturn Math.random().toString(36).substring(2)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n\n\t.additional-emails-label {\n\t\tdisplay: block;\n\t\tmargin-top: 16px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailSection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailSection.vue?vue&type=style&index=0&id=46c7eb7e&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailSection.vue?vue&type=style&index=0&id=46c7eb7e&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./EmailSection.vue?vue&type=template&id=46c7eb7e&scoped=true&\"\nimport script from \"./EmailSection.vue?vue&type=script&lang=js&\"\nexport * from \"./EmailSection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EmailSection.vue?vue&type=style&index=0&id=46c7eb7e&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"46c7eb7e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your phone number'),\"type\":\"tel\",\"on-validate\":_vm.onValidate}},'AccountPropertySection',_vm.phone,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"phone\"\n\t\t:placeholder=\"t('settings', 'Your phone number')\"\n\t\ttype=\"tel\"\n\t\t:on-validate=\"onValidate\" />\n</template>\n\n<script>\nimport { isValidPhoneNumber } from 'libphonenumber-js'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst {\n\tdefaultPhoneRegion,\n\tphone,\n} = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'PhoneSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tphone: { ...phone, readable: NAME_READABLE_ENUM[phone.name] },\n\t\t}\n\t},\n\n\tmethods: {\n\t\tonValidate(value) {\n\t\t\tif (defaultPhoneRegion) {\n\t\t\t\treturn isValidPhoneNumber(value, defaultPhoneRegion)\n\t\t\t}\n\t\t\treturn isValidPhoneNumber(value)\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PhoneSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PhoneSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PhoneSection.vue?vue&type=template&id=4a6cc7c9&\"\nimport script from \"./PhoneSection.vue?vue&type=script&lang=js&\"\nexport * from \"./PhoneSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"location\"\n\t\t:placeholder=\"t('settings', 'Your location')\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { location } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'LocationSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tlocation: { ...location, readable: NAME_READABLE_ENUM[location.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocationSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocationSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LocationSection.vue?vue&type=template&id=3b6d0ee7&\"\nimport script from \"./LocationSection.vue?vue&type=script&lang=js&\"\nexport * from \"./LocationSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your location')}},'AccountPropertySection',_vm.location,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"website\"\n\t\t:placeholder=\"t('settings', 'Your website')\"\n\t\ttype=\"url\"\n\t\t:on-validate=\"onValidate\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\nimport { validateUrl } from '../../utils/validate.js'\n\nconst { website } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'WebsiteSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\twebsite: { ...website, readable: NAME_READABLE_ENUM[website.name] },\n\t\t}\n\t},\n\n\tmethods: {\n\t\tonValidate(value) {\n\t\t\treturn validateUrl(value)\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WebsiteSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WebsiteSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./WebsiteSection.vue?vue&type=template&id=b18d14ae&\"\nimport script from \"./WebsiteSection.vue?vue&type=script&lang=js&\"\nexport * from \"./WebsiteSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your website'),\"type\":\"url\",\"on-validate\":_vm.onValidate}},'AccountPropertySection',_vm.website,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"twitter\"\n\t\t:placeholder=\"t('settings', 'Your Twitter handle')\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { twitter } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'TwitterSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\ttwitter: { ...twitter, readable: NAME_READABLE_ENUM[twitter.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TwitterSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TwitterSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TwitterSection.vue?vue&type=template&id=203feaef&\"\nimport script from \"./TwitterSection.vue?vue&type=script&lang=js&\"\nexport * from \"./TwitterSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your Twitter handle')}},'AccountPropertySection',_vm.twitter,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"fediverse\"\n\t\t:placeholder=\"t('settings', 'Your handle')\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { fediverse } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'FediverseSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfediverse: { ...fediverse, readable: NAME_READABLE_ENUM[fediverse.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FediverseSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FediverseSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FediverseSection.vue?vue&type=template&id=78433a38&\"\nimport script from \"./FediverseSection.vue?vue&type=script&lang=js&\"\nexport * from \"./FediverseSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your handle')}},'AccountPropertySection',_vm.fediverse,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Language.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Language.vue?vue&type=script&lang=js&\"","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<div class=\"language\">\n\t\t<select :id=\"inputId\"\n\t\t\t:placeholder=\"t('settings', 'Language')\"\n\t\t\t@change=\"onLanguageChange\">\n\t\t\t<option v-for=\"commonLanguage in commonLanguages\"\n\t\t\t\t:key=\"commonLanguage.code\"\n\t\t\t\t:selected=\"language.code === commonLanguage.code\"\n\t\t\t\t:value=\"commonLanguage.code\">\n\t\t\t\t{{ commonLanguage.name }}\n\t\t\t</option>\n\t\t\t<option disabled>\n\t\t\t\t──────────\n\t\t\t</option>\n\t\t\t<option v-for=\"otherLanguage in otherLanguages\"\n\t\t\t\t:key=\"otherLanguage.code\"\n\t\t\t\t:selected=\"language.code === otherLanguage.code\"\n\t\t\t\t:value=\"otherLanguage.code\">\n\t\t\t\t{{ otherLanguage.name }}\n\t\t\t</option>\n\t\t</select>\n\n\t\t<a href=\"https://www.transifex.com/nextcloud/nextcloud/\"\n\t\t\ttarget=\"_blank\"\n\t\t\trel=\"noreferrer noopener\">\n\t\t\t<em>{{ t('settings', 'Help translate') }}</em>\n\t\t</a>\n\t</div>\n</template>\n\n<script>\nimport { ACCOUNT_SETTING_PROPERTY_ENUM } from '../../../constants/AccountPropertyConstants.js'\nimport { savePrimaryAccountProperty } from '../../../service/PersonalInfo/PersonalInfoService.js'\nimport { validateLanguage } from '../../../utils/validate.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nexport default {\n\tname: 'Language',\n\n\tprops: {\n\t\tinputId: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tcommonLanguages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\totherLanguages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tlanguage: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tinitialLanguage: this.language,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tallLanguages() {\n\t\t\treturn Object.freeze(\n\t\t\t\t[...this.commonLanguages, ...this.otherLanguages]\n\t\t\t\t\t.reduce((acc, { code, name }) => ({ ...acc, [code]: name }), {})\n\t\t\t)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync onLanguageChange(e) {\n\t\t\tconst language = this.constructLanguage(e.target.value)\n\t\t\tthis.$emit('update:language', language)\n\n\t\t\tif (validateLanguage(language)) {\n\t\t\t\tawait this.updateLanguage(language)\n\t\t\t}\n\t\t},\n\n\t\tasync updateLanguage(language) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryAccountProperty(ACCOUNT_SETTING_PROPERTY_ENUM.LANGUAGE, language.code)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tlanguage,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t\tthis.reloadPage()\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update language'),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tconstructLanguage(languageCode) {\n\t\t\treturn {\n\t\t\t\tcode: languageCode,\n\t\t\t\tname: this.allLanguages[languageCode],\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ language, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\t// Ensure that local state reflects server state\n\t\t\t\tthis.initialLanguage = language\n\t\t\t} else {\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t}\n\t\t},\n\n\t\treloadPage() {\n\t\t\tlocation.reload()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.language {\n\tdisplay: grid;\n\n\tselect {\n\t\twidth: 100%;\n\t}\n\n\ta {\n\t\tcolor: var(--color-main-text);\n\t\ttext-decoration: none;\n\t\twidth: max-content;\n\t}\n}\n</style>\n","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Language.vue?vue&type=style&index=0&id=5c847b3a&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Language.vue?vue&type=style&index=0&id=5c847b3a&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Language.vue?vue&type=template&id=5c847b3a&scoped=true&\"\nimport script from \"./Language.vue?vue&type=script&lang=js&\"\nexport * from \"./Language.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Language.vue?vue&type=style&index=0&id=5c847b3a&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5c847b3a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"language\"},[_c('select',{attrs:{\"id\":_vm.inputId,\"placeholder\":_vm.t('settings', 'Language')},on:{\"change\":_vm.onLanguageChange}},[_vm._l((_vm.commonLanguages),function(commonLanguage){return _c('option',{key:commonLanguage.code,domProps:{\"selected\":_vm.language.code === commonLanguage.code,\"value\":commonLanguage.code}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(commonLanguage.name)+\"\\n\\t\\t\")])}),_vm._v(\" \"),_c('option',{attrs:{\"disabled\":\"\"}},[_vm._v(\"\\n\\t\\t\\t──────────\\n\\t\\t\")]),_vm._v(\" \"),_vm._l((_vm.otherLanguages),function(otherLanguage){return _c('option',{key:otherLanguage.code,domProps:{\"selected\":_vm.language.code === otherLanguage.code,\"value\":otherLanguage.code}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(otherLanguage.name)+\"\\n\\t\\t\")])})],2),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"https://www.transifex.com/nextcloud/nextcloud/\",\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_c('em',[_vm._v(_vm._s(_vm.t('settings', 'Help translate')))])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section>\n\t\t<HeaderBar :input-id=\"inputId\"\n\t\t\t:readable=\"propertyReadable\" />\n\n\t\t<template v-if=\"isEditable\">\n\t\t\t<Language :input-id=\"inputId\"\n\t\t\t\t:common-languages=\"commonLanguages\"\n\t\t\t\t:other-languages=\"otherLanguages\"\n\t\t\t\t:language.sync=\"language\" />\n\t\t</template>\n\n\t\t<span v-else>\n\t\t\t{{ t('settings', 'No language set') }}\n\t\t</span>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport Language from './Language.vue'\nimport HeaderBar from '../shared/HeaderBar.vue'\n\nimport { ACCOUNT_SETTING_PROPERTY_ENUM, ACCOUNT_SETTING_PROPERTY_READABLE_ENUM } from '../../../constants/AccountPropertyConstants.js'\n\nconst { languageMap: { activeLanguage, commonLanguages, otherLanguages } } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'LanguageSection',\n\n\tcomponents: {\n\t\tLanguage,\n\t\tHeaderBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tpropertyReadable: ACCOUNT_SETTING_PROPERTY_READABLE_ENUM.LANGUAGE,\n\t\t\tcommonLanguages,\n\t\t\totherLanguages,\n\t\t\tlanguage: activeLanguage,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tinputId() {\n\t\t\treturn `account-setting-${ACCOUNT_SETTING_PROPERTY_ENUM.LANGUAGE}`\n\t\t},\n\n\t\tisEditable() {\n\t\t\treturn Boolean(this.language)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LanguageSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LanguageSection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LanguageSection.vue?vue&type=style&index=0&id=92685b76&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LanguageSection.vue?vue&type=style&index=0&id=92685b76&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LanguageSection.vue?vue&type=template&id=92685b76&scoped=true&\"\nimport script from \"./LanguageSection.vue?vue&type=script&lang=js&\"\nexport * from \"./LanguageSection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LanguageSection.vue?vue&type=style&index=0&id=92685b76&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"92685b76\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('HeaderBar',{attrs:{\"input-id\":_vm.inputId,\"readable\":_vm.propertyReadable}}),_vm._v(\" \"),(_vm.isEditable)?[_c('Language',{attrs:{\"input-id\":_vm.inputId,\"common-languages\":_vm.commonLanguages,\"other-languages\":_vm.otherLanguages,\"language\":_vm.language},on:{\"update:language\":function($event){_vm.language=$event}}})]:_c('span',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'No language set'))+\"\\n\\t\")])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('HeaderBar',{attrs:{\"input-id\":_vm.inputId,\"readable\":_vm.propertyReadable}}),_vm._v(\" \"),(_vm.isEditable)?[_c('Locale',{attrs:{\"input-id\":_vm.inputId,\"locales-for-language\":_vm.localesForLanguage,\"other-locales\":_vm.otherLocales,\"locale\":_vm.locale},on:{\"update:locale\":function($event){_vm.locale=$event}}})]:_c('span',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'No locale set'))+\"\\n\\t\")])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<div class=\"locale\">\n\t\t<select :id=\"inputId\"\n\t\t\t:placeholder=\"t('settings', 'Locale')\"\n\t\t\t@change=\"onLocaleChange\">\n\t\t\t<option v-for=\"currentLocale in localesForLanguage\"\n\t\t\t\t:key=\"currentLocale.code\"\n\t\t\t\t:selected=\"locale.code === currentLocale.code\"\n\t\t\t\t:value=\"currentLocale.code\">\n\t\t\t\t{{ currentLocale.name }}\n\t\t\t</option>\n\t\t\t<option disabled>\n\t\t\t\t──────────\n\t\t\t</option>\n\t\t\t<option v-for=\"currentLocale in otherLocales\"\n\t\t\t\t:key=\"currentLocale.code\"\n\t\t\t\t:selected=\"locale.code === currentLocale.code\"\n\t\t\t\t:value=\"currentLocale.code\">\n\t\t\t\t{{ currentLocale.name }}\n\t\t\t</option>\n\t\t</select>\n\n\t\t<div class=\"example\">\n\t\t\t<Web :size=\"20\" />\n\t\t\t<div class=\"example__text\">\n\t\t\t\t<p>\n\t\t\t\t\t<span>{{ example.date }}</span>\n\t\t\t\t\t<span>{{ example.time }}</span>\n\t\t\t\t</p>\n\t\t\t\t<p>\n\t\t\t\t\t{{ t('settings', 'Week starts on {firstDayOfWeek}', { firstDayOfWeek: this.example.firstDayOfWeek }) }}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport moment from '@nextcloud/moment'\nimport Web from 'vue-material-design-icons/Web.vue'\n\nimport { ACCOUNT_SETTING_PROPERTY_ENUM } from '../../../constants/AccountPropertyConstants.js'\nimport { savePrimaryAccountProperty } from '../../../service/PersonalInfo/PersonalInfoService.js'\nimport { validateLocale } from '../../../utils/validate.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nexport default {\n\tname: 'Locale',\n\n\tcomponents: {\n\t\tWeb,\n\t},\n\n\tprops: {\n\t\tinputId: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tlocale: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tlocalesForLanguage: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\totherLocales: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tinitialLocale: this.locale,\n\t\t\texample: {\n\t\t\t\tdate: moment().format('L'),\n\t\t\t\ttime: moment().format('LTS'),\n\t\t\t\tfirstDayOfWeek: window.dayNames[window.firstDay],\n\t\t\t},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tallLocales() {\n\t\t\treturn Object.freeze(\n\t\t\t\t[...this.localesForLanguage, ...this.otherLocales]\n\t\t\t\t\t.reduce((acc, { code, name }) => ({ ...acc, [code]: name }), {})\n\t\t\t)\n\t\t},\n\t},\n\n\tcreated() {\n\t\tsetInterval(this.refreshExample, 1000)\n\t},\n\n\tmethods: {\n\t\tasync onLocaleChange(e) {\n\t\t\tconst locale = this.constructLocale(e.target.value)\n\t\t\tthis.$emit('update:locale', locale)\n\n\t\t\tif (validateLocale(locale)) {\n\t\t\t\tawait this.updateLocale(locale)\n\t\t\t}\n\t\t},\n\n\t\tasync updateLocale(locale) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryAccountProperty(ACCOUNT_SETTING_PROPERTY_ENUM.LOCALE, locale.code)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tlocale,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t\tthis.reloadPage()\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update locale'),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tconstructLocale(localeCode) {\n\t\t\treturn {\n\t\t\t\tcode: localeCode,\n\t\t\t\tname: this.allLocales[localeCode],\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ locale, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\tthis.initialLocale = locale\n\t\t\t} else {\n\t\t\t\tthis.$emit('update:locale', this.initialLocale)\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t}\n\t\t},\n\n\t\trefreshExample() {\n\t\t\tthis.example = {\n\t\t\t\tdate: moment().format('L'),\n\t\t\t\ttime: moment().format('LTS'),\n\t\t\t\tfirstDayOfWeek: window.dayNames[window.firstDay],\n\t\t\t}\n\t\t},\n\n\t\treloadPage() {\n\t\t\tlocation.reload()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.locale {\n\tdisplay: grid;\n\n\tselect {\n\t\twidth: 100%;\n\t}\n}\n\n.example {\n\tmargin: 10px 0;\n\tdisplay: flex;\n\tgap: 0 10px;\n\tcolor: var(--color-text-lighter);\n\n\t&::v-deep .material-design-icon {\n\t\talign-self: flex-start;\n\t\tmargin-top: 2px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Locale.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Locale.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Locale.vue?vue&type=style&index=0&id=1ac456dc&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Locale.vue?vue&type=style&index=0&id=1ac456dc&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Locale.vue?vue&type=template&id=1ac456dc&scoped=true&\"\nimport script from \"./Locale.vue?vue&type=script&lang=js&\"\nexport * from \"./Locale.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Locale.vue?vue&type=style&index=0&id=1ac456dc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1ac456dc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"locale\"},[_c('select',{attrs:{\"id\":_vm.inputId,\"placeholder\":_vm.t('settings', 'Locale')},on:{\"change\":_vm.onLocaleChange}},[_vm._l((_vm.localesForLanguage),function(currentLocale){return _c('option',{key:currentLocale.code,domProps:{\"selected\":_vm.locale.code === currentLocale.code,\"value\":currentLocale.code}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(currentLocale.name)+\"\\n\\t\\t\")])}),_vm._v(\" \"),_c('option',{attrs:{\"disabled\":\"\"}},[_vm._v(\"\\n\\t\\t\\t──────────\\n\\t\\t\")]),_vm._v(\" \"),_vm._l((_vm.otherLocales),function(currentLocale){return _c('option',{key:currentLocale.code,domProps:{\"selected\":_vm.locale.code === currentLocale.code,\"value\":currentLocale.code}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(currentLocale.name)+\"\\n\\t\\t\")])})],2),_vm._v(\" \"),_c('div',{staticClass:\"example\"},[_c('Web',{attrs:{\"size\":20}}),_vm._v(\" \"),_c('div',{staticClass:\"example__text\"},[_c('p',[_c('span',[_vm._v(_vm._s(_vm.example.date))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.example.time))])]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Week starts on {firstDayOfWeek}', { firstDayOfWeek: this.example.firstDayOfWeek }))+\"\\n\\t\\t\\t\")])])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section>\n\t\t<HeaderBar :input-id=\"inputId\"\n\t\t\t:readable=\"propertyReadable\" />\n\n\t\t<template v-if=\"isEditable\">\n\t\t\t<Locale :input-id=\"inputId\"\n\t\t\t\t:locales-for-language=\"localesForLanguage\"\n\t\t\t\t:other-locales=\"otherLocales\"\n\t\t\t\t:locale.sync=\"locale\" />\n\t\t</template>\n\n\t\t<span v-else>\n\t\t\t{{ t('settings', 'No locale set') }}\n\t\t</span>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport Locale from './Locale.vue'\nimport HeaderBar from '../shared/HeaderBar.vue'\n\nimport { ACCOUNT_SETTING_PROPERTY_ENUM, ACCOUNT_SETTING_PROPERTY_READABLE_ENUM } from '../../../constants/AccountPropertyConstants.js'\n\nconst { localeMap: { activeLocale, localesForLanguage, otherLocales } } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'LocaleSection',\n\n\tcomponents: {\n\t\tLocale,\n\t\tHeaderBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tpropertyReadable: ACCOUNT_SETTING_PROPERTY_READABLE_ENUM.LOCALE,\n\t\t\tlocalesForLanguage,\n\t\t\totherLocales,\n\t\t\tlocale: activeLocale,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tinputId() {\n\t\t\treturn `account-setting-${ACCOUNT_SETTING_PROPERTY_ENUM.LOCALE}`\n\t\t},\n\n\t\tisEditable() {\n\t\t\treturn Boolean(this.locale)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocaleSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocaleSection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocaleSection.vue?vue&type=style&index=0&id=84fca724&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LocaleSection.vue?vue&type=style&index=0&id=84fca724&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LocaleSection.vue?vue&type=template&id=84fca724&scoped=true&\"\nimport script from \"./LocaleSection.vue?vue&type=script&lang=js&\"\nexport * from \"./LocaleSection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LocaleSection.vue?vue&type=style&index=0&id=84fca724&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"84fca724\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProfileAnchorLink.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProfileAnchorLink.vue?vue&type=script&lang=js&\"","<!--\n\t- @copyright 2021 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<a :class=\"{ disabled }\"\n\t\thref=\"#profile-visibility\"\n\t\tv-on=\"$listeners\">\n\t\t<ChevronDownIcon class=\"anchor-icon\"\n\t\t\t:size=\"22\" />\n\t\t{{ t('settings', 'Edit your Profile visibility') }}\n\t</a>\n</template>\n\n<script>\nimport ChevronDownIcon from 'vue-material-design-icons/ChevronDown.vue'\n\nexport default {\n\tname: 'EditProfileAnchorLink',\n\n\tcomponents: {\n\t\tChevronDownIcon,\n\t},\n\n\tprops: {\n\t\tprofileEnabled: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tdisabled() {\n\t\t\treturn !this.profileEnabled\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\nhtml {\n\tscroll-behavior: smooth;\n\n\t@media screen and (prefers-reduced-motion: reduce) {\n\t\tscroll-behavior: auto;\n\t}\n}\n</style>\n\n<style lang=\"scss\" scoped>\na {\n\tdisplay: block;\n\theight: 44px;\n\twidth: 290px;\n\tline-height: 44px;\n\tpadding: 0 16px;\n\tmargin: 14px auto;\n\tborder-radius: var(--border-radius-pill);\n\topacity: 0.4;\n\tbackground-color: transparent;\n\n\t.anchor-icon {\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t\tmargin-top: 6px;\n\t\tmargin-right: 8px;\n\t}\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\topacity: 0.8;\n\t\tbackground-color: rgba(127, 127, 127, .25);\n\t}\n\n\t&.disabled {\n\t\tpointer-events: none;\n\t}\n}\n</style>\n","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProfileAnchorLink.vue?vue&type=style&index=0&id=1caba458&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProfileAnchorLink.vue?vue&type=style&index=0&id=1caba458&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProfileAnchorLink.vue?vue&type=style&index=1&id=1caba458&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProfileAnchorLink.vue?vue&type=style&index=1&id=1caba458&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./EditProfileAnchorLink.vue?vue&type=template&id=1caba458&scoped=true&\"\nimport script from \"./EditProfileAnchorLink.vue?vue&type=script&lang=js&\"\nexport * from \"./EditProfileAnchorLink.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditProfileAnchorLink.vue?vue&type=style&index=0&id=1caba458&prod&lang=scss&\"\nimport style1 from \"./EditProfileAnchorLink.vue?vue&type=style&index=1&id=1caba458&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1caba458\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('a',_vm._g({class:{ disabled: _vm.disabled },attrs:{\"href\":\"#profile-visibility\"}},_vm.$listeners),[_c('ChevronDownIcon',{staticClass:\"anchor-icon\",attrs:{\"size\":22}}),_vm._v(\"\\n\\t\"+_vm._s(_vm.t('settings', 'Edit your Profile visibility'))+\"\\n\")],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"checkbox-container\"},[_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"switch\",\"checked\":_vm.isProfileEnabled,\"loading\":_vm.loading},on:{\"update:checked\":[function($event){_vm.isProfileEnabled=$event},_vm.saveEnableProfile]}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Enable Profile'))+\"\\n\\t\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<div class=\"checkbox-container\">\n\t\t<NcCheckboxRadioSwitch type=\"switch\"\n\t\t\t:checked.sync=\"isProfileEnabled\"\n\t\t\t:loading=\"loading\"\n\t\t\t@update:checked=\"saveEnableProfile\">\n\t\t\t{{ t('settings', 'Enable Profile') }}\n\t\t</NcCheckboxRadioSwitch>\n\t</div>\n</template>\n\n<script>\nimport { emit } from '@nextcloud/event-bus'\n\nimport { savePrimaryAccountProperty } from '../../../service/PersonalInfo/PersonalInfoService.js'\nimport { ACCOUNT_PROPERTY_ENUM } from '../../../constants/AccountPropertyConstants.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nexport default {\n\tname: 'ProfileCheckbox',\n\n\tcomponents: {\n\t\tNcCheckboxRadioSwitch,\n\t},\n\n\tprops: {\n\t\tprofileEnabled: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tisProfileEnabled: this.profileEnabled,\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync saveEnableProfile() {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst responseData = await savePrimaryAccountProperty(ACCOUNT_PROPERTY_ENUM.PROFILE_ENABLED, this.isProfileEnabled)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tisProfileEnabled: this.isProfileEnabled,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update profile enabled state'),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ isProfileEnabled, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\temit('settings:profile-enabled:updated', isProfileEnabled)\n\t\t\t} else {\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t}\n\t\t\tthis.loading = false\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileCheckbox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileCheckbox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProfileCheckbox.vue?vue&type=template&id=061ac04c&\"\nimport script from \"./ProfileCheckbox.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfileCheckbox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfilePreviewCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfilePreviewCard.vue?vue&type=script&lang=js&\"","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<a class=\"preview-card\"\n\t\t:class=\"{ disabled }\"\n\t\t:href=\"profilePageLink\">\n\t\t<NcAvatar class=\"preview-card__avatar\"\n\t\t\t:user=\"userId\"\n\t\t\t:size=\"48\"\n\t\t\t:show-user-status=\"true\"\n\t\t\t:show-user-status-compact=\"false\"\n\t\t\t:disable-menu=\"true\"\n\t\t\t:disable-tooltip=\"true\" />\n\t\t<div class=\"preview-card__header\">\n\t\t\t<span>{{ displayName }}</span>\n\t\t</div>\n\t\t<div class=\"preview-card__footer\">\n\t\t\t<span>{{ organisation }}</span>\n\t\t</div>\n\t</a>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateUrl } from '@nextcloud/router'\n\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\n\nexport default {\n\tname: 'ProfilePreviewCard',\n\n\tcomponents: {\n\t\tNcAvatar,\n\t},\n\n\tprops: {\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\torganisation: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tprofileEnabled: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tdisabled() {\n\t\t\treturn !this.profileEnabled\n\t\t},\n\n\t\tprofilePageLink() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\treturn generateUrl('/u/{userId}', { userId: getCurrentUser().uid })\n\t\t\t}\n\t\t\t// Since an anchor element is used rather than a button for better UX,\n\t\t\t// this hack removes href if the profile is disabled so that disabling pointer-events is not needed to prevent a click from opening a page\n\t\t\t// and to allow the hover event (which disabling pointer-events wouldn't allow) for styling\n\t\t\treturn null\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.preview-card {\n\tdisplay: flex;\n\tflex-direction: column;\n\tposition: relative;\n\twidth: 290px;\n\theight: 116px;\n\tmargin: 14px auto;\n\tborder-radius: var(--border-radius-large);\n\tbackground-color: var(--color-main-background);\n\tfont-weight: bold;\n\tbox-shadow: 0 2px 9px var(--color-box-shadow);\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbox-shadow: 0 2px 12px var(--color-box-shadow);\n\t}\n\n\t&:focus-visible {\n\t\toutline: var(--color-main-text) solid 1px;\n\t\toutline-offset: 3px;\n\t}\n\n\t&.disabled {\n\t\tfilter: grayscale(1);\n\t\topacity: 0.5;\n\t\tcursor: default;\n\t\tbox-shadow: 0 0 3px var(--color-box-shadow);\n\n\t\t& *,\n\t\t&::v-deep * {\n\t\t\tcursor: default;\n\t\t}\n\t}\n\n\t&__avatar {\n\t\t// Override Avatar component position to fix positioning on rerender\n\t\tposition: absolute !important;\n\t\ttop: 40px;\n\t\tleft: 18px;\n\t\tz-index: 1;\n\n\t\t&:not(.avatardiv--unknown) {\n\t\t\tbox-shadow: 0 0 0 3px var(--color-main-background) !important;\n\t\t}\n\t}\n\n\t&__header,\n\t&__footer {\n\t\tposition: relative;\n\t\twidth: auto;\n\n\t\tspan {\n\t\t\tposition: absolute;\n\t\t\tleft: 78px;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow-wrap: anywhere;\n\n\t\t\t@supports (-webkit-line-clamp: 2) {\n\t\t\t\tdisplay: -webkit-box;\n\t\t\t\t-webkit-line-clamp: 2;\n\t\t\t\t-webkit-box-orient: vertical;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__header {\n\t\theight: 70px;\n\t\tborder-radius: var(--border-radius-large) var(--border-radius-large) 0 0;\n\t\tbackground-color: var(--color-primary);\n\t\tbackground-image: var(--gradient-primary-background);\n\n\t\tspan {\n\t\t\tbottom: 0;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tfont-size: 18px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: 0 4px 8px 0;\n\t\t}\n\t}\n\n\t&__footer {\n\t\theight: 46px;\n\n\t\tspan {\n\t\t\ttop: 0;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tmargin: 4px 4px 0 0;\n\t\t\tline-height: 1.3;\n\t\t}\n\t}\n}\n</style>\n","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfilePreviewCard.vue?vue&type=style&index=0&id=61586aa5&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfilePreviewCard.vue?vue&type=style&index=0&id=61586aa5&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ProfilePreviewCard.vue?vue&type=template&id=61586aa5&scoped=true&\"\nimport script from \"./ProfilePreviewCard.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfilePreviewCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProfilePreviewCard.vue?vue&type=style&index=0&id=61586aa5&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"61586aa5\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('a',{staticClass:\"preview-card\",class:{ disabled: _vm.disabled },attrs:{\"href\":_vm.profilePageLink}},[_c('NcAvatar',{staticClass:\"preview-card__avatar\",attrs:{\"user\":_vm.userId,\"size\":48,\"show-user-status\":true,\"show-user-status-compact\":false,\"disable-menu\":true,\"disable-tooltip\":true}}),_vm._v(\" \"),_c('div',{staticClass:\"preview-card__header\"},[_c('span',[_vm._v(_vm._s(_vm.displayName))])]),_vm._v(\" \"),_c('div',{staticClass:\"preview-card__footer\"},[_c('span',[_vm._v(_vm._s(_vm.organisation))])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2021, Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<section>\n\t\t<HeaderBar :readable=\"propertyReadable\" />\n\n\t\t<ProfileCheckbox :profile-enabled.sync=\"profileEnabled\" />\n\n\t\t<ProfilePreviewCard :organisation=\"organisation\"\n\t\t\t:display-name=\"displayName\"\n\t\t\t:profile-enabled=\"profileEnabled\"\n\t\t\t:user-id=\"userId\" />\n\n\t\t<EditProfileAnchorLink :profile-enabled=\"profileEnabled\" />\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\n\nimport EditProfileAnchorLink from './EditProfileAnchorLink.vue'\nimport HeaderBar from '../shared/HeaderBar.vue'\nimport ProfileCheckbox from './ProfileCheckbox.vue'\nimport ProfilePreviewCard from './ProfilePreviewCard.vue'\n\nimport { ACCOUNT_PROPERTY_READABLE_ENUM } from '../../../constants/AccountPropertyConstants.js'\n\nconst {\n\torganisation: { value: organisation },\n\tdisplayName: { value: displayName },\n\tprofileEnabled,\n\tuserId,\n} = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'ProfileSection',\n\n\tcomponents: {\n\t\tEditProfileAnchorLink,\n\t\tHeaderBar,\n\t\tProfileCheckbox,\n\t\tProfilePreviewCard,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tpropertyReadable: ACCOUNT_PROPERTY_READABLE_ENUM.PROFILE_ENABLED,\n\t\t\torganisation,\n\t\t\tdisplayName,\n\t\t\tprofileEnabled,\n\t\t\tuserId,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tsubscribe('settings:organisation:updated', this.handleOrganisationUpdate)\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tunsubscribe('settings:organisation:updated', this.handleOrganisationUpdate)\n\t},\n\n\tmethods: {\n\t\thandleDisplayNameUpdate(displayName) {\n\t\t\tthis.displayName = displayName\n\t\t},\n\n\t\thandleOrganisationUpdate(organisation) {\n\t\t\tthis.organisation = organisation\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tpadding: 10px 10px;\n\n\t&::v-deep button:disabled {\n\t\tcursor: default;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSection.vue?vue&type=style&index=0&id=cf64d964&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSection.vue?vue&type=style&index=0&id=cf64d964&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ProfileSection.vue?vue&type=template&id=cf64d964&scoped=true&\"\nimport script from \"./ProfileSection.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfileSection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProfileSection.vue?vue&type=style&index=0&id=cf64d964&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cf64d964\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('HeaderBar',{attrs:{\"readable\":_vm.propertyReadable}}),_vm._v(\" \"),_c('ProfileCheckbox',{attrs:{\"profile-enabled\":_vm.profileEnabled},on:{\"update:profileEnabled\":function($event){_vm.profileEnabled=$event},\"update:profile-enabled\":function($event){_vm.profileEnabled=$event}}}),_vm._v(\" \"),_c('ProfilePreviewCard',{attrs:{\"organisation\":_vm.organisation,\"display-name\":_vm.displayName,\"profile-enabled\":_vm.profileEnabled,\"user-id\":_vm.userId}}),_vm._v(\" \"),_c('EditProfileAnchorLink',{attrs:{\"profile-enabled\":_vm.profileEnabled}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"organisation\"\n\t\t:placeholder=\"t('settings', 'Your organisation')\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { organisation } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'OrganisationSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\torganisation: { ...organisation, readable: NAME_READABLE_ENUM[organisation.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrganisationSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrganisationSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OrganisationSection.vue?vue&type=template&id=50ddf4bd&\"\nimport script from \"./OrganisationSection.vue?vue&type=script&lang=js&\"\nexport * from \"./OrganisationSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your organisation')}},'AccountPropertySection',_vm.organisation,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"role\"\n\t\t:placeholder=\"t('settings', 'Your role')\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { role } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'RoleSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\trole: { ...role, readable: NAME_READABLE_ENUM[role.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RoleSection.vue?vue&type=template&id=3dbe0705&\"\nimport script from \"./RoleSection.vue?vue&type=script&lang=js&\"\nexport * from \"./RoleSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your role')}},'AccountPropertySection',_vm.role,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"headline\"\n\t\t:placeholder=\"t('settings', 'Your headline')\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { headline } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'HeadlineSection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\theadline: { ...headline, readable: NAME_READABLE_ENUM[headline.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeadlineSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeadlineSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeadlineSection.vue?vue&type=template&id=0f3859ee&\"\nimport script from \"./HeadlineSection.vue?vue&type=script&lang=js&\"\nexport * from \"./HeadlineSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your headline')}},'AccountPropertySection',_vm.headline,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2022 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<AccountPropertySection v-bind.sync=\"biography\"\n\t\t:placeholder=\"t('settings', 'Your biography')\"\n\t\t:multi-line=\"true\" />\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport AccountPropertySection from './shared/AccountPropertySection.vue'\n\nimport { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js'\n\nconst { biography } = loadState('settings', 'personalInfoParameters', {})\n\nexport default {\n\tname: 'BiographySection',\n\n\tcomponents: {\n\t\tAccountPropertySection,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tbiography: { ...biography, readable: NAME_READABLE_ENUM[biography.name] },\n\t\t}\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BiographySection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BiographySection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BiographySection.vue?vue&type=template&id=a916ca60&\"\nimport script from \"./BiographySection.vue?vue&type=script&lang=js&\"\nexport * from \"./BiographySection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('AccountPropertySection',_vm._b({attrs:{\"placeholder\":_vm.t('settings', 'Your biography'),\"multi-line\":true}},'AccountPropertySection',_vm.biography,false,true))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',{style:({ marginLeft: _vm.marginLeft }),attrs:{\"id\":\"profile-visibility\"}},[_c('HeaderBar',{attrs:{\"is-heading\":true,\"readable\":_vm.heading}}),_vm._v(\" \"),_c('em',{class:{ disabled: _vm.disabled }},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"visibility-dropdowns\",style:({\n\t\t\tgridTemplateRows: `repeat(${_vm.rows}, 44px)`,\n\t\t})},_vm._l((_vm.visibilityParams),function(param){return _c('VisibilityDropdown',{key:param.id,attrs:{\"param-id\":param.id,\"display-id\":param.displayId,\"visibility\":param.visibility},on:{\"update:visibility\":function($event){return _vm.$set(param, \"visibility\", $event)}}})}),1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2021 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\n/**\n * Save the visibility of the profile parameter\n *\n * @param {string} paramId the profile parameter ID\n * @param {string} visibility the visibility\n * @return {object}\n */\nexport const saveProfileParameterVisibility = async (paramId, visibility) => {\n\tconst userId = getCurrentUser().uid\n\tconst url = generateOcsUrl('/profile/{userId}', { userId })\n\n\tawait confirmPassword()\n\n\tconst res = await axios.put(url, {\n\t\tparamId,\n\t\tvisibility,\n\t})\n\n\treturn res.data\n}\n\n/**\n * Save profile default\n *\n * @param {boolean} isEnabled the default\n * @return {object}\n */\nexport const saveProfileDefault = async (isEnabled) => {\n\t// Convert to string for compatibility\n\tisEnabled = isEnabled ? '1' : '0'\n\n\tconst url = generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/{appId}/{key}', {\n\t\tappId: 'settings',\n\t\tkey: 'profile_enabled_by_default',\n\t})\n\n\tawait confirmPassword()\n\n\tconst res = await axios.post(url, {\n\t\tvalue: isEnabled,\n\t})\n\n\treturn res.data\n}\n","/**\n * @copyright 2021 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/*\n * SYNC to be kept in sync with `core/Db/ProfileConfig.php`\n */\n\n/** Enum of profile visibility constants */\nexport const VISIBILITY_ENUM = Object.freeze({\n\tSHOW: 'show',\n\tSHOW_USERS_ONLY: 'show_users_only',\n\tHIDE: 'hide',\n})\n\n/**\n * Enum of profile visibility constants to properties\n */\nexport const VISIBILITY_PROPERTY_ENUM = Object.freeze({\n\t[VISIBILITY_ENUM.SHOW]: {\n\t\tname: VISIBILITY_ENUM.SHOW,\n\t\tlabel: t('settings', 'Show to everyone'),\n\t},\n\t[VISIBILITY_ENUM.SHOW_USERS_ONLY]: {\n\t\tname: VISIBILITY_ENUM.SHOW_USERS_ONLY,\n\t\tlabel: t('settings', 'Show to logged in users only'),\n\t},\n\t[VISIBILITY_ENUM.HIDE]: {\n\t\tname: VISIBILITY_ENUM.HIDE,\n\t\tlabel: t('settings', 'Hide'),\n\t},\n})\n","<!--\n\t- @copyright 2021 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<div class=\"visibility-container\"\n\t\t:class=\"{ disabled }\">\n\t\t<label :for=\"inputId\">\n\t\t\t{{ displayId }}\n\t\t</label>\n\t\t<NcSelect :input-id=\"inputId\"\n\t\t\tclass=\"visibility-container__select\"\n\t\t\t:clearable=\"false\"\n\t\t\t:options=\"visibilityOptions\"\n\t\t\t:value=\"visibilityObject\"\n\t\t\t@option:selected=\"onVisibilityChange\" />\n\t</div>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\n\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'\n\nimport { saveProfileParameterVisibility } from '../../../service/ProfileService.js'\nimport { VISIBILITY_PROPERTY_ENUM } from '../../../constants/ProfileConstants.js'\nimport { handleError } from '../../../utils/handlers.js'\n\nconst { profileEnabled } = loadState('settings', 'personalInfoParameters', false)\n\nexport default {\n\tname: 'VisibilityDropdown',\n\n\tcomponents: {\n\t\tNcSelect,\n\t},\n\n\tprops: {\n\t\tparamId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvisibility: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tinitialVisibility: this.visibility,\n\t\t\tprofileEnabled,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tdisabled() {\n\t\t\treturn !this.profileEnabled\n\t\t},\n\n\t\tinputId() {\n\t\t\treturn `profile-visibility-${this.paramId}`\n\t\t},\n\n\t\tvisibilityObject() {\n\t\t\treturn VISIBILITY_PROPERTY_ENUM[this.visibility]\n\t\t},\n\n\t\tvisibilityOptions() {\n\t\t\treturn Object.values(VISIBILITY_PROPERTY_ENUM)\n\t\t},\n\t},\n\n\tmounted() {\n\t\tsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t},\n\n\tmethods: {\n\t\tasync onVisibilityChange(visibilityObject) {\n\t\t\t// This check is needed as the argument is null when selecting the same option\n\t\t\tif (visibilityObject !== null) {\n\t\t\t\tconst { name: visibility } = visibilityObject\n\t\t\t\tthis.$emit('update:visibility', visibility)\n\n\t\t\t\tif (visibility !== '') {\n\t\t\t\t\tawait this.updateVisibility(visibility)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tasync updateVisibility(visibility) {\n\t\t\ttry {\n\t\t\t\tconst responseData = await saveProfileParameterVisibility(this.paramId, visibility)\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\tvisibility,\n\t\t\t\t\tstatus: responseData.ocs?.meta?.status,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleResponse({\n\t\t\t\t\terrorMessage: t('settings', 'Unable to update visibility of {displayId}', { displayId: this.displayId }),\n\t\t\t\t\terror: e,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\thandleResponse({ visibility, status, errorMessage, error }) {\n\t\t\tif (status === 'ok') {\n\t\t\t\t// Ensure that local state reflects server state\n\t\t\t\tthis.initialVisibility = visibility\n\t\t\t} else {\n\t\t\t\thandleError(error, errorMessage)\n\t\t\t}\n\t\t},\n\n\t\thandleProfileEnabledUpdate(profileEnabled) {\n\t\t\tthis.profileEnabled = profileEnabled\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.visibility-container {\n\tdisplay: flex;\n\twidth: max-content;\n\n\t&.disabled {\n\t\tfilter: grayscale(1);\n\t\topacity: 0.5;\n\t\tcursor: default;\n\t\tpointer-events: none;\n\n\t\t& *,\n\t\t&::v-deep * {\n\t\t\tcursor: default;\n\t\t\tpointer-events: none;\n\t\t}\n\t}\n\n\tlabel {\n\t\tcolor: var(--color-text-lighter);\n\t\twidth: 150px;\n\t\tline-height: 50px;\n\t}\n\n\t&__select {\n\t\twidth: 270px;\n\t\tmax-width: 40vw;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisibilityDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisibilityDropdown.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisibilityDropdown.vue?vue&type=style&index=0&id=b13d20da&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisibilityDropdown.vue?vue&type=style&index=0&id=b13d20da&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./VisibilityDropdown.vue?vue&type=template&id=b13d20da&scoped=true&\"\nimport script from \"./VisibilityDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./VisibilityDropdown.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VisibilityDropdown.vue?vue&type=style&index=0&id=b13d20da&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b13d20da\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"visibility-container\",class:{ disabled: _vm.disabled }},[_c('label',{attrs:{\"for\":_vm.inputId}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.displayId)+\"\\n\\t\")]),_vm._v(\" \"),_c('NcSelect',{staticClass:\"visibility-container__select\",attrs:{\"input-id\":_vm.inputId,\"clearable\":false,\"options\":_vm.visibilityOptions,\"value\":_vm.visibilityObject},on:{\"option:selected\":_vm.onVisibilityChange}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2021 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license GNU AGPL version 3 or any later version\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<!-- TODO remove this inline margin placeholder once the settings layout is updated -->\n\t<section id=\"profile-visibility\"\n\t\t:style=\"{ marginLeft }\">\n\t\t<HeaderBar :is-heading=\"true\" :readable=\"heading\" />\n\n\t\t<em :class=\"{ disabled }\">\n\t\t\t{{ t('settings', 'The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected.') }}\n\t\t</em>\n\n\t\t<div class=\"visibility-dropdowns\"\n\t\t\t:style=\"{\n\t\t\t\tgridTemplateRows: `repeat(${rows}, 44px)`,\n\t\t\t}\">\n\t\t\t<VisibilityDropdown v-for=\"param in visibilityParams\"\n\t\t\t\t:key=\"param.id\"\n\t\t\t\t:param-id=\"param.id\"\n\t\t\t\t:display-id=\"param.displayId\"\n\t\t\t\t:visibility.sync=\"param.visibility\" />\n\t\t</div>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\n\nimport HeaderBar from '../shared/HeaderBar.vue'\nimport VisibilityDropdown from './VisibilityDropdown.vue'\nimport { PROFILE_READABLE_ENUM } from '../../../constants/AccountPropertyConstants.js'\n\nconst { profileConfig } = loadState('settings', 'profileParameters', {})\nconst { profileEnabled } = loadState('settings', 'personalInfoParameters', false)\n\nconst compareParams = (a, b) => {\n\tif (a.appId === b.appId || (a.appId !== 'core' && b.appId !== 'core')) {\n\t\treturn a.displayId.localeCompare(b.displayId)\n\t} else if (a.appId === 'core') {\n\t\treturn 1\n\t} else {\n\t\treturn -1\n\t}\n}\n\nexport default {\n\tname: 'ProfileVisibilitySection',\n\n\tcomponents: {\n\t\tHeaderBar,\n\t\tVisibilityDropdown,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\theading: PROFILE_READABLE_ENUM.PROFILE_VISIBILITY,\n\t\t\tprofileEnabled,\n\t\t\tvisibilityParams: Object.entries(profileConfig)\n\t\t\t\t.map(([paramId, { appId, displayId, visibility }]) => ({ id: paramId, appId, displayId, visibility }))\n\t\t\t\t.sort(compareParams),\n\t\t\t// TODO remove this when not used once the settings layout is updated\n\t\t\tmarginLeft: window.matchMedia('(min-width: 1600px)').matches\n\t\t\t\t? window.getComputedStyle(document.getElementById('vue-avatar-section')).getPropertyValue('width').trim()\n\t\t\t\t: '0px',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tdisabled() {\n\t\t\treturn !this.profileEnabled\n\t\t},\n\n\t\trows() {\n\t\t\treturn Math.ceil(this.visibilityParams.length / 2)\n\t\t},\n\t},\n\n\tmounted() {\n\t\tsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t\t// TODO remove this when not used once the settings layout is updated\n\t\twindow.onresize = () => {\n\t\t\tthis.marginLeft = window.matchMedia('(min-width: 1600px)').matches\n\t\t\t\t? window.getComputedStyle(document.getElementById('vue-avatar-section')).getPropertyValue('width').trim()\n\t\t\t\t: '0px'\n\t\t}\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t},\n\n\tmethods: {\n\t\thandleProfileEnabledUpdate(profileEnabled) {\n\t\t\tthis.profileEnabled = profileEnabled\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsection {\n\tpadding: 30px;\n\tmax-width: 900px;\n\twidth: 100%;\n\n\tem {\n\t\tdisplay: block;\n\t\tmargin: 16px 0;\n\n\t\t&.disabled {\n\t\t\tfilter: grayscale(1);\n\t\t\topacity: 0.5;\n\t\t\tcursor: default;\n\t\t\tpointer-events: none;\n\n\t\t\t& *,\n\t\t\t&::v-deep * {\n\t\t\t\tcursor: default;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t.visibility-dropdowns {\n\t\tdisplay: grid;\n\t\tgap: 10px 40px;\n\t}\n\n\t@media (min-width: 1200px) {\n\t\twidth: 940px;\n\n\t\t.visibility-dropdowns {\n\t\t\tgrid-auto-flow: column;\n\t\t}\n\t}\n\n\t@media (max-width: 1200px) {\n\t\twidth: 470px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileVisibilitySection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileVisibilitySection.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileVisibilitySection.vue?vue&type=style&index=0&id=a07dbf96&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileVisibilitySection.vue?vue&type=style&index=0&id=a07dbf96&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ProfileVisibilitySection.vue?vue&type=template&id=a07dbf96&scoped=true&\"\nimport script from \"./ProfileVisibilitySection.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfileVisibilitySection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProfileVisibilitySection.vue?vue&type=style&index=0&id=a07dbf96&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a07dbf96\",\n null\n \n)\n\nexport default component.exports","/**\n * @copyright 2021, Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport { getRequestToken } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t } from '@nextcloud/l10n'\nimport '@nextcloud/dialogs/dist/index.css'\n\nimport AvatarSection from './components/PersonalInfo/AvatarSection.vue'\nimport DetailsSection from './components/PersonalInfo/DetailsSection.vue'\nimport DisplayNameSection from './components/PersonalInfo/DisplayNameSection.vue'\nimport EmailSection from './components/PersonalInfo/EmailSection/EmailSection.vue'\nimport PhoneSection from './components/PersonalInfo/PhoneSection.vue'\nimport LocationSection from './components/PersonalInfo/LocationSection.vue'\nimport WebsiteSection from './components/PersonalInfo/WebsiteSection.vue'\nimport TwitterSection from './components/PersonalInfo/TwitterSection.vue'\nimport FediverseSection from './components/PersonalInfo/FediverseSection.vue'\nimport LanguageSection from './components/PersonalInfo/LanguageSection/LanguageSection.vue'\nimport LocaleSection from './components/PersonalInfo/LocaleSection/LocaleSection.vue'\nimport ProfileSection from './components/PersonalInfo/ProfileSection/ProfileSection.vue'\nimport OrganisationSection from './components/PersonalInfo/OrganisationSection.vue'\nimport RoleSection from './components/PersonalInfo/RoleSection.vue'\nimport HeadlineSection from './components/PersonalInfo/HeadlineSection.vue'\nimport BiographySection from './components/PersonalInfo/BiographySection.vue'\nimport ProfileVisibilitySection from './components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue'\n\n__webpack_nonce__ = btoa(getRequestToken())\n\nconst profileEnabledGlobally = loadState('settings', 'profileEnabledGlobally', true)\n\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t},\n})\n\nconst AvatarView = Vue.extend(AvatarSection)\nconst DetailsView = Vue.extend(DetailsSection)\nconst DisplayNameView = Vue.extend(DisplayNameSection)\nconst EmailView = Vue.extend(EmailSection)\nconst PhoneView = Vue.extend(PhoneSection)\nconst LocationView = Vue.extend(LocationSection)\nconst WebsiteView = Vue.extend(WebsiteSection)\nconst TwitterView = Vue.extend(TwitterSection)\nconst FediverseView = Vue.extend(FediverseSection)\nconst LanguageView = Vue.extend(LanguageSection)\nconst LocaleView = Vue.extend(LocaleSection)\n\nnew AvatarView().$mount('#vue-avatar-section')\nnew DetailsView().$mount('#vue-details-section')\nnew DisplayNameView().$mount('#vue-displayname-section')\nnew EmailView().$mount('#vue-email-section')\nnew PhoneView().$mount('#vue-phone-section')\nnew LocationView().$mount('#vue-location-section')\nnew WebsiteView().$mount('#vue-website-section')\nnew TwitterView().$mount('#vue-twitter-section')\nnew FediverseView().$mount('#vue-fediverse-section')\nnew LanguageView().$mount('#vue-language-section')\nnew LocaleView().$mount('#vue-locale-section')\n\nif (profileEnabledGlobally) {\n\tconst ProfileView = Vue.extend(ProfileSection)\n\tconst OrganisationView = Vue.extend(OrganisationSection)\n\tconst RoleView = Vue.extend(RoleSection)\n\tconst HeadlineView = Vue.extend(HeadlineSection)\n\tconst BiographyView = Vue.extend(BiographySection)\n\tconst ProfileVisibilityView = Vue.extend(ProfileVisibilitySection)\n\n\tnew ProfileView().$mount('#vue-profile-section')\n\tnew OrganisationView().$mount('#vue-organisation-section')\n\tnew RoleView().$mount('#vue-role-section')\n\tnew HeadlineView().$mount('#vue-headline-section')\n\tnew BiographyView().$mount('#vue-biography-section')\n\tnew ProfileVisibilityView().$mount('#vue-profile-visibility-section')\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-022fd5d4]{grid-row:1/3}.avatar__container[data-v-022fd5d4]{margin:0 auto;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:16px 0;width:300px}.avatar__container span[data-v-022fd5d4]{color:var(--color-text-lighter)}.avatar__preview[data-v-022fd5d4]{display:flex;justify-content:center;align-items:center;width:180px;height:180px}.avatar__buttons[data-v-022fd5d4]{display:flex;gap:0 10px}.avatar__cropper[data-v-022fd5d4]{width:300px;height:300px;overflow:hidden}.avatar__cropper-buttons[data-v-022fd5d4]{width:100%;display:flex;justify-content:space-between}.avatar__cropper[data-v-022fd5d4] .cropper-view-box{border-radius:50%}input[type=file][data-v-022fd5d4]{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/AvatarSection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,YAAA,CAGA,oCACC,aAAA,CACA,YAAA,CACA,qBAAA,CACA,sBAAA,CACA,kBAAA,CACA,UAAA,CACA,WAAA,CAEA,yCACC,+BAAA,CAIF,kCACC,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,WAAA,CACA,YAAA,CAGD,kCACC,YAAA,CACA,UAAA,CAGD,kCACC,WAAA,CACA,YAAA,CACA,eAAA,CAEA,0CACC,UAAA,CACA,YAAA,CACA,6BAAA,CAGD,oDACC,iBAAA,CAKH,kCACC,YAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tgrid-row: 1/3;\\n}\\n.avatar {\\n\\t&__container {\\n\\t\\tmargin: 0 auto;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: center;\\n\\t\\talign-items: center;\\n\\t\\tgap: 16px 0;\\n\\t\\twidth: 300px;\\n\\n\\t\\tspan {\\n\\t\\t\\tcolor: var(--color-text-lighter);\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\t\\talign-items: center;\\n\\t\\twidth: 180px;\\n\\t\\theight: 180px;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 10px;\\n\\t}\\n\\n\\t&__cropper {\\n\\t\\twidth: 300px;\\n\\t\\theight: 300px;\\n\\t\\toverflow: hidden;\\n\\n\\t\\t&-buttons {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tjustify-content: space-between;\\n\\t\\t}\\n\\n\\t\\t&::v-deep .cropper-view-box {\\n\\t\\t\\tborder-radius: 50%;\\n\\t\\t}\\n\\t}\\n}\\n\\ninput[type=\\\"file\\\"] {\\n\\tdisplay: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".details[data-v-1ab46e68]{display:flex;flex-direction:column;margin:10px 32px 10px 0;gap:16px 0;color:var(--color-text-lighter)}.details__groups[data-v-1ab46e68],.details__quota[data-v-1ab46e68]{display:flex;gap:0 10px}.details__groups-info[data-v-1ab46e68],.details__quota-info[data-v-1ab46e68]{display:flex;flex-direction:column;width:100%;gap:4px 0}.details__groups-list[data-v-1ab46e68],.details__quota-list[data-v-1ab46e68]{font-weight:bold}.details__groups[data-v-1ab46e68] .material-design-icon,.details__quota[data-v-1ab46e68] .material-design-icon{align-self:flex-start;margin-top:2px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/DetailsSection.vue\"],\"names\":[],\"mappings\":\"AACA,0BACC,YAAA,CACA,qBAAA,CACA,uBAAA,CACA,UAAA,CACA,+BAAA,CAEA,mEAEC,YAAA,CACA,UAAA,CAEA,6EACC,YAAA,CACA,qBAAA,CACA,UAAA,CACA,SAAA,CAGD,6EACC,gBAAA,CAGD,+GACC,qBAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n.details {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin: 10px 32px 10px 0;\\n\\tgap: 16px 0;\\n\\tcolor: var(--color-text-lighter);\\n\\n\\t&__groups,\\n\\t&__quota {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 10px;\\n\\n\\t\\t&-info {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tgap: 4px 0;\\n\\t\\t}\\n\\n\\t\\t&-list {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t}\\n\\n\\t\\t&::v-deep .material-design-icon {\\n\\t\\t\\talign-self: flex-start;\\n\\t\\t\\tmargin-top: 2px;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".email[data-v-5ff85d38]{display:grid;align-items:center}.email input[data-v-5ff85d38]{grid-area:1/1;width:100%}.email .email__actions-container[data-v-5ff85d38]{grid-area:1/1;justify-self:flex-end;height:30px;display:flex;gap:0 2px;margin-right:5px}.email .email__actions-container .email__actions[data-v-5ff85d38]{opacity:.4 !important}.email .email__actions-container .email__actions[data-v-5ff85d38]:hover,.email .email__actions-container .email__actions[data-v-5ff85d38]:focus,.email .email__actions-container .email__actions[data-v-5ff85d38]:active{opacity:.8 !important}.email .email__actions-container .email__actions[data-v-5ff85d38] button{height:30px !important;min-height:30px !important;width:30px !important;min-width:30px !important}.email__helper-text-message[data-v-5ff85d38]{padding:4px 0;display:flex;align-items:center}.email__helper-text-message__icon[data-v-5ff85d38]{margin-right:8px;align-self:start;margin-top:4px}.email__helper-text-message--error[data-v-5ff85d38]{color:var(--color-error)}.fade-enter[data-v-5ff85d38],.fade-leave-to[data-v-5ff85d38]{opacity:0}.fade-enter-active[data-v-5ff85d38]{transition:opacity 200ms ease-out}.fade-leave-active[data-v-5ff85d38]{transition:opacity 300ms ease-out}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/EmailSection/Email.vue\"],\"names\":[],\"mappings\":\"AACA,wBACC,YAAA,CACA,kBAAA,CAEA,8BACC,aAAA,CACA,UAAA,CAGD,kDACC,aAAA,CACA,qBAAA,CACA,WAAA,CAEA,YAAA,CACA,SAAA,CACA,gBAAA,CAEA,kEACC,qBAAA,CAEA,yNAGC,qBAAA,CAGD,yEACC,sBAAA,CACA,0BAAA,CACA,qBAAA,CACA,yBAAA,CAKH,6CACC,aAAA,CACA,YAAA,CACA,kBAAA,CAEA,mDACC,gBAAA,CACA,gBAAA,CACA,cAAA,CAGD,oDACC,wBAAA,CAKH,6DAEC,SAAA,CAGD,oCACC,iCAAA,CAGD,oCACC,iCAAA\",\"sourcesContent\":[\"\\n.email {\\n\\tdisplay: grid;\\n\\talign-items: center;\\n\\n\\tinput {\\n\\t\\tgrid-area: 1 / 1;\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.email__actions-container {\\n\\t\\tgrid-area: 1 / 1;\\n\\t\\tjustify-self: flex-end;\\n\\t\\theight: 30px;\\n\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 2px;\\n\\t\\tmargin-right: 5px;\\n\\n\\t\\t.email__actions {\\n\\t\\t\\topacity: 0.4 !important;\\n\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus,\\n\\t\\t\\t&:active {\\n\\t\\t\\t\\topacity: 0.8 !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&::v-deep button {\\n\\t\\t\\t\\theight: 30px !important;\\n\\t\\t\\t\\tmin-height: 30px !important;\\n\\t\\t\\t\\twidth: 30px !important;\\n\\t\\t\\t\\tmin-width: 30px !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__helper-text-message {\\n\\t\\tpadding: 4px 0;\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\n\\t\\t&__icon {\\n\\t\\t\\tmargin-right: 8px;\\n\\t\\t\\talign-self: start;\\n\\t\\t\\tmargin-top: 4px;\\n\\t\\t}\\n\\n\\t\\t&--error {\\n\\t\\t\\tcolor: var(--color-error);\\n\\t\\t}\\n\\t}\\n}\\n\\n.fade-enter,\\n.fade-leave-to {\\n\\topacity: 0;\\n}\\n\\n.fade-enter-active {\\n\\ttransition: opacity 200ms ease-out;\\n}\\n\\n.fade-leave-active {\\n\\ttransition: opacity 300ms ease-out;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-46c7eb7e]{padding:10px 10px}section[data-v-46c7eb7e] button:disabled{cursor:default}section .additional-emails-label[data-v-46c7eb7e]{display:block;margin-top:16px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA,CAGD,kDACC,aAAA,CACA,eAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tpadding: 10px 10px;\\n\\n\\t&::v-deep button:disabled {\\n\\t\\tcursor: default;\\n\\t}\\n\\n\\t.additional-emails-label {\\n\\t\\tdisplay: block;\\n\\t\\tmargin-top: 16px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".language[data-v-5c847b3a]{display:grid}.language select[data-v-5c847b3a]{width:100%}.language a[data-v-5c847b3a]{color:var(--color-main-text);text-decoration:none;width:max-content}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/LanguageSection/Language.vue\"],\"names\":[],\"mappings\":\"AACA,2BACC,YAAA,CAEA,kCACC,UAAA,CAGD,6BACC,4BAAA,CACA,oBAAA,CACA,iBAAA\",\"sourcesContent\":[\"\\n.language {\\n\\tdisplay: grid;\\n\\n\\tselect {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\ta {\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\ttext-decoration: none;\\n\\t\\twidth: max-content;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-92685b76]{padding:10px 10px}section[data-v-92685b76] button:disabled{cursor:default}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/LanguageSection/LanguageSection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tpadding: 10px 10px;\\n\\n\\t&::v-deep button:disabled {\\n\\t\\tcursor: default;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".locale[data-v-1ac456dc]{display:grid}.locale select[data-v-1ac456dc]{width:100%}.example[data-v-1ac456dc]{margin:10px 0;display:flex;gap:0 10px;color:var(--color-text-lighter)}.example[data-v-1ac456dc] .material-design-icon{align-self:flex-start;margin-top:2px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/LocaleSection/Locale.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,YAAA,CAEA,gCACC,UAAA,CAIF,0BACC,aAAA,CACA,YAAA,CACA,UAAA,CACA,+BAAA,CAEA,gDACC,qBAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n.locale {\\n\\tdisplay: grid;\\n\\n\\tselect {\\n\\t\\twidth: 100%;\\n\\t}\\n}\\n\\n.example {\\n\\tmargin: 10px 0;\\n\\tdisplay: flex;\\n\\tgap: 0 10px;\\n\\tcolor: var(--color-text-lighter);\\n\\n\\t&::v-deep .material-design-icon {\\n\\t\\talign-self: flex-start;\\n\\t\\tmargin-top: 2px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-84fca724]{padding:10px 10px}section[data-v-84fca724] button:disabled{cursor:default}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tpadding: 10px 10px;\\n\\n\\t&::v-deep button:disabled {\\n\\t\\tcursor: default;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"html{scroll-behavior:smooth}@media screen and (prefers-reduced-motion: reduce){html{scroll-behavior:auto}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue\"],\"names\":[],\"mappings\":\"AACA,KACC,sBAAA,CAEA,mDAHD,KAIE,oBAAA,CAAA\",\"sourcesContent\":[\"\\nhtml {\\n\\tscroll-behavior: smooth;\\n\\n\\t@media screen and (prefers-reduced-motion: reduce) {\\n\\t\\tscroll-behavior: auto;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"a[data-v-1caba458]{display:block;height:44px;width:290px;line-height:44px;padding:0 16px;margin:14px auto;border-radius:var(--border-radius-pill);opacity:.4;background-color:rgba(0,0,0,0)}a .anchor-icon[data-v-1caba458]{display:inline-block;vertical-align:middle;margin-top:6px;margin-right:8px}a[data-v-1caba458]:hover,a[data-v-1caba458]:focus,a[data-v-1caba458]:active{opacity:.8;background-color:rgba(127,127,127,.25)}a.disabled[data-v-1caba458]{pointer-events:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/EditProfileAnchorLink.vue\"],\"names\":[],\"mappings\":\"AACA,mBACC,aAAA,CACA,WAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,uCAAA,CACA,UAAA,CACA,8BAAA,CAEA,gCACC,oBAAA,CACA,qBAAA,CACA,cAAA,CACA,gBAAA,CAGD,4EAGC,UAAA,CACA,sCAAA,CAGD,4BACC,mBAAA\",\"sourcesContent\":[\"\\na {\\n\\tdisplay: block;\\n\\theight: 44px;\\n\\twidth: 290px;\\n\\tline-height: 44px;\\n\\tpadding: 0 16px;\\n\\tmargin: 14px auto;\\n\\tborder-radius: var(--border-radius-pill);\\n\\topacity: 0.4;\\n\\tbackground-color: transparent;\\n\\n\\t.anchor-icon {\\n\\t\\tdisplay: inline-block;\\n\\t\\tvertical-align: middle;\\n\\t\\tmargin-top: 6px;\\n\\t\\tmargin-right: 8px;\\n\\t}\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\topacity: 0.8;\\n\\t\\tbackground-color: rgba(127, 127, 127, .25);\\n\\t}\\n\\n\\t&.disabled {\\n\\t\\tpointer-events: none;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".preview-card[data-v-61586aa5]{display:flex;flex-direction:column;position:relative;width:290px;height:116px;margin:14px auto;border-radius:var(--border-radius-large);background-color:var(--color-main-background);font-weight:bold;box-shadow:0 2px 9px var(--color-box-shadow)}.preview-card[data-v-61586aa5]:hover,.preview-card[data-v-61586aa5]:focus,.preview-card[data-v-61586aa5]:active{box-shadow:0 2px 12px var(--color-box-shadow)}.preview-card[data-v-61586aa5]:focus-visible{outline:var(--color-main-text) solid 1px;outline-offset:3px}.preview-card.disabled[data-v-61586aa5]{filter:grayscale(1);opacity:.5;cursor:default;box-shadow:0 0 3px var(--color-box-shadow)}.preview-card.disabled *[data-v-61586aa5],.preview-card.disabled[data-v-61586aa5] *{cursor:default}.preview-card__avatar[data-v-61586aa5]{position:absolute !important;top:40px;left:18px;z-index:1}.preview-card__avatar[data-v-61586aa5]:not(.avatardiv--unknown){box-shadow:0 0 0 3px var(--color-main-background) !important}.preview-card__header[data-v-61586aa5],.preview-card__footer[data-v-61586aa5]{position:relative;width:auto}.preview-card__header span[data-v-61586aa5],.preview-card__footer span[data-v-61586aa5]{position:absolute;left:78px;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere}@supports(-webkit-line-clamp: 2){.preview-card__header span[data-v-61586aa5],.preview-card__footer span[data-v-61586aa5]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.preview-card__header[data-v-61586aa5]{height:70px;border-radius:var(--border-radius-large) var(--border-radius-large) 0 0;background-color:var(--color-primary);background-image:var(--gradient-primary-background)}.preview-card__header span[data-v-61586aa5]{bottom:0;color:var(--color-primary-text);font-size:18px;font-weight:bold;margin:0 4px 8px 0}.preview-card__footer[data-v-61586aa5]{height:46px}.preview-card__footer span[data-v-61586aa5]{top:0;color:var(--color-text-maxcontrast);font-size:14px;font-weight:normal;margin:4px 4px 0 0;line-height:1.3}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/ProfilePreviewCard.vue\"],\"names\":[],\"mappings\":\"AACA,+BACC,YAAA,CACA,qBAAA,CACA,iBAAA,CACA,WAAA,CACA,YAAA,CACA,gBAAA,CACA,wCAAA,CACA,6CAAA,CACA,gBAAA,CACA,4CAAA,CAEA,gHAGC,6CAAA,CAGD,6CACC,wCAAA,CACA,kBAAA,CAGD,wCACC,mBAAA,CACA,UAAA,CACA,cAAA,CACA,0CAAA,CAEA,oFAEC,cAAA,CAIF,uCAEC,4BAAA,CACA,QAAA,CACA,SAAA,CACA,SAAA,CAEA,gEACC,4DAAA,CAIF,8EAEC,iBAAA,CACA,UAAA,CAEA,wFACC,iBAAA,CACA,SAAA,CACA,eAAA,CACA,sBAAA,CACA,sBAAA,CAEA,iCAPD,wFAQE,mBAAA,CACA,oBAAA,CACA,2BAAA,CAAA,CAKH,uCACC,WAAA,CACA,uEAAA,CACA,qCAAA,CACA,mDAAA,CAEA,4CACC,QAAA,CACA,+BAAA,CACA,cAAA,CACA,gBAAA,CACA,kBAAA,CAIF,uCACC,WAAA,CAEA,4CACC,KAAA,CACA,mCAAA,CACA,cAAA,CACA,kBAAA,CACA,kBAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n.preview-card {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tposition: relative;\\n\\twidth: 290px;\\n\\theight: 116px;\\n\\tmargin: 14px auto;\\n\\tborder-radius: var(--border-radius-large);\\n\\tbackground-color: var(--color-main-background);\\n\\tfont-weight: bold;\\n\\tbox-shadow: 0 2px 9px var(--color-box-shadow);\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbox-shadow: 0 2px 12px var(--color-box-shadow);\\n\\t}\\n\\n\\t&:focus-visible {\\n\\t\\toutline: var(--color-main-text) solid 1px;\\n\\t\\toutline-offset: 3px;\\n\\t}\\n\\n\\t&.disabled {\\n\\t\\tfilter: grayscale(1);\\n\\t\\topacity: 0.5;\\n\\t\\tcursor: default;\\n\\t\\tbox-shadow: 0 0 3px var(--color-box-shadow);\\n\\n\\t\\t& *,\\n\\t\\t&::v-deep * {\\n\\t\\t\\tcursor: default;\\n\\t\\t}\\n\\t}\\n\\n\\t&__avatar {\\n\\t\\t// Override Avatar component position to fix positioning on rerender\\n\\t\\tposition: absolute !important;\\n\\t\\ttop: 40px;\\n\\t\\tleft: 18px;\\n\\t\\tz-index: 1;\\n\\n\\t\\t&:not(.avatardiv--unknown) {\\n\\t\\t\\tbox-shadow: 0 0 0 3px var(--color-main-background) !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__header,\\n\\t&__footer {\\n\\t\\tposition: relative;\\n\\t\\twidth: auto;\\n\\n\\t\\tspan {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tleft: 78px;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\toverflow-wrap: anywhere;\\n\\n\\t\\t\\t@supports (-webkit-line-clamp: 2) {\\n\\t\\t\\t\\tdisplay: -webkit-box;\\n\\t\\t\\t\\t-webkit-line-clamp: 2;\\n\\t\\t\\t\\t-webkit-box-orient: vertical;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__header {\\n\\t\\theight: 70px;\\n\\t\\tborder-radius: var(--border-radius-large) var(--border-radius-large) 0 0;\\n\\t\\tbackground-color: var(--color-primary);\\n\\t\\tbackground-image: var(--gradient-primary-background);\\n\\n\\t\\tspan {\\n\\t\\t\\tbottom: 0;\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t\\tfont-size: 18px;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: 0 4px 8px 0;\\n\\t\\t}\\n\\t}\\n\\n\\t&__footer {\\n\\t\\theight: 46px;\\n\\n\\t\\tspan {\\n\\t\\t\\ttop: 0;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\tfont-size: 14px;\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t\\tmargin: 4px 4px 0 0;\\n\\t\\t\\tline-height: 1.3;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-cf64d964]{padding:10px 10px}section[data-v-cf64d964] button:disabled{cursor:default}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/ProfileSection/ProfileSection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tpadding: 10px 10px;\\n\\n\\t&::v-deep button:disabled {\\n\\t\\tcursor: default;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-a07dbf96]{padding:30px;max-width:900px;width:100%}section em[data-v-a07dbf96]{display:block;margin:16px 0}section em.disabled[data-v-a07dbf96]{filter:grayscale(1);opacity:.5;cursor:default;pointer-events:none}section em.disabled *[data-v-a07dbf96],section em.disabled[data-v-a07dbf96] *{cursor:default;pointer-events:none}section .visibility-dropdowns[data-v-a07dbf96]{display:grid;gap:10px 40px}@media(min-width: 1200px){section[data-v-a07dbf96]{width:940px}section .visibility-dropdowns[data-v-a07dbf96]{grid-auto-flow:column}}@media(max-width: 1200px){section[data-v-a07dbf96]{width:470px}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,YAAA,CACA,eAAA,CACA,UAAA,CAEA,4BACC,aAAA,CACA,aAAA,CAEA,qCACC,mBAAA,CACA,UAAA,CACA,cAAA,CACA,mBAAA,CAEA,8EAEC,cAAA,CACA,mBAAA,CAKH,+CACC,YAAA,CACA,aAAA,CAGD,0BA5BD,yBA6BE,WAAA,CAEA,+CACC,qBAAA,CAAA,CAIF,0BApCD,yBAqCE,WAAA,CAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tpadding: 30px;\\n\\tmax-width: 900px;\\n\\twidth: 100%;\\n\\n\\tem {\\n\\t\\tdisplay: block;\\n\\t\\tmargin: 16px 0;\\n\\n\\t\\t&.disabled {\\n\\t\\t\\tfilter: grayscale(1);\\n\\t\\t\\topacity: 0.5;\\n\\t\\t\\tcursor: default;\\n\\t\\t\\tpointer-events: none;\\n\\n\\t\\t\\t& *,\\n\\t\\t\\t&::v-deep * {\\n\\t\\t\\t\\tcursor: default;\\n\\t\\t\\t\\tpointer-events: none;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t.visibility-dropdowns {\\n\\t\\tdisplay: grid;\\n\\t\\tgap: 10px 40px;\\n\\t}\\n\\n\\t@media (min-width: 1200px) {\\n\\t\\twidth: 940px;\\n\\n\\t\\t.visibility-dropdowns {\\n\\t\\t\\tgrid-auto-flow: column;\\n\\t\\t}\\n\\t}\\n\\n\\t@media (max-width: 1200px) {\\n\\t\\twidth: 470px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".visibility-container[data-v-b13d20da]{display:flex;width:max-content}.visibility-container.disabled[data-v-b13d20da]{filter:grayscale(1);opacity:.5;cursor:default;pointer-events:none}.visibility-container.disabled *[data-v-b13d20da],.visibility-container.disabled[data-v-b13d20da] *{cursor:default;pointer-events:none}.visibility-container label[data-v-b13d20da]{color:var(--color-text-lighter);width:150px;line-height:50px}.visibility-container__select[data-v-b13d20da]{width:270px;max-width:40vw}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue\"],\"names\":[],\"mappings\":\"AACA,uCACC,YAAA,CACA,iBAAA,CAEA,gDACC,mBAAA,CACA,UAAA,CACA,cAAA,CACA,mBAAA,CAEA,oGAEC,cAAA,CACA,mBAAA,CAIF,6CACC,+BAAA,CACA,WAAA,CACA,gBAAA,CAGD,+CACC,WAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n.visibility-container {\\n\\tdisplay: flex;\\n\\twidth: max-content;\\n\\n\\t&.disabled {\\n\\t\\tfilter: grayscale(1);\\n\\t\\topacity: 0.5;\\n\\t\\tcursor: default;\\n\\t\\tpointer-events: none;\\n\\n\\t\\t& *,\\n\\t\\t&::v-deep * {\\n\\t\\t\\tcursor: default;\\n\\t\\t\\tpointer-events: none;\\n\\t\\t}\\n\\t}\\n\\n\\tlabel {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t\\twidth: 150px;\\n\\t\\tline-height: 50px;\\n\\t}\\n\\n\\t&__select {\\n\\t\\twidth: 270px;\\n\\t\\tmax-width: 40vw;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"section[data-v-6eb7d8e0]{padding:10px 10px}section[data-v-6eb7d8e0] button:disabled{cursor:default}section .property[data-v-6eb7d8e0]{display:grid;align-items:center}section .property textarea[data-v-6eb7d8e0]{resize:vertical;grid-area:1/1;width:100%}section .property input[data-v-6eb7d8e0]{grid-area:1/1;width:100%}section .property .property__actions-container[data-v-6eb7d8e0]{grid-area:1/1;justify-self:flex-end;align-self:flex-end;height:30px;display:flex;gap:0 2px;margin-right:5px;margin-bottom:5px}section .property__helper-text-message[data-v-6eb7d8e0]{padding:4px 0;display:flex;align-items:center}section .property__helper-text-message__icon[data-v-6eb7d8e0]{margin-right:8px;align-self:start;margin-top:4px}section .property__helper-text-message--error[data-v-6eb7d8e0]{color:var(--color-error)}section .fade-enter[data-v-6eb7d8e0],section .fade-leave-to[data-v-6eb7d8e0]{opacity:0}section .fade-enter-active[data-v-6eb7d8e0]{transition:opacity 200ms ease-out}section .fade-leave-active[data-v-6eb7d8e0]{transition:opacity 300ms ease-out}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/shared/AccountPropertySection.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,iBAAA,CAEA,yCACC,cAAA,CAGD,mCACC,YAAA,CACA,kBAAA,CAEA,4CACC,eAAA,CACA,aAAA,CACA,UAAA,CAGD,yCACC,aAAA,CACA,UAAA,CAGD,gEACC,aAAA,CACA,qBAAA,CACA,mBAAA,CACA,WAAA,CAEA,YAAA,CACA,SAAA,CACA,gBAAA,CACA,iBAAA,CAIF,wDACC,aAAA,CACA,YAAA,CACA,kBAAA,CAEA,8DACC,gBAAA,CACA,gBAAA,CACA,cAAA,CAGD,+DACC,wBAAA,CAIF,6EAEC,SAAA,CAGD,4CACC,iCAAA,CAGD,4CACC,iCAAA\",\"sourcesContent\":[\"\\nsection {\\n\\tpadding: 10px 10px;\\n\\n\\t&::v-deep button:disabled {\\n\\t\\tcursor: default;\\n\\t}\\n\\n\\t.property {\\n\\t\\tdisplay: grid;\\n\\t\\talign-items: center;\\n\\n\\t\\ttextarea {\\n\\t\\t\\tresize: vertical;\\n\\t\\t\\tgrid-area: 1 / 1;\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\n\\t\\tinput {\\n\\t\\t\\tgrid-area: 1 / 1;\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\n\\t\\t.property__actions-container {\\n\\t\\t\\tgrid-area: 1 / 1;\\n\\t\\t\\tjustify-self: flex-end;\\n\\t\\t\\talign-self: flex-end;\\n\\t\\t\\theight: 30px;\\n\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tgap: 0 2px;\\n\\t\\t\\tmargin-right: 5px;\\n\\t\\t\\tmargin-bottom: 5px;\\n\\t\\t}\\n\\t}\\n\\n\\t.property__helper-text-message {\\n\\t\\tpadding: 4px 0;\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\n\\t\\t&__icon {\\n\\t\\t\\tmargin-right: 8px;\\n\\t\\t\\talign-self: start;\\n\\t\\t\\tmargin-top: 4px;\\n\\t\\t}\\n\\n\\t\\t&--error {\\n\\t\\t\\tcolor: var(--color-error);\\n\\t\\t}\\n\\t}\\n\\n\\t.fade-enter,\\n\\t.fade-leave-to {\\n\\t\\topacity: 0;\\n\\t}\\n\\n\\t.fade-enter-active {\\n\\t\\ttransition: opacity 200ms ease-out;\\n\\t}\\n\\n\\t.fade-leave-active {\\n\\t\\ttransition: opacity 300ms ease-out;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".federation-actions[data-v-4ea07669],.federation-actions--additional[data-v-4ea07669]{opacity:.4 !important}.federation-actions[data-v-4ea07669]:hover,.federation-actions[data-v-4ea07669]:focus,.federation-actions[data-v-4ea07669]:active,.federation-actions--additional[data-v-4ea07669]:hover,.federation-actions--additional[data-v-4ea07669]:focus,.federation-actions--additional[data-v-4ea07669]:active{opacity:.8 !important}.federation-actions--additional[data-v-4ea07669] button{padding-bottom:7px;height:30px !important;min-height:30px !important;width:30px !important;min-width:30px !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/shared/FederationControl.vue\"],\"names\":[],\"mappings\":\"AACA,sFAEC,qBAAA,CAEA,wSAGC,qBAAA,CAKD,wDAEC,kBAAA,CACA,sBAAA,CACA,0BAAA,CACA,qBAAA,CACA,yBAAA\",\"sourcesContent\":[\"\\n.federation-actions,\\n.federation-actions--additional {\\n\\topacity: 0.4 !important;\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\topacity: 0.8 !important;\\n\\t}\\n}\\n\\n.federation-actions--additional {\\n\\t&::v-deep button {\\n\\t\\t// TODO remove this hack\\n\\t\\tpadding-bottom: 7px;\\n\\t\\theight: 30px !important;\\n\\t\\tmin-height: 30px !important;\\n\\t\\twidth: 30px !important;\\n\\t\\tmin-width: 30px !important;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".federation-actions__btn[data-v-404f7a30] p{width:150px !important;padding:8px 0 !important;color:var(--color-main-text) !important;font-size:12.8px !important;line-height:1.5em !important}.federation-actions__btn--active[data-v-404f7a30]{background-color:var(--color-primary-light) !important;box-shadow:inset 2px 0 var(--color-primary) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/shared/FederationControlAction.vue\"],\"names\":[],\"mappings\":\"AAEC,4CACC,sBAAA,CACA,wBAAA,CACA,uCAAA,CACA,2BAAA,CACA,4BAAA,CAIF,kDACC,sDAAA,CACA,sDAAA\",\"sourcesContent\":[\"\\n.federation-actions__btn {\\n\\t&::v-deep p {\\n\\t\\twidth: 150px !important;\\n\\t\\tpadding: 8px 0 !important;\\n\\t\\tcolor: var(--color-main-text) !important;\\n\\t\\tfont-size: 12.8px !important;\\n\\t\\tline-height: 1.5em !important;\\n\\t}\\n}\\n\\n.federation-actions__btn--active {\\n\\tbackground-color: var(--color-primary-light) !important;\\n\\tbox-shadow: inset 2px 0 var(--color-primary) !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".headerbar-label[data-v-b43fcc0c]{font-weight:normal;display:inline-flex;width:100%;margin:12px 0 0 0;gap:8px;align-items:center;font-size:16px;color:var(--color-text-light)}.headerbar-label.profile-property[data-v-b43fcc0c]{height:38px}.headerbar-label.setting-property[data-v-b43fcc0c]{height:44px}.headerbar-label label[data-v-b43fcc0c]{cursor:pointer}.federation-control[data-v-b43fcc0c]{margin:0}.button-vue[data-v-b43fcc0c]{margin:0 0 0 auto !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,kBAAA,CACA,mBAAA,CACA,UAAA,CACA,iBAAA,CACA,OAAA,CACA,kBAAA,CACA,cAAA,CACA,6BAAA,CAEA,mDACC,WAAA,CAGD,mDACC,WAAA,CAGD,wCACC,cAAA,CAIF,qCACC,QAAA,CAGD,6BACC,4BAAA\",\"sourcesContent\":[\"\\n.headerbar-label {\\n\\tfont-weight: normal;\\n\\tdisplay: inline-flex;\\n\\twidth: 100%;\\n\\tmargin: 12px 0 0 0;\\n\\tgap: 8px;\\n\\talign-items: center;\\n\\tfont-size: 16px;\\n\\tcolor: var(--color-text-light);\\n\\n\\t&.profile-property {\\n\\t\\theight: 38px;\\n\\t}\\n\\n\\t&.setting-property {\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\tlabel {\\n\\t\\tcursor: pointer;\\n\\t}\\n}\\n\\n.federation-control {\\n\\tmargin: 0;\\n}\\n\\n.button-vue {\\n\\tmargin: 0 0 0 auto !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 4418;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t4418: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(71945)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","name","components","NcActionButton","props","activeScope","type","String","required","displayName","handleScopeChange","Function","default","iconClass","isSupportedScope","Boolean","tooltipDisabled","tooltip","methods","updateScope","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","class","attrs","on","$event","stopPropagation","preventDefault","apply","arguments","_v","_s","ACCOUNT_PROPERTY_ENUM","Object","freeze","ADDRESS","AVATAR","BIOGRAPHY","DISPLAYNAME","EMAIL_COLLECTION","EMAIL","HEADLINE","NOTIFICATION_EMAIL","FEDIVERSE","ORGANISATION","PHONE","PROFILE_ENABLED","ROLE","TWITTER","WEBSITE","ACCOUNT_PROPERTY_READABLE_ENUM","t","NAME_READABLE_ENUM","PROFILE_READABLE_ENUM","PROFILE_VISIBILITY","PROPERTY_READABLE_KEYS_ENUM","ACCOUNT_SETTING_PROPERTY_ENUM","LANGUAGE","LOCALE","ACCOUNT_SETTING_PROPERTY_READABLE_ENUM","SCOPE_ENUM","PRIVATE","LOCAL","FEDERATED","PUBLISHED","PROPERTY_READABLE_SUPPORTED_SCOPES_ENUM","UNPUBLISHED_READABLE_PROPERTIES","SCOPE_SUFFIX","SCOPE_PROPERTY_ENUM","DEFAULT_ADDITIONAL_EMAIL_SCOPE","VERIFICATION_ENUM","NOT_VERIFIED","VERIFICATION_IN_PROGRESS","VERIFIED","VALIDATE_EMAIL_REGEX","savePrimaryAccountProperty","async","accountProperty","value","userId","getCurrentUser","uid","url","generateOcsUrl","confirmPassword","axios","key","data","getLoggerBuilder","setApp","detectUser","build","handleError","error","message","_error$response","fullMessage","response","status","showError","logger","federationEnabled","lookupServerUploadEnabled","loadState","NcActions","FederationControlAction","readable","validator","values","includes","additional","additionalValue","disabled","handleAdditionalScopeChange","scope","readableLowerCase","toLocaleLowerCase","initialScope","computed","ariaLabel","property","scopeDisplayNameLowerCase","scopeIcon","federationScopes","supportedScopes","scopes","push","$emit","updateAdditionalScope","updatePrimaryScope","_responseData$ocs","_responseData$ocs$met","responseData","concat","savePrimaryAccountPropertyScope","handleResponse","ocs","meta","e","errorMessage","_responseData$ocs2","_responseData$ocs2$me","_ref","_l","federationScope","changeScope","FederationControl","NcButton","Plus","inputId","isEditable","isMultiValueSupported","isValidSection","isHeading","localScope","isProfileProperty","isSettingProperty","onAddAdditional","onScopeChange","tag","_e","scopedSlots","_u","fn","proxy","avatar","avatarChangeSupported","VALID_MIME_TYPES","picker","getFilePickerBuilder","setMultiSelect","setMimeTypeFilter","setModal","setType","allowDirectories","Delete","Folder","HeaderBar","NcAvatar","Upload","VueCropper","showCropper","loading","version","oc_userconfig","isGenerated","generated","validMimeTypes","cropperOptions","aspectRatio","viewMode","guides","center","highlight","autoCropArea","minContainerWidth","minContainerHeight","created","subscribe","handleDisplayNameUpdate","beforeDestroy","unsubscribe","activateLocalFilePicker","$refs","input","click","onChange","file","target","files","cancel","reader","FileReader","onload","cropper","replace","result","readAsDataURL","path","pick","generateUrl","handleAvatarUpdate","tempAvatar","encodeURIComponent","OC","requestToken","Math","floor","random","saveAvatar","canvasData","getCroppedCanvas","scaleFactor","width","scale","toBlob","blob","formData","FormData","append","Date","now","emit","$set","openFilePicker","removeAvatar","ref","join","directives","rawName","expression","_b","groups","quota","totalSpace","usage","usageRelative","Account","CircleSlice","NcProgressBar","quotaText","domProps","AlertCircle","AlertOctagon","Check","placeholder","multiLine","onValidate","onSave","initialValue","helperText","showCheckmarkIcon","showErrorIcon","onPropertyChange","debouncePropertyChange","trim","debounce","validationMessage","updateProperty","setTimeout","displayNameChangeSupported","AccountPropertySection","savePrimaryEmail","email","removeAdditionalEmail","collection","savePrimaryEmailScope","saveAdditionalEmailScope","collectionScope","validateEmail","test","slice","length","index","Number","primary","activeNotificationEmail","localVerificationState","propertyReadable","initialEmail","deleteDisabled","deleteEmailLabel","setNotificationMailDisabled","setNotificationMailLabel","isNotificationEmail","federationDisabled","inputPlaceholder","mounted","$nextTick","_this$$refs$email","focus","onEmailChange","debounceEmailChange","_this$$refs$email2","updatePrimaryEmail","addAdditionalEmail","updateAdditionalEmail","deleteAdditionalEmail","saveAdditionalEmail","_responseData$ocs3","_responseData$ocs3$me","newNotificationMailValue","saveNotificationEmail","notificationEmail","_responseData$ocs4","_responseData$ocs4$me","prevEmail","newEmail","_responseData$ocs5","_responseData$ocs5$me","handleDeleteAdditionalEmail","undefined","deleteEmail","setNotificationMail","emailMap","additionalEmails","primaryEmail","Email","map","properties","generateUniqueKey","firstAdditionalEmail","every","primaryEmailValue","get","set","onAddAdditionalEmail","onDeleteAdditionalEmail","$delete","deletedEmail","deleteFirstAdditionalEmail","handleDeleteFirstAdditionalEmail","toString","substring","onUpdateEmail","onUpdateNotificationEmail","additionalEmail","parseInt","locallyVerified","defaultPhoneRegion","phone","isValidPhoneNumber","location","website","URL","validateUrl","twitter","fediverse","commonLanguages","Array","otherLanguages","language","initialLanguage","allLanguages","reduce","acc","code","constructLanguage","updateLanguage","reloadPage","languageCode","_ref2","reload","onLanguageChange","commonLanguage","otherLanguage","languageMap","activeLanguage","Language","Web","locale","localesForLanguage","otherLocales","initialLocale","example","date","moment","format","time","firstDayOfWeek","window","dayNames","firstDay","allLocales","setInterval","refreshExample","constructLocale","updateLocale","localeCode","onLocaleChange","currentLocale","localeMap","activeLocale","Locale","ChevronDownIcon","profileEnabled","_g","$listeners","NcCheckboxRadioSwitch","isProfileEnabled","saveEnableProfile","organisation","profilePageLink","EditProfileAnchorLink","ProfileCheckbox","ProfilePreviewCard","handleOrganisationUpdate","role","headline","biography","VISIBILITY_ENUM","SHOW","SHOW_USERS_ONLY","HIDE","VISIBILITY_PROPERTY_ENUM","label","NcSelect","paramId","displayId","visibility","initialVisibility","visibilityObject","visibilityOptions","handleProfileEnabledUpdate","updateVisibility","saveProfileParameterVisibility","onVisibilityChange","profileConfig","compareParams","a","b","appId","localeCompare","VisibilityDropdown","heading","visibilityParams","entries","id","sort","marginLeft","matchMedia","matches","getComputedStyle","document","getElementById","getPropertyValue","rows","ceil","onresize","style","gridTemplateRows","param","__webpack_nonce__","btoa","getRequestToken","profileEnabledGlobally","Vue","AvatarView","AvatarSection","DetailsView","DetailsSection","DisplayNameView","DisplayNameSection","EmailView","EmailSection","PhoneView","PhoneSection","LocationView","LocationSection","WebsiteView","WebsiteSection","TwitterView","TwitterSection","FediverseView","FediverseSection","LanguageView","LanguageSection","LocaleView","LocaleSection","$mount","ProfileView","ProfileSection","OrganisationView","OrganisationSection","RoleView","RoleSection","HeadlineView","HeadlineSection","BiographyView","BiographySection","ProfileVisibilityView","ProfileVisibilitySection","___CSS_LOADER_EXPORT___","module","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","keys","resolve","exports","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","splice","r","n","getter","__esModule","d","definition","defineProperty","enumerable","g","globalThis","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","baseURI","self","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/lib/l10n/cs.js b/lib/l10n/cs.js
index 7c08e08c896..d950f6b1969 100644
--- a/lib/l10n/cs.js
+++ b/lib/l10n/cs.js
@@ -114,6 +114,7 @@ OC.L10N.register(
"Address" : "Adresa",
"Profile picture" : "Profilový obrázek",
"About" : "O uživateli",
+ "Display name" : "Zobrazované jméno",
"Headline" : "Nadpis",
"Organisation" : "Organizace",
"Role" : "Role",
diff --git a/lib/l10n/cs.json b/lib/l10n/cs.json
index 7cbddca4bc2..13a6b4fdef8 100644
--- a/lib/l10n/cs.json
+++ b/lib/l10n/cs.json
@@ -112,6 +112,7 @@
"Address" : "Adresa",
"Profile picture" : "Profilový obrázek",
"About" : "O uživateli",
+ "Display name" : "Zobrazované jméno",
"Headline" : "Nadpis",
"Organisation" : "Organizace",
"Role" : "Role",
diff --git a/lib/l10n/de.js b/lib/l10n/de.js
index 991e483e0db..283af683d7b 100644
--- a/lib/l10n/de.js
+++ b/lib/l10n/de.js
@@ -114,6 +114,7 @@ OC.L10N.register(
"Address" : "Adresse",
"Profile picture" : "Profilbild",
"About" : "Über",
+ "Display name" : "Anzeigename",
"Headline" : "Überschrift",
"Organisation" : "Organisation",
"Role" : "Funktion",
diff --git a/lib/l10n/de.json b/lib/l10n/de.json
index e2b785b0288..74a7799fec6 100644
--- a/lib/l10n/de.json
+++ b/lib/l10n/de.json
@@ -112,6 +112,7 @@
"Address" : "Adresse",
"Profile picture" : "Profilbild",
"About" : "Über",
+ "Display name" : "Anzeigename",
"Headline" : "Überschrift",
"Organisation" : "Organisation",
"Role" : "Funktion",
diff --git a/lib/private/Console/Application.php b/lib/private/Console/Application.php
index 0ed436fb0e6..94956364390 100644
--- a/lib/private/Console/Application.php
+++ b/lib/private/Console/Application.php
@@ -178,17 +178,13 @@ class Application {
* for writing outputs.
* @return void
*/
- private function writeMaintenanceModeInfo(
- InputInterface $input, ConsoleOutputInterface $output
- ) {
+ private function writeMaintenanceModeInfo(InputInterface $input, ConsoleOutputInterface $output): void {
if ($input->getArgument('command') !== '_completion'
&& $input->getArgument('command') !== 'maintenance:mode'
&& $input->getArgument('command') !== 'status') {
$errOutput = $output->getErrorOutput();
- $errOutput->writeln(
- '<comment>Nextcloud is in maintenance mode, hence the database isn\'t accessible.' . PHP_EOL .
- 'Cannot perform any command except \'maintenance:mode --off\'</comment>' . PHP_EOL
- );
+ $errOutput->writeln('<comment>Nextcloud is in maintenance mode, no apps are loaded.</comment>');
+ $errOutput->writeln('<comment>Commands provided by apps are unavailable.</comment>');
}
}
diff --git a/lib/public/Files/Template/TemplateFileCreator.php b/lib/public/Files/Template/TemplateFileCreator.php
index 26edf585869..3a1e62c6f5c 100644
--- a/lib/public/Files/Template/TemplateFileCreator.php
+++ b/lib/public/Files/Template/TemplateFileCreator.php
@@ -37,6 +37,10 @@ final class TemplateFileCreator implements \JsonSerializable {
protected $iconClass;
protected $ratio = null;
protected $order = 100;
+ /**
+ * @since 27.0.0
+ */
+ protected string $actionLabel = '';
/**
* @since 21.0.0
@@ -104,6 +108,21 @@ final class TemplateFileCreator implements \JsonSerializable {
}
/**
+ * @since 27.0.0
+ */
+ public function setActionLabel(string $actionLabel): TemplateFileCreator {
+ $this->actionLabel = $actionLabel;
+ return $this;
+ }
+
+ /**
+ * @since 27.0.0
+ */
+ public function getActionLabel(): string {
+ return $this->actionLabel;
+ }
+
+ /**
* @since 21.0.0
*/
public function jsonSerialize(): array {
@@ -113,7 +132,8 @@ final class TemplateFileCreator implements \JsonSerializable {
'extension' => $this->fileExtension,
'iconClass' => $this->iconClass,
'mimetypes' => $this->mimetypes,
- 'ratio' => $this->ratio
+ 'ratio' => $this->ratio,
+ 'actionLabel' => $this->actionLabel,
];
}
}
diff --git a/lib/public/Log/ILogFactory.php b/lib/public/Log/ILogFactory.php
index 6bbcf93bca8..e0128d6b11c 100644
--- a/lib/public/Log/ILogFactory.php
+++ b/lib/public/Log/ILogFactory.php
@@ -44,7 +44,7 @@ interface ILogFactory {
* @param string $path
* @return ILogger
* @since 14.0.0
- * @deprecated use \OCP\Log\ILogFactory::getCustomPsrLogger
+ * @deprecated 22.0.0 Use \OCP\Log\ILogFactory::getCustomPsrLogger
* @see \OCP\Log\ILogFactory::getCustomPsrLogger
*/
public function getCustomLogger(string $path): ILogger;