From 8bd51ce055c61ecce543dcb88600a24c586036bd Mon Sep 17 00:00:00 2001 From: Frank Karlitschek Date: Mon, 14 Sep 2026 09:09:22 +0200 Subject: [PATCH 1/2] The bell: every notification type, linked into the app, follow requests answerable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nextcloud's bell already heard about mentions, favourites, boosts, follows, follow requests and edits. It did not hear about a poll the reader voted in closing or a post from an account whose bell they rang — both stored for the client API, neither raised — and every entry it did raise linked out to the remote object rather than into this app's own page for it, which is the complaint in nextcloud/social#1628. NotificationService::emit() now raises `poll` and `status` too (a poll's author is told about their own poll closing, as on Mastodon), and builds the link into the app — `/@handle/nid` for a post, `/@handle` for an account — falling back to the remote address only when it cannot name a page. A follow request carries the follower's id, and Notifier puts Accept and Decline on the bell entry, POSTing to the same routes a Mastodon client uses; answering through either route dismisses the stored row and withdraws the bell entry (onFollowRequestAnswered()), so it does not come back on the next reload. Closes nextcloud/social#1631 (followers reach the bell), #1021 (mentions do) and #1628 (the entries link into the app and can be acted on). Signed-off-by: Frank Karlitschek Co-Authored-By: Claude Fable 5.1 --- README.md | 1 + docs/Architecture.md | 4 +- lib/Controller/ApiController.php | 4 + lib/Notification/Notifier.php | 43 ++++++++ lib/Service/NotificationService.php | 104 ++++++++++++++++++-- tests/Controller/ApiControllerTest.php | 6 +- tests/Notification/NotifierSubjectsTest.php | 3 +- tests/Notification/NotifierTest.php | 80 +++++++++++++++ tests/Service/NotificationServiceTest.php | 63 +++++++++++- 9 files changed, 290 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 50df50e8d..0ae00e9c0 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ It is a partial implementation of ActivityPub and of the Mastodon client API — - 🔗 **Link previews** — a post that links somewhere gets a preview card (OpenGraph, with the plain title/description as fallback) read by a background job, so nothing waits for a stranger's web server. The fetch is HTTP(S)-only on every hop, refuses local addresses, is size- and time-capped and obeys the instance access list. Cards are never federated — like Mastodon, every instance reads the page itself. - 🧹 **Retention** — remote statuses older than `retention_days` (default: disabled) that no local user interacted with are pruned together with their cached attachments, from cron or `occ social:stream:prune`; local content is never touched. Configurable in the Social section of the administration settings. - 🧹 **Accounts are deleted together** — removing a Nextcloud user takes their Fediverse account with it: the actor is tombstoned, what belongs to it is dropped, and a `Delete` is federated so the servers that cached it drop their copies too. Previously the Social account outlived the user, kept resolving over WebFinger and kept receiving deliveries. +- 🔔 **The Nextcloud bell** — a mention, a favourite, a boost, a new follower, a follow request, an edit of a post you boosted, a poll you voted in closing and a post from an account whose bell you rang all reach Nextcloud's own notifications (and its mail digest), each linking into this app's page for the post or the account rather than out to the remote server. A **follow request carries Accept and Decline** on the bell entry itself; answering it there takes the entry down. - 🔔 **An unread badge that counts** — the Notifications entry in the sidebar shows how many arrived since you last looked, instead of the hard-coded zero it used to show. The position is a Mastodon **marker** (`/api/v1/markers`), kept per timeline on the server, so clearing it on your phone clears it here; `/api/v1/notifications/unread_count` serves the number. - 🖼️ **Alt text you can actually write** — every attachment in the composer has a description field, and a post carrying an undescribed one says so before it is sent (a nudge, never a refusal). The app has always rendered other servers' alt text; it could not produce any of its own until now. - ♿ **Usable without a mouse or without sight** — every post is an `article` named after its author, timelines carry a heading, `j`/`k` moves the keyboard rather than only a highlight, the composer is a named text box with a visible focus ring, attachments and the post timestamp are real buttons, like and boost are single toggles that report their state (and do not throw away the focus of whoever pressed them), and every dialog has a name. diff --git a/docs/Architecture.md b/docs/Architecture.md index 8e64f26d0..48f7b478b 100644 --- a/docs/Architecture.md +++ b/docs/Architecture.md @@ -7,7 +7,7 @@ Nextcloud Social is a federated social networking app built on the W3C ActivityP **App ID:** `social` **Namespace:** `OCA\Social` **License:** AGPL-3.0-or-later -**App version:** 0.19.40 +**App version:** 0.19.41 **Supported Nextcloud versions:** 35 – 36 **Supported PHP versions:** 8.3 – 8.5 @@ -1137,7 +1137,7 @@ anything. `HashtagFollowedList.vue` is the disclosure beneath it. | Dashboard | `SocialReportsWidget` | `Application::register()` | Open moderation reports; conditional — admins only | | Dashboard | `SocialFederationHealthWidget` | `Application::register()` | Instances the outbound queue is failing to reach; conditional — admins only | | Unified Search | `UnifiedSearchProvider` | `Application::register()` | Searches URIs, accounts, hashtags and **status content** (case-insensitive substring over the statuses the viewer may see: own posts, public/unlisted, and what is addressed to them — the timeline viewer bound). Local hits link to the post page, remote hits to their origin. Honours the query's cursor and limit — each source is asked for one entry past the end of the page, and a further page is offered only when one of them supplied it. It used to advertise a next cursor unconditionally while reading neither, so "load more" served the first page for ever | -| Notifications | `Notifier` | `Application::register()` | Prepares Social notifications for the NC notification system | +| Notifications | `Notifier` | `Application::register()` | Prepares Social notifications for the NC notification system: every subject in `NotificationService::SUBJECTS` is worded, linked into this app's own pages (`NotificationService::emit()` builds the link from the post's nid or the account's handle), and a `follow_request` carries Accept/Decline actions that POST to `/api/v1/follow_requests/{id}/authorize` and `/reject`; the answer dismisses the stored row and withdraws the bell entry (`onFollowRequestAnswered()`) | | User migration | `UserMigration\SocialMigrator` | `Application::register()` | Puts the user's Social data in a Nextcloud account export, and reads it back on import. See "Account export and import" below | | Profile Page | `ProfileSectionListener` | `Application::register()` (on `BeforeTemplateRenderedEvent`) | Adds the `social-profilePage` script to the user profile page | | Files | `FilesScriptsListener` | `Application::register()` (on `OCA\Files\Event\LoadAdditionalScriptsEvent`) | Adds the self-contained `social-filesAction` init script, which registers "Share to Social" on pictures and videos | diff --git a/lib/Controller/ApiController.php b/lib/Controller/ApiController.php index 5ff8d843b..6c26669c5 100644 --- a/lib/Controller/ApiController.php +++ b/lib/Controller/ApiController.php @@ -71,6 +71,7 @@ use OCA\Social\Service\HashtagService; use OCA\Social\Service\InstanceService; use OCA\Social\Service\MarkerService; +use OCA\Social\Service\NotificationService; use OCA\Social\Service\PinService; use OCA\Social\Service\PlaceService; use OCA\Social\Service\PollService; @@ -193,6 +194,7 @@ public function __construct( private FediverseService $fediverseService, private PlaceService $placeService, private DeliveryService $deliveryService, + private NotificationService $notificationService, ) { parent::__construct(Application::APP_ID, $request); @@ -515,6 +517,8 @@ private function followRequestAction(string $id, bool $authorize): DataResponse } else { $this->followService->rejectFollowRequest($follower); } + // the bell entry that asked comes down with the answer + $this->notificationService->onFollowRequestAnswered($this->viewer, $follower->getId()); return new DataResponse( $this->followService->getRelationshipWith($follower), Http::STATUS_OK diff --git a/lib/Notification/Notifier.php b/lib/Notification/Notifier.php index 44fd83261..29d62db12 100644 --- a/lib/Notification/Notifier.php +++ b/lib/Notification/Notifier.php @@ -111,6 +111,21 @@ public function prepare(INotification $notification, string $languageCode): INot $l10n->t('%s wants to follow you', [$this->account($params)]) ); $this->point($notification, $params); + $this->offerToAnswer($notification, $params, $l10n); + break; + case 'poll': + $notification->setParsedSubject( + $l10n->t('The poll by %s has ended', [$this->account($params)]) + ); + $this->point($notification, $params); + break; + case 'status': + // the bell on a profile: a post from an account the reader asked + // to be told about + $notification->setParsedSubject( + $l10n->t('%s posted', [$this->account($params)]) + ); + $this->point($notification, $params); break; case 'update': @@ -192,6 +207,34 @@ private function point(INotification $notification, array $params): void { } } + /** + * Accept and Decline, on the bell entry itself. Both POST to the routes a + * Mastodon client uses for the same answer, and the answer takes the entry + * down (`NotificationService::onFollowRequestAnswered()`). Offered only + * when the follower's id is known -- an entry raised before it was stored + * still says who asked and links to them. + */ + private function offerToAnswer(INotification $notification, array $params, IL10N $l10n): void { + $nid = (int)($params['nid'] ?? 0); + if ($nid < 1) { + return; + } + + $accept = $notification->createAction(); + $accept->setLabel('accept') + ->setParsedLabel($l10n->t('Accept')) + ->setPrimary(true) + ->setLink($this->url->linkToRouteAbsolute('social.Api.followRequestAuthorize', ['id' => (string)$nid]), 'POST'); + $notification->addAction($accept); + + $decline = $notification->createAction(); + $decline->setLabel('decline') + ->setParsedLabel($l10n->t('Decline')) + ->setPrimary(false) + ->setLink($this->url->linkToRouteAbsolute('social.Api.followRequestReject', ['id' => (string)$nid]), 'POST'); + $notification->addAction($decline); + } + private function isWebUrl(string $url): bool { return (filter_var($url, FILTER_VALIDATE_URL) !== false) && (str_starts_with($url, 'https://') || str_starts_with($url, 'http://')); diff --git a/lib/Service/NotificationService.php b/lib/Service/NotificationService.php index ca918db47..7b8409f25 100644 --- a/lib/Service/NotificationService.php +++ b/lib/Service/NotificationService.php @@ -29,6 +29,7 @@ use OCA\Social\Model\ActivityPub\Stream; use OCA\Social\Model\ActorRelation; use OCA\Social\Model\Client\Options\ProbeOptions; +use OCP\IURLGenerator; use OCP\Notification\IManager as INotificationManager; use Psr\Log\LoggerInterface; @@ -68,6 +69,11 @@ class NotificationService { Follow::TYPE => 'follow', Follow::TYPE_REQUEST => 'follow_request', Update::TYPE => 'update', + // the two events this instance raises itself that a reader wants to + // hear about: a poll they voted in closing, and a post from an account + // whose bell they rang + Stream::SUBTYPE_POLL => 'poll', + Stream::SUBTYPE_STATUS => 'status', ]; /** The `object_type` every notification of this app is filed under. */ @@ -98,6 +104,7 @@ public function __construct( private AccountRelationService $accountRelationService, private INotificationManager $notificationManager, private LoggerInterface $logger, + private IURLGenerator $urlGenerator, ) { } @@ -415,9 +422,13 @@ private function emit(SocialAppNotification $notification, string $actorId): voi $recipientId = $notification->getTo(); $actorId = ($actorId !== '') ? $actorId : $this->actorOf($notification); - if ($recipientId === '' || $actorId === '' || $recipientId === $actorId) { + if ($recipientId === '' || $actorId === '') { + return; + } + if ($recipientId === $actorId && $subject !== 'poll') { // somebody boosting their own post, or replying to themselves with - // their own handle in it, is not news to them + // their own handle in it, is not news to them -- their own poll + // closing is, which is also who Mastodon tells return; } @@ -432,24 +443,97 @@ private function emit(SocialAppNotification $notification, string $actorId): voi } $actor = $this->cachedActor($actorId); - $link = in_array($subject, ['follow', 'follow_request'], true) - ? $actorId - : $notification->getObjectId(); + $parameters = [ + 'account' => ($actor === null) ? $actorId : $this->labelOf($actor), + // into this app, not at the remote object: a bell entry that opened + // a Mastodon page for a post the reader can see here was the + // complaint in nextcloud/social#1628 + 'link' => in_array($subject, ['follow', 'follow_request'], true) + ? $this->profileLink($actor, $actorId) + : $this->postLink($notification), + 'avatar' => ($actor === null) ? '' : $actor->getAvatar(), + ]; + if ($subject === 'follow_request' && $actor !== null && $actor->getNid() > 0) { + // what Notifier builds the Accept and Decline actions from + $parameters['nid'] = $actor->getNid(); + } $raised = $this->notificationManager->createNotification(); $raised->setApp('social') ->setDateTime(new DateTime('now')) ->setUser($recipient->getUserId()) ->setObject(self::OBJECT, $this->objectId($notification->getId())) - ->setSubject($subject, [ - 'account' => ($actor === null) ? $actorId : $this->labelOf($actor), - 'link' => $link, - 'avatar' => ($actor === null) ? '' : $actor->getAvatar(), - ]); + ->setSubject($subject, $parameters); $this->notificationManager->notify($raised); } + /** + * A follow request was answered: the bell entry that asked is taken down + * with the row behind it, so it does not come back on the next reload. + * Never throws -- the answer is given whether or not the bell hears. + */ + public function onFollowRequestAnswered(Person $viewer, string $followerId): void { + try { + foreach ($this->page($viewer, self::CLEAR_PAGE) as $row) { + if ($row->getSubType() === Follow::TYPE_REQUEST + && $row->getAttributedTo() === $followerId) { + $this->dismiss($viewer, $row->getNid()); + } + } + } catch (Exception $e) { + $this->logger->debug('could not take a follow request off the bell', ['exception' => $e]); + } + } + + /** This app's page for an account, or the actor's own address when it has no handle here. */ + private function profileLink(?Person $actor, string $actorId): string { + $acct = $this->acctOf($actor); + + return ($acct === '') ? $actorId : $this->appLink('@' . $acct); + } + + /** + * This app's page for the post a notification is about, or the post's + * own address when it is not one this instance holds. + */ + private function postLink(SocialAppNotification $notification): string { + $post = $notification->getDetailsAll()['post'] ?? null; + if (!($post instanceof Stream)) { + try { + $post = $this->streamRequest->getStreamById($notification->getObjectId()); + } catch (Exception $e) { + return $notification->getObjectId(); + } + } + + $acct = $this->acctOf($this->cachedActor($post->getAttributedTo())); + if ($acct === '') { + try { + $acct = $this->actorsRequest->getFromId($post->getAttributedTo())->getPreferredUsername(); + } catch (Exception $e) { + $acct = ''; + } + } + if ($acct === '' || $post->getNid() < 1) { + return $notification->getObjectId(); + } + + return $this->appLink('@' . $acct . '/' . $post->getNid()); + } + + private function acctOf(?Person $actor): string { + if ($actor === null) { + return ''; + } + + return ($actor->getAccount() !== '') ? $actor->getAccount() : $actor->getPreferredUsername(); + } + + private function appLink(string $path): string { + return rtrim($this->urlGenerator->linkToRouteAbsolute('social.Navigation.navigate'), '/') . '/' . $path; + } + /** * Who acted. * diff --git a/tests/Controller/ApiControllerTest.php b/tests/Controller/ApiControllerTest.php index 2b40d8d0b..3ead3f587 100644 --- a/tests/Controller/ApiControllerTest.php +++ b/tests/Controller/ApiControllerTest.php @@ -53,6 +53,7 @@ use OCA\Social\Service\HashtagService; use OCA\Social\Service\InstanceService; use OCA\Social\Service\MarkerService; +use OCA\Social\Service\NotificationService; use OCA\Social\Service\PinService; use OCA\Social\Service\PlaceService; use OCA\Social\Service\PollService; @@ -138,6 +139,7 @@ class ApiControllerTest extends TestCase { private EmojiService|MockObject $emojiService; private PlaceService|MockObject $placeService; private DeliveryService|MockObject $deliveryService; + private NotificationService|MockObject $notificationService; private IAppManager|MockObject $appManager; private FediverseService|MockObject $fediverseService; @@ -243,6 +245,7 @@ protected function setUp(): void { $this->emojiService = $this->createMock(EmojiService::class); $this->placeService = $this->createMock(PlaceService::class); $this->deliveryService = $this->createMock(DeliveryService::class); + $this->notificationService = $this->createMock(NotificationService::class); $this->appManager = $this->createMock(IAppManager::class); $this->fediverseService = $this->createMock(FediverseService::class); $this->fediverseService->method('getAccessType')->willReturnCallback(fn (): string => $this->accessType); @@ -334,7 +337,8 @@ private function controllerWithHeaders( $this->appManager, $this->fediverseService, $this->placeService, - $this->deliveryService + $this->deliveryService, + $this->notificationService ); } diff --git a/tests/Notification/NotifierSubjectsTest.php b/tests/Notification/NotifierSubjectsTest.php index e56b11471..bbc3f0081 100644 --- a/tests/Notification/NotifierSubjectsTest.php +++ b/tests/Notification/NotifierSubjectsTest.php @@ -166,6 +166,7 @@ public function testNothingButAWebUrlBecomesTheIcon(string $avatar): void { public function testASubjectNothingRaisesIsStillRejected(): void { $this->expectException(\InvalidArgumentException::class); - $this->notifier->prepare($this->notification('poll', $this->params()), 'en'); + // `severed_relationships` reaches the client API but no bell is raised for it + $this->notifier->prepare($this->notification('severed_relationships', $this->params()), 'en'); } } diff --git a/tests/Notification/NotifierTest.php b/tests/Notification/NotifierTest.php index 5168bcd99..eee3f3d13 100644 --- a/tests/Notification/NotifierTest.php +++ b/tests/Notification/NotifierTest.php @@ -145,6 +145,86 @@ private function reportNotification(array $params): INotification { return $notification; } + /** @return INotification&MockObject with the actions it was given captured */ + private function notificationWith(string $subject, array $params, array &$actions): INotification { + $notification = $this->createMock(INotification::class); + $notification->method('getApp')->willReturn('social'); + $notification->method('getSubject')->willReturn($subject); + $notification->method('getSubjectParameters')->willReturn($params); + $notification->method('setIcon')->willReturnSelf(); + $notification->method('setLink')->willReturnSelf(); + $notification->method('setParsedSubject')->willReturnSelf(); + $notification->method('setParsedMessage')->willReturnSelf(); + $notification->method('createAction')->willReturnCallback(function () use (&$actions): IAction { + $index = count($actions); + $actions[$index] = ['label' => '', 'link' => '', 'method' => '', 'primary' => false]; + $action = $this->createMock(IAction::class); + $action->method('setLabel')->willReturnSelf(); + $action->method('setParsedLabel')->willReturnCallback(function (string $label) use (&$actions, $index, $action): IAction { + $actions[$index]['label'] = $label; + return $action; + }); + $action->method('setPrimary')->willReturnCallback(function (bool $primary) use (&$actions, $index, $action): IAction { + $actions[$index]['primary'] = $primary; + return $action; + }); + $action->method('setLink')->willReturnCallback(function (string $link, string $method) use (&$actions, $index, $action): IAction { + $actions[$index]['link'] = $link; + $actions[$index]['method'] = $method; + return $action; + }); + return $action; + }); + $notification->method('addAction')->willReturnSelf(); + + return $notification; + } + + /** + * A follow request is answered where it is seen: Accept and Decline on the + * bell entry, POSTing to the routes a Mastodon client uses for the same. + */ + public function testAFollowRequestOffersAcceptAndDecline(): void { + $this->translationsFor('en'); + $this->urlGenerator->method('linkToRouteAbsolute')->willReturnCallback( + fn (string $route, array $params = []): string => 'https://cloud.example/' . $route . '/' . ($params['id'] ?? '') + ); + $actions = []; + $notification = $this->notificationWith('follow_request', ['account' => 'Bob', 'link' => 'https://cloud.example/apps/social/@bob', 'nid' => 42], $actions); + $notification->expects($this->exactly(2))->method('addAction'); + + $this->notifier->prepare($notification, 'en'); + + $this->assertSame( + [ + ['label' => '[en] Accept', 'link' => 'https://cloud.example/social.Api.followRequestAuthorize/42', 'method' => 'POST', 'primary' => true], + ['label' => '[en] Decline', 'link' => 'https://cloud.example/social.Api.followRequestReject/42', 'method' => 'POST', 'primary' => false], + ], + $actions + ); + } + + public function testAFollowRequestWithoutAKnownFollowerOffersNothingToClick(): void { + $this->translationsFor('en'); + $actions = []; + $notification = $this->notificationWith('follow_request', ['account' => 'Bob', 'link' => ''], $actions); + $notification->expects($this->never())->method('addAction'); + + $this->notifier->prepare($notification, 'en'); + } + + public function testAClosedPollAndASubscribedPostAreWorded(): void { + $this->translationsFor('en'); + $actions = []; + foreach (['poll' => '[en] The poll by Bob has ended', 'status' => '[en] Bob posted'] as $subject => $expected) { + $notification = $this->notificationWith($subject, ['account' => 'Bob', 'link' => 'https://cloud.example/apps/social/@bob/9'], $actions); + $notification->expects($this->once())->method('setParsedSubject')->with($expected); + $notification->expects($this->once())->method('setLink')->with('https://cloud.example/apps/social/@bob/9'); + + $this->notifier->prepare($notification, 'en'); + } + } + public function testANewLocalReportLinksToTheAdminSettings(): void { $this->translationsFor('en'); $this->urlGenerator->method('linkToRouteAbsolute') diff --git a/tests/Service/NotificationServiceTest.php b/tests/Service/NotificationServiceTest.php index a2e9e08e0..4f975561c 100644 --- a/tests/Service/NotificationServiceTest.php +++ b/tests/Service/NotificationServiceTest.php @@ -36,6 +36,7 @@ use OCA\Social\Service\NotificationService; use OCA\Social\Service\StreamService; use OCA\Social\Tests\Model\TActivityPubMocks; +use OCP\IURLGenerator; use OCP\Notification\IManager as INotificationManager; use OCP\Notification\INotification; use PHPUnit\Framework\MockObject\MockObject; @@ -144,6 +145,7 @@ protected function setUp(): void { } $bob = $this->person($id, ''); + $bob->setNid(42); $bob->setName('Bob'); $bob->setAccount('bob@remote.example'); $bob->setAvatar('https://remote.example/avatars/bob.png'); @@ -191,10 +193,21 @@ protected function setUp(): void { $this->actionsRequest, $this->accountRelationService, $this->notificationManager, - new NullLogger() + new NullLogger(), + $this->urlGenerator() ); } + /** The app is served at cloud.example/apps/social/, which every bell link points into. */ + private function urlGenerator(): IURLGenerator { + $urlGenerator = $this->createMock(IURLGenerator::class); + $urlGenerator->method('linkToRouteAbsolute')->willReturnCallback( + fn (string $route): string => ($route === 'social.Navigation.navigate') ? 'https://cloud.example/apps/social/' : 'https://cloud.example/' . $route + ); + + return $urlGenerator; + } + protected function tearDown(): void { AP::set(null); } @@ -297,7 +310,8 @@ public function testAMentionTellsTheMentionedUser(): void { $this->assertSame('alice', $this->raised[0]['user']); $this->assertSame('mention', $this->raised[0]['subject']); $this->assertSame('Bob', $this->raised[0]['parameters']['account']); - $this->assertSame(self::POST, $this->raised[0]['parameters']['link']); + // into this app's page for the post, not out to the remote object + $this->assertSame('https://cloud.example/apps/social/@bob@remote.example/90', $this->raised[0]['parameters']['link']); $this->assertSame( 'https://remote.example/avatars/bob.png', $this->raised[0]['parameters']['avatar'] ); @@ -332,14 +346,55 @@ public function testAFollowTellsTheFollowedUserAndLinksToTheProfile(): void { $this->assertCount(1, $this->raised); $this->assertSame('follow', $this->raised[0]['subject']); - $this->assertSame(self::BOB, $this->raised[0]['parameters']['link']); + $this->assertSame('https://cloud.example/apps/social/@bob@remote.example', $this->raised[0]['parameters']['link']); } - public function testAFollowRequestIsItsOwnSubject(): void { + public function testAFollowRequestIsItsOwnSubjectAndNamesWhoToAnswer(): void { $this->service->onNotification($this->row(Follow::TYPE_REQUEST, self::ALICE, self::BOB)); $this->assertCount(1, $this->raised); $this->assertSame('follow_request', $this->raised[0]['subject']); + // the follower's id, which the Accept and Decline actions POST with + $this->assertSame(42, $this->raised[0]['parameters']['nid']); + } + + public function testAPostWhoseAuthorIsNotCachedLinksToTheObjectItself(): void { + // a post this instance cannot name a page for: the remote address is + // better than a broken one + $this->service->onNotification($this->row(Like::TYPE, self::ALICE, self::BOB)->setObjectId('https://elsewhere.example/p/1')); + + $this->assertSame('https://elsewhere.example/p/1', $this->raised[0]['parameters']['link']); + } + + public function testAClosedPollTellsItsVotersAndItsAuthor(): void { + // the author is the actor and the recipient at once: their own poll + // closing is news to them, which is also who Mastodon tells + $this->local[self::BOB] = 'bob'; + $this->service->onNotification($this->row(Stream::SUBTYPE_POLL, self::BOB, self::BOB)); + + $this->assertCount(1, $this->raised); + $this->assertSame('poll', $this->raised[0]['subject']); + $this->assertSame('bob', $this->raised[0]['user']); + } + + public function testAPostFromASubscribedAccountRingsTheBell(): void { + $this->service->onNotification($this->row(Stream::SUBTYPE_STATUS, self::ALICE, self::BOB)); + + $this->assertCount(1, $this->raised); + $this->assertSame('status', $this->raised[0]['subject']); + $this->assertSame('https://cloud.example/apps/social/@bob@remote.example/90', $this->raised[0]['parameters']['link']); + } + + public function testAnsweringAFollowRequestTakesItsBellEntryDown(): void { + $request = $this->row(Follow::TYPE_REQUEST, self::ALICE, self::BOB, 12); + $other = $this->row(Like::TYPE, self::ALICE, self::BOB, 11); + $this->timeline = [$request, $other]; + + $this->service->onFollowRequestAnswered($this->person(self::ALICE, 'alice'), self::BOB); + + $this->assertSame([[$request->getId(), SocialAppNotification::TYPE]], $this->deleted); + $this->assertCount(1, $this->withdrawn); + $this->assertSame([$other], $this->timeline, 'the like stays'); } public function testNobodyIsToldAboutTheirOwnAction(): void { From 8fdcbc2c501148ae1a8d1c8b0643d24490b0311c Mon Sep 17 00:00:00 2001 From: Frank Karlitschek Date: Mon, 14 Sep 2026 09:09:22 +0200 Subject: [PATCH 2/2] 0.19.41, rebuilt bundle Signed-off-by: Frank Karlitschek Co-Authored-By: Claude Fable 5.1 --- appinfo/info.xml | 2 +- composer.json | 2 +- js/social-social.js | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/appinfo/info.xml b/appinfo/info.xml index e821e90d8..ab7a33b52 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -31,7 +31,7 @@ What it does: - 👋 A short introduction on the first visit: your address, who to follow, and a way to bring the follows you already have You can pin your own posts to the top of your profile, bookmark any post, and see which hashtags the instance is using most. This is a partial implementation of ActivityPub and of the Mastodon client API. Blocking, muting and reporting (with a moderation panel in the administration settings) are supported, as are locked accounts with approvable follow requests. Polls are fully supported: create your own, and view and vote on federated ones. Profiles carry an avatar, a banner image and up to four profile metadata fields. Posts that link somewhere get a link preview card. Image (JPEG, PNG, GIF, WebP, AVIF, and HEIC from an iPhone where the server can read it), video (MP4, WebM, QuickTime) and audio attachments are supported, up to ten per post, each with alt text and a focal point. It does not offer lists.]]> - 0.19.40 + 0.19.41 agpl Benedikt Schächner Social diff --git a/composer.json b/composer.json index 489dd35dc..8307b4d99 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "nextcloud/social", "description": "Social app", "license": "AGPL-3.0-or-later", - "version": "0.19.40", + "version": "0.19.41", "minimum-stability": "stable", "authors": [ { diff --git a/js/social-social.js b/js/social-social.js index 22437829b..428303f69 100644 --- a/js/social-social.js +++ b/js/social-social.js @@ -1,3 +1,3 @@ /*! For license information please see social-social.js.LICENSE.txt */ -(()=>{"use strict";var e={43758(e,t,n){var a=n(20641),i=n(90033),o=n(33564);const r={name:"ArrowRightIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},s=["aria-hidden","aria-label"],l=["fill","width","height"],c={d:"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z"},d={key:0};const p=(0,o._)(r,[["render",function(e,t,n,o,r,p){return(0,a.uX)(),(0,a.CE)("span",(0,a.v6)(e.$attrs,{"aria-hidden":n.title?null:"true","aria-label":n.title,class:"material-design-icon arrow-right-icon",role:"img",onClick:t[0]||(t[0]=t=>e.$emit("click",t))}),[((0,a.uX)(),(0,a.CE)("svg",{fill:n.fillColor,class:"material-design-icon__svg",width:n.size,height:n.size,viewBox:"0 0 24 24"},[(0,a.Lk)("path",c,[n.title?((0,a.uX)(),(0,a.CE)("title",d,(0,i.v_)(n.title),1)):(0,a.Q3)("",!0)])],8,l))],16,s)}]]);n.d(t,["I",0,p])},83958(e,t,n){var a=n(20641),i=n(90033),o=n(33564);const r={name:"ChevronDownIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},s=["aria-hidden","aria-label"],l=["fill","width","height"],c={d:"M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z"},d={key:0};const p=(0,o._)(r,[["render",function(e,t,n,o,r,p){return(0,a.uX)(),(0,a.CE)("span",(0,a.v6)(e.$attrs,{"aria-hidden":n.title?null:"true","aria-label":n.title,class:"material-design-icon chevron-down-icon",role:"img",onClick:t[0]||(t[0]=t=>e.$emit("click",t))}),[((0,a.uX)(),(0,a.CE)("svg",{fill:n.fillColor,class:"material-design-icon__svg",width:n.size,height:n.size,viewBox:"0 0 24 24"},[(0,a.Lk)("path",c,[n.title?((0,a.uX)(),(0,a.CE)("title",d,(0,i.v_)(n.title),1)):(0,a.Q3)("",!0)])],8,l))],16,s)}]]);n.d(t,["C",0,p])},14165(e,t,n){var a=n(20641),i=n(90033),o=n(33564);const r={name:"ChevronUpIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},s=["aria-hidden","aria-label"],l=["fill","width","height"],c={d:"M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z"},d={key:0};const p=(0,o._)(r,[["render",function(e,t,n,o,r,p){return(0,a.uX)(),(0,a.CE)("span",(0,a.v6)(e.$attrs,{"aria-hidden":n.title?null:"true","aria-label":n.title,class:"material-design-icon chevron-up-icon",role:"img",onClick:t[0]||(t[0]=t=>e.$emit("click",t))}),[((0,a.uX)(),(0,a.CE)("svg",{fill:n.fillColor,class:"material-design-icon__svg",width:n.size,height:n.size,viewBox:"0 0 24 24"},[(0,a.Lk)("path",c,[n.title?((0,a.uX)(),(0,a.CE)("title",d,(0,i.v_)(n.title),1)):(0,a.Q3)("",!0)])],8,l))],16,s)}]]);n.d(t,["C",0,p])},79859(e,t,n){var a=n(20641),i=n(90033),o=n(33564);const r={name:"CloseIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},s=["aria-hidden","aria-label"],l=["fill","width","height"],c={d:"M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"},d={key:0};const p=(0,o._)(r,[["render",function(e,t,n,o,r,p){return(0,a.uX)(),(0,a.CE)("span",(0,a.v6)(e.$attrs,{"aria-hidden":n.title?null:"true","aria-label":n.title,class:"material-design-icon close-icon",role:"img",onClick:t[0]||(t[0]=t=>e.$emit("click",t))}),[((0,a.uX)(),(0,a.CE)("svg",{fill:n.fillColor,class:"material-design-icon__svg",width:n.size,height:n.size,viewBox:"0 0 24 24"},[(0,a.Lk)("path",c,[n.title?((0,a.uX)(),(0,a.CE)("title",d,(0,i.v_)(n.title),1)):(0,a.Q3)("",!0)])],8,l))],16,s)}]]);n.d(t,["I",0,p])},69052(e,t,n){n(40276);var a=n(80474),i=n(26158),o=n(24239),r=n(83868),s=n(54540),l=n(20641),c=n(50953),d=n(53751),p=n(90033),u=n(70711),A=n(12793),h=n(50979),v=n(50744),m=n(20720),f=n(33564),g=n(44783),C=n(54949),b=n(60701);n(78600);(0,h.r)(h.H);const _=(0,l.pM)({__name:"NcAppContentDetailsToggle",setup(e){const t=(0,A.al)();function n(e=!0){const t=document.querySelector(".app-navigation .app-navigation-toggle");t&&(t.style.display=e?"none":"",!0===e&&(0,o.Ic)("toggle-navigation",{open:!1}))}return(0,l.wB)(t,n),(0,l.sV)(()=>{n(t.value)}),(0,l.xo)(()=>{t.value&&n(!1)}),(e,n)=>((0,l.uX)(),(0,l.Wv)((0,c.R1)(v.N),{"aria-label":(0,c.R1)(h.a)("Go back to the list"),class:(0,p.C4)(["app-details-toggle",{"app-details-toggle--mobile":(0,c.R1)(t)}]),title:(0,c.R1)(h.a)("Go back to the list"),variant:"tertiary"},{icon:(0,l.k6)(()=>[(0,l.bF)((0,c.R1)(m.N),{directional:"",path:(0,c.R1)(u.m)},null,8,["path"])]),_:1},8,["aria-label","class","title"]))}}),y=(0,f._)(_,[["__scopeId","data-v-a28923a1"]]),x=(0,a.c0)("nextcloud").persist().build(),w=(0,i.F)().theming?.name??"Nextcloud",E={name:"NcAppContent",components:{NcAppContentDetailsToggle:y,Pane:s.Z,Splitpanes:s.S},props:{disableSwipe:{type:Boolean,default:!1},listSize:{type:Number,default:20},listMinWidth:{type:Number,default:15},listMaxWidth:{type:Number,default:40},paneConfigKey:{type:String,default:""},showDetails:{type:Boolean,default:!0},layout:{type:String,default:"vertical-split",validator:e=>["no-split","vertical-split","horizontal-split"].includes(e)},pageHeading:{type:String,default:null},pageTitle:{type:String,default:null}},emits:["update:showDetails","resizeList"],setup:()=>({appName:(0,g.a)(),localizedAppName:(0,g.u)(),isMobile:(0,A.al)(),isRtl:b.i}),data(){return{contentHeight:0,swiping:{},listPaneSize:this.restorePaneConfig()}},computed:{paneConfigID(){if(""!==this.paneConfigKey)return`pane-list-size-${this.paneConfigKey}`;try{return`pane-list-size-${this.appName}`}catch{return C.l.info("[NcAppContent]: falling back to global nextcloud pane config"),"pane-list-size-nextcloud"}},detailsPaneSize(){return this.listPaneSize?100-this.listPaneSize:this.paneDefaults.details.size},paneDefaults(){return{list:{size:this.listSize,min:this.listMinWidth,max:this.listMaxWidth},details:{size:100-this.listSize,min:100-this.listMaxWidth,max:100-this.listMinWidth}}},realPageTitle(){const e=new Set;if(this.pageTitle)for(const t of this.pageTitle.split(" - "))e.add(t);else{if(!this.pageHeading)return null;for(const t of this.pageHeading.split(" - "))e.add(t);e.size>0&&e.add(this.localizedAppName)}return e.add(w),[...e.values()].join(" - ")}},watch:{realPageTitle:{immediate:!0,handler(){null!==this.realPageTitle&&(document.title=this.realPageTitle)}},paneConfigKey:{immediate:!0,handler(){this.restorePaneConfig()}}},mounted(){this.disableSwipe||(this.swiping=(0,r.o__)(this.$el,{onSwipeEnd:this.handleSwipe})),this.restorePaneConfig()},methods:{handleSwipe(e,t){Math.abs(this.swiping.lengthX)>70&&(this.swiping.coordsStart.x<150&&"right"===t?(0,o.Ic)("toggle-navigation",{open:!0}):this.swiping.coordsStart.x<450&&"left"===t&&(0,o.Ic)("toggle-navigation",{open:!1}))},handlePaneResize(e){const t=parseInt(e.panes[0].size,10);x.setItem(this.paneConfigID,JSON.stringify(t)),this.listPaneSize=t,this.$emit("resizeList",{size:t}),C.l.debug("[NcAppContent] pane config",{listPaneSize:t})},restorePaneConfig(){const e=parseInt(x.getItem(this.paneConfigID),10);if(!isNaN(e)&&e!==this.listPaneSize)return C.l.debug("[NcAppContent] pane config",{listPaneSize:e}),this.listPaneSize=e,e},hideDetails(){this.$emit("update:showDetails",!1)}}},k={key:0,class:"hidden-visually"},B={class:"app-content-wrapper__list"},S={key:1,class:"app-content-wrapper"};const D=(0,f._)(E,[["render",function(e,t,n,a,i,o){const r=(0,l.g2)("NcAppContentDetailsToggle"),s=(0,l.g2)("Pane"),c=(0,l.g2)("Splitpanes");return(0,l.uX)(),(0,l.CE)("main",{id:"app-content-vue",class:(0,p.C4)(["app-content no-snapper",{"app-content--has-list":!!e.$slots.list}])},[n.pageHeading?((0,l.uX)(),(0,l.CE)("h1",k,(0,p.v_)(n.pageHeading),1)):(0,l.Q3)("",!0),e.$slots.list?((0,l.uX)(),(0,l.CE)(l.FK,{key:1},[a.isMobile||"no-split"===n.layout?((0,l.uX)(),(0,l.CE)("div",{key:0,class:(0,p.C4)(["app-content-wrapper app-content-wrapper--no-split",{"app-content-wrapper--show-details":n.showDetails,"app-content-wrapper--show-list":!n.showDetails,"app-content-wrapper--mobile":a.isMobile}])},[n.showDetails?((0,l.uX)(),(0,l.Wv)(r,{key:0,onClick:(0,d.D$)(o.hideDetails,["stop","prevent"])},null,8,["onClick"])):(0,l.Q3)("",!0),(0,l.bo)((0,l.Lk)("div",B,[(0,l.RG)(e.$slots,"list",{},void 0,!0)],512),[[d.aG,!n.showDetails]]),n.showDetails?(0,l.RG)(e.$slots,"default",{},void 0,!0,1):(0,l.Q3)("",!0)],2)):"vertical-split"===n.layout||"horizontal-split"===n.layout?((0,l.uX)(),(0,l.CE)("div",S,[(0,l.bF)(c,{horizontal:"horizontal-split"===n.layout,class:(0,p.C4)(["default-theme",{"splitpanes--horizontal":"horizontal-split"===n.layout,"splitpanes--vertical":"vertical-split"===n.layout}]),rtl:a.isRtl,onResized:o.handlePaneResize},{default:(0,l.k6)(()=>[(0,l.bF)(s,{class:"splitpanes__pane-list",size:i.listPaneSize||o.paneDefaults.list.size,minSize:o.paneDefaults.list.min,maxSize:o.paneDefaults.list.max},{default:(0,l.k6)(()=>[(0,l.RG)(e.$slots,"list",{},void 0,!0)]),_:3},8,["size","minSize","maxSize"]),(0,l.bF)(s,{class:"splitpanes__pane-details",size:o.detailsPaneSize,minSize:o.paneDefaults.details.min,maxSize:o.paneDefaults.details.max},{default:(0,l.k6)(()=>[(0,l.RG)(e.$slots,"default",{},void 0,!0)]),_:3},8,["size","minSize","maxSize"])]),_:3},8,["horizontal","class","rtl","onResized"])])):(0,l.Q3)("",!0)],64)):(0,l.Q3)("",!0),e.$slots.list?(0,l.Q3)("",!0):(0,l.RG)(e.$slots,"default",{},void 0,!0,2)],2)}],["__scopeId","data-v-51427d61"]]);n.d(t,["N",0,D])},5019(e,t,n){n(70257);var a=n(20641),i=n(50953),o=n(53751),r=n(90033),s=n(24239),l=n(52697),c=n(53411),d=n(70711),p=n(20720),u=n(50979),A=n(50744),h=n(33564),v=n(12793),m=n(90766),f=n(49784),g=n(11122);(0,u.r)(u.Q);const C={class:"app-navigation-toggle-wrapper"},b=(0,a.pM)({__name:"NcAppNavigationToggle",props:{open:{type:Boolean,required:!0},openModifiers:{}},emits:["update:open"],setup(e){const t=(0,a.fn)(e,"open"),n=(0,a.EW)(()=>t.value?(0,u.a)("Close navigation"):(0,u.a)("Open navigation"));return(e,o)=>((0,a.uX)(),(0,a.CE)("div",C,[(0,a.bF)((0,i.R1)(A.N),{class:"app-navigation-toggle","aria-controls":"app-navigation-vue","aria-expanded":t.value?"true":"false","aria-label":n.value,title:n.value,variant:"tertiary",onClick:o[0]||(o[0]=e=>t.value=!t.value)},{icon:(0,a.k6)(()=>[(0,a.bF)(p.N,{path:(0,i.R1)(d.D),directional:""},null,8,["path"])]),_:1},8,["aria-expanded","aria-label","title"])]))}}),_=(0,h._)(b,[["__scopeId","data-v-e8177cc7"]]),y=["aria-hidden","aria-label","aria-labelledby","inert"],x={class:"app-navigation__search"},w=(0,a.pM)({__name:"NcAppNavigation",props:{ariaLabel:{},ariaLabelledby:{}},setup(e){const t=e;let n;const d=(0,a.WQ)(g.H,()=>(0,a.R8)("NcAppNavigation is not mounted inside NcContent, this is probably an error."),!1),p=(0,a.rk)("appNavigationContainer"),u=(0,v.al)(),A=(0,i.KR)(!u.value),h=(0,a.EW)(()=>u.value&&A.value);function C(e){if(A.value===e)return void(0,s.Ic)("navigation-toggled",{open:A.value});A.value=void 0===e?!A.value:e;const t=getComputedStyle(document.body),n=parseInt(t.getPropertyValue("--animation-slow"))||200;setTimeout(()=>{(0,s.Ic)("navigation-toggled",{open:A.value})},1.5*n)}function b({open:e}){return C(e)}function w(){h.value?n.activate():n.deactivate()}function E(){u.value&&C(!1)}return(0,a.nT)(()=>{t.ariaLabel||t.ariaLabelledby||(0,a.R8)("NcAppNavigation requires either `ariaLabel` or `ariaLabelledby` to be set for accessibility.")}),(0,a.wB)(u,()=>{A.value=!u.value}),(0,a.wB)(h,()=>{w()}),(0,a.sV)(()=>{d(!0),(0,s.B1)("toggle-navigation",b),(0,s.Ic)("navigation-toggled",{open:A.value}),n=(0,l.K)(p.value,{allowOutsideClick:!0,clickOutsideDeactivates:()=>(u.value&&(n.deactivate({returnFocus:!1}),C(!1)),!1),fallbackFocus:p.value,trapStack:(0,m.g)(),escapeDeactivates:!1}),w()}),(0,a.hi)(()=>{d(!1),(0,s.al)("toggle-navigation",b),n.deactivate()}),(t,n)=>((0,a.uX)(),(0,a.CE)("div",{ref:"appNavigationContainer",class:(0,r.C4)(["app-navigation",{"app-navigation--closed":!A.value,"app-navigation--legacy":(0,i.R1)(f.i)}])},[(0,a.Lk)("nav",{id:"app-navigation-vue","aria-hidden":A.value?"false":"true","aria-label":e.ariaLabel||void 0,"aria-labelledby":e.ariaLabelledby||void 0,class:"app-navigation__content",inert:!A.value||void 0,onKeydown:(0,o.jR)(E,["esc"])},[(0,a.Lk)("div",x,[(0,a.RG)(t.$slots,"search",{},void 0,!0)]),(0,a.Lk)("div",{class:(0,r.C4)(["app-navigation__body",{"app-navigation__body--no-list":!t.$slots.list}])},[(0,a.RG)(t.$slots,"default",{},void 0,!0)],2),t.$slots.list?((0,a.uX)(),(0,a.Wv)(c.N,{key:0,class:"app-navigation__list"},{default:(0,a.k6)(()=>[(0,a.RG)(t.$slots,"list",{},void 0,!0)]),_:3})):(0,a.Q3)("",!0),(0,a.RG)(t.$slots,"footer",{},void 0,!0)],40,y),(0,a.bF)(_,{open:A.value,"onUpdate:open":C},null,8,["open"])],2))}}),E=(0,h._)(w,[["__scopeId","data-v-37908cd4"]]);n.d(t,["N",0,E])},74795(e,t,n){n(90023);var a=n(10925),i=n(20641),o=n(90033),r=n(33564);const s={name:"NcAppNavigationCaption",components:{NcActions:a.N},props:{name:{type:String,required:!0},headingId:{type:String,default:null},isHeading:{type:Boolean,default:!1},headingLevel:{type:Number,default:2},...a.N.props},computed:{actionsProps(){const e=Object.keys(a.N.props),t=Object.entries(this.$props).filter(([t,n])=>e.includes(t));return Object.fromEntries(t)},wrapperTag(){return this.isHeading?"div":"li"},captionTag(){const e=Math.max(2,this.headingLevel);return this.isHeading?`h${e}`:"span"}}},l={key:0,class:"app-navigation-caption__actions"};const c=(0,r._)(s,[["render",function(e,t,n,a,r,s){const c=(0,i.g2)("NcActions");return(0,i.uX)(),(0,i.Wv)((0,i.$y)(s.wrapperTag),{class:(0,o.C4)(["app-navigation-caption",{"app-navigation-caption--heading":n.isHeading}])},{default:(0,i.k6)(()=>[((0,i.uX)(),(0,i.Wv)((0,i.$y)(s.captionTag),{id:n.headingId,class:"app-navigation-caption__name"},{default:(0,i.k6)(()=>[(0,i.eW)((0,o.v_)(n.name),1)]),_:1},8,["id"])),e.$slots.actions?((0,i.uX)(),(0,i.CE)("div",l,[(0,i.bF)(c,(0,o._B)((0,i.Ng)(s.actionsProps)),{icon:(0,i.k6)(()=>[(0,i.RG)(e.$slots,"actionsTriggerIcon",{},void 0,!0)]),default:(0,i.k6)(()=>[(0,i.RG)(e.$slots,"actions",{},void 0,!0)]),_:3},16)])):(0,i.Q3)("",!0)]),_:3},8,["class"])}],["__scopeId","data-v-f0e411c2"]]);n.d(t,["N",0,c])},96070(e,t,n){n(6888);var a=n(24239),i=n(20641),o=n(53751),r=n(90033),s=n(33564),l=n(83958),c=n(14165),d=n(50979),p=n(49784),u=n(50744),A=n(62754),h=n(12793),v=n(5116),m=n(47178),f=n(10925),g=n(29175),C=n(82108);const b={name:"PencilIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},_=["aria-hidden","aria-label"],y=["fill","width","height"],x={d:"M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"},w={key:0};const E=(0,s._)(b,[["render",function(e,t,n,a,o,s){return(0,i.uX)(),(0,i.CE)("span",(0,i.v6)(e.$attrs,{"aria-hidden":n.title?null:"true","aria-label":n.title,class:"material-design-icon pencil-icon",role:"img",onClick:t[0]||(t[0]=t=>e.$emit("click",t))}),[((0,i.uX)(),(0,i.CE)("svg",{fill:n.fillColor,class:"material-design-icon__svg",width:n.size,height:n.size,viewBox:"0 0 24 24"},[(0,i.Lk)("path",x,[n.title?((0,i.uX)(),(0,i.CE)("title",w,(0,r.v_)(n.title),1)):(0,i.Q3)("",!0)])],8,y))],16,_)}]]),k={name:"UndoIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},B=["aria-hidden","aria-label"],S=["fill","width","height"],D={d:"M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z"},N={key:0};const z=(0,s._)(k,[["render",function(e,t,n,a,o,s){return(0,i.uX)(),(0,i.CE)("span",(0,i.v6)(e.$attrs,{"aria-hidden":n.title?null:"true","aria-label":n.title,class:"material-design-icon undo-icon",role:"img",onClick:t[0]||(t[0]=t=>e.$emit("click",t))}),[((0,i.uX)(),(0,i.CE)("svg",{fill:n.fillColor,class:"material-design-icon__svg",width:n.size,height:n.size,viewBox:"0 0 24 24"},[(0,i.Lk)("path",D,[n.title?((0,i.uX)(),(0,i.CE)("title",N,(0,r.v_)(n.title),1)):(0,i.Q3)("",!0)])],8,S))],16,B)}]]);(0,d.r)(d.O);const L={name:"NcAppNavigationIconCollapsible",components:{NcButton:u.N,ChevronDown:l.C,ChevronUp:c.C},props:{open:{type:Boolean,required:!0},active:{type:Boolean,required:!0}},emits:["click"],setup:()=>({isLegacy34:p.i}),computed:{labelButton(){return this.open?(0,d.a)("Collapse menu"):(0,d.a)("Open menu")}},methods:{onClick(e){this.$emit("click",e)}}};const P=(0,s._)(L,[["render",function(e,t,n,a,o,s){const l=(0,i.g2)("ChevronUp"),c=(0,i.g2)("ChevronDown"),d=(0,i.g2)("NcButton");return(0,i.uX)(),(0,i.Wv)(d,{class:(0,r.C4)(["icon-collapse",{"icon-collapse--active":n.active,"icon-collapse--open":n.open}]),"aria-label":s.labelButton,variant:n.active&&a.isLegacy34?"tertiary-on-primary":"tertiary",onClick:s.onClick},{icon:(0,i.k6)(()=>[n.open?((0,i.uX)(),(0,i.Wv)(l,{key:0,size:20})):((0,i.uX)(),(0,i.Wv)(c,{key:1,size:20}))]),_:1},8,["class","aria-label","variant","onClick"])}],["__scopeId","data-v-cfbd3794"]]);(0,d.r)(d.P,d.b);const I={name:"NcAppNavigationItem",components:{NcActions:f.N,NcActionButton:m.N,NcAppNavigationIconCollapsible:P,NcInputConfirmCancel:A.N,NcLoadingIcon:g.N,NcVNodes:C._,Pencil:E,Undo:z},props:{active:{type:Boolean,default:!1},name:{type:String,required:!0},title:{type:String,default:null},id:{type:String,default:()=>(0,v.c)(),validator:e=>""!==e.trim()},icon:{type:String,default:""},loading:{type:Boolean,default:!1},to:{type:[String,Object],default:null},href:{type:String,default:null},allowCollapse:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},editLabel:{type:String,default:""},editPlaceholder:{type:String,default:""},pinned:{type:Boolean,default:!1},undo:{type:Boolean,default:!1},open:{type:Boolean,default:!1},menuOpen:{type:Boolean,default:!1},forceMenu:{type:Boolean,default:!1},menuIcon:{type:String,default:void 0},menuPlacement:{type:String,default:"bottom"},ariaDescription:{type:String,default:null},forceDisplayActions:{type:Boolean,default:!1},inlineActions:{type:Number,default:0}},emits:["update:menuOpen","update:open","update:name","click","undo"],setup:()=>({isMobile:(0,h.al)(),isLegacy34:p.i}),data(){return{actionsBoundariesElement:void 0,editingValue:"",opened:this.open,editingActive:!1,menuOpenLocalValue:!1,focused:!1}},computed:{isRouterLink(){return this.to&&!this.href},canHaveChildren(){return"AppNavigationItem"!==this.$parent.$options._componentTag},editButtonAriaLabel(){return this.editLabel?this.editLabel:(0,d.a)("Edit item")},undoButtonAriaLabel:()=>(0,d.a)("Undo changes")},watch:{open(e){this.opened=e}},mounted(){this.actionsBoundariesElement=document.querySelector("#content-vue")||void 0},methods:{onMenuToggle(e){this.$emit("update:menuOpen",e),this.menuOpenLocalValue=e},toggleCollapse(){this.opened=!this.opened,this.$emit("update:open",this.opened)},onClick(e,t,n){this.$emit("click",e),e.metaKey||e.altKey||e.ctrlKey||e.shiftKey||n&&(t?.(e),e.preventDefault(),this.isMobile&&(0,a.Ic)("toggle-navigation",{open:!1}))},handleEdit(){this.editingValue=this.name,this.editingActive=!0,this.onMenuToggle(!1),this.$nextTick(()=>{this.$refs.editingInput.focusInput()})},cancelEditing(){this.editingActive=!1},handleEditingDone(){this.$emit("update:name",this.editingValue),this.editingValue="",this.editingActive=!1},handleUndo(){this.$emit("undo")},handleFocus(){this.focused=!0},handleBlur(){this.focused=!1},handleTab(e){if(this.editingActive)return;const t=this.$el?.querySelector(".app-navigation-entry__utils");if(!t)return;const n=t.querySelector("button");this.focused&&n&&(e.preventDefault(),n.focus(),this.focused=!1)},isExternal:e=>e&&e.match(/[a-z]+:\/\//i)}},F=["id"],j=["aria-current","aria-description","aria-expanded","href","target","title","onClick"],T={key:0,class:"editingContainer"},X={key:1,class:"app-navigation-entry__deleted"},G={class:"app-navigation-entry__deleted-description"},M={key:0,class:"app-navigation-entry__counter-wrapper"},H={key:0,class:"app-navigation-entry__children"};const $=(0,s._)(I,[["render",function(e,t,n,a,s,l){const c=(0,i.g2)("NcLoadingIcon"),d=(0,i.g2)("NcInputConfirmCancel"),p=(0,i.g2)("Pencil"),u=(0,i.g2)("NcActionButton"),A=(0,i.g2)("Undo"),h=(0,i.g2)("NcActions"),v=(0,i.g2)("NcAppNavigationIconCollapsible");return(0,i.uX)(),(0,i.CE)("li",{id:n.id,class:(0,r.C4)([{"app-navigation-entry--opened":s.opened,"app-navigation-entry--pinned":n.pinned,"app-navigation-entry--collapsible":n.allowCollapse&&!!e.$slots.default},"app-navigation-entry-wrapper"])},[((0,i.uX)(),(0,i.Wv)((0,i.$y)(l.isRouterLink?"router-link":"NcVNodes"),(0,r._B)((0,i.Ng)({...l.isRouterLink&&{custom:!0,to:n.to}})),{default:(0,i.k6)(({href:m,navigate:f,isActive:g})=>[(0,i.Lk)("div",{class:(0,r.C4)(["app-navigation-entry",{"app-navigation-entry--editing":s.editingActive,"app-navigation-entry--deleted":n.undo,"app-navigation-entry--legacy":a.isLegacy34,active:n.to&&g||n.active}])},[n.undo?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.CE)("a",{key:0,class:"app-navigation-entry-link","aria-current":n.active||n.to&&g?"page":void 0,"aria-description":n.ariaDescription,"aria-expanded":e.$slots.default?s.opened.toString():void 0,href:n.href||m||"#",target:l.isExternal(n.href)?"_blank":void 0,title:n.title||n.name,onBlur:t[1]||(t[1]=(...e)=>l.handleBlur&&l.handleBlur(...e)),onClick:e=>l.onClick(e,f,m),onFocus:t[2]||(t[2]=(...e)=>l.handleFocus&&l.handleFocus(...e)),onKeydown:t[3]||(t[3]=(0,o.jR)((0,o.D$)((...e)=>l.handleTab&&l.handleTab(...e),["exact"]),["tab"]))},[(0,i.Lk)("div",{class:(0,r.C4)(["app-navigation-entry-icon",{[n.icon]:n.icon}])},[n.loading?((0,i.uX)(),(0,i.Wv)(c,{key:0})):(0,i.RG)(e.$slots,"icon",{active:n.active||n.to&&g},void 0,!0,1)],2),(0,i.Lk)("span",{class:(0,r.C4)(["app-navigation-entry__name",{"hidden-visually":s.editingActive}])},(0,r.v_)(n.name),3),s.editingActive?((0,i.uX)(),(0,i.CE)("div",T,[(0,i.bF)(d,{ref:"editingInput",modelValue:s.editingValue,"onUpdate:modelValue":t[0]||(t[0]=e=>s.editingValue=e),placeholder:""!==n.editPlaceholder?n.editPlaceholder:n.name,primary:n.to&&g||n.active,onCancel:l.cancelEditing,onConfirm:l.handleEditingDone},null,8,["modelValue","placeholder","primary","onCancel","onConfirm"])])):(0,i.Q3)("",!0)],40,j)),n.undo?((0,i.uX)(),(0,i.CE)("div",X,[(0,i.Lk)("div",G,(0,r.v_)(n.name),1)])):(0,i.Q3)("",!0),(e.$slots.actions||e.$slots.counter||n.editable||n.undo)&&!s.editingActive?((0,i.uX)(),(0,i.CE)("div",{key:2,class:(0,r.C4)(["app-navigation-entry__utils",{"app-navigation-entry__utils--display-actions":n.forceDisplayActions||s.menuOpenLocalValue||n.menuOpen}])},[e.$slots.counter?((0,i.uX)(),(0,i.CE)("div",M,[(0,i.RG)(e.$slots,"counter",{},void 0,!0)])):(0,i.Q3)("",!0),e.$slots.actions||n.editable&&!s.editingActive||n.undo?((0,i.uX)(),(0,i.Wv)(h,{key:1,ref:"actions",class:"app-navigation-entry__actions",container:"#app-navigation-vue",boundariesElement:s.actionsBoundariesElement,inline:n.inlineActions,placement:n.menuPlacement,open:n.menuOpen,forceMenu:n.forceMenu,defaultIcon:n.menuIcon,variant:"tertiary","onUpdate:open":l.onMenuToggle},{icon:(0,i.k6)(()=>[(0,i.RG)(e.$slots,"menu-icon",{},void 0,!0)]),default:(0,i.k6)(()=>[n.editable&&!s.editingActive?((0,i.uX)(),(0,i.Wv)(u,{key:0,"aria-label":l.editButtonAriaLabel,onClick:l.handleEdit},{icon:(0,i.k6)(()=>[(0,i.bF)(p,{size:20})]),default:(0,i.k6)(()=>[(0,i.eW)(" "+(0,r.v_)(n.editLabel),1)]),_:1},8,["aria-label","onClick"])):(0,i.Q3)("",!0),n.undo?((0,i.uX)(),(0,i.Wv)(u,{key:1,"aria-label":l.undoButtonAriaLabel,onClick:l.handleUndo},{icon:(0,i.k6)(()=>[(0,i.bF)(A,{size:20})]),_:1},8,["aria-label","onClick"])):(0,i.Q3)("",!0),(0,i.RG)(e.$slots,"actions",{},void 0,!0)]),_:3},8,["boundariesElement","inline","placement","open","forceMenu","defaultIcon","onUpdate:open"])):(0,i.Q3)("",!0)],2)):(0,i.Q3)("",!0),n.allowCollapse&&e.$slots.default?((0,i.uX)(),(0,i.Wv)(v,{key:3,active:n.to&&g||n.active,open:s.opened,onClick:(0,o.D$)(l.toggleCollapse,["prevent","stop"])},null,8,["active","open","onClick"])):(0,i.Q3)("",!0),(0,i.RG)(e.$slots,"extra",{},void 0,!0)],2)]),_:3},16)),l.canHaveChildren&&e.$slots.default?((0,i.uX)(),(0,i.CE)("ul",H,[(0,i.RG)(e.$slots,"default",{},void 0,!0)])):(0,i.Q3)("",!0)],10,F)}],["__scopeId","data-v-6cae7342"]]);n.d(t,["N",0,$])},53411(e,t,n){n(61149);var a=n(20641),i=n(33564);const o={name:"NcAppNavigationList"},r={class:"app-navigation-list"};const s=(0,i._)(o,[["render",function(e,t,n,i,o,s){return(0,a.uX)(),(0,a.CE)("ul",r,[(0,a.RG)(e.$slots,"default",{},void 0,!0)])}],["__scopeId","data-v-d72957ed"]]);n.d(t,["N",0,s])},46123(e,t,n){n(20681);var a=n(20641),i=n(50953),o=n(90033),r=n(83868),s=n(79859),l=n(34512),c=n(50979),d=n(33564);(0,c.r)(c.v,c.C);const p=(0,a.pM)({__name:"NcAppNavigationSearch",props:(0,a.zz)({label:{type:String,default:(0,c.a)("Search …")},placeholder:{type:String,default:null}},{modelValue:{default:""},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const t=(0,a.fn)(e,"modelValue"),n=(0,a.Ht)(),d=(0,i.KR)(),{focused:p}=(0,r.RbW)(d),u=Number.parseInt(window.getComputedStyle(window.document.body).getPropertyValue("--animation-quick"))||100,A=(0,a.rk)("actionsContainer"),h=()=>!!n.actions?.({}),v=(0,i.KR)(!0),m=(0,i.KR)(),f=(0,i.KR)(!1);function g(){t.value="",h()&&(v.value=!0,(0,a.dY)(()=>A.value?.querySelector("button")?.focus()))}return(0,a.wB)(p,()=>{v.value=!p.value,window.clearTimeout(m.value),v.value?f.value=!1:window.setTimeout(()=>{f.value=!v.value},u)}),(n,r)=>((0,a.uX)(),(0,a.CE)("div",{class:(0,o.C4)(["app-navigation-search",{"app-navigation-search--has-actions":h()}])},[(0,a.bF)(l.N,{ref_key:"inputElement",ref:d,modelValue:t.value,"onUpdate:modelValue":r[0]||(r[0]=e=>t.value=e),"aria-label":e.label,class:"app-navigation-search__input",labelOutside:"",placeholder:e.placeholder??e.label,showTrailingButton:t.value.length>0,trailingButtonLabel:(0,i.R1)(c.a)("Clear search"),type:"search",onTrailingButtonClick:g},{"trailing-button-icon":(0,a.k6)(()=>[(0,a.bF)(s.I,{size:20})]),_:1},8,["modelValue","aria-label","placeholder","showTrailingButton","trailingButtonLabel"]),h()?((0,a.uX)(),(0,a.CE)("div",{key:0,ref:"actionsContainer",class:(0,o.C4)(["app-navigation-search__actions",{"app-navigation-search__actions--hidden":!v.value,"hidden-visually":f.value}])},[(0,a.RG)(n.$slots,"actions",{},void 0,!0)],2)):(0,a.Q3)("",!0)],2))}}),u=(0,d._)(p,[["__scopeId","data-v-191b6717"]]);n.d(t,["N",0,u])},4992(e,t,n){n(57674);var a=n(20641),i=n(50953),o=n(53751),r=n(90033),s=n(70711),l=n(83868),c=n(50744),d=n(20720),p=n(50979),u=n(5116),A=n(49784),h=n(33564);(0,p.r)(p.B);const v=["id"],m=(0,a.pM)({__name:"NcAppNavigationSettings",props:{excludeClickOutsideSelectors:{default:()=>[]},name:{default:()=>(0,p.a)("Settings")}},setup(e){const t=(0,u.c)(),n=(0,i.KR)(!1),p=(0,a.rk)("wrapperElement"),h=(0,a.EW)(()=>Array.isArray(e.excludeClickOutsideSelectors)?e.excludeClickOutsideSelectors:e.excludeClickOutsideSelectors.split(" "));return(0,l.X2F)(p,()=>{n.value=!1},{ignore:h}),(l,p)=>((0,a.uX)(),(0,a.CE)("div",{ref:"wrapperElement",class:(0,r.C4)(l.$style.container)},[(0,a.Lk)("div",{class:(0,r.C4)(l.$style.header)},[(0,a.bF)(c.N,{"aria-controls":(0,i.R1)(t),"aria-expanded":n.value?"true":"false",class:(0,r.C4)(l.$style.button),alignment:"start",variant:"tertiary",wide:"",onClick:p[0]||(p[0]=e=>n.value=!n.value)},{icon:(0,a.k6)(()=>[(0,a.bF)(d.N,{path:(0,i.R1)(A.a)?(0,i.R1)(s.x):(0,i.R1)(s.y)},null,8,["path"])]),default:(0,a.k6)(()=>[(0,a.eW)(" "+(0,r.v_)(e.name),1)]),_:1},8,["aria-controls","aria-expanded","class"])],2),(0,a.bF)(o.eB,{enterActiveClass:l.$style.animationActive,leaveActiveClass:l.$style.animationActive,enterFromClass:l.$style.animationStop,leaveToClass:l.$style.animationStop},{default:(0,a.k6)(()=>[(0,a.bo)((0,a.Lk)("div",{id:(0,i.R1)(t),class:(0,r.C4)(l.$style.content)},[(0,a.RG)(l.$slots,"default")],10,v),[[o.aG,n.value]])]),_:3},8,["enterActiveClass","leaveActiveClass","enterFromClass","leaveToClass"])],2))}}),f={$style:{container:"_container_2uWBM",header:"_header_jtpAp",button:"_button_9llR-",content:"_content_CW2CF",animationActive:"_animationActive_Lz0UV",animationStop:"_animationStop_lwpSi"}},g=(0,h._)(m,[["__cssModules",f]]);n.d(t,["N",0,g])},44159(e,t,n){n(6249);var a=n(20641),i=n(33564);const o={class:"app-navigation-spacer"},r=(0,a.pM)({__name:"NcAppNavigationSpacer",setup:e=>(e,t)=>((0,a.uX)(),(0,a.CE)("li",o))}),s=(0,i._)(r,[["__scopeId","data-v-277fa710"]]);n.d(t,["N",0,s])},84479(e,t,n){n(24677);var a=n(20641),i=n(50953),o=n(53751),r=n(90033),s=n(24239),l=n(50744),c=n(20720),d=n(12793),p=n(50979),u=n(49784),A=n(11122),h=n(33564);(0,p.r)(p.I);const v={class:"vue-skip-actions__container"},m={class:"vue-skip-actions__headline"},f={class:"vue-skip-actions__buttons"},g=(0,a.pM)({__name:"NcContent",props:{appName:{}},setup(e){const t=e;(0,a.Gt)(A.H,function(e){h.value=e,g.value||(g.value="navigation")}),(0,a.Gt)(A.C,"#content-vue"),(0,a.Gt)("appName",(0,a.EW)(()=>t.appName));const n=(0,d.al)(),h=(0,i.KR)(!1),g=(0,i.KR)(),C=(0,a.EW)(()=>"navigation"===g.value?'\x3c!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n--\x3e\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n':'\x3c!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n--\x3e\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n');function b(){(0,s.Ic)("toggle-navigation",{open:!0}),(0,a.dY)(()=>{window.location.hash="app-navigation-vue",document.getElementById("app-navigation-vue").focus()})}return(0,a.KC)(()=>{const e=document.getElementById("skip-actions");e&&(e.innerHTML="",e.classList.add("vue-skip-actions"))}),(t,s)=>((0,a.uX)(),(0,a.CE)("div",{id:"content-vue",class:(0,r.C4)(["content",[`app-${e.appName.toLowerCase()}`,{"content--legacy":(0,i.R1)(u.i)}]])},[((0,a.uX)(),(0,a.Wv)(a.Im,{to:"#skip-actions"},[(0,a.Lk)("div",v,[(0,a.Lk)("div",m,(0,r.v_)((0,i.R1)(p.a)("Keyboard navigation help")),1),(0,a.Lk)("div",f,[(0,a.bo)((0,a.bF)(l.N,{href:"#app-navigation-vue",variant:"tertiary",onClick:(0,o.D$)(b,["prevent"]),onFocusin:s[0]||(s[0]=e=>g.value="navigation"),onMouseover:s[1]||(s[1]=e=>g.value="navigation")},{default:(0,a.k6)(()=>[(0,a.eW)((0,r.v_)((0,i.R1)(p.a)("Skip to app navigation")),1)]),_:1},512),[[o.aG,h.value]]),(0,a.bF)(l.N,{href:"#app-content-vue",variant:"tertiary",onFocusin:s[2]||(s[2]=e=>g.value="content"),onMouseover:s[3]||(s[3]=e=>g.value="content")},{default:(0,a.k6)(()=>[(0,a.eW)((0,r.v_)((0,i.R1)(p.a)("Skip to main content")),1)]),_:1})]),(0,a.bo)((0,a.bF)(c.N,{class:"vue-skip-actions__image",svg:C.value,size:"auto"},null,8,["svg"]),[[o.aG,!(0,i.R1)(n)]])])])),(0,a.RG)(t.$slots,"default",{},void 0,!0)],2))}}),C=(0,h._)(g,[["__scopeId","data-v-d13dcb98"]]);n.d(t,["N",0,C])},5914(e,t,n){n(32404);var a=n(20641),i=n(90033),o=n(71085),r=n(33564);const s=["title"],l=(0,a.pM)({__name:"NcCounterBubble",props:{count:{},active:{type:Boolean},type:{default:""},raw:{type:Boolean}},setup(e){const t=e,n=(0,a.EW)(()=>{if(t.raw)return t.count.toString();return new Intl.NumberFormat((0,o.lO)(),{notation:"compact",compactDisplay:"short"}).format(t.count)}),r=(0,a.EW)(()=>{if(t.raw)return;const e=t.count.toString();return e!==n.value?e:void 0});return(t,o)=>((0,a.uX)(),(0,a.CE)("div",{class:(0,i.C4)(["counter-bubble__counter",{active:e.active,"counter-bubble__counter--highlighted":"highlighted"===e.type,"counter-bubble__counter--outlined":"outlined"===e.type}]),title:r.value},(0,i.v_)(n.value),11,s))}}),c=(0,r._)(l,[["__scopeId","data-v-36ffc13f"]]);n.d(t,["N",0,c])},62754(e,t,n){n(66322);var a=n(43758),i=n(79859),o=n(50979),r=n(49784),s=n(50744),l=n(20641),c=n(53751),d=n(90033),p=n(33564);(0,o.r)(o.k);const u={name:"NcInputConfirmCancel",components:{IconArrowRight:a.I,IconClose:i.I,NcButton:s.N},props:{primary:{default:!1,type:Boolean},placeholder:{default:"",type:String},modelValue:{default:"",type:String}},emits:["cancel","confirm","update:modelValue"],setup:()=>({isLegacy34:r.i}),data:()=>({labelConfirm:(0,o.a)("Confirm changes"),labelCancel:(0,o.a)("Cancel changes")}),computed:{valueModel:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}},methods:{confirm(){this.$emit("confirm")},cancel(){this.$emit("cancel")},focusInput(){this.$refs.input.focus()}}},A=["placeholder"];const h=(0,p._)(u,[["render",function(e,t,n,a,i,o){const r=(0,l.g2)("IconArrowRight"),s=(0,l.g2)("NcButton"),p=(0,l.g2)("IconClose");return(0,l.uX)(),(0,l.CE)("div",{class:(0,d.C4)(["app-navigation-input-confirm",{"app-navigation-input-confirm--legacy":a.isLegacy34}])},[(0,l.Lk)("form",{onSubmit:t[1]||(t[1]=(0,c.D$)((...e)=>o.confirm&&o.confirm(...e),["prevent"])),onKeydown:t[2]||(t[2]=(0,c.jR)((0,c.D$)((...e)=>o.cancel&&o.cancel(...e),["exact","stop","prevent"]),["esc"])),onClick:t[3]||(t[3]=(0,c.D$)(()=>{},["stop","prevent"]))},[(0,l.bo)((0,l.Lk)("input",{ref:"input","onUpdate:modelValue":t[0]||(t[0]=e=>o.valueModel=e),type:"text",class:"app-navigation-input-confirm__input",placeholder:n.placeholder},null,8,A),[[c.Jo,o.valueModel]]),(0,l.bF)(s,{"aria-label":i.labelConfirm,type:"submit",variant:"primary",onClick:(0,c.D$)(o.confirm,["stop","prevent"])},{icon:(0,l.k6)(()=>[(0,l.bF)(r,{size:20})]),_:1},8,["aria-label","onClick"]),(0,l.bF)(s,{"aria-label":i.labelCancel,type:"reset",variant:n.primary?"primary":"tertiary",onClick:(0,c.D$)(o.cancel,["stop","prevent"])},{icon:(0,l.k6)(()=>[(0,l.bF)(p,{size:20})]),_:1},8,["aria-label","variant","onClick"])],32)],2)}],["__scopeId","data-v-6926a0b8"]]);n.d(t,["N",0,h])},34512(e,t,n){n(67288);var a=n(20641),i=n(50953),o=n(53751),r=n(90033),s=n(70711),l=n(50744),c=n(20720),d=n(5116),p=n(49784),u=n(33564);const A={class:"input-field__main-wrapper"},h=["id","aria-describedby","disabled","placeholder","type","value"],v=["for"],m={class:"input-field__icon input-field__icon--leading"},f={key:2,class:"input-field__icon input-field__icon--trailing"},g=["id"],C=(0,a.pM)({inheritAttrs:!1,__name:"NcInputField",props:(0,a.zz)({class:{default:""},inputClass:{default:""},id:{default:()=>(0,d.c)()},label:{default:void 0},labelOutside:{type:Boolean},type:{default:"text"},placeholder:{default:void 0},showTrailingButton:{type:Boolean},trailingButtonLabel:{default:void 0},success:{type:Boolean},error:{type:Boolean},helperText:{default:""},disabled:{type:Boolean},pill:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:(0,a.zz)(["trailingButtonClick"],["update:modelValue"]),setup(e,{expose:t,emit:n}){const d=(0,a.fn)(e,"modelValue"),u=e,C=n;t({focus:function(e){_.value.focus(e)},select:function(){_.value.select()}});const b=(0,a.OA)(),_=(0,a.rk)("input"),y=(0,a.EW)(()=>u.showTrailingButton||u.success),x=(0,a.EW)(()=>u.placeholder?u.placeholder:u.label?p.a?u.label:"":void 0),w=(0,a.EW)(()=>{const e=u.label||u.labelOutside;return e||(0,a.R8)("You need to add a label to the NcInputField component. Either use the prop label or use an external one, as per the example in the documentation."),e}),E=(0,a.EW)(()=>{const e=[];return u.helperText&&e.push(`${u.id}-helper-text`),b["aria-describedby"]&&e.push(String(b["aria-describedby"])),e.join(" ")||void 0});function k(e){const t=e.target;d.value="number"===u.type&&"number"==typeof d.value?parseFloat(t.value):t.value}return(t,n)=>((0,a.uX)(),(0,a.CE)("div",{class:(0,r.C4)(["input-field",[{"input-field--disabled":e.disabled,"input-field--error":e.error,"input-field--label-outside":e.labelOutside||!w.value,"input-field--leading-icon":!!t.$slots.icon,"input-field--trailing-icon":y.value,"input-field--pill":e.pill,"input-field--success":e.success,"input-field--legacy":(0,i.R1)(p.a)},t.$props.class]])},[(0,a.Lk)("div",A,[(0,a.Lk)("input",(0,a.v6)(t.$attrs,{id:e.id,ref:"input","aria-describedby":E.value,"aria-live":"polite",class:["input-field__input",e.inputClass],disabled:e.disabled,placeholder:x.value,type:e.type,value:d.value.toString(),onInput:k}),null,16,h),!e.labelOutside&&w.value?((0,a.uX)(),(0,a.CE)("label",{key:0,class:"input-field__label",for:e.id},(0,r.v_)(e.label),9,v)):(0,a.Q3)("",!0),(0,a.bo)((0,a.Lk)("div",m,[(0,a.RG)(t.$slots,"icon",{},void 0,!0)],512),[[o.aG,!!t.$slots.icon]]),e.showTrailingButton?((0,a.uX)(),(0,a.Wv)(l.N,{key:1,class:"input-field__trailing-button","aria-label":e.trailingButtonLabel,disabled:e.disabled,variant:"tertiary-no-background",onClick:n[0]||(n[0]=e=>C("trailingButtonClick",e))},{icon:(0,a.k6)(()=>[(0,a.RG)(t.$slots,"trailing-button-icon",{},void 0,!0)]),_:3},8,["aria-label","disabled"])):e.success||e.error?((0,a.uX)(),(0,a.CE)("div",f,[e.success?((0,a.uX)(),(0,a.Wv)(c.N,{key:0,path:(0,i.R1)(s.d)},null,8,["path"])):((0,a.uX)(),(0,a.Wv)(c.N,{key:1,path:(0,i.R1)(s.j)},null,8,["path"]))])):(0,a.Q3)("",!0)]),e.helperText?((0,a.uX)(),(0,a.CE)("p",{key:0,id:`${e.id}-helper-text`,class:"input-field__helper-text-message"},[e.success?((0,a.uX)(),(0,a.Wv)(c.N,{key:0,class:"input-field__helper-text-message__icon",path:(0,i.R1)(s.d),inline:""},null,8,["path"])):e.error?((0,a.uX)(),(0,a.Wv)(c.N,{key:1,class:"input-field__helper-text-message__icon",path:(0,i.R1)(s.j),inline:""},null,8,["path"])):(0,a.Q3)("",!0),(0,a.eW)(" "+(0,r.v_)(e.helperText),1)],8,g)):(0,a.Q3)("",!0)],2))}}),b=(0,u._)(C,[["__scopeId","data-v-feb04bef"]]);n.d(t,["N",0,b])},82108(e,t,n){const a=(0,n(20641).pM)({name:"NcVNodes",props:{vnodes:{type:[Array,Object],default:null}},render(){return this.vnodes||this.$slots?.default?.({})}});n.d(t,["_",0,a])},44783(e,t,n){n.d(t,{a:()=>c});var a=n(81222),i=n(20641),o=n(54949);let r="missing-app-name";try{r="social"}catch{o.l.error("The `@nextcloud/vue` library was used without setting / replacing the `appName`.")}const s=r;let l="";try{l="0.19.40"}catch{o.l.error("The `@nextcloud/vue` library was used without setting / replacing the `appVersion`.")}function c(){return(0,i.WQ)("appName",s)}const d=function(e){let t,n=!1;return(...a)=>(n||(n=!0,t=e(...a)),t)}(()=>{const e=(0,a.C)("core","apps",[]),t=c();return e.find(({id:e})=>e===t)?.name??t});n.d(t,["u",0,d])},11122(e,t,n){const a=Symbol.for("NcContent:setHasAppNavigation"),i=Symbol.for("NcContent:selector");n.d(t,["C",0,i,"H",0,a])},39671(e,t,n){n.d(t,{A:()=>a.N});var a=n(69052)},66828(e,t,n){n.d(t,{A:()=>a.N});var a=n(5019)},92652(e,t,n){n.d(t,{A:()=>a.N});var a=n(74795)},26985(e,t,n){n.d(t,{A:()=>a.N});var a=n(96070)},47824(e,t,n){n.d(t,{A:()=>a.N});var a=n(46123)},56643(e,t,n){n.d(t,{A:()=>a.N});var a=n(4992)},43220(e,t,n){n.d(t,{A:()=>a.N});var a=n(44159)},14676(e,t,n){n.d(t,{A:()=>a.N});var a=n(84479)},26933(e,t,n){n.d(t,{A:()=>a.N});var a=n(5914)},51773(e,t,n){var a=n(14676),i=n(39671),o=n(23447),r=n(52541),s=n(85336),l=n(57253),c=n(33953),d=n(44894),p=n(70642),u=n(81222),A=n(55705),h=n(96231),v=n(44744),m=n(89274),f=n(49124),g=n(92069),C=n(59512);const b={name:"App",components:{NcContent:a.A,NcAppContent:i.A,NcButton:o.A,Navigation:r.A,ShortcutHelp:s.A,SetupChecks:l.A},setup(){const{serverData:e}=(0,C.H)(),{cloudId:t}=(0,g.i)();return{serverData:e,cloudId:t}},data:()=>({infoHidden:!1,state:[],cloudAddress:"",shortcutHelpOpen:!1,stopShortcuts:null}),computed:{...(0,h.n2)(v.E,m.C,f.A)},watch:{$route(e){this.timelineStore.setSearchQuery("search"===e.name?String(e.params.term??""):"")}},mounted(){this.stopShortcuts=(0,c._E)(),d.A.on("shortcut:help",this.toggleShortcutHelp),d.A.on("shortcut:home",this.goHome)},unmounted(){this.stopShortcuts?.(),d.A.off("shortcut:help",this.toggleShortcutHelp),d.A.off("shortcut:home",this.goHome)},beforeMount(){if(this.settingsStore.setServerData((0,u.C)("social","serverData")),!this.serverData.public){const e=(0,u.C)("social","currentAccount",null);e?.url?(this.accountStore.setCurrentAccount(this.cloudId),this.accountStore.addAccount({actorId:e.url,data:e})):this.accountStore.fetchCurrentAccountInfo(this.cloudId)}OCA.Push&&OCA.Push.isEnabled()&&OCA.Push.addCallback(this.fromPushApp,"social")},methods:{toggleShortcutHelp(){this.shortcutHelpOpen=!this.shortcutHelpOpen},goHome(){("timeline"!==this.$route.name||this.$route.params.type)&&this.$router.push({name:"timeline"})},hideInfo(){this.infoHidden=!0},setCloudAddress(){p.Ay.post((0,A.Jv)("apps/social/api/v1/config/cloudAddress"),{cloudAddress:this.cloudAddress}).then(()=>{this.settingsStore.setServerDataEntry({key:"setup",value:!1}),this.settingsStore.setServerDataEntry({key:"cloudAddress",value:this.cloudAddress})})},search(e){const t=(e??"").trim();if(this.timelineStore.setSearchQuery(t),""===t)return void("search"===this.$route.name&&this.$router.push({name:"timeline"}));("search"===this.$route.name?this.$router.replace:this.$router.push).call(this.$router,{name:"search",params:{term:t}})},fromPushApp(e){let t="home";"tags"===this.$route.name?t="tags":this.$route.params.type&&(t=this.$route.params.type),"timeline.home"===e.source&&"home"===t&&this.timelineStore.addToTimeline([e.payload]),"timeline.direct"===e.source&&"direct"===t&&this.timelineStore.addToTimeline([e.payload])}}};n.d(t,["A",0,b])},23529(e,n,a){var i=a(66828),o=a(47824),r=a(26985),s=a(92652),l=a(43220),c=a(56643),d=a(7880),p=a(61456),u=a(23447),A=a(26933),h=a(20641),v=a(29256),m=a(15979),f=a(50752),g=a(49942),C=a(32422),b=a(97081),_=a(29390),y=a(27916),x=a(94935),w=a(81893),E=a(83265),k=a(95621),B=a(11755),S=a(38743),D=a(20818),N=a(71085),z=a(68012),L=a(70642),P=a(55705),I=a(98991),F=a(20686),j=a(57277),T=a(96231),X=a(44744),G=a(29944),M=a(85623),H=a(49124),$=a(92069);const R=(0,h.$V)(()=>Promise.all([a.e("vendors-node_modules_nextcloud_vue_dist_components_NcActionButton_index_mjs-node_modules_next-5a196b"),a.e("src_components_ActorAvatar_vue"),a.e("src_components_Visibility_VisibilitiesInfos_js-src_components_MediaAttachment_vue-src_compone-71be4a"),a.e("composer")]).then(()=>a(51018))),W={name:"Navigation",components:{NcAppNavigation:i.A,NcAppNavigationSearch:o.A,NcAppNavigationItem:r.A,NcAppNavigationCaption:s.A,NcAppNavigationSpacer:l.A,NcAppNavigationSettings:c.A,NcAvatar:d.A,NcModal:p.A,NcButton:u.A,NcCounterBubble:A.A,Composer:R,IconHome:v.A,IconAccountCircle:_.A,IconBell:C.A,IconCommentAccount:b.A,IconHeart:x.A,IconPlus:w.A,IconBookmark:E.A,IconPound:k.A,IconAccountGroup:B.A,IconFormatListBulleted:S.A,IconCancel:I.A,IconCog:F.A,IconAlertCircle:j.A},emits:["search"],setup(){const{currentUser:e}=(0,$.i)();return{currentUser:e}},data:()=>({trending:[],lists:[],localSearch:"",showComposer:!1,composerPaths:[],showErrors:!1,stopListening:null,pollTimer:null,searchTimer:null}),computed:{...(0,T.n2)(X.E,G.O,M.t,H.A),hasErrors(){return this.errorsStore.hasErrors},errorCount(){return this.errorsStore.appErrors.length},unreadNotifications(){return this.notificationsStore.unreadNotifications},appErrors(){return this.errorsStore.appErrors},profileName(){return this.currentAccount?.display_name||this.currentUser?.displayName||this.currentUser?.uid||""},avatarUrl(){const e=this.currentUser?.uid;return e?(0,P.Jv)("/avatar/{uid}/64",{uid:e}):""},currentAccount(){return this.accountStore.currentAccount},searchQuery(){return this.timelineStore.getSearchQuery??""},menu(){return{timelines:[{key:"social-home",icon:v.A,title:t("social","My Feed"),to:{name:"timeline"},covers:["","timeline","federated"]},{key:"social-photos",icon:f.A,title:t("social","Photos"),to:{name:"timeline",params:{type:"photos"}}},{key:"social-videos",icon:g.A,title:t("social","Videos"),to:{name:"timeline",params:{type:"videos"}}},{key:"social-notifications",icon:C.A,title:t("social","Activities"),to:{name:"timeline",params:{type:"notifications"}},counter:this.unreadNotifications},{key:"social-direct",icon:b.A,title:t("social","Direct messages"),to:{name:"timeline",params:{type:"direct"}}},{key:"social-discover",icon:m.A,title:t("social","Discover"),to:{name:"discover"}}],more:[{key:"social-profile",icon:_.A,title:t("social","My profile"),to:{name:"profile",params:{account:this.currentUser?.uid}}},{key:"social-follow-requests",icon:y.A,title:t("social","Follow requests"),to:{name:"follow-requests"}},{key:"social-liked",icon:x.A,title:t("social","Liked posts"),to:{name:"timeline",params:{type:"favourites"}}},{key:"social-bookmarks",icon:E.A,title:t("social","Bookmarks"),to:{name:"timeline",params:{type:"bookmarks"}}},{key:"social-statistics",icon:D.A,title:t("social","Statistics"),to:{name:"statistics"}}]}}},watch:{showComposer(e){e||(this.composerPaths=[])},searchQuery:{immediate:!0,handler(e){this.localSearch=e}}},mounted(){this.fetchTrending(),this.fetchLists(),this.notificationsStore.fetchUnreadNotifications(),this.openComposerFromQuery(),this.stopListening=(0,z.K)("social_timeline",()=>{this.notificationsStore.fetchUnreadNotifications()}),this.stopListening||(this.pollTimer=setInterval(()=>this.notificationsStore.fetchUnreadNotifications(),6e4))},beforeUnmount(){"function"==typeof this.stopListening&&this.stopListening(),null!==this.pollTimer&&clearInterval(this.pollTimer),null!==this.searchTimer&&window.clearTimeout(this.searchTimer)},methods:{openComposerFromQuery(){const e=this.$route?.query?.attach,t=(Array.isArray(e)?e:[e]).filter(e=>"string"==typeof e&&""!==e);if(0===t.length)return;this.composerPaths=t,this.showComposer=!0;const n={...this.$route.query};delete n.attach,this.$router?.replace?.({...this.$route,query:n})},t:N.Tl,n:N.zw,async fetchTrending(){try{const{data:e}=await L.Ay.get((0,P.Jv)("apps/social/api/v1/trends/tags"),{params:{limit:5}});this.trending=Array.isArray(e)?e:[]}catch{this.trending=[]}},async fetchLists(){try{const{data:e}=await L.Ay.get((0,P.Jv)("apps/social/api/v1/lists")),t=Array.isArray(e)?e:[];this.lists=[...t.filter(e=>e.nextcloud_group),...t.filter(e=>!e.nextcloud_group)]}catch{this.lists=[]}},isListActive(e){return"list"===this.$route.name&&String(this.$route.params.id??"")===String(e.id)},usesOf:e=>Number.parseInt(e.history?.[0]?.uses??0)||0,hrefFor(e){return this.$router.resolve(e).href},navigate(e,t){t&&(t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.button>0)||(t?.preventDefault(),this.$router.push(e))},isTagActive(e){return"tags"===this.$route?.name&&this.$route?.params?.tag===e.name},dismissError(e){this.errorsStore.dismissAppError(e)},clearAllErrors(){this.errorsStore.clearErrors()},onSearchInput(){null!==this.searchTimer&&window.clearTimeout(this.searchTimer),this.searchTimer=window.setTimeout(()=>{this.searchTimer=null,this.$emit("search",this.localSearch)},300)},isActive(e){const t=this.$route,n=e.to,a=String(t.name??"");if(a!==n.name&&!a.startsWith(n.name+"."))return!1;if(void 0!==e.covers)return e.covers.includes(String(t.params.type??""));const i=n.params??{},o=t.params??{};for(const e of new Set([...Object.keys(i),...Object.keys(o)]))if(String(i[e]??"")!==String(o[e]??""))return!1;return!0}}};a.d(n,["A",0,W])},24139(e,t,n){var a=n(71085);const i={name:"SetupChecks",props:{checks:{type:Object,required:!0},addresses:{type:Object,default:()=>({configured:"",expected:""})}},computed:{addressExplanation(){return(0,a.Tl)("social","Social builds every account and post address from {configured}, but this server now reports that it lives at {expected}. Nobody looking for an account here under the address the server advertises will find it.",{configured:this.addresses.configured,expected:this.addresses.expected})}},methods:{t:a.Tl}};n.d(t,["A",0,i])},28016(e,t,n){var a=n(61456),i=n(71085),o=n(12533);const r={name:"ShortcutHelp",components:{NcModal:a.A,ShortcutList:o.A},props:{open:{type:Boolean,default:!1}},emits:["close"],methods:{t:i.Tl}};n.d(t,["A",0,r])},13549(e,t,n){var a=n(71085),i=n(33953);const o={name:"ShortcutList",computed:{shortcuts:()=>i.Ar},methods:{t:a.Tl}};n.d(t,["A",0,o])},95103(e,t,n){n.d(t,{X:()=>c});var a=n(20641),i=n(53751),o=n(90033);const r={key:0,class:"setup social__wrapper"},s={class:"hidden",for:"setup-cloud-address"},l=["placeholder"];function c(e,t,n,c,d,p){const u=(0,a.g2)("Navigation"),A=(0,a.g2)("ShortcutHelp"),h=(0,a.g2)("SetupChecks"),v=(0,a.g2)("router-view"),m=(0,a.g2)("NcAppContent"),f=(0,a.g2)("NcContent"),g=(0,a.g2)("NcButton");return c.serverData.setup?((0,a.uX)(),(0,a.Wv)(f,{key:1,appName:"social"},{default:(0,a.k6)(()=>[c.serverData.isAdmin?((0,a.uX)(),(0,a.Wv)(m,{key:0,class:"setup"},{default:(0,a.k6)(()=>[(0,a.Lk)("h2",null,(0,o.v_)(e.t("social","Social app setup")),1),(0,a.Lk)("p",null,(0,o.v_)(e.t("social","ActivityPub requires a fixed URL to make entries unique. Note that this cannot be changed later without resetting the Social app.")),1),(0,a.Lk)("form",{onSubmit:t[2]||(t[2]=(0,i.D$)((...e)=>p.setCloudAddress&&p.setCloudAddress(...e),["prevent"]))},[(0,a.Lk)("p",null,[(0,a.Lk)("label",s,(0,o.v_)(e.t("social","ActivityPub URL base")),1),(0,a.bo)((0,a.Lk)("input",{id:"setup-cloud-address","onUpdate:modelValue":t[1]||(t[1]=e=>d.cloudAddress=e),placeholder:c.serverData.cliUrl,type:"url",class:"setup-input",required:""},null,8,l),[[i.Jo,d.cloudAddress]]),(0,a.bF)(g,{variant:"primary",type:"submit"},{default:(0,a.k6)(()=>[(0,a.eW)((0,o.v_)(e.t("social","Finish setup")),1)]),_:1})]),c.serverData.checks.success?(0,a.Q3)("",!0):((0,a.uX)(),(0,a.Wv)(h,{key:0,checks:c.serverData.checks.checks,addresses:c.serverData.checks.addresses},null,8,["checks","addresses"]))],32)]),_:1})):((0,a.uX)(),(0,a.Wv)(m,{key:1,class:"setup"},{default:(0,a.k6)(()=>[(0,a.Lk)("p",null,(0,o.v_)(e.t("social","The Social app needs to be set up by the server administrator.")),1)]),_:1}))]),_:1})):((0,a.uX)(),(0,a.Wv)(f,{key:0,appName:"social",class:(0,o.C4)({public:c.serverData.public})},{default:(0,a.k6)(()=>[c.serverData.public?(0,a.Q3)("",!0):((0,a.uX)(),(0,a.Wv)(u,{key:0,onSearch:p.search},null,8,["onSearch"])),(0,a.bF)(A,{open:d.shortcutHelpOpen,onClose:t[0]||(t[0]=e=>d.shortcutHelpOpen=!1)},null,8,["open"]),(0,a.bF)(m,null,{default:(0,a.k6)(()=>[c.serverData.isAdmin&&!c.serverData.checks.success?((0,a.uX)(),(0,a.CE)("div",r,[(0,a.bF)(h,{checks:c.serverData.checks.checks,addresses:c.serverData.checks.addresses},null,8,["checks","addresses"])])):(0,a.Q3)("",!0),(0,a.bF)(v)]),_:1})]),_:1},8,["class"]))}},55e3(e,t,n){n.d(t,{X:()=>u});var a=n(20641),i=n(53751),o=n(90033);const r={class:"navigation__subname"},s={class:"navigation__footer"},l={class:"modal-composer"},c={class:"modal-errors"},d={class:"modal-errors__title"},p={class:"modal-errors__message"};function u(e,t,n,u,A,h){const v=(0,a.g2)("NcAppNavigationSearch"),m=(0,a.g2)("IconPlus"),f=(0,a.g2)("NcButton"),g=(0,a.g2)("IconAlertCircle"),C=(0,a.g2)("NcCounterBubble"),b=(0,a.g2)("NcAppNavigationItem"),_=(0,a.g2)("NcAppNavigationSpacer"),y=(0,a.g2)("NcAppNavigationCaption"),x=(0,a.g2)("IconPound"),w=(0,a.g2)("IconAccountGroup"),E=(0,a.g2)("IconFormatListBulleted"),k=(0,a.g2)("IconCancel"),B=(0,a.g2)("IconCog"),S=(0,a.g2)("NcAppNavigationSettings"),D=(0,a.g2)("NcAppNavigation"),N=(0,a.g2)("Composer"),z=(0,a.g2)("NcModal");return(0,a.uX)(),(0,a.CE)(a.FK,null,[(0,a.bF)(D,null,{search:(0,a.k6)(()=>[(0,a.bF)(v,{modelValue:A.localSearch,"onUpdate:modelValue":[t[0]||(t[0]=e=>A.localSearch=e),h.onSearchInput],label:h.t("social","Search …")},null,8,["modelValue","label","onUpdate:modelValue"])]),list:(0,a.k6)(()=>[(0,a.bF)(f,{class:"navigation__compose",variant:"primary",wide:"",alignment:"start",onClick:t[1]||(t[1]=e=>A.showComposer=!0)},{icon:(0,a.k6)(()=>[(0,a.bF)(m,{size:20})]),default:(0,a.k6)(()=>[(0,a.eW)(" "+(0,o.v_)(h.t("social","New post")),1)]),_:1}),h.hasErrors?((0,a.uX)(),(0,a.Wv)(b,{key:0,name:h.t("social","Errors"),onClick:t[2]||(t[2]=(0,i.D$)(e=>A.showErrors=!0,["prevent"]))},{icon:(0,a.k6)(()=>[(0,a.bF)(g,{class:"error-icon",size:20})]),counter:(0,a.k6)(()=>[(0,a.bF)(C,{count:h.errorCount,type:"highlighted"},null,8,["count"])]),_:1},8,["name"])):(0,a.Q3)("",!0),((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(h.menu.timelines,e=>((0,a.uX)(),(0,a.Wv)(b,{key:e.key,name:e.title,href:h.hrefFor(e.to),active:h.isActive(e),onClick:t=>h.navigate(e.to,t)},(0,a.eX)({icon:(0,a.k6)(()=>[((0,a.uX)(),(0,a.Wv)((0,a.$y)(e.icon),{size:20}))]),_:2},[e.counter>0?{name:"counter",fn:(0,a.k6)(()=>[(0,a.bF)(C,{count:e.counter,type:"highlighted"},null,8,["count"])]),key:"0"}:void 0]),1032,["name","href","active","onClick"]))),128)),(0,a.bF)(_),A.trending.length>0?((0,a.uX)(),(0,a.Wv)(y,{key:1,name:h.t("social","Trending")},null,8,["name"])):(0,a.Q3)("",!0),((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(A.trending,e=>((0,a.uX)(),(0,a.Wv)(b,{key:`trend-${e.name}`,class:"navigation__trend",name:`#${e.name}`,href:h.hrefFor({name:"tags",params:{tag:e.name}}),active:h.isTagActive(e),onClick:t=>h.navigate({name:"tags",params:{tag:e.name}},t)},{icon:(0,a.k6)(()=>[(0,a.bF)(x,{size:20})]),extra:(0,a.k6)(()=>[(0,a.Lk)("span",r,(0,o.v_)(h.n("social","%n post","%n posts",h.usesOf(e))),1)]),_:2},1032,["name","href","active","onClick"]))),128)),A.trending.length>0?((0,a.uX)(),(0,a.Wv)(_,{key:2})):(0,a.Q3)("",!0),A.lists.length>0?((0,a.uX)(),(0,a.Wv)(y,{key:3,name:h.t("social","Lists")},null,8,["name"])):(0,a.Q3)("",!0),((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(A.lists,e=>((0,a.uX)(),(0,a.Wv)(b,{key:`list-${e.id}`,class:"navigation__list",name:e.title,title:e.nextcloud_group?h.t("social","Everyone in the Nextcloud group {group} who has a Social account",{group:e.title}):void 0,href:h.hrefFor({name:"list",params:{id:e.id}}),active:h.isListActive(e),onClick:t=>h.navigate({name:"list",params:{id:e.id}},t)},{icon:(0,a.k6)(()=>[e.nextcloud_group?((0,a.uX)(),(0,a.Wv)(w,{key:0,size:20})):((0,a.uX)(),(0,a.Wv)(E,{key:1,size:20}))]),_:2},1032,["name","title","href","active","onClick"]))),128)),A.lists.length>0?((0,a.uX)(),(0,a.Wv)(_,{key:4})):(0,a.Q3)("",!0)]),footer:(0,a.k6)(()=>[(0,a.Lk)("div",s,[(0,a.bF)(S,{class:"navigation__more",style:(0,o.Tr)({"--social-face":`url(${h.avatarUrl})`}),name:h.profileName},{default:(0,a.k6)(()=>[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(h.menu.more,(e,t)=>((0,a.uX)(),(0,a.Wv)(b,{key:e.key,style:(0,o.Tr)({"--entry-index":t}),name:e.title,href:h.hrefFor(e.to),active:h.isActive(e),onClick:t=>h.navigate(e.to,t)},(0,a.eX)({icon:(0,a.k6)(()=>[((0,a.uX)(),(0,a.Wv)((0,a.$y)(e.icon),{size:20}))]),_:2},[e.counter>0?{name:"counter",fn:(0,a.k6)(()=>[(0,a.bF)(C,{count:e.counter,type:"highlighted"},null,8,["count"])]),key:"0"}:void 0]),1032,["style","name","href","active","onClick"]))),128)),(0,a.bF)(b,{style:(0,o.Tr)({"--entry-index":h.menu.more.length}),name:h.t("social","Blocked and muted accounts"),href:h.hrefFor({name:"blocked-accounts"}),active:h.isActive({to:{name:"blocked-accounts"}}),onClick:t[3]||(t[3]=e=>h.navigate({name:"blocked-accounts"},e))},{icon:(0,a.k6)(()=>[(0,a.bF)(k,{size:20})]),_:1},8,["style","name","href","active"]),(0,a.bF)(b,{style:(0,o.Tr)({"--entry-index":h.menu.more.length+1}),name:h.t("social","Settings"),href:h.hrefFor({name:"settings"}),active:h.isActive({to:{name:"settings"}}),onClick:t[4]||(t[4]=e=>h.navigate({name:"settings"},e))},{icon:(0,a.k6)(()=>[(0,a.bF)(B,{size:20})]),_:1},8,["style","name","href","active"])]),_:1},8,["style","name"])])]),_:1}),A.showComposer?((0,a.uX)(),(0,a.Wv)(z,{key:0,name:h.t("social","New post"),onClose:t[6]||(t[6]=e=>A.showComposer=!1)},{default:(0,a.k6)(()=>[(0,a.Lk)("div",l,[(0,a.bF)(N,{startExpanded:"",initialPaths:A.composerPaths,onPosted:t[5]||(t[5]=e=>A.showComposer=!1)},null,8,["initialPaths"])])]),_:1},8,["name"])):(0,a.Q3)("",!0),A.showErrors?((0,a.uX)(),(0,a.Wv)(z,{key:1,name:h.t("social","Errors"),onClose:t[7]||(t[7]=e=>A.showErrors=!1)},{default:(0,a.k6)(()=>[(0,a.Lk)("div",c,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(h.appErrors,e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,class:"modal-errors__item"},[(0,a.Lk)("div",d,(0,o.v_)(e.title),1),(0,a.Lk)("div",p,(0,o.v_)(e.message),1),(0,a.bF)(f,{variant:"tertiary",onClick:t=>h.dismissError(e.id)},{default:(0,a.k6)(()=>[(0,a.eW)((0,o.v_)(h.t("social","Dismiss")),1)]),_:1},8,["onClick"])]))),128)),h.appErrors.length>1?((0,a.uX)(),(0,a.Wv)(f,{key:0,variant:"tertiary",onClick:h.clearAllErrors},{default:(0,a.k6)(()=>[(0,a.eW)((0,o.v_)(h.t("social","Dismiss all")),1)]),_:1},8,["onClick"])):(0,a.Q3)("",!0)])]),_:1},8,["name"])):(0,a.Q3)("",!0)],64)}},74836(e,t,n){n.d(t,{X:()=>s});var a=n(20641),i=n(90033);const o={class:"setup-checks"},r={class:"external_link",href:"https://docs.nextcloud.com/server/latest/go.php?to=admin-setup-well-known-URL",target:"_blank",rel:"noreferrer noopener"};function s(e,t,n,s,l,c){return(0,a.uX)(),(0,a.CE)("div",o,[n.checks.wellknown?(0,a.Q3)("",!0):((0,a.uX)(),(0,a.CE)(a.FK,{key:0},[(0,a.Lk)("h3",null,(0,i.v_)(c.t("social",".well-known/webfinger isn't properly set up!")),1),(0,a.Lk)("p",null,[(0,a.eW)((0,i.v_)(c.t("social","Social needs the .well-known automatic discovery to be properly set up. If Nextcloud is not installed in the root of the domain, it is often the case that Nextcloud cannot configure this automatically. To use Social, the administrator of this Nextcloud instance needs to manually configure the .well-known redirects:"))+" ",1),(0,a.Lk)("a",r,(0,i.v_)(c.t("social","Open documentation"))+" ↗ ",1)])],64)),!1===n.checks.cloudAddress?((0,a.uX)(),(0,a.CE)(a.FK,{key:1},[(0,a.Lk)("h3",null,(0,i.v_)(c.t("social","Social is set up for a different address than this server")),1),(0,a.Lk)("p",null,(0,i.v_)(c.addressExplanation),1),(0,a.Lk)("p",null,(0,i.v_)(c.t("social",'Changing it renames every account and post that already exists here, so Social will not do it on its own. Either point the server back at the address Social knows, or reset Social with "occ social:reset" — which deletes everything it holds.')),1)],64)):(0,a.Q3)("",!0)])}},1587(e,t,n){n.d(t,{X:()=>r});var a=n(20641),i=n(90033);const o={class:"shortcuts"};function r(e,t,n,r,s,l){const c=(0,a.g2)("ShortcutList"),d=(0,a.g2)("NcModal");return n.open?((0,a.uX)(),(0,a.Wv)(d,{key:0,name:l.t("social","Keyboard shortcuts"),onClose:t[0]||(t[0]=t=>e.$emit("close"))},{default:(0,a.k6)(()=>[(0,a.Lk)("div",o,[(0,a.Lk)("h2",null,(0,i.v_)(l.t("social","Keyboard shortcuts")),1),(0,a.bF)(c)])]),_:1},8,["name"])):(0,a.Q3)("",!0)}},91655(e,t,n){n.d(t,{X:()=>s});var a=n(20641),i=n(90033);const o={class:"shortcut-list"},r={class:"shortcut-list__hint"};function s(e,t,n,s,l,c){return(0,a.uX)(),(0,a.CE)("div",o,[(0,a.Lk)("dl",null,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(c.shortcuts,e=>((0,a.uX)(),(0,a.CE)("div",{key:e.event,class:"shortcut-list__row"},[(0,a.Lk)("dt",null,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(e.keys,e=>((0,a.uX)(),(0,a.CE)("kbd",{key:e},(0,i.v_)(e),1))),128))]),(0,a.Lk)("dd",null,(0,i.v_)(e.label),1)]))),128))]),(0,a.Lk)("p",r,(0,i.v_)(c.t("social","Shortcuts are off while you are writing.")),1)])}},92069(e,t,n){n.d(t,{i:()=>r});var a=n(47606),i=n(20641),o=n(59512);function r(){const{hostname:e}=(0,o.H)(),t=(0,i.EW)(()=>(0,a.HW)()),n=(0,i.EW)(()=>t.value.uid+"@"+e.value),r=(0,i.EW)(()=>"@"+n.value);return{currentUser:t,cloudId:n,socialId:r}}},59512(e,t,n){n.d(t,{H:()=>o});var a=n(20641),i=n(89274);function o(){const e=(0,i.C)(),t=(0,a.EW)(()=>e.getServerData),n=(0,a.EW)(()=>{const e=document.createElement("a");return e.setAttribute("href",t.value.cloudAddress),e.hostname});return{serverData:t,hostname:n}}},44096(e,a,i){var o=i(53751),r=i(48089),s=i(76783),l=i(39912);const c=window.OC?.requestToken;c&&(i.nc=btoa(c)),i.p=window.OC?.linkTo("social","js/")??"/apps/social/js/";const d=(0,o.Ef)(r.A);d.config.globalProperties.t=t,d.config.globalProperties.n=n,d.config.globalProperties.OC=window.OC,d.config.globalProperties.OCA=window.OCA,d.use(s.Ay),d.use(l.A),d.mount("#content")},39912(e,t,n){var a=n(42229),i=n(55705);const o=()=>Promise.all([n.e("vendors-node_modules_nextcloud_vue_dist_components_NcActionButton_index_mjs-node_modules_next-9572c9"),n.e("vendors-node_modules_nextcloud_vue_dist_components_NcEmptyContent_index_mjs-node_modules_vue--0da044"),n.e("src_components_ActorAvatar_vue"),n.e("src_components_Visibility_VisibilitiesInfos_js-src_components_MediaAttachment_vue-src_compone-71be4a"),n.e("src_components_TimelineEntry_vue"),n.e("src_components_TimelineList_vue"),n.e("profile")]).then(()=>n(37512)),r=()=>Promise.all([n.e("vendors-node_modules_nextcloud_vue_dist_components_NcActionButton_index_mjs-node_modules_next-9572c9"),n.e("vendors-node_modules_nextcloud_vue_dist_components_NcEmptyContent_index_mjs-node_modules_vue--0da044"),n.e("src_components_ActorAvatar_vue"),n.e("src_components_Visibility_VisibilitiesInfos_js-src_components_MediaAttachment_vue-src_compone-71be4a"),n.e("src_components_TimelineEntry_vue"),n.e("src_components_TimelineList_vue"),n.e("profile")]).then(()=>n(87893)),s=()=>Promise.all([n.e("vendors-node_modules_nextcloud_vue_dist_components_NcActionButton_index_mjs-node_modules_next-9572c9"),n.e("vendors-node_modules_nextcloud_vue_dist_components_NcEmptyContent_index_mjs-node_modules_vue--0da044"),n.e("src_components_ActorAvatar_vue"),n.e("src_components_Visibility_VisibilitiesInfos_js-src_components_MediaAttachment_vue-src_compone-71be4a"),n.e("src_components_TimelineEntry_vue"),n.e("src_components_TimelineList_vue"),n.e("profile")]).then(()=>n(77705));const l=(0,a.aE)({history:(0,a.LA)((0,i.Jv)("/apps/social").replace(/\/+$/,"")),linkActiveClass:"active",scrollBehavior:(e,t,n)=>n||(e.hash?{el:e.hash,behavior:"smooth"}:{top:0}),routes:[{path:"/",redirect:{name:"timeline"}},{path:"/timeline/:type?",components:{default:()=>Promise.all([n.e("vendors-node_modules_nextcloud_vue_dist_components_NcActionButton_index_mjs-node_modules_next-9572c9"),n.e("vendors-node_modules_nextcloud_vue_dist_components_NcEmptyContent_index_mjs-node_modules_vue--dbebb5"),n.e("src_components_ActorAvatar_vue"),n.e("src_components_Visibility_VisibilitiesInfos_js-src_components_MediaAttachment_vue-src_compone-71be4a"),n.e("src_components_TimelineEntry_vue"),n.e("src_components_TimelineList_vue"),n.e("src_components_HashtagFollowButton_vue-src_components_TimelineSwitcher_vue"),n.e("node_modules_vue-material-design-icons_ArrowUp_vue-src_views_Timeline_vue")]).then(()=>n(49408))},props:!0,name:"timeline",children:[{path:"tags/:tag",name:"tags"},{path:"list/:id",name:"list"}]},{path:"/@:account",components:{default:o,details:r},props:!0,children:[{path:"",name:"profile",components:{details:r}},{path:"followers",name:"profile.followers",components:{details:s}},{path:"following",name:"profile.following",components:{details:s}}]},{path:"/discover",components:{default:()=>Promise.all([n.e("vendors-node_modules_nextcloud_vue_dist_components_NcEmptyContent_index_mjs-node_modules_vue--dbebb5"),n.e("src_components_ActorAvatar_vue"),n.e("src_components_HashtagFollowButton_vue-src_components_TimelineSwitcher_vue"),n.e("node_modules_nextcloud_vue_dist_components_NcPopover_index_mjs-node_modules_vue-material-desi-6fd727")]).then(()=>n(24008))},name:"discover"},{path:"/follow_requests",components:{default:()=>Promise.all([n.e("vendors-node_modules_nextcloud_vue_dist_components_NcActionButton_index_mjs-node_modules_next-9572c9"),n.e("vendors-node_modules_nextcloud_vue_dist_components_NcEmptyContent_index_mjs-node_modules_vue--0da044"),n.e("src_components_ActorAvatar_vue"),n.e("src_components_Visibility_VisibilitiesInfos_js-src_components_MediaAttachment_vue-src_compone-71be4a"),n.e("src_components_TimelineEntry_vue"),n.e("src_components_TimelineList_vue"),n.e("profile")]).then(()=>n(66144))},name:"follow-requests"},{path:"/blocked",components:{default:()=>Promise.all([n.e("vendors-node_modules_nextcloud_vue_dist_components_NcActionButton_index_mjs-node_modules_next-9572c9"),n.e("vendors-node_modules_nextcloud_vue_dist_components_NcEmptyContent_index_mjs-node_modules_vue--0da044"),n.e("src_components_ActorAvatar_vue"),n.e("src_components_Visibility_VisibilitiesInfos_js-src_components_MediaAttachment_vue-src_compone-71be4a"),n.e("src_components_TimelineEntry_vue"),n.e("src_components_TimelineList_vue"),n.e("profile")]).then(()=>n(52283))},name:"blocked-accounts"},{path:"/settings",components:{default:()=>Promise.all([n.e("vendors-node_modules_nextcloud_vue_dist_components_NcActionButton_index_mjs-node_modules_next-9572c9"),n.e("vendors-node_modules_nextcloud_vue_dist_components_NcEmptyContent_index_mjs-node_modules_vue--0da044"),n.e("src_components_ActorAvatar_vue"),n.e("src_components_Visibility_VisibilitiesInfos_js-src_components_MediaAttachment_vue-src_compone-71be4a"),n.e("src_components_TimelineEntry_vue"),n.e("src_components_TimelineList_vue"),n.e("profile")]).then(()=>n(32742))},name:"settings"},{path:"/migration",redirect:{name:"settings"}},{path:"/statistics",components:{default:()=>Promise.all([n.e("vendors-node_modules_nextcloud_vue_dist_components_NcActionButton_index_mjs-node_modules_next-9572c9"),n.e("vendors-node_modules_nextcloud_vue_dist_components_NcEmptyContent_index_mjs-node_modules_vue--0da044"),n.e("src_components_ActorAvatar_vue"),n.e("src_components_Visibility_VisibilitiesInfos_js-src_components_MediaAttachment_vue-src_compone-71be4a"),n.e("src_components_TimelineEntry_vue"),n.e("src_components_TimelineList_vue"),n.e("profile")]).then(()=>n(49852))},name:"statistics"},{path:"/search/:term?",components:{default:()=>Promise.all([n.e("vendors-node_modules_nextcloud_vue_dist_components_NcActionButton_index_mjs-node_modules_next-9572c9"),n.e("src_components_ActorAvatar_vue"),n.e("src_components_Visibility_VisibilitiesInfos_js-src_components_MediaAttachment_vue-src_compone-71be4a"),n.e("src_components_TimelineEntry_vue"),n.e("src_components_Search_vue")]).then(()=>n(10247))},props:!0,name:"search"},{path:"/@:account/:id",components:{default:()=>Promise.all([n.e("vendors-node_modules_nextcloud_vue_dist_components_NcActionButton_index_mjs-node_modules_next-9572c9"),n.e("vendors-node_modules_nextcloud_vue_dist_components_NcEmptyContent_index_mjs-node_modules_vue--dbebb5"),n.e("src_components_ActorAvatar_vue"),n.e("src_components_Visibility_VisibilitiesInfos_js-src_components_MediaAttachment_vue-src_compone-71be4a"),n.e("src_components_TimelineEntry_vue"),n.e("src_components_TimelineList_vue"),n.e("node_modules_vue-material-design-icons_ArrowUp_vue-src_views_TimelineSinglePost_vue")]).then(()=>n(17406))},props:!0,name:"single-post"},{path:"/ostatus/follow",components:{default:o,details:r},props:!0}]});n.d(t,["A",0,l])},44894(e,t,n){const a=(0,n(49071).A)();n.d(t,["A",0,a])},63360(e,t,n){var a=n(47606),i=n(23128);const o=null===(r=(0,a.HW)())?(0,i.YK)().setApp("social").build():(0,i.YK)().setApp("social").setUid(r.uid).build();var r;n.d(t,["A",0,o])},33953(e,n,a){a.d(n,{_E:()=>p});var i=a(44894);const o=[{keys:["j"],event:"shortcut:next",label:t("social","Next post")},{keys:["k"],event:"shortcut:previous",label:t("social","Previous post")},{keys:["l","f"],event:"shortcut:like",label:t("social","Like the post in focus")},{keys:["b"],event:"shortcut:boost",label:t("social","Boost the post in focus")},{keys:["r"],event:"shortcut:reply",label:t("social","Reply to the post in focus")},{keys:["o","Enter"],event:"shortcut:open",label:t("social","Open the post in focus")},{keys:["n"],event:"shortcut:compose",label:t("social","Write a new post")},{keys:["g"],event:"shortcut:home",label:t("social","Go to the home timeline")},{keys:["?"],event:"shortcut:help",label:t("social","Show these shortcuts")}],r=["input","textarea","select"],s=["button","a","summary","details","option","label"],l=["button","link","menuitem","menuitemcheckbox","menuitemradio","checkbox","radio","switch","tab","option","treeitem"],c=["Enter"," ","Spacebar"];function d(e){if(function(e){if(e.ctrlKey||e.metaKey||e.altKey)return!0;const t=e.target;return!(!t||"string"!=typeof t.tagName)&&(r.includes(t.tagName.toLowerCase())||!0===t.isContentEditable)}(e)||function(e){if(!c.includes(e.key))return!1;const t=e.target;if(!t||"string"!=typeof t.tagName)return!1;if(s.includes(t.tagName.toLowerCase()))return!0;const n="function"==typeof t.getAttribute?t.getAttribute("role"):null;return null!==n&&l.includes(n)}(e))return"";const t=o.find(({keys:t})=>t.includes(e.key));return void 0===t?"":t.event}function p(){const e=e=>{const t=d(e);""!==t&&(e.preventDefault(),i.A.emit(t))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)}a.d(n,["Ar",0,o])},66981(e,t,n){function a(){return Promise.all([Promise.all([n.e("vendors-node_modules_mdi_js_mdi_js-node_modules_nextcloud_vue_dist_chunks_NcDialogButton_vue_-bd7251"),n.e("vendors-node_modules_nextcloud_dialogs_dist_index_mjs"),n.e("vendors-node_modules_nextcloud_capabilities_dist_index_mjs-node_modules_nextcloud_l10n_dist_g-2544a4"),n.e("toast")]).then(()=>n(84973)),Promise.all([n.e("vendors-node_modules_mdi_js_mdi_js-node_modules_nextcloud_vue_dist_chunks_NcDialogButton_vue_-bd7251"),n.e("vendors-node_modules_nextcloud_dialogs_dist_index_mjs"),n.e("vendors-node_modules_nextcloud_capabilities_dist_index_mjs-node_modules_nextcloud_l10n_dist_g-2544a4"),n.e("toast")]).then(()=>n(18205))]).then(([e])=>e)}async function i(e,t){return(await a()).showError(e,t)}async function o(e,t){return(await a()).showSuccess(e,t)}n.d(t,{Qg:()=>i,Te:()=>o})},44744(e,t,n){n.d(t,{E:()=>g});var a=n(70642),i=n(66981),o=n(71085),r=n(55705),s=n(96231),l=n(63360),c=n(29944),d=n(49124);function p(e,t){return{id:e,following:t,note:"",languages:[],showing_reblogs:!1,notifying:!1,followed_by:!1,blocking:!1,blocked_by:!1,muting:!1,muting_notifications:!1,requested:!1,domain_blocking:!1,endorsed:!1}}function u(e,t){return e.accountIdMap[t]}function A(e,t){return u(e,t)||t}function h(e,{actorId:t,data:n}){if(e.accounts={...e.accounts,[t]:{...e.accounts[t],...n}},void 0===e.accountsFollowers[t]&&(e.accountsFollowers={...e.accountsFollowers,[t]:[]}),void 0===e.accountsFollowings[t]&&(e.accountsFollowings={...e.accountsFollowings,[t]:[]}),!n.acct)return;const a=-1===n.acct.indexOf("@")?n.acct+"@"+new URL(n.url).hostname:n.acct;e.accountIdMap={...e.accountIdMap,[a]:n.url}}function v(e,t){const n=[];let a="";for(const i of t)n.push(i.url),h(e,{actorId:i.url,data:i}),a=i.id;return{users:n,lastId:a}}let m=new Set,f=null;const g=(0,s.nY)("account",{state:()=>({currentAccountHandle:"",accounts:{},accountsFollowers:{},accountsFollowings:{},accountsRelationships:{},accountIdMap:{},accountsFollowersMaxId:{},accountsFollowingsMaxId:{},accountsFollowersLoading:{},accountsFollowingsLoading:{},accountsFollowersAllLoaded:{},accountsFollowingsAllLoaded:{}}),getters:{getAllAccounts:e=>()=>e.accounts,getAccount:e=>t=>e.accounts[u(e,t)],getRelationshipWith:e=>t=>e.accountsRelationships[t],currentAccount(){return this.getAccount(this.currentAccountHandle)},getAccountFollowers:e=>t=>(e.accountsFollowers[A(e,t)]||[]).map(t=>e.accounts[t]).filter(Boolean),getAccountFollowing:e=>t=>(e.accountsFollowings[A(e,t)]||[]).map(t=>e.accounts[t]).filter(Boolean),getActorIdForAccount:e=>t=>u(e,t),isFollowingUser:e=>t=>{const n=u(e,t),a=n&&e.accounts[n]?.id||t;return e.accountsRelationships[a]?.following||!1}},actions:{setCurrentAccount(e){this.currentAccountHandle=e},addAccount({actorId:e,data:t}){h(this,{actorId:e,data:t})},addRelationship({actorId:e,data:t}){this.accountsRelationships={...this.accountsRelationships,[e]:t}},setFollowersLoading({actorId:e,loading:t}){this.accountsFollowersLoading={...this.accountsFollowersLoading,[e]:t}},setFollowingsLoading({actorId:e,loading:t}){this.accountsFollowingsLoading={...this.accountsFollowingsLoading,[e]:t}},setFollowersAllLoaded({actorId:e,loaded:t}){this.accountsFollowersAllLoaded={...this.accountsFollowersAllLoaded,[e]:t}},setFollowingsAllLoaded({actorId:e,loaded:t}){this.accountsFollowingsAllLoaded={...this.accountsFollowingsAllLoaded,[e]:t}},addFollowers({account:e,data:t}){const n=A(this,e),{users:a,lastId:i}=v(this,t);this.accountsFollowers={...this.accountsFollowers,[n]:a},this.accountsFollowersMaxId={...this.accountsFollowersMaxId,[n]:i},this.accountsFollowersAllLoaded={...this.accountsFollowersAllLoaded,[n]:!1}},addFollowersAppend({account:e,data:t}){const n=A(this,e),a=[...this.accountsFollowers[n]||[]],{users:i,lastId:o}=v(this,t);this.accountsFollowers={...this.accountsFollowers,[n]:[...a,...i]},this.accountsFollowersMaxId={...this.accountsFollowersMaxId,[n]:o}},addFollowing({account:e,data:t}){const n=A(this,e),{users:a,lastId:i}=v(this,t);this.accountsFollowings={...this.accountsFollowings,[n]:a},this.accountsFollowingsMaxId={...this.accountsFollowingsMaxId,[n]:i},this.accountsFollowingsAllLoaded={...this.accountsFollowingsAllLoaded,[n]:!1}},addFollowingAppend({account:e,data:t}){const n=A(this,e),a=[...this.accountsFollowings[n]||[]],{users:i,lastId:o}=v(this,t);this.accountsFollowings={...this.accountsFollowings,[n]:[...a,...i]},this.accountsFollowingsMaxId={...this.accountsFollowingsMaxId,[n]:o}},markAccountFollowed(e){const t=u(this,e),n=this.accountsFollowings[t]||[];if(this.accountsFollowings={...this.accountsFollowings,[t]:[...n,e]},t&&this.accounts[t]){const e=this.accounts[t].id;this.accountsRelationships[e]?this.accountsRelationships={...this.accountsRelationships,[e]:{...this.accountsRelationships[e],following:!0}}:e&&(this.accountsRelationships={...this.accountsRelationships,[e]:p(e,!0)})}},markAccountUnfollowed(e){const t=u(this,e),n=this.accountsFollowings[t]||[],a=n.indexOf(e);if(-1!==a){const e=[...n];e.splice(a,1),this.accountsFollowings={...this.accountsFollowings,[t]:e}}if(t&&this.accounts[t]){const e=this.accounts[t].id;this.accountsRelationships[e]?this.accountsRelationships={...this.accountsRelationships,[e]:{...this.accountsRelationships[e],following:!1}}:e&&(this.accountsRelationships={...this.accountsRelationships,[e]:p(e,!1)})}},async fetchAccountInfo(e){try{const t=await a.Ay.get((0,r.Jv)(`apps/social/api/v1/global/account/info?account=${e}`));return this.addAccount({actorId:t.data.url,data:t.data}),t.data}catch(t){l.A.error("Failed to load account details",{error:t}),(0,c.O)().addAppError({title:(0,o.Tl)("social","Account lookup failed"),message:(0,o.Tl)("social","Could not load account {account}. The remote server may be unreachable.",{account:e})})}},async fetchAccountRelationshipInfo(e){const t=(Array.isArray(e)?e:[e]).filter(e=>null!=e);if(0===t.length)return[];try{l.A.debug("Loading relationships",{count:t.length});const e=await a.Ay.get((0,r.Jv)("apps/social/api/v1/accounts/relationships"),{params:{id:t}});return e.data.forEach(e=>{this.addRelationship({actorId:e.id,data:e})}),e.data}catch(e){l.A.error("Failed to load relationship info",{error:e}),(0,i.Qg)((0,o.Tl)("social","Could not load the relationship with this account"))}},fetchRelationship(e){return null==e||void 0!==this.getRelationshipWith(e)?Promise.resolve([]):(m.add(e),null===f&&(f=new Promise(e=>{window.setTimeout(()=>{const t=[...m];m=new Set,f=null,e(this.fetchAccountRelationshipInfo(t))},30)})),f)},async fetchPublicAccountInfo(e){try{const t=await a.Ay.get((0,r.Jv)(`apps/social/api/v1/account/${e}/info`));return this.addAccount({actorId:t.data.url,data:t.data}),t.data}catch(t){l.A.error("Failed to load public account details",{error:t}),(0,c.O)().addAppError({title:(0,o.Tl)("social","Account lookup failed"),message:(0,o.Tl)("social","Could not load account {account}. The remote server may be unreachable.",{account:e})})}},fetchCurrentAccountInfo(e){this.setCurrentAccount(e),this.fetchAccountInfo(e)},async followAccount({accountToFollow:e}){try{const t=(0,r.Jv)("/apps/social/api/v1/current/follow?account="+encodeURIComponent(e)),n=await a.Ay.put(t);if(-1===n.data.status)throw new Error("The server refused the follow");return this.markAccountFollowed(e),n}catch(t){(0,i.Qg)((0,o.Tl)("social","Could not follow {account}",{account:e})),l.A.error(`Failed to follow user ${e}`,{error:t})}},async unfollowAccount({accountToUnfollow:e}){try{const t=(0,r.Jv)("/apps/social/api/v1/current/follow?account="+encodeURIComponent(e)),n=await a.Ay.delete(t);if(-1===n.data.status)throw new Error("The server refused the unfollow");return this.markAccountUnfollowed(e),n}catch(t){return(0,i.Qg)((0,o.Tl)("social","Could not unfollow {account}",{account:e})),l.A.error(`Failed to unfollow user ${e}`,{error:t}),t}},async blockAccount({id:e}){try{const t=await a.Ay.post((0,r.Jv)(`apps/social/api/v1/accounts/${e}/block`));return t.data?.id&&(this.addRelationship({actorId:t.data.id,data:t.data}),(0,d.A)().removeStatusesByActor(t.data.id)),t.data}catch(e){(0,i.Qg)((0,o.Tl)("social","Failed to block the account")),l.A.error("Failed to block the account",{error:e})}},async unblockAccount({id:e}){try{const t=await a.Ay.post((0,r.Jv)(`apps/social/api/v1/accounts/${e}/unblock`));return t.data?.id&&this.addRelationship({actorId:t.data.id,data:t.data}),t.data}catch(e){(0,i.Qg)((0,o.Tl)("social","Failed to unblock the account")),l.A.error("Failed to unblock the account",{error:e})}},async muteAccount({id:e}){try{const t=await a.Ay.post((0,r.Jv)(`apps/social/api/v1/accounts/${e}/mute`));return t.data?.id&&(this.addRelationship({actorId:t.data.id,data:t.data}),(0,d.A)().removeStatusesByActor(t.data.id)),t.data}catch(e){(0,i.Qg)((0,o.Tl)("social","Failed to mute the account")),l.A.error("Failed to mute the account",{error:e})}},async unmuteAccount({id:e}){try{const t=await a.Ay.post((0,r.Jv)(`apps/social/api/v1/accounts/${e}/unmute`));return t.data?.id&&this.addRelationship({actorId:t.data.id,data:t.data}),t.data}catch(e){(0,i.Qg)((0,o.Tl)("social","Failed to unmute the account")),l.A.error("Failed to unmute the account",{error:e})}},async fetchAccountFollowers({account:e,maxId:t}={}){const n=A(this,e);if(!this.accountsFollowersLoading[n]){this.setFollowersLoading({actorId:n,loading:!0});try{const i={};t&&(i.max_id=t);const o=await a.Ay.get((0,r.Jv)(`apps/social/api/v1/accounts/${e}/followers`),{params:i});return t?this.addFollowersAppend({account:e,data:o.data}):this.addFollowers({account:e,data:o.data}),o.data.length<20&&this.setFollowersAllLoaded({actorId:n,loaded:!0}),o.data}catch(t){(0,i.Qg)((0,o.Tl)("social","Could not load the list of followers")),l.A.error(`Failed to fetch followers list for user ${e}`,{error:t})}finally{this.setFollowersLoading({actorId:n,loading:!1})}}},async fetchAccountFollowing({account:e,maxId:t}={}){const n=A(this,e);if(!this.accountsFollowingsLoading[n]){this.setFollowingsLoading({actorId:n,loading:!0});try{const i={};t&&(i.max_id=t);const o=await a.Ay.get((0,r.Jv)(`apps/social/api/v1/accounts/${e}/following`),{params:i});return t?this.addFollowingAppend({account:e,data:o.data}):this.addFollowing({account:e,data:o.data}),o.data.length<20&&this.setFollowingsAllLoaded({actorId:n,loaded:!0}),o.data}catch(t){(0,i.Qg)((0,o.Tl)("social","Could not load the list of followed accounts")),l.A.error(`Failed to fetch following list for user ${e}`,{error:t})}finally{this.setFollowingsLoading({actorId:n,loading:!1})}}}}})},29944(e,t,n){var a=n(96231),i=n(63360);let o=0;const r=(0,a.nY)("errors",{state:()=>({errors:[]}),getters:{appErrors:e=>e.errors,hasErrors:e=>e.errors.length>0},actions:{addError({title:e,message:t}){this.errors=[...this.errors,{id:++o,title:e,message:t}]},dismissError(e){this.errors=this.errors.filter(t=>t.id!==e)},clearErrors(){this.errors=[]},addAppError({title:e,message:t}){i.A.error("App error",{title:e,message:t}),this.addError({title:e,message:t})},dismissAppError(e){this.dismissError(e)}}});n.d(t,["O",0,r])},76783(e,t,n){var a=n(96231);n(44744),n(29944),n(85623),n(89274),n(49124);const i=(0,a.Ey)();n.d(t,["Ay",0,i])},85623(e,t,n){var a=n(70642),i=n(66981),o=n(71085),r=n(55705),s=n(96231),l=n(63360);const c=(0,s.nY)("notifications",{state:()=>({unread:0}),getters:{unreadNotifications:e=>e.unread},actions:{setUnreadNotifications(e){this.unread=e},async fetchUnreadNotifications(){try{const{data:e}=await a.Ay.get((0,r.Jv)("apps/social/api/v1/notifications/unread_count"));this.setUnreadNotifications(Number(e?.count)||0)}catch(e){l.A.error("Failed to read the unread notification count",{error:e})}},async markNotificationsRead(e){if(e){this.setUnreadNotifications(0);try{await a.Ay.post((0,r.Jv)("apps/social/api/v1/markers"),{notifications:{last_read_id:String(e)}})}catch(e){(0,i.Qg)((0,o.Tl)("social","Could not save your place in the notifications")),l.A.error("Failed to move the notifications marker",{error:e}),this.fetchUnreadNotifications()}}}}});n.d(t,["t",0,c])},89274(e,t,n){const a=(0,n(96231).nY)("settings",{state:()=>({serverData:{}}),getters:{getServerData:e=>e.serverData},actions:{setServerData(e){this.serverData=e},setServerDataEntry({key:e,value:t}){this.serverData[e]=t}}});n.d(t,["C",0,a])},49124(e,t,n){n.d(t,{A:()=>h});var a=n(70642),i=n(66981),o=n(71085),r=n(55705),s=n(96231),l=n(63360),c=n(44744);const d="social.firstPostCelebrated";function p(e,t){null!=t&&void 0!==t.id&&(e.statuses[t.id]=t,void 0!==t.reblog&&null!==t.reblog&&(e.statuses[t.reblog.id]=t.reblog))}function u(e,t){return t.map(t=>e.statuses[t]).filter(Boolean).map(e=>({status:e,at:Date.parse(e.created_at)})).sort((e,t)=>t.at-e.at).map(e=>e.status)}function A(e,t){const n=new Set(e);for(const a of t)n.has(a.id)||(n.add(a.id),e.push(a.id))}const h=(0,s.nY)("timeline",{state:()=>({statuses:{},timeline:[],parentsTimeline:[],removedFrom:{},type:"home",params:{},account:"",composerDisplayStatus:!1,searchQuery:"",firstPostCelebration:!1,firstPostCelebrated:!1}),getters:{getComposerDisplayStatus:e=>e.composerDisplayStatus,getTimeline:e=>u(e,e.timeline),getParentsTimeline:e=>u(e,e.parentsTimeline),getSearchQuery:e=>e.searchQuery,isCelebratingFirstPost:e=>e.firstPostCelebration,getTimelineIdentity:e=>JSON.stringify([e.type,e.account,e.params]),getStatus:e=>t=>e.statuses[t],getSinglePost:e=>e.statuses[e.params.singlePost],getPostFromTimeline:e=>t=>{if(void 0!==e.statuses[t])return e.statuses[t];l.A.warn("Could not find status in timeline",{statusId:t})}},actions:{addToStatuses(e){p(this,e)},addToTimeline(e){Array.isArray(e)?(e.forEach(e=>p(this,e)),A(this.timeline,e)):(e.descendants.forEach(e=>p(this,e)),e.ancestors.forEach(e=>p(this,e)),A(this.timeline,e.descendants),A(this.parentsTimeline,e.ancestors))},removeStatus(e){const t=this.timeline.indexOf(e.id);-1!==t&&this.timeline.splice(t,1);const n=this.parentsTimeline.indexOf(e.id);-1!==n&&this.parentsTimeline.splice(n,1),this.removedFrom={...this.removedFrom,[e.id]:-1!==n?"parents":"timeline"},delete this.statuses[e.id]},restoreStatus(e){p(this,e);const t="parents"===this.removedFrom?.[e.id]?"parentsTimeline":"timeline";-1===this[t].indexOf(e.id)&&this[t].push(e.id);const n={...this.removedFrom};delete n[e.id],this.removedFrom=n},forgetRemoval(e){if(void 0===this.removedFrom[e.id])return;const t={...this.removedFrom};delete t[e.id],this.removedFrom=t},removeStatusesByActor(e){const t=String(e),n=new Set(Object.values(this.statuses).filter(e=>String(e?.account?.id)===t||e?.reblog&&String(e.reblog.account?.id)===t).map(e=>e.id));if(0===n.size)return;this.timeline=this.timeline.filter(e=>!n.has(e)),this.parentsTimeline=this.parentsTimeline.filter(e=>!n.has(e));const a={...this.statuses};n.forEach(e=>delete a[e]),this.statuses=a},resetTimeline(){this.timeline=[],this.parentsTimeline=[],this.statuses={},this.removedFrom={}},setTimelineType(e){this.type=e},setTimelineParams(e){this.params=e},setComposerDisplayStatus(e){this.composerDisplayStatus=e},setAccount(e){this.account=e},setSearchQuery(e){this.searchQuery=e},startFirstPostCelebration(){this.firstPostCelebration=!0,this.firstPostCelebrated=!0},likeStatus({status:e}){const t=this.statuses[e.id];void 0!==t&&(this.statuses[e.id]={...t,favourited:!0,favourites_count:(t.favourites_count??0)+1})},unlikeStatus({status:e}){const t=this.statuses[e.id];void 0!==t&&(this.statuses[e.id]={...t,favourited:!1,favourites_count:Math.max((t.favourites_count??0)-1,0)})},boostStatus({status:e}){const t=this.statuses[e.id];void 0!==t&&(this.statuses[e.id]={...t,reblogged:!0,reblogs_count:(t.reblogs_count??0)+1})},unboostStatus({status:e}){const t=this.statuses[e.id];void 0!==t&&(this.statuses[e.id]={...t,reblogged:!1,reblogs_count:Math.max((t.reblogs_count??0)-1,0)})},updateStatusPoll({statusId:e,poll:t}){const n=this.statuses[e];void 0!==n&&(this.statuses[e]={...n,poll:t})},bookmarkStatus({status:e,bookmarked:t}){void 0!==this.statuses[e.id]&&(this.statuses[e.id]={...this.statuses[e.id],bookmarked:t})},pinStatus({status:e,pinned:t}){void 0!==this.statuses[e.id]&&(this.statuses[e.id]={...this.statuses[e.id],pinned:t})},updateStatus(e){void 0!==this.statuses[e.id]&&(this.statuses[e.id]=e)},celebrateFirstPost(){return!this.firstPostCelebration&&!this.firstPostCelebrated&&(0===(0,c.E)().currentAccount?.statuses_count&&(!function(){try{return null!==window.localStorage.getItem(d)}catch{return!1}}()&&(function(){try{window.localStorage.setItem(d,String(Date.now()))}catch{}}(),this.startFirstPostCelebration(),!0)))},endFirstPostCelebration(){this.firstPostCelebration=!1},changeTimelineType({type:e,params:t}){this.resetTimeline(),this.setTimelineType(e),this.setTimelineParams(t),this.setAccount("")},changeTimelineTypeAccount(e,t=""){this.resetTimeline(),this.setTimelineType("account"),this.setTimelineParams(""===t?{}:{media:t}),this.setAccount(e)},async describeMedia({id:e,description:t}){try{await a.Ay.put((0,r.Jv)("apps/social/api/v1/media/"+e),{description:t})}catch(e){(0,i.Qg)((0,o.Tl)("social","Could not save the description of an attachment")),l.A.error("Failed to describe a media",{error:e})}},async createMedia(e){const t=e instanceof File?e:e.file,n=e instanceof File?void 0:e.onProgress;try{const e=new FormData;e.append("file",t);const{data:i}=await a.Ay.post((0,r.Jv)("apps/social/api/v1/media"),e,{headers:{"Content-Type":"multipart/form-data"},onUploadProgress:"function"==typeof n?e=>n(e.total?Math.min(e.loaded/e.total,1):0):void 0});return l.A.info("Media created with id "+i.id),i}catch(e){(0,i.Qg)((0,o.Tl)("social","Could not upload the attachment")),l.A.error("Failed to create a media",{error:e})}},async createMediaFromFile({path:e,description:t=""}){try{const{data:n}=await a.Ay.post((0,r.Jv)("apps/social/api/v1/media/from-file"),{path:e,description:t});return l.A.info("Media created from "+e+" with id "+n.id),n}catch(t){(0,i.Qg)((0,o.Tl)("social","Could not attach {file}",{file:e})),l.A.error("Failed to attach a file from Nextcloud",{error:t})}},async post(e){try{const{data:t}=await a.Ay.post((0,r.Jv)("apps/social/api/v1/statuses"),e);return l.A.info("Post created",t.id),t}catch(e){(0,i.Qg)((0,o.Tl)("social","Could not send the post")),l.A.error("Failed to create a status",{error:e})}},async postEdit({status:e,content:t,spoiler_text:n,sensitive:s}){try{const i=await a.Ay.put((0,r.Jv)(`apps/social/api/v1/statuses/${e.id}`),{status:t,spoiler_text:n,sensitive:s});return this.updateStatus(i.data),l.A.info("Post edited",i.data.id),i}catch(e){(0,i.Qg)((0,o.Tl)("social","Could not save the changes to the post")),l.A.error("Failed to edit the status",{error:e})}},async postDelete(e){try{this.removeStatus(e);const t=await a.Ay.delete((0,r.Jv)(`apps/social/api/v1/post?id=${e.uri}`));l.A.info("Post deleted with token "+t.data.result.token)}catch(t){this.restoreStatus(e),(0,i.Qg)((0,o.Tl)("social","Could not delete the post")),l.A.error("Failed to delete the status",{error:t})}},async fetchStatus(e){try{const t=await a.Ay.get((0,r.Jv)(`apps/social/api/v1/statuses/${e}`));return this.addToStatuses(t.data),t.data}catch(t){return l.A.debug("Could not load a single status",{error:t,id:e}),null}},async postLike({status:e}){try{this.likeStatus({status:e});const t=await a.Ay.post((0,r.Jv)(`apps/social/api/v1/statuses/${e.id}/favourite`));return l.A.info("Post liked"),this.addToStatuses(t.data),t}catch(t){this.unlikeStatus({status:e}),(0,i.Qg)((0,o.Tl)("social","Could not like the post")),l.A.error("Failed to like status",{error:t})}},async postUnlike({status:e}){try{"favourites"===this.type&&this.removeStatus(e),this.unlikeStatus({status:e});const t=await a.Ay.post((0,r.Jv)(`apps/social/api/v1/statuses/${e.id}/unfavourite`));return l.A.info("Post unliked"),this.addToStatuses(t.data),this.forgetRemoval(e),t}catch(t){"favourites"===this.type?this.restoreStatus(e):this.likeStatus({status:e}),(0,i.Qg)((0,o.Tl)("social","Could not remove the like")),l.A.error("Failed to unlike status",{error:t})}},async postBoost({status:e}){try{this.boostStatus({status:e});const t=await a.Ay.post((0,r.Jv)(`apps/social/api/v1/statuses/${e.id}/reblog`));return l.A.info("Post boosted"),this.addToStatuses(t.data),t}catch(t){this.unboostStatus({status:e}),(0,i.Qg)((0,o.Tl)("social","Could not boost the post")),l.A.error("Failed to create a boost status",{error:t})}},async postUnBoost({status:e}){try{this.unboostStatus({status:e});const t=await a.Ay.post((0,r.Jv)(`apps/social/api/v1/statuses/${e.id}/unreblog`));return l.A.info("Boost deleted"),this.addToStatuses(t.data),t}catch(t){this.boostStatus({status:e}),(0,i.Qg)((0,o.Tl)("social","Could not undo the boost")),l.A.error("Failed to delete the boost",{error:t})}},async postBookmark({status:e,bookmarked:t}){this.bookmarkStatus({status:e,bookmarked:t});try{const n=t?"bookmark":"unbookmark",i=await a.Ay.post((0,r.Jv)(`apps/social/api/v1/statuses/${e.id}/${n}`));return l.A.info(t?"Post bookmarked":"Bookmark removed"),this.addToStatuses(i.data),t||"bookmarks"!==this.type||(this.removeStatus(e),this.forgetRemoval(e)),i}catch(n){this.bookmarkStatus({status:e,bookmarked:!t}),(0,i.Qg)(t?(0,o.Tl)("social","Could not bookmark the post"):(0,o.Tl)("social","Could not remove the bookmark")),l.A.error("Failed to change the bookmark",{error:n})}},async postPin({status:e,pinned:t}){this.pinStatus({status:e,pinned:t});try{const n=t?"pin":"unpin",i=await a.Ay.post((0,r.Jv)(`apps/social/api/v1/statuses/${e.id}/${n}`));return l.A.info(t?"Post pinned":"Post unpinned"),this.addToStatuses(i.data),i}catch(n){this.pinStatus({status:e,pinned:!t}),(0,i.Qg)(t?(0,o.Tl)("social","Could not pin the post"):(0,o.Tl)("social","Could not unpin the post")),l.A.error("Failed to change the pinned state",{error:n})}},refreshTimeline(){return this.fetchTimeline()},async fetchTimeline(e={}){let t;switch(void 0===e.limit&&(e.limit=15),this.type){case"account":t=(0,r.Jv)(`apps/social/api/v1/accounts/${this.account}/statuses`),"image"!==this.params.media&&"video"!==this.params.media||(e.only_media=!0,e.media_type=this.params.media);break;case"tags":t=(0,r.Jv)(`apps/social/api/v1/timelines/tag/${this.params.tag}`);break;case"list":t=(0,r.Jv)(`apps/social/api/v1/timelines/list/${this.params.id}`);break;case"single-post":t=(0,r.Jv)(`apps/social/api/v1/statuses/${this.params.id}/context`);break;case"timeline":t=(0,r.Jv)("apps/social/api/v1/timelines/public"),e.local=!0;break;case"federated":t=(0,r.Jv)("apps/social/api/v1/timelines/public");break;case"photos":case"videos":"timeline"===this.params.scope||"federated"===this.params.scope?(t=(0,r.Jv)("apps/social/api/v1/timelines/public"),"timeline"===this.params.scope&&(e.local=!0)):t=(0,r.Jv)("apps/social/api/v1/timelines/home"),e.only_media=!0,"videos"===this.type&&(e.only_video=!0);break;case"notifications":t=(0,r.Jv)("apps/social/api/v1/notifications");break;case"bookmarks":t=(0,r.Jv)("apps/social/api/v1/bookmarks");break;default:t=(0,r.Jv)(`apps/social/api/v1/timelines/${this.type}`)}const n=this.getTimelineIdentity,i=await a.Ay.get(t,{params:e});return this.getTimelineIdentity!==n?(l.A.debug("Dropped a page that belongs to a timeline no longer on screen",{identity:n}),[]):(this.addToTimeline(i.data),i.data)}}})},8173(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,"/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-a28923a1] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-details-toggle[data-v-a28923a1] {\n position: sticky;\n width: var(--default-clickable-area);\n height: var(--default-clickable-area);\n padding: calc((var(--default-clickable-area) - 16px) / 2);\n cursor: pointer;\n opacity: 0.6;\n transform: rotate(180deg);\n background-color: var(--color-main-background);\n z-index: 2000;\n top: var(--app-navigation-padding);\n inset-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n}\n.app-details-toggle--mobile[data-v-a28923a1] {\n inset-inline-start: var(--app-navigation-padding);\n}\n.app-details-toggle[data-v-a28923a1]:active, .app-details-toggle[data-v-a28923a1]:hover, .app-details-toggle[data-v-a28923a1]:focus {\n opacity: 1;\n}/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-51427d61] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-content[data-v-51427d61] {\n position: initial;\n z-index: 1000;\n flex-basis: 100vw;\n height: 100%;\n margin: 0 !important;\n background-color: var(--color-main-background);\n min-width: 0;\n}\n.app-content[data-v-51427d61]:not(.app-content--has-list) {\n overflow: auto;\n}\n.app-content-wrapper[data-v-51427d61] {\n position: relative;\n width: 100%;\n height: 100%;\n}\n.app-content-wrapper--no-split.app-content-wrapper--show-list[data-v-51427d61] .app-content-list {\n display: flex;\n}\n.app-content-wrapper--no-split.app-content-wrapper--show-list[data-v-51427d61] .app-content-details {\n display: none;\n}\n.app-content-wrapper--no-split.app-content-wrapper--show-details[data-v-51427d61] .app-content-list {\n display: none;\n}\n.app-content-wrapper--no-split.app-content-wrapper--show-details[data-v-51427d61] .app-content-details {\n display: block;\n}\n[data-v-51427d61] .splitpanes.default-theme .app-content-list {\n max-width: none;\n /* Thin scrollbar is hard to catch on resizable columns */\n scrollbar-width: auto;\n}\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__pane {\n background-color: transparent;\n transition: none;\n}\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__pane-list {\n min-width: 300px;\n position: sticky;\n}\n@media only screen and (width < 1024px) {\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__pane-list {\n display: none;\n}\n}\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__pane-details {\n overflow-y: auto;\n}\n@media only screen and (width < 1024px) {\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__pane-details {\n min-width: 100%;\n}\n}\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__splitter {\n background-color: var(--color-main-background);\n}\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__splitter::before,[data-v-51427d61] .splitpanes.default-theme .splitpanes__splitter::after {\n background-color: var(--color-border);\n}\n[data-v-51427d61] .splitpanes.default-theme.splitpanes--vertical .splitpanes__splitter {\n border-inline-start: 1px solid var(--color-border);\n}\n[data-v-51427d61] .splitpanes.default-theme.splitpanes--horizontal .splitpanes__splitter {\n border-top: 1px solid var(--color-border);\n}\n.app-content-wrapper--show-list[data-v-51427d61] .app-content-list {\n max-width: none;\n}\n.app-content-wrapper__list[data-v-51427d61] {\n height: 100%;\n}","",{version:3,sources:["webpack://./node_modules/@nextcloud/vue/dist/assets/NcAppContent.css"],names:[],mappings:"AAAA;;;EAGE;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,gBAAgB;EAChB,oCAAoC;EACpC,qCAAqC;EACrC,yDAAyD;EACzD,eAAe;EACf,YAAY;EACZ,yBAAyB;EACzB,8CAA8C;EAC9C,aAAa;EACb,kCAAkC;EAClC,2FAA2F;AAC7F;AACA;EACE,iDAAiD;AACnD;AACA;EACE,UAAU;AACZ,CAAC;;;EAGC;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,iBAAiB;EACjB,aAAa;EACb,iBAAiB;EACjB,YAAY;EACZ,oBAAoB;EACpB,8CAA8C;EAC9C,YAAY;AACd;AACA;EACE,cAAc;AAChB;AACA;EACE,kBAAkB;EAClB,WAAW;EACX,YAAY;AACd;AACA;EACE,aAAa;AACf;AACA;EACE,aAAa;AACf;AACA;EACE,aAAa;AACf;AACA;EACE,cAAc;AAChB;AACA;EACE,eAAe;EACf,yDAAyD;EACzD,qBAAqB;AACvB;AACA;EACE,6BAA6B;EAC7B,gBAAgB;AAClB;AACA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;AACA;AACA;IACI,aAAa;AACjB;AACA;AACA;EACE,gBAAgB;AAClB;AACA;AACA;IACI,eAAe;AACnB;AACA;AACA;EACE,8CAA8C;AAChD;AACA;EACE,qCAAqC;AACvC;AACA;EACE,kDAAkD;AACpD;AACA;EACE,yCAAyC;AAC3C;AACA;EACE,eAAe;AACjB;AACA;EACE,YAAY;AACd",sourcesContent:["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-a28923a1] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-details-toggle[data-v-a28923a1] {\n position: sticky;\n width: var(--default-clickable-area);\n height: var(--default-clickable-area);\n padding: calc((var(--default-clickable-area) - 16px) / 2);\n cursor: pointer;\n opacity: 0.6;\n transform: rotate(180deg);\n background-color: var(--color-main-background);\n z-index: 2000;\n top: var(--app-navigation-padding);\n inset-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n}\n.app-details-toggle--mobile[data-v-a28923a1] {\n inset-inline-start: var(--app-navigation-padding);\n}\n.app-details-toggle[data-v-a28923a1]:active, .app-details-toggle[data-v-a28923a1]:hover, .app-details-toggle[data-v-a28923a1]:focus {\n opacity: 1;\n}/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-51427d61] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-content[data-v-51427d61] {\n position: initial;\n z-index: 1000;\n flex-basis: 100vw;\n height: 100%;\n margin: 0 !important;\n background-color: var(--color-main-background);\n min-width: 0;\n}\n.app-content[data-v-51427d61]:not(.app-content--has-list) {\n overflow: auto;\n}\n.app-content-wrapper[data-v-51427d61] {\n position: relative;\n width: 100%;\n height: 100%;\n}\n.app-content-wrapper--no-split.app-content-wrapper--show-list[data-v-51427d61] .app-content-list {\n display: flex;\n}\n.app-content-wrapper--no-split.app-content-wrapper--show-list[data-v-51427d61] .app-content-details {\n display: none;\n}\n.app-content-wrapper--no-split.app-content-wrapper--show-details[data-v-51427d61] .app-content-list {\n display: none;\n}\n.app-content-wrapper--no-split.app-content-wrapper--show-details[data-v-51427d61] .app-content-details {\n display: block;\n}\n[data-v-51427d61] .splitpanes.default-theme .app-content-list {\n max-width: none;\n /* Thin scrollbar is hard to catch on resizable columns */\n scrollbar-width: auto;\n}\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__pane {\n background-color: transparent;\n transition: none;\n}\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__pane-list {\n min-width: 300px;\n position: sticky;\n}\n@media only screen and (width < 1024px) {\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__pane-list {\n display: none;\n}\n}\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__pane-details {\n overflow-y: auto;\n}\n@media only screen and (width < 1024px) {\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__pane-details {\n min-width: 100%;\n}\n}\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__splitter {\n background-color: var(--color-main-background);\n}\n[data-v-51427d61] .splitpanes.default-theme .splitpanes__splitter::before,[data-v-51427d61] .splitpanes.default-theme .splitpanes__splitter::after {\n background-color: var(--color-border);\n}\n[data-v-51427d61] .splitpanes.default-theme.splitpanes--vertical .splitpanes__splitter {\n border-inline-start: 1px solid var(--color-border);\n}\n[data-v-51427d61] .splitpanes.default-theme.splitpanes--horizontal .splitpanes__splitter {\n border-top: 1px solid var(--color-border);\n}\n.app-content-wrapper--show-list[data-v-51427d61] .app-content-list {\n max-width: none;\n}\n.app-content-wrapper__list[data-v-51427d61] {\n height: 100%;\n}"],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},3370(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,"/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-e8177cc7] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation-toggle-wrapper[data-v-e8177cc7] {\n position: absolute;\n top: var(--app-navigation-padding);\n inset-inline-end: calc(0px - var(--app-navigation-padding));\n margin-inline-end: calc(-1 * var(--default-clickable-area));\n}\nbutton.app-navigation-toggle[data-v-e8177cc7] {\n background-color: var(--color-main-background);\n}/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation,\n.app-content {\n /** Distance of the app navigation toggle and the first navigation item to the top edge of the app content container */\n --app-navigation-padding: calc(var(--default-grid-baseline, 4px) * 2);\n}/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-37908cd4] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation[data-v-37908cd4] {\n --color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-text-maxcontrast-default));\n transition: transform var(--animation-slow), margin var(--animation-slow);\n width: 300px;\n --app-navigation-max-width: calc(100vw - (var(--app-navigation-padding) + var(--default-clickable-area) + var(--default-grid-baseline)));\n max-width: var(--app-navigation-max-width);\n position: relative;\n top: 0;\n inset-inline-start: 0;\n padding: 0px;\n z-index: 1800;\n height: 100%;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n flex-grow: 0;\n flex-shrink: 0;\n background-color: transparent;\n}\n.app-navigation--legacy[data-v-37908cd4] {\n background-color: var(--color-main-background-blur, var(--color-main-background));\n backdrop-filter: var(--filter-background-blur, none);\n}\n.app-navigation--closed[data-v-37908cd4] {\n margin-inline-start: calc(-1 * min(300px, var(--app-navigation-max-width)));\n}\n.app-navigation__search[data-v-37908cd4] {\n width: 100%;\n}\n.app-navigation__body[data-v-37908cd4] {\n overflow-y: scroll;\n}\n.app-navigation__content > ul[data-v-37908cd4] {\n position: relative;\n width: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: var(--default-grid-baseline, 4px);\n padding: var(--app-navigation-padding);\n}\n.app-navigation .app-navigation__list[data-v-37908cd4] {\n height: 100%;\n}\n.app-navigation__body--no-list[data-v-37908cd4] {\n flex: 1 1 auto;\n overflow: auto;\n height: 100%;\n}\n.app-navigation__content[data-v-37908cd4] {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n[data-themes*=highcontrast] .app-navigation[data-v-37908cd4] {\n border-inline-end: 1px solid var(--color-border);\n}\n@media only screen and (width < 1024px) {\n.app-navigation[data-v-37908cd4] {\n position: absolute;\n border-inline-end: 1px solid var(--color-border);\n background-color: var(--color-main-background-blur, var(--color-main-background));\n backdrop-filter: var(--filter-background-blur, none);\n}\n}\n@media only screen and (max-width: 512px) {\n.app-navigation[data-v-37908cd4] {\n z-index: 1400;\n}\n}","",{version:3,sources:["webpack://./node_modules/@nextcloud/vue/dist/assets/NcAppNavigation.css"],names:[],mappings:"AAAA;;;EAGE;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,kBAAkB;EAClB,kCAAkC;EAClC,2DAA2D;EAC3D,2DAA2D;AAC7D;AACA;EACE,8CAA8C;AAChD,CAAC;;;EAGC;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;;EAEE,sHAAsH;EACtH,qEAAqE;AACvE,CAAC;;;EAGC;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,8GAA8G;EAC9G,yEAAyE;EACzE,YAAY;EACZ,wIAAwI;EACxI,0CAA0C;EAC1C,kBAAkB;EAClB,MAAM;EACN,qBAAqB;EACrB,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;EACjB,YAAY;EACZ,cAAc;EACd,6BAA6B;AAC/B;AACA;EACE,iFAAiF;EACjF,oDAAoD;AACtD;AACA;EACE,2EAA2E;AAC7E;AACA;EACE,WAAW;AACb;AACA;EACE,kBAAkB;AACpB;AACA;EACE,kBAAkB;EAClB,WAAW;EACX,kBAAkB;EAClB,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,sCAAsC;EACtC,sCAAsC;AACxC;AACA;EACE,YAAY;AACd;AACA;EACE,cAAc;EACd,cAAc;EACd,YAAY;AACd;AACA;EACE,YAAY;EACZ,aAAa;EACb,sBAAsB;AACxB;AACA;EACE,gDAAgD;AAClD;AACA;AACA;IACI,kBAAkB;IAClB,gDAAgD;IAChD,iFAAiF;IACjF,oDAAoD;AACxD;AACA;AACA;AACA;IACI,aAAa;AACjB;AACA",sourcesContent:["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-e8177cc7] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation-toggle-wrapper[data-v-e8177cc7] {\n position: absolute;\n top: var(--app-navigation-padding);\n inset-inline-end: calc(0px - var(--app-navigation-padding));\n margin-inline-end: calc(-1 * var(--default-clickable-area));\n}\nbutton.app-navigation-toggle[data-v-e8177cc7] {\n background-color: var(--color-main-background);\n}/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation,\n.app-content {\n /** Distance of the app navigation toggle and the first navigation item to the top edge of the app content container */\n --app-navigation-padding: calc(var(--default-grid-baseline, 4px) * 2);\n}/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-37908cd4] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation[data-v-37908cd4] {\n --color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-text-maxcontrast-default));\n transition: transform var(--animation-slow), margin var(--animation-slow);\n width: 300px;\n --app-navigation-max-width: calc(100vw - (var(--app-navigation-padding) + var(--default-clickable-area) + var(--default-grid-baseline)));\n max-width: var(--app-navigation-max-width);\n position: relative;\n top: 0;\n inset-inline-start: 0;\n padding: 0px;\n z-index: 1800;\n height: 100%;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n flex-grow: 0;\n flex-shrink: 0;\n background-color: transparent;\n}\n.app-navigation--legacy[data-v-37908cd4] {\n background-color: var(--color-main-background-blur, var(--color-main-background));\n backdrop-filter: var(--filter-background-blur, none);\n}\n.app-navigation--closed[data-v-37908cd4] {\n margin-inline-start: calc(-1 * min(300px, var(--app-navigation-max-width)));\n}\n.app-navigation__search[data-v-37908cd4] {\n width: 100%;\n}\n.app-navigation__body[data-v-37908cd4] {\n overflow-y: scroll;\n}\n.app-navigation__content > ul[data-v-37908cd4] {\n position: relative;\n width: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: var(--default-grid-baseline, 4px);\n padding: var(--app-navigation-padding);\n}\n.app-navigation .app-navigation__list[data-v-37908cd4] {\n height: 100%;\n}\n.app-navigation__body--no-list[data-v-37908cd4] {\n flex: 1 1 auto;\n overflow: auto;\n height: 100%;\n}\n.app-navigation__content[data-v-37908cd4] {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n[data-themes*=highcontrast] .app-navigation[data-v-37908cd4] {\n border-inline-end: 1px solid var(--color-border);\n}\n@media only screen and (width < 1024px) {\n.app-navigation[data-v-37908cd4] {\n position: absolute;\n border-inline-end: 1px solid var(--color-border);\n background-color: var(--color-main-background-blur, var(--color-main-background));\n backdrop-filter: var(--filter-background-blur, none);\n}\n}\n@media only screen and (max-width: 512px) {\n.app-navigation[data-v-37908cd4] {\n z-index: 1400;\n}\n}"],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},66458(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,"/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-f0e411c2] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation-caption[data-v-f0e411c2] {\n display: flex;\n justify-content: space-between;\n}\n.app-navigation-caption--heading[data-v-f0e411c2] {\n padding: var(--app-navigation-padding);\n}\n.app-navigation-caption--heading[data-v-f0e411c2]:not(:first-child):not(:last-child) {\n padding: 0 var(--app-navigation-padding);\n}\n.app-navigation-caption__name[data-v-f0e411c2] {\n font-weight: var(--font-weight-heading, bold);\n color: var(--color-main-text);\n font-size: var(--default-font-size);\n line-height: var(--default-clickable-area);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n box-shadow: none !important;\n flex-shrink: 0;\n padding-block: 0;\n padding-inline: calc(var(--default-grid-baseline, 4px) * 2) 0;\n margin-top: 0px;\n margin-bottom: var(--default-grid-baseline);\n}\n.app-navigation-caption__actions[data-v-f0e411c2] {\n flex: 0 0 var(--default-clickable-area);\n}\n.app-navigation-caption[data-v-f0e411c2]:not(:first-child) {\n margin-top: calc(var(--default-clickable-area) / 2);\n}","",{version:3,sources:["webpack://./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationCaption.css"],names:[],mappings:"AAAA;;;EAGE;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,aAAa;EACb,8BAA8B;AAChC;AACA;EACE,sCAAsC;AACxC;AACA;EACE,wCAAwC;AAC1C;AACA;EACE,6CAA6C;EAC7C,6BAA6B;EAC7B,mCAAmC;EACnC,0CAA0C;EAC1C,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;EACvB,2BAA2B;EAC3B,cAAc;EACd,gBAAgB;EAChB,6DAA6D;EAC7D,eAAe;EACf,2CAA2C;AAC7C;AACA;EACE,uCAAuC;AACzC;AACA;EACE,mDAAmD;AACrD",sourcesContent:["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-f0e411c2] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation-caption[data-v-f0e411c2] {\n display: flex;\n justify-content: space-between;\n}\n.app-navigation-caption--heading[data-v-f0e411c2] {\n padding: var(--app-navigation-padding);\n}\n.app-navigation-caption--heading[data-v-f0e411c2]:not(:first-child):not(:last-child) {\n padding: 0 var(--app-navigation-padding);\n}\n.app-navigation-caption__name[data-v-f0e411c2] {\n font-weight: var(--font-weight-heading, bold);\n color: var(--color-main-text);\n font-size: var(--default-font-size);\n line-height: var(--default-clickable-area);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n box-shadow: none !important;\n flex-shrink: 0;\n padding-block: 0;\n padding-inline: calc(var(--default-grid-baseline, 4px) * 2) 0;\n margin-top: 0px;\n margin-bottom: var(--default-grid-baseline);\n}\n.app-navigation-caption__actions[data-v-f0e411c2] {\n flex: 0 0 var(--default-clickable-area);\n}\n.app-navigation-caption[data-v-f0e411c2]:not(:first-child) {\n margin-top: calc(var(--default-clickable-area) / 2);\n}"],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},66923(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,'/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-cfbd3794] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.icon-collapse[data-v-cfbd3794] {\n position: relative;\n inset-inline-end: 0;\n}\n.icon-collapse[data-v-cfbd3794]:hover {\n background-color: var(--color-background-dark) !important;\n}\n.icon-collapse--active[data-v-cfbd3794]:hover {\n background-color: var(--color-primary-element) !important;\n}/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-6cae7342] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n\n/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n.app-navigation-entry[data-v-6cae7342] {\n position: relative;\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n width: 100%;\n min-height: var(--default-clickable-area);\n transition: background-color var(--animation-quick) ease-in-out;\n transition: background-color 200ms ease-in-out;\n border-radius: var(--border-radius-element);\n}\n.app-navigation-entry-wrapper[data-v-6cae7342] {\n position: relative;\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n width: 100%;\n}\n.app-navigation-entry-wrapper.app-navigation-entry--collapsible:not(.app-navigation-entry--opened) > ul[data-v-6cae7342] {\n display: none;\n}\n.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-6cae7342] {\n background-color: color-mix(in srgb, var(--color-primary-element) 16%, transparent) !important;\n}\n.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-6cae7342]:hover {\n background-color: color-mix(in srgb, var(--color-primary-element) 22%, transparent) !important;\n}\n.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-6cae7342],\n.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-6cae7342] {\n color: var(--color-main-text) !important;\n}\n.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-6cae7342]:not(.app-navigation-entry--editing)::before {\n content: "";\n position: absolute;\n inset-block: calc(var(--default-grid-baseline, 4px) * 2);\n inset-inline-start: 0;\n width: 3px;\n background-color: var(--color-primary-element);\n border-radius: 999px;\n animation: nc-nav-stripe-in-6cae7342 var(--animation-quick, 200ms) ease-out;\n}\n.app-navigation-entry.app-navigation-entry--legacy.active[data-v-6cae7342] {\n background-color: var(--color-primary-element) !important;\n}\n.app-navigation-entry.app-navigation-entry--legacy.active[data-v-6cae7342]:hover {\n background-color: var(--color-primary-element-hover) !important;\n}\n.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-link[data-v-6cae7342], .app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-button[data-v-6cae7342] {\n color: var(--color-primary-element-text) !important;\n}\n.app-navigation-entry[data-v-6cae7342]:focus-within, .app-navigation-entry[data-v-6cae7342]:hover {\n background-color: var(--color-background-hover);\n}\n.app-navigation-entry[data-v-6cae7342]:not(.app-navigation-entry--legacy):focus-within, .app-navigation-entry[data-v-6cae7342]:not(.app-navigation-entry--legacy):hover {\n background-color: color-mix(in srgb, var(--color-primary-element) 8%, transparent);\n}\n.app-navigation-entry.active .app-navigation-entry__children[data-v-6cae7342], .app-navigation-entry:focus-within .app-navigation-entry__children[data-v-6cae7342], .app-navigation-entry:hover .app-navigation-entry__children[data-v-6cae7342] {\n background-color: var(--color-main-background);\n}\n.app-navigation-entry.active .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6cae7342], .app-navigation-entry.app-navigation-entry--deleted .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6cae7342], .app-navigation-entry:focus .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6cae7342], .app-navigation-entry:focus-within .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6cae7342], .app-navigation-entry:hover .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6cae7342] {\n position: relative;\n opacity: 1;\n pointer-events: auto;\n}\n.app-navigation-entry .app-navigation-entry__actions[data-v-6cae7342]:hover .button-vue {\n background-color: var(--color-background-dark) !important;\n}\n.app-navigation-entry:not(.app-navigation-entry--legacy).active .app-navigation-entry__actions[data-v-6cae7342]:hover .button-vue {\n background-color: var(--color-background-dark) !important;\n}\n.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry__actions[data-v-6cae7342]:hover .button-vue {\n background-color: var(--color-primary-element) !important;\n}\n.app-navigation-entry[data-v-6cae7342] {\n /* hide deletion/collapse of subitems */\n}\n.app-navigation-entry.app-navigation-entry--deleted > ul[data-v-6cae7342] {\n display: none;\n}\n.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-6cae7342], .app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-6cae7342] {\n padding-inline-end: calc((var(--default-clickable-area) - 16px) / 2);\n}\n.app-navigation-entry .app-navigation-entry-link[data-v-6cae7342], .app-navigation-entry .app-navigation-entry-button[data-v-6cae7342] {\n z-index: 100; /* above the bullet to allow click*/\n display: flex;\n overflow: hidden;\n flex: 1 1 0;\n min-height: var(--default-clickable-area);\n padding: 0;\n white-space: nowrap;\n color: var(--color-main-text);\n font-weight: 500;\n background-repeat: no-repeat;\n background-position: calc((var(--default-clickable-area) - 16px) / 2) center;\n background-size: 16px 16px;\n line-height: var(--default-clickable-area);\n}\n.app-navigation-entry .app-navigation-entry-link .app-navigation-entry-icon[data-v-6cae7342], .app-navigation-entry .app-navigation-entry-button .app-navigation-entry-icon[data-v-6cae7342] {\n display: flex;\n align-items: center;\n flex: 0 0 var(--default-clickable-area);\n justify-content: center;\n width: var(--default-clickable-area);\n height: var(--default-clickable-area);\n background-size: 16px 16px;\n background-repeat: no-repeat;\n background-position: calc((var(--default-clickable-area) - 16px) / 2) center;\n}\n.app-navigation-entry .app-navigation-entry-link .app-navigation-entry__name[data-v-6cae7342], .app-navigation-entry .app-navigation-entry-button .app-navigation-entry__name[data-v-6cae7342] {\n overflow: hidden;\n max-width: 100%;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-weight: var(--font-weight-element, normal);\n}\n.app-navigation-entry .app-navigation-entry-link .editingContainer[data-v-6cae7342], .app-navigation-entry .app-navigation-entry-button .editingContainer[data-v-6cae7342] {\n width: calc(100% - var(--default-clickable-area));\n margin: auto;\n}\n.app-navigation-entry .app-navigation-entry-link[data-v-6cae7342]:focus-visible, .app-navigation-entry .app-navigation-entry-button[data-v-6cae7342]:focus-visible {\n box-shadow: 0 0 0 4px var(--color-main-background);\n outline: 2px solid var(--color-main-text);\n border-radius: var(--border-radius-element);\n}\n\n/* Second level nesting for lists */\n.app-navigation-entry__children[data-v-6cae7342] {\n --app-navigation-item-child-offset: 10px;\n position: relative;\n display: flex;\n flex: 0 1 auto;\n flex-direction: column;\n width: 100%;\n gap: var(--default-grid-baseline, 4px);\n padding-inline-start: var(--app-navigation-item-child-offset);\n}\n.app-navigation-entry__children .app-navigation-entry[data-v-6cae7342] {\n display: inline-flex;\n flex-wrap: wrap;\n}\n.app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children[data-v-6cae7342] {\n --app-navigation-item-child-offset: 0;\n}\n\n/* Deleted entries */\n.app-navigation-entry__deleted[data-v-6cae7342] {\n display: inline-flex;\n flex: 1 1 0;\n padding-inline-start: calc(var(--default-clickable-area) - (var(--default-clickable-area) - 16px) / 2) !important;\n}\n.app-navigation-entry__deleted .app-navigation-entry__deleted-description[data-v-6cae7342] {\n position: relative;\n overflow: hidden;\n flex: 1 1 0;\n white-space: nowrap;\n text-overflow: ellipsis;\n line-height: var(--default-clickable-area);\n}\n\n/* counter and actions */\n.app-navigation-entry__utils[data-v-6cae7342] {\n display: flex;\n min-width: var(--default-clickable-area);\n align-items: center;\n flex: 0 1 auto;\n justify-content: flex-end;\n}\n.app-navigation-entry__utils.app-navigation-entry__utils--display-actions .action-item.app-navigation-entry__actions[data-v-6cae7342] {\n position: relative;\n opacity: 1;\n pointer-events: auto;\n}\n.app-navigation-entry__utils[data-v-6cae7342] {\n /* counter */\n}\n.app-navigation-entry__utils .app-navigation-entry__counter-wrapper[data-v-6cae7342] {\n margin-inline-end: calc(var(--default-grid-baseline) * 2);\n display: flex;\n align-items: center;\n flex: 0 1 auto;\n}\n.app-navigation-entry__utils[data-v-6cae7342] {\n /* actions */\n}\n.app-navigation-entry__utils .action-item.app-navigation-entry__actions[data-v-6cae7342] {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n/* editing state */\n.app-navigation-entry--editing .app-navigation-entry-edit[data-v-6cae7342] {\n z-index: 250;\n opacity: 1;\n}\n\n/* deleted state */\n.app-navigation-entry--deleted .app-navigation-entry-deleted[data-v-6cae7342] {\n z-index: 250;\n transform: translateX(0);\n}\n\n/* pinned state */\n.app-navigation-entry--pinned[data-v-6cae7342] {\n order: 2;\n margin-top: auto;\n}\n.app-navigation-entry--pinned ~ .app-navigation-entry--pinned[data-v-6cae7342] {\n margin-top: 0;\n}\n[data-themes*=highcontrast] .app-navigation-entry[data-v-6cae7342]:active {\n background-color: var(--color-primary-element-light-hover) !important;\n}\n@keyframes nc-nav-stripe-in-6cae7342 {\nfrom {\n transform: scaleY(0);\n opacity: 0;\n}\nto {\n transform: scaleY(1);\n opacity: 1;\n}\n}',"",{version:3,sources:["webpack://./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationItem.css"],names:[],mappings:"AAAA;;;EAGE;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,kBAAkB;EAClB,mBAAmB;AACrB;AACA;EACE,yDAAyD;AAC3D;AACA;EACE,yDAAyD;AAC3D,CAAC;;;EAGC;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;;;EAGE;AACF;EACE,kBAAkB;EAClB,aAAa;EACb,cAAc;EACd,eAAe;EACf,WAAW;EACX,yCAAyC;EACzC,+DAA+D;EAC/D,8CAA8C;EAC9C,2CAA2C;AAC7C;AACA;EACE,kBAAkB;EAClB,aAAa;EACb,cAAc;EACd,eAAe;EACf,WAAW;AACb;AACA;EACE,aAAa;AACf;AACA;EACE,8FAA8F;AAChG;AACA;EACE,8FAA8F;AAChG;AACA;;EAEE,wCAAwC;AAC1C;AACA;EACE,WAAW;EACX,kBAAkB;EAClB,wDAAwD;EACxD,qBAAqB;EACrB,UAAU;EACV,8CAA8C;EAC9C,oBAAoB;EACpB,2EAA2E;AAC7E;AACA;EACE,yDAAyD;AAC3D;AACA;EACE,+DAA+D;AACjE;AACA;EACE,mDAAmD;AACrD;AACA;EACE,+CAA+C;AACjD;AACA;EACE,kFAAkF;AACpF;AACA;EACE,8CAA8C;AAChD;AACA;EACE,kBAAkB;EAClB,UAAU;EACV,oBAAoB;AACtB;AACA;EACE,yDAAyD;AAC3D;AACA;EACE,yDAAyD;AAC3D;AACA;EACE,yDAAyD;AAC3D;AACA;EACE,uCAAuC;AACzC;AACA;EACE,aAAa;AACf;AACA;EACE,oEAAoE;AACtE;AACA;EACE,YAAY,EAAE,mCAAmC;EACjD,aAAa;EACb,gBAAgB;EAChB,WAAW;EACX,yCAAyC;EACzC,UAAU;EACV,mBAAmB;EACnB,6BAA6B;EAC7B,gBAAgB;EAChB,4BAA4B;EAC5B,4EAA4E;EAC5E,0BAA0B;EAC1B,0CAA0C;AAC5C;AACA;EACE,aAAa;EACb,mBAAmB;EACnB,uCAAuC;EACvC,uBAAuB;EACvB,oCAAoC;EACpC,qCAAqC;EACrC,0BAA0B;EAC1B,4BAA4B;EAC5B,4EAA4E;AAC9E;AACA;EACE,gBAAgB;EAChB,eAAe;EACf,mBAAmB;EACnB,uBAAuB;EACvB,+CAA+C;AACjD;AACA;EACE,iDAAiD;EACjD,YAAY;AACd;AACA;EACE,kDAAkD;EAClD,yCAAyC;EACzC,2CAA2C;AAC7C;;AAEA,mCAAmC;AACnC;EACE,wCAAwC;EACxC,kBAAkB;EAClB,aAAa;EACb,cAAc;EACd,sBAAsB;EACtB,WAAW;EACX,sCAAsC;EACtC,6DAA6D;AAC/D;AACA;EACE,oBAAoB;EACpB,eAAe;AACjB;AACA;EACE,qCAAqC;AACvC;;AAEA,oBAAoB;AACpB;EACE,oBAAoB;EACpB,WAAW;EACX,iHAAiH;AACnH;AACA;EACE,kBAAkB;EAClB,gBAAgB;EAChB,WAAW;EACX,mBAAmB;EACnB,uBAAuB;EACvB,0CAA0C;AAC5C;;AAEA,wBAAwB;AACxB;EACE,aAAa;EACb,wCAAwC;EACxC,mBAAmB;EACnB,cAAc;EACd,yBAAyB;AAC3B;AACA;EACE,kBAAkB;EAClB,UAAU;EACV,oBAAoB;AACtB;AACA;EACE,YAAY;AACd;AACA;EACE,yDAAyD;EACzD,aAAa;EACb,mBAAmB;EACnB,cAAc;AAChB;AACA;EACE,YAAY;AACd;AACA;EACE,kBAAkB;EAClB,UAAU;EACV,oBAAoB;AACtB;;AAEA,kBAAkB;AAClB;EACE,YAAY;EACZ,UAAU;AACZ;;AAEA,kBAAkB;AAClB;EACE,YAAY;EACZ,wBAAwB;AAC1B;;AAEA,iBAAiB;AACjB;EACE,QAAQ;EACR,gBAAgB;AAClB;AACA;EACE,aAAa;AACf;AACA;EACE,qEAAqE;AACvE;AACA;AACA;IACI,oBAAoB;IACpB,UAAU;AACd;AACA;IACI,oBAAoB;IACpB,UAAU;AACd;AACA",sourcesContent:['/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-cfbd3794] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.icon-collapse[data-v-cfbd3794] {\n position: relative;\n inset-inline-end: 0;\n}\n.icon-collapse[data-v-cfbd3794]:hover {\n background-color: var(--color-background-dark) !important;\n}\n.icon-collapse--active[data-v-cfbd3794]:hover {\n background-color: var(--color-primary-element) !important;\n}/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-6cae7342] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n\n/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n.app-navigation-entry[data-v-6cae7342] {\n position: relative;\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n width: 100%;\n min-height: var(--default-clickable-area);\n transition: background-color var(--animation-quick) ease-in-out;\n transition: background-color 200ms ease-in-out;\n border-radius: var(--border-radius-element);\n}\n.app-navigation-entry-wrapper[data-v-6cae7342] {\n position: relative;\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n width: 100%;\n}\n.app-navigation-entry-wrapper.app-navigation-entry--collapsible:not(.app-navigation-entry--opened) > ul[data-v-6cae7342] {\n display: none;\n}\n.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-6cae7342] {\n background-color: color-mix(in srgb, var(--color-primary-element) 16%, transparent) !important;\n}\n.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-6cae7342]:hover {\n background-color: color-mix(in srgb, var(--color-primary-element) 22%, transparent) !important;\n}\n.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-6cae7342],\n.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-6cae7342] {\n color: var(--color-main-text) !important;\n}\n.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-6cae7342]:not(.app-navigation-entry--editing)::before {\n content: "";\n position: absolute;\n inset-block: calc(var(--default-grid-baseline, 4px) * 2);\n inset-inline-start: 0;\n width: 3px;\n background-color: var(--color-primary-element);\n border-radius: 999px;\n animation: nc-nav-stripe-in-6cae7342 var(--animation-quick, 200ms) ease-out;\n}\n.app-navigation-entry.app-navigation-entry--legacy.active[data-v-6cae7342] {\n background-color: var(--color-primary-element) !important;\n}\n.app-navigation-entry.app-navigation-entry--legacy.active[data-v-6cae7342]:hover {\n background-color: var(--color-primary-element-hover) !important;\n}\n.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-link[data-v-6cae7342], .app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-button[data-v-6cae7342] {\n color: var(--color-primary-element-text) !important;\n}\n.app-navigation-entry[data-v-6cae7342]:focus-within, .app-navigation-entry[data-v-6cae7342]:hover {\n background-color: var(--color-background-hover);\n}\n.app-navigation-entry[data-v-6cae7342]:not(.app-navigation-entry--legacy):focus-within, .app-navigation-entry[data-v-6cae7342]:not(.app-navigation-entry--legacy):hover {\n background-color: color-mix(in srgb, var(--color-primary-element) 8%, transparent);\n}\n.app-navigation-entry.active .app-navigation-entry__children[data-v-6cae7342], .app-navigation-entry:focus-within .app-navigation-entry__children[data-v-6cae7342], .app-navigation-entry:hover .app-navigation-entry__children[data-v-6cae7342] {\n background-color: var(--color-main-background);\n}\n.app-navigation-entry.active .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6cae7342], .app-navigation-entry.app-navigation-entry--deleted .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6cae7342], .app-navigation-entry:focus .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6cae7342], .app-navigation-entry:focus-within .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6cae7342], .app-navigation-entry:hover .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6cae7342] {\n position: relative;\n opacity: 1;\n pointer-events: auto;\n}\n.app-navigation-entry .app-navigation-entry__actions[data-v-6cae7342]:hover .button-vue {\n background-color: var(--color-background-dark) !important;\n}\n.app-navigation-entry:not(.app-navigation-entry--legacy).active .app-navigation-entry__actions[data-v-6cae7342]:hover .button-vue {\n background-color: var(--color-background-dark) !important;\n}\n.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry__actions[data-v-6cae7342]:hover .button-vue {\n background-color: var(--color-primary-element) !important;\n}\n.app-navigation-entry[data-v-6cae7342] {\n /* hide deletion/collapse of subitems */\n}\n.app-navigation-entry.app-navigation-entry--deleted > ul[data-v-6cae7342] {\n display: none;\n}\n.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-6cae7342], .app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-6cae7342] {\n padding-inline-end: calc((var(--default-clickable-area) - 16px) / 2);\n}\n.app-navigation-entry .app-navigation-entry-link[data-v-6cae7342], .app-navigation-entry .app-navigation-entry-button[data-v-6cae7342] {\n z-index: 100; /* above the bullet to allow click*/\n display: flex;\n overflow: hidden;\n flex: 1 1 0;\n min-height: var(--default-clickable-area);\n padding: 0;\n white-space: nowrap;\n color: var(--color-main-text);\n font-weight: 500;\n background-repeat: no-repeat;\n background-position: calc((var(--default-clickable-area) - 16px) / 2) center;\n background-size: 16px 16px;\n line-height: var(--default-clickable-area);\n}\n.app-navigation-entry .app-navigation-entry-link .app-navigation-entry-icon[data-v-6cae7342], .app-navigation-entry .app-navigation-entry-button .app-navigation-entry-icon[data-v-6cae7342] {\n display: flex;\n align-items: center;\n flex: 0 0 var(--default-clickable-area);\n justify-content: center;\n width: var(--default-clickable-area);\n height: var(--default-clickable-area);\n background-size: 16px 16px;\n background-repeat: no-repeat;\n background-position: calc((var(--default-clickable-area) - 16px) / 2) center;\n}\n.app-navigation-entry .app-navigation-entry-link .app-navigation-entry__name[data-v-6cae7342], .app-navigation-entry .app-navigation-entry-button .app-navigation-entry__name[data-v-6cae7342] {\n overflow: hidden;\n max-width: 100%;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-weight: var(--font-weight-element, normal);\n}\n.app-navigation-entry .app-navigation-entry-link .editingContainer[data-v-6cae7342], .app-navigation-entry .app-navigation-entry-button .editingContainer[data-v-6cae7342] {\n width: calc(100% - var(--default-clickable-area));\n margin: auto;\n}\n.app-navigation-entry .app-navigation-entry-link[data-v-6cae7342]:focus-visible, .app-navigation-entry .app-navigation-entry-button[data-v-6cae7342]:focus-visible {\n box-shadow: 0 0 0 4px var(--color-main-background);\n outline: 2px solid var(--color-main-text);\n border-radius: var(--border-radius-element);\n}\n\n/* Second level nesting for lists */\n.app-navigation-entry__children[data-v-6cae7342] {\n --app-navigation-item-child-offset: 10px;\n position: relative;\n display: flex;\n flex: 0 1 auto;\n flex-direction: column;\n width: 100%;\n gap: var(--default-grid-baseline, 4px);\n padding-inline-start: var(--app-navigation-item-child-offset);\n}\n.app-navigation-entry__children .app-navigation-entry[data-v-6cae7342] {\n display: inline-flex;\n flex-wrap: wrap;\n}\n.app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children[data-v-6cae7342] {\n --app-navigation-item-child-offset: 0;\n}\n\n/* Deleted entries */\n.app-navigation-entry__deleted[data-v-6cae7342] {\n display: inline-flex;\n flex: 1 1 0;\n padding-inline-start: calc(var(--default-clickable-area) - (var(--default-clickable-area) - 16px) / 2) !important;\n}\n.app-navigation-entry__deleted .app-navigation-entry__deleted-description[data-v-6cae7342] {\n position: relative;\n overflow: hidden;\n flex: 1 1 0;\n white-space: nowrap;\n text-overflow: ellipsis;\n line-height: var(--default-clickable-area);\n}\n\n/* counter and actions */\n.app-navigation-entry__utils[data-v-6cae7342] {\n display: flex;\n min-width: var(--default-clickable-area);\n align-items: center;\n flex: 0 1 auto;\n justify-content: flex-end;\n}\n.app-navigation-entry__utils.app-navigation-entry__utils--display-actions .action-item.app-navigation-entry__actions[data-v-6cae7342] {\n position: relative;\n opacity: 1;\n pointer-events: auto;\n}\n.app-navigation-entry__utils[data-v-6cae7342] {\n /* counter */\n}\n.app-navigation-entry__utils .app-navigation-entry__counter-wrapper[data-v-6cae7342] {\n margin-inline-end: calc(var(--default-grid-baseline) * 2);\n display: flex;\n align-items: center;\n flex: 0 1 auto;\n}\n.app-navigation-entry__utils[data-v-6cae7342] {\n /* actions */\n}\n.app-navigation-entry__utils .action-item.app-navigation-entry__actions[data-v-6cae7342] {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n/* editing state */\n.app-navigation-entry--editing .app-navigation-entry-edit[data-v-6cae7342] {\n z-index: 250;\n opacity: 1;\n}\n\n/* deleted state */\n.app-navigation-entry--deleted .app-navigation-entry-deleted[data-v-6cae7342] {\n z-index: 250;\n transform: translateX(0);\n}\n\n/* pinned state */\n.app-navigation-entry--pinned[data-v-6cae7342] {\n order: 2;\n margin-top: auto;\n}\n.app-navigation-entry--pinned ~ .app-navigation-entry--pinned[data-v-6cae7342] {\n margin-top: 0;\n}\n[data-themes*=highcontrast] .app-navigation-entry[data-v-6cae7342]:active {\n background-color: var(--color-primary-element-light-hover) !important;\n}\n@keyframes nc-nav-stripe-in-6cae7342 {\nfrom {\n transform: scaleY(0);\n opacity: 0;\n}\nto {\n transform: scaleY(1);\n opacity: 1;\n}\n}'],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},55730(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,"/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-d72957ed] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation-list[data-v-d72957ed] {\n position: relative;\n width: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: var(--default-grid-baseline, 4px);\n padding: var(--app-navigation-padding);\n}","",{version:3,sources:["webpack://./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationList.css"],names:[],mappings:"AAAA;;;EAGE;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,kBAAkB;EAClB,WAAW;EACX,kBAAkB;EAClB,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,sCAAsC;EACtC,sCAAsC;AACxC",sourcesContent:["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-d72957ed] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation-list[data-v-d72957ed] {\n position: relative;\n width: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: var(--default-grid-baseline, 4px);\n padding: var(--app-navigation-padding);\n}"],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},60922(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,"/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-191b6717] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation-search[data-v-191b6717] {\n display: flex;\n gap: var(--app-navigation-padding);\n padding: var(--app-navigation-padding);\n}\n.app-navigation-search__input[data-v-191b6717] {\n --input-padding-end: calc(var(--default-clickable-area) - var(--default-grid-baseline));\n}\n.app-navigation-search--has-actions .app-navigation-search__input[data-v-191b6717] {\n flex-grow: 1;\n z-index: 3;\n}\n.app-navigation-search__actions[data-v-191b6717] {\n display: flex;\n gap: var(--default-grid-baseline);\n margin-inline-start: 0;\n max-width: calc(2 * var(--default-clickable-area) + var(--default-grid-baseline));\n max-height: var(--default-clickable-area);\n transition: margin-inline-start var(--animation-quick);\n}\n.app-navigation-search__actions--hidden[data-v-191b6717] {\n margin-inline-start: calc(-1 * var(--default-clickable-area));\n}","",{version:3,sources:["webpack://./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationSearch.css"],names:[],mappings:"AAAA;;;EAGE;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,aAAa;EACb,kCAAkC;EAClC,sCAAsC;AACxC;AACA;EACE,uFAAuF;AACzF;AACA;EACE,YAAY;EACZ,UAAU;AACZ;AACA;EACE,aAAa;EACb,iCAAiC;EACjC,sBAAsB;EACtB,iFAAiF;EACjF,yCAAyC;EACzC,sDAAsD;AACxD;AACA;EACE,6DAA6D;AAC/D",sourcesContent:["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-191b6717] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation-search[data-v-191b6717] {\n display: flex;\n gap: var(--app-navigation-padding);\n padding: var(--app-navigation-padding);\n}\n.app-navigation-search__input[data-v-191b6717] {\n --input-padding-end: calc(var(--default-clickable-area) - var(--default-grid-baseline));\n}\n.app-navigation-search--has-actions .app-navigation-search__input[data-v-191b6717] {\n flex-grow: 1;\n z-index: 3;\n}\n.app-navigation-search__actions[data-v-191b6717] {\n display: flex;\n gap: var(--default-grid-baseline);\n margin-inline-start: 0;\n max-width: calc(2 * var(--default-clickable-area) + var(--default-grid-baseline));\n max-height: var(--default-clickable-area);\n transition: margin-inline-start var(--animation-quick);\n}\n.app-navigation-search__actions--hidden[data-v-191b6717] {\n margin-inline-start: calc(-1 * var(--default-clickable-area));\n}"],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},83337(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,"\n._container_2uWBM {\n\tmargin-top: auto;\n\tpadding: var(--default-grid-baseline);\n}\n._header_jtpAp {\n\tmargin-block: 0 var(--default-grid-baseline);\n\tmargin-inline: var(--default-grid-baseline);\n}\n\n/* Overwrite the padding to match NcAppNavigationItem */\n._button_9llR- {\n\tpadding-inline: 0 calc((var(--default-clickable-area) - 16px) / 2) !important;\n.button-vue__text {\n\t\tfont-weight: var(--font-weight-default, normal);\n}\n}\n._content_CW2CF {\n\tdisplay: block;\n\tpadding: 10px;\n\n\t/* prevent scrolled contents from stopping too early */\n\tmargin-bottom: calc(-1 * var(--default-grid-baseline));\n\n\t/* restrict height of settings and make scrollable */\n\tmax-height: 300px;\n\toverflow-y: auto;\n}\n._animationActive_Lz0UV {\n\ttransition-duration: var(--animation-slow);\n\ttransition-property: max-height, padding;\n\toverflow-y: hidden !important;\n}\n._animationStop_lwpSi {\n\tmax-height: 0 !important;\n\tpadding: 0 10px !important;\n}\n","",{version:3,sources:["webpack://./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationSettings.css"],names:[],mappings:";AACA;CACC,gBAAgB;CAChB,qCAAqC;AACtC;AACA;CACC,4CAA4C;CAC5C,2CAA2C;AAC5C;;AAEA,uDAAuD;AACvD;CACC,6EAA6E;AAC9E;EACE,+CAA+C;AACjD;AACA;AACA;CACC,cAAc;CACd,aAAa;;CAEb,sDAAsD;CACtD,sDAAsD;;CAEtD,oDAAoD;CACpD,iBAAiB;CACjB,gBAAgB;AACjB;AACA;CACC,0CAA0C;CAC1C,wCAAwC;CACxC,6BAA6B;AAC9B;AACA;CACC,wBAAwB;CACxB,0BAA0B;AAC3B",sourcesContent:["\n._container_2uWBM {\n\tmargin-top: auto;\n\tpadding: var(--default-grid-baseline);\n}\n._header_jtpAp {\n\tmargin-block: 0 var(--default-grid-baseline);\n\tmargin-inline: var(--default-grid-baseline);\n}\n\n/* Overwrite the padding to match NcAppNavigationItem */\n._button_9llR- {\n\tpadding-inline: 0 calc((var(--default-clickable-area) - 16px) / 2) !important;\n.button-vue__text {\n\t\tfont-weight: var(--font-weight-default, normal);\n}\n}\n._content_CW2CF {\n\tdisplay: block;\n\tpadding: 10px;\n\n\t/* prevent scrolled contents from stopping too early */\n\tmargin-bottom: calc(-1 * var(--default-grid-baseline));\n\n\t/* restrict height of settings and make scrollable */\n\tmax-height: 300px;\n\toverflow-y: auto;\n}\n._animationActive_Lz0UV {\n\ttransition-duration: var(--animation-slow);\n\ttransition-property: max-height, padding;\n\toverflow-y: hidden !important;\n}\n._animationStop_lwpSi {\n\tmax-height: 0 !important;\n\tpadding: 0 10px !important;\n}\n"],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},86102(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,"\n.app-navigation-spacer[data-v-277fa710] {\n\t\tflex-shrink: 0;\n\t\theight: 22px;\n}\n\n","",{version:3,sources:["webpack://./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationSpacer.css"],names:[],mappings:";AACA;EACE,cAAc;EACd,YAAY;AACd",sourcesContent:["\n.app-navigation-spacer[data-v-277fa710] {\n\t\tflex-shrink: 0;\n\t\theight: 22px;\n}\n\n"],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},33238(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,"/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n#skip-actions.vue-skip-actions:focus-within {\n top: 0 !important;\n inset-inline-start: 0 !important;\n width: 100vw;\n height: 100vh;\n padding: var(--body-container-margin) !important;\n backdrop-filter: brightness(50%);\n}\n@media only screen and (min-width: 1024px) {\n.content:not(.content--legacy) .app-navigation:not(.app-navigation--closed):not(.app-navigation--close) ~ .app-content {\n border-inline-start: 1px solid var(--color-border);\n border-start-start-radius: var(--body-container-radius);\n border-end-start-radius: var(--body-container-radius);\n}\n}/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-d13dcb98] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.vue-skip-actions__container[data-v-d13dcb98] {\n background-color: var(--color-main-background);\n border-radius: var(--border-radius-element);\n padding: 22px;\n}\n.vue-skip-actions__headline[data-v-d13dcb98] {\n font-weight: var(--font-weight-heading, bold);\n font-size: 20px;\n line-height: 30px;\n margin-bottom: 12px;\n}\n.vue-skip-actions__buttons[data-v-d13dcb98] {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n.vue-skip-actions__buttons[data-v-d13dcb98] > * {\n flex: 1 0 fit-content;\n}\n.vue-skip-actions__image[data-v-d13dcb98] {\n margin-top: 12px;\n}\n.vue-skip-actions__image[data-v-d13dcb98]:dir(rtl) {\n transform: rotateY(180deg);\n}\n.content[data-v-d13dcb98] {\n display: flex;\n width: calc(100% - var(--body-container-margin) * 2);\n border-radius: var(--body-container-radius);\n height: var(--body-height);\n overflow: hidden;\n padding: 0;\n}\n.content[data-v-d13dcb98]:not(.content--legacy) {\n background-color: var(--color-main-background-blur, var(--color-main-background));\n backdrop-filter: var(--filter-background-blur, none);\n}\n.content[data-v-d13dcb98]:not(.with-sidebar--full) {\n position: fixed;\n}\n.content[data-v-d13dcb98], .content[data-v-d13dcb98] * {\n box-sizing: border-box;\n}","",{version:3,sources:["webpack://./node_modules/@nextcloud/vue/dist/assets/NcContent.css"],names:[],mappings:"AAAA;;;EAGE;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,iBAAiB;EACjB,gCAAgC;EAChC,YAAY;EACZ,aAAa;EACb,gDAAgD;EAChD,gCAAgC;AAClC;AACA;AACA;IACI,kDAAkD;IAClD,uDAAuD;IACvD,qDAAqD;AACzD;AACA,CAAC;;;EAGC;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,8CAA8C;EAC9C,2CAA2C;EAC3C,aAAa;AACf;AACA;EACE,6CAA6C;EAC7C,eAAe;EACf,iBAAiB;EACjB,mBAAmB;AACrB;AACA;EACE,aAAa;EACb,eAAe;EACf,SAAS;AACX;AACA;EACE,qBAAqB;AACvB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,0BAA0B;AAC5B;AACA;EACE,aAAa;EACb,oDAAoD;EACpD,2CAA2C;EAC3C,0BAA0B;EAC1B,gBAAgB;EAChB,UAAU;AACZ;AACA;EACE,iFAAiF;EACjF,oDAAoD;AACtD;AACA;EACE,eAAe;AACjB;AACA;EACE,sBAAsB;AACxB",sourcesContent:["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n#skip-actions.vue-skip-actions:focus-within {\n top: 0 !important;\n inset-inline-start: 0 !important;\n width: 100vw;\n height: 100vh;\n padding: var(--body-container-margin) !important;\n backdrop-filter: brightness(50%);\n}\n@media only screen and (min-width: 1024px) {\n.content:not(.content--legacy) .app-navigation:not(.app-navigation--closed):not(.app-navigation--close) ~ .app-content {\n border-inline-start: 1px solid var(--color-border);\n border-start-start-radius: var(--body-container-radius);\n border-end-start-radius: var(--body-container-radius);\n}\n}/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-d13dcb98] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.vue-skip-actions__container[data-v-d13dcb98] {\n background-color: var(--color-main-background);\n border-radius: var(--border-radius-element);\n padding: 22px;\n}\n.vue-skip-actions__headline[data-v-d13dcb98] {\n font-weight: var(--font-weight-heading, bold);\n font-size: 20px;\n line-height: 30px;\n margin-bottom: 12px;\n}\n.vue-skip-actions__buttons[data-v-d13dcb98] {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n.vue-skip-actions__buttons[data-v-d13dcb98] > * {\n flex: 1 0 fit-content;\n}\n.vue-skip-actions__image[data-v-d13dcb98] {\n margin-top: 12px;\n}\n.vue-skip-actions__image[data-v-d13dcb98]:dir(rtl) {\n transform: rotateY(180deg);\n}\n.content[data-v-d13dcb98] {\n display: flex;\n width: calc(100% - var(--body-container-margin) * 2);\n border-radius: var(--body-container-radius);\n height: var(--body-height);\n overflow: hidden;\n padding: 0;\n}\n.content[data-v-d13dcb98]:not(.content--legacy) {\n background-color: var(--color-main-background-blur, var(--color-main-background));\n backdrop-filter: var(--filter-background-blur, none);\n}\n.content[data-v-d13dcb98]:not(.with-sidebar--full) {\n position: fixed;\n}\n.content[data-v-d13dcb98], .content[data-v-d13dcb98] * {\n box-sizing: border-box;\n}"],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},60887(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,"/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-36ffc13f] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.counter-bubble__counter[data-v-36ffc13f] {\n --counter-bubble-height: 22px;\n font-size: var(--font-size-small, 13px);\n overflow: hidden;\n width: fit-content;\n min-width: var(--counter-bubble-height);\n text-align: center;\n line-height: var(--counter-bubble-height);\n padding: 0 calc(1.5 * var(--default-grid-baseline));\n border-radius: 0.5lh;\n background-color: var(--color-primary-element-light);\n font-weight: bold;\n color: var(--color-primary-element-light-text);\n}\n.counter-bubble__counter .active[data-v-36ffc13f] {\n color: var(--color-main-background);\n background-color: var(--color-primary-element-light);\n}\n.counter-bubble__counter--highlighted[data-v-36ffc13f] {\n color: var(--color-primary-element-text);\n background-color: var(--color-primary-element);\n}\n.counter-bubble__counter--highlighted.active[data-v-36ffc13f] {\n color: var(--color-primary-element);\n background-color: var(--color-main-background);\n}\n.counter-bubble__counter--outlined[data-v-36ffc13f] {\n color: var(--color-primary-element);\n background: transparent;\n box-shadow: inset 0 0 0 2px;\n}\n.counter-bubble__counter--outlined.active[data-v-36ffc13f] {\n color: var(--color-main-background);\n box-shadow: inset 0 0 0 2px;\n}","",{version:3,sources:["webpack://./node_modules/@nextcloud/vue/dist/assets/NcCounterBubble.css"],names:[],mappings:"AAAA;;;EAGE;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,6BAA6B;EAC7B,uCAAuC;EACvC,gBAAgB;EAChB,kBAAkB;EAClB,uCAAuC;EACvC,kBAAkB;EAClB,yCAAyC;EACzC,mDAAmD;EACnD,oBAAoB;EACpB,oDAAoD;EACpD,iBAAiB;EACjB,8CAA8C;AAChD;AACA;EACE,mCAAmC;EACnC,oDAAoD;AACtD;AACA;EACE,wCAAwC;EACxC,8CAA8C;AAChD;AACA;EACE,mCAAmC;EACnC,8CAA8C;AAChD;AACA;EACE,mCAAmC;EACnC,uBAAuB;EACvB,2BAA2B;AAC7B;AACA;EACE,mCAAmC;EACnC,2BAA2B;AAC7B",sourcesContent:["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-36ffc13f] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.counter-bubble__counter[data-v-36ffc13f] {\n --counter-bubble-height: 22px;\n font-size: var(--font-size-small, 13px);\n overflow: hidden;\n width: fit-content;\n min-width: var(--counter-bubble-height);\n text-align: center;\n line-height: var(--counter-bubble-height);\n padding: 0 calc(1.5 * var(--default-grid-baseline));\n border-radius: 0.5lh;\n background-color: var(--color-primary-element-light);\n font-weight: bold;\n color: var(--color-primary-element-light-text);\n}\n.counter-bubble__counter .active[data-v-36ffc13f] {\n color: var(--color-main-background);\n background-color: var(--color-primary-element-light);\n}\n.counter-bubble__counter--highlighted[data-v-36ffc13f] {\n color: var(--color-primary-element-text);\n background-color: var(--color-primary-element);\n}\n.counter-bubble__counter--highlighted.active[data-v-36ffc13f] {\n color: var(--color-primary-element);\n background-color: var(--color-main-background);\n}\n.counter-bubble__counter--outlined[data-v-36ffc13f] {\n color: var(--color-primary-element);\n background: transparent;\n box-shadow: inset 0 0 0 2px;\n}\n.counter-bubble__counter--outlined.active[data-v-36ffc13f] {\n color: var(--color-main-background);\n box-shadow: inset 0 0 0 2px;\n}"],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},8735(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,"/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-6926a0b8] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation-input-confirm[data-v-6926a0b8] {\n flex: 1 0 100%;\n width: 100%;\n}\n.app-navigation-input-confirm form[data-v-6926a0b8] {\n display: flex;\n}\n.app-navigation-input-confirm__input[data-v-6926a0b8] {\n height: 34px;\n flex: 1 1 100%;\n font-size: 100% !important;\n margin: 5px !important;\n margin-inline-start: -8px !important;\n padding: 7px !important;\n}\n.app-navigation-input-confirm__input[data-v-6926a0b8]:active, .app-navigation-input-confirm__input[data-v-6926a0b8]:focus, .app-navigation-input-confirm__input[data-v-6926a0b8]:hover {\n outline: none;\n background-color: var(--color-main-background);\n color: var(--color-main-text);\n border-color: var(--color-primary-element);\n}\n.app-navigation-input-confirm:not(.app-navigation-input-confirm--legacy) form[data-v-6926a0b8] {\n align-items: center;\n gap: 5px;\n padding-inline-end: 5px;\n}\n.app-navigation-input-confirm:not(.app-navigation-input-confirm--legacy) .app-navigation-input-confirm__input[data-v-6926a0b8] {\n margin-inline-end: 0 !important;\n}\n.app-navigation-input-confirm[data-v-6926a0b8]:not(.app-navigation-input-confirm--legacy) .button-vue {\n width: 34px !important;\n min-width: 34px !important;\n height: 34px !important;\n flex: 0 0 34px;\n}","",{version:3,sources:["webpack://./node_modules/@nextcloud/vue/dist/assets/NcInputConfirmCancel.css"],names:[],mappings:"AAAA;;;EAGE;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,cAAc;EACd,WAAW;AACb;AACA;EACE,aAAa;AACf;AACA;EACE,YAAY;EACZ,cAAc;EACd,0BAA0B;EAC1B,sBAAsB;EACtB,oCAAoC;EACpC,uBAAuB;AACzB;AACA;EACE,aAAa;EACb,8CAA8C;EAC9C,6BAA6B;EAC7B,0CAA0C;AAC5C;AACA;EACE,mBAAmB;EACnB,QAAQ;EACR,uBAAuB;AACzB;AACA;EACE,+BAA+B;AACjC;AACA;EACE,sBAAsB;EACtB,0BAA0B;EAC1B,uBAAuB;EACvB,cAAc;AAChB",sourcesContent:["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-6926a0b8] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n.app-navigation-input-confirm[data-v-6926a0b8] {\n flex: 1 0 100%;\n width: 100%;\n}\n.app-navigation-input-confirm form[data-v-6926a0b8] {\n display: flex;\n}\n.app-navigation-input-confirm__input[data-v-6926a0b8] {\n height: 34px;\n flex: 1 1 100%;\n font-size: 100% !important;\n margin: 5px !important;\n margin-inline-start: -8px !important;\n padding: 7px !important;\n}\n.app-navigation-input-confirm__input[data-v-6926a0b8]:active, .app-navigation-input-confirm__input[data-v-6926a0b8]:focus, .app-navigation-input-confirm__input[data-v-6926a0b8]:hover {\n outline: none;\n background-color: var(--color-main-background);\n color: var(--color-main-text);\n border-color: var(--color-primary-element);\n}\n.app-navigation-input-confirm:not(.app-navigation-input-confirm--legacy) form[data-v-6926a0b8] {\n align-items: center;\n gap: 5px;\n padding-inline-end: 5px;\n}\n.app-navigation-input-confirm:not(.app-navigation-input-confirm--legacy) .app-navigation-input-confirm__input[data-v-6926a0b8] {\n margin-inline-end: 0 !important;\n}\n.app-navigation-input-confirm[data-v-6926a0b8]:not(.app-navigation-input-confirm--legacy) .button-vue {\n width: 34px !important;\n min-width: 34px !important;\n height: 34px !important;\n flex: 0 0 34px;\n}"],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},75417(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,"/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-feb04bef] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n\n/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * Similar as inputBorder but without active styles.\n */\n/**\n * Create a consistent border for an input element.\n * With Nextcloud 32+ there is no real border anymore but we use a box-shadow.\n */\n.input-field[data-v-feb04bef] {\n --input-border-color: var(--color-border-maxcontrast);\n --input-border-radius: var(--border-radius-element);\n --input-padding-start: var(--border-radius-element);\n --input-padding-end: var(--border-radius-element);\n position: relative;\n width: 100%;\n margin-block-start: 6px;\n}\n.input-field--disabled[data-v-feb04bef] {\n opacity: 0.4;\n filter: saturate(0.4);\n}\n.input-field--label-outside[data-v-feb04bef] {\n margin-block-start: 0;\n}\n.input-field--leading-icon[data-v-feb04bef] {\n --input-padding-start: calc(var(--default-clickable-area) - var(--default-grid-baseline));\n}\n.input-field--trailing-icon[data-v-feb04bef] {\n --input-padding-end: calc(var(--default-clickable-area) - var(--default-grid-baseline));\n}\n.input-field--pill[data-v-feb04bef] {\n --input-border-radius: var(--border-radius-pill);\n}\n.input-field__main-wrapper[data-v-feb04bef] {\n height: var(--default-clickable-area);\n padding: var(--border-width-input-focused, 2px);\n position: relative;\n}\n.input-field__input[data-v-feb04bef] {\n --input-border-box-shadow-light: 0 -1px var(--input-border-color),\n \t0 0 0 1px color-mix(in srgb, var(--input-border-color), 65% transparent);\n --input-border-box-shadow-dark: 0 1px var(--input-border-color),\n \t0 0 0 1px color-mix(in srgb, var(--input-border-color), 65% transparent);\n --input-border-box-shadow: var(--input-border-box-shadow-light);\n border: none;\n border-radius: var(--border-radius-element);\n box-shadow: var(--input-border-box-shadow);\n}\n.input-field__input[data-v-feb04bef]:hover:not([disabled]) {\n box-shadow: 0 0 0 1px var(--input-border-color);\n}\n@media (prefers-color-scheme: dark) {\n.input-field__input .input-field__input[data-v-feb04bef] {\n --input-border-box-shadow: var(--input-border-box-shadow-dark);\n}\n}\n[data-theme-dark] .input-field__input[data-v-feb04bef] {\n --input-border-box-shadow: var(--input-border-box-shadow-dark);\n}\n[data-theme-light] .input-field__input[data-v-feb04bef] {\n --input-border-box-shadow: var(--input-border-box-shadow-light);\n}\n.input-field--legacy .input-field__input[data-v-feb04bef] {\n box-shadow: 0 0 0 1px var(--input-border-color);\n}\n.input-field--legacy .input-field__input[data-v-feb04bef]:hover:not([disabled]) {\n box-shadow: 0 0 0 2px var(--input-border-color);\n}\n.input-field__input[data-v-feb04bef]:focus-within:not([disabled]), .input-field__input[data-v-feb04bef]:active:not([disabled]) {\n box-shadow: 0 0 0 2px var(--input-border-color), 0 0 0 4px var(--color-main-background) !important;\n}\n.input-field__input[data-v-feb04bef] {\n background-color: var(--color-main-background);\n color: var(--color-main-text);\n border-radius: var(--input-border-radius);\n cursor: pointer;\n -webkit-appearance: textfield !important;\n -moz-appearance: textfield !important;\n appearance: textfield !important;\n font-size: var(--default-font-size);\n text-overflow: ellipsis;\n padding-block: 0;\n padding-inline: var(--input-padding-start) var(--input-padding-end);\n height: 100% !important;\n min-height: unset;\n width: 100%;\n}\n.input-field__input[data-v-feb04bef]::placeholder {\n color: var(--color-text-maxcontrast);\n}\n.input-field__input[data-v-feb04bef]::-webkit-search-cancel-button {\n display: none;\n}\n.input-field__input[data-v-feb04bef]::-webkit-search-decoration, .input-field__input[data-v-feb04bef]::-webkit-search-results-button, .input-field__input[data-v-feb04bef]::-webkit-search-results-decoration, .input-field__input[data-v-feb04bef]::-ms-clear {\n display: none;\n}\n.input-field__input[data-v-feb04bef]:active:not([disabled]), .input-field__input[data-v-feb04bef]:focus:not([disabled]) {\n --input-border-color: var(--color-main-text);\n}\n.input-field__input:focus + .input-field__label[data-v-feb04bef], .input-field__input:hover:not(:placeholder-shown) + .input-field__label[data-v-feb04bef] {\n color: var(--color-main-text);\n}\n.input-field__input[data-v-feb04bef]:focus {\n cursor: text;\n}\n.input-field__input[data-v-feb04bef]:disabled {\n cursor: default;\n}\n.input-field__input[data-v-feb04bef]:focus-visible {\n box-shadow: unset !important;\n}\n.input-field:not(.input-field--label-outside) .input-field__input[data-v-feb04bef]:not(:focus)::placeholder {\n opacity: 0;\n}\n.input-field__label[data-v-feb04bef] {\n --input-label-font-size: var(--default-font-size);\n font-size: var(--input-label-font-size);\n position: absolute;\n margin-inline: var(--input-padding-start) var(--input-padding-end);\n max-width: fit-content;\n inset-block-start: calc((var(--default-clickable-area) - 1lh) / 2);\n inset-inline: var(--border-width-input-focused, 2px);\n color: var(--color-text-maxcontrast);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n transition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick), background-color var(--animation-quick) var(--animation-slow);\n}\n.input-field__input:focus + .input-field__label[data-v-feb04bef], .input-field__input:not(:placeholder-shown) + .input-field__label[data-v-feb04bef] {\n --input-label-font-size: 13px;\n line-height: 1.5;\n inset-block-start: calc(-1.5 * var(--input-label-font-size) / 2);\n font-weight: var(--font-weight-element, 500);\n border-radius: var(--default-grid-baseline) var(--default-grid-baseline) 0 0;\n background-color: var(--color-main-background);\n padding-inline: var(--default-grid-baseline);\n margin-inline: calc(var(--input-padding-start) - var(--default-grid-baseline)) calc(var(--input-padding-end) - var(--default-grid-baseline));\n transition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick);\n}\n.input-field__icon[data-v-feb04bef] {\n position: absolute;\n height: var(--default-clickable-area);\n width: var(--default-clickable-area);\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.7;\n inset-block-end: 0;\n}\n.input-field__icon--leading[data-v-feb04bef] {\n inset-inline-start: 0px;\n}\n.input-field__icon--trailing[data-v-feb04bef] {\n inset-inline-end: 0px;\n}\n.input-field__trailing-button[data-v-feb04bef] {\n --button-size: calc(var(--default-clickable-area) - 2 * var(--border-width-input-focused, 2px)) !important;\n --button-radius: calc(var(--input-border-radius) - var(--border-width-input-focused, 2px));\n}\n.input-field__trailing-button.button-vue[data-v-feb04bef] {\n position: absolute;\n top: var(--border-width-input-focused, 2px);\n inset-inline-end: var(--border-width-input-focused, 2px);\n}\n.input-field__trailing-button.button-vue[data-v-feb04bef]:focus-visible {\n box-shadow: none !important;\n}\n.input-field__helper-text-message[data-v-feb04bef] {\n padding-block: 4px;\n padding-inline: var(--border-radius-element);\n display: flex;\n align-items: center;\n color: var(--color-text-maxcontrast);\n overflow-wrap: anywhere;\n}\n.input-field__helper-text-message__icon[data-v-feb04bef] {\n margin-inline-end: 8px;\n}\n.input-field--error .input-field__helper-text-message[data-v-feb04bef],\n.input-field--error .input-field__icon--trailing[data-v-feb04bef] {\n color: var(--color-text-error, var(--color-error));\n}\n.input-field--error .input-field__input[data-v-feb04bef], .input-field__input[data-v-feb04bef]:user-invalid {\n --input-border-color: var(--color-border-error, var(--color-error)) !important;\n}\n.input-field--error .input-field__input[data-v-feb04bef]:focus-visible, .input-field__input[data-v-feb04bef]:user-invalid:focus-visible {\n box-shadow: rgb(248, 250, 252) 0px 0px 0px 2px, var(--color-primary-element) 0px 0px 0px 4px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;\n}\n.input-field--success .input-field__input[data-v-feb04bef] {\n --input-border-color: var(--color-border-success, var(--color-success)) !important;\n}\n.input-field--success .input-field__input[data-v-feb04bef]:focus-visible {\n box-shadow: rgb(248, 250, 252) 0px 0px 0px 2px, var(--color-primary-element) 0px 0px 0px 4px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;\n}\n.input-field--success .input-field__helper-text-message__icon[data-v-feb04bef] {\n color: var(--color-border-success, var(--color-success));\n}","",{version:3,sources:["webpack://./node_modules/@nextcloud/vue/dist/assets/NcInputField.css"],names:[],mappings:"AAAA;;;EAGE;AACF;;;EAGE;AACF;;CAEC;AACD;EACE,aAAa;EACb,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;;;EAGE;AACF;;EAEE;AACF;;;EAGE;AACF;EACE,qDAAqD;EACrD,mDAAmD;EACnD,mDAAmD;EACnD,iDAAiD;EACjD,kBAAkB;EAClB,WAAW;EACX,uBAAuB;AACzB;AACA;EACE,YAAY;EACZ,qBAAqB;AACvB;AACA;EACE,qBAAqB;AACvB;AACA;EACE,yFAAyF;AAC3F;AACA;EACE,uFAAuF;AACzF;AACA;EACE,gDAAgD;AAClD;AACA;EACE,qCAAqC;EACrC,+CAA+C;EAC/C,kBAAkB;AACpB;AACA;EACE;2EACyE;EACzE;2EACyE;EACzE,+DAA+D;EAC/D,YAAY;EACZ,2CAA2C;EAC3C,0CAA0C;AAC5C;AACA;EACE,+CAA+C;AACjD;AACA;AACA;IACI,8DAA8D;AAClE;AACA;AACA;EACE,8DAA8D;AAChE;AACA;EACE,+DAA+D;AACjE;AACA;EACE,+CAA+C;AACjD;AACA;EACE,+CAA+C;AACjD;AACA;EACE,kGAAkG;AACpG;AACA;EACE,8CAA8C;EAC9C,6BAA6B;EAC7B,yCAAyC;EACzC,eAAe;EACf,wCAAwC;EACxC,qCAAqC;EACrC,gCAAgC;EAChC,mCAAmC;EACnC,uBAAuB;EACvB,gBAAgB;EAChB,mEAAmE;EACnE,uBAAuB;EACvB,iBAAiB;EACjB,WAAW;AACb;AACA;EACE,oCAAoC;AACtC;AACA;EACE,aAAa;AACf;AACA;EACE,aAAa;AACf;AACA;EACE,4CAA4C;AAC9C;AACA;EACE,6BAA6B;AAC/B;AACA;EACE,YAAY;AACd;AACA;EACE,eAAe;AACjB;AACA;EACE,4BAA4B;AAC9B;AACA;EACE,UAAU;AACZ;AACA;EACE,iDAAiD;EACjD,uCAAuC;EACvC,kBAAkB;EAClB,kEAAkE;EAClE,sBAAsB;EACtB,kEAAkE;EAClE,oDAAoD;EACpD,oCAAoC;EACpC,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;EACvB,oBAAoB;EACpB,kNAAkN;AACpN;AACA;EACE,6BAA6B;EAC7B,gBAAgB;EAChB,gEAAgE;EAChE,4CAA4C;EAC5C,4EAA4E;EAC5E,8CAA8C;EAC9C,4CAA4C;EAC5C,4IAA4I;EAC5I,mJAAmJ;AACrJ;AACA;EACE,kBAAkB;EAClB,qCAAqC;EACrC,oCAAoC;EACpC,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,YAAY;EACZ,kBAAkB;AACpB;AACA;EACE,uBAAuB;AACzB;AACA;EACE,qBAAqB;AACvB;AACA;EACE,0GAA0G;EAC1G,0FAA0F;AAC5F;AACA;EACE,kBAAkB;EAClB,2CAA2C;EAC3C,wDAAwD;AAC1D;AACA;EACE,2BAA2B;AAC7B;AACA;EACE,kBAAkB;EAClB,4CAA4C;EAC5C,aAAa;EACb,mBAAmB;EACnB,oCAAoC;EACpC,uBAAuB;AACzB;AACA;EACE,sBAAsB;AACxB;AACA;;EAEE,kDAAkD;AACpD;AACA;EACE,8EAA8E;AAChF;AACA;EACE,iIAAiI;AACnI;AACA;EACE,kFAAkF;AACpF;AACA;EACE,iIAAiI;AACnI;AACA;EACE,wDAAwD;AAC1D",sourcesContent:["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/*\n* Ensure proper alignment of the vue material icons\n*/\n.material-design-icon[data-v-feb04bef] {\n display: flex;\n align-self: center;\n justify-self: center;\n align-items: center;\n justify-content: center;\n}\n\n/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * Similar as inputBorder but without active styles.\n */\n/**\n * Create a consistent border for an input element.\n * With Nextcloud 32+ there is no real border anymore but we use a box-shadow.\n */\n.input-field[data-v-feb04bef] {\n --input-border-color: var(--color-border-maxcontrast);\n --input-border-radius: var(--border-radius-element);\n --input-padding-start: var(--border-radius-element);\n --input-padding-end: var(--border-radius-element);\n position: relative;\n width: 100%;\n margin-block-start: 6px;\n}\n.input-field--disabled[data-v-feb04bef] {\n opacity: 0.4;\n filter: saturate(0.4);\n}\n.input-field--label-outside[data-v-feb04bef] {\n margin-block-start: 0;\n}\n.input-field--leading-icon[data-v-feb04bef] {\n --input-padding-start: calc(var(--default-clickable-area) - var(--default-grid-baseline));\n}\n.input-field--trailing-icon[data-v-feb04bef] {\n --input-padding-end: calc(var(--default-clickable-area) - var(--default-grid-baseline));\n}\n.input-field--pill[data-v-feb04bef] {\n --input-border-radius: var(--border-radius-pill);\n}\n.input-field__main-wrapper[data-v-feb04bef] {\n height: var(--default-clickable-area);\n padding: var(--border-width-input-focused, 2px);\n position: relative;\n}\n.input-field__input[data-v-feb04bef] {\n --input-border-box-shadow-light: 0 -1px var(--input-border-color),\n \t0 0 0 1px color-mix(in srgb, var(--input-border-color), 65% transparent);\n --input-border-box-shadow-dark: 0 1px var(--input-border-color),\n \t0 0 0 1px color-mix(in srgb, var(--input-border-color), 65% transparent);\n --input-border-box-shadow: var(--input-border-box-shadow-light);\n border: none;\n border-radius: var(--border-radius-element);\n box-shadow: var(--input-border-box-shadow);\n}\n.input-field__input[data-v-feb04bef]:hover:not([disabled]) {\n box-shadow: 0 0 0 1px var(--input-border-color);\n}\n@media (prefers-color-scheme: dark) {\n.input-field__input .input-field__input[data-v-feb04bef] {\n --input-border-box-shadow: var(--input-border-box-shadow-dark);\n}\n}\n[data-theme-dark] .input-field__input[data-v-feb04bef] {\n --input-border-box-shadow: var(--input-border-box-shadow-dark);\n}\n[data-theme-light] .input-field__input[data-v-feb04bef] {\n --input-border-box-shadow: var(--input-border-box-shadow-light);\n}\n.input-field--legacy .input-field__input[data-v-feb04bef] {\n box-shadow: 0 0 0 1px var(--input-border-color);\n}\n.input-field--legacy .input-field__input[data-v-feb04bef]:hover:not([disabled]) {\n box-shadow: 0 0 0 2px var(--input-border-color);\n}\n.input-field__input[data-v-feb04bef]:focus-within:not([disabled]), .input-field__input[data-v-feb04bef]:active:not([disabled]) {\n box-shadow: 0 0 0 2px var(--input-border-color), 0 0 0 4px var(--color-main-background) !important;\n}\n.input-field__input[data-v-feb04bef] {\n background-color: var(--color-main-background);\n color: var(--color-main-text);\n border-radius: var(--input-border-radius);\n cursor: pointer;\n -webkit-appearance: textfield !important;\n -moz-appearance: textfield !important;\n appearance: textfield !important;\n font-size: var(--default-font-size);\n text-overflow: ellipsis;\n padding-block: 0;\n padding-inline: var(--input-padding-start) var(--input-padding-end);\n height: 100% !important;\n min-height: unset;\n width: 100%;\n}\n.input-field__input[data-v-feb04bef]::placeholder {\n color: var(--color-text-maxcontrast);\n}\n.input-field__input[data-v-feb04bef]::-webkit-search-cancel-button {\n display: none;\n}\n.input-field__input[data-v-feb04bef]::-webkit-search-decoration, .input-field__input[data-v-feb04bef]::-webkit-search-results-button, .input-field__input[data-v-feb04bef]::-webkit-search-results-decoration, .input-field__input[data-v-feb04bef]::-ms-clear {\n display: none;\n}\n.input-field__input[data-v-feb04bef]:active:not([disabled]), .input-field__input[data-v-feb04bef]:focus:not([disabled]) {\n --input-border-color: var(--color-main-text);\n}\n.input-field__input:focus + .input-field__label[data-v-feb04bef], .input-field__input:hover:not(:placeholder-shown) + .input-field__label[data-v-feb04bef] {\n color: var(--color-main-text);\n}\n.input-field__input[data-v-feb04bef]:focus {\n cursor: text;\n}\n.input-field__input[data-v-feb04bef]:disabled {\n cursor: default;\n}\n.input-field__input[data-v-feb04bef]:focus-visible {\n box-shadow: unset !important;\n}\n.input-field:not(.input-field--label-outside) .input-field__input[data-v-feb04bef]:not(:focus)::placeholder {\n opacity: 0;\n}\n.input-field__label[data-v-feb04bef] {\n --input-label-font-size: var(--default-font-size);\n font-size: var(--input-label-font-size);\n position: absolute;\n margin-inline: var(--input-padding-start) var(--input-padding-end);\n max-width: fit-content;\n inset-block-start: calc((var(--default-clickable-area) - 1lh) / 2);\n inset-inline: var(--border-width-input-focused, 2px);\n color: var(--color-text-maxcontrast);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n transition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick), background-color var(--animation-quick) var(--animation-slow);\n}\n.input-field__input:focus + .input-field__label[data-v-feb04bef], .input-field__input:not(:placeholder-shown) + .input-field__label[data-v-feb04bef] {\n --input-label-font-size: 13px;\n line-height: 1.5;\n inset-block-start: calc(-1.5 * var(--input-label-font-size) / 2);\n font-weight: var(--font-weight-element, 500);\n border-radius: var(--default-grid-baseline) var(--default-grid-baseline) 0 0;\n background-color: var(--color-main-background);\n padding-inline: var(--default-grid-baseline);\n margin-inline: calc(var(--input-padding-start) - var(--default-grid-baseline)) calc(var(--input-padding-end) - var(--default-grid-baseline));\n transition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick);\n}\n.input-field__icon[data-v-feb04bef] {\n position: absolute;\n height: var(--default-clickable-area);\n width: var(--default-clickable-area);\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.7;\n inset-block-end: 0;\n}\n.input-field__icon--leading[data-v-feb04bef] {\n inset-inline-start: 0px;\n}\n.input-field__icon--trailing[data-v-feb04bef] {\n inset-inline-end: 0px;\n}\n.input-field__trailing-button[data-v-feb04bef] {\n --button-size: calc(var(--default-clickable-area) - 2 * var(--border-width-input-focused, 2px)) !important;\n --button-radius: calc(var(--input-border-radius) - var(--border-width-input-focused, 2px));\n}\n.input-field__trailing-button.button-vue[data-v-feb04bef] {\n position: absolute;\n top: var(--border-width-input-focused, 2px);\n inset-inline-end: var(--border-width-input-focused, 2px);\n}\n.input-field__trailing-button.button-vue[data-v-feb04bef]:focus-visible {\n box-shadow: none !important;\n}\n.input-field__helper-text-message[data-v-feb04bef] {\n padding-block: 4px;\n padding-inline: var(--border-radius-element);\n display: flex;\n align-items: center;\n color: var(--color-text-maxcontrast);\n overflow-wrap: anywhere;\n}\n.input-field__helper-text-message__icon[data-v-feb04bef] {\n margin-inline-end: 8px;\n}\n.input-field--error .input-field__helper-text-message[data-v-feb04bef],\n.input-field--error .input-field__icon--trailing[data-v-feb04bef] {\n color: var(--color-text-error, var(--color-error));\n}\n.input-field--error .input-field__input[data-v-feb04bef], .input-field__input[data-v-feb04bef]:user-invalid {\n --input-border-color: var(--color-border-error, var(--color-error)) !important;\n}\n.input-field--error .input-field__input[data-v-feb04bef]:focus-visible, .input-field__input[data-v-feb04bef]:user-invalid:focus-visible {\n box-shadow: rgb(248, 250, 252) 0px 0px 0px 2px, var(--color-primary-element) 0px 0px 0px 4px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;\n}\n.input-field--success .input-field__input[data-v-feb04bef] {\n --input-border-color: var(--color-border-success, var(--color-success)) !important;\n}\n.input-field--success .input-field__input[data-v-feb04bef]:focus-visible {\n box-shadow: rgb(248, 250, 252) 0px 0px 0px 2px, var(--color-primary-element) 0px 0px 0px 4px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;\n}\n.input-field--success .input-field__helper-text-message__icon[data-v-feb04bef] {\n color: var(--color-border-success, var(--color-success));\n}"],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},67507(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,'.splitpanes{width:100%;height:100%;display:flex}.splitpanes--vertical{flex-direction:row}.splitpanes--horizontal{flex-direction:column}.splitpanes--dragging .splitpanes__pane{-webkit-user-select:none;user-select:none;pointer-events:none}:has(.splitpanes--dragging){-webkit-user-select:none;user-select:none;pointer-events:none}.splitpanes__pane{width:100%;height:100%;overflow:hidden}.splitpanes--ready .splitpanes__pane{will-change:width, height;transition:width .2s ease-out,height .2s ease-out}.splitpanes--ready.splitpanes--dragging .splitpanes__pane{transition:none}.splitpanes__splitter{touch-action:none}.splitpanes__splitter:focus{outline:none}.splitpanes--vertical>.splitpanes__splitter{cursor:col-resize;min-width:1px}.splitpanes--horizontal>.splitpanes__splitter{cursor:row-resize;min-height:1px}.default-theme.splitpanes .splitpanes__pane{background-color:#f2f2f2}.default-theme.splitpanes .splitpanes__splitter{box-sizing:border-box;background-color:#fff;flex-shrink:0;position:relative}.default-theme.splitpanes .splitpanes__splitter:focus-visible{outline-offset:-2px;outline:2px solid #3b82f6}.default-theme.splitpanes .splitpanes__splitter:before,.default-theme.splitpanes .splitpanes__splitter:after{content:"";background-color:#00000026;transition:background-color .3s;position:absolute;top:50%;left:50%}.default-theme.splitpanes .splitpanes__splitter:hover:before,.default-theme.splitpanes .splitpanes__splitter:hover:after{background-color:#00000040}.default-theme.splitpanes .splitpanes__splitter:first-child{cursor:auto}.default-theme.splitpanes .splitpanes .splitpanes__splitter{z-index:1}.default-theme.splitpanes--vertical>.splitpanes__splitter,.default-theme .splitpanes--vertical>.splitpanes__splitter{border-left:1px solid #eee;width:7px;margin-left:-1px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{width:1px;height:30px;transform:translateY(-50%)}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:before{margin-left:-2px}.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{margin-left:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter,.default-theme .splitpanes--horizontal>.splitpanes__splitter{border-top:1px solid #eee;height:7px;margin-top:-1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{width:30px;height:1px;transform:translate(-50%)}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before{margin-top:-2px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{margin-top:1px}\n/*$vite$:1*/',"",{version:3,sources:["webpack://./node_modules/splitpanes/dist/splitpanes.css"],names:[],mappings:"AAAA,YAAY,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,sBAAsB,kBAAkB,CAAC,wBAAwB,qBAAqB,CAAC,wCAAwC,wBAAwB,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,4BAA4B,wBAAwB,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,kBAAkB,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,qCAAqC,yBAAyB,CAAC,iDAAiD,CAAC,0DAA0D,eAAe,CAAC,sBAAsB,iBAAiB,CAAC,4BAA4B,YAAY,CAAC,4CAA4C,iBAAiB,CAAC,aAAa,CAAC,8CAA8C,iBAAiB,CAAC,cAAc,CAAC,4CAA4C,wBAAwB,CAAC,gDAAgD,qBAAqB,CAAC,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,CAAC,8DAA8D,mBAAmB,CAAC,yBAAyB,CAAC,6GAA6G,UAAU,CAAC,0BAA0B,CAAC,+BAA+B,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,yHAAyH,0BAA0B,CAAC,4DAA4D,WAAW,CAAC,4DAA4D,SAAS,CAAC,qHAAqH,0BAA0B,CAAC,SAAS,CAAC,gBAAgB,CAAC,oQAAoQ,SAAS,CAAC,WAAW,CAAC,0BAA0B,CAAC,mIAAmI,gBAAgB,CAAC,iIAAiI,eAAe,CAAC,yHAAyH,yBAAyB,CAAC,UAAU,CAAC,eAAe,CAAC,4QAA4Q,UAAU,CAAC,UAAU,CAAC,yBAAyB,CAAC,uIAAuI,eAAe,CAAC,qIAAqI,cAAc;AACrmG,WAAW",sourcesContent:['.splitpanes{width:100%;height:100%;display:flex}.splitpanes--vertical{flex-direction:row}.splitpanes--horizontal{flex-direction:column}.splitpanes--dragging .splitpanes__pane{-webkit-user-select:none;user-select:none;pointer-events:none}:has(.splitpanes--dragging){-webkit-user-select:none;user-select:none;pointer-events:none}.splitpanes__pane{width:100%;height:100%;overflow:hidden}.splitpanes--ready .splitpanes__pane{will-change:width, height;transition:width .2s ease-out,height .2s ease-out}.splitpanes--ready.splitpanes--dragging .splitpanes__pane{transition:none}.splitpanes__splitter{touch-action:none}.splitpanes__splitter:focus{outline:none}.splitpanes--vertical>.splitpanes__splitter{cursor:col-resize;min-width:1px}.splitpanes--horizontal>.splitpanes__splitter{cursor:row-resize;min-height:1px}.default-theme.splitpanes .splitpanes__pane{background-color:#f2f2f2}.default-theme.splitpanes .splitpanes__splitter{box-sizing:border-box;background-color:#fff;flex-shrink:0;position:relative}.default-theme.splitpanes .splitpanes__splitter:focus-visible{outline-offset:-2px;outline:2px solid #3b82f6}.default-theme.splitpanes .splitpanes__splitter:before,.default-theme.splitpanes .splitpanes__splitter:after{content:"";background-color:#00000026;transition:background-color .3s;position:absolute;top:50%;left:50%}.default-theme.splitpanes .splitpanes__splitter:hover:before,.default-theme.splitpanes .splitpanes__splitter:hover:after{background-color:#00000040}.default-theme.splitpanes .splitpanes__splitter:first-child{cursor:auto}.default-theme.splitpanes .splitpanes .splitpanes__splitter{z-index:1}.default-theme.splitpanes--vertical>.splitpanes__splitter,.default-theme .splitpanes--vertical>.splitpanes__splitter{border-left:1px solid #eee;width:7px;margin-left:-1px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{width:1px;height:30px;transform:translateY(-50%)}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:before{margin-left:-2px}.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{margin-left:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter,.default-theme .splitpanes--horizontal>.splitpanes__splitter{border-top:1px solid #eee;height:7px;margin-top:-1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{width:30px;height:1px;transform:translate(-50%)}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before{margin-top:-2px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{margin-top:1px}\n/*$vite$:1*/'],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},63226(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o),s=n(4417),l=n.n(s),c=new URL(n(36118),n.b),d=r()(i()),p=l()(c);d.push([e.id,`#app-content-vue .social__wrapper[data-v-7bd29a96]{padding:calc(var(--default-grid-baseline)*4);max-width:800px;margin:auto}.setup[data-v-7bd29a96]{margin:0 auto !important;padding:calc(var(--default-grid-baseline)*4);max-width:800px;display:flex;flex-direction:column;gap:20px}.setup h2[data-v-7bd29a96]{font-size:24px;font-weight:700;margin-bottom:8px}.setup p[data-v-7bd29a96]{color:var(--color-text-lighter);line-height:1.6}.setup-input[data-v-7bd29a96]{width:300px;max-width:100%;margin-inline-end:10px;border-radius:var(--border-radius-element)}#social-spacer a[data-v-7bd29a96]:hover,#social-spacer a[data-v-7bd29a96]:focus{border:none !important}a.external_link[data-v-7bd29a96]{text-decoration:underline}[data-v-7bd29a96] .app-navigation-entry .app-navigation-entry__title{font-size:14px}[data-v-7bd29a96] .app-navigation-entry__subname{font-size:12px;color:var(--color-text-lighter);margin-top:-2px}[data-v-7bd29a96] .app-navigation-entry-icon{display:flex;align-items:center;justify-content:center}[data-v-7bd29a96] .app-navigation-entry-icon .avatardiv{margin:0}.icon-social[data-v-7bd29a96]{background-image:url(${p});filter:var(--background-invert-if-dark)}`,"",{version:3,sources:["webpack://./src/App.vue"],names:[],mappings:"AACA,mDACC,4CAAA,CACA,eAAA,CACA,WAAA,CAGD,wBACC,wBAAA,CACA,4CAAA,CACA,eAAA,CACA,YAAA,CACA,qBAAA,CACA,QAAA,CAEA,2BACC,cAAA,CACA,eAAA,CACA,iBAAA,CAGD,0BACC,+BAAA,CACA,eAAA,CAIF,8BACC,WAAA,CACA,cAAA,CACA,sBAAA,CACA,0CAAA,CAGD,gFAEC,sBAAA,CAGD,iCACC,yBAAA,CAIA,qEACC,cAAA,CAIF,iDACC,cAAA,CACA,+BAAA,CACA,eAAA,CAGD,6CACC,YAAA,CACA,kBAAA,CACA,sBAAA,CAEA,wDACC,QAAA,CAIF,8BACC,wDAAA,CACA,uCAAA",sourcesContent:["\n#app-content-vue .social__wrapper {\n\tpadding: calc(var(--default-grid-baseline) * 4);\n\tmax-width: 800px;\n\tmargin: auto;\n}\n\n.setup {\n\tmargin: 0 auto !important;\n\tpadding: calc(var(--default-grid-baseline) * 4);\n\tmax-width: 800px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 20px;\n\n\th2 {\n\t\tfont-size: 24px;\n\t\tfont-weight: 700;\n\t\tmargin-bottom: 8px;\n\t}\n\n\tp {\n\t\tcolor: var(--color-text-lighter);\n\t\tline-height: 1.6;\n\t}\n}\n\n.setup-input {\n\twidth: 300px;\n\tmax-width: 100%;\n\tmargin-inline-end: 10px;\n\tborder-radius: var(--border-radius-element);\n}\n\n#social-spacer a:hover,\n#social-spacer a:focus {\n\tborder: none !important;\n}\n\na.external_link {\n\ttext-decoration: underline;\n}\n\n:deep(.app-navigation-entry) {\n\t.app-navigation-entry__title {\n\t\tfont-size: 14px;\n\t}\n}\n\n:deep(.app-navigation-entry__subname) {\n\tfont-size: 12px;\n\tcolor: var(--color-text-lighter);\n\tmargin-top: -2px;\n}\n\n:deep(.app-navigation-entry-icon) {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\t.avatardiv {\n\t\tmargin: 0;\n\t}\n}\n\n.icon-social {\n\tbackground-image: url('../img/social-dark.svg');\n\tfilter: var(--background-invert-if-dark);\n}\n"],sourceRoot:""}]);const u=d;n.d(t,["A",0,u])},56276(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,":root{--social-elevation-resting: 0 1px 2px color-mix(in srgb, var(--color-box-shadow) 14%, transparent), 0 2px 6px color-mix(in srgb, var(--color-box-shadow) 9%, transparent);--social-elevation-raised: 0 2px 4px color-mix(in srgb, var(--color-box-shadow) 20%, transparent), 0 6px 16px color-mix(in srgb, var(--color-box-shadow) 12%, transparent);--social-column: 900px;--social-column-gutter: calc(var(--default-grid-baseline, 4px) * 2)}img.emoji{margin:3px;width:16px;vertical-align:text-bottom}.social__timeline .social__wrapper{padding:0;max-width:var(--social-column);margin:0 auto}.social__timeline .timeline-entry{list-style:none}.list-enter-active,.list-leave-active,.list-move{transition:opacity .2s ease,transform .2s ease}.list-enter-from,.list-leave-to{opacity:0;transform:translateY(-6px)}@media(prefers-reduced-motion: reduce){.list-enter-active,.list-leave-active,.list-move{transition:none}}@supports(animation-timeline: view()){@media(prefers-reduced-motion: no-preference){@keyframes timeline-entry-rise{from{opacity:0;transform:translateY(12px) scale(0.99)}to{opacity:1;transform:none}}.social__timeline .timeline-entry{animation:timeline-entry-rise linear both;animation-timeline:view();animation-range:entry 0% entry 45%}}}.social__welcome{background:var(--color-main-background);border:1px solid var(--color-border);border-radius:8px;margin:calc(var(--default-grid-baseline)*4) auto;padding:calc(var(--default-grid-baseline)*5);max-width:var(--social-column)}.social__welcome h2{font-size:22px;font-weight:700;margin-bottom:12px}.social__welcome p{color:var(--color-text-lighter);line-height:1.7}.new-post{background:var(--color-main-background);border:1px solid var(--color-border);border-radius:8px;margin:calc(var(--default-grid-baseline)*3) auto;padding:calc(var(--default-grid-baseline)*3);max-width:var(--social-column);position:sticky;top:0;z-index:100}.app-navigation .app-navigation-entry .app-navigation-entry__title{font-size:14px}.app-navigation .app-navigation-entry .app-navigation-entry__subname{font-size:12px;color:var(--color-text-lighter)}.navigation__subname{font-size:12px;color:var(--color-text-lighter)}","",{version:3,sources:["webpack://./src/App.vue"],names:[],mappings:"AAYA,MACC,yKAAA,CAGA,0KAAA,CAcA,sBAAA,CACA,mEAAA,CAGD,UACC,UAAA,CACA,UAAA,CACA,0BAAA,CAIA,mCACC,SAAA,CACA,8BAAA,CACA,aAAA,CAGD,kCACC,eAAA,CAWF,iDAGC,8CAAA,CAGD,gCAEC,SAAA,CACA,0BAAA,CAGD,uCACC,iDAGC,eAAA,CAAA,CAUF,sCACC,8CACC,+BACC,KACC,SAAA,CACA,sCAAA,CAGD,GACC,SAAA,CACA,cAAA,CAAA,CAIF,kCACC,yCAAA,CACA,yBAAA,CAEA,kCAAA,CAAA,CAAA,CAKH,iBACC,uCAAA,CACA,oCAAA,CACA,iBAAA,CACA,gDAAA,CACA,4CAAA,CACA,8BAAA,CAEA,oBACC,cAAA,CACA,eAAA,CACA,kBAAA,CAGD,mBACC,+BAAA,CACA,eAAA,CAIF,UACC,uCAAA,CACA,oCAAA,CACA,iBAAA,CACA,gDAAA,CACA,4CAAA,CACA,8BAAA,CACA,eAAA,CACA,KAAA,CACA,WAAA,CAKC,mEACC,cAAA,CAGD,qEACC,cAAA,CACA,+BAAA,CAKH,qBACC,cAAA,CACA,+BAAA",sourcesContent:['\n/**\n * Two levels of elevation, defined once, so every card in the app agrees about\n * what "resting" and "lifted" look like.\n *\n * Nextcloud\'s own --color-box-shadow is built for modals: rgba(77,77,77,.5) in\n * the light theme and solid black in the dark one. Used raw under a timeline it\n * would put a hard slab under every post, so it is thinned with color-mix and\n * split in two — a tight contact shadow that seats the card on the page, and a\n * wider ambient one that gives it depth. A browser without color-mix drops the\n * declaration and gets the borders, which is what the app looked like before.\n */\n:root {\n\t--social-elevation-resting:\n\t\t0 1px 2px color-mix(in srgb, var(--color-box-shadow) 14%, transparent),\n\t\t0 2px 6px color-mix(in srgb, var(--color-box-shadow) 9%, transparent);\n\t--social-elevation-raised:\n\t\t0 2px 4px color-mix(in srgb, var(--color-box-shadow) 20%, transparent),\n\t\t0 6px 16px color-mix(in srgb, var(--color-box-shadow) 12%, transparent);\n\n\t/*\n\t * One column, stated once. The composer and the timeline used to each\n\t * carry their own max-width — the same number, but the list also had a\n\t * horizontal padding and the composer did not, so the two boxes were a\n\t * gutter\'s width apart at both edges and nothing on the page lined up.\n\t * Anything that sits in the column is `--social-column` wide. The list\n\t * keeps a gutter inside that, so a post is narrower than the column by\n\t * `--social-column-gutter` on each side and the composer, which takes the\n\t * column whole, stands that much proud of the posts beneath it.\n\t */\n\t--social-column: 900px;\n\t--social-column-gutter: calc(var(--default-grid-baseline, 4px) * 2);\n}\n\nimg.emoji {\n\tmargin: 3px;\n\twidth: 16px;\n\tvertical-align: text-bottom;\n}\n\n.social__timeline {\n\t.social__wrapper {\n\t\tpadding: 0;\n\t\tmax-width: var(--social-column);\n\t\tmargin: 0 auto;\n\t}\n\n\t.timeline-entry {\n\t\tlist-style: none;\n\t}\n}\n\n/**\n * The transition both timeline s use, defined once here\n * because this style block is global. Vue 3 names the starting class\n * `-enter-from` (Vue 2 called it `-enter`, which never matched and left the\n * enter animation dead), and `-move` is what makes the surrounding entries\n * slide when one is inserted or removed instead of jumping.\n */\n.list-enter-active,\n.list-leave-active,\n.list-move {\n\ttransition: opacity .2s ease, transform .2s ease;\n}\n\n.list-enter-from,\n.list-leave-to {\n\topacity: 0;\n\ttransform: translateY(-6px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n\t.list-enter-active,\n\t.list-leave-active,\n\t.list-move {\n\t\ttransition: none;\n\t}\n}\n\n/**\n * Posts ease in as they scroll into view. The browser drives this off the\n * scroll position on the compositor — no scroll listener, no observer, no\n * work on the main thread — and where the property is missing nothing\n * happens at all, which is why it needs no fallback.\n */\n@supports (animation-timeline: view()) {\n\t@media (prefers-reduced-motion: no-preference) {\n\t\t@keyframes timeline-entry-rise {\n\t\t\tfrom {\n\t\t\t\topacity: 0;\n\t\t\t\ttransform: translateY(12px) scale(.99);\n\t\t\t}\n\n\t\t\tto {\n\t\t\t\topacity: 1;\n\t\t\t\ttransform: none;\n\t\t\t}\n\t\t}\n\n\t\t.social__timeline .timeline-entry {\n\t\t\tanimation: timeline-entry-rise linear both;\n\t\t\tanimation-timeline: view();\n\t\t\t/* only the arrival is animated, not the departure */\n\t\t\tanimation-range: entry 0% entry 45%;\n\t\t}\n\t}\n}\n\n.social__welcome {\n\tbackground: var(--color-main-background);\n\tborder: 1px solid var(--color-border);\n\tborder-radius: 8px;\n\tmargin: calc(var(--default-grid-baseline) * 4) auto;\n\tpadding: calc(var(--default-grid-baseline) * 5);\n\tmax-width: var(--social-column);\n\n\th2 {\n\t\tfont-size: 22px;\n\t\tfont-weight: 700;\n\t\tmargin-bottom: 12px;\n\t}\n\n\tp {\n\t\tcolor: var(--color-text-lighter);\n\t\tline-height: 1.7;\n\t}\n}\n\n.new-post {\n\tbackground: var(--color-main-background);\n\tborder: 1px solid var(--color-border);\n\tborder-radius: 8px;\n\tmargin: calc(var(--default-grid-baseline) * 3) auto;\n\tpadding: calc(var(--default-grid-baseline) * 3);\n\tmax-width: var(--social-column);\n\tposition: sticky;\n\ttop: 0;\n\tz-index: 100;\n}\n\n.app-navigation {\n\t.app-navigation-entry {\n\t\t.app-navigation-entry__title {\n\t\t\tfont-size: 14px;\n\t\t}\n\n\t\t.app-navigation-entry__subname {\n\t\t\tfont-size: 12px;\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\t}\n}\n\n.navigation__subname {\n\tfont-size: 12px;\n\tcolor: var(--color-text-lighter);\n}\n\n'],sourceRoot:""}]);const s=r;n.d(t,["A",0,s])},30241(e,t,n){var a=n(71354),i=n.n(a),o=n(76314),r=n.n(o)()(i());r.push([e.id,'.navigation__more[data-v-6b6b846c] .button-vue__icon{background-image:var(--social-face);background-position:center;background-size:cover;border-radius:50%;overflow:hidden}.navigation__more[data-v-6b6b846c] .button-vue__icon svg{visibility:hidden}.navigation__more[data-v-6b6b846c] .button-vue__text{margin-inline-start:8px;font-weight:600}.navigation__subname[data-v-6b6b846c]{font-size:12px;color:var(--color-text-lighter)}@supports selector(:has(*)){.navigation__more[data-v-6b6b846c] .app-navigation-entry{opacity:0;transform:translateX(calc(var(--social-menu-slide, 1) * -14px));transition:opacity .24s ease,transform .34s cubic-bezier(0.3, 1.25, 0.5, 1)}[dir=rtl] .navigation__more[data-v-6b6b846c]{--social-menu-slide: -1}.navigation__more[data-v-6b6b846c]:has(button[aria-expanded=true]) .app-navigation-entry{opacity:1;transform:none;transition-delay:calc(var(--entry-index, 0)*34ms)}@media(prefers-reduced-motion: reduce){.navigation__more[data-v-6b6b846c] .app-navigation-entry{transition:none;transform:none}.navigation__more[data-v-6b6b846c]:has(button[aria-expanded=true]) .app-navigation-entry{transition-delay:0ms}}}.modal-composer[data-v-6b6b846c] .new-post{margin:0;padding:0;max-width:none;position:static;border:0;border-radius:0;box-shadow:none}.modal-composer[data-v-6b6b846c] .new-post:focus-within{box-shadow:none}.modal-errors[data-v-6b6b846c]{padding:calc(var(--default-grid-baseline)*4)}.modal-errors__item[data-v-6b6b846c]{padding:calc(var(--default-grid-baseline)*2) 0;border-bottom:1px solid var(--color-border)}.modal-errors__title[data-v-6b6b846c]{font-weight:700;margin-bottom:4px}.modal-errors__message[data-v-6b6b846c]{color:var(--color-text-lighter);margin-bottom:8px;overflow-wrap:break-word}.error-icon[data-v-6b6b846c]{color:var(--color-error)}[data-v-6b6b846c] .app-navigation-entry{border-radius:8px;margin:2px 0}[data-v-6b6b846c] .app-navigation-entry:hover{background:var(--color-background-hover)}[data-v-6b6b846c] .app-navigation-entry.active{background:var(--color-background-dark)}.navigation__compose.navigation__compose[data-v-6b6b846c]{position:relative;margin:2px 4px 8px;width:calc(100% - 8px);font-weight:600;min-height:44px;border-radius:999px;border:0;padding-inline:8px;overflow:visible;transition:transform .32s cubic-bezier(0.22, 1.2, 0.48, 1)}.navigation__compose[data-v-6b6b846c]::after{content:"";position:absolute;z-index:-1;inset:0;border-radius:inherit;box-shadow:0 0 0 3px color-mix(in srgb, var(--color-primary-element) 34%, transparent),0 0 0 9px color-mix(in srgb, var(--color-primary-element) 14%, transparent);opacity:0;transform:scale(0.94);transition:opacity .28s ease,transform .32s cubic-bezier(0.22, 1.2, 0.48, 1);pointer-events:none;will-change:opacity,transform}.navigation__compose.navigation__compose[data-v-6b6b846c]:is(:hover,:focus-visible){transform:translateY(-1px)}.navigation__compose[data-v-6b6b846c]:is(:hover,:focus-visible)::after{opacity:1;transform:scale(1)}.navigation__compose.navigation__compose[data-v-6b6b846c]:active{transform:translateY(0) scale(0.985)}.navigation__compose[data-v-6b6b846c]:active::after{transform:scale(0.97)}.navigation__compose[data-v-6b6b846c] .plus-icon{width:28px;height:28px;border-radius:50%;background:color-mix(in srgb, var(--color-primary-element-text) 22%, transparent);transition:background-color .2s ease,transform .32s cubic-bezier(0.22, 1.2, 0.48, 1)}.navigation__compose[data-v-6b6b846c] .button-vue__text{margin-inline-start:6px}.navigation__compose[data-v-6b6b846c]:is(:hover,:focus-visible) .plus-icon{transform:scale(1.12);background:color-mix(in srgb, var(--color-primary-element-text) 32%, transparent)}@media(prefers-reduced-motion: reduce){.navigation__compose.navigation__compose[data-v-6b6b846c],.navigation__compose[data-v-6b6b846c]::after,.navigation__compose[data-v-6b6b846c] .plus-icon{transition:none}.navigation__compose[data-v-6b6b846c]:is(:hover,:focus-visible)::after{transform:none}.navigation__compose.navigation__compose[data-v-6b6b846c]:is(:hover,:focus-visible),.navigation__compose.navigation__compose[data-v-6b6b846c]:active{transform:none}.navigation__compose[data-v-6b6b846c]:is(:hover,:focus-visible) .plus-icon{transform:none}}',"",{version:3,sources:["webpack://./src/components/Navigation.vue"],names:[],mappings:"AAMA,qDACC,mCAAA,CACA,0BAAA,CACA,qBAAA,CACA,iBAAA,CAGA,eAAA,CAEA,yDACC,iBAAA,CAIF,qDAGC,uBAAA,CACA,eAAA,CAGD,sCACC,cAAA,CACA,+BAAA,CA4BD,4BACC,yDACC,SAAA,CAEA,+DAAA,CACA,2EACC,CAIF,6CACC,uBAAA,CAGD,yFACC,SAAA,CACA,cAAA,CACA,iDAAA,CAOD,uCACC,yDACC,eAAA,CACA,cAAA,CAGD,yFACC,oBAAA,CAAA,CAAA,CAkBH,2CACC,QAAA,CACA,SAAA,CACA,cAAA,CACA,eAAA,CACA,QAAA,CACA,eAAA,CACA,eAAA,CAID,wDACC,eAAA,CAGD,+BACC,4CAAA,CAEA,qCACC,8CAAA,CACA,2CAAA,CAGD,sCACC,eAAA,CACA,iBAAA,CAGD,wCACC,+BAAA,CACA,iBAAA,CACA,wBAAA,CAIF,6BACC,wBAAA,CAGD,wCACC,iBAAA,CACA,YAAA,CAEA,8CACC,wCAAA,CAGD,+CACC,uCAAA,CA8BF,0DACC,iBAAA,CACA,kBAAA,CAQA,sBAAA,CACA,eAAA,CAYA,eAAA,CAEA,mBAAA,CAIA,QAAA,CAIA,kBAAA,CAKA,gBAAA,CACA,0DAAA,CAwBD,6CACC,UAAA,CACA,iBAAA,CACA,UAAA,CACA,OAAA,CACA,qBAAA,CACA,kKACC,CAED,SAAA,CACA,qBAAA,CACA,4EACC,CAED,mBAAA,CAGA,6BAAA,CAOD,oFACC,0BAAA,CAGD,uEACC,SAAA,CACA,kBAAA,CAGD,iEACC,oCAAA,CAGD,oDACC,qBAAA,CAUD,iDACC,UAAA,CACA,WAAA,CACA,iBAAA,CAGA,iFAAA,CACA,oFACC,CAKF,wDACC,uBAAA,CAGD,2EACC,qBAAA,CACA,iFAAA,CAGD,uCACC,wJAGC,eAAA,CAID,uEACC,cAAA,CAGD,qJAEC,cAAA,CAGD,2EACC,cAAA,CAAA",sourcesContent:["\n/* The button the More menu hangs off is the reader's own account: their\n portrait where the cog was, and the name they publish under beside it.\n `NcAppNavigationSettings` renders that cog from a hard-coded path with no\n slot to replace it, so the icon box carries the picture as its background\n and the cog inside it is hidden rather than fought with. */\n.navigation__more :deep(.button-vue__icon) {\n\tbackground-image: var(--social-face);\n\tbackground-position: center;\n\tbackground-size: cover;\n\tborder-radius: 50%;\n\t// the picture is the icon, so the glyph that was there must not show\n\t// through it — including its own background, which is not transparent\n\toverflow: hidden;\n\n\tsvg {\n\t\tvisibility: hidden;\n\t}\n}\n\n.navigation__more :deep(.button-vue__text) {\n\t// the button's wrapper has no gap of its own, so the name sits against the\n\t// portrait unless it is given one\n\tmargin-inline-start: 8px;\n\tfont-weight: 600;\n}\n\n.navigation__subname {\n\tfont-size: 12px;\n\tcolor: var(--color-text-lighter);\n}\n\n/*\n * The account menu opens as a drawer: the rows come in from the leading edge,\n * one behind the next.\n *\n * `NcAppNavigationSettings` animates its own `max-height`, so the panel grew\n * and the rows inside it were simply there when it finished -- the container\n * moved and its contents did not. These slide in behind it, 34ms apart, in the\n * direction the sidebar itself runs.\n *\n * Driven off `aria-expanded`, which is the accordion's own state and the only\n * hook it offers: there is no `open` prop and no event, and the component's\n * internal class names are content-hashed, so anything keyed on those would\n * break on the next release of the library.\n *\n * The delay comes from `--entry-index`, set in the template. The DOM cannot be\n * counted here: `NcAppNavigationItem` puts every entry in a wrapper of its own,\n * so each one is its parent's first child and `nth-child` hands them all the\n * same delay. There is a test that they are laid out that way, so that this\n * comment stops being true loudly rather than quietly.\n *\n * All of it sits inside `@supports selector(:has(*))` on purpose. Without\n * `:has()` the browser drops the rule that brings the rows *back*, and a bare\n * `opacity: 0` would leave the menu permanently empty -- so where it is not\n * supported, nothing animates and the menu behaves exactly as it does today.\n */\n@supports selector(:has(*)) {\n\t.navigation__more :deep(.app-navigation-entry) {\n\t\topacity: 0;\n\t\t/* the leading edge, whichever side that is */\n\t\ttransform: translateX(calc(var(--social-menu-slide, 1) * -14px));\n\t\ttransition:\n\t\t\topacity .24s ease,\n\t\t\ttransform .34s cubic-bezier(.3, 1.25, .5, 1);\n\t}\n\n\t[dir=\"rtl\"] .navigation__more {\n\t\t--social-menu-slide: -1;\n\t}\n\n\t.navigation__more:has(button[aria-expanded=\"true\"]) :deep(.app-navigation-entry) {\n\t\topacity: 1;\n\t\ttransform: none;\n\t\ttransition-delay: calc(var(--entry-index, 0) * 34ms);\n\t}\n\n\t/* A reader who asked for no movement still gets the menu, all at once and\n\t without the stagger: a row that fades in a fifth of a second after the\n\t one above it is the movement they turned off, even though nothing\n\t travels. */\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.navigation__more :deep(.app-navigation-entry) {\n\t\t\ttransition: none;\n\t\t\ttransform: none;\n\t\t}\n\n\t\t.navigation__more:has(button[aria-expanded=\"true\"]) :deep(.app-navigation-entry) {\n\t\t\ttransition-delay: 0ms;\n\t\t}\n\t}\n}\n\n/*\n * The composer draws its own frame, and in a dialog that is one frame too many.\n *\n * In a timeline it is a card among cards: a border, a radius and the app's\n * resting shadow are how it says it is the box that makes the posts below it,\n * and `position: sticky` keeps it at the top while they scroll past. A dialog\n * has already said all of that -- it is a panel over a dimmed page, with its\n * own edge -- so the inner border reads as a box drawn inside a box, and\n * sticking to the top of something that does not scroll does nothing at all.\n *\n * Undone here rather than in the composer: what changes is not the composer but\n * where it is, and this is the only place that knows.\n */\n.modal-composer :deep(.new-post) {\n\tmargin: 0;\n\tpadding: 0;\n\tmax-width: none;\n\tposition: static;\n\tborder: 0;\n\tborder-radius: 0;\n\tbox-shadow: none;\n}\n\n/* the lift on focus goes with it: there is nothing left to lift */\n.modal-composer :deep(.new-post:focus-within) {\n\tbox-shadow: none;\n}\n\n.modal-errors {\n\tpadding: calc(var(--default-grid-baseline) * 4);\n\n\t&__item {\n\t\tpadding: calc(var(--default-grid-baseline) * 2) 0;\n\t\tborder-bottom: 1px solid var(--color-border);\n\t}\n\n\t&__title {\n\t\tfont-weight: 700;\n\t\tmargin-bottom: 4px;\n\t}\n\n\t&__message {\n\t\tcolor: var(--color-text-lighter);\n\t\tmargin-bottom: 8px;\n\t\toverflow-wrap: break-word;\n\t}\n}\n\n.error-icon {\n\tcolor: var(--color-error);\n}\n\n:deep(.app-navigation-entry) {\n\tborder-radius: 8px;\n\tmargin: 2px 0;\n\n\t&:hover {\n\t\tbackground: var(--color-background-hover);\n\t}\n\n\t&.active {\n\t\tbackground: var(--color-background-dark);\n\t}\n}\n\n/* The call to action.\n *\n * Concentric: a pill that becomes briefly larger than itself. Two rings open\n * outward from its own outline while the disc grows inside it, so everything on\n * screen expands from the same two centres at once. Nothing fills, nothing\n * sweeps, no colour changes hands — the button is the primary colour at rest and\n * the primary colour when reached for, and the only thing that happens is size.\n *\n * The shape is why it works. At 44px tall a full pill is a 22px radius, so its\n * end caps are arcs of a 22px circle; the plus already sits in a 28px disc, a\n * 14px circle, with 8px of air around it. Rounded all the way, the two are the\n * same family of curve and a ring drawn around the outside is concentric with\n * the badge inside. At the 8px corner this button used to have, the same ring\n * cut across the disc instead of agreeing with it.\n *\n * Rings rather than a blurred shadow: `0 0 0 ` is a hard outline offset\n * from the border box, which is the only kind of shadow that stays the button's\n * own shape at any distance from it.\n */\n\n/* The class is written twice because it has to win, not because it is two\n * things. `.button-vue[data-v-…]` sets `border-radius`, `font-weight` and\n * `transition` at exactly the specificity a single scoped class has, which\n * leaves the winner to source order — and the order of this component's styles\n * against the library's is not something this file gets to decide. Everything\n * that would otherwise be a silent tie lives in here. */\n.navigation__compose.navigation__compose {\n\tposition: relative;\n\tmargin: 2px 4px 8px;\n\t/* `wide` sets `width: 100%`, which is the container's full content width --\n\t and the margin above it has nowhere to go. The button was as wide as the\n\t whole list *and* shifted 4px right, so its right edge overhung the rows\n\t below it and ran into the edge of the sidebar; the left looked correct\n\t because there the margin pushed it inward. The width has to come off\n\t explicitly: `auto` is no use on a `