From 38050c3e6f3fc50ad7918598c641f7ae857d642d Mon Sep 17 00:00:00 2001 From: Kostiantyn Miakshyn Date: Sat, 29 Nov 2025 23:38:19 +0100 Subject: [PATCH 1/3] feat: Add the possibility to create invitation links to circles Signed-off-by: Kostiantyn Miakshyn --- appinfo/info.xml | 2 +- appinfo/routes.php | 4 + lib/Controller/LocalController.php | 105 +++++++++++++++++ lib/Db/CircleInvitationRequest.php | 54 +++++++++ lib/Db/CircleRequest.php | 5 + lib/Db/CoreQueryBuilder.php | 58 ++++++++++ lib/Db/CoreRequestBuilder.php | 7 ++ .../CircleInvitationNotFoundException.php | 13 +++ lib/FederatedItems/CircleCreateInvitation.php | 65 +++++++++++ lib/FederatedItems/CircleJoin.php | 11 +- lib/FederatedItems/CircleRevokeInvitation.php | 52 +++++++++ .../Version8100Date20261129153333.php | 73 ++++++++++++ lib/Model/Circle.php | 29 +++++ lib/Model/CircleInvitation.php | 108 ++++++++++++++++++ lib/Model/ModelManager.php | 15 +++ lib/Model/Probes/CircleProbe.php | 29 +++++ lib/Service/CircleService.php | 66 ++++++++++- 17 files changed, 689 insertions(+), 7 deletions(-) create mode 100644 lib/Db/CircleInvitationRequest.php create mode 100644 lib/Exceptions/CircleInvitationNotFoundException.php create mode 100644 lib/FederatedItems/CircleCreateInvitation.php create mode 100644 lib/FederatedItems/CircleRevokeInvitation.php create mode 100644 lib/Migration/Version8100Date20261129153333.php create mode 100644 lib/Model/CircleInvitation.php diff --git a/appinfo/info.xml b/appinfo/info.xml index dec5242e9..4f7f9c526 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -12,7 +12,7 @@ Those groups of people can then be used by any other app for sharing purpose. ]]> - 35.0.0-dev.0 + 35.0.0-dev.1 agpl Maxence Lange diff --git a/appinfo/routes.php b/appinfo/routes.php index 9066dc52e..2d4b607d6 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -36,6 +36,10 @@ ['name' => 'Local#editName', 'url' => '/circles/{circleId}/name', 'verb' => 'PUT'], ['name' => 'Local#editDescription', 'url' => '/circles/{circleId}/description', 'verb' => 'PUT'], ['name' => 'Local#editSetting', 'url' => '/circles/{circleId}/setting', 'verb' => 'PUT'], + ['name' => 'Local#createInvitation', 'url' => '/circles/{circleId}/invitation', 'verb' => 'PUT'], + ['name' => 'Local#revokeInvitation', 'url' => '/circles/{circleId}/invitation', 'verb' => 'DELETE'], + ['name' => 'Local#getInvitation', 'url' => '/invitations/{invitationCode}', 'verb' => 'GET'], + ['name' => 'Local#joinInvitation', 'url' => '/invitations/{invitationCode}', 'verb' => 'POST'], ['name' => 'Local#editConfig', 'url' => '/circles/{circleId}/config', 'verb' => 'PUT'], ['name' => 'Local#circleAvatar', 'url' => '/circles/{circleId}/avatar', 'verb' => 'GET'], ['name' => 'Local#uploadAvatar', 'url' => '/circles/{circleId}/avatar', 'verb' => 'POST'], diff --git a/lib/Controller/LocalController.php b/lib/Controller/LocalController.php index a90bc3914..6ad03df4f 100644 --- a/lib/Controller/LocalController.php +++ b/lib/Controller/LocalController.php @@ -599,6 +599,111 @@ public function link(string $circleId, string $singleId): DataResponse { } } + #[NoAdminRequired] + public function createInvitation(string $circleId): DataResponse { + try { + $this->setCurrentFederatedUser(); + + $memberUser = $this->permissionService->userMustBeMember($this->userSession->getUser()->getUID(), $circleId); + $this->permissionService->memberMustBeAtLeastAdmin($memberUser); + + $outcome = $this->circleService->createInvitation($circleId); + + return new DataResponse($this->serializeArray($outcome)); + } catch (InsufficientPermissionException $e) { + $response = new DataResponse(['message' => $e->getMessage()], Http::STATUS_FORBIDDEN); + $response->throttle(); + return $response; + } catch (\Exception $e) { + $this->e($e, ['circleId' => $circleId]); + throw new OCSException($e->getMessage(), (int)$e->getCode(), $e); + } + } + + #[NoAdminRequired] + public function revokeInvitation(string $circleId): DataResponse { + try { + $this->setCurrentFederatedUser(); + + $memberUser = $this->permissionService->userMustBeMember($this->userSession->getUser()->getUID(), $circleId); + $this->permissionService->memberMustBeAtLeastAdmin($memberUser); + + $outcome = $this->circleService->revokeInvitation($circleId); + + return new DataResponse($this->serializeArray($outcome)); + } catch (InsufficientPermissionException $e) { + $response = new DataResponse(['message' => $e->getMessage()], Http::STATUS_FORBIDDEN); + $response->throttle(); + return $response; + } catch (\Exception $e) { + $this->e($e, ['circleId' => $circleId]); + throw new OCSException($e->getMessage(), (int)$e->getCode(), $e); + } + } + + #[NoAdminRequired] + #[BruteForceProtection(action: 'getInvitation')] + public function getInvitation(string $invitationCode): DataResponse { + try { + $this->setCurrentFederatedUser(); + + $circleProbe = (new CircleProbe()) + ->includeSystemCircles() + ->includeHiddenCircles() + ->filterByInvitationCode($invitationCode); + + $circles = $this->circleService->getCircles($circleProbe); + if (empty($circles)) { + return new DataResponse([], Http::STATUS_NOT_FOUND); + } + $circle = reset($circles); + + $membershipStatus = 'NOT_A_MEMBER'; + if ($circle->hasInitiator()) { + if ($circle->getInitiator()->getLevel() > Member::LEVEL_NONE) { + $membershipStatus = 'MEMBER'; + } elseif ($circle->getInitiator()->getStatus() === Member::STATUS_REQUEST) { + $membershipStatus = 'REQUESTED_MEMBERSHIP'; + } + } + + return new DataResponse([ + 'circleId' => $circle->getSingleId(), + 'circleName' => $circle->getName(), + 'membershipStatus' => $membershipStatus, + ]); + } catch (\Exception $e) { + $this->e($e, ['circleId' => $invitationCode]); + throw new OCSException($e->getMessage(), (int)$e->getCode(), $e); + } + } + + #[NoAdminRequired] + #[BruteForceProtection(action: 'joinInvitation')] + public function joinInvitation(string $invitationCode): DataResponse { + try { + $this->setCurrentFederatedUser(); + + $circleProbe = (new CircleProbe()) + ->includeSystemCircles() + ->includeHiddenCircles() + ->filterByInvitationCode($invitationCode); + + $circles = $this->circleService->getCircles($circleProbe); + if (empty($circles)) { + return new DataResponse([], Http::STATUS_NOT_FOUND); + } + $circle = reset($circles); + + $result = $this->circleService->circleJoin($circle->getSingleId(), $invitationCode); + + return new DataResponse($this->serializeArray($result)); + } catch (\Exception $e) { + $this->e($e, ['circleId' => $invitationCode]); + throw new OCSException($e->getMessage(), (int)$e->getCode(), $e); + } + } + /** * @throws FederatedUserException * @throws FederatedUserNotFoundException diff --git a/lib/Db/CircleInvitationRequest.php b/lib/Db/CircleInvitationRequest.php new file mode 100644 index 000000000..492214e67 --- /dev/null +++ b/lib/Db/CircleInvitationRequest.php @@ -0,0 +1,54 @@ +confirmValidId($circleInvitation->getCircleId()); + + $qb = $this->getQueryBuilder(); + $qb->insert(self::TABLE_INVITATIONS) + ->setValue('created', $qb->createNamedParameter($this->timezoneService->getUTCDate())); + $qb->setValue('circle_id', $qb->createNamedParameter($circleInvitation->getCircleId())) + ->setValue('invitation_code', $qb->createNamedParameter($circleInvitation->getInvitationCode())) + ->setValue('created_by', $qb->createNamedParameter($circleInvitation->getCreatedBy())); + $qb->executeStatement(); + } + + /** + * @throws InvalidIdException + */ + public function replace(CircleInvitation $circleInvitation): void { + $qb = $this->getQueryBuilder(); + $qb->delete(self::TABLE_INVITATIONS); + $qb->limitToCircleId($circleInvitation->getCircleId()); + $qb->executeStatement(); + + $this->save($circleInvitation); + } + + public function delete(string $circleId): void { + $qb = $this->getQueryBuilder(); + $qb->delete(self::TABLE_INVITATIONS); + $qb->limitToCircleId($circleId); + $qb->executeStatement(); + } +} diff --git a/lib/Db/CircleRequest.php b/lib/Db/CircleRequest.php index 5cd18172e..b512e07be 100644 --- a/lib/Db/CircleRequest.php +++ b/lib/Db/CircleRequest.php @@ -159,6 +159,7 @@ public function getCircles(?IFederatedUser $initiator, CircleProbe $probe): arra $qb->limitToInitiator(CoreQueryBuilder::CIRCLE, $initiator); $qb->orderBy($qb->generateAlias(CoreQueryBuilder::CIRCLE, CoreQueryBuilder::INITIATOR) . '.level', 'desc'); $qb->addOrderBy(CoreQueryBuilder::CIRCLE . '.display_name', 'asc'); + $qb->leftJoinCircleInvitation(CoreQueryBuilder::CIRCLE); } if ($probe->hasFilterMember()) { $qb->limitToDirectMembership(CoreQueryBuilder::CIRCLE, $probe->getFilterMember()); @@ -166,6 +167,9 @@ public function getCircles(?IFederatedUser $initiator, CircleProbe $probe): arra if ($probe->hasFilterCircle()) { $qb->filterCircleDetails($probe->getFilterCircle()); } + if ($probe->hasInvitationCode()) { + $qb->filterInvitationCode(CoreQueryBuilder::CIRCLE, $probe->getInvitationCode()); + } if ($probe->hasFilterRemoteInstance()) { $qb->limitToRemoteInstance(CoreQueryBuilder::CIRCLE, $probe->getFilterRemoteInstance(), false); } @@ -365,6 +369,7 @@ public function getCircle( $qb->limitToUniqueId($id); $qb->filterCircles(CoreQueryBuilder::CIRCLE, $probe); $qb->leftJoinOwner(CoreQueryBuilder::CIRCLE); + $qb->leftJoinCircleInvitation(CoreQueryBuilder::CIRCLE); // $qb->setOptions( // [CoreRequestBuilder::CIRCLE, CoreRequestBuilder::INITIATOR], [ // 'mustBeMember' => false, diff --git a/lib/Db/CoreQueryBuilder.php b/lib/Db/CoreQueryBuilder.php index f6c76c9cf..9630b4324 100644 --- a/lib/Db/CoreQueryBuilder.php +++ b/lib/Db/CoreQueryBuilder.php @@ -56,6 +56,7 @@ class CoreQueryBuilder extends ExtendedQueryBuilder { public const TOKEN = 'u'; public const OPTIONS = 'v'; public const HELPER = 'w'; + public const INVITATION = 'x'; public static $SQL_PATH = [ self::SINGLE => [ @@ -65,6 +66,7 @@ class CoreQueryBuilder extends ExtendedQueryBuilder { self::OPTIONS => [ ], self::MEMBER, + self::INVITATION, self::OWNER => [ self::BASED_ON ], @@ -835,6 +837,28 @@ public function leftJoinOwner(string $alias, string $field = 'unique_id'): void $this->leftJoinBasedOn($aliasMember); } + /** + * @throws RequestBuilderException + */ + public function leftJoinCircleInvitation(string $alias, string $field = 'unique_id'): void { + if ($this->getType() !== QueryBuilder::SELECT) { + return; + } + + try { + $aliasInvitation = $this->generateAlias($alias, self::INVITATION, $options); + } catch (RequestBuilderException $e) { + return; + } + + $expr = $this->expr(); + $this->generateCircleInvitationSelectAlias($aliasInvitation) + ->leftJoin( + $alias, CoreRequestBuilder::TABLE_INVITATIONS, $aliasInvitation, + $expr->eq($aliasInvitation . '.circle_id', $alias . '.' . $field), + ); + } + /** * @param CircleProbe $probe * @param string $alias @@ -1289,6 +1313,12 @@ protected function limitInitiatorVisibility(string $alias): ICompositeExpression $aliasMembershipCircle = $this->generateAlias($aliasMembership, self::CONFIG, $options); $levelCheck = [$aliasMembership]; + // no need to check anything, we are filtering by invitation code + $invitationCode = $this->get('filterInvitationCode', $options, ''); + if ($invitationCode) { + return $this->expr()->andX($this->expr()->eq('1', '1')); + } + $directMember = ''; if ($this->getBool('initiatorDirectMember', $options, false)) { $directMember = $this->generateAlias($alias, self::DIRECT_INITIATOR, $options); @@ -1370,6 +1400,23 @@ protected function limitInitiatorVisibility(string $alias): ICompositeExpression return $orX; } + public function filterInvitationCode(string $alias, string $invitationCode): void { + if ($this->getType() !== QueryBuilder::SELECT) { + return; + } + + try { + $aliasInvitation = $this->generateAlias($alias, self::INVITATION, $options); + } catch (RequestBuilderException $e) { + return; + } + + $expr = $this->expr(); + $this->andWhere( + $expr->eq($aliasInvitation . '.invitation_code', $this->createNamedParameter($invitationCode)) + ); + } + /** * @param string $aliasCircle * @param CircleProbe $probe @@ -1567,6 +1614,17 @@ private function generateCircleSelectAlias(string $alias, array $default = []): return $this; } + private function generateCircleInvitationSelectAlias(string $alias, array $default = []): self { + $this->generateSelectAlias( + CoreRequestBuilder::$tables[CoreRequestBuilder::TABLE_INVITATIONS], + $alias, + $alias, + $default + ); + + return $this; + } + /** * @param string $alias * @param array $default diff --git a/lib/Db/CoreRequestBuilder.php b/lib/Db/CoreRequestBuilder.php index f20a5d565..6ebdb6d24 100644 --- a/lib/Db/CoreRequestBuilder.php +++ b/lib/Db/CoreRequestBuilder.php @@ -30,6 +30,7 @@ class CoreRequestBuilder { public const TABLE_STORAGES = 'storages'; public const TABLE_CIRCLE = 'circles_circle'; + public const TABLE_INVITATIONS = 'circles_invitations'; public const TABLE_MEMBER = 'circles_member'; public const TABLE_MEMBERSHIP = 'circles_membership'; public const TABLE_REMOTE = 'circles_remote'; @@ -62,6 +63,12 @@ class CoreRequestBuilder { 'contact_groupname', 'creation' ], + self::TABLE_INVITATIONS => [ + 'circle_id', + 'invitation_code', + 'created_by', + 'created', + ], self::TABLE_MEMBER => [ 'circle_id', 'member_id', diff --git a/lib/Exceptions/CircleInvitationNotFoundException.php b/lib/Exceptions/CircleInvitationNotFoundException.php new file mode 100644 index 000000000..6b89202a3 --- /dev/null +++ b/lib/Exceptions/CircleInvitationNotFoundException.php @@ -0,0 +1,13 @@ +getCircle(); + + $initiatorHelper = new MemberHelper($circle->getInitiator()); + $initiatorHelper->mustBeAdmin(); + + $new = clone $circle; + + $invitationCode = $this->random->generate(16, ISecureRandom::CHAR_HUMAN_READABLE); + + $circleInvitation = new CircleInvitation(); + $circleInvitation->setCircleId($circle->getSingleId()); + $circleInvitation->setInvitationCode($invitationCode); + $circleInvitation->setCreatedBy($circle->getInitiator()->getUserId()); + + $new->setCircleInvitation($circleInvitation); + $event->getData()->sObj('circle_invitation', $circleInvitation); + + $event->setOutcome($this->serialize($new)); + } + + public function manage(FederatedEvent $event): void { + /** @var CircleInvitation $circleInvitation */ + $circleInvitation = $event->getData()->gObj('circle_invitation'); + $this->circleInvitationRequest->replace($circleInvitation); + + // todo: do we need separate event here? + $this->eventService->circleEditing($event); + } + + public function result(FederatedEvent $event, array $results): void { + // todo: do we need separate event here? + $this->eventService->circleEdited($event, $results); + } +} diff --git a/lib/FederatedItems/CircleJoin.php b/lib/FederatedItems/CircleJoin.php index b8fdcd169..f6626ccd3 100644 --- a/lib/FederatedItems/CircleJoin.php +++ b/lib/FederatedItems/CircleJoin.php @@ -21,7 +21,6 @@ use OCA\Circles\Exceptions\RequestBuilderException; use OCA\Circles\Exceptions\UnknownRemoteException; use OCA\Circles\IFederatedItem; -use OCA\Circles\IFederatedItemAsyncProcess; use OCA\Circles\IFederatedItemHighSeverity; use OCA\Circles\IFederatedItemInitiatorMembershipNotRequired; use OCA\Circles\IFederatedItemMemberCheckNotRequired; @@ -45,7 +44,6 @@ class CircleJoin implements IFederatedItem, IFederatedItemInitiatorMembershipNotRequired, - IFederatedItemAsyncProcess, IFederatedItemHighSeverity, IFederatedItemMemberCheckNotRequired, IFederatedItemMemberOptional { @@ -94,7 +92,8 @@ public function verify(FederatedEvent $event): void { $member->setInvitedBy($initiator->getInvitedBy()); } - $this->manageMemberStatus($circle, $member); + $invitationCode = $event->getParams()->g('invitationCode'); + $this->manageMemberStatus($circle, $member, $invitationCode); $this->circleService->confirmCircleNotFull($circle); @@ -210,11 +209,12 @@ public function result(FederatedEvent $event, array $results): void { /** * @param Circle $circle * @param Member $member + * @param string|null $invitationCode * * @throws FederatedItemBadRequestException * @throws RequestBuilderException */ - private function manageMemberStatus(Circle $circle, Member $member) { + private function manageMemberStatus(Circle $circle, Member $member, ?string $invitationCode = null) { try { $knownMember = $this->memberRequest->searchMember($member); if ($knownMember->getLevel() === Member::LEVEL_NONE) { @@ -234,7 +234,8 @@ private function manageMemberStatus(Circle $circle, Member $member) { throw new MemberAlreadyExistsException(StatusCode::$CIRCLE_JOIN[122], 122); } catch (MemberNotFoundException) { - if (!$circle->isConfig(Circle::CFG_OPEN)) { + $allowedToJoin = $invitationCode && $circle->getCircleInvitation()?->getInvitationCode() === $invitationCode; + if (!$circle->isConfig(Circle::CFG_OPEN) && !$allowedToJoin) { throw new FederatedItemBadRequestException(StatusCode::$CIRCLE_JOIN[124], 124); } diff --git a/lib/FederatedItems/CircleRevokeInvitation.php b/lib/FederatedItems/CircleRevokeInvitation.php new file mode 100644 index 000000000..9285ff19a --- /dev/null +++ b/lib/FederatedItems/CircleRevokeInvitation.php @@ -0,0 +1,52 @@ +getCircle(); + + $initiatorHelper = new MemberHelper($circle->getInitiator()); + $initiatorHelper->mustBeAdmin(); + + $new = clone $circle; + $new->setCircleInvitation(null); + + $event->setOutcome($this->serialize($new)); + } + + public function manage(FederatedEvent $event): void { + $circle = clone $event->getCircle(); + + $this->circleInvitationRequest->delete($circle->getSingleId()); + // todo: do we need separate event here? + $this->eventService->circleEditing($event); + } + + public function result(FederatedEvent $event, array $results): void { + // todo: do we need separate event here? + $this->eventService->circleEdited($event, $results); + } +} diff --git a/lib/Migration/Version8100Date20261129153333.php b/lib/Migration/Version8100Date20261129153333.php new file mode 100644 index 000000000..027f10455 --- /dev/null +++ b/lib/Migration/Version8100Date20261129153333.php @@ -0,0 +1,73 @@ +hasTable('circles_invitations')) { + $table = $schema->createTable('circles_invitations'); + + $table->addColumn( + 'id', 'integer', [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 8, + 'unsigned' => true, + ] + ); + $table->addColumn( + 'circle_id', 'string', [ + 'length' => 32, + 'notnull' => true, + ] + ); + $table->addColumn( + 'invitation_code', 'string', [ + 'length' => 16, + 'notnull' => true, + ] + ); + $table->addColumn( + 'created_by', 'string', [ + 'length' => 255, + 'notnull' => true, + ] + ); + $table->addColumn( + 'created', 'datetime', [ + 'notnull' => true, + ] + ); + + $table->setPrimaryKey(['id']); + $table->addUniqueIndex(['circle_id']); + $table->addUniqueIndex(['invitation_code']); + } + + return $schema; + } +} diff --git a/lib/Model/Circle.php b/lib/Model/Circle.php index a29fa2e0b..047695db5 100644 --- a/lib/Model/Circle.php +++ b/lib/Model/Circle.php @@ -198,6 +198,9 @@ class Circle extends ManagedModel implements IEntity, IDeserializable, IQueryRow /** @var int */ private $populationInherited = 0; + /** @var CircleInvitation|null */ + private $circleInvitation = null; + // /** @var bool */ // private $hidden = false; @@ -641,6 +644,24 @@ public function getPopulationInherited(): int { return $this->populationInherited; } + /** + * @param CircleInvitation|null $circleInvitation + * + * @return Circle + */ + public function setCircleInvitation(?CircleInvitation $circleInvitation): self { + $this->circleInvitation = $circleInvitation; + + return $this; + } + + /** + * @return CircleInvitation|null + */ + public function getCircleInvitation(): ?CircleInvitation { + return $this->circleInvitation; + } + /** * @param array $settings * @@ -776,6 +797,13 @@ public function import(array $data): IDeserializable { } catch (InvalidItemException) { } + try { + /** @var CircleInvitation $circleInvitation */ + $circleInvitation = $this->deserialize($this->getArray('invitation', $data), CircleInvitation::class); + $this->setCircleInvitation($circleInvitation); + } catch (InvalidItemException $e) { + } + return $this; } @@ -826,6 +854,7 @@ public function jsonSerialize(): array { try { $initiatorHelper->mustBeAdmin(); $arr['settings'] = $this->getSettings(); + $arr['invitationCode'] = $this->getCircleInvitation()?->getInvitationCode(); } catch (MemberHelperException|MemberLevelException) { } } diff --git a/lib/Model/CircleInvitation.php b/lib/Model/CircleInvitation.php new file mode 100644 index 000000000..bc278d89c --- /dev/null +++ b/lib/Model/CircleInvitation.php @@ -0,0 +1,108 @@ +circleId = $circleId; + + return $this; + } + + public function getCircleId(): string { + return $this->circleId; + } + + public function setInvitationCode(string $invitationCode): self { + $this->invitationCode = $invitationCode; + + return $this; + } + + public function getInvitationCode(): string { + return $this->invitationCode; + } + + public function setCreatedBy(string $createdBy): self { + $this->createdBy = $createdBy; + + return $this; + } + + public function getCreatedBy(): string { + return $this->createdBy; + } + + public function setCreated(int $created): self { + $this->created = $created; + + return $this; + } + + public function getCreated(): int { + return $this->created; + } + + public function import(array $data): IDeserializable { + if (!$this->get('circleId', $data)) { + throw new InvalidItemException(); + } + + $this->setCircleId($this->get('circleId', $data)) + ->setInvitationCode($this->get('invitationCode', $data)) + ->setCreatedBy($this->get('createdBy', $data)) + ->setCreated($this->getInt('created', $data)); + + return $this; + } + + public function jsonSerialize(): array { + $arr = [ + 'circleId' => $this->getCircleId(), + 'invitationCode' => $this->getInvitationCode(), + 'createdBy' => $this->getCreatedBy(), + 'created' => $this->getCreated(), + ]; + + return $arr; + } + + public function importFromDatabase(array $data, string $prefix = ''): IQueryRow { + if (!$this->get($prefix . 'circle_id', $data)) { + throw new CircleInvitationNotFoundException(); + } + + $this->setCircleId($this->get($prefix . 'circle_id', $data)) + ->setInvitationCode($this->get($prefix . 'invitation_code', $data)) + ->setCreatedBy($this->get($prefix . 'created_by', $data)); + + $created = $this->get($prefix . 'created', $data); + $dateTime = \DateTime::createFromFormat('Y-m-d H:i:s', $created); + $timestamp = $dateTime ? $dateTime->getTimestamp() : (int)strtotime($created); + $this->setCreated($timestamp); + + return $this; + } +} diff --git a/lib/Model/ModelManager.php b/lib/Model/ModelManager.php index 78afd8c64..35969b3e4 100644 --- a/lib/Model/ModelManager.php +++ b/lib/Model/ModelManager.php @@ -14,6 +14,7 @@ use OCA\Circles\Db\CoreQueryBuilder; use OCA\Circles\Db\MemberRequest; use OCA\Circles\Db\MembershipRequest; +use OCA\Circles\Exceptions\CircleInvitationNotFoundException; use OCA\Circles\Exceptions\CircleNotFoundException; use OCA\Circles\Exceptions\FederatedItemException; use OCA\Circles\Exceptions\FederatedUserNotFoundException; @@ -170,6 +171,12 @@ public function manageImportFromDatabase(ManagedModel $model, array $data, strin } } + if ($model instanceof CircleInvitation) { + if ($base === '') { + $base = CoreQueryBuilder::INVITATION; + } + } + if ($model instanceof Member) { if ($base === '') { $base = CoreQueryBuilder::MEMBER; @@ -249,6 +256,14 @@ private function importIntoCircle(Circle $circle, array $data, string $path, str } catch (MemberNotFoundException) { } break; + case CoreQueryBuilder::INVITATION: + try { + $circleInvitation = new CircleInvitation(); + $circleInvitation->importFromDatabase($data, $prefix); + $circle->setCircleInvitation($circleInvitation); + } catch (CircleInvitationNotFoundException $e) { + } + break; } } diff --git a/lib/Model/Probes/CircleProbe.php b/lib/Model/Probes/CircleProbe.php index 3e0676a9a..3c397ee16 100644 --- a/lib/Model/Probes/CircleProbe.php +++ b/lib/Model/Probes/CircleProbe.php @@ -21,6 +21,7 @@ class CircleProbe extends MemberProbe { private int $filter = Circle::CFG_SINGLE; private bool $includeNonVisible = false; private bool $visitSingleCircles = false; + private ?string $invitationCode = null; private int $limitConfig = 0; /** @@ -322,6 +323,33 @@ public function isFiltered(int $config): bool { return (($this->filtered() & $config) !== 0); } + /** + * Apply a filter on the invitation code + * + * @param string $invitationCode + * + * @return $this + */ + public function filterByInvitationCode(string $invitationCode): self { + $this->invitationCode = str_replace('-', '', $invitationCode); + + return $this; + } + + /** + * @return bool + */ + public function hasInvitationCode(): bool { + return ($this->invitationCode !== null); + } + + /** + * @return string|null + */ + public function getInvitationCode(): ?string { + return $this->invitationCode; + } + /** * Return an array with includes as options * @@ -345,6 +373,7 @@ public function getAsOptions(): array { 'filterBackendCircles' => $this->isIncluded(Circle::CFG_BACKEND), 'filterSystemCircles' => $this->isIncluded(Circle::CFG_SYSTEM), 'filterPersonalCircles' => $this->isIncluded(Circle::CFG_PERSONAL), + 'filterInvitationCode' => $this->invitationCode, ], parent::getAsOptions() ); diff --git a/lib/Service/CircleService.php b/lib/Service/CircleService.php index cb8609452..548245be8 100644 --- a/lib/Service/CircleService.php +++ b/lib/Service/CircleService.php @@ -27,10 +27,12 @@ use OCA\Circles\Exceptions\UnknownRemoteException; use OCA\Circles\FederatedItems\CircleConfig; use OCA\Circles\FederatedItems\CircleCreate; +use OCA\Circles\FederatedItems\CircleCreateInvitation; use OCA\Circles\FederatedItems\CircleDestroy; use OCA\Circles\FederatedItems\CircleEdit; use OCA\Circles\FederatedItems\CircleJoin; use OCA\Circles\FederatedItems\CircleLeave; +use OCA\Circles\FederatedItems\CircleRevokeInvitation; use OCA\Circles\FederatedItems\CircleSetting; use OCA\Circles\IEntity; use OCA\Circles\IFederatedUser; @@ -288,6 +290,60 @@ public function updateSetting(string $circleId, string $setting, ?string $value) return $event->getOutcome(); } + /** + * @param string $circleId + * + * @return array + * @throws CircleNotFoundException + * @throws FederatedEventException + * @throws FederatedItemException + * @throws InitiatorNotConfirmedException + * @throws InitiatorNotFoundException + * @throws OwnerNotFoundException + * @throws RemoteInstanceException + * @throws RemoteNotFoundException + * @throws RemoteResourceNotFoundException + * @throws RequestBuilderException + * @throws UnknownRemoteException + */ + public function createInvitation(string $circleId): array { + $circle = $this->getCircle($circleId); + + $event = new FederatedEvent(CircleCreateInvitation::class); + $event->setCircle($circle); + + $this->federatedEventService->newEvent($event); + + return $event->getOutcome(); + } + + /** + * @param string $circleId + * + * @return array + * @throws CircleNotFoundException + * @throws FederatedEventException + * @throws FederatedItemException + * @throws InitiatorNotConfirmedException + * @throws InitiatorNotFoundException + * @throws OwnerNotFoundException + * @throws RemoteInstanceException + * @throws RemoteNotFoundException + * @throws RemoteResourceNotFoundException + * @throws RequestBuilderException + * @throws UnknownRemoteException + */ + public function revokeInvitation(string $circleId): array { + $circle = $this->getCircle($circleId); + + $event = new FederatedEvent(CircleRevokeInvitation::class); + $event->setCircle($circle); + + $this->federatedEventService->newEvent($event); + + return $event->getOutcome(); + } + /** * @param string $circleId * @param string $name @@ -373,7 +429,8 @@ public function updateDescription(string $circleId, string $description): array * @throws UnknownRemoteException * @throws RequestBuilderException */ - public function circleJoin(string $circleId): array { + public function circleJoin(string $circleId, ?string $invitationCode = null): array { + $invitationCode = $invitationCode ? str_replace('-', '', $invitationCode) : null; $this->federatedUserService->mustHaveCurrentUser(); /** @var FederatedUser $currentUser */ $currentUser = $this->federatedUserService->getCurrentUser(); @@ -382,6 +439,12 @@ public function circleJoin(string $circleId): array { $probe->includeNonVisibleCircles() ->emulateVisitor(); + if ($invitationCode) { + $probe->includeSystemCircles() + ->includeHiddenCircles() + ->filterByInvitationCode($invitationCode); + } + $circle = $this->circleRequest->getCircle( $circleId, $currentUser, @@ -393,6 +456,7 @@ public function circleJoin(string $circleId): array { } $event = new FederatedEvent(CircleJoin::class); + $event->setParams(new SimpleDataStore(['invitationCode' => $invitationCode])); $event->setCircle($circle); $this->federatedEventService->newEvent($event); From e779a6b86184dbddd68d0c5ed2e609226b527c30 Mon Sep 17 00:00:00 2001 From: Kostiantyn Miakshyn Date: Sun, 26 Jul 2026 17:30:32 +0200 Subject: [PATCH 2/3] feat: Add the possibility to create invitation links to circles (FE) Signed-off-by: Kostiantyn Miakshyn --- src/teams/router.ts | 7 + .../CircleConfigCheckboxesList.vue | 89 +++++++++++ .../CircleConfigInvitationLink.vue | 118 +++++++++++++++ .../CircleDetails/CircleSettings.vue | 98 ++---------- src/teams/team-page/models/circle.ts | 8 + src/teams/team-page/models/constants.ts | 45 ++++-- src/teams/team-page/services/circles.ts | 44 ++++++ src/teams/team-page/store/circles.js | 44 ++++++ src/teams/views/JoinInvitation.vue | 140 ++++++++++++++++++ 9 files changed, 501 insertions(+), 92 deletions(-) create mode 100644 src/teams/team-page/components/CircleDetails/CircleConfigs/CircleConfigCheckboxesList.vue create mode 100644 src/teams/team-page/components/CircleDetails/CircleConfigs/CircleConfigInvitationLink.vue create mode 100644 src/teams/views/JoinInvitation.vue diff --git a/src/teams/router.ts b/src/teams/router.ts index 3789376f0..7e220a8cb 100644 --- a/src/teams/router.ts +++ b/src/teams/router.ts @@ -8,6 +8,7 @@ import type { RouteRecordRaw } from 'vue-router' import { generateUrl } from '@nextcloud/router' import { createRouter, createWebHistory } from 'vue-router' import HomeView from './views/HomeView.vue' +import JoinInvitation from './views/JoinInvitation.vue' import TeamDashboardView from './views/TeamDashboardView.vue' import TeamPage from './views/TeamPage.vue' import TeamSettingsView from './views/TeamSettingsView.vue' @@ -19,6 +20,12 @@ const routes: RouteRecordRaw[] = [ component: HomeView, }, { + name: 'join-invitation', + path: '/join/:invitationCode', + component: JoinInvitation, + }, + { + name: 'team', path: '/team/:teamId', component: TeamPage, props: true, diff --git a/src/teams/team-page/components/CircleDetails/CircleConfigs/CircleConfigCheckboxesList.vue b/src/teams/team-page/components/CircleDetails/CircleConfigs/CircleConfigCheckboxesList.vue new file mode 100644 index 000000000..8280b2a02 --- /dev/null +++ b/src/teams/team-page/components/CircleDetails/CircleConfigs/CircleConfigCheckboxesList.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/src/teams/team-page/components/CircleDetails/CircleConfigs/CircleConfigInvitationLink.vue b/src/teams/team-page/components/CircleDetails/CircleConfigs/CircleConfigInvitationLink.vue new file mode 100644 index 000000000..77acb8494 --- /dev/null +++ b/src/teams/team-page/components/CircleDetails/CircleConfigs/CircleConfigInvitationLink.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/src/teams/team-page/components/CircleDetails/CircleSettings.vue b/src/teams/team-page/components/CircleDetails/CircleSettings.vue index a832d4dce..79e393ce2 100644 --- a/src/teams/team-page/components/CircleDetails/CircleSettings.vue +++ b/src/teams/team-page/components/CircleDetails/CircleSettings.vue @@ -6,23 +6,15 @@ \n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n\n\n\n\n","\n\n\n\n\n\n\n","// @ts-nocheck\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { MemberLevel, MemberType } from '../models/constants.ts'\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { MemberLevels } from '../models/constants.ts'\ninterface MemberPairs {\n\tid: string\n\ttype: MemberType\n}\n\ntype CircleEditType = 'name' | 'description' | 'settings' | 'config'\nexport enum CircleEdit {\n\tName = 'name',\n\tDescription = 'description',\n\tSettings = 'settings',\n\tConfig = 'config',\n}\n\ninterface CircleSetting {\n\tsetting: string\n\tvalue: string\n}\n\n/**\n * Get the circles list without the members\n *\n * @return\n */\nexport async function getCircles() {\n\tconst response = await axios.get(generateOcsUrl('apps/circles/circles'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Get a specific circle\n *\n * @param circleId\n * @return\n */\nexport async function getCircle(circleId: string) {\n\tconst response = await axios.get(generateOcsUrl('apps/circles/circles/{circleId}', { circleId }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new circle\n *\n * @param name the circle name\n * @param personal\n * @param local\n * @return\n */\nexport async function createCircle(name: string, personal: boolean, local: boolean) {\n\tconst response = await axios.post(generateOcsUrl('apps/circles/circles'), {\n\t\tname,\n\t\tpersonal,\n\t\tlocal,\n\t})\n\treturn response.data.ocs.data\n}\n\n/**\n * Delete an existing circle\n *\n * @param circleId the circle id\n * @return\n */\nexport async function deleteCircle(circleId: string) {\n\tconst response = await axios.delete(generateOcsUrl('apps/circles/circles/{circleId}', { circleId }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Edit an existing circle\n *\n * @param circleId the circle id\n * @param type the edit type\n * @param data the data\n * @param value\n * @return\n */\nexport async function editCircle(circleId: string, type: CircleEditType, value: any) {\n\tconst response = await axios.put(generateOcsUrl('apps/circles/circles/{circleId}/{type}', { circleId, type }), { value })\n\treturn response.data.ocs.data\n}\n\n/**\n * Join a circle\n *\n * @param circleId the circle id\n * @return\n */\nexport async function joinCircle(circleId: string) {\n\tconst response = await axios.put(generateOcsUrl('apps/circles/circles/{circleId}/join', { circleId }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Leave a circle\n *\n * @param circleId the circle id\n * @return\n */\nexport async function leaveCircle(circleId: string) {\n\tconst response = await axios.put(generateOcsUrl('apps/circles/circles/{circleId}/leave', { circleId }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Get the circle members without the members\n *\n * @param circleId the circle id\n * @param search the search query\n * @param role the role\n * @param limit the limit\n * @return\n */\nexport async function getCircleMembers(circleId: string, search?: string, role?: string, limit?: number) {\n\tconst response = await axios.get(\n\t\tgenerateOcsUrl('apps/circles/circles/{circleId}/members', { circleId }),\n\t\t{\n\t\t\tparams: {\n\t\t\t\tsearch,\n\t\t\t\trole,\n\t\t\t\t...(limit ? { limit } : {}),\n\t\t\t},\n\t\t},\n\t)\n\treturn response.data.ocs.data\n}\n\n/**\n * Search a potential circle member\n *\n * @param term the search query\n * @return\n */\nexport async function searchMember(term: string) {\n\tconst response = await axios.get(generateOcsUrl('apps/circles/search?term={term}', { term }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Add a circle member\n *\n * @param circleId the circle id\n * @param members the member id\n * @return\n */\nexport async function addMembers(circleId: string, members: Array) {\n\tconst response = await axios.post(generateOcsUrl('apps/circles/circles/{circleId}/members/multi', { circleId }), { members })\n\treturn response.data.ocs.data\n}\n\n/**\n * Delete a circle member\n *\n * @param circleId the circle id\n * @param memberId the member id\n * @return\n */\nexport async function deleteMember(circleId: string, memberId: string) {\n\tconst response = await axios.delete(generateOcsUrl('apps/circles/circles/{circleId}/members/{memberId}', { circleId, memberId }))\n\treturn Object.values(response.data.ocs.data)\n}\n\n/**\n * change a member level\n *\n * @see levels file src/models/constants.js\n *\n * @param circleId the circle id\n * @param memberId the member id\n * @param level the new member level\n * @return\n */\nexport async function changeMemberLevel(circleId: string, memberId: string, level: MemberLevel) {\n\tif (!(level in MemberLevels)) {\n\t\tthrow new Error('Invalid level.')\n\t}\n\n\tconst response = await axios.put(generateOcsUrl('apps/circles/circles/{circleId}/members/{memberId}/level', { circleId, memberId }), {\n\t\tlevel,\n\t})\n\treturn Object.values(response.data.ocs.data)\n}\n\n/**\n * Accept a circle member request\n *\n * @param circleId the circle id\n * @param memberId the member id\n * @return\n */\nexport async function acceptMember(circleId: string, memberId: string) {\n\tconst response = await axios.put(generateOcsUrl('apps/circles/circles/{circleId}/members/{memberId}', { circleId, memberId }))\n\treturn response.data.ocs.data\n}\n\nexport async function editCircleSetting(circleId: string, setting: CircleSetting) {\n\tconst response = await axios.put(\n\t\tgenerateOcsUrl('apps/circles/circles/{circleId}/setting', { circleId }),\n\t\tsetting,\n\t)\n\treturn response.data.ocs.data\n}\n","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp(appName)\n\t.detectUser()\n\t.build()\n","\n\n\n\n\n\n\n","\n\n","\n\n\n\n\n\n\n\n\n\n","import { defineComponent as e, ref as t, computed as r, watch as o, createVNode as n, mergeProps as s, isVNode as i, onMounted as l, onUnmounted as c } from \"vue\";\n\nconst a = null, {min: u, max: f, abs: d, floor: p} = Math, m = (e, t, r) => u(r, f(t, e)), h = e => [ ...e ].sort((e, t) => e - t), _ = \"function\" == typeof queueMicrotask ? queueMicrotask : e => {\n Promise.resolve().then(e);\n}, b = () => {\n let e;\n return [ new Promise(t => {\n e = t;\n }), e ];\n}, g = e => {\n let t;\n return () => (e && (t = e(), e = void 0), t);\n}, v = (e, t, r) => {\n const o = r ? \"unshift\" : \"push\";\n for (let r = 0; r < t; r++) e[o](-1);\n return e;\n}, y = (e, t) => {\n const r = e.t[t];\n return -1 === r ? e.o : r;\n}, S = (e, t, r) => {\n const o = -1 === e.t[t];\n return e.t[t] = r, e.i = u(t, e.i), o;\n}, z = (e, t) => {\n if (!e.l) return 0;\n if (e.i >= t) return e.u[t];\n e.i < 0 && (e.u[0] = 0, e.i = 0);\n let r = e.i, o = e.u[r];\n for (;r < t; ) o += y(e, r), e.u[++r] = o;\n return e.i = t, o;\n}, x = (e, t, r = 0, o = e.l - 1) => {\n let n = r;\n for (;r <= o; ) {\n const s = p((r + o) / 2);\n z(e, s) <= t ? (n = s, r = s + 1) : o = s - 1;\n }\n return m(n, 0, e.l - 1);\n}, $ = (e, t, r) => {\n const o = t - e.l;\n return e.i = r ? -1 : u(t - 1, e.i), e.l = t, o > 0 ? (v(e.u, o), v(e.t, o, r), \n e.o * o) : (e.u.splice(o), (r ? e.t.splice(0, -o) : e.t.splice(o)).reduce((t, r) => t - (-1 === r ? e.o : r), 0));\n}, w = e => e.documentElement, I = e => e.ownerDocument, O = e => e.defaultView, k = /*#__PURE__*/ g(() => !!/iP(hone|od|ad)/.test(navigator.userAgent) || \"MacIntel\" === navigator.platform && navigator.maxTouchPoints > 0), j = /*#__PURE__*/ g(() => \"scrollBehavior\" in w(document).style), N = (e, t = 40, r = 0, o, n = !1) => {\n let s = !!r, i = 1, l = 0, c = 0, p = 0, m = 0, _ = 0, b = 0, g = 0, w = 0, I = a, O = [ 0, s ? f(r - 1, 0) : -1 ], j = 0, N = !1;\n const B = ((e, t, r) => ({\n o: t,\n t: r ? v(r.slice(0, u(e, r.length)), f(0, e - r.length)) : v([], e),\n l: e,\n i: -1,\n u: v([], e + 1)\n }))(e, o ? o[1] : t, o && o[0]), T = new Set, q = () => p - c, M = () => q() + _ + m, E = (e, t) => ((e, t, r, o) => {\n if (o = u(o, e.l - 1), z(e, o) <= t) {\n const n = x(e, r, o);\n return [ x(e, t, o, n), n ];\n }\n {\n const n = x(e, t, void 0, o);\n return [ n, x(e, r, n) ];\n }\n })(B, e, t, O[0]), P = () => z(B, B.l), R = (e, t) => {\n const r = z(B, e) - _;\n return t ? P() - r - A(e) : r;\n }, A = e => y(B, e), C = (e, t = -1) => B.t[e] === t, H = e => {\n e && (k() && 0 !== g || I && 1 === w ? _ += e : m += e);\n };\n return {\n p: () => {\n T.clear();\n },\n m: () => i,\n h: () => (e => [ e.t.slice(), e.o ])(B),\n v: (e = 200) => {\n if (!N || s) return O;\n let t, r;\n if (b) [t, r] = O; else {\n let o = f(0, M()), s = o + l;\n n || (e = f(0, e), 1 !== g && (o -= e), 2 !== g && (s += e)), [t, r] = O = E(f(0, o), f(0, s)), \n I && (t = u(t, I[0]), r = f(r, I[1]));\n }\n return [ f(t, 0), u(r, B.l - 1) ];\n },\n S: e => x(B, e - c),\n I: C,\n O: R,\n k: A,\n j: () => B.l,\n N: () => p,\n B: () => 0 !== g,\n T: () => l,\n q: () => c,\n M: P,\n P: () => (b = m, m = 0, [ b, 2 === w ]),\n R: (e, t) => {\n const r = [ e, t ];\n return T.add(r), () => {\n T.delete(r);\n };\n },\n A: (e, t) => {\n let r, o, u = 0;\n switch (e) {\n case 1:\n {\n if (t === p && 0 === w) break;\n const e = b;\n b = 0;\n const r = t - p, n = d(r);\n e && n < d(e) + 1 || 0 !== w || (g = r < 0 ? 2 : 1), s && (s = !1), p = t, u = 4;\n const i = q();\n i >= -l && i <= P() && (u += 1, o = n > l);\n break;\n }\n\n case 2:\n u = 8, 0 !== g && (r = !0, u += 1), g = 0, w = 0, I = a;\n break;\n\n case 3:\n {\n const e = t.filter(([e, t]) => !C(e, t));\n if (!e.length) break;\n H(e.reduce((e, [t, r]) => {\n let o;\n if (2 === w) o = !0; else if (I && 1 === w) o = t < I[0]; else {\n const e = q(), r = R(t), n = A(t);\n o = 1 !== g && 0 === w ? r + n <= e : r < e && r + n < e + l;\n }\n return o && (e += r - A(t)), e;\n }, 0));\n for (const [t, r] of e) {\n const e = A(t), o = S(B, t, r);\n n && (j += o ? r : r - e);\n }\n n && l && j > l && (H(((e, t) => {\n let r = 0;\n const o = [];\n e.t.forEach((e, n) => {\n -1 !== e && (o.push(e), n < t && r++);\n }), e.i = -1;\n const n = h(o), s = n.length, i = s / 2 | 0, l = s % 2 == 0 ? (n[i - 1] + n[i]) / 2 : n[i], c = e.o;\n return ((e.o = l) - c) * f(t - r, 0);\n })(B, x(B, M()))), n = !1), u = 3, o = !0;\n break;\n }\n\n case 4:\n l !== t && (l || (N = o = !0), l = t, u = 3);\n break;\n\n case 5:\n t[1] ? (H($(B, t[0], !0)), w = 2, u = 1) : ($(B, t[0]), u = 1);\n break;\n\n case 6:\n c = t;\n break;\n\n case 7:\n w = 1;\n break;\n\n case 8:\n I = E(t, t + l), u = 1;\n }\n u && (i = 1 + (2147483647 & i), r && _ && (m += _, _ = 0), T.forEach(([e, t]) => {\n u & e && t(o);\n }));\n }\n };\n}, B = setTimeout, T = (e, t) => t ? -e : e, q = (e, t, r, o, n, s) => {\n const i = Date.now;\n let l = 0, c = !1, u = !1, f = !1, d = !1;\n const p = (() => {\n let t;\n const r = () => {\n t != a && clearTimeout(t);\n }, o = () => {\n r(), t = B(() => {\n t = a, (() => {\n if (c || u) return c = !1, void p();\n f = !1, e.A(2);\n })();\n }, 150);\n };\n return o.C = r, o;\n })(), m = () => {\n l = i(), f && (d = !0), s && e.A(6, s()), e.A(1, o()), p();\n }, h = t => {\n if (c || !e.B() || t.ctrlKey) return;\n const o = i() - l;\n 150 > o && 50 < o && (r ? t.deltaX : t.deltaY) && (c = !0);\n }, _ = () => {\n u = !0, f = d = !1;\n }, b = () => {\n u = !1, k() && (f = !0);\n };\n return t.addEventListener(\"scroll\", m), t.addEventListener(\"wheel\", h, {\n passive: !0\n }), t.addEventListener(\"touchstart\", _, {\n passive: !0\n }), t.addEventListener(\"touchend\", b, {\n passive: !0\n }), {\n H: () => {\n t.removeEventListener(\"scroll\", m), t.removeEventListener(\"wheel\", h), t.removeEventListener(\"touchstart\", _), \n t.removeEventListener(\"touchend\", b), p.C();\n },\n V: () => {\n const [t, r] = e.P();\n t && (n(t, r, d), d = !1, r && e.T() > e.M() && e.A(1, o()));\n }\n };\n}, M = (e, t, r) => {\n let o;\n return [ async (n, s) => {\n if (!await t()) return;\n o && o();\n const i = () => {\n const [t, r] = b();\n return o = () => {\n r(!1);\n }, e.T() && B(o, 150), [ t, e.R(2, () => {\n r(!0);\n }) ];\n };\n if (s && j()) e.A(8, n()), _(async () => {\n for (;;) {\n let t = !0;\n for (let [r, o] = e.v(); r <= o; r++) if (e.I(r)) {\n t = !1;\n break;\n }\n if (t) break;\n const [r, o] = i();\n try {\n if (!await r) return;\n } finally {\n o();\n }\n }\n e.A(7), r(n(), s);\n }); else for (;;) {\n const [t, o] = i();\n try {\n if (e.A(7), r(n()), !await t) return;\n } finally {\n o();\n }\n }\n }, () => {\n o && o();\n } ];\n}, E = e => {\n let t;\n return {\n F(r) {\n (t || (t = new (O(I(r)).ResizeObserver)(e))).observe(r);\n },\n J(e) {\n t.unobserve(e);\n },\n H() {\n t && t.disconnect();\n }\n };\n}, P = /*#__PURE__*/ e({\n props: {\n L: {\n type: Object,\n required: !0\n },\n W: {\n type: Object,\n required: !0\n },\n X: {\n type: Object,\n required: !0\n },\n Y: {\n type: Function,\n required: !0\n },\n D: {\n type: Number,\n required: !0\n },\n U: {\n type: Boolean\n },\n G: {\n type: Boolean\n },\n K: {\n type: Boolean\n },\n Z: {\n type: String,\n required: !0\n },\n ee: Object\n },\n setup(e) {\n const l = t(), c = r(() => e.L.value && e.W.O(e.D, e.K)), a = r(() => e.L.value && e.W.I(e.D));\n return o(() => l.value && e.D, (t, r, o) => {\n o(e.Y(l.value, e.D));\n }, {\n flush: \"post\"\n }), () => {\n const {X: t, U: r, G: o, Z: u} = e, f = a.value, {style: d, ...p} = e.ee ?? {}, m = {\n contain: \"layout style\",\n position: f && o ? void 0 : \"absolute\",\n [r ? \"height\" : \"width\"]: \"100%\",\n [r ? \"top\" : \"left\"]: \"0px\",\n [r ? \"left\" : \"top\"]: c.value + \"px\",\n visibility: !f || o ? void 0 : \"hidden\",\n ...d\n };\n return r && (m.display = \"inline-flex\"), n(u, s({\n ref: l,\n style: m\n }, p), \"function\" == typeof (h = t) || \"[object Object]\" === Object.prototype.toString.call(h) && !i(h) ? t : {\n default: () => [ t ],\n _: 2\n }, 16, [ \"style\" ]);\n var h;\n };\n }\n}), R = (e, t) => {\n if (1 === e.length) {\n const t = e[0].key;\n if (null != t) return t;\n }\n return \"_\" + t;\n}, A = (e, t) => e[0] === t[0] && e[1] === t[1], C = /*#__PURE__*/ e({\n props: {\n data: {\n type: Array,\n required: !0\n },\n bufferSize: Number,\n itemSize: Number,\n shift: Boolean,\n horizontal: Boolean,\n startMargin: {\n type: Number,\n default: 0\n },\n ssrCount: Number,\n scrollRef: Object,\n as: {\n type: String,\n default: \"div\"\n },\n item: {\n type: String,\n default: \"div\"\n },\n itemProps: Function,\n keepMounted: Array,\n cache: Object\n },\n emits: [ \"scroll\", \"scrollEnd\" ],\n setup(e, {emit: s, expose: u, slots: d}) {\n let p = !!e.ssrCount;\n const _ = e.horizontal, g = t(), v = N(e.data.length, e.itemSize, e.ssrCount, e.cache, !e.itemSize), y = ((e, t) => {\n let r;\n const o = t ? \"width\" : \"height\", n = new WeakMap, s = E(t => {\n const s = [];\n for (const {target: i, contentRect: l} of t) if (i.offsetParent) if (i === r) e.A(4, l[o]); else {\n const e = n.get(i);\n e != a && s.push([ e, l[o] ]);\n }\n s.length && e.A(3, s);\n });\n return {\n te(e) {\n s.F(r = e);\n },\n re: (e, t) => (n.set(e, t), s.F(e), () => {\n n.delete(e), s.J(e);\n }),\n p: s.H\n };\n })(v, _), S = ((e, t) => {\n let r, o, n = b(), s = !1;\n const i = t ? \"scrollLeft\" : \"scrollTop\", l = t ? \"overflowX\" : \"overflowY\", [c, a] = M(e, () => n[0], (e, o) => {\n e = T(e, s), o ? r.scrollTo({\n [t ? \"left\" : \"top\"]: e,\n behavior: \"smooth\"\n }) : r[i] = e;\n });\n return {\n oe(c, u) {\n r = u, t && (s = \"rtl\" === getComputedStyle(u).direction), o = q(e, u, t, () => T(u[i], s), (t, r, o) => {\n if (o) {\n const e = u.style, t = e[l];\n e[l] = \"hidden\", B(() => {\n e[l] = t;\n });\n }\n u[i] = T(e.N() + t, s), r && a();\n }), n[1](!0);\n },\n p() {\n o && o.H(), n[1](!1), n = b();\n },\n ne: () => s,\n se(e) {\n c(() => e);\n },\n ie(t) {\n t += e.N(), c(() => t);\n },\n le(t, {align: r, smooth: o, offset: n = 0} = {}) {\n if (t = m(t, 0, e.j() - 1), \"nearest\" === r) {\n const o = e.O(t), n = e.N();\n if (o < n) r = \"start\"; else {\n if (!(o + e.k(t) > n + e.T())) return;\n r = \"end\";\n }\n }\n c(() => n + e.q() + e.O(t) + (\"end\" === r ? e.k(t) - e.T() : \"center\" === r ? (e.k(t) - e.T()) / 2 : 0), o);\n },\n ce: () => {\n o && o.V();\n }\n };\n })(v, _), z = t(v.m());\n v.R(1, () => {\n z.value = v.m();\n }), v.R(4, () => {\n s(\"scroll\", v.N());\n }), v.R(8, () => {\n s(\"scrollEnd\");\n });\n const x = r(t => {\n z.value;\n const r = v.v(e.bufferSize);\n return t && A(t, r) ? t : r;\n }), $ = r(() => z.value && v.B()), w = r(() => z.value && v.M());\n return l(() => {\n p = !1;\n const t = g.value, r = requestAnimationFrame(() => {\n const r = e => {\n y.te(e), S.oe(t, e);\n };\n e.scrollRef ? r(e.scrollRef) : r(t.parentElement);\n });\n c(() => {\n cancelAnimationFrame(r);\n });\n }), c(() => {\n v.p(), y.p(), S.p();\n }), o(() => e.data.length, t => {\n v.A(5, [ t, e.shift ]);\n }), o(() => e.startMargin, e => {\n v.A(6, e);\n }, {\n immediate: !0\n }), o([ z ], () => {\n S.ce();\n }, {\n flush: \"post\"\n }), u({\n get cache() {\n return v.h();\n },\n get scrollOffset() {\n return v.N();\n },\n get scrollSize() {\n return (e => f(e.M(), e.T()))(v);\n },\n get viewportSize() {\n return v.T();\n },\n findItemIndex: v.S,\n getItemOffset: v.O,\n getItemSize: v.k,\n scrollToIndex: S.le,\n scrollTo: S.se,\n scrollBy: S.ie\n }), () => {\n const t = e.as, r = e.item, o = w.value, s = S.ne(), l = [], c = t => {\n const o = d.default({\n item: e.data[t],\n index: t\n });\n return n(P, {\n key: R(o, t),\n L: z,\n W: v,\n Y: y.re,\n D: t,\n X: o,\n U: _,\n K: s,\n G: p,\n Z: r,\n ee: e.itemProps?.({\n item: e.data[t],\n index: t\n })\n }, null, 8, [ \"L\", \"W\", \"Y\", \"D\", \"X\", \"U\", \"K\", \"G\", \"Z\", \"ee\" ]);\n };\n if (e.keepMounted) {\n const t = new Set(e.keepMounted);\n for (let [e, r] = x.value; e <= r; e++) t.add(e);\n h([ ...t ]).forEach(e => {\n l.push(c(e));\n });\n } else for (let [e, t] = x.value; e <= t; e++) l.push(c(e));\n return n(t, {\n ref: g,\n style: {\n contain: \"size style\",\n overflowAnchor: \"none\",\n flex: \"none\",\n position: \"relative\",\n width: _ ? o + \"px\" : \"100%\",\n height: _ ? \"100%\" : o + \"px\",\n pointerEvents: $.value ? \"none\" : void 0\n }\n }, \"function\" == typeof (a = l) || \"[object Object]\" === Object.prototype.toString.call(a) && !i(a) ? l : {\n default: () => [ l ],\n _: 2\n }, 8, [ \"style\" ]);\n var a;\n };\n }\n}), H = /*#__PURE__*/ e({\n props: {\n data: {\n type: Array,\n required: !0\n },\n bufferSize: Number,\n itemSize: Number,\n shift: Boolean,\n horizontal: Boolean,\n ssrCount: Number,\n itemProps: Function,\n keepMounted: Array,\n cache: Object\n },\n emits: [ \"scroll\", \"scrollEnd\" ],\n setup(e, {emit: r, expose: o, slots: s}) {\n const l = e.horizontal, c = e => {\n r(\"scroll\", e);\n }, a = () => {\n r(\"scrollEnd\");\n }, u = t();\n return o({\n get cache() {\n return u.value.cache;\n },\n get scrollOffset() {\n return u.value.scrollOffset;\n },\n get scrollSize() {\n return u.value.scrollSize;\n },\n get viewportSize() {\n return u.value.viewportSize;\n },\n findItemIndex: (...e) => u.value.findItemIndex(...e),\n getItemOffset: (...e) => u.value.getItemOffset(...e),\n getItemSize: (...e) => u.value.getItemSize(...e),\n scrollToIndex: (...e) => u.value.scrollToIndex(...e),\n scrollTo: (...e) => u.value.scrollTo(...e),\n scrollBy: (...e) => u.value.scrollBy(...e)\n }), () => {\n return n(\"div\", {\n style: {\n display: l ? \"inline-block\" : \"block\",\n [l ? \"overflowX\" : \"overflowY\"]: \"auto\",\n contain: \"strict\",\n width: \"100%\",\n height: \"100%\"\n }\n }, [ n(C, {\n ref: u,\n data: e.data,\n bufferSize: e.bufferSize,\n itemSize: e.itemSize,\n itemProps: e.itemProps,\n shift: e.shift,\n ssrCount: e.ssrCount,\n horizontal: l,\n keepMounted: e.keepMounted,\n cache: e.cache,\n onScroll: c,\n onScrollEnd: a\n }, (t = s, \"function\" == typeof t || \"[object Object]\" === Object.prototype.toString.call(t) && !i(t) ? s : {\n default: () => [ s ],\n _: 2\n }), 8, [ \"data\", \"bufferSize\", \"itemSize\", \"itemProps\", \"shift\", \"ssrCount\", \"horizontal\", \"keepMounted\", \"cache\", \"onScroll\", \"onScrollEnd\" ]) ], 4);\n var t;\n };\n }\n}), V = /*#__PURE__*/ e({\n props: {\n data: {\n type: Array,\n required: !0\n },\n bufferSize: Number,\n itemSize: Number,\n shift: Boolean,\n horizontal: Boolean,\n as: {\n type: String,\n default: \"div\"\n },\n item: {\n type: String,\n default: \"div\"\n },\n cache: Object\n },\n emits: [ \"scroll\", \"scrollEnd\" ],\n setup(e, {emit: s, slots: u, expose: f}) {\n const d = e.horizontal, p = t(), h = N(e.data.length, e.itemSize, void 0, e.cache, !e.itemSize), g = ((e, t) => {\n const r = t ? \"width\" : \"height\", o = t ? \"innerWidth\" : \"innerHeight\", n = new WeakMap, s = E(t => {\n const o = [];\n for (const {target: e, contentRect: s} of t) {\n if (!e.offsetParent) continue;\n const t = n.get(e);\n t != a && o.push([ t, s[r] ]);\n }\n o.length && e.A(3, o);\n });\n let i;\n return {\n te(t) {\n const r = O(I(t)), n = () => {\n e.A(4, r[o]);\n };\n r.addEventListener(\"resize\", n), _(n), i = () => {\n r.removeEventListener(\"resize\", n);\n };\n },\n re: (e, t) => (n.set(e, t), s.F(e), () => {\n n.delete(e), s.J(e);\n }),\n p() {\n i && i(), s.H();\n }\n };\n })(h, d), v = ((e, t) => {\n let r, o, n = b(), s = !1;\n const i = t ? \"left\" : \"top\", [l] = M(e, () => n[0], (e, t) => {\n e = T(e, s);\n const o = O(I(r));\n t ? o.scroll({\n [i]: e,\n behavior: \"smooth\"\n }) : o.scroll({\n [i]: e\n });\n }), c = (e, t, r, o, n = 0) => {\n const i = o ? \"offsetLeft\" : \"offsetTop\", l = n + (o && s ? r.innerWidth - e[i] - e.offsetWidth : e[i]), a = e.offsetParent;\n return e !== t && a ? c(a, t, r, o, l) : l;\n };\n return {\n oe(l) {\n r = l;\n const a = t ? \"scrollX\" : \"scrollY\", u = I(l), f = O(u);\n t && (s = \"rtl\" === getComputedStyle(w(u)).direction), o = q(e, f, t, () => T(f[a], s), (t, r) => {\n r ? f.scroll({\n [i]: T(e.N() + t, s)\n }) : f.scrollBy({\n [i]: T(t, s)\n });\n }, () => c(l, u.body, f, t)), n[1](!0);\n },\n p() {\n o && o.H(), r = void 0, n[1](!1), n = b();\n },\n ne: () => s,\n ce: () => {\n o && o.V();\n },\n le(o, {align: n, smooth: s, offset: i = 0} = {}) {\n if (!r) return;\n if (o = m(o, 0, e.j() - 1), \"nearest\" === n) {\n const t = e.O(o), r = e.N();\n if (t < r) n = \"start\"; else {\n if (!(t + e.k(o) > r + e.T())) return;\n n = \"end\";\n }\n }\n const a = I(r), u = O(a), f = w(a), d = () => e.T() - (t ? f.clientWidth : f.clientHeight);\n l(() => i + c(r, a.body, u, t) + e.O(o) + (\"end\" === n ? e.k(o) - (e.T() - d()) : \"center\" === n ? (e.k(o) - (e.T() - d())) / 2 : 0), s);\n }\n };\n })(h, d), y = t(h.m());\n h.R(1, () => {\n y.value = h.m();\n }), h.R(4, () => {\n s(\"scroll\");\n }), h.R(8, () => {\n s(\"scrollEnd\");\n });\n const S = r(t => {\n y.value;\n const r = h.v(e.bufferSize);\n return t && A(t, r) ? t : r;\n }), z = r(() => y.value && h.B()), x = r(() => y.value && h.M());\n return l(() => {\n const e = p.value;\n e && (g.te(e), v.oe(e));\n }), c(() => {\n h.p(), g.p(), v.p();\n }), o(() => e.data.length, t => {\n h.A(5, [ t, e.shift ]);\n }), o([ y ], () => {\n v.ce();\n }, {\n flush: \"post\"\n }), f({\n get cache() {\n return h.h();\n },\n get scrollOffset() {\n return h.N();\n },\n get viewportSize() {\n return h.T();\n },\n findItemIndex: h.S,\n getItemOffset: h.O,\n getItemSize: h.k,\n scrollToIndex: v.le\n }), () => {\n const t = e.as, r = e.item, o = x.value, s = v.ne(), l = [];\n for (let [t, o] = S.value; t <= o; t++) {\n const o = u.default({\n item: e.data[t],\n index: t\n });\n l.push(n(P, {\n key: R(o, t),\n L: y,\n W: h,\n Y: g.re,\n D: t,\n X: o,\n U: d,\n K: s,\n Z: r\n }, null, 8, [ \"L\", \"W\", \"Y\", \"D\", \"X\", \"U\", \"K\", \"Z\" ]));\n }\n return n(t, {\n ref: p,\n style: {\n contain: \"size style\",\n overflowAnchor: \"none\",\n flex: \"none\",\n position: \"relative\",\n width: d ? o + \"px\" : \"100%\",\n height: d ? \"100%\" : o + \"px\",\n pointerEvents: z.value ? \"none\" : void 0\n }\n }, \"function\" == typeof (c = l) || \"[object Object]\" === Object.prototype.toString.call(c) && !i(c) ? l : {\n default: () => [ l ],\n _: 2\n }, 8, [ \"style\" ]);\n var c;\n };\n }\n});\n\nexport { H as VList, C as Virtualizer, V as WindowVirtualizer };\n//# sourceMappingURL=index.js.map\n","\n\n","\n\n","\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n\n\n","\n\n","\n\n","\n\n","\n\n","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nexport default {\n\tcomputed: {\n\t\t// router variables\n\t\tselectedContact() {\n\t\t\treturn this.$route.params.selectedContact\n\t\t},\n\t\tselectedGroup() {\n\t\t\treturn this.$route.params.selectedGroup\n\t\t},\n\t\tselectedCircle() {\n\t\t\t// Teams app uses `teamId` as the route param; fall back to it.\n\t\t\treturn this.$route.params.selectedCircle ?? this.$route.params.teamId\n\t\t},\n\t\tselectedUserGroup() {\n\t\t\treturn this.$route.params.selectedUserGroup\n\t\t},\n\t\tselectedChart() {\n\t\t\treturn this.$route.params.selectedChart\n\t\t},\n\t},\n}\n","// @ts-nocheck\n/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { MemberLevel, MemberType } from './constants.ts'\n\nimport logger from '../services/logger.js'\nimport Circle from './circle.ts'\nimport { MemberLevels, MemberTypes } from './constants.ts'\n\nexport default class Member {\n\t_data: any = {}\n\t_circle: Circle\n\n\t/**\n\t * Creates an instance of Member\n\t *\n\t * @param data\n\t * @param circle\n\t */\n\tconstructor(data: any, circle: Circle) {\n\t\tif (typeof data !== 'object') {\n\t\t\tthrow new Error('Invalid member')\n\t\t}\n\n\t\t// if no uid set, fail\n\t\tif (data.id && typeof data.id !== 'string') {\n\t\t\tlogger.error('This member do not have a proper uid', data)\n\t\t\tthrow new Error('This member do not have a proper uid')\n\t\t}\n\n\t\tthis._circle = circle\n\t\tthis._data = data\n\t}\n\n\t/**\n\t * Get the circle of this member\n\t */\n\tget circle(): Circle {\n\t\treturn this._circle\n\t}\n\n\t/**\n\t * Set the circle of this member\n\t */\n\tset circle(circle: Circle) {\n\t\tif (circle.constructor.name !== Circle.name) {\n\t\t\tthrow new Error('circle must be a Circle type')\n\t\t}\n\t\tthis._circle = circle\n\t}\n\n\t/**\n\t * Member id\n\t */\n\tget id(): string {\n\t\treturn this._data.id\n\t}\n\n\t/**\n\t * Single uid\n\t */\n\tget singleId(): string {\n\t\treturn this._data.singleId\n\t}\n\n\t/**\n\t * Formatted display name\n\t */\n\tget displayName(): string {\n\t\treturn this._data.displayName\n\t}\n\n\t/**\n\t * Member userId\n\t */\n\tget userId(): string {\n\t\treturn this._data.userId\n\t}\n\n\t/**\n\t * Member type\n\t */\n\tget userType(): MemberType {\n\t\t// If the user type is a circle, this could originate from multiple sources\n\t\treturn this._data.userType !== MemberTypes.CIRCLE\n\t\t\t? this._data.userType\n\t\t\t: this.basedOn.source\n\t}\n\n\t/**\n\t * Member based on source\n\t */\n\tget basedOn(): any {\n\t\treturn this._data.basedOn\n\t}\n\n\t/**\n\t * Member level\n\t *\n\t */\n\tget level(): MemberLevel {\n\t\treturn this._data.level\n\t}\n\n\t/**\n\t * Set member level\n\t */\n\tset level(level: MemberLevel) {\n\t\tif (!(level in MemberLevels)) {\n\t\t\tthrow new Error('Invalid level')\n\t\t}\n\t\tthis._data.level = level\n\t}\n\n\t/**\n\t * Member request status\n\t *\n\t */\n\tget status(): string {\n\t\treturn this._data.status\n\t}\n\n\t/**\n\t * Is the current member a user?\n\t */\n\tget isUser() {\n\t\treturn this._data.userType === MemberLevels.MEMBER\n\t}\n\n\t/**\n\t * Is the current member without a circle?\n\t */\n\tget isOrphan() {\n\t\treturn this._circle?.constructor?.name !== Circle.name\n\t}\n\n\t/**\n\t * Delete this member and any reference from its circle\n\t */\n\tdelete() {\n\t\tif (this.isOrphan) {\n\t\t\tthrow new Error('Cannot delete this member as it doesn\\'t belong to any circle')\n\t\t}\n\t\tthis.circle.deleteMember(this)\n\t\tthis._data = undefined\n\t}\n}\n","// @ts-nocheck\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { CircleConfigs, MemberLevels, ROUTE_CIRCLE } from './constants.ts'\nimport Member from './member.ts'\n\ntype MemberList = Record\n\nexport default class Circle {\n\t_data: any = {}\n\t_members: MemberList = {}\n\t_owner: Member\n\t_initiator: Member\n\n\t/**\n\t * Creates an instance of Circle\n\t *\n\t * @param data\n\t */\n\tconstructor(data: object) {\n\t\tthis.updateData(data)\n\t}\n\n\t/**\n\t * Update inner circle data, owner and initiator\n\t *\n\t * @param data\n\t */\n\tupdateData(data: any) {\n\t\tif (typeof data !== 'object') {\n\t\t\tthrow new Error('Invalid circle')\n\t\t}\n\n\t\t// if no uid set, fail\n\t\tif (!data.id) {\n\t\t\tthrow new Error('This circle do not have a proper uid')\n\t\t}\n\n\t\tthis._data = data\n\t\tthis._owner = new Member(data.owner, this)\n\n\t\tif (data.initiator) {\n\t\t\tthis._initiator = new Member(data.initiator, this)\n\t\t}\n\t}\n\n\t// METADATA -----------------------------------------\n\t/**\n\t * Circle id\n\t */\n\tget id(): string {\n\t\treturn this._data.id\n\t}\n\n\t/**\n\t * Formatted display name\n\t */\n\tget displayName(): string {\n\t\treturn this._data.displayName\n\t}\n\n\t/**\n\t * Set the display name\n\t */\n\tset displayName(text: string) {\n\t\tthis._data.displayName = text\n\t}\n\n\t/**\n\t * Circle creation date\n\t */\n\tget creation(): number {\n\t\treturn this._data.creation\n\t}\n\n\t/**\n\t * Circle description\n\t */\n\tget description(): string {\n\t\treturn this._data.description\n\t}\n\n\t/**\n\t * Circle description\n\t */\n\tset description(text: string) {\n\t\tthis._data.description = text\n\t}\n\n\t/**\n\t * Circle direct member count (excluding nested circles)\n\t */\n\tget population() {\n\t\treturn this._data.population\n\t}\n\n\t/**\n\t * Circle total member count (direct + inherited from nested circles)\n\t */\n\tget populationInherited() {\n\t\treturn this._data.populationInherited\n\t}\n\n\t// MEMBERSHIP -----------------------------------------\n\t/**\n\t * Circle ini_initiator the current\n\t * user info for this circle\n\t * null if not a member\n\t */\n\tget initiator(): Member | null {\n\t\treturn this._initiator\n\t}\n\n\t/**\n\t * Set new circle initiator\n\t * null if not a member\n\t */\n\tset initiator(initiator: Member) {\n\t\tif (initiator && initiator.constructor.name !== Member.name) {\n\t\t\tthrow new Error('Initiator must be a Member type')\n\t\t}\n\t\tthis._initiator = initiator\n\t}\n\n\t/**\n\t * Circle ownership\n\t */\n\tget owner(): Member {\n\t\treturn this._owner\n\t}\n\n\t/**\n\t * Set new circle owner\n\t */\n\tset owner(owner: Member) {\n\t\tif (owner.constructor.name !== Member.name) {\n\t\t\tthrow new Error('Owner must be a Member type')\n\t\t}\n\t\tthis._owner = owner\n\t}\n\n\t/**\n\t * Circle members\n\t */\n\tget members(): MemberList {\n\t\treturn this._members\n\t}\n\n\t/**\n\t * Define members circle\n\t */\n\tset members(members: MemberList) {\n\t\tthis._members = members\n\t}\n\n\t/**\n\t * Add a member to this circle\n\t *\n\t * @param member\n\t */\n\taddMember(member: Member) {\n\t\tif (member.constructor.name !== Member.name) {\n\t\t\tthrow new Error('Member must be a Member type')\n\t\t}\n\n\t\tconst singleId = member.singleId\n\t\tif (this._members[singleId]) {\n\t\t\tconsole.warn('Replacing existing member data', member)\n\t\t}\n\t\tthis._members[singleId] = member\n\t}\n\n\t/**\n\t * Remove a member from this circle\n\t *\n\t * @param member\n\t */\n\tdeleteMember(member: Member) {\n\t\tif (member.constructor.name !== Member.name) {\n\t\t\tthrow new Error('Member must be a Member type')\n\t\t}\n\n\t\tconst singleId = member.singleId\n\t\tif (!this._members[singleId]) {\n\t\t\tconsole.warn('The member was not in this circle. Nothing was done.', member)\n\t\t}\n\n\t\t// Delete and clear memory\n\t\tdelete this._members[singleId]\n\t}\n\n\t// CONFIGS --------------------------------------------\n\tget settings() {\n\t\treturn this._data.settings\n\t}\n\n\t/**\n\t * Circle config\n\t */\n\tget config(): number {\n\t\treturn this._data.config\n\t}\n\n\t/**\n\t * Define circle config\n\t */\n\tset config(config: number) {\n\t\tthis._data.config = config\n\t}\n\n\t/**\n\t * Circle is personal\n\t */\n\tget isPersonal() {\n\t\treturn (this._data.config & CircleConfigs.PERSONAL) !== 0\n\t}\n\n\t/**\n\t * Circle requires invite to be confirmed by moderator or above\n\t */\n\tget requireJoinAccept() {\n\t\treturn (this._data.config & CircleConfigs.VISIBLE) !== 0\n\t}\n\n\t/**\n\t * Circle can be requested to join\n\t */\n\tget canJoin() {\n\t\treturn (this._data.config & CircleConfigs.OPEN) !== 0\n\t}\n\n\t/**\n\t * Circle is visible to others\n\t */\n\tget isVisible() {\n\t\treturn (this._data.config & CircleConfigs.VISIBLE) !== 0\n\t}\n\n\t/**\n\t * Circle requires invite to be accepted by the member\n\t */\n\tget requireInviteAccept() {\n\t\treturn (this._data.config & CircleConfigs.INVITE) !== 0\n\t}\n\n\t// PERMISSIONS SHORTCUTS ------------------------------\n\t/**\n\t * Can the initiator add members to this circle?\n\t */\n\tget isOwner() {\n\t\treturn this.initiator?.level === MemberLevels.OWNER\n\t}\n\n\t// PERMISSIONS SHORTCUTS ------------------------------\n\t/**\n\t * Is the initiator an admin of this circle?\n\t */\n\tget isAdmin() {\n\t\treturn this.initiator?.level === MemberLevels.ADMIN\n\t}\n\n\t/**\n\t * Is the initiator a member of this circle?\n\t */\n\tget isMember() {\n\t\treturn this.initiator?.level\n\t\t\t&& this.initiator?.level > MemberLevels.NONE\n\t}\n\n\t/**\n\t * Is the initiator a pending member of this circle?\n\t */\n\tget isPendingMember() {\n\t\treturn this.initiator?.level === MemberLevels.NONE\n\t}\n\n\t/**\n\t * Can the initiator delete this circle?\n\t */\n\tget canDelete() {\n\t\treturn this.isOwner\n\t}\n\n\t/**\n\t * Can the initiator leave this circle?\n\t */\n\tget canLeave() {\n\t\treturn this.isMember && !this.isOwner\n\t}\n\n\t/**\n\t * Can the initiator add/remove members to this circle?\n\t */\n\tget canManageMembers() {\n\t\treturn (this.initiator?.level\n\t\t\t&& this.initiator?.level >= MemberLevels.MODERATOR)\n\t\t|| (this.config & CircleConfigs.FRIEND) !== 0\n\t}\n\n\t// PARAMS ---------------------------------------------\n\t/**\n\t * Vue router param\n\t */\n\tget router() {\n\t\treturn {\n\t\t\tname: 'team',\n\t\t\tparams: { teamId: this.id },\n\t\t}\n\t}\n\n\t/**\n\t * Default javascript fallback\n\t * Used for sorting as well\n\t */\n\ttoString() {\n\t\treturn this.displayName\n\t}\n}\n","\n\n\n\n\n\n\n","// @ts-nocheck\n/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { useIsMobile } from '@nextcloud/vue'\n\nexport default {\n\tcomputed: {\n\t\tisMobile() {\n\t\t\treturn useIsMobile().value\n\t\t},\n\t},\n}\n","\n\n\n\n\n\n\n\n\n\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { showError, showSuccess } from '@nextcloud/dialogs'\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tcopied: false,\n\t\t\tcopyLoading: false,\n\t\t\tcopySuccess: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcopyLinkIcon() {\n\t\t\tif (this.copySuccess) {\n\t\t\t\treturn 'icon-checkmark'\n\t\t\t}\n\t\t\tif (this.copyLoading) {\n\t\t\t\treturn 'icon-loading-small'\n\t\t\t}\n\t\t\treturn 'icon-public'\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync copyToClipboard(url) {\n\t\t\t// change to loading status\n\t\t\tthis.copyLoading = true\n\n\t\t\t// copy link to clipboard\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(url)\n\t\t\t\tthis.copySuccess = true\n\t\t\t\tthis.copied = true\n\n\t\t\t\t// Notify success\n\t\t\t\tshowSuccess(t('circles', 'Link copied to the clipboard'))\n\t\t\t} catch (error) {\n\t\t\t\tthis.copySuccess = false\n\t\t\t\tthis.copied = true\n\t\t\t\tshowError(t('circles', 'Could not copy link to the clipboard.'))\n\t\t\t} finally {\n\t\t\t\tthis.copyLoading = false\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t// stop loading status regardless of outcome\n\t\t\t\t\tthis.copied = false\n\t\t\t\t\tthis.copySuccess = false\n\t\t\t\t}, 2000)\n\t\t\t}\n\t\t},\n\t},\n}\n","import { showError, showSuccess } from '@nextcloud/dialogs'\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { emit } from '@nextcloud/event-bus'\nimport Circle from '../models/circle.ts'\nimport Member from '../models/member.ts'\nimport { joinCircle } from '../services/circles.ts'\nimport CopyToClipboardMixin from './CopyToClipboardMixin.js'\n\nexport default {\n\n\tprops: {\n\t\tcircle: {\n\t\t\ttype: Circle,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tmixins: [CopyToClipboardMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingAction: false,\n\t\t\tloadingJoin: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcopyButtonText() {\n\t\t\tif (this.copied) {\n\t\t\t\treturn this.copySuccess\n\t\t\t\t\t? t('circles', 'Copied')\n\t\t\t\t\t: t('circles', 'Could not copy')\n\t\t\t}\n\t\t\treturn t('circles', 'Copy link')\n\t\t},\n\n\t\tcircleUrl() {\n\t\t\tconst route = this.$router.resolve(this.circle.router)\n\t\t\treturn window.location.origin + route.href\n\t\t},\n\n\t\tjoinButtonTitle() {\n\t\t\tif (this.circle.requireJoinAccept) {\n\t\t\t\treturn t('circles', 'Request to join')\n\t\t\t}\n\t\t\treturn t('circles', 'Join team')\n\t\t},\n\t},\n\n\tmethods: {\n\t\tconfirmLeaveCircle() {\n\t\t\twindow.OC.dialogs.confirmDestructive(\n\t\t\t\tt('circles', 'You are about to leave {circle}.\\nAre you sure?', {\n\t\t\t\t\tcircle: this.circle.displayName,\n\t\t\t\t}),\n\t\t\t\tt('circles', 'Please confirm team leave'),\n\t\t\t\twindow.OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\tthis.leaveCircle,\n\t\t\t\ttrue,\n\t\t\t)\n\t\t},\n\t\tasync leaveCircle(confirm) {\n\t\t\tif (!confirm) {\n\t\t\t\tthis.logger.debug('Circle leave cancelled')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingAction = true\n\t\t\tconst member = this.circle.initiator\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('deleteMemberFromCircle', {\n\t\t\t\t\tmember,\n\t\t\t\t\tleave: true,\n\t\t\t\t})\n\n\t\t\t\t// Reset initiator\n\t\t\t\tthis.circle.initiator = null\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Could not leave the circle', member, error)\n\t\t\t\tshowError(t('circles', 'Could not leave the team {displayName}', this.circle))\n\t\t\t} finally {\n\t\t\t\tthis.loadingAction = false\n\t\t\t}\n\t\t},\n\n\t\tasync joinCircle() {\n\t\t\tthis.loadingJoin = true\n\t\t\ttry {\n\t\t\t\tconst initiator = await joinCircle(this.circle.id)\n\t\t\t\tconst member = new Member(initiator, this.circle)\n\n\t\t\t\t// Update initiator with newest membership values\n\t\t\t\tthis.circle.initiator = member\n\n\t\t\t\t// Append new member\n\t\t\t\tmember.circle.addMember(member)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('circles', 'Unable to join the team'))\n\t\t\t\tconsole.error('Unable to join the circle', error)\n\t\t\t} finally {\n\t\t\t\tthis.loadingJoin = false\n\t\t\t}\n\t\t},\n\n\t\tconfirmDeleteCircle() {\n\t\t\twindow.OC.dialogs.confirmDestructive(\n\t\t\t\tt('circles', 'You are about to delete {circle}.\\nAre you sure?', {\n\t\t\t\t\tcircle: this.circle.displayName,\n\t\t\t\t}),\n\t\t\t\tt('circles', 'Please confirm team deletion'),\n\t\t\t\twindow.OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\tthis.deleteCircle,\n\t\t\t\ttrue,\n\t\t\t)\n\t\t},\n\t\tasync deleteCircle(confirm) {\n\t\t\tif (!confirm) {\n\t\t\t\tthis.logger.debug('Circle deletion cancelled')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingAction = true\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('deleteCircle', this.circle.id)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('circles', 'Unable to delete the team'))\n\t\t\t} finally {\n\t\t\t\tthis.loadingAction = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Trigger the entity picker view\n\t\t */\n\t\tasync addMemberToCircle() {\n\t\t\ttry {\n\t\t\t\t// Avoid VueRouter NavigationDuplicated\n\t\t\t\tawait this.$router.push(this.circle.router)\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Could not open circle member picker', error)\n\t\t\t}\n\t\t\temit('contacts:circles:append', this.circle.id)\n\t\t},\n\t},\n}\n","\n\n\n\n\n\n\n\n\n","\n\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { RouteRecordRaw } from 'vue-router'\n\nimport { generateUrl } from '@nextcloud/router'\nimport { createRouter, createWebHistory } from 'vue-router'\nimport HomeView from './views/HomeView.vue'\nimport TeamDashboardView from './views/TeamDashboardView.vue'\nimport TeamPage from './views/TeamPage.vue'\nimport TeamSettingsView from './views/TeamSettingsView.vue'\n\nconst routes: RouteRecordRaw[] = [\n\t{\n\t\tname: 'home',\n\t\tpath: '/',\n\t\tcomponent: HomeView,\n\t},\n\t{\n\t\tpath: '/team/:teamId',\n\t\tcomponent: TeamPage,\n\t\tprops: true,\n\t\tchildren: [\n\t\t\t{\n\t\t\t\tname: 'team',\n\t\t\t\tpath: '',\n\t\t\t\tcomponent: TeamDashboardView,\n\t\t\t\tprops: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'team-settings',\n\t\t\t\tpath: 'settings',\n\t\t\t\tcomponent: TeamSettingsView,\n\t\t\t\tprops: true,\n\t\t\t},\n\t\t],\n\t},\n]\n\nexport const router = createRouter({\n\t// HTML5 history mode for clean, hash-free URLs. The server registers a\n\t// catch-all route (Page#indexPath) so deep-link reloads still serve the shell.\n\thistory: createWebHistory(generateUrl('/apps/circles/teams')),\n\troutes,\n})\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { n, t } from '@nextcloud/l10n'\nimport logger from '../services/logger.js'\n\n/**\n * Mixin for translations and legacy stuff.\n */\nexport default {\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n\n\tcomputed: {\n\t\tappName: () => appName,\n\t\tappVersion: () => appVersion,\n\t\tlogger: () => logger,\n\t\tOC: () => window.OC,\n\t\tOCA: () => window.OCA,\n\t},\n}\n","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { showError } from '@nextcloud/dialogs'\nimport Circle from '../models/circle.ts'\nimport Member from '../models/member.ts'\nimport {\n\tacceptMember,\n\taddMembers,\n\tcreateCircle,\n\tdeleteCircle,\n\tdeleteMember,\n\teditCircleSetting,\n\tgetCircle,\n\tgetCircleMembers,\n\tgetCircles,\n\tleaveCircle,\n} from '../services/circles.ts'\nimport logger from '../services/logger.js'\n\nconst state = {\n\t/** @type {Object} Circle */\n\tcircles: {},\n\n\t/** Whether the circle member list is currently being fetched */\n\tloadingCircleMembers: false,\n}\n\nconst mutations = {\n\n\t/**\n\t * Add a circle into state\n\t *\n\t * @param {object} state the store data\n\t * @param {Circle} circle the circle to add\n\t */\n\taddCircle(state, circle) {\n\t\tif (circle.constructor.name !== Circle.name) {\n\t\t\tthrow new Error('circle must be a Circle type')\n\t\t}\n\t\tstate.circles[circle.id] = circle\n\t},\n\n\t/**\n\t * Set the circle members loading state\n\t *\n\t * @param {object} state the store data\n\t * @param {boolean} value the loading state\n\t */\n\tsetLoadingCircleMembers(state, value) {\n\t\tstate.loadingCircleMembers = value\n\t},\n\n\t/**\n\t * Delete circle\n\t *\n\t * @param {object} state the store data\n\t * @param {Circle} circle the circle to delete\n\t */\n\tdeleteCircle(state, circle) {\n\t\tif (!(circle.id in state.circles)) {\n\t\t\tlogger.warn('Skipping deletion of unknown circle', { circle })\n\t\t}\n\t\tdelete state.circles[circle.id]\n\t},\n\n\t/**\n\t * Reset circle members\n\t *\n\t * @param {object} state the store data\n\t * @param {string} circleId the circle id\n\t */\n\tresetCircleMembers(state, circleId) {\n\t\tstate.circles[circleId].members = {}\n\t},\n\n\t/**\n\t * Append a list of members to a circle\n\t * and remove duplicates\n\t *\n\t * @param {object} state the store data\n\t * @param {Members[]} members array of members to append\n\t */\n\tappendMembersToCircle(state, members) {\n\t\tmembers.forEach((member) => member.circle.addMember(member))\n\t},\n\n\t/**\n\t * Add a member to a circle and overwrite if duplicate uid\n\t *\n\t * @param {object} state the store data\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle to add the members to\n\t * @param {Member} data.member array of contacts to append\n\t */\n\taddMemberToCircle(state, { circleId, member }) {\n\t\tconst circle = state.circles[circleId]\n\t\tcircle.addMember(member)\n\t},\n\n\t/**\n\t * Delete a contact in a specified circle\n\t *\n\t * @param {object} state the store data\n\t * @param {Member} member the member to add\n\t */\n\tdeleteMemberFromCircle(state, member) {\n\t\t// Circles dependencies are managed directly from the model\n\t\tmember.delete()\n\t},\n\n\tsetCircleSettings(state, { circleId, settings }) {\n\t\tstate.circles[circleId]._data.settings = settings\n\t},\n\n\t/**\n\t * Update circle population count\n\t *\n\t * @param {object} state the store data\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle to update the population\n\t * @param {number} data.populationInherited the inherited population count\n\t */\n\tupdateCirclePopulationCount(state, { circleId, populationInherited }) {\n\t\tstate.circles[circleId]._data.populationInherited = populationInherited\n\t},\n}\n\nconst getters = {\n\tgetCircles: (state) => Object.values(state.circles),\n\tgetCircle: (state) => (id) => state.circles[id],\n\tisLoadingCircleMembers: (state) => state.loadingCircleMembers,\n}\n\nconst actions = {\n\t/**\n\t * Retrieve and commit circles\n\t *\n\t * @param {object} context the store mutations\n\t * @return {object[]} the circles\n\t */\n\tasync getCircles(context) {\n\t\tconst circles = await getCircles()\n\t\tlogger.debug(`Retrieved ${circles.length} circle(s)`, { circles })\n\n\t\tlet failure = false\n\t\tcircles.forEach((circle) => {\n\t\t\ttry {\n\t\t\t\tconst newCircle = new Circle(circle)\n\t\t\t\tcontext.commit('addCircle', newCircle)\n\t\t\t} catch (error) {\n\t\t\t\tfailure = true\n\t\t\t\tlogger.error('This circle failed to be processed', { circle, error })\n\t\t\t}\n\t\t})\n\n\t\tif (failure) {\n\t\t\tshowError(t('circles', 'An error has occurred in team(s). Check the console for more details.'))\n\t\t}\n\n\t\treturn circles\n\t},\n\n\t/**\n\t * Retrieve and commit circles\n\t *\n\t * @param {object} context the store mutations\n\t * @param {string} circleId the circle id\n\t * @return {object[]} the circles\n\t */\n\tasync getCircle(context, circleId) {\n\t\tconst circle = await getCircle(circleId)\n\t\tlogger.debug('Retrieved 1 circle', { circle })\n\n\t\ttry {\n\t\t\tconst newCircle = new Circle(circle)\n\t\t\tcontext.commit('addCircle', newCircle)\n\t\t} catch (error) {\n\t\t\tlogger.error('This circle failed to be processed', { circle, error })\n\t\t}\n\n\t\treturn circle\n\t},\n\n\t/**\n\t * Retrieve and commit circle members\n\t *\n\t * @param {object} context the store mutations\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle id\n\t * @param {string} data.search the search query\n\t * @param {string} data.role the role\n\t * @param {number} data.limit the limit\n\t */\n\tasync getCircleMembers(context, { circleId, search, role, limit }) {\n\t\tconst circle = context.getters.getCircle(circleId)\n\t\t// skip if current user is not a member (e.g. visible circle)\n\t\tif (!circle.isMember) {\n\t\t\treturn\n\t\t}\n\n\t\tcontext.commit('setLoadingCircleMembers', true)\n\t\ttry {\n\t\t\tconst members = await getCircleMembers(circleId, search, role, limit)\n\n\t\t\tlogger.debug(`${circleId} have ${members.length} member(s)`, { members })\n\t\t\tcontext.commit('resetCircleMembers', circle.id)\n\t\t\tcontext.commit('appendMembersToCircle', members.map((member) => new Member(member, circle)))\n\t\t} finally {\n\t\t\tcontext.commit('setLoadingCircleMembers', false)\n\t\t}\n\t},\n\n\t/**\n\t * Create circle\n\t *\n\t * @param {object} context the store mutations Current context\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleName the circle name\n\t * @param {boolean} data.isPersonal the circle is a personal one\n\t * @param {boolean} data.isLocal the circle is not distributed to the GlobalScale\n\t * @return {Circle} the new circle\n\t */\n\tasync createCircle(context, { circleName, isPersonal, isLocal }) {\n\t\ttry {\n\t\t\tconst response = await createCircle(circleName, isPersonal, isLocal)\n\t\t\tconst circle = new Circle(response)\n\t\t\tcontext.commit('addCircle', circle)\n\t\t\tlogger.debug('Created circle', { circleName, circle })\n\t\t\tcontext.dispatch('updateCirclesPopulationCount')\n\t\t\treturn circle\n\t\t} catch (error) {\n\t\t\tconsole.error(error)\n\t\t\tshowError(t('circles', 'Unable to create team {circleName}', { circleName }))\n\t\t}\n\t},\n\n\t/**\n\t * Delete circle\n\t *\n\t * @param {object} context the store mutations Current context\n\t * @param {Circle} circleId the circle to delete\n\t */\n\tasync deleteCircle(context, circleId) {\n\t\tconst circle = context.getters.getCircle(circleId)\n\t\ttry {\n\t\t\tawait deleteCircle(circleId)\n\t\t\tcontext.commit('deleteCircle', circle)\n\t\t\tlogger.debug('Deleted circle', { circleId })\n\t\t\tcontext.dispatch('updateCirclesPopulationCount')\n\t\t} catch (error) {\n\t\t\tconsole.error(error)\n\t\t\tshowError(t('circles', 'Unable to delete team {circleId}', { circleId }))\n\t\t}\n\t},\n\n\t/**\n\t * Update population count for all circles\n\t *\n\t * @param {object} context the store mutations Current context\n\t */\n\tasync updateCirclesPopulationCount(context) {\n\t\tconst circles = await getCircles()\n\t\tcircles.forEach((circle) => {\n\t\t\tcontext.commit('updateCirclePopulationCount', {\n\t\t\t\tcircleId: circle.id,\n\t\t\t\tpopulationInherited: circle.populationInherited,\n\t\t\t})\n\t\t})\n\t\tlogger.debug('Updated population count for all circles')\n\t},\n\n\t/**\n\t * Add members to a circle\n\t *\n\t * @param {object} context the store mutations Current context\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle to manage\n\t * @param {Array} data.selection the members to add, see addMembers service\n\t * @return {Member[]}\n\t */\n\tasync addMembersToCircle(context, { circleId, selection }) {\n\t\tconst circle = context.getters.getCircle(circleId)\n\t\tconst results = await addMembers(circleId, selection)\n\t\tconst members = results.map((member) => new Member(member, circle))\n\n\t\tcontext.commit('appendMembersToCircle', members)\n\t\tlogger.debug('Added members to circle', { circle, members })\n\t\tcontext.dispatch('updateCirclesPopulationCount')\n\n\t\treturn members\n\t},\n\n\t/**\n\t * Delete a member from a circle\n\t *\n\t * @param {object} context the store mutations Current context\n\t * @param {Member} member the member to remove\n\t * @param {boolean} [leave] leave the circle instead of removing the member\n\t */\n\tasync deleteMemberFromCircle(context, { member, leave = false }) {\n\t\tconst circleId = member.circle.id\n\t\tconst memberId = member.id\n\n\t\tif (leave) {\n\t\t\tconst circle = await leaveCircle(circleId)\n\t\t\tmember.circle.updateData(circle)\n\n\t\t\t// If the circle is not visible, we remove it from the list\n\t\t\tif (!member.circle.isVisible && !member.circle.isMember) {\n\t\t\t\tawait context.commit('deleteCircle', circle)\n\t\t\t\tlogger.debug('Deleted circle', { circleId, memberId })\n\t\t\t}\n\t\t} else {\n\t\t\tawait deleteMember(circleId, memberId)\n\t\t}\n\n\t\t// success, let's remove from store\n\t\tcontext.commit('deleteMemberFromCircle', member)\n\t\tlogger.debug('Deleted member', { circleId, memberId })\n\t\tcontext.dispatch('updateCirclesPopulationCount')\n\t},\n\n\t/**\n\t * Accept a circle member request\n\t *\n\t * @param {object} context the store mutations Current context\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle id\n\t * @param {string} data.memberId the member id\n\t */\n\tasync acceptCircleMember(context, { circleId, memberId }) {\n\t\tconst circle = context.getters.getCircle(circleId)\n\n\t\tconst result = await acceptMember(circleId, memberId)\n\t\tconst member = new Member(result, circle)\n\n\t\tawait context.commit('addMemberToCircle', { circleId, member })\n\t\tcontext.dispatch('updateCirclesPopulationCount')\n\t},\n\n\tasync editCircleSetting(context, { circleId, setting }) {\n\t\tconst { settings } = await editCircleSetting(circleId, setting)\n\t\tawait context.commit('setCircleSettings', {\n\t\t\tcircleId,\n\t\t\tsettings,\n\t\t})\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","// @ts-nocheck\n/**\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createStore } from 'vuex'\nimport circles from './circles.js'\n\n// Register the (non-namespaced) circles module from Contacts so the ported\n// team page components can use this.$store.getters.getCircle etc.\nexport default createStore({\n\tmodules: { circles },\n})\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { createPinia } from 'pinia'\nimport { createApp } from 'vue'\nimport App from './teams/App.vue'\nimport { logger } from './logger.ts'\nimport { router } from './teams/router.ts'\nimport LegacyGlobalMixin from './teams/team-page/mixins/LegacyGlobalMixin.js'\nimport store from './teams/team-page/store/index.ts'\n\n// OCS endpoints require this header; the ported Contacts services rely on a\n// global default rather than setting it per request.\naxios.defaults.headers.common['OCS-APIRequest'] = 'true'\n\nlogger.debug('Mounting Teams app')\n\nconst app = createApp(App)\napp.use(createPinia())\n// Vuex store from the ported Contacts team page; coexists with Pinia during\n// the migration (the new Teams code uses the Pinia `teams` store).\napp.use(store)\napp.use(router)\n// Provides t/n/logger/OC/OCA to the ported (Options API) Contacts components.\napp.mixin(LegacyGlobalMixin)\napp.mount('#circles-teams')\n"],"file":"teams-main.mjs"} \ No newline at end of file +{"version":3,"mappings":"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","names":["isSameRouteRecord","a","b","isSameRouteLocationParams","key","isSameRouteLocationParamsValue","isArray","isEquivalentArray","value","i","useLink","props","router","inject","routerKey","currentRoute","routeLocationKey","route","computed","to","unref","activeRecordIndex","matched","length","routeMatched","currentMatched","index","parentRecordPath","getOriginalPath","isActive","includesParams","isExactActive","navigate","e","guardEvent","p","noop","preferSingleVNode","vnodes","RouterLink","defineComponent","slots","link","reactive","options","elClass","getLinkClass","children","h","target","outer","inner","innerValue","outerValue","record","propClass","globalClass","defaultClass","activePinia","setActivePinia","pinia","piniaSymbol","isPlainObject","o","MutationType","createPinia","scope","effectScope","state","ref","_p","toBeInstalled","markRaw","app","plugin","addSubscription","subscriptions","callback","detached","onCleanup","removeSubscription","getCurrentScope","onScopeDispose","triggerSubscriptions","args","fallbackRunWithContext","fn","ACTION_MARKER","ACTION_NAME","mergeReactiveObjects","patchToApply","subPatch","targetValue","isRef","isReactive","skipHydrateSymbol","shouldHydrate","obj","assign","isComputed","createOptionsStore","id","hot","actions","getters","initialState","store","setup","localState","toRefs","computedGetters","name","createSetupStore","$id","isOptionsStore","optionsForPlugin","$subscribeOptions","isListening","isSyncListening","actionSubscriptions","debuggerEvents","activeListener","$patch","partialStateOrMutator","subscriptionMutation","myListenerId","nextTick","$reset","newState","$state","$dispose","action","wrappedAction","afterCallbackSet","onErrorCallbackSet","after","onError","ret","error","partialStore","stopWatcher","watch","setupStore","prop","actionValue","toRaw","extender","defineStore","setupOptions","isSetupStore","useStore","hasContext","hasInjectionContext","storeToRefs","rawStore","refs","toRef","Pe","D","y","u","E","ce","l","k","M","z","n","m","x","S","c","f","_","R","r","P","O","t","s","K","I","d","A","U","W","J","$","N","v","H","ue","j","Q","V","Z","ee","F","ne","C","ie","te","T","L","ae","le","oe","se","q","B","G","X","re","fe","g","Y","ve","me","ge","w","de","pe","he","ze","xe","once","func","wasCalled","result","realAppName","appName","logger","APP_NAME","realAppVersion","appVersion","useAppName","useLocalizedAppName","apps","loadState","realAppName2","register","t27","_sfc_main$1","__props","isMobile","useIsMobile","toggleAppNavigationButton","onMounted","onBeforeUnmount","hide","appNavigationToggle","emit","_ctx","_cache","openBlock","createBlock","NcButton","normalizeClass","withCtx","createVNode","NcIconSvgWrapper","mdiArrowRight","NcAppContentDetailsToggle","_export_sfc","browserStorage","getBuilder","instanceName","getCapabilities","_sfc_main","Pane","Splitpanes","isRtl","entries","part","useSwipe","direction","event","listPaneSize","_hoisted_1","_hoisted_2","_hoisted_3","_sfc_render","$props","$setup","$data","$options","_component_NcAppContentDetailsToggle","resolveComponent","_component_Pane","_component_Splitpanes","createElementBlock","toDisplayString","createCommentVNode","Fragment","withModifiers","withDirectives","createElementVNode","renderSlot","vShow","NcAppContent","HAS_APP_NAVIGATION_KEY","CONTENT_SELECTOR_KEY","t30","contentSvg","navigationSvg","provide","setAppNavigation","hasAppNavigation","currentFocus","currentImage","onBeforeMount","container","openAppNavigation","isLegacy34","Teleport","$event","createTextVNode","NcContent","isBrowser","isRouteComponent","component","isESModule","applyToParams","params","newParams","mergeOptions","defaults","partialOptions","HASH_RE","AMPERSAND_RE","SLASH_RE","EQUAL_RE","IM_RE","PLUS_RE","ENC_BRACKET_OPEN_RE","ENC_BRACKET_CLOSE_RE","ENC_CARET_RE","ENC_BACKTICK_RE","ENC_CURLY_OPEN_RE","ENC_PIPE_RE","ENC_CURLY_CLOSE_RE","ENC_SPACE_RE","commonEncode","text","encodeHash","encodeQueryValue","encodeQueryKey","encodePath","encodeParam","decode","TRAILING_SLASH_RE","removeTrailingSlash","path","parseURL","parseQuery$1","location","currentLocation","query","searchString","hash","hashPos","searchPos","resolveRelativePath","stringifyURL","stringifyQuery$1","stripBase","pathname","base","isSameRouteLocation","aLastIndex","bLastIndex","from","fromSegments","toSegments","lastToSegment","position","toPosition","segment","START_LOCATION_NORMALIZED","NavigationType","NavigationType$1","NavigationDirection","NavigationDirection$1","normalizeBase","baseEl","BEFORE_HASH_RE","createHref","getElementPosition","el","offset","docRect","elRect","computeScrollPosition","scrollToPosition","scrollToOptions","positionEl","isIdSelector","getScrollKey","delta","scrollPositions","saveScrollPosition","scrollPosition","getSavedScrollPosition","scroll","isRouteLocation","isRouteName","ErrorTypes","ErrorTypes$1","NavigationFailureSymbol","createRouterError","type","isNavigationFailure","parseQuery","search","searchParams","searchParam","eqPos","currentValue","stringifyQuery","value$1","normalizeQuery","normalizedQuery","matchedRouteKey","viewDepthKey","routerViewLocationKey","useCallbacks","handlers","add","handler","reset","guardToPromiseFn","guard","runWithContext","enterCallbackArray","resolve","reject","next","valid","guardReturn","guardCall","err","extractComponentsGuards","guardType","guards","rawComponent","componentPromise","resolved","resolvedComponent","extractChangingRecords","leavingRecords","updatingRecords","enteringRecords","len","recordFrom","recordTo","createBaseLocation","createCurrentLocation","location$1","slicePos","pathFromHash","useHistoryListeners","historyState","replace","listeners","teardowns","pauseState","popStateHandler","fromState","listener","pauseListeners","listen","teardown","beforeUnloadListener","history$1","destroy","buildState","back","current","forward","replaced","computeScroll","useHistoryStateNavigation","changeLocation","replace$1","hashIndex","url","data","push","currentState","createWebHistory","historyNavigation","historyListeners","go","triggerListeners","routerHistory","TokenType","TokenType$1","TokenizerState","TokenizerState$1","ROOT_TOKEN","VALID_PARAM_RE","tokenizePath","crash","message","buffer","previousState","tokens","finalizeSegment","char","customRe","consumeBuffer","addCharToBuffer","BASE_PARAM_PATTERN","BASE_PATH_PARSER_OPTIONS","PathScore","PathScore$1","REGEX_CHARS_RE","tokensToParser","segments","extraOptions","score","pattern","keys","segmentScores","tokenIndex","token","subSegmentScore","repeatable","optional","regexp","re$1","subPattern","parse","match","stringify","avoidDuplicatedSlash","param","compareScoreArray","diff","comparePathParserScore","aScore","bScore","comp","isLastScoreNegative","last","PATH_PARSER_OPTIONS_DEFAULTS","createRouteRecordMatcher","parent","parser","matcher","createRouterMatcher","routes","globalOptions","matchers","matcherMap","getRecordMatcher","addRoute","originalRecord","isRootAdd","mainNormalizedRecord","normalizeRouteRecord","normalizedRecords","aliases","alias","originalMatcher","normalizedRecord","parentPath","connectingSlash","isAliasRecord","removeRoute","isMatchable","insertMatcher","matcherRef","getRoutes","findInsertionIndex","pickParams","parentMatcher","mergeMetaFields","clearRoutes","normalized","normalizeRecordProps","propsObject","meta","lower","upper","mid","insertionAncestor","getInsertionAncestor","ancestor","RouterLinkImpl","RouterViewImpl","attrs","injectedRoute","routeToDisplay","injectedDepth","depth","initialDepth","matchedRoute","matchedRouteRef","viewRef","instance","oldInstance","oldName","currentName","ViewComponent","normalizeSlot","routePropsOption","routeProps","vnode","slot","slotContent","RouterView","createRouter","beforeGuards","beforeResolveGuards","afterGuards","shallowRef","pendingLocation","normalizeParams","paramValue","encodeParams","decodeParams","parentOrRoute","recordMatcher","routeMatcher","hasRoute","rawLocation","locationNormalized","matchedRoute$1","href$1","matcherLocation","targetParams","fullPath","href","locationAsObject","checkCanceledNavigation","pushWithRedirect","handleRedirectRecord","lastMatched","redirect","newTargetLocation","redirectedFrom","targetLocation","force","shouldRedirect","toLocation","failure","handleScroll","markAsReady","triggerError","failure$1","finalizeNavigation","triggerAfterEach","checkCanceledNavigationAndReject","installedApps","canceledNavigationCheck","runGuardQueue","beforeEnter","isPush","isFirstNavigation","removeHistoryListener","setupListeners","_from","info","readyHandlers","errorListeners","ready","list","isReady","resolve$1","scrollBehavior","started","reactiveRoute","shallowReactive","unmountApp","promise","useRouter","useRoute","_name","NcAppNavigationList","t20","_hoisted_1$1","open","useModel","title","mdiMenuOpen","mdiMenu","NcAppNavigationToggle","focusTrap","setHasAppNavigation","warn","appNavigationContainerElement","useTemplateRef","watchEffect","toggleFocusTrap","subscribe","toggleNavigationByEventBus","createFocusTrap","toggleNavigation","getTrapStack","onUnmounted","unsubscribe","bodyStyles","animationLength","open2","handleEsc","withKeys","NcAppNavigation","_hoisted_4","mergeProps","ChevronUp","IconArrowRight","t14","IconClose","newValue","_component_IconArrowRight","_component_NcButton","_component_IconClose","vModelText","NcInputConfirmCancel","_sfc_main$3","_hoisted_1$2","_hoisted_2$2","_hoisted_3$2","_hoisted_4$2","_sfc_render$3","Pencil","_sfc_main$2","_hoisted_2$1","_hoisted_3$1","_hoisted_4$1","_sfc_render$2","Undo","t21","ChevronDown","_sfc_render$1","_component_ChevronUp","_component_ChevronDown","NcAppNavigationIconCollapsible","t23","t51","NcActions","NcActionButton","NcLoadingIcon","_sfc_main$4","createElementId","newVal","routerLinkHref","_hoisted_5","_hoisted_6","_hoisted_7","_component_NcLoadingIcon","_component_NcInputConfirmCancel","_component_Pencil","_component_NcActionButton","_component_Undo","_component_NcActions","_component_NcAppNavigationIconCollapsible","resolveDynamicComponent","normalizeProps","guardReactiveProps","NcAppNavigationItem","NcAppNavigationNew","t16","t44","mergeModels","model","useSlots","inputElement","inputHasFocus","useFocusWithin","transitionTimeout","actionsContainerElement","hasActions","showActions","timeoutId","hideActions","onCloseSearch","NcInputField","NcAppNavigationSearch","_createBlock","_unref","NcAvatar","getLoggerBuilder","Member","circle","Circle","MemberTypes","level","MemberLevels","initiator","owner","members","member","singleId","config","CircleConfigs","invitationCode","CircleEdit","getCircles","axios","generateOcsUrl","getCircle","circleId","createCircle","personal","local","deleteCircle","editCircle","joinCircle","leaveCircle","getCircleMembers","role","limit","addMembers","deleteMember","memberId","response","changeMemberLevel","acceptMember","editCircleSetting","setting","getInvitation","joinInvitation","createInvitationLink","revokeInvitationLink","__emit","loading","isChecked","onChange","checked","confirmEnableFederationForCircle","prevConfig","nextConfig","circleData","showError","showConfirmation","_openBlock","_createElementBlock","_Fragment","_renderList","label","NcCheckboxRadioSwitch","_mergeProps","_createElementVNode","CopyToClipboardMixin","showSuccess","Autorenew","LinkOff","LinkPlus","NcActionLink","getBaseUrl","generateUrl","_createVNode","_component_NcActionLink","_withModifiers","_component_Autorenew","_createTextVNode","_component_LinkOff","_component_LinkPlus","MEMBER_LEVEL_NONE","MEMBER_LEVEL_MEMBER","MEMBER_LEVEL_MODERATOR","MEMBER_LEVEL_ADMIN","MEMBER_LEVEL_OWNER","MEMBER_TYPE_USER","MEMBER_TYPE_GROUP","MEMBER_TYPE_MAIL","MEMBER_TYPE_CONTACT","MEMBER_TYPE_CIRCLE","CIRCLE_CONFIG_PERSONAL","CIRCLE_CONFIG_SYSTEM","CIRCLE_CONFIG_VISIBLE","CIRCLE_CONFIG_OPEN","CIRCLE_CONFIG_INVITE","CIRCLE_CONFIG_REQUEST","CIRCLE_CONFIG_FRIEND","CIRCLE_CONFIG_PROTECTED","CIRCLE_CONFIG_NO_OWNER","CIRCLE_CONFIG_HIDDEN","CIRCLE_CONFIG_BACKEND","CIRCLE_CONFIG_LOCAL","CIRCLE_CONFIG_ROOT","CIRCLE_CONFIG_CIRCLE_INVITE","CIRCLE_CONFIG_FEDERATED","CIRCLES_MEMBER_LEVELS","PUBLIC_CIRCLE_CONFIG","CircleConfigCheckboxesList","CircleConfigInvitationLink","CIRCLES_MEMBER_GROUPING","ShareType","SHARES_TYPES_MEMBER_MAP","entry","MemberStatus","shareType","maxAutocompleteResults","getSuggestions","request","exact","rawExactSuggestions","arr","elem","rawSuggestions","exactSuggestions","share","formatResults","suggestions","allSuggestions","nameCounts","finalResults","item","getRecommendations","shareTypeToMemberType","HEADERS","levelToRole","mapResource","raw","mapPreviewMember","mapFullMember","fetchTeams","circlesRes","dashRes","circles","dashboard","dashboardById","team","extra","fetchTeamMembers","teamId","createTeam","setTeamDescription","description","leaveTeam","deleteTeam","getTeamFolder","upgradeTeamFolder","searchMemberCandidates","term","suggestion","addTeamMembers","candidates","candidate","res","useTeamsStore","needle","api.fetchTeams","api.fetchTeamMembers","displayName","api.createTeam","trimmedDescription","api.setTeamDescription","api.searchMemberCandidates","api.addTeamMembers","api.leaveTeam","api.deleteTeam","useTeamActions","getTeam","settingsTo","isOwner","canManage","canLeave","canDelete","onManage","onCopyLink","onLeave","onDelete","TeamAvatar","mdiCogOutline","mdiContentCopy","mdiExitToApp","mdiTrashCanOutline","openCreateTeamWizard","filteredTeams","isOverviewActive","mdiPlus","mdiMagnify","mdiViewDashboard","mdiViewDashboardOutline","TeamNavigationItem","NcEmptyContent","mdiAccountGroupOutline","NcUserBubbleDiv","isOpen","isAvatarUrl","isCustomAvatar","avatarStyle","hasUrl","contentComponent","contentStyle","NcPopover","normalizeStyle","NcUserBubble","STEPS","step","submitting","stepIndex","nameTouched","isNameValid","nameError","searchQuery","searching","selectedMembers","selectedList","searchTimeout","scheduleSearch","toggleCandidate","isSelected","goToMembers","goToName","showWarning","buttons","cancelButton","onFormSubmit","NcDialog","_toDisplayString","NcTextField","mdiAccountMultiplePlusOutline","createWizardOpen","GlobalNavigation","_normalizeClass","$style","_component_RouterView","TeamCreationWizard","MAX_AVATARS","_component_RouterLink","mdiFolderMultipleOutline","teams","loadError","loadTeams","mdiAlertCircleOutline","TeamCard","code","circleName","membershipStatus","homeUrl","circleUrl","invitation","acceptInvitation","client","getClient","rootPath","defaultRootPath","currentPath","nodes","currentFolderFileId","viewMode","breadcrumbs","crumbs","parts","built","toggleViewMode","currentDir","currentFolderUrl","fileid","encodeDir","dir","getNodeUrl","node","FileType","openFile","nodeIconPath","mdiFolderOutline","mdiFileOutline","nodePreviewUrl","size","hasPreview","mime","previewUrl","onNodeClick","newPath","navigateTo","loadContents","relativePath","davPath","getDefaultPropfind","currentEntry","currentNode","resultToNode","crumb","mdiViewListOutline","mdiViewGridOutline","mdiOpenInNew","_hoisted_8","_hoisted_11","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","NcDateTime","folderId","mountPoint","loadTeamFolder","folder","TeamFolderWidget","getDevtoolsGlobalHook","getTarget","isProxyAvailable","HOOK_SETUP","HOOK_PLUGIN_SETTINGS_SET","supported","perf","isPerformanceSupported","_a","now","ApiProxy","hook","defaultSettings","localSettingsSaveId","currentSettings","pluginId","_target","setupDevtoolsPlugin","pluginDescriptor","setupFn","descriptor","enableProxy","proxy","storeKey","forEachValue","isObject","isPromise","val","partial","arg","genericSubscribe","subs","resetStore","installModule","resetStoreState","oldState","oldScope","wrappedGetters","computedObj","computedCache","enableStrictMode","rootState","module","isRoot","namespace","parentState","getNestedState","moduleName","makeLocalContext","mutation","namespacedType","registerMutation","registerAction","getter","registerGetter","child","noNamespace","_type","_payload","_options","unifyObjectStyle","payload","makeLocalGetters","gettersProxy","splitPos","localType","rawGetter","LABEL_VUEX_BINDINGS","MUTATIONS_LAYER_ID","ACTIONS_LAYER_ID","INSPECTOR_ID","actionId","addDevtools","api","COLOR_LIME_500","flattenStoreForInspectorTree","formatStoreForInspectorTree","modulePath","formatStoreForInspectorState","getStoreModule","duration","COLOR_DARK","COLOR_WHITE","TAG_NAMESPACED","extractNameFromPath","filter","gettersKeys","storeState","tree","transformPathsToObjectTree","canThrow","leafKey","moduleMap","names","cb","Module","rawModule","runtime","rawState","prototypeAccessors$1","ModuleCollection","rawRootModule","update","this$1$1","newModule","rawChildModule","targetModule","createStore","Store","plugins","strict","devtools","dispatch","commit","prototypeAccessors","injectKey","useDevtools","sub","newOptions","committing","loadCircle","TeamHeader","_component_router_view","NcActionSeparator","t47","t48","t31","LOCALHOST","COLON","Options","opts","defaultRender","ignoredTags","uppercaseIgnoredTags","ir","operator","isCallable","option","MultiToken","scheme","truncate","formatted","protocol","formattedHref","tagName","content","attributes","className","rel","eventListeners","createTokenClass","Token","t15","PQueue","t19","t28","t6","humanizedCount","getCanonicalLocale","originalCountAsTitleIfNeeded","countAsString","NcCounterBubble","t35","isWindowAvailable","lastTime","vendors","element","currTime","timeToCall","this","t5","t37","t43","Color","gtBuilder","getGettextBuilder","gt","t22","t7","_hoisted_9","_hoisted_10","_component_NcCounterBubble","createSlots","NcListItem","t38","t42","t9","predicate","thisArg","CustomEvent$1","evt","onDestroy","registerWidget","propsWithDefaults","registerCustomPickerElement","t8","imagePath","t41","t46","t24","t25","t32","t12","asciiAlpha","regexCheck","asciiAlphanumeric","asciiControl","code2","markdownLineEndingOrSpace","unicodePunctuation","unicodeWhitespace","regex","check","convert","test","ok","castFactory","anyFactory","propertiesFactory","typeFactory","tests","checks","any","parameters","index2","checkAsRecord","all","nodeAsRecord","testFunction","looksLikeANode","wwwPrefix","tokenizeWwwPrefix","domain","tokenizeDomain","trail","tokenizeTrail","emailDomainDotTrail","tokenizeEmailDomainDotTrail","wwwAutolink","tokenizeWwwAutolink","previousWww","protocolAutolink","tokenizeProtocolAutolink","previousProtocol","emailAutolink","tokenizeEmailAutolink","previousEmail","effects","ok2","nok","self","dot","start","gfmAtext","previousUnbalanced","atext","emailDomain","emailDomainAfter","emailDomainDot","wwwStart","wwwAfter","seen","protocolStart","protocolPrefixInside","protocolSlashesInside","afterProtocol","protocolAfter","wwwPrefixInside","wwwPrefixAfter","underscoreInLastSegment","underscoreInLastLastSegment","domainInside","domainAfter","domainAtPunctuation","sizeOpen","sizeClose","pathInside","pathAtPunctuation","trail2","trailCharacterReferenceStart","trailBracketAfter","trailCharacterReferenceInside","events","t34","t0","NcSelect","t50","debounce","__expose","modelValue","focus","select","useAttrs","textAreaElement","internalPlaceholder","isLegacy","ariaDescribedby","ariaDescribedby2","handleInput","mdiCheck","NcTextArea","FRAGMENT","TELEPORT","SUSPENSE","KEEP_ALIVE","BASE_TRANSITION","OPEN_BLOCK","CREATE_BLOCK","CREATE_ELEMENT_BLOCK","CREATE_VNODE","CREATE_ELEMENT_VNODE","CREATE_COMMENT","CREATE_TEXT","CREATE_STATIC","RESOLVE_COMPONENT","RESOLVE_DYNAMIC_COMPONENT","RESOLVE_DIRECTIVE","RESOLVE_FILTER","WITH_DIRECTIVES","RENDER_LIST","RENDER_SLOT","CREATE_SLOTS","TO_DISPLAY_STRING","MERGE_PROPS","NORMALIZE_CLASS","NORMALIZE_STYLE","NORMALIZE_PROPS","GUARD_REACTIVE_PROPS","TO_HANDLERS","CAMELIZE","CAPITALIZE","TO_HANDLER_KEY","SET_BLOCK_TRACKING","PUSH_SCOPE_ID","POP_SCOPE_ID","WITH_CTX","UNREF","IS_REF","WITH_MEMO","IS_MEMO_SAME","helperNameMap","registerRuntimeHelpers","helpers","Namespaces","NodeTypes","ElementTypes","ConstantTypes","locStub","createRoot","source","createVNodeCall","context","tag","patchFlag","dynamicProps","directives","isBlock","disableTracking","isComponent","loc","getVNodeBlockHelper","getVNodeHelper","createArrayExpression","elements","createObjectExpression","properties","createObjectProperty","isString","createSimpleExpression","isStatic","constType","createInterpolation","createCompoundExpression","createCallExpression","callee","createFunctionExpression","returns","newline","isSlot","createConditionalExpression","consequent","alternate","createCacheExpression","needPauseTracking","inVOnce","createBlockStatement","body","createTemplateLiteral","createIfStatement","createAssignmentExpression","left","right","createSequenceExpression","expressions","createReturnStatement","ssr","convertToBlock","helper","removeHelper","inSSR","defaultDelimitersOpen","defaultDelimitersClose","isTagStartChar","isWhitespace","isEndOfTagSection","toCharCodes","str","Sequences","Tokenizer","stack","cbs","line","column","newlineIndex","isEnd","endOfText","actualIndex","cc","sequence","quote","input","endIndex","cp","consumed","CompilerDeprecationTypes","deprecationData","getCompatValue","compatConfig","isCompatEnabled","mode","checkCompatEnabled","warnDeprecation","msg","defaultOnError","defaultOnWarn","createCompilerError","messages","additionalMessage","ErrorCodes","errorMessages","walkIdentifiers","root","onIdentifier","includeAll","parentStack","knownIds","isReferencedIdentifier","isInDestructureAssignment","isInNewExpression","walkFunctionParams","onIdent","extractIdentifiers","walkBlockDeclarations","block","stmt","decl","isForStatement","walkForStatement","walkSwitchStatement","isVar","variable","cs","stmt2","object","isFunctionType","isStaticProperty","isStaticPropertyKey","TS_NODE_TYPES","unwrapTSNode","isStaticExp","isCoreComponent","nonIdentifierRE","isSimpleIdentifier","validFirstIdentCharRE","validIdentCharRE","whitespaceRE","getExpSource","exp","isMemberExpressionBrowser","stateStack","currentOpenBracketCount","currentOpenParensCount","currentStringType","isMemberExpressionNode","NOOP","isMemberExpression","fnExpRE","isFnExpressionBrowser","isFnExpressionNode","isFnExpression","advancePositionWithClone","pos","numberOfCharacters","advancePositionWithMutation","linesCount","lastNewLinePos","assert","condition","findDir","allowEmpty","findProp","dynamicOnly","isStaticArgOf","hasDynamicKeyVBind","isText$1","isVPre","isVSlot","isTemplateNode","isSlotOutlet","propsHelperSet","getUnnormalizedProps","callPath","injectProp","propsWithInjection","parentCall","first","hasProp","propKeyName","toValidAssetId","searchValue","replaceValue","hasScopeRef","ids","getMemoedVNodeCall","forAliasRE","defaultParserOptions","NO","currentOptions","currentRoot","currentInput","currentOpenTag","currentProp","currentAttrValue","currentAttrStartIndex","currentAttrEndIndex","inPre","inVPre","currentVPreBoundary","tokenizer","emitError","end","onText","getSlice","innerStart","innerEnd","addNode","createExp","getLoc","endOpenTag","found","onCloseTag","backTrack","dirToAttr","setLocEnd","mod","condense","expParseMode","parseForExpression","syncIndex","forIteratorRE","stripParensRE","inMatch","LHS","RHS","createAliasExpression","asParam","valueContent","trimmedOffset","iteratorMatch","keyContent","keyOffset","indexContent","ns","lastNode","isImplied","lookAhead","extend","isFragmentTemplate","condenseWhitespace","inlineTemplateProp","specialTemplateDir","isUpperCase","windowsNewlineRE","shouldCondense","removedWhitespace","isAllWhitespace","prev","hasNewlineChar","prevCharIsWhitespace","cloneLoc","attr","parseMode","baseParse","delimiters","cacheStatic","walk","getSingleElementRoot","doNotHoistNode","inFor","toCache","constantType","getConstantType","codegenNode","flag","getGeneratedPropsConstantType","getNodeProps","i2","cachedAsArray","getCacheExpression","getSlotNode","slotName","node2","constantCache","cached","returnType2","generatedPropsType","childType","expType","returnType","isSymbol","allowHoistedHelperSet","getConstantTypeOfHelperCall","keyType","valueType","createTransformContext","filename","prefixIdentifiers","hoistStatic","hmr","cacheHandlers","nodeTransforms","directiveTransforms","transformHoist","isBuiltInComponent","isCustomElement","expressionPlugins","scopeId","slotted","ssrCssVars","bindingMetadata","EMPTY_OBJ","inline","isTS","onWarn","nameMatch","capitalize","camelize","count","currentCount","removalIndex","identifier","isVNode","cacheExp","transform","traverseNode","createRootCodegen","singleElementRootChild","traverseChildren","nodeRemoved","exitFns","onExit","createStructuralDirectiveTransform","matches","PURE_ANNOTATION","aliasHelper","createCodegenContext","ast","sourceMap","optimizeImports","runtimeGlobalName","runtimeModuleName","ssrRuntimeModuleName","withoutNewLine","generate","indent","deindent","hasHelpers","useWithBlock","genFunctionPreamble","functionName","signature","genAssets","genNode","VueBinding","staticHelpers","genHoists","assets","resolver","maybeSelfReference","hoists","genNodeListAsArray","multilines","genNodeList","comma","genText","genExpression","genInterpolation","genCompoundExpression","genComment","genVNodeCall","genCallExpression","genObjectExpression","genArrayExpression","genFunctionExpression","genConditionalExpression","genCacheExpression","pure","genExpressionAsPropertyKey","patchFlagString","callHelper","genNullableArgs","needNewline","needsParens","isNested","needArraySpread","transformExpression","processExpression","memo","asParams","asRawStatements","localVars","stringifyExpression","transformIf","processIf","ifNode","branch","siblings","sibling","createCodegenNodeForBranch","parentCondition","getParentCondition","processCodegen","createIfBranch","isTemplateIf","keyIndex","createChildrenCodegenNode","keyProperty","firstChild","vnodeCall","transformFor","processFor","forNode","renderExp","isTemplate","keyProp","keyExp","isStableFragment","fragmentFlag","childBlock","needFragmentWrapper","slotOutlet","loop","createForLoopParams","parseResult","finalizeForParseResult","addIdentifiers","removeIdentifiers","scopes","memoArgs","createParamsList","defaultFallback","trackSlotScopes","vSlot","trackVForSlotScopes","vFor","buildClientSlotFn","_vForExp","buildSlots","buildSlotFn","slotsProperties","dynamicSlots","hasDynamicSlots","onComponentSlot","hasTemplateSlots","hasNamedDefaultSlot","implicitDefaultChildren","seenSlotNames","conditionalBranchIndex","slotElement","slotDir","slotChildren","slotLoc","slotProps","dirLoc","staticSlotName","slotFunction","vIf","vElse","buildDynamicSlot","isNonWhitespaceContent","conditional","buildDefaultSlotProperty","children2","slotFlag","hasForwardedSlots","directiveImportMap","transformElement","vnodeTag","resolveComponentType","isDynamicComponent","vnodeProps","vnodeChildren","vnodeDynamicProps","dynamicPropNames","vnodeDirectives","shouldUseBlock","propsBuildResult","buildProps","buildDirectiveArgs","hasDynamicTextChild","stringifyDynamicPropNames","isExplicitDynamic","isComponentTag","isProp","builtIn","elementLoc","mergeArgs","runtimeDirectives","hasChildren","hasRef","hasClassBinding","hasStyleBinding","hasHydrationEventBinding","hasDynamicKeys","hasVnodeHook","pushMergeArg","dedupeProperties","pushRefVForMarker","analyzePatchFlag","isEventHandler","isOn","isReservedProp","nameLoc","modifiers","isVBind","isVOn","directiveTransform","props2","needRuntime","isBuiltInDirective","propsExpression","classKeyIndex","styleKeyIndex","hasDynamicKey","classProp","styleProp","knownProps","deduped","existing","mergeAsArray","incoming","dirArgs","trueExpression","modifier","propsNamesString","transformSlotOutlet","processSlotOutlet","slotArgs","expectedLen","nonNameProps","transformOn","augmentor","eventName","rawName","eventString","toHandlerKey","shouldCache","isMemberExp","isInlineStatement","hasMultipleStatements","transformBind","_node","injectPrefix","prefix","transformText","currentContainer","hasText","callArgs","seen$1","transformOnce","cur","transformModel","createTransformProps","rawExp","expString","bindingType","propName","assignmentExp","eventArg","modifiersKey","validDivisionCharRE","transformFilter","rewriteFilter","parseFilter","inSingle","inDouble","inTemplateString","inRegex","curly","square","paren","lastFilterIndex","expression","filters","pushFilter","wrapFilter","transformMemo","transformVBindShorthand","getBaseTransformPreset","baseCompile","isModuleMode","resolvedOptions","BindingTypes","noopDirectiveTransform","V_MODEL_RADIO","V_MODEL_CHECKBOX","V_MODEL_TEXT","V_MODEL_SELECT","V_MODEL_DYNAMIC","V_ON_WITH_MODIFIERS","V_ON_WITH_KEYS","V_SHOW","TRANSITION","TRANSITION_GROUP","decoder","decodeHtmlBrowser","asAttr","parserOptions","isVoidTag","isHTMLTag","isSVGTag","isMathMLTag","rootNamespace","transformStyle","parseInlineCSS","cssText","parseStringStyle","createDOMCompilerError","DOMErrorCodes","DOMErrorMessages","transformVHtml","transformVText","baseResult","transformModel$1","directiveToUse","isInvalidType","isEventOptionModifier","isNonKeyModifier","makeMap","maybeKeyModifier","isKeyboardEvent","resolveModifiers","keyModifiers","nonKeyModifiers","eventOptionModifiers","transformClick","transformOn$1","handlerExp","modifierPostfix","transformShow","ignoreSideEffectTags","DOMNodeTransforms","DOMDirectiveTransforms","compile","src","template","exports","compilerDom","require$$0","runtimeDom","require$$1","shared","require$$2","_interopNamespaceDefault","runtimeDom__namespace","compileCache","compileToFunction","render","vueModule","global","factory","ownKeys","_objectSpread2","_defineProperty","_toPrimitive","_toPropertyKey","_typeof","_classCallCheck","Constructor","_defineProperties","_createClass","protoProps","staticProps","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","iter","minLen","arr2","IS_BROWSER","WINDOW","IS_TOUCH_DEVICE","HAS_POINTER_EVENT","NAMESPACE","ACTION_ALL","ACTION_CROP","ACTION_MOVE","ACTION_ZOOM","ACTION_EAST","ACTION_WEST","ACTION_SOUTH","ACTION_NORTH","ACTION_NORTH_EAST","ACTION_NORTH_WEST","ACTION_SOUTH_EAST","ACTION_SOUTH_WEST","CLASS_CROP","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","DRAG_MODE_CROP","DRAG_MODE_MOVE","DRAG_MODE_NONE","EVENT_CROP","EVENT_CROP_END","EVENT_CROP_MOVE","EVENT_CROP_START","EVENT_DBLCLICK","EVENT_TOUCH_START","EVENT_TOUCH_MOVE","EVENT_TOUCH_END","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_READY","EVENT_RESIZE","EVENT_WHEEL","EVENT_ZOOM","MIME_TYPE_JPEG","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","DEFAULTS","TEMPLATE","isNaN","isNumber","isPositiveNumber","isUndefined","hasOwnProperty","_constructor","prototype","isFunction","slice","toArray","forEach","_len","_key","REGEXP_DECIMALS","normalizeDecimalNumber","times","REGEXP_SUFFIX","setStyle","styles","style","property","hasClass","addClass","removeClass","toggleClass","added","REGEXP_CAMEL_CASE","toParamCase","getData","setData","removeData","REGEXP_SPACES","onceSupported","removeListener","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","getOffset","box","REGEXP_ORIGINS","isCrossOriginURL","addTimestamp","timestamp","getTransforms","_ref","rotate","scaleX","scaleY","translateX","translateY","values","getMaxZoomRatio","pointers","pointers2","maxRatio","pointer","pointerId","pointer2","x1","y1","x2","y2","z1","z2","ratio","getPointer","_ref2","endOnly","pageX","pageY","getPointersCenter","_ref3","startX","startY","getAdjustedSizes","_ref4","aspectRatio","height","width","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","degree","arc","sinArc","cosArc","newWidth","newHeight","getSourceCanvas","image","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","imageNaturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","naturalWidth","naturalHeight","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","canvas","maxSizes","minSizes","destMaxSizes","destMinSizes","destWidth","destHeight","fromCharCode","getStringFromCharCode","dataView","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","arrayBuffer","uint8","arrayBufferToDataURL","mimeType","chunks","chunkSize","resetAndGetOrientation","orientation","littleEndian","app1Start","ifdStart","exifIDCode","tiffOffset","endianness","firstIFDOffset","_length","_offset","parseOrientation","cropper","containerData","imageData","rotated","canvasWidth","canvasHeight","canvasData","sizeLimited","positionLimited","cropBoxData","cropped","minCanvasWidth","minCanvasHeight","_getAdjustedSizes","newCanvasLeft","newCanvasTop","changed","transformed","_getRotatedSizes","autoCropArea","limited","minCropBoxWidth","minCropBoxHeight","maxCropBoxWidth","maxCropBoxHeight","preview","crossOrigin","alt","previews","img","cropBoxWidth","cropBoxHeight","top","originalWidth","originalHeight","ratioX","ratioY","_this","button","touch","change","bottom","minLeft","minTop","renderable","range","side","methods","hasSameSize","offsetX","offsetY","_this$canvasData","_originalEvent","pivot","center","_scaleX","_scaleY","rounded","widthChanged","heightChanged","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","sourceWidth","sourceHeight","srcX","srcY","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","scale","dragBox","face","croppable","movable","AnotherCropper","Cropper","xhr","clone","_parseOrientation","crossOriginUrl","_this2","isIOSWebKit","done","sizingImage","cropBox","parentNode","VueCropper","_vue","_cropperjs","_cropperjs2","_interopRequireDefault","_objectWithoutProperties","previewPropType","crossorigin","_$options$props","onlyColorChanged","ENFORCE_PASSWORD_PROTECTION","USE_UNIQUE_PASSWORD","UNIQUE_PASSWORD","uniquePassword","uniquePasswordError","showUniquePasswordInput","enforcePasswordProtection","useUniquePassword","changePasswordProtection","saveUseUniquePassword","changeUseUniquePassword","saveUniquePassword","onClickChangePassword","_renderSlot","configSections","ContentHeading","_resolveDynamicComponent","CirclePasswordSettings","$emit","IconLogout","IconDelete","NcNoteCard","CloseOutlineIcon","CheckOutlineIcon","shown","actualValue","_component_NcPopover","_component_NcTextField","_component_CloseOutlineIcon","_component_CheckOutlineIcon","_component_NcNoteCard","UserBubble","_component_UserBubble","EmptyContent","EntityBubble","IconAccountPlusOutline","IconSearch","IconLoading","Modal","VList","EntitySearchResult","types","invalidTypes","selection","entity","dataSet","dataList","_component_Modal","_component_IconAccountPlusOutline","_component_EmptyContent","_component_IconLoading","_TransitionGroup","_component_EntityBubble","_component_IconSearch","_component_VList","_withCtx","_component_EntitySearchResult","RouterMixin","IconAccountGroupOutline","NcActionText","IconDeleteOutline","IconExitToApp","IconShieldCheckOutline","IconCheckOutline","IconCloseOutline","levels","DialogBuilder","_component_NcAvatar","_component_IconAccountGroupOutline","_component_IconCheckOutline","_component_IconCloseOutline","_component_NcActionText","_component_IconShieldCheckOutline","_component_NcActionSeparator","_component_IconExitToApp","_component_IconDeleteOutline","IsMobileMixin","EntityPicker","IconContact","MemberGridItem","searchQueryDebounced","refDebounced","searchRole","roles","readonly","ta","userType","users","gridBaseline","headerHeight","padding","availableHeight","header","results","guest","_component_NcSelect","_component_NcEmptyContent","_normalizeStyle","_component_MemberGridItem","_component_IconContact","_component_EntityPicker","_createCommentVNode","CircleActionsMixin","confirm","VALID_MIME_TYPES","AVATAR_ACTIONS","picker","getFilePickerBuilder","FilePickerType","AccountPlusIcon","ListItem","CogIcon","CopyIcon","IconAccountGroup","FileDocumentOutline","LoginIcon","LogoutIcon","MemberList","CircleSettings","TeamResourceButton","PencilIcon","FolderOutlineIcon","FolderPlusOutlineIcon","MessageIcon","CalendarIcon","ViewDashboardIcon","BookOpenPageVariantIcon","CheckIcon","FolderIcon","TrashCanOutlineIcon","TrayArrowUpIcon","avatarList","useElementSize","avatarAccept","avatarSupported","getCurrentUser","avatarWidth","maxMembers","acc","resource","providerId","enabledApps","resourceId","resourceType","folderPath","talkUrl","collectiveName","collectiveUrl","DavClient","__vite_default__","generateRemoteUrl","calendarHome","davCalendar","calendarName","shareUrl","participantUrl","circleUri","file","reader","fileResponse","FilePickerClosed","blob","errors","formData","errorFields","_hoisted_12","_hoisted_19","_hoisted_20","_component_NcTextArea","_component_TrayArrowUpIcon","_component_FolderIcon","_component_TrashCanOutlineIcon","_component_PencilIcon","_component_CopyIcon","_component_CogIcon","_component_CircleSettings","_component_LoginIcon","_component_LogoutIcon","_component_CheckIcon","_component_TeamResourceButton","group","_component_ContentHeading","_component_ListItem","_component_FileDocumentOutline","_component_AccountPlusIcon","_component_MemberList","_component_IconAccountGroup","_component_NcDialog","_component_VueCropper","CircleDetails","HomeView","JoinInvitation","TeamPage","TeamDashboardView","TeamSettingsView","LegacyGlobalMixin","mutations","settings","populationInherited","newCircle","isPersonal","isLocal","leave","createApp","App"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,25,26,27,37,45,46,47,48,49,50,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,113,115,116,117,121,122,123,124],"sources":["../node_modules/@nextcloud/vue/node_modules/vue-router/dist/devtools-DCoWQoU_.js","../node_modules/@nextcloud/vue/node_modules/vue-router/dist/vue-router.js","../node_modules/pinia/dist/pinia.mjs","../node_modules/splitpanes/dist/splitpanes.es.js","../node_modules/@nextcloud/vue/dist/chunks/appName-DyNMVZpX.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppContent--92JdjRr.mjs","../node_modules/@nextcloud/vue/dist/chunks/constants-Ciwvl5xb.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcContent-BhMoPROW.mjs","../node_modules/vue-router/dist/devtools-EWN81iOl.mjs","../node_modules/vue-router/dist/vue-router.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationList-CGSWabRB.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigation-Bb9-C2eO.mjs","../node_modules/@nextcloud/vue/dist/chunks/ChevronUp-ChH8oB7p.mjs","../node_modules/@nextcloud/vue/dist/chunks/ArrowRight-B1ncAhus.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcInputConfirmCancel-B6qC3s63.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationItem-B0-60shw.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationNew-Dspn3-4i.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationSearch-CiOKjV3M.mjs","../src/teams/components/TeamAvatar.vue","../src/teams/team-page/services/logger.js","../src/teams/team-page/models/member.ts","../src/teams/team-page/models/circle.ts","../src/teams/team-page/services/circles.ts","../src/teams/team-page/components/CircleDetails/CircleConfigs/CircleConfigCheckboxesList.vue","../node_modules/vue-material-design-icons/Autorenew.vue","../node_modules/vue-material-design-icons/LinkOff.vue","../node_modules/vue-material-design-icons/LinkPlus.vue","../src/teams/team-page/mixins/CopyToClipboardMixin.js","../src/teams/team-page/components/CircleDetails/CircleConfigs/CircleConfigInvitationLink.vue","../src/teams/team-page/models/constants.ts","../src/teams/team-page/services/collaborationAutocompletion.js","../src/teams/api.ts","../src/teams/store.ts","../src/teams/composables/useTeamActions.ts","../src/teams/components/TeamNavigationItem.vue","../src/teams/components/GlobalNavigation.vue","../node_modules/@nextcloud/vue/dist/chunks/NcUserBubble-BXBgGflZ.mjs","../src/teams/components/TeamCreationWizard.vue","../src/teams/App.vue","../src/teams/components/TeamCard.vue","../src/teams/views/HomeView.vue","../src/teams/views/JoinInvitation.vue","../src/teams/components/TeamFolderWidget.vue","../src/teams/views/TeamDashboardView.vue","../node_modules/vuex/node_modules/@vue/devtools-api/lib/esm/env.js","../node_modules/vuex/node_modules/@vue/devtools-api/lib/esm/const.js","../node_modules/vuex/node_modules/@vue/devtools-api/lib/esm/time.js","../node_modules/vuex/node_modules/@vue/devtools-api/lib/esm/proxy.js","../node_modules/vuex/node_modules/@vue/devtools-api/lib/esm/index.js","../node_modules/vuex/dist/vuex.esm-bundler.js","../src/teams/components/TeamHeader.vue","../src/teams/views/TeamPage.vue","../node_modules/@nextcloud/paths/dist/index.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcActionButtonGroup-B9LfyE-G.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcActionSeparator-B9pNQaji.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationCaption-BptTnvQU.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationSettings-1BzAhIDg.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSettingsDialog-BgZCuMK0.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSettingsShortcutsSection-og6gyYxr.mjs","../node_modules/linkifyjs/dist/linkify.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSidebar-DX26aRNB.mjs","../node_modules/@nextcloud/vue/dist/functions/preloadImage/index.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcChip-BCtDxh7v.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcCollectionList-DNfWulkK.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcCounterBubble-CV0YMrXW.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcDashboardWidget-DKZ8Mgt0.mjs","../node_modules/emoji-mart-vue-fast/src/vendor/raf-polyfill.js","../node_modules/emoji-mart-vue-fast/dist/emoji-mart.js","../node_modules/@nextcloud/vue/dist/chunks/emoji-C8k9NUlo.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcEmojiPicker-R2GSAiCW.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcFilePicker-C7Xs8E2Q.mjs","../node_modules/@nextcloud/vue/dist/chunks/useCopy-PckLYUAU.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcKbd-DCsSL73F.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcHotkeyList-BWerT8qH.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcListItem-DItks2Sq.mjs","../node_modules/tributejs/dist/tribute.esm.js","../node_modules/@nextcloud/vue/dist/chunks/NcProgressBar-C-ane-Ni.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRelatedResourcesPanel-Bk9l-BN3.mjs","../node_modules/@nextcloud/vue/dist/chunks/customPickerElements-Cu7bLbap.mjs","../node_modules/@nextcloud/vue/dist/chunks/referencePickerModal-CD1BjLPe.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRichText-Dkk6iX8F.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRichContenteditable-BwGkxhDF.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSelectTags-D7qWNjXa.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSettingsSelectGroup-TN64yH4k.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcTextArea-Dxzj4zdb.mjs","../node_modules/@vue/compiler-core/dist/compiler-core.esm-bundler.js","../node_modules/@vue/compiler-dom/dist/compiler-dom.esm-bundler.js","../node_modules/vue/dist/vue.cjs.prod.js","../node_modules/vue/index.js","../node_modules/cropperjs/dist/cropper.js","../node_modules/vue-cropperjs/dist/VueCropper.js","../node_modules/vue-material-design-icons/AccountGroupOutline.vue","../node_modules/vue-material-design-icons/AccountPlusOutline.vue","../node_modules/vue-material-design-icons/BookOpenPageVariant.vue","../node_modules/vue-material-design-icons/CalendarOutline.vue","../node_modules/vue-material-design-icons/Check.vue","../node_modules/vue-material-design-icons/CogOutline.vue","../node_modules/vue-material-design-icons/ContentCopy.vue","../node_modules/vue-material-design-icons/FileDocumentOutline.vue","../node_modules/vue-material-design-icons/Folder.vue","../node_modules/vue-material-design-icons/FolderOutline.vue","../node_modules/vue-material-design-icons/FolderPlusOutline.vue","../node_modules/vue-material-design-icons/Login.vue","../node_modules/vue-material-design-icons/Logout.vue","../node_modules/vue-material-design-icons/MessageOutline.vue","../node_modules/vue-material-design-icons/PencilOutline.vue","../node_modules/vue-material-design-icons/TrashCanOutline.vue","../node_modules/vue-material-design-icons/TrayArrowUp.vue","../node_modules/vue-material-design-icons/ViewDashboard.vue","../src/teams/team-page/components/CircleDetails/CirclePasswordSettings.vue","../src/teams/team-page/components/CircleDetails/ContentHeading.vue","../src/teams/team-page/components/CircleDetails/CircleSettings.vue","../node_modules/vue-material-design-icons/Close.vue","../src/teams/team-page/components/CircleDetails/TeamResourceButton.vue","../node_modules/virtua/lib/vue/index.js","../node_modules/vue-material-design-icons/AccountMultipleOutline.vue","../node_modules/vue-material-design-icons/Magnify.vue","../src/teams/team-page/components/EntityPicker/EntityBubble.vue","../src/teams/team-page/components/EntityPicker/EntitySearchResult.vue","../src/teams/team-page/components/EntityPicker/EntityPicker.vue","../node_modules/vue-material-design-icons/CheckOutline.vue","../node_modules/vue-material-design-icons/CloseOutline.vue","../node_modules/vue-material-design-icons/ExitToApp.vue","../node_modules/vue-material-design-icons/ShieldCheckOutline.vue","../src/teams/team-page/mixins/RouterMixin.js","../src/teams/team-page/components/MemberList/MemberGridItem.vue","../src/teams/team-page/mixins/IsMobileMixin.ts","../src/teams/team-page/components/MemberList/MemberList.vue","../src/teams/team-page/mixins/CircleActionsMixin.js","../src/teams/team-page/components/CircleDetails.vue","../src/teams/views/TeamSettingsView.vue","../src/teams/router.ts","../src/teams/team-page/mixins/LegacyGlobalMixin.js","../src/teams/team-page/store/circles.js","../src/teams/team-page/store/index.ts","../src/main.ts"],"sourcesContent":["/*!\n* vue-router v5.1.0\n* (c) 2026 Eduardo San Martin Morote\n* @license MIT\n*/\nimport { f as assign, g as isRouteComponent, h as isESModule, l as createRouterError, m as isArray, r as matchedRouteKey, y as isBrowser } from \"./useApi-s_02lHjl.js\";\nimport { getCurrentInstance, inject, onActivated, onDeactivated, onUnmounted, watch } from \"vue\";\nimport { setupDevtoolsPlugin } from \"@vue/devtools-api\";\n//#region src/warning.ts\nfunction warn$1(msg) {\n\tconst args = Array.from(arguments).slice(1);\n\tconsole.warn.apply(console, [\"[Vue Router warn]: \" + msg].concat(args));\n}\n//#endregion\n//#region src/encoding.ts\n/**\n* Encoding Rules (␣ = Space)\n* - Path: ␣ \" < > # ? { }\n* - Query: ␣ \" < > # & =\n* - Hash: ␣ \" < > `\n*\n* On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\n* defines some extra characters to be encoded. Most browsers do not encode them\n* in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\n* also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\n* plus `-._~`. This extra safety should be applied to query by patching the\n* string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\n* should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\n* into a `/` if directly typed in. The _backtick_ (`````) should also be\n* encoded everywhere because some browsers like FF encode it when directly\n* written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\n*/\nconst HASH_RE = /#/g;\nconst AMPERSAND_RE = /&/g;\nconst SLASH_RE = /\\//g;\nconst EQUAL_RE = /=/g;\nconst IM_RE = /\\?/g;\nconst PLUS_RE = /\\+/g;\n/**\n* NOTE: It's not clear to me if we should encode the + symbol in queries, it\n* seems to be less flexible than not doing so and I can't find out the legacy\n* systems requiring this for regular requests like text/html. In the standard,\n* the encoding of the plus character is only mentioned for\n* application/x-www-form-urlencoded\n* (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\n* leave the plus character as is in queries. To be more flexible, we allow the\n* plus character on the query, but it can also be manually encoded by the user.\n*\n* Resources:\n* - https://url.spec.whatwg.org/#urlencoded-parsing\n* - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\n*/\nconst ENC_BRACKET_OPEN_RE = /%5B/g;\nconst ENC_BRACKET_CLOSE_RE = /%5D/g;\nconst ENC_CARET_RE = /%5E/g;\nconst ENC_BACKTICK_RE = /%60/g;\nconst ENC_CURLY_OPEN_RE = /%7B/g;\nconst ENC_PIPE_RE = /%7C/g;\nconst ENC_CURLY_CLOSE_RE = /%7D/g;\nconst ENC_SPACE_RE = /%20/g;\n/**\n* Encode characters that need to be encoded on the path, search and hash\n* sections of the URL.\n*\n* @internal\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction commonEncode(text) {\n\treturn text == null ? \"\" : encodeURI(\"\" + text).replace(ENC_PIPE_RE, \"|\").replace(ENC_BRACKET_OPEN_RE, \"[\").replace(ENC_BRACKET_CLOSE_RE, \"]\");\n}\n/**\n* Encode characters that need to be encoded on the hash section of the URL.\n*\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction encodeHash(text) {\n\treturn commonEncode(text).replace(ENC_CURLY_OPEN_RE, \"{\").replace(ENC_CURLY_CLOSE_RE, \"}\").replace(ENC_CARET_RE, \"^\");\n}\n/**\n* Encode characters that need to be encoded query values on the query\n* section of the URL.\n*\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction encodeQueryValue(text) {\n\treturn commonEncode(text).replace(PLUS_RE, \"%2B\").replace(ENC_SPACE_RE, \"+\").replace(HASH_RE, \"%23\").replace(AMPERSAND_RE, \"%26\").replace(ENC_BACKTICK_RE, \"`\").replace(ENC_CURLY_OPEN_RE, \"{\").replace(ENC_CURLY_CLOSE_RE, \"}\").replace(ENC_CARET_RE, \"^\");\n}\n/**\n* Like `encodeQueryValue` but also encodes the `=` character.\n*\n* @param text - string to encode\n*/\nfunction encodeQueryKey(text) {\n\treturn encodeQueryValue(text).replace(EQUAL_RE, \"%3D\");\n}\n/**\n* Encode characters that need to be encoded on the path section of the URL.\n*\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction encodePath(text) {\n\treturn commonEncode(text).replace(HASH_RE, \"%23\").replace(IM_RE, \"%3F\");\n}\n/**\n* Encode characters that need to be encoded on the path section of the URL as a\n* param. This function encodes everything {@link encodePath} does plus the\n* slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\n* string instead.\n*\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction encodeParam(text) {\n\treturn encodePath(text).replace(SLASH_RE, \"%2F\");\n}\nfunction decode(text) {\n\tif (text == null) return null;\n\ttry {\n\t\treturn decodeURIComponent(\"\" + text);\n\t} catch {\n\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(`Error decoding \"${text}\". Using original value`);\n\t}\n\treturn \"\" + text;\n}\n//#endregion\n//#region src/location.ts\nconst TRAILING_SLASH_RE = /\\/$/;\nconst removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, \"\");\n/**\n* Transforms a URI into a normalized history location\n*\n* @param parseQuery\n* @param location - URI to normalize\n* @param currentLocation - current absolute location. Allows resolving relative\n* paths. Must start with `/`. Defaults to `/`\n* @returns a normalized history location\n*/\nfunction parseURL(parseQuery, location, currentLocation = \"/\") {\n\tlet path, query = {}, searchString = \"\", hash = \"\";\n\tconst hashPos = location.indexOf(\"#\");\n\tlet searchPos = location.indexOf(\"?\");\n\tsearchPos = hashPos >= 0 && searchPos > hashPos ? -1 : searchPos;\n\tif (searchPos >= 0) {\n\t\tpath = location.slice(0, searchPos);\n\t\tsearchString = location.slice(searchPos, hashPos > 0 ? hashPos : location.length);\n\t\tquery = parseQuery(searchString.slice(1));\n\t}\n\tif (hashPos >= 0) {\n\t\tpath = path || location.slice(0, hashPos);\n\t\thash = location.slice(hashPos, location.length);\n\t}\n\tpath = resolveRelativePath(path != null ? path : location, currentLocation);\n\treturn {\n\t\tfullPath: path + searchString + hash,\n\t\tpath,\n\t\tquery,\n\t\thash: decode(hash)\n\t};\n}\nfunction NEW_stringifyURL(stringifyQuery, path, query, hash = \"\") {\n\tconst searchText = stringifyQuery(query);\n\treturn path + (searchText && \"?\") + searchText + encodeHash(hash);\n}\n/**\n* Stringifies a URL object\n*\n* @param stringifyQuery\n* @param location\n*/\nfunction stringifyURL(stringifyQuery, location) {\n\tconst query = location.query ? stringifyQuery(location.query) : \"\";\n\treturn location.path + (query && \"?\") + query + (location.hash || \"\");\n}\n/**\n* Strips off the base from the beginning of a location.pathname in a non-case-sensitive way.\n*\n* @param pathname - location.pathname\n* @param base - base to strip off\n*/\nfunction stripBase(pathname, base) {\n\tif (!base || !pathname.toLowerCase().startsWith(base.toLowerCase())) return pathname;\n\treturn pathname.slice(base.length) || \"/\";\n}\n/**\n* Checks if two RouteLocation are equal. This means that both locations are\n* pointing towards the same {@link RouteRecord} and that all `params`, `query`\n* parameters and `hash` are the same\n*\n* @param stringifyQuery - A function that takes a query object of type LocationQueryRaw and returns a string representation of it.\n* @param a - first {@link RouteLocation}\n* @param b - second {@link RouteLocation}\n*/\nfunction isSameRouteLocation(stringifyQuery, a, b) {\n\tconst aLastIndex = a.matched.length - 1;\n\tconst bLastIndex = b.matched.length - 1;\n\treturn aLastIndex > -1 && aLastIndex === bLastIndex && isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) && isSameRouteLocationParams(a.params, b.params) && stringifyQuery(a.query) === stringifyQuery(b.query) && a.hash === b.hash;\n}\n/**\n* Check if two `RouteRecords` are equal. Takes into account aliases: they are\n* considered equal to the `RouteRecord` they are aliasing.\n*\n* @param a - first {@link RouteRecord}\n* @param b - second {@link RouteRecord}\n*/\nfunction isSameRouteRecord(a, b) {\n\treturn (a.aliasOf || a) === (b.aliasOf || b);\n}\nfunction isSameRouteLocationParams(a, b) {\n\tif (Object.keys(a).length !== Object.keys(b).length) return false;\n\tfor (var key in a) if (!isSameRouteLocationParamsValue(a[key], b[key])) return false;\n\treturn true;\n}\nfunction isSameRouteLocationParamsValue(a, b) {\n\treturn isArray(a) ? isEquivalentArray(a, b) : isArray(b) ? isEquivalentArray(b, a) : (a && a.valueOf()) === (b && b.valueOf());\n}\n/**\n* Check if two arrays are the same or if an array with one single entry is the\n* same as another primitive value. Used to check query and parameters\n*\n* @param a - array of values\n* @param b - array of values or a single value\n*/\nfunction isEquivalentArray(a, b) {\n\treturn isArray(b) ? a.length === b.length && a.every((value, i) => value === b[i]) : a.length === 1 && a[0] === b;\n}\n/**\n* Resolves a relative path that starts with `.`.\n*\n* @param to - path location we are resolving\n* @param from - currentLocation.path, should start with `/`\n*/\nfunction resolveRelativePath(to, from) {\n\tif (to.startsWith(\"/\")) return to;\n\tif (process.env.NODE_ENV !== \"production\" && !from.startsWith(\"/\")) {\n\t\twarn$1(`Cannot resolve a relative location without an absolute path. Trying to resolve \"${to}\" from \"${from}\". It should look like \"/${from}\".`);\n\t\treturn to;\n\t}\n\tif (!to) return from;\n\tconst fromSegments = from.split(\"/\");\n\tconst toSegments = to.split(\"/\");\n\tconst lastToSegment = toSegments[toSegments.length - 1];\n\tif (lastToSegment === \"..\" || lastToSegment === \".\") toSegments.push(\"\");\n\tlet position = fromSegments.length - 1;\n\tlet toPosition;\n\tlet segment;\n\tfor (toPosition = 0; toPosition < toSegments.length; toPosition++) {\n\t\tsegment = toSegments[toPosition];\n\t\tif (segment === \".\") continue;\n\t\tif (segment === \"..\") {\n\t\t\tif (position > 1) position--;\n\t\t} else break;\n\t}\n\treturn fromSegments.slice(0, position).join(\"/\") + \"/\" + toSegments.slice(toPosition).join(\"/\");\n}\n/**\n* Initial route location where the router is. Can be used in navigation guards\n* to differentiate the initial navigation.\n*\n* @example\n* ```js\n* import { START_LOCATION } from 'vue-router'\n*\n* router.beforeEach((to, from) => {\n* if (from === START_LOCATION) {\n* // initial navigation\n* }\n* })\n* ```\n*/\nconst START_LOCATION_NORMALIZED = {\n\tpath: \"/\",\n\tname: void 0,\n\tparams: {},\n\tquery: {},\n\thash: \"\",\n\tfullPath: \"/\",\n\tmatched: [],\n\tmeta: {},\n\tredirectedFrom: void 0\n};\n//#endregion\n//#region src/history/common.ts\n/**\n* Normalizes a base by removing any trailing slash and reading the base tag if\n* present.\n*\n* @param base - base to normalize\n*/\nfunction normalizeBase(base) {\n\tif (!base) if (isBrowser) {\n\t\tconst baseEl = document.querySelector(\"base\");\n\t\tbase = baseEl && baseEl.getAttribute(\"href\") || \"/\";\n\t\tbase = base.replace(/^\\w+:\\/\\/[^/]+/, \"\");\n\t} else base = \"/\";\n\tif (base[0] !== \"/\" && base[0] !== \"#\") base = \"/\" + base;\n\treturn removeTrailingSlash(base);\n}\nconst BEFORE_HASH_RE = /^[^#]+#/;\nfunction createHref(base, location) {\n\treturn base.replace(BEFORE_HASH_RE, \"#\") + location;\n}\n//#endregion\n//#region src/scrollBehavior.ts\nfunction getElementPosition(el, offset) {\n\tconst docRect = document.documentElement.getBoundingClientRect();\n\tconst elRect = el.getBoundingClientRect();\n\treturn {\n\t\tbehavior: offset.behavior,\n\t\tleft: elRect.left - docRect.left - (offset.left || 0),\n\t\ttop: elRect.top - docRect.top - (offset.top || 0)\n\t};\n}\nconst computeScrollPosition = () => ({\n\tleft: window.scrollX,\n\ttop: window.scrollY\n});\nfunction scrollToPosition(position) {\n\tlet scrollToOptions;\n\tif (\"el\" in position) {\n\t\tconst positionEl = position.el;\n\t\tconst isIdSelector = typeof positionEl === \"string\" && positionEl.startsWith(\"#\");\n\t\t/**\n\t\t* `id`s can accept pretty much any characters, including CSS combinators\n\t\t* like `>` or `~`. It's still possible to retrieve elements using\n\t\t* `document.getElementById('~')` but it needs to be escaped when using\n\t\t* `document.querySelector('#\\\\~')` for it to be valid. The only\n\t\t* requirements for `id`s are them to be unique on the page and to not be\n\t\t* empty (`id=\"\"`). Because of that, when passing an id selector, it should\n\t\t* be properly escaped for it to work with `querySelector`. We could check\n\t\t* for the id selector to be simple (no CSS combinators `+ >~`) but that\n\t\t* would make things inconsistent since they are valid characters for an\n\t\t* `id` but would need to be escaped when using `querySelector`, breaking\n\t\t* their usage and ending up in no selector returned. Selectors need to be\n\t\t* escaped:\n\t\t*\n\t\t* - `#1-thing` becomes `#\\31 -thing`\n\t\t* - `#with~symbols` becomes `#with\\\\~symbols`\n\t\t*\n\t\t* - More information about the topic can be found at\n\t\t* https://mathiasbynens.be/notes/html5-id-class.\n\t\t* - Practical example: https://mathiasbynens.be/demo/html5-id\n\t\t*/\n\t\tif (process.env.NODE_ENV !== \"production\" && typeof position.el === \"string\") {\n\t\t\tif (!isIdSelector || !document.getElementById(position.el.slice(1))) try {\n\t\t\t\tconst foundEl = document.querySelector(position.el);\n\t\t\t\tif (isIdSelector && foundEl) {\n\t\t\t\t\twarn$1(`The selector \"${position.el}\" should be passed as \"el: document.querySelector('${position.el}')\" because it starts with \"#\".`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\twarn$1(`The selector \"${position.el}\" is invalid. If you are using an id selector, make sure to escape it. You can find more information about escaping characters in selectors at https://mathiasbynens.be/notes/css-escapes or use CSS.escape (https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape).`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tconst el = typeof positionEl === \"string\" ? isIdSelector ? document.getElementById(positionEl.slice(1)) : document.querySelector(positionEl) : positionEl;\n\t\tif (!el) {\n\t\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(`Couldn't find element using selector \"${position.el}\" returned by scrollBehavior.`);\n\t\t\treturn;\n\t\t}\n\t\tscrollToOptions = getElementPosition(el, position);\n\t} else scrollToOptions = position;\n\tif (\"scrollBehavior\" in document.documentElement.style) window.scrollTo(scrollToOptions);\n\telse window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.scrollX, scrollToOptions.top != null ? scrollToOptions.top : window.scrollY);\n}\nfunction getScrollKey(path, delta) {\n\treturn (history.state ? history.state.position - delta : -1) + path;\n}\nconst scrollPositions = /* @__PURE__ */ new Map();\nfunction saveScrollPosition(key, scrollPosition) {\n\tscrollPositions.set(key, scrollPosition);\n}\nfunction getSavedScrollPosition(key) {\n\tconst scroll = scrollPositions.get(key);\n\tscrollPositions.delete(key);\n\treturn scroll;\n}\n/**\n* ScrollBehavior instance used by the router to compute and restore the scroll\n* position when navigating.\n*/\n//#endregion\n//#region src/types/typeGuards.ts\nfunction isRouteLocation(route) {\n\treturn typeof route === \"string\" || route && typeof route === \"object\";\n}\nfunction isRouteName(name) {\n\treturn typeof name === \"string\" || typeof name === \"symbol\";\n}\n//#endregion\n//#region src/query.ts\n/**\n* Transforms a queryString into a {@link LocationQuery} object. Accept both, a\n* version with the leading `?` and without Should work as URLSearchParams\n\n* @internal\n*\n* @param search - search string to parse\n* @returns a query object\n*/\nfunction parseQuery(search) {\n\tconst query = {};\n\tif (search === \"\" || search === \"?\") return query;\n\tconst searchParams = (search[0] === \"?\" ? search.slice(1) : search).split(\"&\");\n\tfor (let i = 0; i < searchParams.length; ++i) {\n\t\tconst searchParam = searchParams[i].replace(PLUS_RE, \" \");\n\t\tconst eqPos = searchParam.indexOf(\"=\");\n\t\tconst key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\n\t\tconst value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\n\t\tif (key in query) {\n\t\t\tlet currentValue = query[key];\n\t\t\tif (!isArray(currentValue)) currentValue = query[key] = [currentValue];\n\t\t\tcurrentValue.push(value);\n\t\t} else query[key] = value;\n\t}\n\treturn query;\n}\n/**\n* Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\n* doesn't prepend a `?`\n*\n* @internal\n*\n* @param query - query object to stringify\n* @returns string version of the query without the leading `?`\n*/\nfunction stringifyQuery(query) {\n\tlet search = \"\";\n\tfor (let key in query) {\n\t\tconst value = query[key];\n\t\tkey = encodeQueryKey(key);\n\t\tif (value == null) {\n\t\t\tif (value !== void 0) search += (search.length ? \"&\" : \"\") + key;\n\t\t\tcontinue;\n\t\t}\n\t\t(isArray(value) ? value.map((v) => v && encodeQueryValue(v)) : [value && encodeQueryValue(value)]).forEach((value) => {\n\t\t\tif (value !== void 0) {\n\t\t\t\tsearch += (search.length ? \"&\" : \"\") + key;\n\t\t\t\tif (value != null) search += \"=\" + value;\n\t\t\t}\n\t\t});\n\t}\n\treturn search;\n}\n/**\n* Transforms a {@link LocationQueryRaw} into a {@link LocationQuery} by casting\n* numbers into strings, removing keys with an undefined value and replacing\n* undefined with null in arrays\n*\n* @param query - query object to normalize\n* @returns a normalized query object\n*/\nfunction normalizeQuery(query) {\n\tconst normalizedQuery = {};\n\tfor (const key in query) {\n\t\tconst value = query[key];\n\t\tif (value !== void 0) normalizedQuery[key] = isArray(value) ? value.map((v) => v == null ? null : \"\" + v) : value == null ? value : \"\" + value;\n\t}\n\treturn normalizedQuery;\n}\n//#endregion\n//#region src/utils/callbacks.ts\n/**\n* Create a list of callbacks that can be reset. Used to create before and after navigation guards list\n*/\nfunction useCallbacks() {\n\tlet handlers = [];\n\tfunction add(handler) {\n\t\thandlers.push(handler);\n\t\treturn () => {\n\t\t\tconst i = handlers.indexOf(handler);\n\t\t\tif (i > -1) handlers.splice(i, 1);\n\t\t};\n\t}\n\tfunction reset() {\n\t\thandlers = [];\n\t}\n\treturn {\n\t\tadd,\n\t\tlist: () => handlers.slice(),\n\t\treset\n\t};\n}\n//#endregion\n//#region src/navigationGuards.ts\nfunction registerGuard(activeRecordRef, name, guard) {\n\tconst record = activeRecordRef.value;\n\tif (!record) {\n\t\tif (process.env.NODE_ENV !== \"production\") warn$1(`No active route record was found when calling \\`${name === \"updateGuards\" ? \"onBeforeRouteUpdate\" : \"onBeforeRouteLeave\"}()\\`. Make sure you call this function inside a component child of . Maybe you called it inside of App.vue?`);\n\t\treturn;\n\t}\n\tlet currentRecord = record;\n\tconst removeFromList = () => {\n\t\tcurrentRecord[name].delete(guard);\n\t};\n\tonUnmounted(removeFromList);\n\tonDeactivated(removeFromList);\n\tonActivated(() => {\n\t\tconst newRecord = activeRecordRef.value;\n\t\tif (process.env.NODE_ENV !== \"production\" && !newRecord) warn$1(\"No active route record was found when reactivating component with navigation guard. This is likely a bug in vue-router. Please report it.\");\n\t\tif (newRecord) currentRecord = newRecord;\n\t\tcurrentRecord[name].add(guard);\n\t});\n\tcurrentRecord[name].add(guard);\n}\n/**\n* Add a navigation guard that triggers whenever the component for the current\n* location is about to be left. Similar to {@link beforeRouteLeave} but can be\n* used in any component. The guard is removed when the component is unmounted.\n*\n* @param leaveGuard - {@link NavigationGuard}\n*/\nfunction onBeforeRouteLeave(leaveGuard) {\n\tif (process.env.NODE_ENV !== \"production\" && !getCurrentInstance()) {\n\t\twarn$1(\"getCurrentInstance() returned null. onBeforeRouteLeave() must be called at the top of a setup function\");\n\t\treturn;\n\t}\n\tregisterGuard(inject(matchedRouteKey, {}), \"leaveGuards\", leaveGuard);\n}\n/**\n* Add a navigation guard that triggers whenever the current location is about\n* to be updated. Similar to {@link beforeRouteUpdate} but can be used in any\n* component. The guard is removed when the component is unmounted.\n*\n* @param updateGuard - {@link NavigationGuard}\n*/\nfunction onBeforeRouteUpdate(updateGuard) {\n\tif (process.env.NODE_ENV !== \"production\" && !getCurrentInstance()) {\n\t\twarn$1(\"getCurrentInstance() returned null. onBeforeRouteUpdate() must be called at the top of a setup function\");\n\t\treturn;\n\t}\n\tregisterGuard(inject(matchedRouteKey, {}), \"updateGuards\", updateGuard);\n}\nfunction guardToPromiseFn(guard, to, from, record, name, runWithContext = (fn) => fn()) {\n\tconst enterCallbackArray = record && (record.enterCallbacks[name] = record.enterCallbacks[name] || []);\n\treturn () => new Promise((resolve, reject) => {\n\t\tconst next = (valid) => {\n\t\t\tif (valid === false) reject(createRouterError(4, {\n\t\t\t\tfrom,\n\t\t\t\tto\n\t\t\t}));\n\t\t\telse if (valid instanceof Error) reject(valid);\n\t\t\telse if (isRouteLocation(valid)) reject(createRouterError(2, {\n\t\t\t\tfrom: to,\n\t\t\t\tto: valid\n\t\t\t}));\n\t\t\telse {\n\t\t\t\tif (enterCallbackArray && record.enterCallbacks[name] === enterCallbackArray && typeof valid === \"function\") enterCallbackArray.push(valid);\n\t\t\t\tresolve();\n\t\t\t}\n\t\t};\n\t\tconst guardReturn = runWithContext(() => guard.call(record && record.instances[name], to, from, process.env.NODE_ENV !== \"production\" ? withDeprecationWarning(canOnlyBeCalledOnce(next, to, from)) : next));\n\t\tlet guardCall = Promise.resolve(guardReturn);\n\t\tif (guard.length < 3) guardCall = guardCall.then(next);\n\t\tif (process.env.NODE_ENV !== \"production\" && guard.length > 2) {\n\t\t\tconst message = `The \"next\" callback was never called inside of ${guard.name ? \"\\\"\" + guard.name + \"\\\"\" : \"\"}:\\n${guard.toString()}\\n. If you are returning a value instead of calling \"next\", make sure to remove the \"next\" parameter from your function.`;\n\t\t\tif (typeof guardReturn === \"object\" && \"then\" in guardReturn) guardCall = guardCall.then((resolvedValue) => {\n\t\t\t\tif (!next._called) {\n\t\t\t\t\twarn$1(message);\n\t\t\t\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Invalid navigation guard\"));\n\t\t\t\t}\n\t\t\t\treturn resolvedValue;\n\t\t\t});\n\t\t\telse if (guardReturn !== void 0) {\n\t\t\t\tif (!next._called) {\n\t\t\t\t\twarn$1(message);\n\t\t\t\t\treject(/* @__PURE__ */ new Error(\"Invalid navigation guard\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tguardCall.catch((err) => reject(err));\n\t});\n}\n/**\n* Wraps the next callback to warn when it is used. Dev-only: when __DEV__ is\n* false (production builds), this branch is dead code and is stripped from the\n* bundle.\n*\n* @internal\n*/\nfunction withDeprecationWarning(next) {\n\tlet warned = false;\n\treturn function() {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\twarn$1(\"The `next()` callback in navigation guards is deprecated. Return the value instead of calling `next(value)`.\");\n\t\t}\n\t\treturn next.apply(this, arguments);\n\t};\n}\nfunction canOnlyBeCalledOnce(next, to, from) {\n\tlet called = 0;\n\treturn function() {\n\t\tif (called++ === 1) warn$1(`The \"next\" callback was called more than once in one navigation guard when going from \"${from.fullPath}\" to \"${to.fullPath}\". It should be called exactly one time in each navigation guard. This will fail in production.`);\n\t\tnext._called = true;\n\t\tif (called === 1) next.apply(null, arguments);\n\t};\n}\nfunction extractComponentsGuards(matched, guardType, to, from, runWithContext = (fn) => fn()) {\n\tconst guards = [];\n\tfor (const record of matched) {\n\t\tif (process.env.NODE_ENV !== \"production\" && !record.components && record.children && !record.children.length) warn$1(`Record with path \"${record.path}\" is either missing a \"component(s)\" or \"children\" property.`);\n\t\tfor (const name in record.components) {\n\t\t\tlet rawComponent = record.components[name];\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\t\tif (!rawComponent || typeof rawComponent !== \"object\" && typeof rawComponent !== \"function\") {\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is not a valid component. Received \"${String(rawComponent)}\".`);\n\t\t\t\t\tthrow new Error(\"Invalid route component\");\n\t\t\t\t} else if (\"then\" in rawComponent) {\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is a Promise instead of a function that returns a Promise. Did you write \"import('./MyPage.vue')\" instead of \"() => import('./MyPage.vue')\" ? This will break in production if not fixed.`);\n\t\t\t\t\tconst promise = rawComponent;\n\t\t\t\t\trawComponent = () => promise;\n\t\t\t\t} else if (rawComponent.__asyncLoader && !rawComponent.__warnedDefineAsync) {\n\t\t\t\t\trawComponent.__warnedDefineAsync = true;\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is defined using \"defineAsyncComponent()\". Write \"() => import('./MyPage.vue')\" instead of \"defineAsyncComponent(() => import('./MyPage.vue'))\".`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (guardType !== \"beforeRouteEnter\" && !record.instances[name]) continue;\n\t\t\tif (isRouteComponent(rawComponent)) {\n\t\t\t\tconst guard = (rawComponent.__vccOpts || rawComponent)[guardType];\n\t\t\t\tguard && guards.push(guardToPromiseFn(guard, to, from, record, name, runWithContext));\n\t\t\t} else {\n\t\t\t\tlet componentPromise = rawComponent();\n\t\t\t\tif (process.env.NODE_ENV !== \"production\" && !(\"catch\" in componentPromise)) {\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is a function that does not return a Promise. If you were passing a functional component, make sure to add a \"displayName\" to the component. This will break in production if not fixed.`);\n\t\t\t\t\tcomponentPromise = Promise.resolve(componentPromise);\n\t\t\t\t}\n\t\t\t\tguards.push(() => componentPromise.then((resolved) => {\n\t\t\t\t\tif (!resolved) throw new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\"`);\n\t\t\t\t\tconst resolvedComponent = isESModule(resolved) ? resolved.default : resolved;\n\t\t\t\t\trecord.mods[name] = resolved;\n\t\t\t\t\trecord.components[name] = resolvedComponent;\n\t\t\t\t\tconst guard = (resolvedComponent.__vccOpts || resolvedComponent)[guardType];\n\t\t\t\t\treturn guard && guardToPromiseFn(guard, to, from, record, name, runWithContext)();\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\t}\n\treturn guards;\n}\n/**\n* Ensures a route is loaded, so it can be passed as o prop to ``.\n*\n* @param route - resolved route to load\n*/\nfunction loadRouteLocation(route) {\n\treturn route.matched.every((record) => record.redirect) ? Promise.reject(/* @__PURE__ */ new Error(\"Cannot load a route that redirects.\")) : Promise.all(route.matched.map((record) => record.components && Promise.all(Object.keys(record.components).reduce((promises, name) => {\n\t\tconst rawComponent = record.components[name];\n\t\tif (typeof rawComponent === \"function\" && !(\"displayName\" in rawComponent)) promises.push(rawComponent().then((resolved) => {\n\t\t\tif (!resolved) return Promise.reject(/* @__PURE__ */ new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\". Ensure you passed a function that returns a promise.`));\n\t\t\tconst resolvedComponent = isESModule(resolved) ? resolved.default : resolved;\n\t\t\trecord.mods[name] = resolved;\n\t\t\trecord.components[name] = resolvedComponent;\n\t\t}));\n\t\treturn promises;\n\t}, [])))).then(() => route);\n}\n/**\n* Split the leaving, updating, and entering records.\n* @internal\n*\n* @param to - Location we are navigating to\n* @param from - Location we are navigating from\n*/\nfunction extractChangingRecords(to, from) {\n\tconst leavingRecords = [];\n\tconst updatingRecords = [];\n\tconst enteringRecords = [];\n\tconst len = Math.max(from.matched.length, to.matched.length);\n\tfor (let i = 0; i < len; i++) {\n\t\tconst recordFrom = from.matched[i];\n\t\tif (recordFrom) if (to.matched.find((record) => isSameRouteRecord(record, recordFrom))) updatingRecords.push(recordFrom);\n\t\telse leavingRecords.push(recordFrom);\n\t\tconst recordTo = to.matched[i];\n\t\tif (recordTo) {\n\t\t\tif (!from.matched.find((record) => isSameRouteRecord(record, recordTo))) enteringRecords.push(recordTo);\n\t\t}\n\t}\n\treturn [\n\t\tleavingRecords,\n\t\tupdatingRecords,\n\t\tenteringRecords\n\t];\n}\n//#endregion\n//#region src/devtools.ts\n/**\n* Copies a route location and removes any problematic properties that cannot be shown in devtools (e.g. Vue instances).\n*\n* @param routeLocation - routeLocation to format\n* @param tooltip - optional tooltip\n* @returns a copy of the routeLocation\n*/\nfunction formatRouteLocation(routeLocation, tooltip) {\n\tconst copy = assign({}, routeLocation, { matched: routeLocation.matched.map((matched) => omit(matched, [\n\t\t\"instances\",\n\t\t\"children\",\n\t\t\"aliasOf\"\n\t])) });\n\treturn { _custom: {\n\t\ttype: null,\n\t\treadOnly: true,\n\t\tdisplay: routeLocation.fullPath,\n\t\ttooltip,\n\t\tvalue: copy\n\t} };\n}\nfunction formatDisplay(display) {\n\treturn { _custom: { display } };\n}\nlet routerId = 0;\nfunction addDevtools(app, router, matcher) {\n\tif (router.__hasDevtools) return;\n\trouter.__hasDevtools = true;\n\tconst id = routerId++;\n\tsetupDevtoolsPlugin({\n\t\tid: \"org.vuejs.router\" + (id ? \".\" + id : \"\"),\n\t\tlabel: \"Vue Router\",\n\t\tpackageName: \"vue-router\",\n\t\thomepage: \"https://router.vuejs.org\",\n\t\tlogo: \"https://router.vuejs.org/logo.png\",\n\t\tcomponentStateTypes: [\"Routing\"],\n\t\tapp\n\t}, (api) => {\n\t\tapi.on.inspectComponent((payload) => {\n\t\t\tif (payload.instanceData) payload.instanceData.state.push({\n\t\t\t\ttype: \"Routing\",\n\t\t\t\tkey: \"$route\",\n\t\t\t\teditable: false,\n\t\t\t\tvalue: formatRouteLocation(router.currentRoute.value, \"Current Route\")\n\t\t\t});\n\t\t});\n\t\tapi.on.visitComponentTree(({ treeNode: node, componentInstance }) => {\n\t\t\tif (componentInstance.__vrv_devtools) {\n\t\t\t\tconst info = componentInstance.__vrv_devtools;\n\t\t\t\tnode.tags.push({\n\t\t\t\t\tlabel: (info.name ? `${info.name.toString()}: ` : \"\") + info.path,\n\t\t\t\t\ttextColor: 0,\n\t\t\t\t\ttooltip: \"This component is rendered by <router-view>\",\n\t\t\t\t\tbackgroundColor: PINK_500\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (isArray(componentInstance.__vrl_devtools)) {\n\t\t\t\tcomponentInstance.__devtoolsApi = api;\n\t\t\t\tcomponentInstance.__vrl_devtools.forEach((devtoolsData) => {\n\t\t\t\t\tlet label = devtoolsData.route.path;\n\t\t\t\t\tlet backgroundColor = ORANGE_400;\n\t\t\t\t\tlet tooltip = \"\";\n\t\t\t\t\tlet textColor = 0;\n\t\t\t\t\tif (devtoolsData.error) {\n\t\t\t\t\t\tlabel = devtoolsData.error;\n\t\t\t\t\t\tbackgroundColor = RED_100;\n\t\t\t\t\t\ttextColor = RED_700;\n\t\t\t\t\t} else if (devtoolsData.isExactActive) {\n\t\t\t\t\t\tbackgroundColor = LIME_500;\n\t\t\t\t\t\ttooltip = \"This is exactly active\";\n\t\t\t\t\t} else if (devtoolsData.isActive) {\n\t\t\t\t\t\tbackgroundColor = BLUE_600;\n\t\t\t\t\t\ttooltip = \"This link is active\";\n\t\t\t\t\t}\n\t\t\t\t\tnode.tags.push({\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\ttextColor,\n\t\t\t\t\t\ttooltip,\n\t\t\t\t\t\tbackgroundColor\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\twatch(router.currentRoute, () => {\n\t\t\trefreshRoutesView();\n\t\t\tapi.notifyComponentUpdate();\n\t\t\tapi.sendInspectorTree(routerInspectorId);\n\t\t\tapi.sendInspectorState(routerInspectorId);\n\t\t});\n\t\tconst navigationsLayerId = \"router:navigations:\" + id;\n\t\tapi.addTimelineLayer({\n\t\t\tid: navigationsLayerId,\n\t\t\tlabel: `Router${id ? \" \" + id : \"\"} Navigations`,\n\t\t\tcolor: 4237508\n\t\t});\n\t\trouter.onError((error, to) => {\n\t\t\tapi.addTimelineEvent({\n\t\t\t\tlayerId: navigationsLayerId,\n\t\t\t\tevent: {\n\t\t\t\t\ttitle: \"Error during Navigation\",\n\t\t\t\t\tsubtitle: to.fullPath,\n\t\t\t\t\tlogType: \"error\",\n\t\t\t\t\ttime: api.now(),\n\t\t\t\t\tdata: { error },\n\t\t\t\t\tgroupId: to.meta.__navigationId\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tlet navigationId = 0;\n\t\trouter.beforeEach((to, from) => {\n\t\t\tconst data = {\n\t\t\t\tguard: formatDisplay(\"beforeEach\"),\n\t\t\t\tfrom: formatRouteLocation(from, \"Current Location during this navigation\"),\n\t\t\t\tto: formatRouteLocation(to, \"Target location\")\n\t\t\t};\n\t\t\tObject.defineProperty(to.meta, \"__navigationId\", { value: navigationId++ });\n\t\t\tapi.addTimelineEvent({\n\t\t\t\tlayerId: navigationsLayerId,\n\t\t\t\tevent: {\n\t\t\t\t\ttime: api.now(),\n\t\t\t\t\ttitle: \"Start of navigation\",\n\t\t\t\t\tsubtitle: to.fullPath,\n\t\t\t\t\tdata,\n\t\t\t\t\tgroupId: to.meta.__navigationId\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\trouter.afterEach((to, from, failure) => {\n\t\t\tconst data = { guard: formatDisplay(\"afterEach\") };\n\t\t\tif (failure) {\n\t\t\t\tdata.failure = { _custom: {\n\t\t\t\t\ttype: Error,\n\t\t\t\t\treadOnly: true,\n\t\t\t\t\tdisplay: failure ? failure.message : \"\",\n\t\t\t\t\ttooltip: \"Navigation Failure\",\n\t\t\t\t\tvalue: failure\n\t\t\t\t} };\n\t\t\t\tdata.status = formatDisplay(\"❌\");\n\t\t\t} else data.status = formatDisplay(\"✅\");\n\t\t\tdata.from = formatRouteLocation(from, \"Current Location during this navigation\");\n\t\t\tdata.to = formatRouteLocation(to, \"Target location\");\n\t\t\tapi.addTimelineEvent({\n\t\t\t\tlayerId: navigationsLayerId,\n\t\t\t\tevent: {\n\t\t\t\t\ttitle: \"End of navigation\",\n\t\t\t\t\tsubtitle: to.fullPath,\n\t\t\t\t\ttime: api.now(),\n\t\t\t\t\tdata,\n\t\t\t\t\tlogType: failure ? \"warning\" : \"default\",\n\t\t\t\t\tgroupId: to.meta.__navigationId\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t/**\n\t\t* Inspector of Existing routes\n\t\t*/\n\t\tconst routerInspectorId = \"router-inspector:\" + id;\n\t\tapi.addInspector({\n\t\t\tid: routerInspectorId,\n\t\t\tlabel: \"Routes\" + (id ? \" \" + id : \"\"),\n\t\t\ticon: \"book\",\n\t\t\ttreeFilterPlaceholder: \"Search routes\"\n\t\t});\n\t\tfunction refreshRoutesView() {\n\t\t\tif (!activeRoutesPayload) return;\n\t\t\tconst payload = activeRoutesPayload;\n\t\t\tlet routes = matcher.getRoutes().filter((route) => !route.parent || !route.parent.record.components);\n\t\t\troutes.forEach(resetMatchStateOnRouteRecord);\n\t\t\tif (payload.filter) routes = routes.filter((route) => isRouteMatching(route, payload.filter.toLowerCase()));\n\t\t\troutes.forEach((route) => markRouteRecordActive(route, router.currentRoute.value));\n\t\t\tpayload.rootNodes = routes.map(formatRouteRecordForInspector);\n\t\t}\n\t\tlet activeRoutesPayload;\n\t\tapi.on.getInspectorTree((payload) => {\n\t\t\tactiveRoutesPayload = payload;\n\t\t\tif (payload.app === app && payload.inspectorId === routerInspectorId) refreshRoutesView();\n\t\t});\n\t\t/**\n\t\t* Display information about the currently selected route record\n\t\t*/\n\t\tapi.on.getInspectorState((payload) => {\n\t\t\tif (payload.app === app && payload.inspectorId === routerInspectorId) {\n\t\t\t\tconst route = matcher.getRoutes().find((route) => route.record.__vd_id === payload.nodeId);\n\t\t\t\tif (route) payload.state = { options: formatRouteRecordMatcherForStateInspector(route) };\n\t\t\t}\n\t\t});\n\t\tapi.sendInspectorTree(routerInspectorId);\n\t\tapi.sendInspectorState(routerInspectorId);\n\t});\n}\nfunction modifierForKey(key) {\n\tif (key.optional) return key.repeatable ? \"*\" : \"?\";\n\telse return key.repeatable ? \"+\" : \"\";\n}\nfunction formatRouteRecordMatcherForStateInspector(route) {\n\tconst { record } = route;\n\tconst fields = [{\n\t\teditable: false,\n\t\tkey: \"path\",\n\t\tvalue: record.path\n\t}];\n\tif (record.name != null) fields.push({\n\t\teditable: false,\n\t\tkey: \"name\",\n\t\tvalue: record.name\n\t});\n\tfields.push({\n\t\teditable: false,\n\t\tkey: \"regexp\",\n\t\tvalue: route.re\n\t});\n\tif (route.keys.length) fields.push({\n\t\teditable: false,\n\t\tkey: \"keys\",\n\t\tvalue: { _custom: {\n\t\t\ttype: null,\n\t\t\treadOnly: true,\n\t\t\tdisplay: route.keys.map((key) => `${key.name}${modifierForKey(key)}`).join(\" \"),\n\t\t\ttooltip: \"Param keys\",\n\t\t\tvalue: route.keys\n\t\t} }\n\t});\n\tif (record.redirect != null) fields.push({\n\t\teditable: false,\n\t\tkey: \"redirect\",\n\t\tvalue: record.redirect\n\t});\n\tif (route.alias.length) fields.push({\n\t\teditable: false,\n\t\tkey: \"aliases\",\n\t\tvalue: route.alias.map((alias) => alias.record.path)\n\t});\n\tif (Object.keys(route.record.meta).length) fields.push({\n\t\teditable: false,\n\t\tkey: \"meta\",\n\t\tvalue: route.record.meta\n\t});\n\tfields.push({\n\t\tkey: \"score\",\n\t\teditable: false,\n\t\tvalue: { _custom: {\n\t\t\ttype: null,\n\t\t\treadOnly: true,\n\t\t\tdisplay: route.score.map((score) => score.join(\", \")).join(\" | \"),\n\t\t\ttooltip: \"Score used to sort routes\",\n\t\t\tvalue: route.score\n\t\t} }\n\t});\n\treturn fields;\n}\n/**\n* Extracted from tailwind palette\n*/\nconst PINK_500 = 15485081;\nconst BLUE_600 = 2450411;\nconst LIME_500 = 8702998;\nconst CYAN_400 = 2282478;\nconst ORANGE_400 = 16486972;\nconst DARK = 6710886;\nconst RED_100 = 16704226;\nconst RED_700 = 12131356;\nfunction formatRouteRecordForInspector(route) {\n\tconst tags = [];\n\tconst { record } = route;\n\tif (record.name != null) tags.push({\n\t\tlabel: String(record.name),\n\t\ttextColor: 0,\n\t\tbackgroundColor: CYAN_400\n\t});\n\tif (record.aliasOf) tags.push({\n\t\tlabel: \"alias\",\n\t\ttextColor: 0,\n\t\tbackgroundColor: ORANGE_400\n\t});\n\tif (route.__vd_match) tags.push({\n\t\tlabel: \"matches\",\n\t\ttextColor: 0,\n\t\tbackgroundColor: PINK_500\n\t});\n\tif (route.__vd_exactActive) tags.push({\n\t\tlabel: \"exact\",\n\t\ttextColor: 0,\n\t\tbackgroundColor: LIME_500\n\t});\n\tif (route.__vd_active) tags.push({\n\t\tlabel: \"active\",\n\t\ttextColor: 0,\n\t\tbackgroundColor: BLUE_600\n\t});\n\tif (record.redirect) tags.push({\n\t\tlabel: typeof record.redirect === \"string\" ? `redirect: ${record.redirect}` : \"redirects\",\n\t\ttextColor: 16777215,\n\t\tbackgroundColor: DARK\n\t});\n\tlet id = record.__vd_id;\n\tif (id == null) {\n\t\tid = String(routeRecordId++);\n\t\trecord.__vd_id = id;\n\t}\n\treturn {\n\t\tid,\n\t\tlabel: record.path,\n\t\ttags,\n\t\tchildren: route.children.map(formatRouteRecordForInspector)\n\t};\n}\nlet routeRecordId = 0;\nconst EXTRACT_REGEXP_RE = /^\\/(.*)\\/([a-z]*)$/;\nfunction markRouteRecordActive(route, currentRoute) {\n\tconst isExactActive = currentRoute.matched.length && isSameRouteRecord(currentRoute.matched[currentRoute.matched.length - 1], route.record);\n\troute.__vd_exactActive = route.__vd_active = isExactActive;\n\tif (!isExactActive) route.__vd_active = currentRoute.matched.some((match) => isSameRouteRecord(match, route.record));\n\troute.children.forEach((childRoute) => markRouteRecordActive(childRoute, currentRoute));\n}\nfunction resetMatchStateOnRouteRecord(route) {\n\troute.__vd_match = false;\n\troute.children.forEach(resetMatchStateOnRouteRecord);\n}\nfunction isRouteMatching(route, filter) {\n\tconst found = String(route.re).match(EXTRACT_REGEXP_RE);\n\troute.__vd_match = false;\n\tif (!found || found.length < 3) return false;\n\tif (new RegExp(found[1].replace(/\\$$/, \"\"), found[2]).test(filter)) {\n\t\troute.children.forEach((child) => isRouteMatching(child, filter));\n\t\tif (route.record.path !== \"/\" || filter === \"/\") {\n\t\t\troute.__vd_match = route.re.test(filter);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tconst path = route.record.path.toLowerCase();\n\tconst decodedPath = decode(path);\n\tif (!filter.startsWith(\"/\") && (decodedPath.includes(filter) || path.includes(filter))) return true;\n\tif (decodedPath.startsWith(filter) || path.startsWith(filter)) return true;\n\tif (route.record.name && String(route.record.name).includes(filter)) return true;\n\treturn route.children.some((child) => isRouteMatching(child, filter));\n}\nfunction omit(obj, keys) {\n\tconst ret = {};\n\tfor (const key in obj) if (!keys.includes(key)) ret[key] = obj[key];\n\treturn ret;\n}\n//#endregion\nexport { PLUS_RE as A, isSameRouteLocation as C, resolveRelativePath as D, parseURL as E, warn$1 as F, encodeHash as M, encodeParam as N, stringifyURL as O, encodePath as P, START_LOCATION_NORMALIZED as S, isSameRouteRecord as T, saveScrollPosition as _, loadRouteLocation as a, normalizeBase as b, useCallbacks as c, stringifyQuery as d, isRouteLocation as f, getScrollKey as g, getSavedScrollPosition as h, guardToPromiseFn as i, decode as j, stripBase as k, normalizeQuery as l, computeScrollPosition as m, extractChangingRecords as n, onBeforeRouteLeave as o, isRouteName as p, extractComponentsGuards as r, onBeforeRouteUpdate as s, addDevtools as t, parseQuery as u, scrollToPosition as v, isSameRouteLocationParams as w, NEW_stringifyURL as x, createHref as y };\n","/*!\n* vue-router v5.1.0\n* (c) 2026 Eduardo San Martin Morote\n* @license MIT\n*/\nimport { _ as mergeOptions, a as routerKey, c as NavigationFailureType, d as applyToParams, f as assign, i as routeLocationKey, l as createRouterError, m as isArray, n as useRouter, o as routerViewLocationKey, r as matchedRouteKey, s as viewDepthKey, t as useRoute, u as isNavigationFailure, v as noop, y as isBrowser } from \"./useApi-s_02lHjl.js\";\nimport { C as isSameRouteLocation, E as parseURL, F as warn$1, M as encodeHash, N as encodeParam, O as stringifyURL, S as START_LOCATION_NORMALIZED, T as isSameRouteRecord, _ as saveScrollPosition, a as loadRouteLocation, b as normalizeBase, c as useCallbacks, d as stringifyQuery, f as isRouteLocation, g as getScrollKey, h as getSavedScrollPosition, i as guardToPromiseFn, j as decode, k as stripBase, l as normalizeQuery, m as computeScrollPosition, n as extractChangingRecords, o as onBeforeRouteLeave, p as isRouteName, r as extractComponentsGuards, s as onBeforeRouteUpdate, t as addDevtools, u as parseQuery, v as scrollToPosition, w as isSameRouteLocationParams, y as createHref } from \"./devtools-DCoWQoU_.js\";\nimport { computed, defineComponent, getCurrentInstance, h, inject, nextTick, provide, reactive, ref, shallowReactive, shallowRef, unref, watch, watchEffect } from \"vue\";\n//#region src/history/html5.ts\nlet createBaseLocation = () => location.protocol + \"//\" + location.host;\n/**\n* Creates a normalized history location from a window.location object\n* @param base - The base path\n* @param location - The window.location object\n*/\nfunction createCurrentLocation(base, location) {\n\tconst { pathname, search, hash } = location;\n\tconst hashPos = base.indexOf(\"#\");\n\tif (hashPos > -1) {\n\t\tlet slicePos = hash.includes(base.slice(hashPos)) ? base.slice(hashPos).length : 1;\n\t\tlet pathFromHash = hash.slice(slicePos);\n\t\tif (pathFromHash[0] !== \"/\") pathFromHash = \"/\" + pathFromHash;\n\t\treturn stripBase(pathFromHash, \"\");\n\t}\n\treturn stripBase(pathname, base) + search + hash;\n}\nfunction useHistoryListeners(base, historyState, currentLocation, replace) {\n\tlet listeners = [];\n\tlet teardowns = [];\n\tlet pauseState = null;\n\tconst popStateHandler = ({ state }) => {\n\t\tconst to = createCurrentLocation(base, location);\n\t\tconst from = currentLocation.value;\n\t\tconst fromState = historyState.value;\n\t\tlet delta = 0;\n\t\tif (state) {\n\t\t\tcurrentLocation.value = to;\n\t\t\thistoryState.value = state;\n\t\t\tif (pauseState && pauseState === from) {\n\t\t\t\tpauseState = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdelta = fromState ? state.position - fromState.position : 0;\n\t\t} else replace(to);\n\t\tlisteners.forEach((listener) => {\n\t\t\tlistener(currentLocation.value, from, {\n\t\t\t\tdelta,\n\t\t\t\ttype: \"pop\",\n\t\t\t\tdirection: delta ? delta > 0 ? \"forward\" : \"back\" : \"\"\n\t\t\t});\n\t\t});\n\t};\n\tfunction pauseListeners() {\n\t\tpauseState = currentLocation.value;\n\t}\n\tfunction listen(callback) {\n\t\tlisteners.push(callback);\n\t\tconst teardown = () => {\n\t\t\tconst index = listeners.indexOf(callback);\n\t\t\tif (index > -1) listeners.splice(index, 1);\n\t\t};\n\t\tteardowns.push(teardown);\n\t\treturn teardown;\n\t}\n\tfunction beforeUnloadListener() {\n\t\tif (document.visibilityState === \"hidden\") {\n\t\t\tconst { history } = window;\n\t\t\tif (!history.state) return;\n\t\t\thistory.replaceState(assign({}, history.state, { scroll: computeScrollPosition() }), \"\");\n\t\t}\n\t}\n\tfunction destroy() {\n\t\tfor (const teardown of teardowns) teardown();\n\t\tteardowns = [];\n\t\twindow.removeEventListener(\"popstate\", popStateHandler);\n\t\twindow.removeEventListener(\"pagehide\", beforeUnloadListener);\n\t\tdocument.removeEventListener(\"visibilitychange\", beforeUnloadListener);\n\t}\n\twindow.addEventListener(\"popstate\", popStateHandler);\n\twindow.addEventListener(\"pagehide\", beforeUnloadListener);\n\tdocument.addEventListener(\"visibilitychange\", beforeUnloadListener);\n\treturn {\n\t\tpauseListeners,\n\t\tlisten,\n\t\tdestroy\n\t};\n}\n/**\n* Creates a state object\n*/\nfunction buildState(back, current, forward, replaced = false, computeScroll = false) {\n\treturn {\n\t\tback,\n\t\tcurrent,\n\t\tforward,\n\t\treplaced,\n\t\tposition: window.history.length,\n\t\tscroll: computeScroll ? computeScrollPosition() : null\n\t};\n}\nfunction useHistoryStateNavigation(base) {\n\tconst { history, location } = window;\n\tconst currentLocation = { value: createCurrentLocation(base, location) };\n\tconst historyState = { value: history.state };\n\tif (!historyState.value) changeLocation(currentLocation.value, {\n\t\tback: null,\n\t\tcurrent: currentLocation.value,\n\t\tforward: null,\n\t\tposition: history.length - 1,\n\t\treplaced: true,\n\t\tscroll: null\n\t}, true);\n\tfunction changeLocation(to, state, replace) {\n\t\t/**\n\t\t* if a base tag is provided, and we are on a normal domain, we have to\n\t\t* respect the provided `base` attribute because pushState() will use it and\n\t\t* potentially erase anything before the `#` like at\n\t\t* https://github.com/vuejs/router/issues/685 where a base of\n\t\t* `/folder/#` but a base of `/` would erase the `/folder/` section. If\n\t\t* there is no host, the `` tag makes no sense and if there isn't a\n\t\t* base tag we can just use everything after the `#`.\n\t\t*/\n\t\tconst hashIndex = base.indexOf(\"#\");\n\t\tconst url = hashIndex > -1 ? (location.host && document.querySelector(\"base\") ? base : base.slice(hashIndex)) + to : createBaseLocation() + base + to;\n\t\ttry {\n\t\t\thistory[replace ? \"replaceState\" : \"pushState\"](state, \"\", url);\n\t\t\thistoryState.value = state;\n\t\t} catch (err) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") warn$1(\"Error with push/replace State\", err);\n\t\t\telse console.error(err);\n\t\t\tlocation[replace ? \"replace\" : \"assign\"](url);\n\t\t}\n\t}\n\tfunction replace(to, data) {\n\t\tchangeLocation(to, assign({}, history.state, buildState(historyState.value.back, to, historyState.value.forward, true), data, { position: historyState.value.position }), true);\n\t\tcurrentLocation.value = to;\n\t}\n\tfunction push(to, data) {\n\t\tconst currentState = assign({}, historyState.value, history.state, {\n\t\t\tforward: to,\n\t\t\tscroll: computeScrollPosition()\n\t\t});\n\t\tif (process.env.NODE_ENV !== \"production\" && !history.state) warn$1(\"history.state seems to have been manually replaced without preserving the necessary values. Make sure to preserve existing history state if you are manually calling history.replaceState:\\n\\nhistory.replaceState(history.state, '', url)\\n\\nYou can find more information at https://router.vuejs.org/guide/migration/#Usage-of-history-state\");\n\t\tchangeLocation(currentState.current, currentState, true);\n\t\tchangeLocation(to, assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data), false);\n\t\tcurrentLocation.value = to;\n\t}\n\treturn {\n\t\tlocation: currentLocation,\n\t\tstate: historyState,\n\t\tpush,\n\t\treplace\n\t};\n}\n/**\n* Creates an HTML5 history. Most common history for single page applications.\n*\n* @param base -\n*/\nfunction createWebHistory(base) {\n\tbase = normalizeBase(base);\n\tconst historyNavigation = useHistoryStateNavigation(base);\n\tconst historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace);\n\tfunction go(delta, triggerListeners = true) {\n\t\tif (!triggerListeners) historyListeners.pauseListeners();\n\t\thistory.go(delta);\n\t}\n\tconst routerHistory = assign({\n\t\tlocation: \"\",\n\t\tbase,\n\t\tgo,\n\t\tcreateHref: createHref.bind(null, base)\n\t}, historyNavigation, historyListeners);\n\tObject.defineProperty(routerHistory, \"location\", {\n\t\tenumerable: true,\n\t\tget: () => historyNavigation.location.value\n\t});\n\tObject.defineProperty(routerHistory, \"state\", {\n\t\tenumerable: true,\n\t\tget: () => historyNavigation.state.value\n\t});\n\treturn routerHistory;\n}\n//#endregion\n//#region src/history/hash.ts\n/**\n* Creates a hash history. Useful for web applications with no host (e.g. `file://`) or when configuring a server to\n* handle any URL is not possible.\n*\n* @param base - optional base to provide. Defaults to `location.pathname + location.search` If there is a `` tag\n* in the `head`, its value will be ignored in favor of this parameter **but note it affects all the history.pushState()\n* calls**, meaning that if you use a `` tag, it's `href` value **has to match this parameter** (ignoring anything\n* after the `#`).\n*\n* @example\n* ```js\n* // at https://example.com/folder\n* createWebHashHistory() // gives a url of `https://example.com/folder#`\n* createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#`\n* // if the `#` is provided in the base, it won't be added by `createWebHashHistory`\n* createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/`\n* // you should avoid doing this because it changes the original url and breaks copying urls\n* createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#`\n*\n* // at file:///usr/etc/folder/index.html\n* // for locations with no `host`, the base is ignored\n* createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#`\n* ```\n*/\nfunction createWebHashHistory(base) {\n\tbase = location.host ? base || location.pathname + location.search : \"\";\n\tif (!base.includes(\"#\")) base += \"#\";\n\tif (process.env.NODE_ENV !== \"production\" && !base.endsWith(\"#/\") && !base.endsWith(\"#\")) warn$1(`A hash base must end with a \"#\":\\n\"${base}\" should be \"${base.replace(/#.*$/, \"#\")}\".`);\n\treturn createWebHistory(base);\n}\n//#endregion\n//#region src/history/memory.ts\n/**\n* Creates an in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere.\n* It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`.\n*\n* @param base - Base applied to all urls, defaults to '/'\n* @returns a history object that can be passed to the router constructor\n*/\nfunction createMemoryHistory(base = \"\") {\n\tlet listeners = [];\n\tlet queue = [[\"\", {}]];\n\tlet position = 0;\n\tbase = normalizeBase(base);\n\tfunction setLocation(location, state = {}) {\n\t\tposition++;\n\t\tif (position !== queue.length) queue.splice(position);\n\t\tqueue.push([location, state]);\n\t}\n\tfunction triggerListeners(to, from, { direction, delta }) {\n\t\tconst info = {\n\t\t\tdirection,\n\t\t\tdelta,\n\t\t\ttype: \"pop\"\n\t\t};\n\t\tfor (const callback of listeners) callback(to, from, info);\n\t}\n\tconst routerHistory = {\n\t\tlocation: \"\",\n\t\tstate: {},\n\t\tbase,\n\t\tcreateHref: createHref.bind(null, base),\n\t\treplace(to, state) {\n\t\t\tqueue.splice(position--, 1);\n\t\t\tsetLocation(to, state);\n\t\t},\n\t\tpush(to, state) {\n\t\t\tsetLocation(to, state);\n\t\t},\n\t\tlisten(callback) {\n\t\t\tlisteners.push(callback);\n\t\t\treturn () => {\n\t\t\t\tconst index = listeners.indexOf(callback);\n\t\t\t\tif (index > -1) listeners.splice(index, 1);\n\t\t\t};\n\t\t},\n\t\tdestroy() {\n\t\t\tlisteners = [];\n\t\t\tqueue = [[\"\", {}]];\n\t\t\tposition = 0;\n\t\t},\n\t\tgo(delta, shouldTrigger = true) {\n\t\t\tconst from = this.location;\n\t\t\tconst direction = delta < 0 ? \"back\" : \"forward\";\n\t\t\tposition = Math.max(0, Math.min(position + delta, queue.length - 1));\n\t\t\tif (shouldTrigger) triggerListeners(this.location, from, {\n\t\t\t\tdirection,\n\t\t\t\tdelta\n\t\t\t});\n\t\t}\n\t};\n\tObject.defineProperty(routerHistory, \"location\", {\n\t\tenumerable: true,\n\t\tget: () => queue[position][0]\n\t});\n\tObject.defineProperty(routerHistory, \"state\", {\n\t\tenumerable: true,\n\t\tget: () => queue[position][1]\n\t});\n\treturn routerHistory;\n}\n//#endregion\n//#region src/matcher/pathTokenizer.ts\nconst ROOT_TOKEN = {\n\ttype: 0,\n\tvalue: \"\"\n};\nconst VALID_PARAM_RE = /[a-zA-Z0-9_]/;\nfunction tokenizePath(path) {\n\tif (!path) return [[]];\n\tif (path === \"/\") return [[ROOT_TOKEN]];\n\tif (!path.startsWith(\"/\")) throw new Error(process.env.NODE_ENV !== \"production\" ? `Route paths should start with a \"/\": \"${path}\" should be \"/${path}\".` : `Invalid path \"${path}\"`);\n\tfunction crash(message) {\n\t\tthrow new Error(`ERR (${state})/\"${buffer}\": ${message}`);\n\t}\n\tlet state = 0;\n\tlet previousState = state;\n\tconst tokens = [];\n\tlet segment;\n\tfunction finalizeSegment() {\n\t\tif (segment) tokens.push(segment);\n\t\tsegment = [];\n\t}\n\tlet i = 0;\n\tlet char;\n\tlet buffer = \"\";\n\tlet customRe = \"\";\n\tfunction consumeBuffer() {\n\t\tif (!buffer) return;\n\t\tif (state === 0) segment.push({\n\t\t\ttype: 0,\n\t\t\tvalue: buffer\n\t\t});\n\t\telse if (state === 1 || state === 2 || state === 3) {\n\t\t\tif (segment.length > 1 && (char === \"*\" || char === \"+\")) crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);\n\t\t\tsegment.push({\n\t\t\t\ttype: 1,\n\t\t\t\tvalue: buffer,\n\t\t\t\tregexp: customRe,\n\t\t\t\trepeatable: char === \"*\" || char === \"+\",\n\t\t\t\toptional: char === \"*\" || char === \"?\"\n\t\t\t});\n\t\t} else crash(\"Invalid state to consume buffer\");\n\t\tbuffer = \"\";\n\t}\n\tfunction addCharToBuffer() {\n\t\tbuffer += char;\n\t}\n\twhile (i < path.length) {\n\t\tchar = path[i++];\n\t\tswitch (state) {\n\t\t\tcase 0:\n\t\t\t\tif (char === \"\\\\\") {\n\t\t\t\t\tpreviousState = state;\n\t\t\t\t\tstate = 4;\n\t\t\t\t} else if (char === \"/\") {\n\t\t\t\t\tif (buffer) consumeBuffer();\n\t\t\t\t\tfinalizeSegment();\n\t\t\t\t} else if (char === \":\") {\n\t\t\t\t\tconsumeBuffer();\n\t\t\t\t\tstate = 1;\n\t\t\t\t} else addCharToBuffer();\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\taddCharToBuffer();\n\t\t\t\tstate = previousState;\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tif (char === \"(\") state = 2;\n\t\t\t\telse if (VALID_PARAM_RE.test(char)) addCharToBuffer();\n\t\t\t\telse {\n\t\t\t\t\tconsumeBuffer();\n\t\t\t\t\tstate = 0;\n\t\t\t\t\tif (char !== \"*\" && char !== \"?\" && char !== \"+\") i--;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tif (char === \")\") if (customRe[customRe.length - 1] == \"\\\\\") customRe = customRe.slice(0, -1) + char;\n\t\t\t\telse state = 3;\n\t\t\t\telse customRe += char;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tconsumeBuffer();\n\t\t\t\tstate = 0;\n\t\t\t\tif (char !== \"*\" && char !== \"?\" && char !== \"+\") i--;\n\t\t\t\tcustomRe = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tcrash(\"Unknown state\");\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif (state === 2) crash(`Unfinished custom RegExp for param \"${buffer}\"`);\n\tconsumeBuffer();\n\tfinalizeSegment();\n\treturn tokens;\n}\n//#endregion\n//#region src/matcher/pathParserRanker.ts\nconst BASE_PARAM_PATTERN = \"[^/]+?\";\nconst BASE_PATH_PARSER_OPTIONS = {\n\tsensitive: false,\n\tstrict: false,\n\tstart: true,\n\tend: true\n};\nconst REGEX_CHARS_RE = /[.+*?^${}()[\\]/\\\\]/g;\n/**\n* Creates a path parser from an array of Segments (a segment is an array of Tokens)\n*\n* @param segments - array of segments returned by tokenizePath\n* @param extraOptions - optional options for the regexp\n* @returns a PathParser\n*/\nfunction tokensToParser(segments, extraOptions) {\n\tconst options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions);\n\tconst score = [];\n\tlet pattern = options.start ? \"^\" : \"\";\n\tconst keys = [];\n\tfor (const segment of segments) {\n\t\tconst segmentScores = segment.length ? [] : [90];\n\t\tif (options.strict && !segment.length) pattern += \"/\";\n\t\tfor (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {\n\t\t\tconst token = segment[tokenIndex];\n\t\t\tlet subSegmentScore = 40 + (options.sensitive ? .25 : 0);\n\t\t\tif (token.type === 0) {\n\t\t\t\tif (!tokenIndex) pattern += \"/\";\n\t\t\t\tpattern += token.value.replace(REGEX_CHARS_RE, \"\\\\$&\");\n\t\t\t\tsubSegmentScore += 40;\n\t\t\t} else if (token.type === 1) {\n\t\t\t\tconst { value, repeatable, optional, regexp } = token;\n\t\t\t\tkeys.push({\n\t\t\t\t\tname: value,\n\t\t\t\t\trepeatable,\n\t\t\t\t\toptional\n\t\t\t\t});\n\t\t\t\tconst re = regexp ? regexp : BASE_PARAM_PATTERN;\n\t\t\t\tif (re !== BASE_PARAM_PATTERN) {\n\t\t\t\t\tsubSegmentScore += 10;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tnew RegExp(`(${re})`);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tthrow new Error(`Invalid custom RegExp for param \"${value}\" (${re}): ` + err.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet subPattern = repeatable ? `((?:${re})(?:/(?:${re}))*)` : `(${re})`;\n\t\t\t\tif (!tokenIndex) subPattern = optional && segment.length < 2 ? `(?:/${subPattern})` : \"/\" + subPattern;\n\t\t\t\tif (optional) subPattern += \"?\";\n\t\t\t\tpattern += subPattern;\n\t\t\t\tsubSegmentScore += 20;\n\t\t\t\tif (optional) subSegmentScore += -8;\n\t\t\t\tif (repeatable) subSegmentScore += -20;\n\t\t\t\tif (re === \".*\") subSegmentScore += -50;\n\t\t\t}\n\t\t\tsegmentScores.push(subSegmentScore);\n\t\t}\n\t\tscore.push(segmentScores);\n\t}\n\tif (options.strict && options.end) {\n\t\tconst i = score.length - 1;\n\t\tscore[i][score[i].length - 1] += .7000000000000001;\n\t}\n\tif (!options.strict) pattern += \"/?\";\n\tif (options.end) pattern += \"$\";\n\telse if (options.strict && !pattern.endsWith(\"/\")) pattern += \"(?:/|$)\";\n\tconst re = new RegExp(pattern, options.sensitive ? \"\" : \"i\");\n\tfunction parse(path) {\n\t\tconst match = path.match(re);\n\t\tconst params = {};\n\t\tif (!match) return null;\n\t\tfor (let i = 1; i < match.length; i++) {\n\t\t\tconst value = match[i] || \"\";\n\t\t\tconst key = keys[i - 1];\n\t\t\tparams[key.name] = value && key.repeatable ? value.split(\"/\") : value;\n\t\t}\n\t\treturn params;\n\t}\n\tfunction stringify(params) {\n\t\tlet path = \"\";\n\t\tlet avoidDuplicatedSlash = false;\n\t\tfor (const segment of segments) {\n\t\t\tif (!avoidDuplicatedSlash || !path.endsWith(\"/\")) path += \"/\";\n\t\t\tavoidDuplicatedSlash = false;\n\t\t\tfor (const token of segment) if (token.type === 0) path += token.value;\n\t\t\telse if (token.type === 1) {\n\t\t\t\tconst { value, repeatable, optional } = token;\n\t\t\t\tconst param = value in params ? params[value] : \"\";\n\t\t\t\tif (isArray(param) && !repeatable) throw new Error(`Provided param \"${value}\" is an array but it is not repeatable (* or + modifiers)`);\n\t\t\t\tconst text = isArray(param) ? param.join(\"/\") : param;\n\t\t\t\tif (!text) if (optional) {\n\t\t\t\t\tif (segment.length < 2) if (path.endsWith(\"/\")) path = path.slice(0, -1);\n\t\t\t\t\telse avoidDuplicatedSlash = true;\n\t\t\t\t} else throw new Error(`Missing required param \"${value}\"`);\n\t\t\t\tpath += text;\n\t\t\t}\n\t\t}\n\t\treturn path || \"/\";\n\t}\n\treturn {\n\t\tre,\n\t\tscore,\n\t\tkeys,\n\t\tparse,\n\t\tstringify\n\t};\n}\n/**\n* Compares an array of numbers as used in PathParser.score and returns a\n* number. This function can be used to `sort` an array\n*\n* @param a - first array of numbers\n* @param b - second array of numbers\n* @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n* should be sorted first\n*/\nfunction compareScoreArray(a, b) {\n\tlet i = 0;\n\twhile (i < a.length && i < b.length) {\n\t\tconst diff = b[i] - a[i];\n\t\tif (diff) return diff;\n\t\ti++;\n\t}\n\tif (a.length < b.length) return a.length === 1 && a[0] === 80 ? -1 : 1;\n\telse if (a.length > b.length) return b.length === 1 && b[0] === 80 ? 1 : -1;\n\treturn 0;\n}\n/**\n* Compare function that can be used with `sort` to sort an array of PathParser\n*\n* @param a - first PathParser\n* @param b - second PathParser\n* @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n*/\nfunction comparePathParserScore(a, b) {\n\tlet i = 0;\n\tconst aScore = a.score;\n\tconst bScore = b.score;\n\twhile (i < aScore.length && i < bScore.length) {\n\t\tconst comp = compareScoreArray(aScore[i], bScore[i]);\n\t\tif (comp) return comp;\n\t\ti++;\n\t}\n\tif (Math.abs(bScore.length - aScore.length) === 1) {\n\t\tif (isLastScoreNegative(aScore)) return 1;\n\t\tif (isLastScoreNegative(bScore)) return -1;\n\t}\n\treturn bScore.length - aScore.length;\n}\n/**\n* This allows detecting splats at the end of a path: /home/:id(.*)*\n*\n* @param score - score to check\n* @returns true if the last entry is negative\n*/\nfunction isLastScoreNegative(score) {\n\tconst last = score[score.length - 1];\n\treturn score.length > 0 && last[last.length - 1] < 0;\n}\nconst PATH_PARSER_OPTIONS_DEFAULTS = {\n\tstrict: false,\n\tend: true,\n\tsensitive: false\n};\n//#endregion\n//#region src/matcher/pathMatcher.ts\nfunction createRouteRecordMatcher(record, parent, options) {\n\tconst parser = tokensToParser(tokenizePath(record.path), options);\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst existingKeys = /* @__PURE__ */ new Set();\n\t\tfor (const key of parser.keys) {\n\t\t\tif (existingKeys.has(key.name)) warn$1(`Found duplicated params with name \"${key.name}\" for path \"${record.path}\". Only the last one will be available on \"$route.params\".`);\n\t\t\texistingKeys.add(key.name);\n\t\t}\n\t}\n\tconst matcher = assign(parser, {\n\t\trecord,\n\t\tparent,\n\t\tchildren: [],\n\t\talias: []\n\t});\n\tif (parent) {\n\t\tif (!matcher.record.aliasOf === !parent.record.aliasOf) parent.children.push(matcher);\n\t}\n\treturn matcher;\n}\n//#endregion\n//#region src/matcher/index.ts\n/**\n* Creates a Router Matcher.\n*\n* @internal\n* @param routes - array of initial routes\n* @param globalOptions - global route options\n*/\nfunction createRouterMatcher(routes, globalOptions) {\n\tconst matchers = [];\n\tconst matcherMap = /* @__PURE__ */ new Map();\n\tglobalOptions = mergeOptions(PATH_PARSER_OPTIONS_DEFAULTS, globalOptions);\n\tfunction getRecordMatcher(name) {\n\t\treturn matcherMap.get(name);\n\t}\n\tfunction addRoute(record, parent, originalRecord) {\n\t\tconst isRootAdd = !originalRecord;\n\t\tconst mainNormalizedRecord = normalizeRouteRecord(record);\n\t\tif (process.env.NODE_ENV !== \"production\") checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent);\n\t\tmainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;\n\t\tconst options = mergeOptions(globalOptions, record);\n\t\tconst normalizedRecords = [mainNormalizedRecord];\n\t\tif (\"alias\" in record) {\n\t\t\tconst aliases = typeof record.alias === \"string\" ? [record.alias] : record.alias;\n\t\t\tfor (const alias of aliases) normalizedRecords.push(normalizeRouteRecord(assign({}, mainNormalizedRecord, {\n\t\t\t\tcomponents: originalRecord ? originalRecord.record.components : mainNormalizedRecord.components,\n\t\t\t\tpath: alias,\n\t\t\t\taliasOf: originalRecord ? originalRecord.record : mainNormalizedRecord\n\t\t\t})));\n\t\t}\n\t\tlet matcher;\n\t\tlet originalMatcher;\n\t\tfor (const normalizedRecord of normalizedRecords) {\n\t\t\tconst { path } = normalizedRecord;\n\t\t\tif (parent && path[0] !== \"/\") {\n\t\t\t\tconst parentPath = parent.record.path;\n\t\t\t\tconst connectingSlash = parentPath[parentPath.length - 1] === \"/\" ? \"\" : \"/\";\n\t\t\t\tnormalizedRecord.path = parent.record.path + (path && connectingSlash + path);\n\t\t\t}\n\t\t\tif (process.env.NODE_ENV !== \"production\" && normalizedRecord.path === \"*\") throw new Error(\"Catch all routes (\\\"*\\\") must now be defined using a param with a custom regexp.\\nSee more at https://router.vuejs.org/guide/migration/#Removed-star-or-catch-all-routes.\");\n\t\t\tmatcher = createRouteRecordMatcher(normalizedRecord, parent, options);\n\t\t\tif (process.env.NODE_ENV !== \"production\" && parent && path[0] === \"/\") checkMissingParamsInAbsolutePath(matcher, parent);\n\t\t\tif (originalRecord) {\n\t\t\t\toriginalRecord.alias.push(matcher);\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") checkSameParams(originalRecord, matcher);\n\t\t\t} else {\n\t\t\t\toriginalMatcher = originalMatcher || matcher;\n\t\t\t\tif (originalMatcher !== matcher) originalMatcher.alias.push(matcher);\n\t\t\t\tif (isRootAdd && record.name && !isAliasRecord(matcher)) {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") checkSameNameAsAncestor(record, parent);\n\t\t\t\t\tremoveRoute(record.name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isMatchable(matcher)) insertMatcher(matcher);\n\t\t\tif (mainNormalizedRecord.children) {\n\t\t\t\tconst children = mainNormalizedRecord.children;\n\t\t\t\tfor (let i = 0; i < children.length; i++) addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);\n\t\t\t}\n\t\t\toriginalRecord = originalRecord || matcher;\n\t\t}\n\t\treturn originalMatcher ? () => {\n\t\t\tremoveRoute(originalMatcher);\n\t\t} : noop;\n\t}\n\tfunction removeRoute(matcherRef) {\n\t\tif (isRouteName(matcherRef)) {\n\t\t\tconst matcher = matcherMap.get(matcherRef);\n\t\t\tif (matcher) {\n\t\t\t\tmatcherMap.delete(matcherRef);\n\t\t\t\tmatchers.splice(matchers.indexOf(matcher), 1);\n\t\t\t\tmatcher.children.forEach(removeRoute);\n\t\t\t\tmatcher.alias.forEach(removeRoute);\n\t\t\t}\n\t\t} else {\n\t\t\tconst index = matchers.indexOf(matcherRef);\n\t\t\tif (index > -1) {\n\t\t\t\tmatchers.splice(index, 1);\n\t\t\t\tif (matcherRef.record.name) matcherMap.delete(matcherRef.record.name);\n\t\t\t\tmatcherRef.children.forEach(removeRoute);\n\t\t\t\tmatcherRef.alias.forEach(removeRoute);\n\t\t\t}\n\t\t}\n\t}\n\tfunction getRoutes() {\n\t\treturn matchers;\n\t}\n\tfunction insertMatcher(matcher) {\n\t\tconst index = findInsertionIndex(matcher, matchers);\n\t\tmatchers.splice(index, 0, matcher);\n\t\tif (matcher.record.name && !isAliasRecord(matcher)) matcherMap.set(matcher.record.name, matcher);\n\t}\n\tfunction resolve(location, currentLocation) {\n\t\tlet matcher;\n\t\tlet params = {};\n\t\tlet path;\n\t\tlet name;\n\t\tif (\"name\" in location && location.name) {\n\t\t\tmatcher = matcherMap.get(location.name);\n\t\t\tif (!matcher) throw createRouterError(1, { location });\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\t\tconst invalidParams = Object.keys(location.params || {}).filter((paramName) => !matcher.keys.find((k) => k.name === paramName));\n\t\t\t\tif (invalidParams.length) {\n\t\t\t\t\tconst isInherited = !matcher.keys.length && invalidParams.some((name) => name in currentLocation.params);\n\t\t\t\t\twarn$1(`Discarded invalid param(s) \"${invalidParams.join(\"\\\", \\\"\")}\" when navigating.` + (isInherited ? ` If you are using a catch-all route with a named redirect, pass an empty \\`params\\` object: \\`redirect: { name: '...', params: {} }\\`.` : \"\") + ` See https://github.com/vuejs/router/blob/main/packages/router/CHANGELOG.md#414-2022-08-22 for more details.`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tname = matcher.record.name;\n\t\t\tparams = assign(pickParams(currentLocation.params, matcher.keys.filter((k) => !k.optional).concat(matcher.parent ? matcher.parent.keys.filter((k) => k.optional) : []).map((k) => k.name)), location.params && pickParams(location.params, matcher.keys.map((k) => k.name)));\n\t\t\tpath = matcher.stringify(params);\n\t\t} else if (location.path != null) {\n\t\t\tpath = location.path;\n\t\t\tif (process.env.NODE_ENV !== \"production\" && !path.startsWith(\"/\")) warn$1(`The Matcher cannot resolve relative paths but received \"${path}\". Unless you directly called \\`matcher.resolve(\"${path}\")\\`, this is probably a bug in vue-router. Please open an issue at https://github.com/vuejs/router/issues/new/choose.`);\n\t\t\tmatcher = matchers.find((m) => m.re.test(path));\n\t\t\tif (matcher) {\n\t\t\t\tparams = matcher.parse(path);\n\t\t\t\tname = matcher.record.name;\n\t\t\t\tmatcher.keys.forEach((key) => {\n\t\t\t\t\tif (key.optional && !params[key.name]) delete params[key.name];\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tmatcher = currentLocation.name ? matcherMap.get(currentLocation.name) : matchers.find((m) => m.re.test(currentLocation.path));\n\t\t\tif (!matcher) throw createRouterError(1, {\n\t\t\t\tlocation,\n\t\t\t\tcurrentLocation\n\t\t\t});\n\t\t\tname = matcher.record.name;\n\t\t\tparams = assign({}, currentLocation.params, location.params);\n\t\t\tpath = matcher.stringify(params);\n\t\t}\n\t\tconst matched = [];\n\t\tlet parentMatcher = matcher;\n\t\twhile (parentMatcher) {\n\t\t\tmatched.unshift(parentMatcher.record);\n\t\t\tparentMatcher = parentMatcher.parent;\n\t\t}\n\t\treturn {\n\t\t\tname,\n\t\t\tpath,\n\t\t\tparams,\n\t\t\tmatched,\n\t\t\tmeta: mergeMetaFields(matched)\n\t\t};\n\t}\n\troutes.forEach((route) => addRoute(route));\n\tfunction clearRoutes() {\n\t\tmatchers.length = 0;\n\t\tmatcherMap.clear();\n\t}\n\treturn {\n\t\taddRoute,\n\t\tresolve,\n\t\tremoveRoute,\n\t\tclearRoutes,\n\t\tgetRoutes,\n\t\tgetRecordMatcher\n\t};\n}\n/**\n* Picks an object param to contain only specified keys.\n*\n* @param params - params object to pick from\n* @param keys - keys to pick\n*/\nfunction pickParams(params, keys) {\n\tconst newParams = {};\n\tfor (const key of keys) if (key in params) newParams[key] = params[key];\n\treturn newParams;\n}\n/**\n* Normalizes a RouteRecordRaw. Creates a copy\n*\n* @param record\n* @returns the normalized version\n*/\nfunction normalizeRouteRecord(record) {\n\tconst normalized = {\n\t\tpath: record.path,\n\t\tredirect: record.redirect,\n\t\tname: record.name,\n\t\tmeta: record.meta || {},\n\t\taliasOf: record.aliasOf,\n\t\tbeforeEnter: record.beforeEnter,\n\t\tprops: normalizeRecordProps(record),\n\t\tchildren: record.children || [],\n\t\tinstances: {},\n\t\tleaveGuards: /* @__PURE__ */ new Set(),\n\t\tupdateGuards: /* @__PURE__ */ new Set(),\n\t\tenterCallbacks: {},\n\t\tcomponents: \"components\" in record ? record.components || null : record.component && { default: record.component }\n\t};\n\tObject.defineProperty(normalized, \"mods\", { value: {} });\n\treturn normalized;\n}\n/**\n* Normalize the optional `props` in a record to always be an object similar to\n* components. Also accept a boolean for components.\n* @param record\n*/\nfunction normalizeRecordProps(record) {\n\tconst propsObject = {};\n\tconst props = record.props || false;\n\tif (\"component\" in record) propsObject.default = props;\n\telse for (const name in record.components) propsObject[name] = typeof props === \"object\" ? props[name] : props;\n\treturn propsObject;\n}\n/**\n* Checks if a record or any of its parent is an alias\n* @param record\n*/\nfunction isAliasRecord(record) {\n\twhile (record) {\n\t\tif (record.record.aliasOf) return true;\n\t\trecord = record.parent;\n\t}\n\treturn false;\n}\n/**\n* Merge meta fields of an array of records\n*\n* @param matched - array of matched records\n*/\nfunction mergeMetaFields(matched) {\n\treturn matched.reduce((meta, record) => assign(meta, record.meta), {});\n}\nfunction isSameParam(a, b) {\n\treturn a.name === b.name && a.optional === b.optional && a.repeatable === b.repeatable;\n}\n/**\n* Check if a path and its alias have the same required params\n*\n* @param a - original record\n* @param b - alias record\n*/\nfunction checkSameParams(a, b) {\n\tfor (const key of a.keys) if (!key.optional && !b.keys.find(isSameParam.bind(null, key))) return warn$1(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\n\tfor (const key of b.keys) if (!key.optional && !a.keys.find(isSameParam.bind(null, key))) return warn$1(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\n}\n/**\n* A route with a name and a child with an empty path without a name should warn when adding the route\n*\n* @param mainNormalizedRecord - RouteRecordNormalized\n* @param parent - RouteRecordMatcher\n*/\nfunction checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent) {\n\tif (parent && parent.record.name && !mainNormalizedRecord.name && !mainNormalizedRecord.path && mainNormalizedRecord.children.length === 0) warn$1(`The route named \"${String(parent.record.name)}\" has a child without a name, an empty path, and no children. This is probably a mistake: using that name won't render the empty path child so you probably want to move the name to the child instead. If this is intentional, add a name to the child route to silence the warning.`);\n}\nfunction checkSameNameAsAncestor(record, parent) {\n\tfor (let ancestor = parent; ancestor; ancestor = ancestor.parent) if (ancestor.record.name === record.name) throw new Error(`A route named \"${String(record.name)}\" has been added as a ${parent === ancestor ? \"child\" : \"descendant\"} of a route with the same name. Route names must be unique and a nested route cannot use the same name as an ancestor.`);\n}\nfunction checkMissingParamsInAbsolutePath(record, parent) {\n\tfor (const key of parent.keys) if (!record.keys.find(isSameParam.bind(null, key))) return warn$1(`Absolute path \"${record.record.path}\" must have the exact same param named \"${key.name}\" as its parent \"${parent.record.path}\".`);\n}\n/**\n* Performs a binary search to find the correct insertion index for a new matcher.\n*\n* Matchers are primarily sorted by their score. If scores are tied then we also consider parent/child relationships,\n* with descendants coming before ancestors. If there's still a tie, new routes are inserted after existing routes.\n*\n* @param matcher - new matcher to be inserted\n* @param matchers - existing matchers\n*/\nfunction findInsertionIndex(matcher, matchers) {\n\tlet lower = 0;\n\tlet upper = matchers.length;\n\twhile (lower !== upper) {\n\t\tconst mid = lower + upper >> 1;\n\t\tif (comparePathParserScore(matcher, matchers[mid]) < 0) upper = mid;\n\t\telse lower = mid + 1;\n\t}\n\tconst insertionAncestor = getInsertionAncestor(matcher);\n\tif (insertionAncestor) {\n\t\tupper = matchers.lastIndexOf(insertionAncestor, upper - 1);\n\t\tif (process.env.NODE_ENV !== \"production\" && upper < 0) warn$1(`Finding ancestor route \"${insertionAncestor.record.path}\" failed for \"${matcher.record.path}\"`);\n\t}\n\treturn upper;\n}\nfunction getInsertionAncestor(matcher) {\n\tlet ancestor = matcher;\n\twhile (ancestor = ancestor.parent) if (isMatchable(ancestor) && comparePathParserScore(matcher, ancestor) === 0) return ancestor;\n}\n/**\n* Checks if a matcher can be reachable. This means if it's possible to reach it as a route. For example, routes without\n* a component, or name, or redirect, are just used to group other routes.\n* @param matcher\n* @param matcher.record record of the matcher\n* @returns\n*/\nfunction isMatchable({ record }) {\n\treturn !!(record.name || record.components && Object.keys(record.components).length || record.redirect);\n}\n//#endregion\n//#region src/RouterLink.ts\n/**\n* Returns the internal behavior of a {@link RouterLink} without the rendering part.\n*\n* @param props - a `to` location and an optional `replace` flag\n*/\nfunction useLink(props) {\n\tconst router = inject(routerKey);\n\tconst currentRoute = inject(routeLocationKey);\n\tlet hasPrevious = false;\n\tlet previousTo = null;\n\tconst route = computed(() => {\n\t\tconst to = unref(props.to);\n\t\tif (process.env.NODE_ENV !== \"production\" && (!hasPrevious || to !== previousTo)) {\n\t\t\tif (!isRouteLocation(to)) if (hasPrevious) warn$1(`Invalid value for prop \"to\" in useLink()\\n- to:`, to, `\\n- previous to:`, previousTo, `\\n- props:`, props);\n\t\t\telse warn$1(`Invalid value for prop \"to\" in useLink()\\n- to:`, to, `\\n- props:`, props);\n\t\t\tpreviousTo = to;\n\t\t\thasPrevious = true;\n\t\t}\n\t\treturn router.resolve(to);\n\t});\n\tconst activeRecordIndex = computed(() => {\n\t\tconst { matched } = route.value;\n\t\tconst { length } = matched;\n\t\tconst routeMatched = matched[length - 1];\n\t\tconst currentMatched = currentRoute.matched;\n\t\tif (!routeMatched || !currentMatched.length) return -1;\n\t\tconst index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));\n\t\tif (index > -1) return index;\n\t\tconst parentRecordPath = getOriginalPath(matched[length - 2]);\n\t\treturn length > 1 && getOriginalPath(routeMatched) === parentRecordPath && currentMatched[currentMatched.length - 1].path !== parentRecordPath ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2])) : index;\n\t});\n\tconst isActive = computed(() => activeRecordIndex.value > -1 && includesParams(currentRoute.params, route.value.params));\n\tconst isExactActive = computed(() => activeRecordIndex.value > -1 && activeRecordIndex.value === currentRoute.matched.length - 1 && isSameRouteLocationParams(currentRoute.params, route.value.params));\n\tfunction navigate(e = {}) {\n\t\tif (guardEvent(e)) {\n\t\t\tconst p = router[unref(props.replace) ? \"replace\" : \"push\"](unref(props.to)).catch(noop);\n\t\t\tif (props.viewTransition && typeof document !== \"undefined\" && \"startViewTransition\" in document) document.startViewTransition(() => p);\n\t\t\treturn p;\n\t\t}\n\t\treturn Promise.resolve();\n\t}\n\tif ((process.env.NODE_ENV !== \"production\" || __VUE_PROD_DEVTOOLS__) && isBrowser) {\n\t\tconst instance = getCurrentInstance();\n\t\tif (instance) {\n\t\t\tconst linkContextDevtools = {\n\t\t\t\troute: route.value,\n\t\t\t\tisActive: isActive.value,\n\t\t\t\tisExactActive: isExactActive.value,\n\t\t\t\terror: null\n\t\t\t};\n\t\t\tinstance.__vrl_devtools = instance.__vrl_devtools || [];\n\t\t\tinstance.__vrl_devtools.push(linkContextDevtools);\n\t\t\twatchEffect(() => {\n\t\t\t\tlinkContextDevtools.route = route.value;\n\t\t\t\tlinkContextDevtools.isActive = isActive.value;\n\t\t\t\tlinkContextDevtools.isExactActive = isExactActive.value;\n\t\t\t\tlinkContextDevtools.error = isRouteLocation(unref(props.to)) ? null : \"Invalid \\\"to\\\" value\";\n\t\t\t}, { flush: \"post\" });\n\t\t}\n\t}\n\t/**\n\t* NOTE: update {@link _RouterLinkI}'s `$slots` type when updating this\n\t*/\n\treturn {\n\t\troute,\n\t\thref: computed(() => route.value.href),\n\t\tisActive,\n\t\tisExactActive,\n\t\tnavigate\n\t};\n}\nfunction preferSingleVNode(vnodes) {\n\treturn vnodes.length === 1 ? vnodes[0] : vnodes;\n}\n/**\n* Component to render a link that triggers a navigation on click.\n*/\nconst RouterLink = /* @__PURE__ */ defineComponent({\n\tname: \"RouterLink\",\n\tcompatConfig: { MODE: 3 },\n\tprops: {\n\t\tto: {\n\t\t\ttype: [String, Object],\n\t\t\trequired: true\n\t\t},\n\t\treplace: Boolean,\n\t\tactiveClass: String,\n\t\texactActiveClass: String,\n\t\tcustom: Boolean,\n\t\tariaCurrentValue: {\n\t\t\ttype: String,\n\t\t\tdefault: \"page\"\n\t\t},\n\t\tviewTransition: Boolean\n\t},\n\tuseLink,\n\tsetup(props, { slots }) {\n\t\tconst link = reactive(useLink(props));\n\t\tconst { options } = inject(routerKey);\n\t\tconst elClass = computed(() => ({\n\t\t\t[getLinkClass(props.activeClass, options.linkActiveClass, \"router-link-active\")]: link.isActive,\n\t\t\t[getLinkClass(props.exactActiveClass, options.linkExactActiveClass, \"router-link-exact-active\")]: link.isExactActive\n\t\t}));\n\t\treturn () => {\n\t\t\tconst children = slots.default && preferSingleVNode(slots.default(link));\n\t\t\treturn props.custom ? children : h(\"a\", {\n\t\t\t\t\"aria-current\": link.isExactActive ? props.ariaCurrentValue : null,\n\t\t\t\thref: link.href,\n\t\t\t\tonClick: link.navigate,\n\t\t\t\tclass: elClass.value\n\t\t\t}, children);\n\t\t};\n\t}\n});\nfunction guardEvent(e) {\n\tif (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return;\n\tif (e.defaultPrevented) return;\n\tif (e.button !== void 0 && e.button !== 0) return;\n\tif (e.currentTarget && e.currentTarget.getAttribute) {\n\t\tconst target = e.currentTarget.getAttribute(\"target\");\n\t\tif (/\\b_blank\\b/i.test(target)) return;\n\t}\n\tif (e.preventDefault) e.preventDefault();\n\treturn true;\n}\nfunction includesParams(outer, inner) {\n\tfor (const key in inner) {\n\t\tconst innerValue = inner[key];\n\t\tconst outerValue = outer[key];\n\t\tif (typeof innerValue === \"string\") {\n\t\t\tif (innerValue !== outerValue) return false;\n\t\t} else if (!isArray(outerValue) || outerValue.length !== innerValue.length || innerValue.some((value, i) => value.valueOf() !== outerValue[i].valueOf())) return false;\n\t}\n\treturn true;\n}\n/**\n* Get the original path value of a record by following its aliasOf\n* @param record\n*/\nfunction getOriginalPath(record) {\n\treturn record ? record.aliasOf ? record.aliasOf.path : record.path : \"\";\n}\n/**\n* Utility class to get the active class based on defaults.\n* @param propClass\n* @param globalClass\n* @param defaultClass\n*/\nconst getLinkClass = (propClass, globalClass, defaultClass) => propClass != null ? propClass : globalClass != null ? globalClass : defaultClass;\n//#endregion\n//#region src/RouterView.ts\nconst RouterViewImpl = /* @__PURE__ */ defineComponent({\n\tname: \"RouterView\",\n\tinheritAttrs: false,\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\tdefault: \"default\"\n\t\t},\n\t\troute: Object\n\t},\n\tcompatConfig: { MODE: 3 },\n\tsetup(props, { attrs, slots }) {\n\t\tprocess.env.NODE_ENV !== \"production\" && warnDeprecatedUsage();\n\t\tconst injectedRoute = inject(routerViewLocationKey);\n\t\tconst routeToDisplay = computed(() => props.route || injectedRoute.value);\n\t\tconst injectedDepth = inject(viewDepthKey, 0);\n\t\tconst depth = computed(() => {\n\t\t\tlet initialDepth = unref(injectedDepth);\n\t\t\tconst { matched } = routeToDisplay.value;\n\t\t\tlet matchedRoute;\n\t\t\twhile ((matchedRoute = matched[initialDepth]) && !matchedRoute.components) initialDepth++;\n\t\t\treturn initialDepth;\n\t\t});\n\t\tconst matchedRouteRef = computed(() => routeToDisplay.value.matched[depth.value]);\n\t\tprovide(viewDepthKey, computed(() => depth.value + 1));\n\t\tprovide(matchedRouteKey, matchedRouteRef);\n\t\tprovide(routerViewLocationKey, routeToDisplay);\n\t\tconst viewRef = ref();\n\t\twatch(() => [\n\t\t\tviewRef.value,\n\t\t\tmatchedRouteRef.value,\n\t\t\tprops.name\n\t\t], ([instance, to, name], [oldInstance, from, _oldName]) => {\n\t\t\tif (to) {\n\t\t\t\tto.instances[name] = instance;\n\t\t\t\tif (from && from !== to && instance && instance === oldInstance) {\n\t\t\t\t\tif (!to.leaveGuards.size) to.leaveGuards = from.leaveGuards;\n\t\t\t\t\tif (!to.updateGuards.size) to.updateGuards = from.updateGuards;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (instance && to && (!from || !isSameRouteRecord(to, from) || !oldInstance)) (to.enterCallbacks[name] || []).forEach((callback) => callback(instance));\n\t\t}, { flush: \"post\" });\n\t\treturn () => {\n\t\t\tconst route = routeToDisplay.value;\n\t\t\tconst currentName = props.name;\n\t\t\tconst matchedRoute = matchedRouteRef.value;\n\t\t\tconst ViewComponent = matchedRoute && matchedRoute.components[currentName];\n\t\t\tif (!ViewComponent) return normalizeSlot(slots.default, {\n\t\t\t\tComponent: ViewComponent,\n\t\t\t\troute\n\t\t\t});\n\t\t\tconst routePropsOption = matchedRoute.props[currentName];\n\t\t\tconst routeProps = routePropsOption ? routePropsOption === true ? route.params : typeof routePropsOption === \"function\" ? routePropsOption(route) : routePropsOption : null;\n\t\t\tconst onVnodeUnmounted = (vnode) => {\n\t\t\t\tif (vnode.component.isUnmounted) matchedRoute.instances[currentName] = null;\n\t\t\t};\n\t\t\tconst component = h(ViewComponent, assign({}, routeProps, attrs, {\n\t\t\t\tonVnodeUnmounted,\n\t\t\t\tref: viewRef\n\t\t\t}));\n\t\t\tif ((process.env.NODE_ENV !== \"production\" || __VUE_PROD_DEVTOOLS__) && isBrowser && component.ref) {\n\t\t\t\tconst info = {\n\t\t\t\t\tdepth: depth.value,\n\t\t\t\t\tname: matchedRoute.name,\n\t\t\t\t\tpath: matchedRoute.path,\n\t\t\t\t\tmeta: matchedRoute.meta\n\t\t\t\t};\n\t\t\t\t(isArray(component.ref) ? component.ref.map((r) => r.i) : [component.ref.i]).forEach((instance) => {\n\t\t\t\t\tinstance.__vrv_devtools = info;\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn normalizeSlot(slots.default, {\n\t\t\t\tComponent: component,\n\t\t\t\troute\n\t\t\t}) || component;\n\t\t};\n\t}\n});\nfunction normalizeSlot(slot, data) {\n\tif (!slot) return null;\n\tconst slotContent = slot(data);\n\treturn slotContent.length === 1 ? slotContent[0] : slotContent;\n}\n/**\n* Component to display the current route the user is at.\n*/\nconst RouterView = RouterViewImpl;\nfunction warnDeprecatedUsage() {\n\tconst instance = getCurrentInstance();\n\tconst parentName = instance.parent && instance.parent.type.name;\n\tconst parentSubTreeType = instance.parent && instance.parent.subTree && instance.parent.subTree.type;\n\tif (parentName && (parentName === \"KeepAlive\" || parentName.includes(\"Transition\")) && typeof parentSubTreeType === \"object\" && parentSubTreeType.name === \"RouterView\") {\n\t\tconst comp = parentName === \"KeepAlive\" ? \"keep-alive\" : \"transition\";\n\t\twarn$1(` can no longer be used directly inside <${comp}>.\\nUse slot props instead:\\n\\n\\n <${comp}>\\n \\n \\n`);\n\t}\n}\n//#endregion\n//#region src/router.ts\n/**\n* Creates a Router instance that can be used by a Vue app.\n*\n* @param options - {@link RouterOptions}\n*/\nfunction createRouter(options) {\n\tconst matcher = createRouterMatcher(options.routes, options);\n\tconst parseQuery$1 = options.parseQuery || parseQuery;\n\tconst stringifyQuery$1 = options.stringifyQuery || stringifyQuery;\n\tconst routerHistory = options.history;\n\tif (process.env.NODE_ENV !== \"production\" && !routerHistory) throw new Error(\"Provide the \\\"history\\\" option when calling \\\"createRouter()\\\": https://router.vuejs.org/api/interfaces/RouterOptions.html#history\");\n\tconst beforeGuards = useCallbacks();\n\tconst beforeResolveGuards = useCallbacks();\n\tconst afterGuards = useCallbacks();\n\tconst currentRoute = shallowRef(START_LOCATION_NORMALIZED);\n\tlet pendingLocation = START_LOCATION_NORMALIZED;\n\tif (isBrowser && options.scrollBehavior && \"scrollRestoration\" in history) history.scrollRestoration = \"manual\";\n\tconst normalizeParams = applyToParams.bind(null, (paramValue) => \"\" + paramValue);\n\tconst encodeParams = applyToParams.bind(null, encodeParam);\n\tconst decodeParams = applyToParams.bind(null, decode);\n\tfunction addRoute(parentOrRoute, route) {\n\t\tlet parent;\n\t\tlet record;\n\t\tif (isRouteName(parentOrRoute)) {\n\t\t\tparent = matcher.getRecordMatcher(parentOrRoute);\n\t\t\tif (process.env.NODE_ENV !== \"production\" && !parent) warn$1(`Parent route \"${String(parentOrRoute)}\" not found when adding child route`, route);\n\t\t\trecord = route;\n\t\t} else record = parentOrRoute;\n\t\treturn matcher.addRoute(record, parent);\n\t}\n\tfunction removeRoute(name) {\n\t\tconst recordMatcher = matcher.getRecordMatcher(name);\n\t\tif (recordMatcher) matcher.removeRoute(recordMatcher);\n\t\telse if (process.env.NODE_ENV !== \"production\") warn$1(`Cannot remove non-existent route \"${String(name)}\"`);\n\t}\n\tfunction getRoutes() {\n\t\treturn matcher.getRoutes().map((routeMatcher) => routeMatcher.record);\n\t}\n\tfunction hasRoute(name) {\n\t\treturn !!matcher.getRecordMatcher(name);\n\t}\n\tfunction resolve(rawLocation, currentLocation) {\n\t\tcurrentLocation = assign({}, currentLocation || currentRoute.value);\n\t\tif (typeof rawLocation === \"string\") {\n\t\t\tconst locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);\n\t\t\tconst matchedRoute = matcher.resolve({ path: locationNormalized.path }, currentLocation);\n\t\t\tconst href = routerHistory.createHref(locationNormalized.fullPath);\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\t\tif (href.startsWith(\"//\")) warn$1(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\n\t\t\t\telse if (!matchedRoute.matched.length) warn$1(`No match found for location with path \"${rawLocation}\"`);\n\t\t\t}\n\t\t\treturn assign(locationNormalized, matchedRoute, {\n\t\t\t\tparams: decodeParams(matchedRoute.params),\n\t\t\t\tredirectedFrom: void 0,\n\t\t\t\thref\n\t\t\t});\n\t\t}\n\t\tif (process.env.NODE_ENV !== \"production\" && !isRouteLocation(rawLocation)) {\n\t\t\twarn$1(`router.resolve() was passed an invalid location. This will fail in production.\\n- Location:`, rawLocation);\n\t\t\treturn resolve({});\n\t\t}\n\t\tlet matcherLocation;\n\t\tif (rawLocation.path != null) {\n\t\t\tif (process.env.NODE_ENV !== \"production\" && \"params\" in rawLocation && !(\"name\" in rawLocation) && Object.keys(rawLocation.params).length) warn$1(`Path \"${rawLocation.path}\" was passed with params but they will be ignored. Use a named route alongside params instead.`);\n\t\t\tmatcherLocation = assign({}, rawLocation, { path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path });\n\t\t} else {\n\t\t\tconst targetParams = assign({}, rawLocation.params);\n\t\t\tfor (const key in targetParams) if (targetParams[key] == null) delete targetParams[key];\n\t\t\tmatcherLocation = assign({}, rawLocation, { params: encodeParams(targetParams) });\n\t\t\tcurrentLocation.params = encodeParams(currentLocation.params);\n\t\t}\n\t\tconst matchedRoute = matcher.resolve(matcherLocation, currentLocation);\n\t\tconst hash = rawLocation.hash || \"\";\n\t\tif (process.env.NODE_ENV !== \"production\" && hash && !hash.startsWith(\"#\")) warn$1(`A \\`hash\\` should always start with the character \"#\". Replace \"${hash}\" with \"#${hash}\".`);\n\t\tmatchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));\n\t\tconst fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, {\n\t\t\thash: encodeHash(hash),\n\t\t\tpath: matchedRoute.path\n\t\t}));\n\t\tconst href = routerHistory.createHref(fullPath);\n\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\tif (href.startsWith(\"//\")) warn$1(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\n\t\t\telse if (!matchedRoute.matched.length) warn$1(`No match found for location with path \"${rawLocation.path != null ? rawLocation.path : rawLocation}\"`);\n\t\t}\n\t\treturn assign({\n\t\t\tfullPath,\n\t\t\thash,\n\t\t\tquery: stringifyQuery$1 === stringifyQuery ? normalizeQuery(rawLocation.query) : rawLocation.query || {}\n\t\t}, matchedRoute, {\n\t\t\tredirectedFrom: void 0,\n\t\t\thref\n\t\t});\n\t}\n\tfunction locationAsObject(to) {\n\t\treturn typeof to === \"string\" ? parseURL(parseQuery$1, to, currentRoute.value.path) : assign({}, to);\n\t}\n\tfunction checkCanceledNavigation(to, from) {\n\t\tif (pendingLocation !== to) return createRouterError(8, {\n\t\t\tfrom,\n\t\t\tto\n\t\t});\n\t}\n\tfunction push(to) {\n\t\treturn pushWithRedirect(to);\n\t}\n\tfunction replace(to) {\n\t\treturn push(assign(locationAsObject(to), { replace: true }));\n\t}\n\tfunction handleRedirectRecord(to, from) {\n\t\tconst lastMatched = to.matched[to.matched.length - 1];\n\t\tif (lastMatched && lastMatched.redirect) {\n\t\t\tconst { redirect } = lastMatched;\n\t\t\tlet newTargetLocation = typeof redirect === \"function\" ? redirect(to, from) : redirect;\n\t\t\tif (typeof newTargetLocation === \"string\") {\n\t\t\t\tnewTargetLocation = newTargetLocation.includes(\"?\") || newTargetLocation.includes(\"#\") ? newTargetLocation = locationAsObject(newTargetLocation) : { path: newTargetLocation };\n\t\t\t\tnewTargetLocation.params = {};\n\t\t\t}\n\t\t\tif (process.env.NODE_ENV !== \"production\" && newTargetLocation.path == null && !(\"name\" in newTargetLocation)) {\n\t\t\t\twarn$1(`Invalid redirect found:\\n${JSON.stringify(newTargetLocation, null, 2)}\\n when navigating to \"${to.fullPath}\". A redirect must contain a name or path. This will break in production.`);\n\t\t\t\tthrow new Error(\"Invalid redirect\");\n\t\t\t}\n\t\t\treturn assign({\n\t\t\t\tquery: to.query,\n\t\t\t\thash: to.hash,\n\t\t\t\tparams: newTargetLocation.path != null ? {} : to.params\n\t\t\t}, newTargetLocation);\n\t\t}\n\t}\n\tfunction pushWithRedirect(to, redirectedFrom) {\n\t\tconst targetLocation = pendingLocation = resolve(to);\n\t\tconst from = currentRoute.value;\n\t\tconst data = to.state;\n\t\tconst force = to.force;\n\t\tconst replace = to.replace === true;\n\t\tconst shouldRedirect = handleRedirectRecord(targetLocation, from);\n\t\tif (shouldRedirect) return pushWithRedirect(assign(locationAsObject(shouldRedirect), {\n\t\t\tstate: typeof shouldRedirect === \"object\" ? assign({}, data, shouldRedirect.state) : data,\n\t\t\tforce,\n\t\t\treplace\n\t\t}), redirectedFrom || targetLocation);\n\t\tconst toLocation = targetLocation;\n\t\ttoLocation.redirectedFrom = redirectedFrom;\n\t\tlet failure;\n\t\tif (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) {\n\t\t\tfailure = createRouterError(16, {\n\t\t\t\tto: toLocation,\n\t\t\t\tfrom\n\t\t\t});\n\t\t\thandleScroll(from, from, true, false);\n\t\t}\n\t\treturn (failure ? Promise.resolve(failure) : navigate(toLocation, from)).catch((error) => isNavigationFailure(error) ? isNavigationFailure(error, 2) ? error : markAsReady(error) : triggerError(error, toLocation, from)).then((failure) => {\n\t\t\tif (failure) {\n\t\t\t\tif (isNavigationFailure(failure, 2)) {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\" && isSameRouteLocation(stringifyQuery$1, resolve(failure.to), toLocation) && redirectedFrom && (redirectedFrom._count = redirectedFrom._count ? redirectedFrom._count + 1 : 1) > 30) {\n\t\t\t\t\t\twarn$1(`Detected a possibly infinite redirection in a navigation guard when going from \"${from.fullPath}\" to \"${toLocation.fullPath}\". Aborting to avoid a Stack Overflow.\\n Are you always returning a new location within a navigation guard? That would lead to this error. Only return when redirecting or aborting, that should fix this. This might break in production if not fixed.`);\n\t\t\t\t\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Infinite redirect in navigation guard\"));\n\t\t\t\t\t}\n\t\t\t\t\treturn pushWithRedirect(assign({ replace }, locationAsObject(failure.to), {\n\t\t\t\t\t\tstate: typeof failure.to === \"object\" ? assign({}, data, failure.to.state) : data,\n\t\t\t\t\t\tforce\n\t\t\t\t\t}), redirectedFrom || toLocation);\n\t\t\t\t}\n\t\t\t} else failure = finalizeNavigation(toLocation, from, true, replace, data);\n\t\t\ttriggerAfterEach(toLocation, from, failure);\n\t\t\treturn failure;\n\t\t});\n\t}\n\t/**\n\t* Helper to reject and skip all navigation guards if a new navigation happened\n\t* @param to\n\t* @param from\n\t*/\n\tfunction checkCanceledNavigationAndReject(to, from) {\n\t\tconst error = checkCanceledNavigation(to, from);\n\t\treturn error ? Promise.reject(error) : Promise.resolve();\n\t}\n\tfunction runWithContext(fn) {\n\t\tconst app = installedApps.values().next().value;\n\t\treturn app && typeof app.runWithContext === \"function\" ? app.runWithContext(fn) : fn();\n\t}\n\tfunction navigate(to, from) {\n\t\tlet guards;\n\t\tconst [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from);\n\t\tguards = extractComponentsGuards(leavingRecords.reverse(), \"beforeRouteLeave\", to, from);\n\t\tfor (const record of leavingRecords) record.leaveGuards.forEach((guard) => {\n\t\t\tguards.push(guardToPromiseFn(guard, to, from));\n\t\t});\n\t\tconst canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from);\n\t\tguards.push(canceledNavigationCheck);\n\t\treturn runGuardQueue(guards).then(() => {\n\t\t\tguards = [];\n\t\t\tfor (const guard of beforeGuards.list()) guards.push(guardToPromiseFn(guard, to, from));\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).then(() => {\n\t\t\tguards = extractComponentsGuards(updatingRecords, \"beforeRouteUpdate\", to, from);\n\t\t\tfor (const record of updatingRecords) record.updateGuards.forEach((guard) => {\n\t\t\t\tguards.push(guardToPromiseFn(guard, to, from));\n\t\t\t});\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).then(() => {\n\t\t\tguards = [];\n\t\t\tfor (const record of enteringRecords) if (record.beforeEnter) if (isArray(record.beforeEnter)) for (const beforeEnter of record.beforeEnter) guards.push(guardToPromiseFn(beforeEnter, to, from));\n\t\t\telse guards.push(guardToPromiseFn(record.beforeEnter, to, from));\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).then(() => {\n\t\t\tto.matched.forEach((record) => record.enterCallbacks = {});\n\t\t\tguards = extractComponentsGuards(enteringRecords, \"beforeRouteEnter\", to, from, runWithContext);\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).then(() => {\n\t\t\tguards = [];\n\t\t\tfor (const guard of beforeResolveGuards.list()) guards.push(guardToPromiseFn(guard, to, from));\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).catch((err) => isNavigationFailure(err, 8) ? err : Promise.reject(err));\n\t}\n\tfunction triggerAfterEach(to, from, failure) {\n\t\tafterGuards.list().forEach((guard) => runWithContext(() => guard(to, from, failure)));\n\t}\n\t/**\n\t* - Cleans up any navigation guards\n\t* - Changes the url if necessary\n\t* - Calls the scrollBehavior\n\t*/\n\tfunction finalizeNavigation(toLocation, from, isPush, replace, data) {\n\t\tconst error = checkCanceledNavigation(toLocation, from);\n\t\tif (error) return error;\n\t\tconst isFirstNavigation = from === START_LOCATION_NORMALIZED;\n\t\tconst state = !isBrowser ? {} : history.state;\n\t\tif (isPush) if (replace || isFirstNavigation) routerHistory.replace(toLocation.fullPath, assign({ scroll: isFirstNavigation && state && state.scroll }, data));\n\t\telse routerHistory.push(toLocation.fullPath, data);\n\t\tcurrentRoute.value = toLocation;\n\t\thandleScroll(toLocation, from, isPush, isFirstNavigation);\n\t\tmarkAsReady();\n\t}\n\tlet removeHistoryListener;\n\tfunction setupListeners() {\n\t\tif (removeHistoryListener) return;\n\t\tremoveHistoryListener = routerHistory.listen((to, _from, info) => {\n\t\t\tif (!router.listening) return;\n\t\t\tconst toLocation = resolve(to);\n\t\t\tconst shouldRedirect = handleRedirectRecord(toLocation, router.currentRoute.value);\n\t\t\tif (shouldRedirect) {\n\t\t\t\tpushWithRedirect(assign(shouldRedirect, {\n\t\t\t\t\treplace: true,\n\t\t\t\t\tforce: true\n\t\t\t\t}), toLocation).catch(noop);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpendingLocation = toLocation;\n\t\t\tconst from = currentRoute.value;\n\t\t\tif (isBrowser) saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition());\n\t\t\tnavigate(toLocation, from).catch((error) => {\n\t\t\t\tif (isNavigationFailure(error, 12)) return error;\n\t\t\t\tif (isNavigationFailure(error, 2)) {\n\t\t\t\t\tpushWithRedirect(assign(locationAsObject(error.to), { force: true }), toLocation).then((failure) => {\n\t\t\t\t\t\tif (isNavigationFailure(failure, 20) && !info.delta && info.type === \"pop\") routerHistory.go(-1, false);\n\t\t\t\t\t}).catch(noop);\n\t\t\t\t\treturn Promise.reject();\n\t\t\t\t}\n\t\t\t\tif (info.delta) routerHistory.go(-info.delta, false);\n\t\t\t\treturn triggerError(error, toLocation, from);\n\t\t\t}).then((failure) => {\n\t\t\t\tfailure = failure || finalizeNavigation(toLocation, from, false);\n\t\t\t\tif (failure) {\n\t\t\t\t\tif (info.delta && !isNavigationFailure(failure, 8)) routerHistory.go(-info.delta, false);\n\t\t\t\t\telse if (info.type === \"pop\" && isNavigationFailure(failure, 20)) routerHistory.go(-1, false);\n\t\t\t\t}\n\t\t\t\ttriggerAfterEach(toLocation, from, failure);\n\t\t\t}).catch(noop);\n\t\t});\n\t}\n\tlet readyHandlers = useCallbacks();\n\tlet errorListeners = useCallbacks();\n\tlet ready;\n\t/**\n\t* Trigger errorListeners added via onError and throws the error as well\n\t*\n\t* @param error - error to throw\n\t* @param to - location we were navigating to when the error happened\n\t* @param from - location we were navigating from when the error happened\n\t* @returns the error as a rejected promise\n\t*/\n\tfunction triggerError(error, to, from) {\n\t\tmarkAsReady(error);\n\t\tconst list = errorListeners.list();\n\t\tif (list.length) list.forEach((handler) => handler(error, to, from));\n\t\telse {\n\t\t\tif (process.env.NODE_ENV !== \"production\") warn$1(\"uncaught error during route navigation:\");\n\t\t\tconsole.error(error);\n\t\t}\n\t\treturn Promise.reject(error);\n\t}\n\tfunction isReady() {\n\t\tif (ready && currentRoute.value !== START_LOCATION_NORMALIZED) return Promise.resolve();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\treadyHandlers.add([resolve, reject]);\n\t\t});\n\t}\n\tfunction markAsReady(err) {\n\t\tif (!ready) {\n\t\t\tready = !err;\n\t\t\tsetupListeners();\n\t\t\treadyHandlers.list().forEach(([resolve, reject]) => err ? reject(err) : resolve());\n\t\t\treadyHandlers.reset();\n\t\t}\n\t\treturn err;\n\t}\n\tfunction handleScroll(to, from, isPush, isFirstNavigation) {\n\t\tconst { scrollBehavior } = options;\n\t\tif (!isBrowser || !scrollBehavior) return Promise.resolve();\n\t\tconst scrollPosition = !isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0)) || (isFirstNavigation || !isPush) && history.state && history.state.scroll || null;\n\t\treturn nextTick().then(() => scrollBehavior(to, from, scrollPosition)).then((position) => position && scrollToPosition(position)).catch((err) => triggerError(err, to, from));\n\t}\n\tconst go = (delta) => routerHistory.go(delta);\n\tlet started;\n\tconst installedApps = /* @__PURE__ */ new Set();\n\tconst router = {\n\t\tcurrentRoute,\n\t\tlistening: true,\n\t\taddRoute,\n\t\tremoveRoute,\n\t\tclearRoutes: matcher.clearRoutes,\n\t\thasRoute,\n\t\tgetRoutes,\n\t\tresolve,\n\t\toptions,\n\t\tpush,\n\t\treplace,\n\t\tgo,\n\t\tback: () => go(-1),\n\t\tforward: () => go(1),\n\t\tbeforeEach: beforeGuards.add,\n\t\tbeforeResolve: beforeResolveGuards.add,\n\t\tafterEach: afterGuards.add,\n\t\tonError: errorListeners.add,\n\t\tisReady,\n\t\tinstall(app) {\n\t\t\tapp.component(\"RouterLink\", RouterLink);\n\t\t\tapp.component(\"RouterView\", RouterView);\n\t\t\tapp.config.globalProperties.$router = router;\n\t\t\tObject.defineProperty(app.config.globalProperties, \"$route\", {\n\t\t\t\tenumerable: true,\n\t\t\t\tget: () => unref(currentRoute)\n\t\t\t});\n\t\t\tif (isBrowser && !started && currentRoute.value === START_LOCATION_NORMALIZED) {\n\t\t\t\tstarted = true;\n\t\t\t\tpush(routerHistory.location).catch((err) => {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") warn$1(\"Unexpected error when starting the router:\", err);\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst reactiveRoute = {};\n\t\t\tfor (const key in START_LOCATION_NORMALIZED) Object.defineProperty(reactiveRoute, key, {\n\t\t\t\tget: () => currentRoute.value[key],\n\t\t\t\tenumerable: true\n\t\t\t});\n\t\t\tapp.provide(routerKey, router);\n\t\t\tapp.provide(routeLocationKey, shallowReactive(reactiveRoute));\n\t\t\tapp.provide(routerViewLocationKey, currentRoute);\n\t\t\tconst unmountApp = app.unmount;\n\t\t\tinstalledApps.add(app);\n\t\t\tapp.unmount = function() {\n\t\t\t\tinstalledApps.delete(app);\n\t\t\t\tif (installedApps.size < 1) {\n\t\t\t\t\tpendingLocation = START_LOCATION_NORMALIZED;\n\t\t\t\t\tremoveHistoryListener && removeHistoryListener();\n\t\t\t\t\tremoveHistoryListener = null;\n\t\t\t\t\tcurrentRoute.value = START_LOCATION_NORMALIZED;\n\t\t\t\t\tstarted = false;\n\t\t\t\t\tready = false;\n\t\t\t\t}\n\t\t\t\tunmountApp();\n\t\t\t};\n\t\t\tif ((process.env.NODE_ENV !== \"production\" || __VUE_PROD_DEVTOOLS__) && isBrowser && true) addDevtools(app, router, matcher);\n\t\t}\n\t};\n\tfunction runGuardQueue(guards) {\n\t\treturn guards.reduce((promise, guard) => promise.then(() => runWithContext(guard)), Promise.resolve());\n\t}\n\treturn router;\n}\n//#endregion\nexport { NavigationFailureType, RouterLink, RouterView, START_LOCATION_NORMALIZED as START_LOCATION, createMemoryHistory, createRouter, createRouterMatcher, createWebHashHistory, createWebHistory, isNavigationFailure, loadRouteLocation, matchedRouteKey, onBeforeRouteLeave, onBeforeRouteUpdate, parseQuery, routeLocationKey, routerKey, routerViewLocationKey, stringifyQuery, useLink, useRoute, useRouter, viewDepthKey };\n","/*!\n * pinia v3.0.4\n * (c) 2025 Eduardo San Martin Morote\n * @license MIT\n */\nimport { hasInjectionContext, inject, toRaw, watch, unref, markRaw, effectScope, ref, isRef, isReactive, getCurrentScope, onScopeDispose, getCurrentInstance, reactive, toRef, nextTick, computed, toRefs } from 'vue';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\nconst IS_CLIENT = typeof window !== 'undefined';\n\n/**\n * setActivePinia must be called to handle SSR at the top of functions like\n * `fetch`, `setup`, `serverPrefetch` and others\n */\nlet activePinia;\n/**\n * Sets or unsets the active pinia. Used in SSR and internally when calling\n * actions and getters\n *\n * @param pinia - Pinia instance\n */\n// @ts-expect-error: cannot constrain the type of the return\nconst setActivePinia = (pinia) => (activePinia = pinia);\n/**\n * Get the currently active pinia if there is any.\n */\nconst getActivePinia = (process.env.NODE_ENV !== 'production')\n ? () => {\n const pinia = hasInjectionContext() && inject(piniaSymbol);\n if (!pinia && !IS_CLIENT) {\n console.error(`[🍍]: Pinia instance not found in context. This falls back to the global activePinia which exposes you to cross-request pollution on the server. Most of the time, it means you are calling \"useStore()\" in the wrong place.\\n` +\n `Read https://vuejs.org/guide/reusability/composables.html to learn more`);\n }\n return pinia || activePinia;\n }\n : () => (hasInjectionContext() && inject(piniaSymbol)) || activePinia;\nconst piniaSymbol = ((process.env.NODE_ENV !== 'production') ? Symbol('pinia') : /* istanbul ignore next */ Symbol());\n\nfunction isPlainObject(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\no) {\n return (o &&\n typeof o === 'object' &&\n Object.prototype.toString.call(o) === '[object Object]' &&\n typeof o.toJSON !== 'function');\n}\n// type DeepReadonly = { readonly [P in keyof T]: DeepReadonly }\n// TODO: can we change these to numbers?\n/**\n * Possible types for SubscriptionCallback\n */\nvar MutationType;\n(function (MutationType) {\n /**\n * Direct mutation of the state:\n *\n * - `store.name = 'new name'`\n * - `store.$state.name = 'new name'`\n * - `store.list.push('new item')`\n */\n MutationType[\"direct\"] = \"direct\";\n /**\n * Mutated the state with `$patch` and an object\n *\n * - `store.$patch({ name: 'newName' })`\n */\n MutationType[\"patchObject\"] = \"patch object\";\n /**\n * Mutated the state with `$patch` and a function\n *\n * - `store.$patch(state => state.name = 'newName')`\n */\n MutationType[\"patchFunction\"] = \"patch function\";\n // maybe reset? for $state = {} and $reset\n})(MutationType || (MutationType = {}));\n\n/*\n * FileSaver.js A saveAs() FileSaver implementation.\n *\n * Originally by Eli Grey, adapted as an ESM module by Eduardo San Martin\n * Morote.\n *\n * License : MIT\n */\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nconst _global = /*#__PURE__*/ (() => typeof window === 'object' && window.window === window\n ? window\n : typeof self === 'object' && self.self === self\n ? self\n : typeof global === 'object' && global.global === global\n ? global\n : typeof globalThis === 'object'\n ? globalThis\n : { HTMLElement: null })();\nfunction bom(blob, { autoBom = false } = {}) {\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (autoBom &&\n /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n }\n return blob;\n}\nfunction download(url, name, opts) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n xhr.onload = function () {\n saveAs(xhr.response, name, opts);\n };\n xhr.onerror = function () {\n console.error('could not download file');\n };\n xhr.send();\n}\nfunction corsEnabled(url) {\n const xhr = new XMLHttpRequest();\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false);\n try {\n xhr.send();\n }\n catch (e) { }\n return xhr.status >= 200 && xhr.status <= 299;\n}\n// `a.click()` doesn't work for all browsers (#465)\nfunction click(node) {\n try {\n node.dispatchEvent(new MouseEvent('click'));\n }\n catch (e) {\n const evt = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window,\n detail: 0,\n screenX: 80,\n screenY: 20,\n clientX: 80,\n clientY: 20,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n button: 0,\n relatedTarget: null,\n });\n node.dispatchEvent(evt);\n }\n}\nconst _navigator = typeof navigator === 'object' ? navigator : { userAgent: '' };\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nconst isMacOSWebView = /*#__PURE__*/ (() => /Macintosh/.test(_navigator.userAgent) &&\n /AppleWebKit/.test(_navigator.userAgent) &&\n !/Safari/.test(_navigator.userAgent))();\nconst saveAs = !IS_CLIENT\n ? () => { } // noop\n : // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program\n typeof HTMLAnchorElement !== 'undefined' &&\n 'download' in HTMLAnchorElement.prototype &&\n !isMacOSWebView\n ? downloadSaveAs\n : // Use msSaveOrOpenBlob as a second approach\n 'msSaveOrOpenBlob' in _navigator\n ? msSaveAs\n : // Fallback to using FileReader and a popup\n fileSaverSaveAs;\nfunction downloadSaveAs(blob, name = 'download', opts) {\n const a = document.createElement('a');\n a.download = name;\n a.rel = 'noopener'; // tabnabbing\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob;\n if (a.origin !== location.origin) {\n if (corsEnabled(a.href)) {\n download(blob, name, opts);\n }\n else {\n a.target = '_blank';\n click(a);\n }\n }\n else {\n click(a);\n }\n }\n else {\n // Support blobs\n a.href = URL.createObjectURL(blob);\n setTimeout(function () {\n URL.revokeObjectURL(a.href);\n }, 4e4); // 40s\n setTimeout(function () {\n click(a);\n }, 0);\n }\n}\nfunction msSaveAs(blob, name = 'download', opts) {\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts);\n }\n else {\n const a = document.createElement('a');\n a.href = blob;\n a.target = '_blank';\n setTimeout(function () {\n click(a);\n });\n }\n }\n else {\n // @ts-ignore: works on windows\n navigator.msSaveOrOpenBlob(bom(blob, opts), name);\n }\n}\nfunction fileSaverSaveAs(blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank');\n if (popup) {\n popup.document.title = popup.document.body.innerText = 'downloading...';\n }\n if (typeof blob === 'string')\n return download(blob, name, opts);\n const force = blob.type === 'application/octet-stream';\n const isSafari = /constructor/i.test(String(_global.HTMLElement)) || 'safari' in _global;\n const isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) &&\n typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n const reader = new FileReader();\n reader.onloadend = function () {\n let url = reader.result;\n if (typeof url !== 'string') {\n popup = null;\n throw new Error('Wrong reader.result type');\n }\n url = isChromeIOS\n ? url\n : url.replace(/^data:[^;]*;/, 'data:attachment/file;');\n if (popup) {\n popup.location.href = url;\n }\n else {\n location.assign(url);\n }\n popup = null; // reverse-tabnabbing #460\n };\n reader.readAsDataURL(blob);\n }\n else {\n const url = URL.createObjectURL(blob);\n if (popup)\n popup.location.assign(url);\n else\n location.href = url;\n popup = null; // reverse-tabnabbing #460\n setTimeout(function () {\n URL.revokeObjectURL(url);\n }, 4e4); // 40s\n }\n}\n\n/**\n * Shows a toast or console.log\n *\n * @param message - message to log\n * @param type - different color of the tooltip\n */\nfunction toastMessage(message, type) {\n const piniaMessage = '🍍 ' + message;\n if (typeof __VUE_DEVTOOLS_TOAST__ === 'function') {\n // No longer available :(\n __VUE_DEVTOOLS_TOAST__(piniaMessage, type);\n }\n else if (type === 'error') {\n console.error(piniaMessage);\n }\n else if (type === 'warn') {\n console.warn(piniaMessage);\n }\n else {\n console.log(piniaMessage);\n }\n}\nfunction isPinia(o) {\n return '_a' in o && 'install' in o;\n}\n\n/**\n * This file contain devtools actions, they are not Pinia actions.\n */\n// ---\nfunction checkClipboardAccess() {\n if (!('clipboard' in navigator)) {\n toastMessage(`Your browser doesn't support the Clipboard API`, 'error');\n return true;\n }\n}\nfunction checkNotFocusedError(error) {\n if (error instanceof Error &&\n error.message.toLowerCase().includes('document is not focused')) {\n toastMessage('You need to activate the \"Emulate a focused page\" setting in the \"Rendering\" panel of devtools.', 'warn');\n return true;\n }\n return false;\n}\nasync function actionGlobalCopyState(pinia) {\n if (checkClipboardAccess())\n return;\n try {\n await navigator.clipboard.writeText(JSON.stringify(pinia.state.value));\n toastMessage('Global state copied to clipboard.');\n }\n catch (error) {\n if (checkNotFocusedError(error))\n return;\n toastMessage(`Failed to serialize the state. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nasync function actionGlobalPasteState(pinia) {\n if (checkClipboardAccess())\n return;\n try {\n loadStoresState(pinia, JSON.parse(await navigator.clipboard.readText()));\n toastMessage('Global state pasted from clipboard.');\n }\n catch (error) {\n if (checkNotFocusedError(error))\n return;\n toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nasync function actionGlobalSaveState(pinia) {\n try {\n saveAs(new Blob([JSON.stringify(pinia.state.value)], {\n type: 'text/plain;charset=utf-8',\n }), 'pinia-state.json');\n }\n catch (error) {\n toastMessage(`Failed to export the state as JSON. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nlet fileInput;\nfunction getFileOpener() {\n if (!fileInput) {\n fileInput = document.createElement('input');\n fileInput.type = 'file';\n fileInput.accept = '.json';\n }\n function openFile() {\n return new Promise((resolve, reject) => {\n fileInput.onchange = async () => {\n const files = fileInput.files;\n if (!files)\n return resolve(null);\n const file = files.item(0);\n if (!file)\n return resolve(null);\n return resolve({ text: await file.text(), file });\n };\n // @ts-ignore: TODO: changed from 4.3 to 4.4\n fileInput.oncancel = () => resolve(null);\n fileInput.onerror = reject;\n fileInput.click();\n });\n }\n return openFile;\n}\nasync function actionGlobalOpenStateFile(pinia) {\n try {\n const open = getFileOpener();\n const result = await open();\n if (!result)\n return;\n const { text, file } = result;\n loadStoresState(pinia, JSON.parse(text));\n toastMessage(`Global state imported from \"${file.name}\".`);\n }\n catch (error) {\n toastMessage(`Failed to import the state from JSON. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nfunction loadStoresState(pinia, state) {\n for (const key in state) {\n const storeState = pinia.state.value[key];\n // store is already instantiated, patch it\n if (storeState) {\n Object.assign(storeState, state[key]);\n }\n else {\n // store is not instantiated, set the initial state\n pinia.state.value[key] = state[key];\n }\n }\n}\n\nfunction formatDisplay(display) {\n return {\n _custom: {\n display,\n },\n };\n}\nconst PINIA_ROOT_LABEL = '🍍 Pinia (root)';\nconst PINIA_ROOT_ID = '_root';\nfunction formatStoreForInspectorTree(store) {\n return isPinia(store)\n ? {\n id: PINIA_ROOT_ID,\n label: PINIA_ROOT_LABEL,\n }\n : {\n id: store.$id,\n label: store.$id,\n };\n}\nfunction formatStoreForInspectorState(store) {\n if (isPinia(store)) {\n const storeNames = Array.from(store._s.keys());\n const storeMap = store._s;\n const state = {\n state: storeNames.map((storeId) => ({\n editable: true,\n key: storeId,\n value: store.state.value[storeId],\n })),\n getters: storeNames\n .filter((id) => storeMap.get(id)._getters)\n .map((id) => {\n const store = storeMap.get(id);\n return {\n editable: false,\n key: id,\n value: store._getters.reduce((getters, key) => {\n getters[key] = store[key];\n return getters;\n }, {}),\n };\n }),\n };\n return state;\n }\n const state = {\n state: Object.keys(store.$state).map((key) => ({\n editable: true,\n key,\n value: store.$state[key],\n })),\n };\n // avoid adding empty getters\n if (store._getters && store._getters.length) {\n state.getters = store._getters.map((getterName) => ({\n editable: false,\n key: getterName,\n value: store[getterName],\n }));\n }\n if (store._customProperties.size) {\n state.customProperties = Array.from(store._customProperties).map((key) => ({\n editable: true,\n key,\n value: store[key],\n }));\n }\n return state;\n}\nfunction formatEventData(events) {\n if (!events)\n return {};\n if (Array.isArray(events)) {\n // TODO: handle add and delete for arrays and objects\n return events.reduce((data, event) => {\n data.keys.push(event.key);\n data.operations.push(event.type);\n data.oldValue[event.key] = event.oldValue;\n data.newValue[event.key] = event.newValue;\n return data;\n }, {\n oldValue: {},\n keys: [],\n operations: [],\n newValue: {},\n });\n }\n else {\n return {\n operation: formatDisplay(events.type),\n key: formatDisplay(events.key),\n oldValue: events.oldValue,\n newValue: events.newValue,\n };\n }\n}\nfunction formatMutationType(type) {\n switch (type) {\n case MutationType.direct:\n return 'mutation';\n case MutationType.patchFunction:\n return '$patch';\n case MutationType.patchObject:\n return '$patch';\n default:\n return 'unknown';\n }\n}\n\n// timeline can be paused when directly changing the state\nlet isTimelineActive = true;\nconst componentStateTypes = [];\nconst MUTATIONS_LAYER_ID = 'pinia:mutations';\nconst INSPECTOR_ID = 'pinia';\nconst { assign: assign$1 } = Object;\n/**\n * Gets the displayed name of a store in devtools\n *\n * @param id - id of the store\n * @returns a formatted string\n */\nconst getStoreType = (id) => '🍍 ' + id;\n/**\n * Add the pinia plugin without any store. Allows displaying a Pinia plugin tab\n * as soon as it is added to the application.\n *\n * @param app - Vue application\n * @param pinia - pinia instance\n */\nfunction registerPiniaDevtools(app, pinia) {\n setupDevtoolsPlugin({\n id: 'dev.esm.pinia',\n label: 'Pinia 🍍',\n logo: 'https://pinia.vuejs.org/logo.svg',\n packageName: 'pinia',\n homepage: 'https://pinia.vuejs.org',\n componentStateTypes,\n app,\n }, (api) => {\n if (typeof api.now !== 'function') {\n toastMessage('You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.');\n }\n api.addTimelineLayer({\n id: MUTATIONS_LAYER_ID,\n label: `Pinia 🍍`,\n color: 0xe5df88,\n });\n api.addInspector({\n id: INSPECTOR_ID,\n label: 'Pinia 🍍',\n icon: 'storage',\n treeFilterPlaceholder: 'Search stores',\n actions: [\n {\n icon: 'content_copy',\n action: () => {\n actionGlobalCopyState(pinia);\n },\n tooltip: 'Serialize and copy the state',\n },\n {\n icon: 'content_paste',\n action: async () => {\n await actionGlobalPasteState(pinia);\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n },\n tooltip: 'Replace the state with the content of your clipboard',\n },\n {\n icon: 'save',\n action: () => {\n actionGlobalSaveState(pinia);\n },\n tooltip: 'Save the state as a JSON file',\n },\n {\n icon: 'folder_open',\n action: async () => {\n await actionGlobalOpenStateFile(pinia);\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n },\n tooltip: 'Import the state from a JSON file',\n },\n ],\n nodeActions: [\n {\n icon: 'restore',\n tooltip: 'Reset the state (with \"$reset\")',\n action: (nodeId) => {\n const store = pinia._s.get(nodeId);\n if (!store) {\n toastMessage(`Cannot reset \"${nodeId}\" store because it wasn't found.`, 'warn');\n }\n else if (typeof store.$reset !== 'function') {\n toastMessage(`Cannot reset \"${nodeId}\" store because it doesn't have a \"$reset\" method implemented.`, 'warn');\n }\n else {\n store.$reset();\n toastMessage(`Store \"${nodeId}\" reset.`);\n }\n },\n },\n ],\n });\n api.on.inspectComponent((payload) => {\n const proxy = (payload.componentInstance &&\n payload.componentInstance.proxy);\n if (proxy && proxy._pStores) {\n const piniaStores = payload.componentInstance.proxy._pStores;\n Object.values(piniaStores).forEach((store) => {\n payload.instanceData.state.push({\n type: getStoreType(store.$id),\n key: 'state',\n editable: true,\n value: store._isOptionsAPI\n ? {\n _custom: {\n value: toRaw(store.$state),\n actions: [\n {\n icon: 'restore',\n tooltip: 'Reset the state of this store',\n action: () => store.$reset(),\n },\n ],\n },\n }\n : // NOTE: workaround to unwrap transferred refs\n Object.keys(store.$state).reduce((state, key) => {\n state[key] = store.$state[key];\n return state;\n }, {}),\n });\n if (store._getters && store._getters.length) {\n payload.instanceData.state.push({\n type: getStoreType(store.$id),\n key: 'getters',\n editable: false,\n value: store._getters.reduce((getters, key) => {\n try {\n getters[key] = store[key];\n }\n catch (error) {\n // @ts-expect-error: we just want to show it in devtools\n getters[key] = error;\n }\n return getters;\n }, {}),\n });\n }\n });\n }\n });\n api.on.getInspectorTree((payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n let stores = [pinia];\n stores = stores.concat(Array.from(pinia._s.values()));\n payload.rootNodes = (payload.filter\n ? stores.filter((store) => '$id' in store\n ? store.$id\n .toLowerCase()\n .includes(payload.filter.toLowerCase())\n : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase()))\n : stores).map(formatStoreForInspectorTree);\n }\n });\n // Expose pinia instance as $pinia to window\n globalThis.$pinia = pinia;\n api.on.getInspectorState((payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n const inspectedStore = payload.nodeId === PINIA_ROOT_ID\n ? pinia\n : pinia._s.get(payload.nodeId);\n if (!inspectedStore) {\n // this could be the selected store restored for a different project\n // so it's better not to say anything here\n return;\n }\n if (inspectedStore) {\n // Expose selected store as $store to window\n if (payload.nodeId !== PINIA_ROOT_ID)\n globalThis.$store = toRaw(inspectedStore);\n payload.state = formatStoreForInspectorState(inspectedStore);\n }\n }\n });\n api.on.editInspectorState((payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n const inspectedStore = payload.nodeId === PINIA_ROOT_ID\n ? pinia\n : pinia._s.get(payload.nodeId);\n if (!inspectedStore) {\n return toastMessage(`store \"${payload.nodeId}\" not found`, 'error');\n }\n const { path } = payload;\n if (!isPinia(inspectedStore)) {\n // access only the state\n if (path.length !== 1 ||\n !inspectedStore._customProperties.has(path[0]) ||\n path[0] in inspectedStore.$state) {\n path.unshift('$state');\n }\n }\n else {\n // Root access, we can omit the `.value` because the devtools API does it for us\n path.unshift('state');\n }\n isTimelineActive = false;\n payload.set(inspectedStore, path, payload.state.value);\n isTimelineActive = true;\n }\n });\n api.on.editComponentState((payload) => {\n if (payload.type.startsWith('🍍')) {\n const storeId = payload.type.replace(/^🍍\\s*/, '');\n const store = pinia._s.get(storeId);\n if (!store) {\n return toastMessage(`store \"${storeId}\" not found`, 'error');\n }\n const { path } = payload;\n if (path[0] !== 'state') {\n return toastMessage(`Invalid path for store \"${storeId}\":\\n${path}\\nOnly state can be modified.`);\n }\n // rewrite the first entry to be able to directly set the state as\n // well as any other path\n path[0] = '$state';\n isTimelineActive = false;\n payload.set(store, path, payload.state.value);\n isTimelineActive = true;\n }\n });\n });\n}\nfunction addStoreToDevtools(app, store) {\n if (!componentStateTypes.includes(getStoreType(store.$id))) {\n componentStateTypes.push(getStoreType(store.$id));\n }\n setupDevtoolsPlugin({\n id: 'dev.esm.pinia',\n label: 'Pinia 🍍',\n logo: 'https://pinia.vuejs.org/logo.svg',\n packageName: 'pinia',\n homepage: 'https://pinia.vuejs.org',\n componentStateTypes,\n app,\n settings: {\n logStoreChanges: {\n label: 'Notify about new/deleted stores',\n type: 'boolean',\n defaultValue: true,\n },\n // useEmojis: {\n // label: 'Use emojis in messages ⚡️',\n // type: 'boolean',\n // defaultValue: true,\n // },\n },\n }, (api) => {\n // gracefully handle errors\n const now = typeof api.now === 'function' ? api.now.bind(api) : Date.now;\n store.$onAction(({ after, onError, name, args }) => {\n const groupId = runningActionId++;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🛫 ' + name,\n subtitle: 'start',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n },\n groupId,\n },\n });\n after((result) => {\n activeAction = undefined;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🛬 ' + name,\n subtitle: 'end',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n result,\n },\n groupId,\n },\n });\n });\n onError((error) => {\n activeAction = undefined;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n logType: 'error',\n title: '💥 ' + name,\n subtitle: 'end',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n error,\n },\n groupId,\n },\n });\n });\n }, true);\n store._customProperties.forEach((name) => {\n watch(() => unref(store[name]), (newValue, oldValue) => {\n api.notifyComponentUpdate();\n api.sendInspectorState(INSPECTOR_ID);\n if (isTimelineActive) {\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: 'Change',\n subtitle: name,\n data: {\n newValue,\n oldValue,\n },\n groupId: activeAction,\n },\n });\n }\n }, { deep: true });\n });\n store.$subscribe(({ events, type }, state) => {\n api.notifyComponentUpdate();\n api.sendInspectorState(INSPECTOR_ID);\n if (!isTimelineActive)\n return;\n // rootStore.state[store.id] = state\n const eventData = {\n time: now(),\n title: formatMutationType(type),\n data: assign$1({ store: formatDisplay(store.$id) }, formatEventData(events)),\n groupId: activeAction,\n };\n if (type === MutationType.patchFunction) {\n eventData.subtitle = '⤵️';\n }\n else if (type === MutationType.patchObject) {\n eventData.subtitle = '🧩';\n }\n else if (events && !Array.isArray(events)) {\n eventData.subtitle = events.type;\n }\n if (events) {\n eventData.data['rawEvent(s)'] = {\n _custom: {\n display: 'DebuggerEvent',\n type: 'object',\n tooltip: 'raw DebuggerEvent[]',\n value: events,\n },\n };\n }\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: eventData,\n });\n }, { detached: true, flush: 'sync' });\n const hotUpdate = store._hotUpdate;\n store._hotUpdate = markRaw((newStore) => {\n hotUpdate(newStore);\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🔥 ' + store.$id,\n subtitle: 'HMR update',\n data: {\n store: formatDisplay(store.$id),\n info: formatDisplay(`HMR update`),\n },\n },\n });\n // update the devtools too\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n });\n const { $dispose } = store;\n store.$dispose = () => {\n $dispose();\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n api.getSettings().logStoreChanges &&\n toastMessage(`Disposed \"${store.$id}\" store 🗑`);\n };\n // trigger an update so it can display new registered stores\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n api.getSettings().logStoreChanges &&\n toastMessage(`\"${store.$id}\" store installed 🆕`);\n });\n}\nlet runningActionId = 0;\nlet activeAction;\n/**\n * Patches a store to enable action grouping in devtools by wrapping the store with a Proxy that is passed as the\n * context of all actions, allowing us to set `runningAction` on each access and effectively associating any state\n * mutation to the action.\n *\n * @param store - store to patch\n * @param actionNames - list of actionst to patch\n */\nfunction patchActionForGrouping(store, actionNames, wrapWithProxy) {\n // original actions of the store as they are given by pinia. We are going to override them\n const actions = actionNames.reduce((storeActions, actionName) => {\n // use toRaw to avoid tracking #541\n storeActions[actionName] = toRaw(store)[actionName];\n return storeActions;\n }, {});\n for (const actionName in actions) {\n store[actionName] = function () {\n // the running action id is incremented in a before action hook\n const _actionId = runningActionId;\n const trackedStore = wrapWithProxy\n ? new Proxy(store, {\n get(...args) {\n activeAction = _actionId;\n return Reflect.get(...args);\n },\n set(...args) {\n activeAction = _actionId;\n return Reflect.set(...args);\n },\n })\n : store;\n // For Setup Stores we need https://github.com/tc39/proposal-async-context\n activeAction = _actionId;\n const retValue = actions[actionName].apply(trackedStore, arguments);\n // this is safer as async actions in Setup Stores would associate mutations done outside of the action\n activeAction = undefined;\n return retValue;\n };\n }\n}\n/**\n * pinia.use(devtoolsPlugin)\n */\nfunction devtoolsPlugin({ app, store, options }) {\n // HMR module\n if (store.$id.startsWith('__hot:')) {\n return;\n }\n // detect option api vs setup api\n store._isOptionsAPI = !!options.state;\n // Do not overwrite actions mocked by @pinia/testing (#2298)\n if (!store._p._testing) {\n patchActionForGrouping(store, Object.keys(options.actions), store._isOptionsAPI);\n // Upgrade the HMR to also update the new actions\n const originalHotUpdate = store._hotUpdate;\n toRaw(store)._hotUpdate = function (newStore) {\n originalHotUpdate.apply(this, arguments);\n patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions), !!store._isOptionsAPI);\n };\n }\n addStoreToDevtools(app, \n // FIXME: is there a way to allow the assignment from Store to StoreGeneric?\n store);\n}\n\n/**\n * Creates a Pinia instance to be used by the application\n */\nfunction createPinia() {\n const scope = effectScope(true);\n // NOTE: here we could check the window object for a state and directly set it\n // if there is anything like it with Vue 3 SSR\n const state = scope.run(() => ref({}));\n let _p = [];\n // plugins added before calling app.use(pinia)\n let toBeInstalled = [];\n const pinia = markRaw({\n install(app) {\n // this allows calling useStore() outside of a component setup after\n // installing pinia's plugin\n setActivePinia(pinia);\n pinia._a = app;\n app.provide(piniaSymbol, pinia);\n app.config.globalProperties.$pinia = pinia;\n /* istanbul ignore else */\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n registerPiniaDevtools(app, pinia);\n }\n toBeInstalled.forEach((plugin) => _p.push(plugin));\n toBeInstalled = [];\n },\n use(plugin) {\n if (!this._a) {\n toBeInstalled.push(plugin);\n }\n else {\n _p.push(plugin);\n }\n return this;\n },\n _p,\n // it's actually undefined here\n // @ts-expect-error\n _a: null,\n _e: scope,\n _s: new Map(),\n state,\n });\n // pinia devtools rely on dev only features so they cannot be forced unless\n // the dev build of Vue is used. Avoid old browsers like IE11.\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT && typeof Proxy !== 'undefined') {\n pinia.use(devtoolsPlugin);\n }\n return pinia;\n}\n/**\n * Dispose a Pinia instance by stopping its effectScope and removing the state, plugins and stores. This is mostly\n * useful in tests, with both a testing pinia or a regular pinia and in applications that use multiple pinia instances.\n * Once disposed, the pinia instance cannot be used anymore.\n *\n * @param pinia - pinia instance\n */\nfunction disposePinia(pinia) {\n pinia._e.stop();\n pinia._s.clear();\n pinia._p.splice(0);\n pinia.state.value = {};\n // @ts-expect-error: non valid\n pinia._a = null;\n}\n\n/**\n * Checks if a function is a `StoreDefinition`.\n *\n * @param fn - object to test\n * @returns true if `fn` is a StoreDefinition\n */\nconst isUseStore = (fn) => {\n return typeof fn === 'function' && typeof fn.$id === 'string';\n};\n/**\n * Mutates in place `newState` with `oldState` to _hot update_ it. It will\n * remove any key not existing in `newState` and recursively merge plain\n * objects.\n *\n * @param newState - new state object to be patched\n * @param oldState - old state that should be used to patch newState\n * @returns - newState\n */\nfunction patchObject(newState, oldState) {\n // no need to go through symbols because they cannot be serialized anyway\n for (const key in oldState) {\n const subPatch = oldState[key];\n // skip the whole sub tree\n if (!(key in newState)) {\n continue;\n }\n const targetValue = newState[key];\n if (isPlainObject(targetValue) &&\n isPlainObject(subPatch) &&\n !isRef(subPatch) &&\n !isReactive(subPatch)) {\n newState[key] = patchObject(targetValue, subPatch);\n }\n else {\n // objects are either a bit more complex (e.g. refs) or primitives, so we\n // just set the whole thing\n newState[key] = subPatch;\n }\n }\n return newState;\n}\n/**\n * Creates an _accept_ function to pass to `import.meta.hot` in Vite applications.\n *\n * @example\n * ```js\n * const useUser = defineStore(...)\n * if (import.meta.hot) {\n * import.meta.hot.accept(acceptHMRUpdate(useUser, import.meta.hot))\n * }\n * ```\n *\n * @param initialUseStore - return of the defineStore to hot update\n * @param hot - `import.meta.hot`\n */\nfunction acceptHMRUpdate(initialUseStore, hot) {\n // strip as much as possible from iife.prod\n if (!(process.env.NODE_ENV !== 'production')) {\n return () => { };\n }\n return (newModule) => {\n const pinia = hot.data.pinia || initialUseStore._pinia;\n if (!pinia) {\n // this store is still not used\n return;\n }\n // preserve the pinia instance across loads\n hot.data.pinia = pinia;\n // console.log('got data', newStore)\n for (const exportName in newModule) {\n const useStore = newModule[exportName];\n // console.log('checking for', exportName)\n if (isUseStore(useStore) && pinia._s.has(useStore.$id)) {\n // console.log('Accepting update for', useStore.$id)\n const id = useStore.$id;\n if (id !== initialUseStore.$id) {\n console.warn(`The id of the store changed from \"${initialUseStore.$id}\" to \"${id}\". Reloading.`);\n // return import.meta.hot.invalidate()\n return hot.invalidate();\n }\n const existingStore = pinia._s.get(id);\n if (!existingStore) {\n console.log(`[Pinia]: skipping hmr because store doesn't exist yet`);\n return;\n }\n useStore(pinia, existingStore);\n }\n }\n };\n}\n\nconst noop = () => { };\nfunction addSubscription(subscriptions, callback, detached, onCleanup = noop) {\n subscriptions.add(callback);\n const removeSubscription = () => {\n const isDel = subscriptions.delete(callback);\n isDel && onCleanup();\n };\n if (!detached && getCurrentScope()) {\n onScopeDispose(removeSubscription);\n }\n return removeSubscription;\n}\nfunction triggerSubscriptions(subscriptions, ...args) {\n subscriptions.forEach((callback) => {\n callback(...args);\n });\n}\n\nconst fallbackRunWithContext = (fn) => fn();\n/**\n * Marks a function as an action for `$onAction`\n * @internal\n */\nconst ACTION_MARKER = Symbol();\n/**\n * Action name symbol. Allows to add a name to an action after defining it\n * @internal\n */\nconst ACTION_NAME = Symbol();\nfunction mergeReactiveObjects(target, patchToApply) {\n // Handle Map instances\n if (target instanceof Map && patchToApply instanceof Map) {\n patchToApply.forEach((value, key) => target.set(key, value));\n }\n else if (target instanceof Set && patchToApply instanceof Set) {\n // Handle Set instances\n patchToApply.forEach(target.add, target);\n }\n // no need to go through symbols because they cannot be serialized anyway\n for (const key in patchToApply) {\n if (!patchToApply.hasOwnProperty(key))\n continue;\n const subPatch = patchToApply[key];\n const targetValue = target[key];\n if (isPlainObject(targetValue) &&\n isPlainObject(subPatch) &&\n target.hasOwnProperty(key) &&\n !isRef(subPatch) &&\n !isReactive(subPatch)) {\n // NOTE: here I wanted to warn about inconsistent types but it's not possible because in setup stores one might\n // start the value of a property as a certain type e.g. a Map, and then for some reason, during SSR, change that\n // to `undefined`. When trying to hydrate, we want to override the Map with `undefined`.\n target[key] = mergeReactiveObjects(targetValue, subPatch);\n }\n else {\n // @ts-expect-error: subPatch is a valid value\n target[key] = subPatch;\n }\n }\n return target;\n}\nconst skipHydrateSymbol = (process.env.NODE_ENV !== 'production')\n ? Symbol('pinia:skipHydration')\n : /* istanbul ignore next */ Symbol();\n/**\n * Tells Pinia to skip the hydration process of a given object. This is useful in setup stores (only) when you return a\n * stateful object in the store but it isn't really state. e.g. returning a router instance in a setup store.\n *\n * @param obj - target object\n * @returns obj\n */\nfunction skipHydrate(obj) {\n return Object.defineProperty(obj, skipHydrateSymbol, {});\n}\n/**\n * Returns whether a value should be hydrated\n *\n * @param obj - target variable\n * @returns true if `obj` should be hydrated\n */\nfunction shouldHydrate(obj) {\n return (!isPlainObject(obj) ||\n !Object.prototype.hasOwnProperty.call(obj, skipHydrateSymbol));\n}\nconst { assign } = Object;\nfunction isComputed(o) {\n return !!(isRef(o) && o.effect);\n}\nfunction createOptionsStore(id, options, pinia, hot) {\n const { state, actions, getters } = options;\n const initialState = pinia.state.value[id];\n let store;\n function setup() {\n if (!initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\n /* istanbul ignore if */\n pinia.state.value[id] = state ? state() : {};\n }\n // avoid creating a state in pinia.state.value\n const localState = (process.env.NODE_ENV !== 'production') && hot\n ? // use ref() to unwrap refs inside state TODO: check if this is still necessary\n toRefs(ref(state ? state() : {}).value)\n : toRefs(pinia.state.value[id]);\n return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {\n if ((process.env.NODE_ENV !== 'production') && name in localState) {\n console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with \"${name}\" in store \"${id}\".`);\n }\n computedGetters[name] = markRaw(computed(() => {\n setActivePinia(pinia);\n // it was created just before\n const store = pinia._s.get(id);\n // allow cross using stores\n // @ts-expect-error\n // return getters![name].call(context, context)\n // TODO: avoid reading the getter while assigning with a global variable\n return getters[name].call(store, store);\n }));\n return computedGetters;\n }, {}));\n }\n store = createSetupStore(id, setup, options, pinia, hot, true);\n return store;\n}\nfunction createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {\n let scope;\n const optionsForPlugin = assign({ actions: {} }, options);\n /* istanbul ignore if */\n if ((process.env.NODE_ENV !== 'production') && !pinia._e.active) {\n throw new Error('Pinia destroyed');\n }\n // watcher options for $subscribe\n const $subscribeOptions = { deep: true };\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n $subscribeOptions.onTrigger = (event) => {\n /* istanbul ignore else */\n if (isListening) {\n debuggerEvents = event;\n // avoid triggering this while the store is being built and the state is being set in pinia\n }\n else if (isListening == false && !store._hotUpdating) {\n // let patch send all the events together later\n /* istanbul ignore else */\n if (Array.isArray(debuggerEvents)) {\n debuggerEvents.push(event);\n }\n else {\n console.error('🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.');\n }\n }\n };\n }\n // internal state\n let isListening; // set to true at the end\n let isSyncListening; // set to true at the end\n let subscriptions = new Set();\n let actionSubscriptions = new Set();\n let debuggerEvents;\n const initialState = pinia.state.value[$id];\n // avoid setting the state for option stores if it is set\n // by the setup\n if (!isOptionsStore && !initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\n /* istanbul ignore if */\n pinia.state.value[$id] = {};\n }\n const hotState = ref({});\n // avoid triggering too many listeners\n // https://github.com/vuejs/pinia/issues/1129\n let activeListener;\n function $patch(partialStateOrMutator) {\n let subscriptionMutation;\n isListening = isSyncListening = false;\n // reset the debugger events since patches are sync\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n debuggerEvents = [];\n }\n if (typeof partialStateOrMutator === 'function') {\n partialStateOrMutator(pinia.state.value[$id]);\n subscriptionMutation = {\n type: MutationType.patchFunction,\n storeId: $id,\n events: debuggerEvents,\n };\n }\n else {\n mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);\n subscriptionMutation = {\n type: MutationType.patchObject,\n payload: partialStateOrMutator,\n storeId: $id,\n events: debuggerEvents,\n };\n }\n const myListenerId = (activeListener = Symbol());\n nextTick().then(() => {\n if (activeListener === myListenerId) {\n isListening = true;\n }\n });\n isSyncListening = true;\n // because we paused the watcher, we need to manually call the subscriptions\n triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);\n }\n const $reset = isOptionsStore\n ? function $reset() {\n const { state } = options;\n const newState = state ? state() : {};\n // we use a patch to group all changes into one single subscription\n this.$patch(($state) => {\n // @ts-expect-error: FIXME: shouldn't error?\n assign($state, newState);\n });\n }\n : /* istanbul ignore next */\n (process.env.NODE_ENV !== 'production')\n ? () => {\n throw new Error(`🍍: Store \"${$id}\" is built using the setup syntax and does not implement $reset().`);\n }\n : noop;\n function $dispose() {\n scope.stop();\n subscriptions.clear();\n actionSubscriptions.clear();\n pinia._s.delete($id);\n }\n /**\n * Helper that wraps function so it can be tracked with $onAction\n * @param fn - action to wrap\n * @param name - name of the action\n */\n const action = (fn, name = '') => {\n if (ACTION_MARKER in fn) {\n fn[ACTION_NAME] = name;\n return fn;\n }\n const wrappedAction = function () {\n setActivePinia(pinia);\n const args = Array.from(arguments);\n const afterCallbackSet = new Set();\n const onErrorCallbackSet = new Set();\n function after(callback) {\n afterCallbackSet.add(callback);\n }\n function onError(callback) {\n onErrorCallbackSet.add(callback);\n }\n // @ts-expect-error\n triggerSubscriptions(actionSubscriptions, {\n args,\n name: wrappedAction[ACTION_NAME],\n store,\n after,\n onError,\n });\n let ret;\n try {\n ret = fn.apply(this && this.$id === $id ? this : store, args);\n // handle sync errors\n }\n catch (error) {\n triggerSubscriptions(onErrorCallbackSet, error);\n throw error;\n }\n if (ret instanceof Promise) {\n return ret\n .then((value) => {\n triggerSubscriptions(afterCallbackSet, value);\n return value;\n })\n .catch((error) => {\n triggerSubscriptions(onErrorCallbackSet, error);\n return Promise.reject(error);\n });\n }\n // trigger after callbacks\n triggerSubscriptions(afterCallbackSet, ret);\n return ret;\n };\n wrappedAction[ACTION_MARKER] = true;\n wrappedAction[ACTION_NAME] = name; // will be set later\n // @ts-expect-error: we are intentionally limiting the returned type to just Fn\n // because all the added properties are internals that are exposed through `$onAction()` only\n return wrappedAction;\n };\n const _hmrPayload = /*#__PURE__*/ markRaw({\n actions: {},\n getters: {},\n state: [],\n hotState,\n });\n const partialStore = {\n _p: pinia,\n // _s: scope,\n $id,\n $onAction: addSubscription.bind(null, actionSubscriptions),\n $patch,\n $reset,\n $subscribe(callback, options = {}) {\n const removeSubscription = addSubscription(subscriptions, callback, options.detached, () => stopWatcher());\n const stopWatcher = scope.run(() => watch(() => pinia.state.value[$id], (state) => {\n if (options.flush === 'sync' ? isSyncListening : isListening) {\n callback({\n storeId: $id,\n type: MutationType.direct,\n events: debuggerEvents,\n }, state);\n }\n }, assign({}, $subscribeOptions, options)));\n return removeSubscription;\n },\n $dispose,\n };\n const store = reactive((process.env.NODE_ENV !== 'production') || ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT)\n ? assign({\n _hmrPayload,\n _customProperties: markRaw(new Set()), // devtools custom properties\n }, partialStore\n // must be added later\n // setupStore\n )\n : partialStore);\n // store the partial store now so the setup of stores can instantiate each other before they are finished without\n // creating infinite loops.\n pinia._s.set($id, store);\n const runWithContext = (pinia._a && pinia._a.runWithContext) || fallbackRunWithContext;\n // TODO: idea create skipSerialize that marks properties as non serializable and they are skipped\n const setupStore = runWithContext(() => pinia._e.run(() => (scope = effectScope()).run(() => setup({ action }))));\n // overwrite existing actions to support $onAction\n for (const key in setupStore) {\n const prop = setupStore[key];\n if ((isRef(prop) && !isComputed(prop)) || isReactive(prop)) {\n // mark it as a piece of state to be serialized\n if ((process.env.NODE_ENV !== 'production') && hot) {\n hotState.value[key] = toRef(setupStore, key);\n // createOptionStore directly sets the state in pinia.state.value so we\n // can just skip that\n }\n else if (!isOptionsStore) {\n // in setup stores we must hydrate the state and sync pinia state tree with the refs the user just created\n if (initialState && shouldHydrate(prop)) {\n if (isRef(prop)) {\n prop.value = initialState[key];\n }\n else {\n // probably a reactive object, lets recursively assign\n // @ts-expect-error: prop is unknown\n mergeReactiveObjects(prop, initialState[key]);\n }\n }\n // transfer the ref to the pinia state to keep everything in sync\n pinia.state.value[$id][key] = prop;\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n _hmrPayload.state.push(key);\n }\n // action\n }\n else if (typeof prop === 'function') {\n const actionValue = (process.env.NODE_ENV !== 'production') && hot ? prop : action(prop, key);\n // this a hot module replacement store because the hotUpdate method needs\n // to do it with the right context\n // @ts-expect-error\n setupStore[key] = actionValue;\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n _hmrPayload.actions[key] = prop;\n }\n // list actions so they can be used in plugins\n // @ts-expect-error\n optionsForPlugin.actions[key] = prop;\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n // add getters for devtools\n if (isComputed(prop)) {\n _hmrPayload.getters[key] = isOptionsStore\n ? // @ts-expect-error\n options.getters[key]\n : prop;\n if (IS_CLIENT) {\n const getters = setupStore._getters ||\n // @ts-expect-error: same\n (setupStore._getters = markRaw([]));\n getters.push(key);\n }\n }\n }\n }\n // add the state, getters, and action properties\n /* istanbul ignore if */\n assign(store, setupStore);\n // allows retrieving reactive objects with `storeToRefs()`. Must be called after assigning to the reactive object.\n // Make `storeToRefs()` work with `reactive()` #799\n assign(toRaw(store), setupStore);\n // use this instead of a computed with setter to be able to create it anywhere\n // without linking the computed lifespan to wherever the store is first\n // created.\n Object.defineProperty(store, '$state', {\n get: () => ((process.env.NODE_ENV !== 'production') && hot ? hotState.value : pinia.state.value[$id]),\n set: (state) => {\n /* istanbul ignore if */\n if ((process.env.NODE_ENV !== 'production') && hot) {\n throw new Error('cannot set hotState');\n }\n $patch(($state) => {\n // @ts-expect-error: FIXME: shouldn't error?\n assign($state, state);\n });\n },\n });\n // add the hotUpdate before plugins to allow them to override it\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n store._hotUpdate = markRaw((newStore) => {\n store._hotUpdating = true;\n newStore._hmrPayload.state.forEach((stateKey) => {\n if (stateKey in store.$state) {\n const newStateTarget = newStore.$state[stateKey];\n const oldStateSource = store.$state[stateKey];\n if (typeof newStateTarget === 'object' &&\n isPlainObject(newStateTarget) &&\n isPlainObject(oldStateSource)) {\n patchObject(newStateTarget, oldStateSource);\n }\n else {\n // transfer the ref\n newStore.$state[stateKey] = oldStateSource;\n }\n }\n // patch direct access properties to allow store.stateProperty to work as\n // store.$state.stateProperty\n // @ts-expect-error: any type\n store[stateKey] = toRef(newStore.$state, stateKey);\n });\n // remove deleted state properties\n Object.keys(store.$state).forEach((stateKey) => {\n if (!(stateKey in newStore.$state)) {\n // @ts-expect-error: noop if doesn't exist\n delete store[stateKey];\n }\n });\n // avoid devtools logging this as a mutation\n isListening = false;\n isSyncListening = false;\n pinia.state.value[$id] = toRef(newStore._hmrPayload, 'hotState');\n isSyncListening = true;\n nextTick().then(() => {\n isListening = true;\n });\n for (const actionName in newStore._hmrPayload.actions) {\n const actionFn = newStore[actionName];\n // @ts-expect-error: actionName is a string\n store[actionName] =\n //\n action(actionFn, actionName);\n }\n // TODO: does this work in both setup and option store?\n for (const getterName in newStore._hmrPayload.getters) {\n const getter = newStore._hmrPayload.getters[getterName];\n const getterValue = isOptionsStore\n ? // special handling of options api\n computed(() => {\n setActivePinia(pinia);\n return getter.call(store, store);\n })\n : getter;\n // @ts-expect-error: getterName is a string\n store[getterName] =\n //\n getterValue;\n }\n // remove deleted getters\n Object.keys(store._hmrPayload.getters).forEach((key) => {\n if (!(key in newStore._hmrPayload.getters)) {\n // @ts-expect-error: noop if doesn't exist\n delete store[key];\n }\n });\n // remove old actions\n Object.keys(store._hmrPayload.actions).forEach((key) => {\n if (!(key in newStore._hmrPayload.actions)) {\n // @ts-expect-error: noop if doesn't exist\n delete store[key];\n }\n });\n // update the values used in devtools and to allow deleting new properties later on\n store._hmrPayload = newStore._hmrPayload;\n store._getters = newStore._getters;\n store._hotUpdating = false;\n });\n }\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n const nonEnumerable = {\n writable: true,\n configurable: true,\n // avoid warning on devtools trying to display this property\n enumerable: false,\n };\n ['_p', '_hmrPayload', '_getters', '_customProperties'].forEach((p) => {\n Object.defineProperty(store, p, assign({ value: store[p] }, nonEnumerable));\n });\n }\n // apply all plugins\n pinia._p.forEach((extender) => {\n /* istanbul ignore else */\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n const extensions = scope.run(() => extender({\n store: store,\n app: pinia._a,\n pinia,\n options: optionsForPlugin,\n }));\n Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));\n assign(store, extensions);\n }\n else {\n assign(store, scope.run(() => extender({\n store: store,\n app: pinia._a,\n pinia,\n options: optionsForPlugin,\n })));\n }\n });\n if ((process.env.NODE_ENV !== 'production') &&\n store.$state &&\n typeof store.$state === 'object' &&\n typeof store.$state.constructor === 'function' &&\n !store.$state.constructor.toString().includes('[native code]')) {\n console.warn(`[🍍]: The \"state\" must be a plain object. It cannot be\\n` +\n `\\tstate: () => new MyClass()\\n` +\n `Found in store \"${store.$id}\".`);\n }\n // only apply hydrate to option stores with an initial state in pinia\n if (initialState &&\n isOptionsStore &&\n options.hydrate) {\n options.hydrate(store.$state, initialState);\n }\n isListening = true;\n isSyncListening = true;\n return store;\n}\n// allows unused stores to be tree shaken\n/*! #__NO_SIDE_EFFECTS__ */\nfunction defineStore(\n// TODO: add proper types from above\nid, setup, setupOptions) {\n let options;\n const isSetupStore = typeof setup === 'function';\n // the option store setup will contain the actual options in this case\n options = isSetupStore ? setupOptions : setup;\n function useStore(pinia, hot) {\n const hasContext = hasInjectionContext();\n pinia =\n // in test mode, ignore the argument provided as we can always retrieve a\n // pinia instance with getActivePinia()\n ((process.env.NODE_ENV === 'test') && activePinia && activePinia._testing ? null : pinia) ||\n (hasContext ? inject(piniaSymbol, null) : null);\n if (pinia)\n setActivePinia(pinia);\n if ((process.env.NODE_ENV !== 'production') && !activePinia) {\n throw new Error(`[🍍]: \"getActivePinia()\" was called but there was no active Pinia. Are you trying to use a store before calling \"app.use(pinia)\"?\\n` +\n `See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.\\n` +\n `This will fail in production.`);\n }\n pinia = activePinia;\n if (!pinia._s.has(id)) {\n // creating the store registers it in `pinia._s`\n if (isSetupStore) {\n createSetupStore(id, setup, options, pinia);\n }\n else {\n createOptionsStore(id, options, pinia);\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n // @ts-expect-error: not the right inferred type\n useStore._pinia = pinia;\n }\n }\n const store = pinia._s.get(id);\n if ((process.env.NODE_ENV !== 'production') && hot) {\n const hotId = '__hot:' + id;\n const newStore = isSetupStore\n ? createSetupStore(hotId, setup, options, pinia, true)\n : createOptionsStore(hotId, assign({}, options), pinia, true);\n hot._hotUpdate(newStore);\n // cleanup the state properties and the store from the cache\n delete pinia.state.value[hotId];\n pinia._s.delete(hotId);\n }\n if ((process.env.NODE_ENV !== 'production') && IS_CLIENT) {\n const currentInstance = getCurrentInstance();\n // save stores in instances to access them devtools\n if (currentInstance &&\n currentInstance.proxy &&\n // avoid adding stores that are just built for hot module replacement\n !hot) {\n const vm = currentInstance.proxy;\n const cache = '_pStores' in vm ? vm._pStores : (vm._pStores = {});\n cache[id] = store;\n }\n }\n // StoreGeneric cannot be casted towards Store\n return store;\n }\n useStore.$id = id;\n return useStore;\n}\n\nlet mapStoreSuffix = 'Store';\n/**\n * Changes the suffix added by `mapStores()`. Can be set to an empty string.\n * Defaults to `\"Store\"`. Make sure to extend the MapStoresCustomization\n * interface if you are using TypeScript.\n *\n * @param suffix - new suffix\n */\nfunction setMapStoreSuffix(suffix // could be 'Store' but that would be annoying for JS\n) {\n mapStoreSuffix = suffix;\n}\n/**\n * Allows using stores without the composition API (`setup()`) by generating an\n * object to be spread in the `computed` field of a component. It accepts a list\n * of store definitions.\n *\n * @example\n * ```js\n * export default {\n * computed: {\n * // other computed properties\n * ...mapStores(useUserStore, useCartStore)\n * },\n *\n * created() {\n * this.userStore // store with id \"user\"\n * this.cartStore // store with id \"cart\"\n * }\n * }\n * ```\n *\n * @param stores - list of stores to map to an object\n */\nfunction mapStores(...stores) {\n if ((process.env.NODE_ENV !== 'production') && Array.isArray(stores[0])) {\n console.warn(`[🍍]: Directly pass all stores to \"mapStores()\" without putting them in an array:\\n` +\n `Replace\\n` +\n `\\tmapStores([useAuthStore, useCartStore])\\n` +\n `with\\n` +\n `\\tmapStores(useAuthStore, useCartStore)\\n` +\n `This will fail in production if not fixed.`);\n stores = stores[0];\n }\n return stores.reduce((reduced, useStore) => {\n // @ts-expect-error: $id is added by defineStore\n reduced[useStore.$id + mapStoreSuffix] = function () {\n return useStore(this.$pinia);\n };\n return reduced;\n }, {});\n}\n/**\n * Allows using state and getters from one store without using the composition\n * API (`setup()`) by generating an object to be spread in the `computed` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapState(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n reduced[key] = function () {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[key];\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function () {\n const store = useStore(this.$pinia);\n const storeKey = keysOrMapper[key];\n // for some reason TS is unable to infer the type of storeKey to be a\n // function\n return typeof storeKey === 'function'\n ? storeKey.call(this, store)\n : // @ts-expect-error: FIXME: should work?\n store[storeKey];\n };\n return reduced;\n }, {});\n}\n/**\n * Alias for `mapState()`. You should use `mapState()` instead.\n * @deprecated use `mapState()` instead.\n */\nconst mapGetters = mapState;\n/**\n * Allows directly using actions from your store without using the composition\n * API (`setup()`) by generating an object to be spread in the `methods` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapActions(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function (...args) {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[key](...args);\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function (...args) {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[keysOrMapper[key]](...args);\n };\n return reduced;\n }, {});\n}\n/**\n * Allows using state and getters from one store without using the composition\n * API (`setup()`) by generating an object to be spread in the `computed` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapWritableState(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n reduced[key] = {\n get() {\n return useStore(this.$pinia)[key];\n },\n set(value) {\n return (useStore(this.$pinia)[key] = value);\n },\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n reduced[key] = {\n get() {\n return useStore(this.$pinia)[keysOrMapper[key]];\n },\n set(value) {\n return (useStore(this.$pinia)[keysOrMapper[key]] = value);\n },\n };\n return reduced;\n }, {});\n}\n\n/**\n * Creates an object of references with all the state, getters, and plugin-added\n * state properties of the store. Similar to `toRefs()` but specifically\n * designed for Pinia stores so methods and non reactive properties are\n * completely ignored.\n *\n * @param store - store to extract the refs from\n */\nfunction storeToRefs(store) {\n const rawStore = toRaw(store);\n const refs = {};\n for (const key in rawStore) {\n const value = rawStore[key];\n // There is no native method to check for a computed\n // https://github.com/vuejs/core/pull/4165\n if (value.effect) {\n // @ts-expect-error: too hard to type correctly\n refs[key] =\n // ...\n computed({\n get: () => store[key],\n set(value) {\n store[key] = value;\n },\n });\n }\n else if (isRef(value) || isReactive(value)) {\n // @ts-expect-error: the key is state or getter\n refs[key] =\n // ---\n toRef(store, key);\n }\n }\n return refs;\n}\n\nexport { MutationType, acceptHMRUpdate, createPinia, defineStore, disposePinia, getActivePinia, mapActions, mapGetters, mapState, mapStores, mapWritableState, setActivePinia, setMapStoreSuffix, shouldHydrate, skipHydrate, storeToRefs };\n","import { useSlots as ce, ref as k, computed as z, watch as B, onMounted as G, onBeforeUnmount as X, provide as g, createBlock as ve, openBlock as Y, resolveDynamicComponent as me, nextTick as T, h as fe, inject as w, getCurrentInstance as de, createElementBlock as pe, normalizeStyle as ze, unref as he, renderSlot as xe } from \"vue\";\nconst Pe = {\n __name: \"splitpanes\",\n props: {\n horizontal: { type: Boolean, default: !1 },\n pushOtherPanes: { type: Boolean, default: !0 },\n maximizePanes: { type: Boolean, default: !0 },\n // Maximize pane on splitter double click/tap.\n rtl: { type: Boolean, default: !1 },\n // Right to left direction.\n firstSplitter: { type: Boolean, default: !1 }\n },\n emits: [\n \"ready\",\n \"resize\",\n \"resized\",\n \"pane-click\",\n \"pane-maximize\",\n \"pane-add\",\n \"pane-remove\",\n \"splitter-click\",\n \"splitter-dblclick\"\n ],\n setup(D, { emit: h }) {\n const y = h, u = D, E = ce(), l = k([]), M = z(() => l.value.reduce((e, n) => (e[~~n.id] = n) && e, {})), m = z(() => l.value.length), x = k(null), S = k(!1), c = k({\n mouseDown: !1,\n dragging: !1,\n activeSplitter: null,\n cursorOffset: 0\n // Cursor offset within the splitter.\n }), f = k({\n // Used to detect double click on touch devices.\n splitter: null,\n timeoutId: null\n }), _ = z(() => ({\n [`splitpanes splitpanes--${u.horizontal ? \"horizontal\" : \"vertical\"}`]: !0,\n \"splitpanes--dragging\": c.value.dragging\n })), R = () => {\n document.addEventListener(\"mousemove\", r, { passive: !1 }), document.addEventListener(\"mouseup\", P), \"ontouchstart\" in window && (document.addEventListener(\"touchmove\", r, { passive: !1 }), document.addEventListener(\"touchend\", P));\n }, O = () => {\n document.removeEventListener(\"mousemove\", r, { passive: !1 }), document.removeEventListener(\"mouseup\", P), \"ontouchstart\" in window && (document.removeEventListener(\"touchmove\", r, { passive: !1 }), document.removeEventListener(\"touchend\", P));\n }, b = (e, n) => {\n const t = e.target.closest(\".splitpanes__splitter\");\n if (t) {\n const { left: i, top: a } = t.getBoundingClientRect(), { clientX: s, clientY: o } = \"ontouchstart\" in window && e.touches ? e.touches[0] : e;\n c.value.cursorOffset = u.horizontal ? o - a : s - i;\n }\n R(), c.value.mouseDown = !0, c.value.activeSplitter = n;\n }, r = (e) => {\n c.value.mouseDown && (e.preventDefault(), c.value.dragging = !0, requestAnimationFrame(() => {\n K(I(e)), d(\"resize\", { event: e }, !0);\n }));\n }, P = (e) => {\n c.value.dragging && (window.getSelection().removeAllRanges(), d(\"resized\", { event: e }, !0)), c.value.mouseDown = !1, c.value.activeSplitter = null, setTimeout(() => {\n c.value.dragging = !1, O();\n }, 100);\n }, A = (e, n) => {\n \"ontouchstart\" in window && (e.preventDefault(), f.value.splitter === n ? (clearTimeout(f.value.timeoutId), f.value.timeoutId = null, U(e, n), f.value.splitter = null) : (f.value.splitter = n, f.value.timeoutId = setTimeout(() => f.value.splitter = null, 500))), c.value.dragging || d(\"splitter-click\", { event: e, index: n }, !0);\n }, U = (e, n) => {\n if (d(\"splitter-dblclick\", { event: e, index: n }, !0), u.maximizePanes) {\n let t = 0;\n l.value = l.value.map((i, a) => (i.size = a === n ? i.max : i.min, a !== n && (t += i.min), i)), l.value[n].size -= t, d(\"pane-maximize\", { event: e, index: n, pane: l.value[n] }), d(\"resized\", { event: e, index: n }, !0);\n }\n }, W = (e, n) => {\n d(\"pane-click\", {\n event: e,\n index: M.value[n].index,\n pane: M.value[n]\n });\n }, I = (e) => {\n const n = x.value.getBoundingClientRect(), { clientX: t, clientY: i } = \"ontouchstart\" in window && e.touches ? e.touches[0] : e;\n return {\n x: t - (u.horizontal ? 0 : c.value.cursorOffset) - n.left,\n y: i - (u.horizontal ? c.value.cursorOffset : 0) - n.top\n };\n }, J = (e) => {\n e = e[u.horizontal ? \"y\" : \"x\"];\n const n = x.value[u.horizontal ? \"clientHeight\" : \"clientWidth\"];\n return u.rtl && !u.horizontal && (e = n - e), e * 100 / n;\n }, K = (e) => {\n const n = c.value.activeSplitter;\n let t = {\n prevPanesSize: $(n),\n nextPanesSize: N(n),\n prevReachedMinPanes: 0,\n nextReachedMinPanes: 0\n };\n const i = 0 + (u.pushOtherPanes ? 0 : t.prevPanesSize), a = 100 - (u.pushOtherPanes ? 0 : t.nextPanesSize), s = Math.max(Math.min(J(e), a), i);\n let o = [n, n + 1], v = l.value[o[0]] || null, p = l.value[o[1]] || null;\n const H = v.max < 100 && s >= v.max + t.prevPanesSize, ue = p.max < 100 && s <= 100 - (p.max + N(n + 1));\n if (H || ue) {\n H ? (v.size = v.max, p.size = Math.max(100 - v.max - t.prevPanesSize - t.nextPanesSize, 0)) : (v.size = Math.max(100 - p.max - t.prevPanesSize - N(n + 1), 0), p.size = p.max);\n return;\n }\n if (u.pushOtherPanes) {\n const j = Q(t, s);\n if (!j) return;\n ({ sums: t, panesToResize: o } = j), v = l.value[o[0]] || null, p = l.value[o[1]] || null;\n }\n v !== null && (v.size = Math.min(Math.max(s - t.prevPanesSize - t.prevReachedMinPanes, v.min), v.max)), p !== null && (p.size = Math.min(Math.max(100 - s - t.nextPanesSize - t.nextReachedMinPanes, p.min), p.max));\n }, Q = (e, n) => {\n const t = c.value.activeSplitter, i = [t, t + 1];\n return n < e.prevPanesSize + l.value[i[0]].min && (i[0] = V(t).index, e.prevReachedMinPanes = 0, i[0] < t && l.value.forEach((a, s) => {\n s > i[0] && s <= t && (a.size = a.min, e.prevReachedMinPanes += a.min);\n }), e.prevPanesSize = $(i[0]), i[0] === void 0) ? (e.prevReachedMinPanes = 0, l.value[0].size = l.value[0].min, l.value.forEach((a, s) => {\n s > 0 && s <= t && (a.size = a.min, e.prevReachedMinPanes += a.min);\n }), l.value[i[1]].size = 100 - e.prevReachedMinPanes - l.value[0].min - e.prevPanesSize - e.nextPanesSize, null) : n > 100 - e.nextPanesSize - l.value[i[1]].min && (i[1] = Z(t).index, e.nextReachedMinPanes = 0, i[1] > t + 1 && l.value.forEach((a, s) => {\n s > t && s < i[1] && (a.size = a.min, e.nextReachedMinPanes += a.min);\n }), e.nextPanesSize = N(i[1] - 1), i[1] === void 0) ? (e.nextReachedMinPanes = 0, l.value.forEach((a, s) => {\n s < m.value - 1 && s >= t + 1 && (a.size = a.min, e.nextReachedMinPanes += a.min);\n }), l.value[i[0]].size = 100 - e.prevPanesSize - N(i[0] - 1), null) : { sums: e, panesToResize: i };\n }, $ = (e) => l.value.reduce((n, t, i) => n + (i < e ? t.size : 0), 0), N = (e) => l.value.reduce((n, t, i) => n + (i > e + 1 ? t.size : 0), 0), V = (e) => [...l.value].reverse().find((t) => t.index < e && t.size > t.min) || {}, Z = (e) => l.value.find((t) => t.index > e + 1 && t.size > t.min) || {}, ee = () => {\n var n;\n const e = Array.from(((n = x.value) == null ? void 0 : n.children) || []);\n for (const t of e) {\n const i = t.classList.contains(\"splitpanes__pane\"), a = t.classList.contains(\"splitpanes__splitter\");\n !i && !a && (t.remove(), console.warn(\"Splitpanes: Only elements are allowed at the root of . One of your DOM nodes was removed.\"));\n }\n }, F = (e, n, t = !1) => {\n const i = e - 1, a = document.createElement(\"div\");\n a.classList.add(\"splitpanes__splitter\"), t || (a.onmousedown = (s) => b(s, i), typeof window < \"u\" && \"ontouchstart\" in window && (a.ontouchstart = (s) => b(s, i)), a.onclick = (s) => A(s, i + 1)), a.ondblclick = (s) => U(s, i + 1), n.parentNode.insertBefore(a, n);\n }, ne = (e) => {\n e.onmousedown = void 0, e.onclick = void 0, e.ondblclick = void 0, e.remove();\n }, C = () => {\n var t;\n const e = Array.from(((t = x.value) == null ? void 0 : t.children) || []);\n for (const i of e)\n i.className.includes(\"splitpanes__splitter\") && ne(i);\n let n = 0;\n for (const i of e)\n i.className.includes(\"splitpanes__pane\") && (!n && u.firstSplitter ? F(n, i, !0) : n && F(n, i), n++);\n }, ie = ({ uid: e, ...n }) => {\n const t = M.value[e];\n for (const [i, a] of Object.entries(n)) t[i] = a;\n }, te = (e) => {\n var t;\n let n = -1;\n Array.from(((t = x.value) == null ? void 0 : t.children) || []).some((i) => (i.className.includes(\"splitpanes__pane\") && n++, i.isSameNode(e.el))), l.value.splice(n, 0, { ...e, index: n }), l.value.forEach((i, a) => i.index = a), S.value && T(() => {\n C(), L({ addedPane: l.value[n] }), d(\"pane-add\", { pane: l.value[n] });\n });\n }, ae = (e) => {\n const n = l.value.findIndex((i) => i.id === e);\n l.value[n].el = null;\n const t = l.value.splice(n, 1)[0];\n l.value.forEach((i, a) => i.index = a), T(() => {\n C(), d(\"pane-remove\", { pane: t }), L({ removedPane: { ...t } });\n });\n }, L = (e = {}) => {\n !e.addedPane && !e.removedPane ? le() : l.value.some((n) => n.givenSize !== null || n.min || n.max < 100) ? oe(e) : se(), S.value && d(\"resized\");\n }, se = () => {\n const e = 100 / m.value;\n let n = 0;\n const t = [], i = [];\n for (const a of l.value)\n a.size = Math.max(Math.min(e, a.max), a.min), n -= a.size, a.size >= a.max && t.push(a.id), a.size <= a.min && i.push(a.id);\n n > 0.1 && q(n, t, i);\n }, le = () => {\n let e = 100;\n const n = [], t = [];\n let i = 0;\n for (const s of l.value)\n e -= s.size, s.givenSize !== null && i++, s.size >= s.max && n.push(s.id), s.size <= s.min && t.push(s.id);\n let a = 100;\n if (e > 0.1) {\n for (const s of l.value)\n s.givenSize === null && (s.size = Math.max(Math.min(e / (m.value - i), s.max), s.min)), a -= s.size;\n a > 0.1 && q(a, n, t);\n }\n }, oe = ({ addedPane: e, removedPane: n } = {}) => {\n let t = 100 / m.value, i = 0;\n const a = [], s = [];\n ((e == null ? void 0 : e.givenSize) ?? null) !== null && (t = (100 - e.givenSize) / (m.value - 1));\n for (const o of l.value)\n i -= o.size, o.size >= o.max && a.push(o.id), o.size <= o.min && s.push(o.id);\n if (!(Math.abs(i) < 0.1)) {\n for (const o of l.value)\n (e == null ? void 0 : e.givenSize) !== null && (e == null ? void 0 : e.id) === o.id || (o.size = Math.max(Math.min(t, o.max), o.min)), i -= o.size, o.size >= o.max && a.push(o.id), o.size <= o.min && s.push(o.id);\n i > 0.1 && q(i, a, s);\n }\n }, q = (e, n, t) => {\n let i;\n e > 0 ? i = e / (m.value - n.length) : i = e / (m.value - t.length), l.value.forEach((a, s) => {\n if (e > 0 && !n.includes(a.id)) {\n const o = Math.max(Math.min(a.size + i, a.max), a.min), v = o - a.size;\n e -= v, a.size = o;\n } else if (!t.includes(a.id)) {\n const o = Math.max(Math.min(a.size + i, a.max), a.min), v = o - a.size;\n e -= v, a.size = o;\n }\n }), Math.abs(e) > 0.1 && T(() => {\n S.value && console.warn(\"Splitpanes: Could not resize panes correctly due to their constraints.\");\n });\n }, d = (e, n = void 0, t = !1) => {\n const i = (n == null ? void 0 : n.index) ?? c.value.activeSplitter ?? null;\n y(e, {\n ...n,\n ...i !== null && { index: i },\n ...t && i !== null && {\n prevPane: l.value[i - (u.firstSplitter ? 1 : 0)],\n nextPane: l.value[i + (u.firstSplitter ? 0 : 1)]\n },\n panes: l.value.map((a) => ({ min: a.min, max: a.max, size: a.size }))\n });\n };\n B(() => u.firstSplitter, () => C()), G(() => {\n ee(), C(), L(), d(\"ready\"), S.value = !0;\n }), X(() => S.value = !1);\n const re = () => {\n var e;\n return fe(\n \"div\",\n { ref: x, class: _.value },\n (e = E.default) == null ? void 0 : e.call(E)\n );\n };\n return g(\"panes\", l), g(\"indexedPanes\", M), g(\"horizontal\", z(() => u.horizontal)), g(\"requestUpdate\", ie), g(\"onPaneAdd\", te), g(\"onPaneRemove\", ae), g(\"onPaneClick\", W), (e, n) => (Y(), ve(me(re)));\n }\n}, ge = {\n __name: \"pane\",\n props: {\n size: { type: [Number, String] },\n minSize: { type: [Number, String], default: 0 },\n maxSize: { type: [Number, String], default: 100 }\n },\n setup(D) {\n var b;\n const h = D, y = w(\"requestUpdate\"), u = w(\"onPaneAdd\"), E = w(\"horizontal\"), l = w(\"onPaneRemove\"), M = w(\"onPaneClick\"), m = (b = de()) == null ? void 0 : b.uid, x = w(\"indexedPanes\"), S = z(() => x.value[m]), c = k(null), f = z(() => {\n const r = isNaN(h.size) || h.size === void 0 ? 0 : parseFloat(h.size);\n return Math.max(Math.min(r, R.value), _.value);\n }), _ = z(() => {\n const r = parseFloat(h.minSize);\n return isNaN(r) ? 0 : r;\n }), R = z(() => {\n const r = parseFloat(h.maxSize);\n return isNaN(r) ? 100 : r;\n }), O = z(() => {\n var r;\n return `${E.value ? \"height\" : \"width\"}: ${(r = S.value) == null ? void 0 : r.size}%`;\n });\n return B(() => f.value, (r) => y({ uid: m, size: r })), B(() => _.value, (r) => y({ uid: m, min: r })), B(() => R.value, (r) => y({ uid: m, max: r })), G(() => {\n u({\n id: m,\n el: c.value,\n min: _.value,\n max: R.value,\n // The given size (useful to know the user intention).\n givenSize: h.size === void 0 ? null : f.value,\n size: f.value\n // The computed current size at any time.\n });\n }), X(() => l(m)), (r, P) => (Y(), pe(\"div\", {\n ref_key: \"paneEl\",\n ref: c,\n class: \"splitpanes__pane\",\n onClick: P[0] || (P[0] = (A) => he(M)(A, r._.uid)),\n style: ze(O.value)\n }, [\n xe(r.$slots, \"default\")\n ], 4));\n }\n};\nexport {\n ge as Pane,\n Pe as Splitpanes\n};\n","import { loadState } from \"@nextcloud/initial-state\";\nimport { inject } from \"vue\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\n/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction once(func) {\n let wasCalled = false;\n let result;\n return (...args) => {\n if (!wasCalled) {\n wasCalled = true;\n result = func(...args);\n }\n return result;\n };\n}\nlet realAppName = \"missing-app-name\";\ntry {\n realAppName = appName;\n} catch {\n logger.error(\"The `@nextcloud/vue` library was used without setting / replacing the `appName`.\");\n}\nconst APP_NAME = realAppName;\nlet realAppVersion = \"\";\ntry {\n realAppVersion = appVersion;\n} catch {\n logger.error(\"The `@nextcloud/vue` library was used without setting / replacing the `appVersion`.\");\n}\nconst APP_VERSION = realAppVersion;\nfunction useAppName() {\n return inject(\"appName\", APP_NAME);\n}\nconst useLocalizedAppName = once(() => {\n const apps = loadState(\"core\", \"apps\", []);\n const realAppName2 = useAppName();\n return apps.find(({ id }) => id === realAppName2)?.name ?? realAppName2;\n});\nexport {\n APP_VERSION as A,\n useAppName as a,\n useLocalizedAppName as u\n};\n//# sourceMappingURL=appName-DyNMVZpX.mjs.map\n","import '../assets/NcAppContent-BC7DBer3.css';\nimport { getBuilder } from \"@nextcloud/browser-storage\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { emit } from \"@nextcloud/event-bus\";\nimport { useSwipe } from \"@vueuse/core\";\nimport { Splitpanes, Pane } from \"splitpanes\";\nimport { defineComponent, watch, onMounted, onBeforeUnmount, openBlock, createBlock, unref, normalizeClass, withCtx, createVNode, resolveComponent, createElementBlock, toDisplayString, createCommentVNode, Fragment, withModifiers, withDirectives, createElementVNode, renderSlot, vShow } from \"vue\";\nimport { m as mdiArrowRight } from \"./mdi-CpchYUUV.mjs\";\nimport { useIsMobile } from \"../composables/useIsMobile/index.mjs\";\nimport { r as register, G as t27, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { u as useLocalizedAppName, a as useAppName } from \"./appName-DyNMVZpX.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { i as isRtl } from \"./rtl-v0UOPAM7.mjs\";\nimport \"splitpanes/dist/splitpanes.css\";\nregister(t27);\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n __name: \"NcAppContentDetailsToggle\",\n setup(__props) {\n const isMobile = useIsMobile();\n watch(isMobile, toggleAppNavigationButton);\n onMounted(() => {\n toggleAppNavigationButton(isMobile.value);\n });\n onBeforeUnmount(() => {\n if (isMobile.value) {\n toggleAppNavigationButton(false);\n }\n });\n function toggleAppNavigationButton(hide = true) {\n const appNavigationToggle = document.querySelector(\".app-navigation .app-navigation-toggle\");\n if (appNavigationToggle) {\n appNavigationToggle.style.display = hide ? \"none\" : \"\";\n if (hide === true) {\n emit(\"toggle-navigation\", { open: false });\n }\n }\n }\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(NcButton), {\n \"aria-label\": unref(t)(\"Go back to the list\"),\n class: normalizeClass([\"app-details-toggle\", { \"app-details-toggle--mobile\": unref(isMobile) }]),\n title: unref(t)(\"Go back to the list\"),\n variant: \"tertiary\"\n }, {\n icon: withCtx(() => [\n createVNode(unref(NcIconSvgWrapper), {\n directional: \"\",\n path: unref(mdiArrowRight)\n }, null, 8, [\"path\"])\n ]),\n _: 1\n }, 8, [\"aria-label\", \"class\", \"title\"]);\n };\n }\n});\nconst NcAppContentDetailsToggle = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"__scopeId\", \"data-v-a28923a1\"]]);\nconst browserStorage = getBuilder(\"nextcloud\").persist().build();\nconst instanceName = getCapabilities().theming?.name ?? \"Nextcloud\";\nconst _sfc_main = {\n name: \"NcAppContent\",\n components: {\n NcAppContentDetailsToggle,\n Pane,\n Splitpanes\n },\n props: {\n /**\n * Allows to disable the control by swipe of the app navigation open state.\n */\n disableSwipe: {\n type: Boolean,\n default: false\n },\n /**\n * Allows you to set the default width of the resizable list in % on vertical-split\n * or respectively the default height on horizontal-split.\n *\n * Must be between `listMinWidth` and `listMaxWidth`.\n */\n listSize: {\n type: Number,\n default: 20\n },\n /**\n * Allows you to set the minimum width of the list column in % on vertical-split\n * or respectively the minimum height on horizontal-split.\n */\n listMinWidth: {\n type: Number,\n default: 15\n },\n /**\n * Allows you to set the maximum width of the list column in % on vertical-split\n * or respectively the maximum height on horizontal-split.\n */\n listMaxWidth: {\n type: Number,\n default: 40\n },\n /**\n * Specify the config key for the pane config sizes\n * Default is the global var appName if you use the webpack-vue-config\n */\n paneConfigKey: {\n type: String,\n default: \"\"\n },\n /**\n * When in mobile view, only the list or the details are shown.\n *\n * If you provide a list, you need to provide a variable\n * that will be set to true by the user when an element of\n * the list gets selected. The details will then show a back\n * arrow to return to the list that will update this prop to false.\n */\n showDetails: {\n type: Boolean,\n default: true\n },\n /**\n * Content layout used when there is a list together with content:\n * - `vertical-split` - a 2-column layout with list and default content separated vertically\n * - `no-split` - a single column layout; List is shown when `showDetails` is `false`, otherwise the default slot content is shown with a back button to return to the list.\n * - 'horizontal-split' - a 2-column layout with list and default content separated horizontally\n * On mobile screen `no-split` layout is forced.\n */\n layout: {\n type: String,\n default: \"vertical-split\",\n validator(value) {\n return [\"no-split\", \"vertical-split\", \"horizontal-split\"].includes(value);\n }\n },\n /**\n * Specify the `

` page heading\n */\n pageHeading: {\n type: String,\n default: null\n },\n /**\n * Allow setting the page's ``\n *\n * If a page heading is set it defaults to `{pageHeading} - {appName} - {instanceName}` e.g. `Favorites - Files - MyPersonalCloud`.\n * When the page heading and the app name is the same only one is used, e.g. `Files - Files - MyPersonalCloud` is shown as `Files - MyPersonalCloud`.\n * When setting the prop then the following format will be used: `{pageTitle} - {instanceName}`\n */\n pageTitle: {\n type: String,\n default: null\n }\n },\n emits: [\n \"update:showDetails\",\n \"resizeList\"\n ],\n setup() {\n return {\n appName: useAppName(),\n localizedAppName: useLocalizedAppName(),\n isMobile: useIsMobile(),\n isRtl\n };\n },\n data() {\n return {\n contentHeight: 0,\n swiping: {},\n listPaneSize: this.restorePaneConfig()\n };\n },\n computed: {\n paneConfigID() {\n if (this.paneConfigKey !== \"\") {\n return `pane-list-size-${this.paneConfigKey}`;\n }\n try {\n return `pane-list-size-${this.appName}`;\n } catch {\n logger.info(\"[NcAppContent]: falling back to global nextcloud pane config\");\n return \"pane-list-size-nextcloud\";\n }\n },\n detailsPaneSize() {\n if (this.listPaneSize) {\n return 100 - this.listPaneSize;\n }\n return this.paneDefaults.details.size;\n },\n paneDefaults() {\n return {\n list: {\n size: this.listSize,\n min: this.listMinWidth,\n max: this.listMaxWidth\n },\n // set the inverse values of the details column\n // based on the provided (or default) values of the list column\n details: {\n size: 100 - this.listSize,\n min: 100 - this.listMaxWidth,\n max: 100 - this.listMinWidth\n }\n };\n },\n realPageTitle() {\n const entries = /* @__PURE__ */ new Set();\n if (this.pageTitle) {\n for (const part of this.pageTitle.split(\" - \")) {\n entries.add(part);\n }\n } else if (this.pageHeading) {\n for (const part of this.pageHeading.split(\" - \")) {\n entries.add(part);\n }\n if (entries.size > 0) {\n entries.add(this.localizedAppName);\n }\n } else {\n return null;\n }\n entries.add(instanceName);\n return [...entries.values()].join(\" - \");\n }\n },\n watch: {\n realPageTitle: {\n immediate: true,\n handler() {\n if (this.realPageTitle !== null) {\n document.title = this.realPageTitle;\n }\n }\n },\n paneConfigKey: {\n immediate: true,\n handler() {\n this.restorePaneConfig();\n }\n }\n },\n mounted() {\n if (!this.disableSwipe) {\n this.swiping = useSwipe(this.$el, {\n onSwipeEnd: this.handleSwipe\n });\n }\n this.restorePaneConfig();\n },\n methods: {\n /**\n * handle the swipe event\n *\n * @param {TouchEvent} e The touch event\n * @param {import('@vueuse/core').SwipeDirection} direction The swipe direction of the event\n */\n handleSwipe(e, direction) {\n const minSwipeX = 70;\n const touchZone = 300;\n if (Math.abs(this.swiping.lengthX) > minSwipeX) {\n if (this.swiping.coordsStart.x < touchZone / 2 && direction === \"right\") {\n emit(\"toggle-navigation\", {\n open: true\n });\n } else if (this.swiping.coordsStart.x < touchZone * 1.5 && direction === \"left\") {\n emit(\"toggle-navigation\", {\n open: false\n });\n }\n }\n },\n handlePaneResize(event) {\n const listPaneSize = parseInt(event.panes[0].size, 10);\n browserStorage.setItem(this.paneConfigID, JSON.stringify(listPaneSize));\n this.listPaneSize = listPaneSize;\n this.$emit(\"resizeList\", { size: listPaneSize });\n logger.debug(\"[NcAppContent] pane config\", { listPaneSize });\n },\n // browserStorage is not reactive, we need to update this manually\n restorePaneConfig() {\n const listPaneSize = parseInt(browserStorage.getItem(this.paneConfigID), 10);\n if (!isNaN(listPaneSize) && listPaneSize !== this.listPaneSize) {\n logger.debug(\"[NcAppContent] pane config\", { listPaneSize });\n this.listPaneSize = listPaneSize;\n return listPaneSize;\n }\n },\n /**\n * The user clicked the back arrow from the details view\n */\n hideDetails() {\n this.$emit(\"update:showDetails\", false);\n }\n }\n};\nconst _hoisted_1 = {\n key: 0,\n class: \"hidden-visually\"\n};\nconst _hoisted_2 = { class: \"app-content-wrapper__list\" };\nconst _hoisted_3 = {\n key: 1,\n class: \"app-content-wrapper\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAppContentDetailsToggle = resolveComponent(\"NcAppContentDetailsToggle\");\n const _component_Pane = resolveComponent(\"Pane\");\n const _component_Splitpanes = resolveComponent(\"Splitpanes\");\n return openBlock(), createElementBlock(\"main\", {\n id: \"app-content-vue\",\n class: normalizeClass([\"app-content no-snapper\", { \"app-content--has-list\": !!_ctx.$slots.list }])\n }, [\n $props.pageHeading ? (openBlock(), createElementBlock(\"h1\", _hoisted_1, toDisplayString($props.pageHeading), 1)) : createCommentVNode(\"\", true),\n !!_ctx.$slots.list ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [\n $setup.isMobile || $props.layout === \"no-split\" ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass([\"app-content-wrapper app-content-wrapper--no-split\", {\n \"app-content-wrapper--show-details\": $props.showDetails,\n \"app-content-wrapper--show-list\": !$props.showDetails,\n \"app-content-wrapper--mobile\": $setup.isMobile\n }])\n }, [\n $props.showDetails ? (openBlock(), createBlock(_component_NcAppContentDetailsToggle, {\n key: 0,\n onClick: withModifiers($options.hideDetails, [\"stop\", \"prevent\"])\n }, null, 8, [\"onClick\"])) : createCommentVNode(\"\", true),\n withDirectives(createElementVNode(\"div\", _hoisted_2, [\n renderSlot(_ctx.$slots, \"list\", {}, void 0, true)\n ], 512), [\n [vShow, !$props.showDetails]\n ]),\n $props.showDetails ? renderSlot(_ctx.$slots, \"default\", { key: 1 }, void 0, true) : createCommentVNode(\"\", true)\n ], 2)) : $props.layout === \"vertical-split\" || $props.layout === \"horizontal-split\" ? (openBlock(), createElementBlock(\"div\", _hoisted_3, [\n createVNode(_component_Splitpanes, {\n horizontal: $props.layout === \"horizontal-split\",\n class: normalizeClass([\"default-theme\", {\n \"splitpanes--horizontal\": $props.layout === \"horizontal-split\",\n \"splitpanes--vertical\": $props.layout === \"vertical-split\"\n }]),\n rtl: $setup.isRtl,\n onResized: $options.handlePaneResize\n }, {\n default: withCtx(() => [\n createVNode(_component_Pane, {\n class: \"splitpanes__pane-list\",\n size: $data.listPaneSize || $options.paneDefaults.list.size,\n minSize: $options.paneDefaults.list.min,\n maxSize: $options.paneDefaults.list.max\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"list\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"size\", \"minSize\", \"maxSize\"]),\n createVNode(_component_Pane, {\n class: \"splitpanes__pane-details\",\n size: $options.detailsPaneSize,\n minSize: $options.paneDefaults.details.min,\n maxSize: $options.paneDefaults.details.max\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"size\", \"minSize\", \"maxSize\"])\n ]),\n _: 3\n }, 8, [\"horizontal\", \"class\", \"rtl\", \"onResized\"])\n ])) : createCommentVNode(\"\", true)\n ], 64)) : createCommentVNode(\"\", true),\n !_ctx.$slots.list ? renderSlot(_ctx.$slots, \"default\", { key: 2 }, void 0, true) : createCommentVNode(\"\", true)\n ], 2);\n}\nconst NcAppContent = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-ea1e6879\"]]);\nexport {\n NcAppContent as N\n};\n//# sourceMappingURL=NcAppContent--92JdjRr.mjs.map\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst HAS_APP_NAVIGATION_KEY = /* @__PURE__ */ Symbol.for(\"NcContent:setHasAppNavigation\");\nconst CONTENT_SELECTOR_KEY = /* @__PURE__ */ Symbol.for(\"NcContent:selector\");\nexport {\n CONTENT_SELECTOR_KEY as C,\n HAS_APP_NAVIGATION_KEY as H\n};\n//# sourceMappingURL=constants-Ciwvl5xb.mjs.map\n","import '../assets/NcContent-DX4Rs6Pc.css';\nimport { defineComponent, provide, computed, ref, onBeforeMount, openBlock, createElementBlock, normalizeClass, unref, createBlock, Teleport, createElementVNode, toDisplayString, withDirectives, createVNode, withModifiers, withCtx, createTextVNode, vShow, renderSlot, nextTick } from \"vue\";\nimport { emit } from \"@nextcloud/event-bus\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { useIsMobile } from \"../composables/useIsMobile/index.mjs\";\nimport { r as register, H as t30, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { H as HAS_APP_NAVIGATION_KEY, C as CONTENT_SELECTOR_KEY } from \"./constants-Ciwvl5xb.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t30);\nconst contentSvg = '<!--\\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\\n - SPDX-License-Identifier: AGPL-3.0-or-later\\n-->\\n<svg width=\"395\" height=\"314\" viewBox=\"0 0 395 314\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\\n<rect width=\"395\" height=\"314\" rx=\"11\" fill=\"#439DCD\"/>\\n<rect x=\"13\" y=\"51\" width=\"366\" height=\"248\" rx=\"8\" fill=\"white\"/>\\n<rect x=\"22\" y=\"111\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"127\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"63\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"191\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"143\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"79\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"159\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"95\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"175\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<path d=\"M288 145C277.56 147.8 265.32 149 254 149C242.68 149 230.44 147.8 220 145L218 153C225.44 155 234 156.32 242 157V209H250V185H258V209H266V157C274 156.32 282.56 155 290 153L288 145ZM254 145C258.4 145 262 141.4 262 137C262 132.6 258.4 129 254 129C249.6 129 246 132.6 246 137C246 141.4 249.6 145 254 145Z\" fill=\"#DEDEDE\"/>\\n<path d=\"M43.5358 13C38.6641 13 34.535 16.2415 33.2552 20.6333C32.143 18.3038 29.7327 16.6718 26.9564 16.6718C23.1385 16.6718 20 19.7521 20 23.4993C20 27.2465 23.1385 30.3282 26.9564 30.3282C29.7327 30.3282 32.1429 28.6952 33.2552 26.3653C34.535 30.7575 38.6641 34 43.5358 34C48.3715 34 52.4796 30.8064 53.7921 26.4637C54.9249 28.7407 57.3053 30.3282 60.0421 30.3282C63.8601 30.3282 67 27.2465 67 23.4993C67 19.7521 63.8601 16.6718 60.0421 16.6718C57.3053 16.6718 54.9249 18.2583 53.7921 20.5349C52.4796 16.1926 48.3715 13 43.5358 13ZM43.5358 17.0079C47.2134 17.0079 50.1512 19.8899 50.1512 23.4993C50.1512 27.1087 47.2134 29.9921 43.5358 29.9921C39.8583 29.9921 36.9218 27.1087 36.9218 23.4993C36.9218 19.8899 39.8583 17.0079 43.5358 17.0079ZM26.9564 20.6797C28.5677 20.6797 29.8307 21.9179 29.8307 23.4993C29.8307 25.0807 28.5677 26.3203 26.9564 26.3203C25.3452 26.3203 24.0836 25.0807 24.0836 23.4993C24.0836 21.9179 25.3452 20.6797 26.9564 20.6797ZM60.0421 20.6797C61.6534 20.6797 62.9164 21.9179 62.9164 23.4993C62.9164 25.0807 61.6534 26.3203 60.0421 26.3203C58.4309 26.3203 57.1693 25.0807 57.1693 23.4993C57.1693 21.9179 58.4309 20.6797 60.0421 20.6797Z\" fill=\"white\"/>\\n<rect x=\"79\" y=\"20\" width=\"8\" height=\"8\" rx=\"4\" fill=\"white\"/>\\n<rect x=\"99\" y=\"20\" width=\"8\" height=\"8\" rx=\"4\" fill=\"white\"/>\\n<rect x=\"119\" y=\"20\" width=\"8\" height=\"8\" rx=\"4\" fill=\"white\"/>\\n<rect x=\"139\" y=\"20\" width=\"8\" height=\"8\" rx=\"4\" fill=\"white\"/>\\n<rect x=\"159\" y=\"20\" width=\"8\" height=\"8\" rx=\"4\" fill=\"white\"/>\\n<rect x=\"179\" y=\"20\" width=\"8\" height=\"8\" rx=\"4\" fill=\"white\"/>\\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 0C5.37258 0 0 5.37259 0 12V302C0 308.627 5.37259 314 12 314H383C389.627 314 395 308.627 395 302V12C395 5.37258 389.627 0 383 0H12ZM140 44C132.268 44 126 50.268 126 58V292C126 299.732 132.268 306 140 306H372C379.732 306 386 299.732 386 292V58C386 50.268 379.732 44 372 44H140Z\" fill=\"black\" fill-opacity=\"0.35\"/>\\n</svg>\\n';\nconst navigationSvg = '<!--\\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\\n - SPDX-License-Identifier: AGPL-3.0-or-later\\n-->\\n<svg width=\"395\" height=\"314\" viewBox=\"0 0 395 314\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\\n<rect width=\"395\" height=\"314\" rx=\"11\" fill=\"#439DCD\"/>\\n<rect x=\"13\" y=\"51\" width=\"366\" height=\"248\" rx=\"8\" fill=\"white\"/>\\n<rect x=\"22\" y=\"111\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"127\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"63\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"191\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"143\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"79\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"159\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"95\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<rect x=\"22\" y=\"175\" width=\"92\" height=\"12\" rx=\"6\" fill=\"#DEDEDE\"/>\\n<path d=\"M288 145C277.56 147.8 265.32 149 254 149C242.68 149 230.44 147.8 220 145L218 153C225.44 155 234 156.32 242 157V209H250V185H258V209H266V157C274 156.32 282.56 155 290 153L288 145ZM254 145C258.4 145 262 141.4 262 137C262 132.6 258.4 129 254 129C249.6 129 246 132.6 246 137C246 141.4 249.6 145 254 145Z\" fill=\"#DEDEDE\"/>\\n<path d=\"M43.5358 13C38.6641 13 34.535 16.2415 33.2552 20.6333C32.143 18.3038 29.7327 16.6718 26.9564 16.6718C23.1385 16.6718 20 19.7521 20 23.4993C20 27.2465 23.1385 30.3282 26.9564 30.3282C29.7327 30.3282 32.1429 28.6952 33.2552 26.3653C34.535 30.7575 38.6641 34 43.5358 34C48.3715 34 52.4796 30.8064 53.7921 26.4637C54.9249 28.7407 57.3053 30.3282 60.0421 30.3282C63.8601 30.3282 67 27.2465 67 23.4993C67 19.7521 63.8601 16.6718 60.0421 16.6718C57.3053 16.6718 54.9249 18.2583 53.7921 20.5349C52.4796 16.1926 48.3715 13 43.5358 13ZM43.5358 17.0079C47.2134 17.0079 50.1512 19.8899 50.1512 23.4993C50.1512 27.1087 47.2134 29.9921 43.5358 29.9921C39.8583 29.9921 36.9218 27.1087 36.9218 23.4993C36.9218 19.8899 39.8583 17.0079 43.5358 17.0079ZM26.9564 20.6797C28.5677 20.6797 29.8307 21.9179 29.8307 23.4993C29.8307 25.0807 28.5677 26.3203 26.9564 26.3203C25.3452 26.3203 24.0836 25.0807 24.0836 23.4993C24.0836 21.9179 25.3452 20.6797 26.9564 20.6797ZM60.0421 20.6797C61.6534 20.6797 62.9164 21.9179 62.9164 23.4993C62.9164 25.0807 61.6534 26.3203 60.0421 26.3203C58.4309 26.3203 57.1693 25.0807 57.1693 23.4993C57.1693 21.9179 58.4309 20.6797 60.0421 20.6797Z\" fill=\"white\"/>\\n<rect x=\"79\" y=\"20\" width=\"8\" height=\"8\" rx=\"4\" fill=\"white\"/>\\n<rect x=\"99\" y=\"20\" width=\"8\" height=\"8\" rx=\"4\" fill=\"white\"/>\\n<rect x=\"119\" y=\"20\" width=\"8\" height=\"8\" rx=\"4\" fill=\"white\"/>\\n<rect x=\"139\" y=\"20\" width=\"8\" height=\"8\" rx=\"4\" fill=\"white\"/>\\n<rect x=\"159\" y=\"20\" width=\"8\" height=\"8\" rx=\"4\" fill=\"white\"/>\\n<rect x=\"179\" y=\"20\" width=\"8\" height=\"8\" rx=\"4\" fill=\"white\"/>\\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 0C5.37258 0 0 5.37259 0 12V302C0 308.627 5.37259 314 12 314H383C389.627 314 395 308.627 395 302V12C395 5.37258 389.627 0 383 0H12ZM112 44C119.732 44 126 50.268 126 58V292C126 299.732 119.732 306 112 306H20C12.268 306 6 299.732 6 292V58C6 50.268 12.268 44 20 44H112Z\" fill=\"black\" fill-opacity=\"0.35\"/>\\n</svg>\\n';\nconst _hoisted_1 = { class: \"vue-skip-actions__container\" };\nconst _hoisted_2 = { class: \"vue-skip-actions__headline\" };\nconst _hoisted_3 = { class: \"vue-skip-actions__buttons\" };\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcContent\",\n props: {\n appName: {}\n },\n setup(__props) {\n const props = __props;\n provide(HAS_APP_NAVIGATION_KEY, setAppNavigation);\n provide(CONTENT_SELECTOR_KEY, \"#content-vue\");\n provide(\"appName\", computed(() => props.appName));\n const isMobile = useIsMobile();\n const hasAppNavigation = ref(false);\n const currentFocus = ref();\n const currentImage = computed(() => currentFocus.value === \"navigation\" ? navigationSvg : contentSvg);\n onBeforeMount(() => {\n const container = document.getElementById(\"skip-actions\");\n if (container) {\n container.innerHTML = \"\";\n container.classList.add(\"vue-skip-actions\");\n }\n });\n function openAppNavigation() {\n emit(\"toggle-navigation\", { open: true });\n nextTick(() => {\n window.location.hash = \"app-navigation-vue\";\n document.getElementById(\"app-navigation-vue\").focus();\n });\n }\n function setAppNavigation(value) {\n hasAppNavigation.value = value;\n if (!currentFocus.value) {\n currentFocus.value = \"navigation\";\n }\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n id: \"content-vue\",\n class: normalizeClass([\"content\", [`app-${__props.appName.toLowerCase()}`, { \"content--legacy\": unref(isLegacy34) }]])\n }, [\n (openBlock(), createBlock(Teleport, { to: \"#skip-actions\" }, [\n createElementVNode(\"div\", _hoisted_1, [\n createElementVNode(\"div\", _hoisted_2, toDisplayString(unref(t)(\"Keyboard navigation help\")), 1),\n createElementVNode(\"div\", _hoisted_3, [\n withDirectives(createVNode(NcButton, {\n href: \"#app-navigation-vue\",\n variant: \"tertiary\",\n onClick: withModifiers(openAppNavigation, [\"prevent\"]),\n onFocusin: _cache[0] || (_cache[0] = ($event) => currentFocus.value = \"navigation\"),\n onMouseover: _cache[1] || (_cache[1] = ($event) => currentFocus.value = \"navigation\")\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString(unref(t)(\"Skip to app navigation\")), 1)\n ]),\n _: 1\n }, 512), [\n [vShow, hasAppNavigation.value]\n ]),\n createVNode(NcButton, {\n href: \"#app-content-vue\",\n variant: \"tertiary\",\n onFocusin: _cache[2] || (_cache[2] = ($event) => currentFocus.value = \"content\"),\n onMouseover: _cache[3] || (_cache[3] = ($event) => currentFocus.value = \"content\")\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString(unref(t)(\"Skip to main content\")), 1)\n ]),\n _: 1\n })\n ]),\n withDirectives(createVNode(NcIconSvgWrapper, {\n class: \"vue-skip-actions__image\",\n svg: currentImage.value,\n size: \"auto\"\n }, null, 8, [\"svg\"]), [\n [vShow, !unref(isMobile)]\n ])\n ])\n ])),\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ], 2);\n };\n }\n});\nconst NcContent = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-d13dcb98\"]]);\nexport {\n NcContent as N\n};\n//# sourceMappingURL=NcContent-BhMoPROW.mjs.map\n","/*!\n * vue-router v4.6.4\n * (c) 2025 Eduardo San Martin Morote\n * @license MIT\n */\nimport { getCurrentInstance, inject, onActivated, onDeactivated, onUnmounted, watch } from \"vue\";\nimport { setupDevtoolsPlugin } from \"@vue/devtools-api\";\n\n//#region src/utils/env.ts\nconst isBrowser = typeof document !== \"undefined\";\n\n//#endregion\n//#region src/utils/index.ts\n/**\n* Identity function that returns the value as is.\n*\n* @param v - the value to return\n*\n* @internal\n*/\nconst identityFn = (v) => v;\n/**\n* Allows differentiating lazy components from functional components and vue-class-component\n* @internal\n*\n* @param component\n*/\nfunction isRouteComponent(component) {\n\treturn typeof component === \"object\" || \"displayName\" in component || \"props\" in component || \"__vccOpts\" in component;\n}\nfunction isESModule(obj) {\n\treturn obj.__esModule || obj[Symbol.toStringTag] === \"Module\" || obj.default && isRouteComponent(obj.default);\n}\nconst assign = Object.assign;\nfunction applyToParams(fn, params) {\n\tconst newParams = {};\n\tfor (const key in params) {\n\t\tconst value = params[key];\n\t\tnewParams[key] = isArray(value) ? value.map(fn) : fn(value);\n\t}\n\treturn newParams;\n}\nconst noop = () => {};\n/**\n* Typesafe alternative to Array.isArray\n* https://github.com/microsoft/TypeScript/pull/48228\n*\n* @internal\n*/\nconst isArray = Array.isArray;\nfunction mergeOptions(defaults, partialOptions) {\n\tconst options = {};\n\tfor (const key in defaults) options[key] = key in partialOptions ? partialOptions[key] : defaults[key];\n\treturn options;\n}\n\n//#endregion\n//#region src/warning.ts\nfunction warn$1(msg) {\n\tconst args = Array.from(arguments).slice(1);\n\tconsole.warn.apply(console, [\"[Vue Router warn]: \" + msg].concat(args));\n}\n\n//#endregion\n//#region src/encoding.ts\n/**\n* Encoding Rules (␣ = Space)\n* - Path: ␣ \" < > # ? { }\n* - Query: ␣ \" < > # & =\n* - Hash: ␣ \" < > `\n*\n* On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\n* defines some extra characters to be encoded. Most browsers do not encode them\n* in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\n* also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\n* plus `-._~`. This extra safety should be applied to query by patching the\n* string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\n* should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\n* into a `/` if directly typed in. The _backtick_ (`````) should also be\n* encoded everywhere because some browsers like FF encode it when directly\n* written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\n*/\nconst HASH_RE = /#/g;\nconst AMPERSAND_RE = /&/g;\nconst SLASH_RE = /\\//g;\nconst EQUAL_RE = /=/g;\nconst IM_RE = /\\?/g;\nconst PLUS_RE = /\\+/g;\n/**\n* NOTE: It's not clear to me if we should encode the + symbol in queries, it\n* seems to be less flexible than not doing so and I can't find out the legacy\n* systems requiring this for regular requests like text/html. In the standard,\n* the encoding of the plus character is only mentioned for\n* application/x-www-form-urlencoded\n* (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\n* leave the plus character as is in queries. To be more flexible, we allow the\n* plus character on the query, but it can also be manually encoded by the user.\n*\n* Resources:\n* - https://url.spec.whatwg.org/#urlencoded-parsing\n* - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\n*/\nconst ENC_BRACKET_OPEN_RE = /%5B/g;\nconst ENC_BRACKET_CLOSE_RE = /%5D/g;\nconst ENC_CARET_RE = /%5E/g;\nconst ENC_BACKTICK_RE = /%60/g;\nconst ENC_CURLY_OPEN_RE = /%7B/g;\nconst ENC_PIPE_RE = /%7C/g;\nconst ENC_CURLY_CLOSE_RE = /%7D/g;\nconst ENC_SPACE_RE = /%20/g;\n/**\n* Encode characters that need to be encoded on the path, search and hash\n* sections of the URL.\n*\n* @internal\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction commonEncode(text) {\n\treturn text == null ? \"\" : encodeURI(\"\" + text).replace(ENC_PIPE_RE, \"|\").replace(ENC_BRACKET_OPEN_RE, \"[\").replace(ENC_BRACKET_CLOSE_RE, \"]\");\n}\n/**\n* Encode characters that need to be encoded on the hash section of the URL.\n*\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction encodeHash(text) {\n\treturn commonEncode(text).replace(ENC_CURLY_OPEN_RE, \"{\").replace(ENC_CURLY_CLOSE_RE, \"}\").replace(ENC_CARET_RE, \"^\");\n}\n/**\n* Encode characters that need to be encoded query values on the query\n* section of the URL.\n*\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction encodeQueryValue(text) {\n\treturn commonEncode(text).replace(PLUS_RE, \"%2B\").replace(ENC_SPACE_RE, \"+\").replace(HASH_RE, \"%23\").replace(AMPERSAND_RE, \"%26\").replace(ENC_BACKTICK_RE, \"`\").replace(ENC_CURLY_OPEN_RE, \"{\").replace(ENC_CURLY_CLOSE_RE, \"}\").replace(ENC_CARET_RE, \"^\");\n}\n/**\n* Like `encodeQueryValue` but also encodes the `=` character.\n*\n* @param text - string to encode\n*/\nfunction encodeQueryKey(text) {\n\treturn encodeQueryValue(text).replace(EQUAL_RE, \"%3D\");\n}\n/**\n* Encode characters that need to be encoded on the path section of the URL.\n*\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction encodePath(text) {\n\treturn commonEncode(text).replace(HASH_RE, \"%23\").replace(IM_RE, \"%3F\");\n}\n/**\n* Encode characters that need to be encoded on the path section of the URL as a\n* param. This function encodes everything {@link encodePath} does plus the\n* slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\n* string instead.\n*\n* @param text - string to encode\n* @returns encoded string\n*/\nfunction encodeParam(text) {\n\treturn encodePath(text).replace(SLASH_RE, \"%2F\");\n}\nfunction decode(text) {\n\tif (text == null) return null;\n\ttry {\n\t\treturn decodeURIComponent(\"\" + text);\n\t} catch (err) {\n\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(`Error decoding \"${text}\". Using original value`);\n\t}\n\treturn \"\" + text;\n}\n\n//#endregion\n//#region src/location.ts\nconst TRAILING_SLASH_RE = /\\/$/;\nconst removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, \"\");\n/**\n* Transforms a URI into a normalized history location\n*\n* @param parseQuery\n* @param location - URI to normalize\n* @param currentLocation - current absolute location. Allows resolving relative\n* paths. Must start with `/`. Defaults to `/`\n* @returns a normalized history location\n*/\nfunction parseURL(parseQuery$1, location, currentLocation = \"/\") {\n\tlet path, query = {}, searchString = \"\", hash = \"\";\n\tconst hashPos = location.indexOf(\"#\");\n\tlet searchPos = location.indexOf(\"?\");\n\tsearchPos = hashPos >= 0 && searchPos > hashPos ? -1 : searchPos;\n\tif (searchPos >= 0) {\n\t\tpath = location.slice(0, searchPos);\n\t\tsearchString = location.slice(searchPos, hashPos > 0 ? hashPos : location.length);\n\t\tquery = parseQuery$1(searchString.slice(1));\n\t}\n\tif (hashPos >= 0) {\n\t\tpath = path || location.slice(0, hashPos);\n\t\thash = location.slice(hashPos, location.length);\n\t}\n\tpath = resolveRelativePath(path != null ? path : location, currentLocation);\n\treturn {\n\t\tfullPath: path + searchString + hash,\n\t\tpath,\n\t\tquery,\n\t\thash: decode(hash)\n\t};\n}\nfunction NEW_stringifyURL(stringifyQuery$1, path, query, hash = \"\") {\n\tconst searchText = stringifyQuery$1(query);\n\treturn path + (searchText && \"?\") + searchText + encodeHash(hash);\n}\n/**\n* Stringifies a URL object\n*\n* @param stringifyQuery\n* @param location\n*/\nfunction stringifyURL(stringifyQuery$1, location) {\n\tconst query = location.query ? stringifyQuery$1(location.query) : \"\";\n\treturn location.path + (query && \"?\") + query + (location.hash || \"\");\n}\n/**\n* Strips off the base from the beginning of a location.pathname in a non-case-sensitive way.\n*\n* @param pathname - location.pathname\n* @param base - base to strip off\n*/\nfunction stripBase(pathname, base) {\n\tif (!base || !pathname.toLowerCase().startsWith(base.toLowerCase())) return pathname;\n\treturn pathname.slice(base.length) || \"/\";\n}\n/**\n* Checks if two RouteLocation are equal. This means that both locations are\n* pointing towards the same {@link RouteRecord} and that all `params`, `query`\n* parameters and `hash` are the same\n*\n* @param stringifyQuery - A function that takes a query object of type LocationQueryRaw and returns a string representation of it.\n* @param a - first {@link RouteLocation}\n* @param b - second {@link RouteLocation}\n*/\nfunction isSameRouteLocation(stringifyQuery$1, a, b) {\n\tconst aLastIndex = a.matched.length - 1;\n\tconst bLastIndex = b.matched.length - 1;\n\treturn aLastIndex > -1 && aLastIndex === bLastIndex && isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) && isSameRouteLocationParams(a.params, b.params) && stringifyQuery$1(a.query) === stringifyQuery$1(b.query) && a.hash === b.hash;\n}\n/**\n* Check if two `RouteRecords` are equal. Takes into account aliases: they are\n* considered equal to the `RouteRecord` they are aliasing.\n*\n* @param a - first {@link RouteRecord}\n* @param b - second {@link RouteRecord}\n*/\nfunction isSameRouteRecord(a, b) {\n\treturn (a.aliasOf || a) === (b.aliasOf || b);\n}\nfunction isSameRouteLocationParams(a, b) {\n\tif (Object.keys(a).length !== Object.keys(b).length) return false;\n\tfor (var key in a) if (!isSameRouteLocationParamsValue(a[key], b[key])) return false;\n\treturn true;\n}\nfunction isSameRouteLocationParamsValue(a, b) {\n\treturn isArray(a) ? isEquivalentArray(a, b) : isArray(b) ? isEquivalentArray(b, a) : a?.valueOf() === b?.valueOf();\n}\n/**\n* Check if two arrays are the same or if an array with one single entry is the\n* same as another primitive value. Used to check query and parameters\n*\n* @param a - array of values\n* @param b - array of values or a single value\n*/\nfunction isEquivalentArray(a, b) {\n\treturn isArray(b) ? a.length === b.length && a.every((value, i) => value === b[i]) : a.length === 1 && a[0] === b;\n}\n/**\n* Resolves a relative path that starts with `.`.\n*\n* @param to - path location we are resolving\n* @param from - currentLocation.path, should start with `/`\n*/\nfunction resolveRelativePath(to, from) {\n\tif (to.startsWith(\"/\")) return to;\n\tif (process.env.NODE_ENV !== \"production\" && !from.startsWith(\"/\")) {\n\t\twarn$1(`Cannot resolve a relative location without an absolute path. Trying to resolve \"${to}\" from \"${from}\". It should look like \"/${from}\".`);\n\t\treturn to;\n\t}\n\tif (!to) return from;\n\tconst fromSegments = from.split(\"/\");\n\tconst toSegments = to.split(\"/\");\n\tconst lastToSegment = toSegments[toSegments.length - 1];\n\tif (lastToSegment === \"..\" || lastToSegment === \".\") toSegments.push(\"\");\n\tlet position = fromSegments.length - 1;\n\tlet toPosition;\n\tlet segment;\n\tfor (toPosition = 0; toPosition < toSegments.length; toPosition++) {\n\t\tsegment = toSegments[toPosition];\n\t\tif (segment === \".\") continue;\n\t\tif (segment === \"..\") {\n\t\t\tif (position > 1) position--;\n\t\t} else break;\n\t}\n\treturn fromSegments.slice(0, position).join(\"/\") + \"/\" + toSegments.slice(toPosition).join(\"/\");\n}\n/**\n* Initial route location where the router is. Can be used in navigation guards\n* to differentiate the initial navigation.\n*\n* @example\n* ```js\n* import { START_LOCATION } from 'vue-router'\n*\n* router.beforeEach((to, from) => {\n* if (from === START_LOCATION) {\n* // initial navigation\n* }\n* })\n* ```\n*/\nconst START_LOCATION_NORMALIZED = {\n\tpath: \"/\",\n\tname: void 0,\n\tparams: {},\n\tquery: {},\n\thash: \"\",\n\tfullPath: \"/\",\n\tmatched: [],\n\tmeta: {},\n\tredirectedFrom: void 0\n};\n\n//#endregion\n//#region src/history/common.ts\nlet NavigationType = /* @__PURE__ */ function(NavigationType$1) {\n\tNavigationType$1[\"pop\"] = \"pop\";\n\tNavigationType$1[\"push\"] = \"push\";\n\treturn NavigationType$1;\n}({});\nlet NavigationDirection = /* @__PURE__ */ function(NavigationDirection$1) {\n\tNavigationDirection$1[\"back\"] = \"back\";\n\tNavigationDirection$1[\"forward\"] = \"forward\";\n\tNavigationDirection$1[\"unknown\"] = \"\";\n\treturn NavigationDirection$1;\n}({});\n/**\n* Starting location for Histories\n*/\nconst START = \"\";\n/**\n* Normalizes a base by removing any trailing slash and reading the base tag if\n* present.\n*\n* @param base - base to normalize\n*/\nfunction normalizeBase(base) {\n\tif (!base) if (isBrowser) {\n\t\tconst baseEl = document.querySelector(\"base\");\n\t\tbase = baseEl && baseEl.getAttribute(\"href\") || \"/\";\n\t\tbase = base.replace(/^\\w+:\\/\\/[^\\/]+/, \"\");\n\t} else base = \"/\";\n\tif (base[0] !== \"/\" && base[0] !== \"#\") base = \"/\" + base;\n\treturn removeTrailingSlash(base);\n}\nconst BEFORE_HASH_RE = /^[^#]+#/;\nfunction createHref(base, location) {\n\treturn base.replace(BEFORE_HASH_RE, \"#\") + location;\n}\n\n//#endregion\n//#region src/scrollBehavior.ts\nfunction getElementPosition(el, offset) {\n\tconst docRect = document.documentElement.getBoundingClientRect();\n\tconst elRect = el.getBoundingClientRect();\n\treturn {\n\t\tbehavior: offset.behavior,\n\t\tleft: elRect.left - docRect.left - (offset.left || 0),\n\t\ttop: elRect.top - docRect.top - (offset.top || 0)\n\t};\n}\nconst computeScrollPosition = () => ({\n\tleft: window.scrollX,\n\ttop: window.scrollY\n});\nfunction scrollToPosition(position) {\n\tlet scrollToOptions;\n\tif (\"el\" in position) {\n\t\tconst positionEl = position.el;\n\t\tconst isIdSelector = typeof positionEl === \"string\" && positionEl.startsWith(\"#\");\n\t\t/**\n\t\t* `id`s can accept pretty much any characters, including CSS combinators\n\t\t* like `>` or `~`. It's still possible to retrieve elements using\n\t\t* `document.getElementById('~')` but it needs to be escaped when using\n\t\t* `document.querySelector('#\\\\~')` for it to be valid. The only\n\t\t* requirements for `id`s are them to be unique on the page and to not be\n\t\t* empty (`id=\"\"`). Because of that, when passing an id selector, it should\n\t\t* be properly escaped for it to work with `querySelector`. We could check\n\t\t* for the id selector to be simple (no CSS combinators `+ >~`) but that\n\t\t* would make things inconsistent since they are valid characters for an\n\t\t* `id` but would need to be escaped when using `querySelector`, breaking\n\t\t* their usage and ending up in no selector returned. Selectors need to be\n\t\t* escaped:\n\t\t*\n\t\t* - `#1-thing` becomes `#\\31 -thing`\n\t\t* - `#with~symbols` becomes `#with\\\\~symbols`\n\t\t*\n\t\t* - More information about the topic can be found at\n\t\t* https://mathiasbynens.be/notes/html5-id-class.\n\t\t* - Practical example: https://mathiasbynens.be/demo/html5-id\n\t\t*/\n\t\tif (process.env.NODE_ENV !== \"production\" && typeof position.el === \"string\") {\n\t\t\tif (!isIdSelector || !document.getElementById(position.el.slice(1))) try {\n\t\t\t\tconst foundEl = document.querySelector(position.el);\n\t\t\t\tif (isIdSelector && foundEl) {\n\t\t\t\t\twarn$1(`The selector \"${position.el}\" should be passed as \"el: document.querySelector('${position.el}')\" because it starts with \"#\".`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\twarn$1(`The selector \"${position.el}\" is invalid. If you are using an id selector, make sure to escape it. You can find more information about escaping characters in selectors at https://mathiasbynens.be/notes/css-escapes or use CSS.escape (https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape).`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tconst el = typeof positionEl === \"string\" ? isIdSelector ? document.getElementById(positionEl.slice(1)) : document.querySelector(positionEl) : positionEl;\n\t\tif (!el) {\n\t\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(`Couldn't find element using selector \"${position.el}\" returned by scrollBehavior.`);\n\t\t\treturn;\n\t\t}\n\t\tscrollToOptions = getElementPosition(el, position);\n\t} else scrollToOptions = position;\n\tif (\"scrollBehavior\" in document.documentElement.style) window.scrollTo(scrollToOptions);\n\telse window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.scrollX, scrollToOptions.top != null ? scrollToOptions.top : window.scrollY);\n}\nfunction getScrollKey(path, delta) {\n\treturn (history.state ? history.state.position - delta : -1) + path;\n}\nconst scrollPositions = /* @__PURE__ */ new Map();\nfunction saveScrollPosition(key, scrollPosition) {\n\tscrollPositions.set(key, scrollPosition);\n}\nfunction getSavedScrollPosition(key) {\n\tconst scroll = scrollPositions.get(key);\n\tscrollPositions.delete(key);\n\treturn scroll;\n}\n/**\n* ScrollBehavior instance used by the router to compute and restore the scroll\n* position when navigating.\n*/\n\n//#endregion\n//#region src/types/typeGuards.ts\nfunction isRouteLocation(route) {\n\treturn typeof route === \"string\" || route && typeof route === \"object\";\n}\nfunction isRouteName(name) {\n\treturn typeof name === \"string\" || typeof name === \"symbol\";\n}\n\n//#endregion\n//#region src/errors.ts\n/**\n* Flags so we can combine them when checking for multiple errors. This is the internal version of\n* {@link NavigationFailureType}.\n*\n* @internal\n*/\nlet ErrorTypes = /* @__PURE__ */ function(ErrorTypes$1) {\n\tErrorTypes$1[ErrorTypes$1[\"MATCHER_NOT_FOUND\"] = 1] = \"MATCHER_NOT_FOUND\";\n\tErrorTypes$1[ErrorTypes$1[\"NAVIGATION_GUARD_REDIRECT\"] = 2] = \"NAVIGATION_GUARD_REDIRECT\";\n\tErrorTypes$1[ErrorTypes$1[\"NAVIGATION_ABORTED\"] = 4] = \"NAVIGATION_ABORTED\";\n\tErrorTypes$1[ErrorTypes$1[\"NAVIGATION_CANCELLED\"] = 8] = \"NAVIGATION_CANCELLED\";\n\tErrorTypes$1[ErrorTypes$1[\"NAVIGATION_DUPLICATED\"] = 16] = \"NAVIGATION_DUPLICATED\";\n\treturn ErrorTypes$1;\n}({});\nconst NavigationFailureSymbol = Symbol(process.env.NODE_ENV !== \"production\" ? \"navigation failure\" : \"\");\n/**\n* Enumeration with all possible types for navigation failures. Can be passed to\n* {@link isNavigationFailure} to check for specific failures.\n*/\nlet NavigationFailureType = /* @__PURE__ */ function(NavigationFailureType$1) {\n\t/**\n\t* An aborted navigation is a navigation that failed because a navigation\n\t* guard returned `false` or called `next(false)`\n\t*/\n\tNavigationFailureType$1[NavigationFailureType$1[\"aborted\"] = 4] = \"aborted\";\n\t/**\n\t* A cancelled navigation is a navigation that failed because a more recent\n\t* navigation finished started (not necessarily finished).\n\t*/\n\tNavigationFailureType$1[NavigationFailureType$1[\"cancelled\"] = 8] = \"cancelled\";\n\t/**\n\t* A duplicated navigation is a navigation that failed because it was\n\t* initiated while already being at the exact same location.\n\t*/\n\tNavigationFailureType$1[NavigationFailureType$1[\"duplicated\"] = 16] = \"duplicated\";\n\treturn NavigationFailureType$1;\n}({});\nconst ErrorTypeMessages = {\n\t[ErrorTypes.MATCHER_NOT_FOUND]({ location, currentLocation }) {\n\t\treturn `No match for\\n ${JSON.stringify(location)}${currentLocation ? \"\\nwhile being at\\n\" + JSON.stringify(currentLocation) : \"\"}`;\n\t},\n\t[ErrorTypes.NAVIGATION_GUARD_REDIRECT]({ from, to }) {\n\t\treturn `Redirected from \"${from.fullPath}\" to \"${stringifyRoute(to)}\" via a navigation guard.`;\n\t},\n\t[ErrorTypes.NAVIGATION_ABORTED]({ from, to }) {\n\t\treturn `Navigation aborted from \"${from.fullPath}\" to \"${to.fullPath}\" via a navigation guard.`;\n\t},\n\t[ErrorTypes.NAVIGATION_CANCELLED]({ from, to }) {\n\t\treturn `Navigation cancelled from \"${from.fullPath}\" to \"${to.fullPath}\" with a new navigation.`;\n\t},\n\t[ErrorTypes.NAVIGATION_DUPLICATED]({ from, to }) {\n\t\treturn `Avoided redundant navigation to current location: \"${from.fullPath}\".`;\n\t}\n};\n/**\n* Creates a typed NavigationFailure object.\n* @internal\n* @param type - NavigationFailureType\n* @param params - { from, to }\n*/\nfunction createRouterError(type, params) {\n\tif (process.env.NODE_ENV !== \"production\" || false) return assign(new Error(ErrorTypeMessages[type](params)), {\n\t\ttype,\n\t\t[NavigationFailureSymbol]: true\n\t}, params);\n\telse return assign(/* @__PURE__ */ new Error(), {\n\t\ttype,\n\t\t[NavigationFailureSymbol]: true\n\t}, params);\n}\nfunction isNavigationFailure(error, type) {\n\treturn error instanceof Error && NavigationFailureSymbol in error && (type == null || !!(error.type & type));\n}\nconst propertiesToLog = [\n\t\"params\",\n\t\"query\",\n\t\"hash\"\n];\nfunction stringifyRoute(to) {\n\tif (typeof to === \"string\") return to;\n\tif (to.path != null) return to.path;\n\tconst location = {};\n\tfor (const key of propertiesToLog) if (key in to) location[key] = to[key];\n\treturn JSON.stringify(location, null, 2);\n}\n\n//#endregion\n//#region src/query.ts\n/**\n* Transforms a queryString into a {@link LocationQuery} object. Accept both, a\n* version with the leading `?` and without Should work as URLSearchParams\n\n* @internal\n*\n* @param search - search string to parse\n* @returns a query object\n*/\nfunction parseQuery(search) {\n\tconst query = {};\n\tif (search === \"\" || search === \"?\") return query;\n\tconst searchParams = (search[0] === \"?\" ? search.slice(1) : search).split(\"&\");\n\tfor (let i = 0; i < searchParams.length; ++i) {\n\t\tconst searchParam = searchParams[i].replace(PLUS_RE, \" \");\n\t\tconst eqPos = searchParam.indexOf(\"=\");\n\t\tconst key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\n\t\tconst value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\n\t\tif (key in query) {\n\t\t\tlet currentValue = query[key];\n\t\t\tif (!isArray(currentValue)) currentValue = query[key] = [currentValue];\n\t\t\tcurrentValue.push(value);\n\t\t} else query[key] = value;\n\t}\n\treturn query;\n}\n/**\n* Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\n* doesn't prepend a `?`\n*\n* @internal\n*\n* @param query - query object to stringify\n* @returns string version of the query without the leading `?`\n*/\nfunction stringifyQuery(query) {\n\tlet search = \"\";\n\tfor (let key in query) {\n\t\tconst value = query[key];\n\t\tkey = encodeQueryKey(key);\n\t\tif (value == null) {\n\t\t\tif (value !== void 0) search += (search.length ? \"&\" : \"\") + key;\n\t\t\tcontinue;\n\t\t}\n\t\t(isArray(value) ? value.map((v) => v && encodeQueryValue(v)) : [value && encodeQueryValue(value)]).forEach((value$1) => {\n\t\t\tif (value$1 !== void 0) {\n\t\t\t\tsearch += (search.length ? \"&\" : \"\") + key;\n\t\t\t\tif (value$1 != null) search += \"=\" + value$1;\n\t\t\t}\n\t\t});\n\t}\n\treturn search;\n}\n/**\n* Transforms a {@link LocationQueryRaw} into a {@link LocationQuery} by casting\n* numbers into strings, removing keys with an undefined value and replacing\n* undefined with null in arrays\n*\n* @param query - query object to normalize\n* @returns a normalized query object\n*/\nfunction normalizeQuery(query) {\n\tconst normalizedQuery = {};\n\tfor (const key in query) {\n\t\tconst value = query[key];\n\t\tif (value !== void 0) normalizedQuery[key] = isArray(value) ? value.map((v) => v == null ? null : \"\" + v) : value == null ? value : \"\" + value;\n\t}\n\treturn normalizedQuery;\n}\n\n//#endregion\n//#region src/injectionSymbols.ts\n/**\n* RouteRecord being rendered by the closest ancestor Router View. Used for\n* `onBeforeRouteUpdate` and `onBeforeRouteLeave`. rvlm stands for Router View\n* Location Matched\n*\n* @internal\n*/\nconst matchedRouteKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"router view location matched\" : \"\");\n/**\n* Allows overriding the router view depth to control which component in\n* `matched` is rendered. rvd stands for Router View Depth\n*\n* @internal\n*/\nconst viewDepthKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"router view depth\" : \"\");\n/**\n* Allows overriding the router instance returned by `useRouter` in tests. r\n* stands for router\n*\n* @internal\n*/\nconst routerKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"router\" : \"\");\n/**\n* Allows overriding the current route returned by `useRoute` in tests. rl\n* stands for route location\n*\n* @internal\n*/\nconst routeLocationKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"route location\" : \"\");\n/**\n* Allows overriding the current route used by router-view. Internally this is\n* used when the `route` prop is passed.\n*\n* @internal\n*/\nconst routerViewLocationKey = Symbol(process.env.NODE_ENV !== \"production\" ? \"router view location\" : \"\");\n\n//#endregion\n//#region src/utils/callbacks.ts\n/**\n* Create a list of callbacks that can be reset. Used to create before and after navigation guards list\n*/\nfunction useCallbacks() {\n\tlet handlers = [];\n\tfunction add(handler) {\n\t\thandlers.push(handler);\n\t\treturn () => {\n\t\t\tconst i = handlers.indexOf(handler);\n\t\t\tif (i > -1) handlers.splice(i, 1);\n\t\t};\n\t}\n\tfunction reset() {\n\t\thandlers = [];\n\t}\n\treturn {\n\t\tadd,\n\t\tlist: () => handlers.slice(),\n\t\treset\n\t};\n}\n\n//#endregion\n//#region src/navigationGuards.ts\nfunction registerGuard(record, name, guard) {\n\tconst removeFromList = () => {\n\t\trecord[name].delete(guard);\n\t};\n\tonUnmounted(removeFromList);\n\tonDeactivated(removeFromList);\n\tonActivated(() => {\n\t\trecord[name].add(guard);\n\t});\n\trecord[name].add(guard);\n}\n/**\n* Add a navigation guard that triggers whenever the component for the current\n* location is about to be left. Similar to {@link beforeRouteLeave} but can be\n* used in any component. The guard is removed when the component is unmounted.\n*\n* @param leaveGuard - {@link NavigationGuard}\n*/\nfunction onBeforeRouteLeave(leaveGuard) {\n\tif (process.env.NODE_ENV !== \"production\" && !getCurrentInstance()) {\n\t\twarn$1(\"getCurrentInstance() returned null. onBeforeRouteLeave() must be called at the top of a setup function\");\n\t\treturn;\n\t}\n\tconst activeRecord = inject(matchedRouteKey, {}).value;\n\tif (!activeRecord) {\n\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(\"No active route record was found when calling `onBeforeRouteLeave()`. Make sure you call this function inside a component child of <router-view>. Maybe you called it inside of App.vue?\");\n\t\treturn;\n\t}\n\tregisterGuard(activeRecord, \"leaveGuards\", leaveGuard);\n}\n/**\n* Add a navigation guard that triggers whenever the current location is about\n* to be updated. Similar to {@link beforeRouteUpdate} but can be used in any\n* component. The guard is removed when the component is unmounted.\n*\n* @param updateGuard - {@link NavigationGuard}\n*/\nfunction onBeforeRouteUpdate(updateGuard) {\n\tif (process.env.NODE_ENV !== \"production\" && !getCurrentInstance()) {\n\t\twarn$1(\"getCurrentInstance() returned null. onBeforeRouteUpdate() must be called at the top of a setup function\");\n\t\treturn;\n\t}\n\tconst activeRecord = inject(matchedRouteKey, {}).value;\n\tif (!activeRecord) {\n\t\tprocess.env.NODE_ENV !== \"production\" && warn$1(\"No active route record was found when calling `onBeforeRouteUpdate()`. Make sure you call this function inside a component child of <router-view>. Maybe you called it inside of App.vue?\");\n\t\treturn;\n\t}\n\tregisterGuard(activeRecord, \"updateGuards\", updateGuard);\n}\nfunction guardToPromiseFn(guard, to, from, record, name, runWithContext = (fn) => fn()) {\n\tconst enterCallbackArray = record && (record.enterCallbacks[name] = record.enterCallbacks[name] || []);\n\treturn () => new Promise((resolve, reject) => {\n\t\tconst next = (valid) => {\n\t\t\tif (valid === false) reject(createRouterError(ErrorTypes.NAVIGATION_ABORTED, {\n\t\t\t\tfrom,\n\t\t\t\tto\n\t\t\t}));\n\t\t\telse if (valid instanceof Error) reject(valid);\n\t\t\telse if (isRouteLocation(valid)) reject(createRouterError(ErrorTypes.NAVIGATION_GUARD_REDIRECT, {\n\t\t\t\tfrom: to,\n\t\t\t\tto: valid\n\t\t\t}));\n\t\t\telse {\n\t\t\t\tif (enterCallbackArray && record.enterCallbacks[name] === enterCallbackArray && typeof valid === \"function\") enterCallbackArray.push(valid);\n\t\t\t\tresolve();\n\t\t\t}\n\t\t};\n\t\tconst guardReturn = runWithContext(() => guard.call(record && record.instances[name], to, from, process.env.NODE_ENV !== \"production\" ? canOnlyBeCalledOnce(next, to, from) : next));\n\t\tlet guardCall = Promise.resolve(guardReturn);\n\t\tif (guard.length < 3) guardCall = guardCall.then(next);\n\t\tif (process.env.NODE_ENV !== \"production\" && guard.length > 2) {\n\t\t\tconst message = `The \"next\" callback was never called inside of ${guard.name ? \"\\\"\" + guard.name + \"\\\"\" : \"\"}:\\n${guard.toString()}\\n. If you are returning a value instead of calling \"next\", make sure to remove the \"next\" parameter from your function.`;\n\t\t\tif (typeof guardReturn === \"object\" && \"then\" in guardReturn) guardCall = guardCall.then((resolvedValue) => {\n\t\t\t\tif (!next._called) {\n\t\t\t\t\twarn$1(message);\n\t\t\t\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Invalid navigation guard\"));\n\t\t\t\t}\n\t\t\t\treturn resolvedValue;\n\t\t\t});\n\t\t\telse if (guardReturn !== void 0) {\n\t\t\t\tif (!next._called) {\n\t\t\t\t\twarn$1(message);\n\t\t\t\t\treject(/* @__PURE__ */ new Error(\"Invalid navigation guard\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tguardCall.catch((err) => reject(err));\n\t});\n}\nfunction canOnlyBeCalledOnce(next, to, from) {\n\tlet called = 0;\n\treturn function() {\n\t\tif (called++ === 1) warn$1(`The \"next\" callback was called more than once in one navigation guard when going from \"${from.fullPath}\" to \"${to.fullPath}\". It should be called exactly one time in each navigation guard. This will fail in production.`);\n\t\tnext._called = true;\n\t\tif (called === 1) next.apply(null, arguments);\n\t};\n}\nfunction extractComponentsGuards(matched, guardType, to, from, runWithContext = (fn) => fn()) {\n\tconst guards = [];\n\tfor (const record of matched) {\n\t\tif (process.env.NODE_ENV !== \"production\" && !record.components && record.children && !record.children.length) warn$1(`Record with path \"${record.path}\" is either missing a \"component(s)\" or \"children\" property.`);\n\t\tfor (const name in record.components) {\n\t\t\tlet rawComponent = record.components[name];\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\t\tif (!rawComponent || typeof rawComponent !== \"object\" && typeof rawComponent !== \"function\") {\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is not a valid component. Received \"${String(rawComponent)}\".`);\n\t\t\t\t\tthrow new Error(\"Invalid route component\");\n\t\t\t\t} else if (\"then\" in rawComponent) {\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is a Promise instead of a function that returns a Promise. Did you write \"import('./MyPage.vue')\" instead of \"() => import('./MyPage.vue')\" ? This will break in production if not fixed.`);\n\t\t\t\t\tconst promise = rawComponent;\n\t\t\t\t\trawComponent = () => promise;\n\t\t\t\t} else if (rawComponent.__asyncLoader && !rawComponent.__warnedDefineAsync) {\n\t\t\t\t\trawComponent.__warnedDefineAsync = true;\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is defined using \"defineAsyncComponent()\". Write \"() => import('./MyPage.vue')\" instead of \"defineAsyncComponent(() => import('./MyPage.vue'))\".`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (guardType !== \"beforeRouteEnter\" && !record.instances[name]) continue;\n\t\t\tif (isRouteComponent(rawComponent)) {\n\t\t\t\tconst guard = (rawComponent.__vccOpts || rawComponent)[guardType];\n\t\t\t\tguard && guards.push(guardToPromiseFn(guard, to, from, record, name, runWithContext));\n\t\t\t} else {\n\t\t\t\tlet componentPromise = rawComponent();\n\t\t\t\tif (process.env.NODE_ENV !== \"production\" && !(\"catch\" in componentPromise)) {\n\t\t\t\t\twarn$1(`Component \"${name}\" in record with path \"${record.path}\" is a function that does not return a Promise. If you were passing a functional component, make sure to add a \"displayName\" to the component. This will break in production if not fixed.`);\n\t\t\t\t\tcomponentPromise = Promise.resolve(componentPromise);\n\t\t\t\t}\n\t\t\t\tguards.push(() => componentPromise.then((resolved) => {\n\t\t\t\t\tif (!resolved) throw new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\"`);\n\t\t\t\t\tconst resolvedComponent = isESModule(resolved) ? resolved.default : resolved;\n\t\t\t\t\trecord.mods[name] = resolved;\n\t\t\t\t\trecord.components[name] = resolvedComponent;\n\t\t\t\t\tconst guard = (resolvedComponent.__vccOpts || resolvedComponent)[guardType];\n\t\t\t\t\treturn guard && guardToPromiseFn(guard, to, from, record, name, runWithContext)();\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\t}\n\treturn guards;\n}\n/**\n* Ensures a route is loaded, so it can be passed as o prop to `<RouterView>`.\n*\n* @param route - resolved route to load\n*/\nfunction loadRouteLocation(route) {\n\treturn route.matched.every((record) => record.redirect) ? Promise.reject(/* @__PURE__ */ new Error(\"Cannot load a route that redirects.\")) : Promise.all(route.matched.map((record) => record.components && Promise.all(Object.keys(record.components).reduce((promises, name) => {\n\t\tconst rawComponent = record.components[name];\n\t\tif (typeof rawComponent === \"function\" && !(\"displayName\" in rawComponent)) promises.push(rawComponent().then((resolved) => {\n\t\t\tif (!resolved) return Promise.reject(/* @__PURE__ */ new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\". Ensure you passed a function that returns a promise.`));\n\t\t\tconst resolvedComponent = isESModule(resolved) ? resolved.default : resolved;\n\t\t\trecord.mods[name] = resolved;\n\t\t\trecord.components[name] = resolvedComponent;\n\t\t}));\n\t\treturn promises;\n\t}, [])))).then(() => route);\n}\n/**\n* Split the leaving, updating, and entering records.\n* @internal\n*\n* @param to - Location we are navigating to\n* @param from - Location we are navigating from\n*/\nfunction extractChangingRecords(to, from) {\n\tconst leavingRecords = [];\n\tconst updatingRecords = [];\n\tconst enteringRecords = [];\n\tconst len = Math.max(from.matched.length, to.matched.length);\n\tfor (let i = 0; i < len; i++) {\n\t\tconst recordFrom = from.matched[i];\n\t\tif (recordFrom) if (to.matched.find((record) => isSameRouteRecord(record, recordFrom))) updatingRecords.push(recordFrom);\n\t\telse leavingRecords.push(recordFrom);\n\t\tconst recordTo = to.matched[i];\n\t\tif (recordTo) {\n\t\t\tif (!from.matched.find((record) => isSameRouteRecord(record, recordTo))) enteringRecords.push(recordTo);\n\t\t}\n\t}\n\treturn [\n\t\tleavingRecords,\n\t\tupdatingRecords,\n\t\tenteringRecords\n\t];\n}\n\n//#endregion\n//#region src/devtools.ts\n/**\n* Copies a route location and removes any problematic properties that cannot be shown in devtools (e.g. Vue instances).\n*\n* @param routeLocation - routeLocation to format\n* @param tooltip - optional tooltip\n* @returns a copy of the routeLocation\n*/\nfunction formatRouteLocation(routeLocation, tooltip) {\n\tconst copy = assign({}, routeLocation, { matched: routeLocation.matched.map((matched) => omit(matched, [\n\t\t\"instances\",\n\t\t\"children\",\n\t\t\"aliasOf\"\n\t])) });\n\treturn { _custom: {\n\t\ttype: null,\n\t\treadOnly: true,\n\t\tdisplay: routeLocation.fullPath,\n\t\ttooltip,\n\t\tvalue: copy\n\t} };\n}\nfunction formatDisplay(display) {\n\treturn { _custom: { display } };\n}\nlet routerId = 0;\nfunction addDevtools(app, router, matcher) {\n\tif (router.__hasDevtools) return;\n\trouter.__hasDevtools = true;\n\tconst id = routerId++;\n\tsetupDevtoolsPlugin({\n\t\tid: \"org.vuejs.router\" + (id ? \".\" + id : \"\"),\n\t\tlabel: \"Vue Router\",\n\t\tpackageName: \"vue-router\",\n\t\thomepage: \"https://router.vuejs.org\",\n\t\tlogo: \"https://router.vuejs.org/logo.png\",\n\t\tcomponentStateTypes: [\"Routing\"],\n\t\tapp\n\t}, (api) => {\n\t\tif (typeof api.now !== \"function\") warn$1(\"[Vue Router]: You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.\");\n\t\tapi.on.inspectComponent((payload, ctx) => {\n\t\t\tif (payload.instanceData) payload.instanceData.state.push({\n\t\t\t\ttype: \"Routing\",\n\t\t\t\tkey: \"$route\",\n\t\t\t\teditable: false,\n\t\t\t\tvalue: formatRouteLocation(router.currentRoute.value, \"Current Route\")\n\t\t\t});\n\t\t});\n\t\tapi.on.visitComponentTree(({ treeNode: node, componentInstance }) => {\n\t\t\tif (componentInstance.__vrv_devtools) {\n\t\t\t\tconst info = componentInstance.__vrv_devtools;\n\t\t\t\tnode.tags.push({\n\t\t\t\t\tlabel: (info.name ? `${info.name.toString()}: ` : \"\") + info.path,\n\t\t\t\t\ttextColor: 0,\n\t\t\t\t\ttooltip: \"This component is rendered by <router-view>\",\n\t\t\t\t\tbackgroundColor: PINK_500\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (isArray(componentInstance.__vrl_devtools)) {\n\t\t\t\tcomponentInstance.__devtoolsApi = api;\n\t\t\t\tcomponentInstance.__vrl_devtools.forEach((devtoolsData) => {\n\t\t\t\t\tlet label = devtoolsData.route.path;\n\t\t\t\t\tlet backgroundColor = ORANGE_400;\n\t\t\t\t\tlet tooltip = \"\";\n\t\t\t\t\tlet textColor = 0;\n\t\t\t\t\tif (devtoolsData.error) {\n\t\t\t\t\t\tlabel = devtoolsData.error;\n\t\t\t\t\t\tbackgroundColor = RED_100;\n\t\t\t\t\t\ttextColor = RED_700;\n\t\t\t\t\t} else if (devtoolsData.isExactActive) {\n\t\t\t\t\t\tbackgroundColor = LIME_500;\n\t\t\t\t\t\ttooltip = \"This is exactly active\";\n\t\t\t\t\t} else if (devtoolsData.isActive) {\n\t\t\t\t\t\tbackgroundColor = BLUE_600;\n\t\t\t\t\t\ttooltip = \"This link is active\";\n\t\t\t\t\t}\n\t\t\t\t\tnode.tags.push({\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\ttextColor,\n\t\t\t\t\t\ttooltip,\n\t\t\t\t\t\tbackgroundColor\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\twatch(router.currentRoute, () => {\n\t\t\trefreshRoutesView();\n\t\t\tapi.notifyComponentUpdate();\n\t\t\tapi.sendInspectorTree(routerInspectorId);\n\t\t\tapi.sendInspectorState(routerInspectorId);\n\t\t});\n\t\tconst navigationsLayerId = \"router:navigations:\" + id;\n\t\tapi.addTimelineLayer({\n\t\t\tid: navigationsLayerId,\n\t\t\tlabel: `Router${id ? \" \" + id : \"\"} Navigations`,\n\t\t\tcolor: 4237508\n\t\t});\n\t\trouter.onError((error, to) => {\n\t\t\tapi.addTimelineEvent({\n\t\t\t\tlayerId: navigationsLayerId,\n\t\t\t\tevent: {\n\t\t\t\t\ttitle: \"Error during Navigation\",\n\t\t\t\t\tsubtitle: to.fullPath,\n\t\t\t\t\tlogType: \"error\",\n\t\t\t\t\ttime: api.now(),\n\t\t\t\t\tdata: { error },\n\t\t\t\t\tgroupId: to.meta.__navigationId\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tlet navigationId = 0;\n\t\trouter.beforeEach((to, from) => {\n\t\t\tconst data = {\n\t\t\t\tguard: formatDisplay(\"beforeEach\"),\n\t\t\t\tfrom: formatRouteLocation(from, \"Current Location during this navigation\"),\n\t\t\t\tto: formatRouteLocation(to, \"Target location\")\n\t\t\t};\n\t\t\tObject.defineProperty(to.meta, \"__navigationId\", { value: navigationId++ });\n\t\t\tapi.addTimelineEvent({\n\t\t\t\tlayerId: navigationsLayerId,\n\t\t\t\tevent: {\n\t\t\t\t\ttime: api.now(),\n\t\t\t\t\ttitle: \"Start of navigation\",\n\t\t\t\t\tsubtitle: to.fullPath,\n\t\t\t\t\tdata,\n\t\t\t\t\tgroupId: to.meta.__navigationId\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\trouter.afterEach((to, from, failure) => {\n\t\t\tconst data = { guard: formatDisplay(\"afterEach\") };\n\t\t\tif (failure) {\n\t\t\t\tdata.failure = { _custom: {\n\t\t\t\t\ttype: Error,\n\t\t\t\t\treadOnly: true,\n\t\t\t\t\tdisplay: failure ? failure.message : \"\",\n\t\t\t\t\ttooltip: \"Navigation Failure\",\n\t\t\t\t\tvalue: failure\n\t\t\t\t} };\n\t\t\t\tdata.status = formatDisplay(\"❌\");\n\t\t\t} else data.status = formatDisplay(\"✅\");\n\t\t\tdata.from = formatRouteLocation(from, \"Current Location during this navigation\");\n\t\t\tdata.to = formatRouteLocation(to, \"Target location\");\n\t\t\tapi.addTimelineEvent({\n\t\t\t\tlayerId: navigationsLayerId,\n\t\t\t\tevent: {\n\t\t\t\t\ttitle: \"End of navigation\",\n\t\t\t\t\tsubtitle: to.fullPath,\n\t\t\t\t\ttime: api.now(),\n\t\t\t\t\tdata,\n\t\t\t\t\tlogType: failure ? \"warning\" : \"default\",\n\t\t\t\t\tgroupId: to.meta.__navigationId\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t/**\n\t\t* Inspector of Existing routes\n\t\t*/\n\t\tconst routerInspectorId = \"router-inspector:\" + id;\n\t\tapi.addInspector({\n\t\t\tid: routerInspectorId,\n\t\t\tlabel: \"Routes\" + (id ? \" \" + id : \"\"),\n\t\t\ticon: \"book\",\n\t\t\ttreeFilterPlaceholder: \"Search routes\"\n\t\t});\n\t\tfunction refreshRoutesView() {\n\t\t\tif (!activeRoutesPayload) return;\n\t\t\tconst payload = activeRoutesPayload;\n\t\t\tlet routes = matcher.getRoutes().filter((route) => !route.parent || !route.parent.record.components);\n\t\t\troutes.forEach(resetMatchStateOnRouteRecord);\n\t\t\tif (payload.filter) routes = routes.filter((route) => isRouteMatching(route, payload.filter.toLowerCase()));\n\t\t\troutes.forEach((route) => markRouteRecordActive(route, router.currentRoute.value));\n\t\t\tpayload.rootNodes = routes.map(formatRouteRecordForInspector);\n\t\t}\n\t\tlet activeRoutesPayload;\n\t\tapi.on.getInspectorTree((payload) => {\n\t\t\tactiveRoutesPayload = payload;\n\t\t\tif (payload.app === app && payload.inspectorId === routerInspectorId) refreshRoutesView();\n\t\t});\n\t\t/**\n\t\t* Display information about the currently selected route record\n\t\t*/\n\t\tapi.on.getInspectorState((payload) => {\n\t\t\tif (payload.app === app && payload.inspectorId === routerInspectorId) {\n\t\t\t\tconst route = matcher.getRoutes().find((route$1) => route$1.record.__vd_id === payload.nodeId);\n\t\t\t\tif (route) payload.state = { options: formatRouteRecordMatcherForStateInspector(route) };\n\t\t\t}\n\t\t});\n\t\tapi.sendInspectorTree(routerInspectorId);\n\t\tapi.sendInspectorState(routerInspectorId);\n\t});\n}\nfunction modifierForKey(key) {\n\tif (key.optional) return key.repeatable ? \"*\" : \"?\";\n\telse return key.repeatable ? \"+\" : \"\";\n}\nfunction formatRouteRecordMatcherForStateInspector(route) {\n\tconst { record } = route;\n\tconst fields = [{\n\t\teditable: false,\n\t\tkey: \"path\",\n\t\tvalue: record.path\n\t}];\n\tif (record.name != null) fields.push({\n\t\teditable: false,\n\t\tkey: \"name\",\n\t\tvalue: record.name\n\t});\n\tfields.push({\n\t\teditable: false,\n\t\tkey: \"regexp\",\n\t\tvalue: route.re\n\t});\n\tif (route.keys.length) fields.push({\n\t\teditable: false,\n\t\tkey: \"keys\",\n\t\tvalue: { _custom: {\n\t\t\ttype: null,\n\t\t\treadOnly: true,\n\t\t\tdisplay: route.keys.map((key) => `${key.name}${modifierForKey(key)}`).join(\" \"),\n\t\t\ttooltip: \"Param keys\",\n\t\t\tvalue: route.keys\n\t\t} }\n\t});\n\tif (record.redirect != null) fields.push({\n\t\teditable: false,\n\t\tkey: \"redirect\",\n\t\tvalue: record.redirect\n\t});\n\tif (route.alias.length) fields.push({\n\t\teditable: false,\n\t\tkey: \"aliases\",\n\t\tvalue: route.alias.map((alias) => alias.record.path)\n\t});\n\tif (Object.keys(route.record.meta).length) fields.push({\n\t\teditable: false,\n\t\tkey: \"meta\",\n\t\tvalue: route.record.meta\n\t});\n\tfields.push({\n\t\tkey: \"score\",\n\t\teditable: false,\n\t\tvalue: { _custom: {\n\t\t\ttype: null,\n\t\t\treadOnly: true,\n\t\t\tdisplay: route.score.map((score) => score.join(\", \")).join(\" | \"),\n\t\t\ttooltip: \"Score used to sort routes\",\n\t\t\tvalue: route.score\n\t\t} }\n\t});\n\treturn fields;\n}\n/**\n* Extracted from tailwind palette\n*/\nconst PINK_500 = 15485081;\nconst BLUE_600 = 2450411;\nconst LIME_500 = 8702998;\nconst CYAN_400 = 2282478;\nconst ORANGE_400 = 16486972;\nconst DARK = 6710886;\nconst RED_100 = 16704226;\nconst RED_700 = 12131356;\nfunction formatRouteRecordForInspector(route) {\n\tconst tags = [];\n\tconst { record } = route;\n\tif (record.name != null) tags.push({\n\t\tlabel: String(record.name),\n\t\ttextColor: 0,\n\t\tbackgroundColor: CYAN_400\n\t});\n\tif (record.aliasOf) tags.push({\n\t\tlabel: \"alias\",\n\t\ttextColor: 0,\n\t\tbackgroundColor: ORANGE_400\n\t});\n\tif (route.__vd_match) tags.push({\n\t\tlabel: \"matches\",\n\t\ttextColor: 0,\n\t\tbackgroundColor: PINK_500\n\t});\n\tif (route.__vd_exactActive) tags.push({\n\t\tlabel: \"exact\",\n\t\ttextColor: 0,\n\t\tbackgroundColor: LIME_500\n\t});\n\tif (route.__vd_active) tags.push({\n\t\tlabel: \"active\",\n\t\ttextColor: 0,\n\t\tbackgroundColor: BLUE_600\n\t});\n\tif (record.redirect) tags.push({\n\t\tlabel: typeof record.redirect === \"string\" ? `redirect: ${record.redirect}` : \"redirects\",\n\t\ttextColor: 16777215,\n\t\tbackgroundColor: DARK\n\t});\n\tlet id = record.__vd_id;\n\tif (id == null) {\n\t\tid = String(routeRecordId++);\n\t\trecord.__vd_id = id;\n\t}\n\treturn {\n\t\tid,\n\t\tlabel: record.path,\n\t\ttags,\n\t\tchildren: route.children.map(formatRouteRecordForInspector)\n\t};\n}\nlet routeRecordId = 0;\nconst EXTRACT_REGEXP_RE = /^\\/(.*)\\/([a-z]*)$/;\nfunction markRouteRecordActive(route, currentRoute) {\n\tconst isExactActive = currentRoute.matched.length && isSameRouteRecord(currentRoute.matched[currentRoute.matched.length - 1], route.record);\n\troute.__vd_exactActive = route.__vd_active = isExactActive;\n\tif (!isExactActive) route.__vd_active = currentRoute.matched.some((match) => isSameRouteRecord(match, route.record));\n\troute.children.forEach((childRoute) => markRouteRecordActive(childRoute, currentRoute));\n}\nfunction resetMatchStateOnRouteRecord(route) {\n\troute.__vd_match = false;\n\troute.children.forEach(resetMatchStateOnRouteRecord);\n}\nfunction isRouteMatching(route, filter) {\n\tconst found = String(route.re).match(EXTRACT_REGEXP_RE);\n\troute.__vd_match = false;\n\tif (!found || found.length < 3) return false;\n\tif (new RegExp(found[1].replace(/\\$$/, \"\"), found[2]).test(filter)) {\n\t\troute.children.forEach((child) => isRouteMatching(child, filter));\n\t\tif (route.record.path !== \"/\" || filter === \"/\") {\n\t\t\troute.__vd_match = route.re.test(filter);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tconst path = route.record.path.toLowerCase();\n\tconst decodedPath = decode(path);\n\tif (!filter.startsWith(\"/\") && (decodedPath.includes(filter) || path.includes(filter))) return true;\n\tif (decodedPath.startsWith(filter) || path.startsWith(filter)) return true;\n\tif (route.record.name && String(route.record.name).includes(filter)) return true;\n\treturn route.children.some((child) => isRouteMatching(child, filter));\n}\nfunction omit(obj, keys) {\n\tconst ret = {};\n\tfor (const key in obj) if (!keys.includes(key)) ret[key] = obj[key];\n\treturn ret;\n}\n\n//#endregion\nexport { isBrowser as $, START as A, stringifyURL as B, computeScrollPosition as C, scrollToPosition as D, saveScrollPosition as E, isSameRouteLocation as F, encodePath as G, decode as H, isSameRouteLocationParams as I, assign as J, warn$1 as K, isSameRouteRecord as L, normalizeBase as M, NEW_stringifyURL as N, NavigationDirection as O, START_LOCATION_NORMALIZED as P, noop as Q, parseURL as R, isRouteName as S, getScrollKey as T, encodeHash as U, stripBase as V, encodeParam as W, isArray as X, identityFn as Y, mergeOptions as Z, ErrorTypes as _, loadRouteLocation as a, isNavigationFailure as b, useCallbacks as c, routerKey as d, routerViewLocationKey as f, stringifyQuery as g, parseQuery as h, guardToPromiseFn as i, createHref as j, NavigationType as k, matchedRouteKey as l, normalizeQuery as m, extractChangingRecords as n, onBeforeRouteLeave as o, viewDepthKey as p, applyToParams as q, extractComponentsGuards as r, onBeforeRouteUpdate as s, addDevtools as t, routeLocationKey as u, NavigationFailureType as v, getSavedScrollPosition as w, isRouteLocation as x, createRouterError as y, resolveRelativePath as z };","/*!\n * vue-router v4.6.4\n * (c) 2025 Eduardo San Martin Morote\n * @license MIT\n */\nimport { $ as isBrowser, A as START, B as stringifyURL, C as computeScrollPosition, D as scrollToPosition, E as saveScrollPosition, F as isSameRouteLocation, H as decode, I as isSameRouteLocationParams, J as assign, K as warn$1, L as isSameRouteRecord, M as normalizeBase, O as NavigationDirection, P as START_LOCATION_NORMALIZED, Q as noop, R as parseURL, S as isRouteName, T as getScrollKey, U as encodeHash, V as stripBase, W as encodeParam, X as isArray, Z as mergeOptions, _ as ErrorTypes, a as loadRouteLocation, b as isNavigationFailure, c as useCallbacks, d as routerKey, f as routerViewLocationKey, g as stringifyQuery, h as parseQuery, i as guardToPromiseFn, j as createHref, k as NavigationType, l as matchedRouteKey, m as normalizeQuery, n as extractChangingRecords, o as onBeforeRouteLeave, p as viewDepthKey, q as applyToParams, r as extractComponentsGuards, s as onBeforeRouteUpdate, t as addDevtools, u as routeLocationKey, v as NavigationFailureType, w as getSavedScrollPosition, x as isRouteLocation, y as createRouterError } from \"./devtools-EWN81iOl.mjs\";\nimport { computed, defineComponent, getCurrentInstance, h, inject, nextTick, provide, reactive, ref, shallowReactive, shallowRef, unref, watch, watchEffect } from \"vue\";\n\n//#region src/history/html5.ts\nlet createBaseLocation = () => location.protocol + \"//\" + location.host;\n/**\n* Creates a normalized history location from a window.location object\n* @param base - The base path\n* @param location - The window.location object\n*/\nfunction createCurrentLocation(base, location$1) {\n\tconst { pathname, search, hash } = location$1;\n\tconst hashPos = base.indexOf(\"#\");\n\tif (hashPos > -1) {\n\t\tlet slicePos = hash.includes(base.slice(hashPos)) ? base.slice(hashPos).length : 1;\n\t\tlet pathFromHash = hash.slice(slicePos);\n\t\tif (pathFromHash[0] !== \"/\") pathFromHash = \"/\" + pathFromHash;\n\t\treturn stripBase(pathFromHash, \"\");\n\t}\n\treturn stripBase(pathname, base) + search + hash;\n}\nfunction useHistoryListeners(base, historyState, currentLocation, replace) {\n\tlet listeners = [];\n\tlet teardowns = [];\n\tlet pauseState = null;\n\tconst popStateHandler = ({ state }) => {\n\t\tconst to = createCurrentLocation(base, location);\n\t\tconst from = currentLocation.value;\n\t\tconst fromState = historyState.value;\n\t\tlet delta = 0;\n\t\tif (state) {\n\t\t\tcurrentLocation.value = to;\n\t\t\thistoryState.value = state;\n\t\t\tif (pauseState && pauseState === from) {\n\t\t\t\tpauseState = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdelta = fromState ? state.position - fromState.position : 0;\n\t\t} else replace(to);\n\t\tlisteners.forEach((listener) => {\n\t\t\tlistener(currentLocation.value, from, {\n\t\t\t\tdelta,\n\t\t\t\ttype: NavigationType.pop,\n\t\t\t\tdirection: delta ? delta > 0 ? NavigationDirection.forward : NavigationDirection.back : NavigationDirection.unknown\n\t\t\t});\n\t\t});\n\t};\n\tfunction pauseListeners() {\n\t\tpauseState = currentLocation.value;\n\t}\n\tfunction listen(callback) {\n\t\tlisteners.push(callback);\n\t\tconst teardown = () => {\n\t\t\tconst index = listeners.indexOf(callback);\n\t\t\tif (index > -1) listeners.splice(index, 1);\n\t\t};\n\t\tteardowns.push(teardown);\n\t\treturn teardown;\n\t}\n\tfunction beforeUnloadListener() {\n\t\tif (document.visibilityState === \"hidden\") {\n\t\t\tconst { history: history$1 } = window;\n\t\t\tif (!history$1.state) return;\n\t\t\thistory$1.replaceState(assign({}, history$1.state, { scroll: computeScrollPosition() }), \"\");\n\t\t}\n\t}\n\tfunction destroy() {\n\t\tfor (const teardown of teardowns) teardown();\n\t\tteardowns = [];\n\t\twindow.removeEventListener(\"popstate\", popStateHandler);\n\t\twindow.removeEventListener(\"pagehide\", beforeUnloadListener);\n\t\tdocument.removeEventListener(\"visibilitychange\", beforeUnloadListener);\n\t}\n\twindow.addEventListener(\"popstate\", popStateHandler);\n\twindow.addEventListener(\"pagehide\", beforeUnloadListener);\n\tdocument.addEventListener(\"visibilitychange\", beforeUnloadListener);\n\treturn {\n\t\tpauseListeners,\n\t\tlisten,\n\t\tdestroy\n\t};\n}\n/**\n* Creates a state object\n*/\nfunction buildState(back, current, forward, replaced = false, computeScroll = false) {\n\treturn {\n\t\tback,\n\t\tcurrent,\n\t\tforward,\n\t\treplaced,\n\t\tposition: window.history.length,\n\t\tscroll: computeScroll ? computeScrollPosition() : null\n\t};\n}\nfunction useHistoryStateNavigation(base) {\n\tconst { history: history$1, location: location$1 } = window;\n\tconst currentLocation = { value: createCurrentLocation(base, location$1) };\n\tconst historyState = { value: history$1.state };\n\tif (!historyState.value) changeLocation(currentLocation.value, {\n\t\tback: null,\n\t\tcurrent: currentLocation.value,\n\t\tforward: null,\n\t\tposition: history$1.length - 1,\n\t\treplaced: true,\n\t\tscroll: null\n\t}, true);\n\tfunction changeLocation(to, state, replace$1) {\n\t\t/**\n\t\t* if a base tag is provided, and we are on a normal domain, we have to\n\t\t* respect the provided `base` attribute because pushState() will use it and\n\t\t* potentially erase anything before the `#` like at\n\t\t* https://github.com/vuejs/router/issues/685 where a base of\n\t\t* `/folder/#` but a base of `/` would erase the `/folder/` section. If\n\t\t* there is no host, the `<base>` tag makes no sense and if there isn't a\n\t\t* base tag we can just use everything after the `#`.\n\t\t*/\n\t\tconst hashIndex = base.indexOf(\"#\");\n\t\tconst url = hashIndex > -1 ? (location$1.host && document.querySelector(\"base\") ? base : base.slice(hashIndex)) + to : createBaseLocation() + base + to;\n\t\ttry {\n\t\t\thistory$1[replace$1 ? \"replaceState\" : \"pushState\"](state, \"\", url);\n\t\t\thistoryState.value = state;\n\t\t} catch (err) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") warn$1(\"Error with push/replace State\", err);\n\t\t\telse console.error(err);\n\t\t\tlocation$1[replace$1 ? \"replace\" : \"assign\"](url);\n\t\t}\n\t}\n\tfunction replace(to, data) {\n\t\tchangeLocation(to, assign({}, history$1.state, buildState(historyState.value.back, to, historyState.value.forward, true), data, { position: historyState.value.position }), true);\n\t\tcurrentLocation.value = to;\n\t}\n\tfunction push(to, data) {\n\t\tconst currentState = assign({}, historyState.value, history$1.state, {\n\t\t\tforward: to,\n\t\t\tscroll: computeScrollPosition()\n\t\t});\n\t\tif (process.env.NODE_ENV !== \"production\" && !history$1.state) warn$1(\"history.state seems to have been manually replaced without preserving the necessary values. Make sure to preserve existing history state if you are manually calling history.replaceState:\\n\\nhistory.replaceState(history.state, '', url)\\n\\nYou can find more information at https://router.vuejs.org/guide/migration/#Usage-of-history-state\");\n\t\tchangeLocation(currentState.current, currentState, true);\n\t\tchangeLocation(to, assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data), false);\n\t\tcurrentLocation.value = to;\n\t}\n\treturn {\n\t\tlocation: currentLocation,\n\t\tstate: historyState,\n\t\tpush,\n\t\treplace\n\t};\n}\n/**\n* Creates an HTML5 history. Most common history for single page applications.\n*\n* @param base -\n*/\nfunction createWebHistory(base) {\n\tbase = normalizeBase(base);\n\tconst historyNavigation = useHistoryStateNavigation(base);\n\tconst historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace);\n\tfunction go(delta, triggerListeners = true) {\n\t\tif (!triggerListeners) historyListeners.pauseListeners();\n\t\thistory.go(delta);\n\t}\n\tconst routerHistory = assign({\n\t\tlocation: \"\",\n\t\tbase,\n\t\tgo,\n\t\tcreateHref: createHref.bind(null, base)\n\t}, historyNavigation, historyListeners);\n\tObject.defineProperty(routerHistory, \"location\", {\n\t\tenumerable: true,\n\t\tget: () => historyNavigation.location.value\n\t});\n\tObject.defineProperty(routerHistory, \"state\", {\n\t\tenumerable: true,\n\t\tget: () => historyNavigation.state.value\n\t});\n\treturn routerHistory;\n}\n\n//#endregion\n//#region src/history/memory.ts\n/**\n* Creates an in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere.\n* It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`.\n*\n* @param base - Base applied to all urls, defaults to '/'\n* @returns a history object that can be passed to the router constructor\n*/\nfunction createMemoryHistory(base = \"\") {\n\tlet listeners = [];\n\tlet queue = [[START, {}]];\n\tlet position = 0;\n\tbase = normalizeBase(base);\n\tfunction setLocation(location$1, state = {}) {\n\t\tposition++;\n\t\tif (position !== queue.length) queue.splice(position);\n\t\tqueue.push([location$1, state]);\n\t}\n\tfunction triggerListeners(to, from, { direction, delta }) {\n\t\tconst info = {\n\t\t\tdirection,\n\t\t\tdelta,\n\t\t\ttype: NavigationType.pop\n\t\t};\n\t\tfor (const callback of listeners) callback(to, from, info);\n\t}\n\tconst routerHistory = {\n\t\tlocation: START,\n\t\tstate: {},\n\t\tbase,\n\t\tcreateHref: createHref.bind(null, base),\n\t\treplace(to, state) {\n\t\t\tqueue.splice(position--, 1);\n\t\t\tsetLocation(to, state);\n\t\t},\n\t\tpush(to, state) {\n\t\t\tsetLocation(to, state);\n\t\t},\n\t\tlisten(callback) {\n\t\t\tlisteners.push(callback);\n\t\t\treturn () => {\n\t\t\t\tconst index = listeners.indexOf(callback);\n\t\t\t\tif (index > -1) listeners.splice(index, 1);\n\t\t\t};\n\t\t},\n\t\tdestroy() {\n\t\t\tlisteners = [];\n\t\t\tqueue = [[START, {}]];\n\t\t\tposition = 0;\n\t\t},\n\t\tgo(delta, shouldTrigger = true) {\n\t\t\tconst from = this.location;\n\t\t\tconst direction = delta < 0 ? NavigationDirection.back : NavigationDirection.forward;\n\t\t\tposition = Math.max(0, Math.min(position + delta, queue.length - 1));\n\t\t\tif (shouldTrigger) triggerListeners(this.location, from, {\n\t\t\t\tdirection,\n\t\t\t\tdelta\n\t\t\t});\n\t\t}\n\t};\n\tObject.defineProperty(routerHistory, \"location\", {\n\t\tenumerable: true,\n\t\tget: () => queue[position][0]\n\t});\n\tObject.defineProperty(routerHistory, \"state\", {\n\t\tenumerable: true,\n\t\tget: () => queue[position][1]\n\t});\n\treturn routerHistory;\n}\n\n//#endregion\n//#region src/history/hash.ts\n/**\n* Creates a hash history. Useful for web applications with no host (e.g. `file://`) or when configuring a server to\n* handle any URL is not possible.\n*\n* @param base - optional base to provide. Defaults to `location.pathname + location.search` If there is a `<base>` tag\n* in the `head`, its value will be ignored in favor of this parameter **but note it affects all the history.pushState()\n* calls**, meaning that if you use a `<base>` tag, it's `href` value **has to match this parameter** (ignoring anything\n* after the `#`).\n*\n* @example\n* ```js\n* // at https://example.com/folder\n* createWebHashHistory() // gives a url of `https://example.com/folder#`\n* createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#`\n* // if the `#` is provided in the base, it won't be added by `createWebHashHistory`\n* createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/`\n* // you should avoid doing this because it changes the original url and breaks copying urls\n* createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#`\n*\n* // at file:///usr/etc/folder/index.html\n* // for locations with no `host`, the base is ignored\n* createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#`\n* ```\n*/\nfunction createWebHashHistory(base) {\n\tbase = location.host ? base || location.pathname + location.search : \"\";\n\tif (!base.includes(\"#\")) base += \"#\";\n\tif (process.env.NODE_ENV !== \"production\" && !base.endsWith(\"#/\") && !base.endsWith(\"#\")) warn$1(`A hash base must end with a \"#\":\\n\"${base}\" should be \"${base.replace(/#.*$/, \"#\")}\".`);\n\treturn createWebHistory(base);\n}\n\n//#endregion\n//#region src/matcher/pathTokenizer.ts\nlet TokenType = /* @__PURE__ */ function(TokenType$1) {\n\tTokenType$1[TokenType$1[\"Static\"] = 0] = \"Static\";\n\tTokenType$1[TokenType$1[\"Param\"] = 1] = \"Param\";\n\tTokenType$1[TokenType$1[\"Group\"] = 2] = \"Group\";\n\treturn TokenType$1;\n}({});\nvar TokenizerState = /* @__PURE__ */ function(TokenizerState$1) {\n\tTokenizerState$1[TokenizerState$1[\"Static\"] = 0] = \"Static\";\n\tTokenizerState$1[TokenizerState$1[\"Param\"] = 1] = \"Param\";\n\tTokenizerState$1[TokenizerState$1[\"ParamRegExp\"] = 2] = \"ParamRegExp\";\n\tTokenizerState$1[TokenizerState$1[\"ParamRegExpEnd\"] = 3] = \"ParamRegExpEnd\";\n\tTokenizerState$1[TokenizerState$1[\"EscapeNext\"] = 4] = \"EscapeNext\";\n\treturn TokenizerState$1;\n}(TokenizerState || {});\nconst ROOT_TOKEN = {\n\ttype: TokenType.Static,\n\tvalue: \"\"\n};\nconst VALID_PARAM_RE = /[a-zA-Z0-9_]/;\nfunction tokenizePath(path) {\n\tif (!path) return [[]];\n\tif (path === \"/\") return [[ROOT_TOKEN]];\n\tif (!path.startsWith(\"/\")) throw new Error(process.env.NODE_ENV !== \"production\" ? `Route paths should start with a \"/\": \"${path}\" should be \"/${path}\".` : `Invalid path \"${path}\"`);\n\tfunction crash(message) {\n\t\tthrow new Error(`ERR (${state})/\"${buffer}\": ${message}`);\n\t}\n\tlet state = TokenizerState.Static;\n\tlet previousState = state;\n\tconst tokens = [];\n\tlet segment;\n\tfunction finalizeSegment() {\n\t\tif (segment) tokens.push(segment);\n\t\tsegment = [];\n\t}\n\tlet i = 0;\n\tlet char;\n\tlet buffer = \"\";\n\tlet customRe = \"\";\n\tfunction consumeBuffer() {\n\t\tif (!buffer) return;\n\t\tif (state === TokenizerState.Static) segment.push({\n\t\t\ttype: TokenType.Static,\n\t\t\tvalue: buffer\n\t\t});\n\t\telse if (state === TokenizerState.Param || state === TokenizerState.ParamRegExp || state === TokenizerState.ParamRegExpEnd) {\n\t\t\tif (segment.length > 1 && (char === \"*\" || char === \"+\")) crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);\n\t\t\tsegment.push({\n\t\t\t\ttype: TokenType.Param,\n\t\t\t\tvalue: buffer,\n\t\t\t\tregexp: customRe,\n\t\t\t\trepeatable: char === \"*\" || char === \"+\",\n\t\t\t\toptional: char === \"*\" || char === \"?\"\n\t\t\t});\n\t\t} else crash(\"Invalid state to consume buffer\");\n\t\tbuffer = \"\";\n\t}\n\tfunction addCharToBuffer() {\n\t\tbuffer += char;\n\t}\n\twhile (i < path.length) {\n\t\tchar = path[i++];\n\t\tif (char === \"\\\\\" && state !== TokenizerState.ParamRegExp) {\n\t\t\tpreviousState = state;\n\t\t\tstate = TokenizerState.EscapeNext;\n\t\t\tcontinue;\n\t\t}\n\t\tswitch (state) {\n\t\t\tcase TokenizerState.Static:\n\t\t\t\tif (char === \"/\") {\n\t\t\t\t\tif (buffer) consumeBuffer();\n\t\t\t\t\tfinalizeSegment();\n\t\t\t\t} else if (char === \":\") {\n\t\t\t\t\tconsumeBuffer();\n\t\t\t\t\tstate = TokenizerState.Param;\n\t\t\t\t} else addCharToBuffer();\n\t\t\t\tbreak;\n\t\t\tcase TokenizerState.EscapeNext:\n\t\t\t\taddCharToBuffer();\n\t\t\t\tstate = previousState;\n\t\t\t\tbreak;\n\t\t\tcase TokenizerState.Param:\n\t\t\t\tif (char === \"(\") state = TokenizerState.ParamRegExp;\n\t\t\t\telse if (VALID_PARAM_RE.test(char)) addCharToBuffer();\n\t\t\t\telse {\n\t\t\t\t\tconsumeBuffer();\n\t\t\t\t\tstate = TokenizerState.Static;\n\t\t\t\t\tif (char !== \"*\" && char !== \"?\" && char !== \"+\") i--;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase TokenizerState.ParamRegExp:\n\t\t\t\tif (char === \")\") if (customRe[customRe.length - 1] == \"\\\\\") customRe = customRe.slice(0, -1) + char;\n\t\t\t\telse state = TokenizerState.ParamRegExpEnd;\n\t\t\t\telse customRe += char;\n\t\t\t\tbreak;\n\t\t\tcase TokenizerState.ParamRegExpEnd:\n\t\t\t\tconsumeBuffer();\n\t\t\t\tstate = TokenizerState.Static;\n\t\t\t\tif (char !== \"*\" && char !== \"?\" && char !== \"+\") i--;\n\t\t\t\tcustomRe = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tcrash(\"Unknown state\");\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif (state === TokenizerState.ParamRegExp) crash(`Unfinished custom RegExp for param \"${buffer}\"`);\n\tconsumeBuffer();\n\tfinalizeSegment();\n\treturn tokens;\n}\n\n//#endregion\n//#region src/matcher/pathParserRanker.ts\nconst BASE_PARAM_PATTERN = \"[^/]+?\";\nconst BASE_PATH_PARSER_OPTIONS = {\n\tsensitive: false,\n\tstrict: false,\n\tstart: true,\n\tend: true\n};\nvar PathScore = /* @__PURE__ */ function(PathScore$1) {\n\tPathScore$1[PathScore$1[\"_multiplier\"] = 10] = \"_multiplier\";\n\tPathScore$1[PathScore$1[\"Root\"] = 90] = \"Root\";\n\tPathScore$1[PathScore$1[\"Segment\"] = 40] = \"Segment\";\n\tPathScore$1[PathScore$1[\"SubSegment\"] = 30] = \"SubSegment\";\n\tPathScore$1[PathScore$1[\"Static\"] = 40] = \"Static\";\n\tPathScore$1[PathScore$1[\"Dynamic\"] = 20] = \"Dynamic\";\n\tPathScore$1[PathScore$1[\"BonusCustomRegExp\"] = 10] = \"BonusCustomRegExp\";\n\tPathScore$1[PathScore$1[\"BonusWildcard\"] = -50] = \"BonusWildcard\";\n\tPathScore$1[PathScore$1[\"BonusRepeatable\"] = -20] = \"BonusRepeatable\";\n\tPathScore$1[PathScore$1[\"BonusOptional\"] = -8] = \"BonusOptional\";\n\tPathScore$1[PathScore$1[\"BonusStrict\"] = .7000000000000001] = \"BonusStrict\";\n\tPathScore$1[PathScore$1[\"BonusCaseSensitive\"] = .25] = \"BonusCaseSensitive\";\n\treturn PathScore$1;\n}(PathScore || {});\nconst REGEX_CHARS_RE = /[.+*?^${}()[\\]/\\\\]/g;\n/**\n* Creates a path parser from an array of Segments (a segment is an array of Tokens)\n*\n* @param segments - array of segments returned by tokenizePath\n* @param extraOptions - optional options for the regexp\n* @returns a PathParser\n*/\nfunction tokensToParser(segments, extraOptions) {\n\tconst options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions);\n\tconst score = [];\n\tlet pattern = options.start ? \"^\" : \"\";\n\tconst keys = [];\n\tfor (const segment of segments) {\n\t\tconst segmentScores = segment.length ? [] : [PathScore.Root];\n\t\tif (options.strict && !segment.length) pattern += \"/\";\n\t\tfor (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {\n\t\t\tconst token = segment[tokenIndex];\n\t\t\tlet subSegmentScore = PathScore.Segment + (options.sensitive ? PathScore.BonusCaseSensitive : 0);\n\t\t\tif (token.type === TokenType.Static) {\n\t\t\t\tif (!tokenIndex) pattern += \"/\";\n\t\t\t\tpattern += token.value.replace(REGEX_CHARS_RE, \"\\\\$&\");\n\t\t\t\tsubSegmentScore += PathScore.Static;\n\t\t\t} else if (token.type === TokenType.Param) {\n\t\t\t\tconst { value, repeatable, optional, regexp } = token;\n\t\t\t\tkeys.push({\n\t\t\t\t\tname: value,\n\t\t\t\t\trepeatable,\n\t\t\t\t\toptional\n\t\t\t\t});\n\t\t\t\tconst re$1 = regexp ? regexp : BASE_PARAM_PATTERN;\n\t\t\t\tif (re$1 !== BASE_PARAM_PATTERN) {\n\t\t\t\t\tsubSegmentScore += PathScore.BonusCustomRegExp;\n\t\t\t\t\ttry {\n\t\t\t\t\t\t`${re$1}`;\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tthrow new Error(`Invalid custom RegExp for param \"${value}\" (${re$1}): ` + err.message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet subPattern = repeatable ? `((?:${re$1})(?:/(?:${re$1}))*)` : `(${re$1})`;\n\t\t\t\tif (!tokenIndex) subPattern = optional && segment.length < 2 ? `(?:/${subPattern})` : \"/\" + subPattern;\n\t\t\t\tif (optional) subPattern += \"?\";\n\t\t\t\tpattern += subPattern;\n\t\t\t\tsubSegmentScore += PathScore.Dynamic;\n\t\t\t\tif (optional) subSegmentScore += PathScore.BonusOptional;\n\t\t\t\tif (repeatable) subSegmentScore += PathScore.BonusRepeatable;\n\t\t\t\tif (re$1 === \".*\") subSegmentScore += PathScore.BonusWildcard;\n\t\t\t}\n\t\t\tsegmentScores.push(subSegmentScore);\n\t\t}\n\t\tscore.push(segmentScores);\n\t}\n\tif (options.strict && options.end) {\n\t\tconst i = score.length - 1;\n\t\tscore[i][score[i].length - 1] += PathScore.BonusStrict;\n\t}\n\tif (!options.strict) pattern += \"/?\";\n\tif (options.end) pattern += \"$\";\n\telse if (options.strict && !pattern.endsWith(\"/\")) pattern += \"(?:/|$)\";\n\tconst re = new RegExp(pattern, options.sensitive ? \"\" : \"i\");\n\tfunction parse(path) {\n\t\tconst match = path.match(re);\n\t\tconst params = {};\n\t\tif (!match) return null;\n\t\tfor (let i = 1; i < match.length; i++) {\n\t\t\tconst value = match[i] || \"\";\n\t\t\tconst key = keys[i - 1];\n\t\t\tparams[key.name] = value && key.repeatable ? value.split(\"/\") : value;\n\t\t}\n\t\treturn params;\n\t}\n\tfunction stringify(params) {\n\t\tlet path = \"\";\n\t\tlet avoidDuplicatedSlash = false;\n\t\tfor (const segment of segments) {\n\t\t\tif (!avoidDuplicatedSlash || !path.endsWith(\"/\")) path += \"/\";\n\t\t\tavoidDuplicatedSlash = false;\n\t\t\tfor (const token of segment) if (token.type === TokenType.Static) path += token.value;\n\t\t\telse if (token.type === TokenType.Param) {\n\t\t\t\tconst { value, repeatable, optional } = token;\n\t\t\t\tconst param = value in params ? params[value] : \"\";\n\t\t\t\tif (isArray(param) && !repeatable) throw new Error(`Provided param \"${value}\" is an array but it is not repeatable (* or + modifiers)`);\n\t\t\t\tconst text = isArray(param) ? param.join(\"/\") : param;\n\t\t\t\tif (!text) if (optional) {\n\t\t\t\t\tif (segment.length < 2) if (path.endsWith(\"/\")) path = path.slice(0, -1);\n\t\t\t\t\telse avoidDuplicatedSlash = true;\n\t\t\t\t} else throw new Error(`Missing required param \"${value}\"`);\n\t\t\t\tpath += text;\n\t\t\t}\n\t\t}\n\t\treturn path || \"/\";\n\t}\n\treturn {\n\t\tre,\n\t\tscore,\n\t\tkeys,\n\t\tparse,\n\t\tstringify\n\t};\n}\n/**\n* Compares an array of numbers as used in PathParser.score and returns a\n* number. This function can be used to `sort` an array\n*\n* @param a - first array of numbers\n* @param b - second array of numbers\n* @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n* should be sorted first\n*/\nfunction compareScoreArray(a, b) {\n\tlet i = 0;\n\twhile (i < a.length && i < b.length) {\n\t\tconst diff = b[i] - a[i];\n\t\tif (diff) return diff;\n\t\ti++;\n\t}\n\tif (a.length < b.length) return a.length === 1 && a[0] === PathScore.Static + PathScore.Segment ? -1 : 1;\n\telse if (a.length > b.length) return b.length === 1 && b[0] === PathScore.Static + PathScore.Segment ? 1 : -1;\n\treturn 0;\n}\n/**\n* Compare function that can be used with `sort` to sort an array of PathParser\n*\n* @param a - first PathParser\n* @param b - second PathParser\n* @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n*/\nfunction comparePathParserScore(a, b) {\n\tlet i = 0;\n\tconst aScore = a.score;\n\tconst bScore = b.score;\n\twhile (i < aScore.length && i < bScore.length) {\n\t\tconst comp = compareScoreArray(aScore[i], bScore[i]);\n\t\tif (comp) return comp;\n\t\ti++;\n\t}\n\tif (Math.abs(bScore.length - aScore.length) === 1) {\n\t\tif (isLastScoreNegative(aScore)) return 1;\n\t\tif (isLastScoreNegative(bScore)) return -1;\n\t}\n\treturn bScore.length - aScore.length;\n}\n/**\n* This allows detecting splats at the end of a path: /home/:id(.*)*\n*\n* @param score - score to check\n* @returns true if the last entry is negative\n*/\nfunction isLastScoreNegative(score) {\n\tconst last = score[score.length - 1];\n\treturn score.length > 0 && last[last.length - 1] < 0;\n}\nconst PATH_PARSER_OPTIONS_DEFAULTS = {\n\tstrict: false,\n\tend: true,\n\tsensitive: false\n};\n\n//#endregion\n//#region src/matcher/pathMatcher.ts\nfunction createRouteRecordMatcher(record, parent, options) {\n\tconst parser = tokensToParser(tokenizePath(record.path), options);\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst existingKeys = /* @__PURE__ */ new Set();\n\t\tfor (const key of parser.keys) {\n\t\t\tif (existingKeys.has(key.name)) warn$1(`Found duplicated params with name \"${key.name}\" for path \"${record.path}\". Only the last one will be available on \"$route.params\".`);\n\t\t\texistingKeys.add(key.name);\n\t\t}\n\t}\n\tconst matcher = assign(parser, {\n\t\trecord,\n\t\tparent,\n\t\tchildren: [],\n\t\talias: []\n\t});\n\tif (parent) {\n\t\tif (!matcher.record.aliasOf === !parent.record.aliasOf) parent.children.push(matcher);\n\t}\n\treturn matcher;\n}\n\n//#endregion\n//#region src/matcher/index.ts\n/**\n* Creates a Router Matcher.\n*\n* @internal\n* @param routes - array of initial routes\n* @param globalOptions - global route options\n*/\nfunction createRouterMatcher(routes, globalOptions) {\n\tconst matchers = [];\n\tconst matcherMap = /* @__PURE__ */ new Map();\n\tglobalOptions = mergeOptions(PATH_PARSER_OPTIONS_DEFAULTS, globalOptions);\n\tfunction getRecordMatcher(name) {\n\t\treturn matcherMap.get(name);\n\t}\n\tfunction addRoute(record, parent, originalRecord) {\n\t\tconst isRootAdd = !originalRecord;\n\t\tconst mainNormalizedRecord = normalizeRouteRecord(record);\n\t\tif (process.env.NODE_ENV !== \"production\") checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent);\n\t\tmainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;\n\t\tconst options = mergeOptions(globalOptions, record);\n\t\tconst normalizedRecords = [mainNormalizedRecord];\n\t\tif (\"alias\" in record) {\n\t\t\tconst aliases = typeof record.alias === \"string\" ? [record.alias] : record.alias;\n\t\t\tfor (const alias of aliases) normalizedRecords.push(normalizeRouteRecord(assign({}, mainNormalizedRecord, {\n\t\t\t\tcomponents: originalRecord ? originalRecord.record.components : mainNormalizedRecord.components,\n\t\t\t\tpath: alias,\n\t\t\t\taliasOf: originalRecord ? originalRecord.record : mainNormalizedRecord\n\t\t\t})));\n\t\t}\n\t\tlet matcher;\n\t\tlet originalMatcher;\n\t\tfor (const normalizedRecord of normalizedRecords) {\n\t\t\tconst { path } = normalizedRecord;\n\t\t\tif (parent && path[0] !== \"/\") {\n\t\t\t\tconst parentPath = parent.record.path;\n\t\t\t\tconst connectingSlash = parentPath[parentPath.length - 1] === \"/\" ? \"\" : \"/\";\n\t\t\t\tnormalizedRecord.path = parent.record.path + (path && connectingSlash + path);\n\t\t\t}\n\t\t\tif (process.env.NODE_ENV !== \"production\" && normalizedRecord.path === \"*\") throw new Error(\"Catch all routes (\\\"*\\\") must now be defined using a param with a custom regexp.\\nSee more at https://router.vuejs.org/guide/migration/#Removed-star-or-catch-all-routes.\");\n\t\t\tmatcher = createRouteRecordMatcher(normalizedRecord, parent, options);\n\t\t\tif (process.env.NODE_ENV !== \"production\" && parent && path[0] === \"/\") checkMissingParamsInAbsolutePath(matcher, parent);\n\t\t\tif (originalRecord) {\n\t\t\t\toriginalRecord.alias.push(matcher);\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") checkSameParams(originalRecord, matcher);\n\t\t\t} else {\n\t\t\t\toriginalMatcher = originalMatcher || matcher;\n\t\t\t\tif (originalMatcher !== matcher) originalMatcher.alias.push(matcher);\n\t\t\t\tif (isRootAdd && record.name && !isAliasRecord(matcher)) {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") checkSameNameAsAncestor(record, parent);\n\t\t\t\t\tremoveRoute(record.name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isMatchable(matcher)) insertMatcher(matcher);\n\t\t\tif (mainNormalizedRecord.children) {\n\t\t\t\tconst children = mainNormalizedRecord.children;\n\t\t\t\tfor (let i = 0; i < children.length; i++) addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);\n\t\t\t}\n\t\t\toriginalRecord = originalRecord || matcher;\n\t\t}\n\t\treturn originalMatcher ? () => {\n\t\t\tremoveRoute(originalMatcher);\n\t\t} : noop;\n\t}\n\tfunction removeRoute(matcherRef) {\n\t\tif (isRouteName(matcherRef)) {\n\t\t\tconst matcher = matcherMap.get(matcherRef);\n\t\t\tif (matcher) {\n\t\t\t\tmatcherMap.delete(matcherRef);\n\t\t\t\tmatchers.splice(matchers.indexOf(matcher), 1);\n\t\t\t\tmatcher.children.forEach(removeRoute);\n\t\t\t\tmatcher.alias.forEach(removeRoute);\n\t\t\t}\n\t\t} else {\n\t\t\tconst index = matchers.indexOf(matcherRef);\n\t\t\tif (index > -1) {\n\t\t\t\tmatchers.splice(index, 1);\n\t\t\t\tif (matcherRef.record.name) matcherMap.delete(matcherRef.record.name);\n\t\t\t\tmatcherRef.children.forEach(removeRoute);\n\t\t\t\tmatcherRef.alias.forEach(removeRoute);\n\t\t\t}\n\t\t}\n\t}\n\tfunction getRoutes() {\n\t\treturn matchers;\n\t}\n\tfunction insertMatcher(matcher) {\n\t\tconst index = findInsertionIndex(matcher, matchers);\n\t\tmatchers.splice(index, 0, matcher);\n\t\tif (matcher.record.name && !isAliasRecord(matcher)) matcherMap.set(matcher.record.name, matcher);\n\t}\n\tfunction resolve(location$1, currentLocation) {\n\t\tlet matcher;\n\t\tlet params = {};\n\t\tlet path;\n\t\tlet name;\n\t\tif (\"name\" in location$1 && location$1.name) {\n\t\t\tmatcher = matcherMap.get(location$1.name);\n\t\t\tif (!matcher) throw createRouterError(ErrorTypes.MATCHER_NOT_FOUND, { location: location$1 });\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\t\tconst invalidParams = Object.keys(location$1.params || {}).filter((paramName) => !matcher.keys.find((k) => k.name === paramName));\n\t\t\t\tif (invalidParams.length) warn$1(`Discarded invalid param(s) \"${invalidParams.join(\"\\\", \\\"\")}\" when navigating. See https://github.com/vuejs/router/blob/main/packages/router/CHANGELOG.md#414-2022-08-22 for more details.`);\n\t\t\t}\n\t\t\tname = matcher.record.name;\n\t\t\tparams = assign(pickParams(currentLocation.params, matcher.keys.filter((k) => !k.optional).concat(matcher.parent ? matcher.parent.keys.filter((k) => k.optional) : []).map((k) => k.name)), location$1.params && pickParams(location$1.params, matcher.keys.map((k) => k.name)));\n\t\t\tpath = matcher.stringify(params);\n\t\t} else if (location$1.path != null) {\n\t\t\tpath = location$1.path;\n\t\t\tif (process.env.NODE_ENV !== \"production\" && !path.startsWith(\"/\")) warn$1(`The Matcher cannot resolve relative paths but received \"${path}\". Unless you directly called \\`matcher.resolve(\"${path}\")\\`, this is probably a bug in vue-router. Please open an issue at https://github.com/vuejs/router/issues/new/choose.`);\n\t\t\tmatcher = matchers.find((m) => m.re.test(path));\n\t\t\tif (matcher) {\n\t\t\t\tparams = matcher.parse(path);\n\t\t\t\tname = matcher.record.name;\n\t\t\t}\n\t\t} else {\n\t\t\tmatcher = currentLocation.name ? matcherMap.get(currentLocation.name) : matchers.find((m) => m.re.test(currentLocation.path));\n\t\t\tif (!matcher) throw createRouterError(ErrorTypes.MATCHER_NOT_FOUND, {\n\t\t\t\tlocation: location$1,\n\t\t\t\tcurrentLocation\n\t\t\t});\n\t\t\tname = matcher.record.name;\n\t\t\tparams = assign({}, currentLocation.params, location$1.params);\n\t\t\tpath = matcher.stringify(params);\n\t\t}\n\t\tconst matched = [];\n\t\tlet parentMatcher = matcher;\n\t\twhile (parentMatcher) {\n\t\t\tmatched.unshift(parentMatcher.record);\n\t\t\tparentMatcher = parentMatcher.parent;\n\t\t}\n\t\treturn {\n\t\t\tname,\n\t\t\tpath,\n\t\t\tparams,\n\t\t\tmatched,\n\t\t\tmeta: mergeMetaFields(matched)\n\t\t};\n\t}\n\troutes.forEach((route) => addRoute(route));\n\tfunction clearRoutes() {\n\t\tmatchers.length = 0;\n\t\tmatcherMap.clear();\n\t}\n\treturn {\n\t\taddRoute,\n\t\tresolve,\n\t\tremoveRoute,\n\t\tclearRoutes,\n\t\tgetRoutes,\n\t\tgetRecordMatcher\n\t};\n}\n/**\n* Picks an object param to contain only specified keys.\n*\n* @param params - params object to pick from\n* @param keys - keys to pick\n*/\nfunction pickParams(params, keys) {\n\tconst newParams = {};\n\tfor (const key of keys) if (key in params) newParams[key] = params[key];\n\treturn newParams;\n}\n/**\n* Normalizes a RouteRecordRaw. Creates a copy\n*\n* @param record\n* @returns the normalized version\n*/\nfunction normalizeRouteRecord(record) {\n\tconst normalized = {\n\t\tpath: record.path,\n\t\tredirect: record.redirect,\n\t\tname: record.name,\n\t\tmeta: record.meta || {},\n\t\taliasOf: record.aliasOf,\n\t\tbeforeEnter: record.beforeEnter,\n\t\tprops: normalizeRecordProps(record),\n\t\tchildren: record.children || [],\n\t\tinstances: {},\n\t\tleaveGuards: /* @__PURE__ */ new Set(),\n\t\tupdateGuards: /* @__PURE__ */ new Set(),\n\t\tenterCallbacks: {},\n\t\tcomponents: \"components\" in record ? record.components || null : record.component && { default: record.component }\n\t};\n\tObject.defineProperty(normalized, \"mods\", { value: {} });\n\treturn normalized;\n}\n/**\n* Normalize the optional `props` in a record to always be an object similar to\n* components. Also accept a boolean for components.\n* @param record\n*/\nfunction normalizeRecordProps(record) {\n\tconst propsObject = {};\n\tconst props = record.props || false;\n\tif (\"component\" in record) propsObject.default = props;\n\telse for (const name in record.components) propsObject[name] = typeof props === \"object\" ? props[name] : props;\n\treturn propsObject;\n}\n/**\n* Checks if a record or any of its parent is an alias\n* @param record\n*/\nfunction isAliasRecord(record) {\n\twhile (record) {\n\t\tif (record.record.aliasOf) return true;\n\t\trecord = record.parent;\n\t}\n\treturn false;\n}\n/**\n* Merge meta fields of an array of records\n*\n* @param matched - array of matched records\n*/\nfunction mergeMetaFields(matched) {\n\treturn matched.reduce((meta, record) => assign(meta, record.meta), {});\n}\nfunction isSameParam(a, b) {\n\treturn a.name === b.name && a.optional === b.optional && a.repeatable === b.repeatable;\n}\n/**\n* Check if a path and its alias have the same required params\n*\n* @param a - original record\n* @param b - alias record\n*/\nfunction checkSameParams(a, b) {\n\tfor (const key of a.keys) if (!key.optional && !b.keys.find(isSameParam.bind(null, key))) return warn$1(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\n\tfor (const key of b.keys) if (!key.optional && !a.keys.find(isSameParam.bind(null, key))) return warn$1(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\n}\n/**\n* A route with a name and a child with an empty path without a name should warn when adding the route\n*\n* @param mainNormalizedRecord - RouteRecordNormalized\n* @param parent - RouteRecordMatcher\n*/\nfunction checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent) {\n\tif (parent && parent.record.name && !mainNormalizedRecord.name && !mainNormalizedRecord.path) warn$1(`The route named \"${String(parent.record.name)}\" has a child without a name and an empty path. Using that name won't render the empty path child so you probably want to move the name to the child instead. If this is intentional, add a name to the child route to remove the warning.`);\n}\nfunction checkSameNameAsAncestor(record, parent) {\n\tfor (let ancestor = parent; ancestor; ancestor = ancestor.parent) if (ancestor.record.name === record.name) throw new Error(`A route named \"${String(record.name)}\" has been added as a ${parent === ancestor ? \"child\" : \"descendant\"} of a route with the same name. Route names must be unique and a nested route cannot use the same name as an ancestor.`);\n}\nfunction checkMissingParamsInAbsolutePath(record, parent) {\n\tfor (const key of parent.keys) if (!record.keys.find(isSameParam.bind(null, key))) return warn$1(`Absolute path \"${record.record.path}\" must have the exact same param named \"${key.name}\" as its parent \"${parent.record.path}\".`);\n}\n/**\n* Performs a binary search to find the correct insertion index for a new matcher.\n*\n* Matchers are primarily sorted by their score. If scores are tied then we also consider parent/child relationships,\n* with descendants coming before ancestors. If there's still a tie, new routes are inserted after existing routes.\n*\n* @param matcher - new matcher to be inserted\n* @param matchers - existing matchers\n*/\nfunction findInsertionIndex(matcher, matchers) {\n\tlet lower = 0;\n\tlet upper = matchers.length;\n\twhile (lower !== upper) {\n\t\tconst mid = lower + upper >> 1;\n\t\tif (comparePathParserScore(matcher, matchers[mid]) < 0) upper = mid;\n\t\telse lower = mid + 1;\n\t}\n\tconst insertionAncestor = getInsertionAncestor(matcher);\n\tif (insertionAncestor) {\n\t\tupper = matchers.lastIndexOf(insertionAncestor, upper - 1);\n\t\tif (process.env.NODE_ENV !== \"production\" && upper < 0) warn$1(`Finding ancestor route \"${insertionAncestor.record.path}\" failed for \"${matcher.record.path}\"`);\n\t}\n\treturn upper;\n}\nfunction getInsertionAncestor(matcher) {\n\tlet ancestor = matcher;\n\twhile (ancestor = ancestor.parent) if (isMatchable(ancestor) && comparePathParserScore(matcher, ancestor) === 0) return ancestor;\n}\n/**\n* Checks if a matcher can be reachable. This means if it's possible to reach it as a route. For example, routes without\n* a component, or name, or redirect, are just used to group other routes.\n* @param matcher\n* @param matcher.record record of the matcher\n* @returns\n*/\nfunction isMatchable({ record }) {\n\treturn !!(record.name || record.components && Object.keys(record.components).length || record.redirect);\n}\n\n//#endregion\n//#region src/RouterLink.ts\n/**\n* Returns the internal behavior of a {@link RouterLink} without the rendering part.\n*\n* @param props - a `to` location and an optional `replace` flag\n*/\nfunction useLink(props) {\n\tconst router = inject(routerKey);\n\tconst currentRoute = inject(routeLocationKey);\n\tlet hasPrevious = false;\n\tlet previousTo = null;\n\tconst route = computed(() => {\n\t\tconst to = unref(props.to);\n\t\tif (process.env.NODE_ENV !== \"production\" && (!hasPrevious || to !== previousTo)) {\n\t\t\tif (!isRouteLocation(to)) if (hasPrevious) warn$1(`Invalid value for prop \"to\" in useLink()\\n- to:`, to, `\\n- previous to:`, previousTo, `\\n- props:`, props);\n\t\t\telse warn$1(`Invalid value for prop \"to\" in useLink()\\n- to:`, to, `\\n- props:`, props);\n\t\t\tpreviousTo = to;\n\t\t\thasPrevious = true;\n\t\t}\n\t\treturn router.resolve(to);\n\t});\n\tconst activeRecordIndex = computed(() => {\n\t\tconst { matched } = route.value;\n\t\tconst { length } = matched;\n\t\tconst routeMatched = matched[length - 1];\n\t\tconst currentMatched = currentRoute.matched;\n\t\tif (!routeMatched || !currentMatched.length) return -1;\n\t\tconst index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));\n\t\tif (index > -1) return index;\n\t\tconst parentRecordPath = getOriginalPath(matched[length - 2]);\n\t\treturn length > 1 && getOriginalPath(routeMatched) === parentRecordPath && currentMatched[currentMatched.length - 1].path !== parentRecordPath ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2])) : index;\n\t});\n\tconst isActive = computed(() => activeRecordIndex.value > -1 && includesParams(currentRoute.params, route.value.params));\n\tconst isExactActive = computed(() => activeRecordIndex.value > -1 && activeRecordIndex.value === currentRoute.matched.length - 1 && isSameRouteLocationParams(currentRoute.params, route.value.params));\n\tfunction navigate(e = {}) {\n\t\tif (guardEvent(e)) {\n\t\t\tconst p = router[unref(props.replace) ? \"replace\" : \"push\"](unref(props.to)).catch(noop);\n\t\t\tif (props.viewTransition && typeof document !== \"undefined\" && \"startViewTransition\" in document) document.startViewTransition(() => p);\n\t\t\treturn p;\n\t\t}\n\t\treturn Promise.resolve();\n\t}\n\tif ((process.env.NODE_ENV !== \"production\" || __VUE_PROD_DEVTOOLS__) && isBrowser) {\n\t\tconst instance = getCurrentInstance();\n\t\tif (instance) {\n\t\t\tconst linkContextDevtools = {\n\t\t\t\troute: route.value,\n\t\t\t\tisActive: isActive.value,\n\t\t\t\tisExactActive: isExactActive.value,\n\t\t\t\terror: null\n\t\t\t};\n\t\t\tinstance.__vrl_devtools = instance.__vrl_devtools || [];\n\t\t\tinstance.__vrl_devtools.push(linkContextDevtools);\n\t\t\twatchEffect(() => {\n\t\t\t\tlinkContextDevtools.route = route.value;\n\t\t\t\tlinkContextDevtools.isActive = isActive.value;\n\t\t\t\tlinkContextDevtools.isExactActive = isExactActive.value;\n\t\t\t\tlinkContextDevtools.error = isRouteLocation(unref(props.to)) ? null : \"Invalid \\\"to\\\" value\";\n\t\t\t}, { flush: \"post\" });\n\t\t}\n\t}\n\t/**\n\t* NOTE: update {@link _RouterLinkI}'s `$slots` type when updating this\n\t*/\n\treturn {\n\t\troute,\n\t\thref: computed(() => route.value.href),\n\t\tisActive,\n\t\tisExactActive,\n\t\tnavigate\n\t};\n}\nfunction preferSingleVNode(vnodes) {\n\treturn vnodes.length === 1 ? vnodes[0] : vnodes;\n}\nconst RouterLinkImpl = /* @__PURE__ */ defineComponent({\n\tname: \"RouterLink\",\n\tcompatConfig: { MODE: 3 },\n\tprops: {\n\t\tto: {\n\t\t\ttype: [String, Object],\n\t\t\trequired: true\n\t\t},\n\t\treplace: Boolean,\n\t\tactiveClass: String,\n\t\texactActiveClass: String,\n\t\tcustom: Boolean,\n\t\tariaCurrentValue: {\n\t\t\ttype: String,\n\t\t\tdefault: \"page\"\n\t\t},\n\t\tviewTransition: Boolean\n\t},\n\tuseLink,\n\tsetup(props, { slots }) {\n\t\tconst link = reactive(useLink(props));\n\t\tconst { options } = inject(routerKey);\n\t\tconst elClass = computed(() => ({\n\t\t\t[getLinkClass(props.activeClass, options.linkActiveClass, \"router-link-active\")]: link.isActive,\n\t\t\t[getLinkClass(props.exactActiveClass, options.linkExactActiveClass, \"router-link-exact-active\")]: link.isExactActive\n\t\t}));\n\t\treturn () => {\n\t\t\tconst children = slots.default && preferSingleVNode(slots.default(link));\n\t\t\treturn props.custom ? children : h(\"a\", {\n\t\t\t\t\"aria-current\": link.isExactActive ? props.ariaCurrentValue : null,\n\t\t\t\thref: link.href,\n\t\t\t\tonClick: link.navigate,\n\t\t\t\tclass: elClass.value\n\t\t\t}, children);\n\t\t};\n\t}\n});\n/**\n* Component to render a link that triggers a navigation on click.\n*/\nconst RouterLink = RouterLinkImpl;\nfunction guardEvent(e) {\n\tif (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return;\n\tif (e.defaultPrevented) return;\n\tif (e.button !== void 0 && e.button !== 0) return;\n\tif (e.currentTarget && e.currentTarget.getAttribute) {\n\t\tconst target = e.currentTarget.getAttribute(\"target\");\n\t\tif (/\\b_blank\\b/i.test(target)) return;\n\t}\n\tif (e.preventDefault) e.preventDefault();\n\treturn true;\n}\nfunction includesParams(outer, inner) {\n\tfor (const key in inner) {\n\t\tconst innerValue = inner[key];\n\t\tconst outerValue = outer[key];\n\t\tif (typeof innerValue === \"string\") {\n\t\t\tif (innerValue !== outerValue) return false;\n\t\t} else if (!isArray(outerValue) || outerValue.length !== innerValue.length || innerValue.some((value, i) => value.valueOf() !== outerValue[i].valueOf())) return false;\n\t}\n\treturn true;\n}\n/**\n* Get the original path value of a record by following its aliasOf\n* @param record\n*/\nfunction getOriginalPath(record) {\n\treturn record ? record.aliasOf ? record.aliasOf.path : record.path : \"\";\n}\n/**\n* Utility class to get the active class based on defaults.\n* @param propClass\n* @param globalClass\n* @param defaultClass\n*/\nconst getLinkClass = (propClass, globalClass, defaultClass) => propClass != null ? propClass : globalClass != null ? globalClass : defaultClass;\n\n//#endregion\n//#region src/RouterView.ts\nconst RouterViewImpl = /* @__PURE__ */ defineComponent({\n\tname: \"RouterView\",\n\tinheritAttrs: false,\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\tdefault: \"default\"\n\t\t},\n\t\troute: Object\n\t},\n\tcompatConfig: { MODE: 3 },\n\tsetup(props, { attrs, slots }) {\n\t\tprocess.env.NODE_ENV !== \"production\" && warnDeprecatedUsage();\n\t\tconst injectedRoute = inject(routerViewLocationKey);\n\t\tconst routeToDisplay = computed(() => props.route || injectedRoute.value);\n\t\tconst injectedDepth = inject(viewDepthKey, 0);\n\t\tconst depth = computed(() => {\n\t\t\tlet initialDepth = unref(injectedDepth);\n\t\t\tconst { matched } = routeToDisplay.value;\n\t\t\tlet matchedRoute;\n\t\t\twhile ((matchedRoute = matched[initialDepth]) && !matchedRoute.components) initialDepth++;\n\t\t\treturn initialDepth;\n\t\t});\n\t\tconst matchedRouteRef = computed(() => routeToDisplay.value.matched[depth.value]);\n\t\tprovide(viewDepthKey, computed(() => depth.value + 1));\n\t\tprovide(matchedRouteKey, matchedRouteRef);\n\t\tprovide(routerViewLocationKey, routeToDisplay);\n\t\tconst viewRef = ref();\n\t\twatch(() => [\n\t\t\tviewRef.value,\n\t\t\tmatchedRouteRef.value,\n\t\t\tprops.name\n\t\t], ([instance, to, name], [oldInstance, from, oldName]) => {\n\t\t\tif (to) {\n\t\t\t\tto.instances[name] = instance;\n\t\t\t\tif (from && from !== to && instance && instance === oldInstance) {\n\t\t\t\t\tif (!to.leaveGuards.size) to.leaveGuards = from.leaveGuards;\n\t\t\t\t\tif (!to.updateGuards.size) to.updateGuards = from.updateGuards;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (instance && to && (!from || !isSameRouteRecord(to, from) || !oldInstance)) (to.enterCallbacks[name] || []).forEach((callback) => callback(instance));\n\t\t}, { flush: \"post\" });\n\t\treturn () => {\n\t\t\tconst route = routeToDisplay.value;\n\t\t\tconst currentName = props.name;\n\t\t\tconst matchedRoute = matchedRouteRef.value;\n\t\t\tconst ViewComponent = matchedRoute && matchedRoute.components[currentName];\n\t\t\tif (!ViewComponent) return normalizeSlot(slots.default, {\n\t\t\t\tComponent: ViewComponent,\n\t\t\t\troute\n\t\t\t});\n\t\t\tconst routePropsOption = matchedRoute.props[currentName];\n\t\t\tconst routeProps = routePropsOption ? routePropsOption === true ? route.params : typeof routePropsOption === \"function\" ? routePropsOption(route) : routePropsOption : null;\n\t\t\tconst onVnodeUnmounted = (vnode) => {\n\t\t\t\tif (vnode.component.isUnmounted) matchedRoute.instances[currentName] = null;\n\t\t\t};\n\t\t\tconst component = h(ViewComponent, assign({}, routeProps, attrs, {\n\t\t\t\tonVnodeUnmounted,\n\t\t\t\tref: viewRef\n\t\t\t}));\n\t\t\tif ((process.env.NODE_ENV !== \"production\" || __VUE_PROD_DEVTOOLS__) && isBrowser && component.ref) {\n\t\t\t\tconst info = {\n\t\t\t\t\tdepth: depth.value,\n\t\t\t\t\tname: matchedRoute.name,\n\t\t\t\t\tpath: matchedRoute.path,\n\t\t\t\t\tmeta: matchedRoute.meta\n\t\t\t\t};\n\t\t\t\t(isArray(component.ref) ? component.ref.map((r) => r.i) : [component.ref.i]).forEach((instance) => {\n\t\t\t\t\tinstance.__vrv_devtools = info;\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn normalizeSlot(slots.default, {\n\t\t\t\tComponent: component,\n\t\t\t\troute\n\t\t\t}) || component;\n\t\t};\n\t}\n});\nfunction normalizeSlot(slot, data) {\n\tif (!slot) return null;\n\tconst slotContent = slot(data);\n\treturn slotContent.length === 1 ? slotContent[0] : slotContent;\n}\n/**\n* Component to display the current route the user is at.\n*/\nconst RouterView = RouterViewImpl;\nfunction warnDeprecatedUsage() {\n\tconst instance = getCurrentInstance();\n\tconst parentName = instance.parent && instance.parent.type.name;\n\tconst parentSubTreeType = instance.parent && instance.parent.subTree && instance.parent.subTree.type;\n\tif (parentName && (parentName === \"KeepAlive\" || parentName.includes(\"Transition\")) && typeof parentSubTreeType === \"object\" && parentSubTreeType.name === \"RouterView\") {\n\t\tconst comp = parentName === \"KeepAlive\" ? \"keep-alive\" : \"transition\";\n\t\twarn$1(`<router-view> can no longer be used directly inside <transition> or <keep-alive>.\nUse slot props instead:\n\n<router-view v-slot=\"{ Component }\">\n <${comp}>\\n <component :is=\"Component\" />\\n </${comp}>\\n</router-view>`);\n\t}\n}\n\n//#endregion\n//#region src/router.ts\n/**\n* Creates a Router instance that can be used by a Vue app.\n*\n* @param options - {@link RouterOptions}\n*/\nfunction createRouter(options) {\n\tconst matcher = createRouterMatcher(options.routes, options);\n\tconst parseQuery$1 = options.parseQuery || parseQuery;\n\tconst stringifyQuery$1 = options.stringifyQuery || stringifyQuery;\n\tconst routerHistory = options.history;\n\tif (process.env.NODE_ENV !== \"production\" && !routerHistory) throw new Error(\"Provide the \\\"history\\\" option when calling \\\"createRouter()\\\": https://router.vuejs.org/api/interfaces/RouterOptions.html#history\");\n\tconst beforeGuards = useCallbacks();\n\tconst beforeResolveGuards = useCallbacks();\n\tconst afterGuards = useCallbacks();\n\tconst currentRoute = shallowRef(START_LOCATION_NORMALIZED);\n\tlet pendingLocation = START_LOCATION_NORMALIZED;\n\tif (isBrowser && options.scrollBehavior && \"scrollRestoration\" in history) history.scrollRestoration = \"manual\";\n\tconst normalizeParams = applyToParams.bind(null, (paramValue) => \"\" + paramValue);\n\tconst encodeParams = applyToParams.bind(null, encodeParam);\n\tconst decodeParams = applyToParams.bind(null, decode);\n\tfunction addRoute(parentOrRoute, route) {\n\t\tlet parent;\n\t\tlet record;\n\t\tif (isRouteName(parentOrRoute)) {\n\t\t\tparent = matcher.getRecordMatcher(parentOrRoute);\n\t\t\tif (process.env.NODE_ENV !== \"production\" && !parent) warn$1(`Parent route \"${String(parentOrRoute)}\" not found when adding child route`, route);\n\t\t\trecord = route;\n\t\t} else record = parentOrRoute;\n\t\treturn matcher.addRoute(record, parent);\n\t}\n\tfunction removeRoute(name) {\n\t\tconst recordMatcher = matcher.getRecordMatcher(name);\n\t\tif (recordMatcher) matcher.removeRoute(recordMatcher);\n\t\telse if (process.env.NODE_ENV !== \"production\") warn$1(`Cannot remove non-existent route \"${String(name)}\"`);\n\t}\n\tfunction getRoutes() {\n\t\treturn matcher.getRoutes().map((routeMatcher) => routeMatcher.record);\n\t}\n\tfunction hasRoute(name) {\n\t\treturn !!matcher.getRecordMatcher(name);\n\t}\n\tfunction resolve(rawLocation, currentLocation) {\n\t\tcurrentLocation = assign({}, currentLocation || currentRoute.value);\n\t\tif (typeof rawLocation === \"string\") {\n\t\t\tconst locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);\n\t\t\tconst matchedRoute$1 = matcher.resolve({ path: locationNormalized.path }, currentLocation);\n\t\t\tconst href$1 = routerHistory.createHref(locationNormalized.fullPath);\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\t\tif (href$1.startsWith(\"//\")) warn$1(`Location \"${rawLocation}\" resolved to \"${href$1}\". A resolved location cannot start with multiple slashes.`);\n\t\t\t\telse if (!matchedRoute$1.matched.length) warn$1(`No match found for location with path \"${rawLocation}\"`);\n\t\t\t}\n\t\t\treturn assign(locationNormalized, matchedRoute$1, {\n\t\t\t\tparams: decodeParams(matchedRoute$1.params),\n\t\t\t\thash: decode(locationNormalized.hash),\n\t\t\t\tredirectedFrom: void 0,\n\t\t\t\thref: href$1\n\t\t\t});\n\t\t}\n\t\tif (process.env.NODE_ENV !== \"production\" && !isRouteLocation(rawLocation)) {\n\t\t\twarn$1(`router.resolve() was passed an invalid location. This will fail in production.\\n- Location:`, rawLocation);\n\t\t\treturn resolve({});\n\t\t}\n\t\tlet matcherLocation;\n\t\tif (rawLocation.path != null) {\n\t\t\tif (process.env.NODE_ENV !== \"production\" && \"params\" in rawLocation && !(\"name\" in rawLocation) && Object.keys(rawLocation.params).length) warn$1(`Path \"${rawLocation.path}\" was passed with params but they will be ignored. Use a named route alongside params instead.`);\n\t\t\tmatcherLocation = assign({}, rawLocation, { path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path });\n\t\t} else {\n\t\t\tconst targetParams = assign({}, rawLocation.params);\n\t\t\tfor (const key in targetParams) if (targetParams[key] == null) delete targetParams[key];\n\t\t\tmatcherLocation = assign({}, rawLocation, { params: encodeParams(targetParams) });\n\t\t\tcurrentLocation.params = encodeParams(currentLocation.params);\n\t\t}\n\t\tconst matchedRoute = matcher.resolve(matcherLocation, currentLocation);\n\t\tconst hash = rawLocation.hash || \"\";\n\t\tif (process.env.NODE_ENV !== \"production\" && hash && !hash.startsWith(\"#\")) warn$1(`A \\`hash\\` should always start with the character \"#\". Replace \"${hash}\" with \"#${hash}\".`);\n\t\tmatchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));\n\t\tconst fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, {\n\t\t\thash: encodeHash(hash),\n\t\t\tpath: matchedRoute.path\n\t\t}));\n\t\tconst href = routerHistory.createHref(fullPath);\n\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\tif (href.startsWith(\"//\")) warn$1(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\n\t\t\telse if (!matchedRoute.matched.length) warn$1(`No match found for location with path \"${rawLocation.path != null ? rawLocation.path : rawLocation}\"`);\n\t\t}\n\t\treturn assign({\n\t\t\tfullPath,\n\t\t\thash,\n\t\t\tquery: stringifyQuery$1 === stringifyQuery ? normalizeQuery(rawLocation.query) : rawLocation.query || {}\n\t\t}, matchedRoute, {\n\t\t\tredirectedFrom: void 0,\n\t\t\thref\n\t\t});\n\t}\n\tfunction locationAsObject(to) {\n\t\treturn typeof to === \"string\" ? parseURL(parseQuery$1, to, currentRoute.value.path) : assign({}, to);\n\t}\n\tfunction checkCanceledNavigation(to, from) {\n\t\tif (pendingLocation !== to) return createRouterError(ErrorTypes.NAVIGATION_CANCELLED, {\n\t\t\tfrom,\n\t\t\tto\n\t\t});\n\t}\n\tfunction push(to) {\n\t\treturn pushWithRedirect(to);\n\t}\n\tfunction replace(to) {\n\t\treturn push(assign(locationAsObject(to), { replace: true }));\n\t}\n\tfunction handleRedirectRecord(to, from) {\n\t\tconst lastMatched = to.matched[to.matched.length - 1];\n\t\tif (lastMatched && lastMatched.redirect) {\n\t\t\tconst { redirect } = lastMatched;\n\t\t\tlet newTargetLocation = typeof redirect === \"function\" ? redirect(to, from) : redirect;\n\t\t\tif (typeof newTargetLocation === \"string\") {\n\t\t\t\tnewTargetLocation = newTargetLocation.includes(\"?\") || newTargetLocation.includes(\"#\") ? newTargetLocation = locationAsObject(newTargetLocation) : { path: newTargetLocation };\n\t\t\t\tnewTargetLocation.params = {};\n\t\t\t}\n\t\t\tif (process.env.NODE_ENV !== \"production\" && newTargetLocation.path == null && !(\"name\" in newTargetLocation)) {\n\t\t\t\twarn$1(`Invalid redirect found:\\n${JSON.stringify(newTargetLocation, null, 2)}\\n when navigating to \"${to.fullPath}\". A redirect must contain a name or path. This will break in production.`);\n\t\t\t\tthrow new Error(\"Invalid redirect\");\n\t\t\t}\n\t\t\treturn assign({\n\t\t\t\tquery: to.query,\n\t\t\t\thash: to.hash,\n\t\t\t\tparams: newTargetLocation.path != null ? {} : to.params\n\t\t\t}, newTargetLocation);\n\t\t}\n\t}\n\tfunction pushWithRedirect(to, redirectedFrom) {\n\t\tconst targetLocation = pendingLocation = resolve(to);\n\t\tconst from = currentRoute.value;\n\t\tconst data = to.state;\n\t\tconst force = to.force;\n\t\tconst replace$1 = to.replace === true;\n\t\tconst shouldRedirect = handleRedirectRecord(targetLocation, from);\n\t\tif (shouldRedirect) return pushWithRedirect(assign(locationAsObject(shouldRedirect), {\n\t\t\tstate: typeof shouldRedirect === \"object\" ? assign({}, data, shouldRedirect.state) : data,\n\t\t\tforce,\n\t\t\treplace: replace$1\n\t\t}), redirectedFrom || targetLocation);\n\t\tconst toLocation = targetLocation;\n\t\ttoLocation.redirectedFrom = redirectedFrom;\n\t\tlet failure;\n\t\tif (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) {\n\t\t\tfailure = createRouterError(ErrorTypes.NAVIGATION_DUPLICATED, {\n\t\t\t\tto: toLocation,\n\t\t\t\tfrom\n\t\t\t});\n\t\t\thandleScroll(from, from, true, false);\n\t\t}\n\t\treturn (failure ? Promise.resolve(failure) : navigate(toLocation, from)).catch((error) => isNavigationFailure(error) ? isNavigationFailure(error, ErrorTypes.NAVIGATION_GUARD_REDIRECT) ? error : markAsReady(error) : triggerError(error, toLocation, from)).then((failure$1) => {\n\t\t\tif (failure$1) {\n\t\t\t\tif (isNavigationFailure(failure$1, ErrorTypes.NAVIGATION_GUARD_REDIRECT)) {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\" && isSameRouteLocation(stringifyQuery$1, resolve(failure$1.to), toLocation) && redirectedFrom && (redirectedFrom._count = redirectedFrom._count ? redirectedFrom._count + 1 : 1) > 30) {\n\t\t\t\t\t\twarn$1(`Detected a possibly infinite redirection in a navigation guard when going from \"${from.fullPath}\" to \"${toLocation.fullPath}\". Aborting to avoid a Stack Overflow.\\n Are you always returning a new location within a navigation guard? That would lead to this error. Only return when redirecting or aborting, that should fix this. This might break in production if not fixed.`);\n\t\t\t\t\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Infinite redirect in navigation guard\"));\n\t\t\t\t\t}\n\t\t\t\t\treturn pushWithRedirect(assign({ replace: replace$1 }, locationAsObject(failure$1.to), {\n\t\t\t\t\t\tstate: typeof failure$1.to === \"object\" ? assign({}, data, failure$1.to.state) : data,\n\t\t\t\t\t\tforce\n\t\t\t\t\t}), redirectedFrom || toLocation);\n\t\t\t\t}\n\t\t\t} else failure$1 = finalizeNavigation(toLocation, from, true, replace$1, data);\n\t\t\ttriggerAfterEach(toLocation, from, failure$1);\n\t\t\treturn failure$1;\n\t\t});\n\t}\n\t/**\n\t* Helper to reject and skip all navigation guards if a new navigation happened\n\t* @param to\n\t* @param from\n\t*/\n\tfunction checkCanceledNavigationAndReject(to, from) {\n\t\tconst error = checkCanceledNavigation(to, from);\n\t\treturn error ? Promise.reject(error) : Promise.resolve();\n\t}\n\tfunction runWithContext(fn) {\n\t\tconst app = installedApps.values().next().value;\n\t\treturn app && typeof app.runWithContext === \"function\" ? app.runWithContext(fn) : fn();\n\t}\n\tfunction navigate(to, from) {\n\t\tlet guards;\n\t\tconst [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from);\n\t\tguards = extractComponentsGuards(leavingRecords.reverse(), \"beforeRouteLeave\", to, from);\n\t\tfor (const record of leavingRecords) record.leaveGuards.forEach((guard) => {\n\t\t\tguards.push(guardToPromiseFn(guard, to, from));\n\t\t});\n\t\tconst canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from);\n\t\tguards.push(canceledNavigationCheck);\n\t\treturn runGuardQueue(guards).then(() => {\n\t\t\tguards = [];\n\t\t\tfor (const guard of beforeGuards.list()) guards.push(guardToPromiseFn(guard, to, from));\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).then(() => {\n\t\t\tguards = extractComponentsGuards(updatingRecords, \"beforeRouteUpdate\", to, from);\n\t\t\tfor (const record of updatingRecords) record.updateGuards.forEach((guard) => {\n\t\t\t\tguards.push(guardToPromiseFn(guard, to, from));\n\t\t\t});\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).then(() => {\n\t\t\tguards = [];\n\t\t\tfor (const record of enteringRecords) if (record.beforeEnter) if (isArray(record.beforeEnter)) for (const beforeEnter of record.beforeEnter) guards.push(guardToPromiseFn(beforeEnter, to, from));\n\t\t\telse guards.push(guardToPromiseFn(record.beforeEnter, to, from));\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).then(() => {\n\t\t\tto.matched.forEach((record) => record.enterCallbacks = {});\n\t\t\tguards = extractComponentsGuards(enteringRecords, \"beforeRouteEnter\", to, from, runWithContext);\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).then(() => {\n\t\t\tguards = [];\n\t\t\tfor (const guard of beforeResolveGuards.list()) guards.push(guardToPromiseFn(guard, to, from));\n\t\t\tguards.push(canceledNavigationCheck);\n\t\t\treturn runGuardQueue(guards);\n\t\t}).catch((err) => isNavigationFailure(err, ErrorTypes.NAVIGATION_CANCELLED) ? err : Promise.reject(err));\n\t}\n\tfunction triggerAfterEach(to, from, failure) {\n\t\tafterGuards.list().forEach((guard) => runWithContext(() => guard(to, from, failure)));\n\t}\n\t/**\n\t* - Cleans up any navigation guards\n\t* - Changes the url if necessary\n\t* - Calls the scrollBehavior\n\t*/\n\tfunction finalizeNavigation(toLocation, from, isPush, replace$1, data) {\n\t\tconst error = checkCanceledNavigation(toLocation, from);\n\t\tif (error) return error;\n\t\tconst isFirstNavigation = from === START_LOCATION_NORMALIZED;\n\t\tconst state = !isBrowser ? {} : history.state;\n\t\tif (isPush) if (replace$1 || isFirstNavigation) routerHistory.replace(toLocation.fullPath, assign({ scroll: isFirstNavigation && state && state.scroll }, data));\n\t\telse routerHistory.push(toLocation.fullPath, data);\n\t\tcurrentRoute.value = toLocation;\n\t\thandleScroll(toLocation, from, isPush, isFirstNavigation);\n\t\tmarkAsReady();\n\t}\n\tlet removeHistoryListener;\n\tfunction setupListeners() {\n\t\tif (removeHistoryListener) return;\n\t\tremoveHistoryListener = routerHistory.listen((to, _from, info) => {\n\t\t\tif (!router.listening) return;\n\t\t\tconst toLocation = resolve(to);\n\t\t\tconst shouldRedirect = handleRedirectRecord(toLocation, router.currentRoute.value);\n\t\t\tif (shouldRedirect) {\n\t\t\t\tpushWithRedirect(assign(shouldRedirect, {\n\t\t\t\t\treplace: true,\n\t\t\t\t\tforce: true\n\t\t\t\t}), toLocation).catch(noop);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpendingLocation = toLocation;\n\t\t\tconst from = currentRoute.value;\n\t\t\tif (isBrowser) saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition());\n\t\t\tnavigate(toLocation, from).catch((error) => {\n\t\t\t\tif (isNavigationFailure(error, ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_CANCELLED)) return error;\n\t\t\t\tif (isNavigationFailure(error, ErrorTypes.NAVIGATION_GUARD_REDIRECT)) {\n\t\t\t\t\tpushWithRedirect(assign(locationAsObject(error.to), { force: true }), toLocation).then((failure) => {\n\t\t\t\t\t\tif (isNavigationFailure(failure, ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_DUPLICATED) && !info.delta && info.type === NavigationType.pop) routerHistory.go(-1, false);\n\t\t\t\t\t}).catch(noop);\n\t\t\t\t\treturn Promise.reject();\n\t\t\t\t}\n\t\t\t\tif (info.delta) routerHistory.go(-info.delta, false);\n\t\t\t\treturn triggerError(error, toLocation, from);\n\t\t\t}).then((failure) => {\n\t\t\t\tfailure = failure || finalizeNavigation(toLocation, from, false);\n\t\t\t\tif (failure) {\n\t\t\t\t\tif (info.delta && !isNavigationFailure(failure, ErrorTypes.NAVIGATION_CANCELLED)) routerHistory.go(-info.delta, false);\n\t\t\t\t\telse if (info.type === NavigationType.pop && isNavigationFailure(failure, ErrorTypes.NAVIGATION_ABORTED | ErrorTypes.NAVIGATION_DUPLICATED)) routerHistory.go(-1, false);\n\t\t\t\t}\n\t\t\t\ttriggerAfterEach(toLocation, from, failure);\n\t\t\t}).catch(noop);\n\t\t});\n\t}\n\tlet readyHandlers = useCallbacks();\n\tlet errorListeners = useCallbacks();\n\tlet ready;\n\t/**\n\t* Trigger errorListeners added via onError and throws the error as well\n\t*\n\t* @param error - error to throw\n\t* @param to - location we were navigating to when the error happened\n\t* @param from - location we were navigating from when the error happened\n\t* @returns the error as a rejected promise\n\t*/\n\tfunction triggerError(error, to, from) {\n\t\tmarkAsReady(error);\n\t\tconst list = errorListeners.list();\n\t\tif (list.length) list.forEach((handler) => handler(error, to, from));\n\t\telse {\n\t\t\tif (process.env.NODE_ENV !== \"production\") warn$1(\"uncaught error during route navigation:\");\n\t\t\tconsole.error(error);\n\t\t}\n\t\treturn Promise.reject(error);\n\t}\n\tfunction isReady() {\n\t\tif (ready && currentRoute.value !== START_LOCATION_NORMALIZED) return Promise.resolve();\n\t\treturn new Promise((resolve$1, reject) => {\n\t\t\treadyHandlers.add([resolve$1, reject]);\n\t\t});\n\t}\n\tfunction markAsReady(err) {\n\t\tif (!ready) {\n\t\t\tready = !err;\n\t\t\tsetupListeners();\n\t\t\treadyHandlers.list().forEach(([resolve$1, reject]) => err ? reject(err) : resolve$1());\n\t\t\treadyHandlers.reset();\n\t\t}\n\t\treturn err;\n\t}\n\tfunction handleScroll(to, from, isPush, isFirstNavigation) {\n\t\tconst { scrollBehavior } = options;\n\t\tif (!isBrowser || !scrollBehavior) return Promise.resolve();\n\t\tconst scrollPosition = !isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0)) || (isFirstNavigation || !isPush) && history.state && history.state.scroll || null;\n\t\treturn nextTick().then(() => scrollBehavior(to, from, scrollPosition)).then((position) => position && scrollToPosition(position)).catch((err) => triggerError(err, to, from));\n\t}\n\tconst go = (delta) => routerHistory.go(delta);\n\tlet started;\n\tconst installedApps = /* @__PURE__ */ new Set();\n\tconst router = {\n\t\tcurrentRoute,\n\t\tlistening: true,\n\t\taddRoute,\n\t\tremoveRoute,\n\t\tclearRoutes: matcher.clearRoutes,\n\t\thasRoute,\n\t\tgetRoutes,\n\t\tresolve,\n\t\toptions,\n\t\tpush,\n\t\treplace,\n\t\tgo,\n\t\tback: () => go(-1),\n\t\tforward: () => go(1),\n\t\tbeforeEach: beforeGuards.add,\n\t\tbeforeResolve: beforeResolveGuards.add,\n\t\tafterEach: afterGuards.add,\n\t\tonError: errorListeners.add,\n\t\tisReady,\n\t\tinstall(app) {\n\t\t\tapp.component(\"RouterLink\", RouterLink);\n\t\t\tapp.component(\"RouterView\", RouterView);\n\t\t\tapp.config.globalProperties.$router = router;\n\t\t\tObject.defineProperty(app.config.globalProperties, \"$route\", {\n\t\t\t\tenumerable: true,\n\t\t\t\tget: () => unref(currentRoute)\n\t\t\t});\n\t\t\tif (isBrowser && !started && currentRoute.value === START_LOCATION_NORMALIZED) {\n\t\t\t\tstarted = true;\n\t\t\t\tpush(routerHistory.location).catch((err) => {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") warn$1(\"Unexpected error when starting the router:\", err);\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst reactiveRoute = {};\n\t\t\tfor (const key in START_LOCATION_NORMALIZED) Object.defineProperty(reactiveRoute, key, {\n\t\t\t\tget: () => currentRoute.value[key],\n\t\t\t\tenumerable: true\n\t\t\t});\n\t\t\tapp.provide(routerKey, router);\n\t\t\tapp.provide(routeLocationKey, shallowReactive(reactiveRoute));\n\t\t\tapp.provide(routerViewLocationKey, currentRoute);\n\t\t\tconst unmountApp = app.unmount;\n\t\t\tinstalledApps.add(app);\n\t\t\tapp.unmount = function() {\n\t\t\t\tinstalledApps.delete(app);\n\t\t\t\tif (installedApps.size < 1) {\n\t\t\t\t\tpendingLocation = START_LOCATION_NORMALIZED;\n\t\t\t\t\tremoveHistoryListener && removeHistoryListener();\n\t\t\t\t\tremoveHistoryListener = null;\n\t\t\t\t\tcurrentRoute.value = START_LOCATION_NORMALIZED;\n\t\t\t\t\tstarted = false;\n\t\t\t\t\tready = false;\n\t\t\t\t}\n\t\t\t\tunmountApp();\n\t\t\t};\n\t\t\tif ((process.env.NODE_ENV !== \"production\" || __VUE_PROD_DEVTOOLS__) && isBrowser) addDevtools(app, router, matcher);\n\t\t}\n\t};\n\tfunction runGuardQueue(guards) {\n\t\treturn guards.reduce((promise, guard) => promise.then(() => runWithContext(guard)), Promise.resolve());\n\t}\n\treturn router;\n}\n\n//#endregion\n//#region src/useApi.ts\n/**\n* Returns the router instance. Equivalent to using `$router` inside\n* templates.\n*/\nfunction useRouter() {\n\treturn inject(routerKey);\n}\n/**\n* Returns the current route location. Equivalent to using `$route` inside\n* templates.\n*/\nfunction useRoute(_name) {\n\treturn inject(routeLocationKey);\n}\n\n//#endregion\nexport { NavigationFailureType, RouterLink, RouterView, START_LOCATION_NORMALIZED as START_LOCATION, createMemoryHistory, createRouter, createRouterMatcher, createWebHashHistory, createWebHistory, isNavigationFailure, loadRouteLocation, matchedRouteKey, onBeforeRouteLeave, onBeforeRouteUpdate, parseQuery, routeLocationKey, routerKey, routerViewLocationKey, stringifyQuery, useLink, useRoute, useRouter, viewDepthKey };","import '../assets/NcAppNavigationList--36j6Acm.css';\nimport { openBlock, createElementBlock, renderSlot } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcAppNavigationList\"\n};\nconst _hoisted_1 = { class: \"app-navigation-list\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"ul\", _hoisted_1, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ]);\n}\nconst NcAppNavigationList = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-d72957ed\"]]);\nexport {\n NcAppNavigationList as N\n};\n//# sourceMappingURL=NcAppNavigationList-CGSWabRB.mjs.map\n","import '../assets/NcAppNavigation-2b1jxOXM.css';\nimport { defineComponent, useModel, computed, openBlock, createElementBlock, createVNode, unref, withCtx, inject, warn, useTemplateRef, ref, watchEffect, watch, onMounted, onUnmounted, normalizeClass, createElementVNode, withKeys, renderSlot, createBlock, createCommentVNode } from \"vue\";\nimport { subscribe, emit, unsubscribe } from \"@nextcloud/event-bus\";\nimport { createFocusTrap } from \"focus-trap\";\nimport { N as NcAppNavigationList } from \"./NcAppNavigationList-CGSWabRB.mjs\";\nimport { G as mdiMenuOpen, H as mdiMenu } from \"./mdi-CpchYUUV.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { r as register, P as t20, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { useIsMobile } from \"../composables/useIsMobile/index.mjs\";\nimport { g as getTrapStack } from \"./focusTrap-HJQ4pqHV.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { H as HAS_APP_NAVIGATION_KEY } from \"./constants-Ciwvl5xb.mjs\";\nregister(t20);\nconst _hoisted_1$1 = { class: \"app-navigation-toggle-wrapper\" };\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n __name: \"NcAppNavigationToggle\",\n props: {\n \"open\": { type: Boolean, ...{ required: true } },\n \"openModifiers\": {}\n },\n emits: [\"update:open\"],\n setup(__props) {\n const open = useModel(__props, \"open\");\n const title = computed(() => open.value ? t(\"Close navigation\") : t(\"Open navigation\"));\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n createVNode(unref(NcButton), {\n class: \"app-navigation-toggle\",\n \"aria-controls\": \"app-navigation-vue\",\n \"aria-expanded\": open.value ? \"true\" : \"false\",\n \"aria-label\": title.value,\n title: title.value,\n variant: \"tertiary\",\n onClick: _cache[0] || (_cache[0] = ($event) => open.value = !open.value)\n }, {\n icon: withCtx(() => [\n createVNode(NcIconSvgWrapper, {\n path: open.value ? unref(mdiMenuOpen) : unref(mdiMenu)\n }, null, 8, [\"path\"])\n ]),\n _: 1\n }, 8, [\"aria-expanded\", \"aria-label\", \"title\"])\n ]);\n };\n }\n});\nconst NcAppNavigationToggle = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"__scopeId\", \"data-v-5a15295d\"]]);\nconst _hoisted_1 = [\"aria-hidden\", \"aria-label\", \"aria-labelledby\", \"inert\"];\nconst _hoisted_2 = { class: \"app-navigation__search\" };\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppNavigation\",\n props: {\n ariaLabel: {},\n ariaLabelledby: {}\n },\n setup(__props) {\n const props = __props;\n let focusTrap;\n const setHasAppNavigation = inject(\n HAS_APP_NAVIGATION_KEY,\n () => warn(\"NcAppNavigation is not mounted inside NcContent, this is probably an error.\"),\n false\n );\n const appNavigationContainerElement = useTemplateRef(\"appNavigationContainer\");\n const isMobile = useIsMobile();\n const open = ref(!isMobile.value);\n watchEffect(() => {\n if (!props.ariaLabel && !props.ariaLabelledby) {\n warn(\"NcAppNavigation requires either `ariaLabel` or `ariaLabelledby` to be set for accessibility.\");\n }\n });\n watch(isMobile, () => {\n open.value = !isMobile.value;\n });\n watch(open, () => {\n toggleFocusTrap();\n });\n onMounted(() => {\n setHasAppNavigation(true);\n subscribe(\"toggle-navigation\", toggleNavigationByEventBus);\n emit(\"navigation-toggled\", {\n open: open.value\n });\n focusTrap = createFocusTrap(appNavigationContainerElement.value, {\n allowOutsideClick: true,\n clickOutsideDeactivates: () => {\n if (isMobile.value) {\n focusTrap.deactivate({ returnFocus: false });\n toggleNavigation(false);\n }\n return false;\n },\n fallbackFocus: appNavigationContainerElement.value,\n trapStack: getTrapStack(),\n escapeDeactivates: false\n });\n toggleFocusTrap();\n });\n onUnmounted(() => {\n setHasAppNavigation(false);\n unsubscribe(\"toggle-navigation\", toggleNavigationByEventBus);\n focusTrap.deactivate();\n });\n function toggleNavigation(state) {\n if (open.value === state) {\n emit(\"navigation-toggled\", {\n open: open.value\n });\n return;\n }\n open.value = state === void 0 ? !open.value : state;\n const bodyStyles = getComputedStyle(document.body);\n const animationLength = parseInt(bodyStyles.getPropertyValue(\"--animation-quick\")) || 100;\n setTimeout(() => {\n emit(\"navigation-toggled\", {\n open: open.value\n });\n }, 1.5 * animationLength);\n }\n function toggleNavigationByEventBus({ open: open2 }) {\n return toggleNavigation(open2);\n }\n function toggleFocusTrap() {\n if (isMobile.value && open.value) {\n focusTrap.activate();\n } else {\n focusTrap.deactivate();\n }\n }\n function handleEsc() {\n if (isMobile.value) {\n toggleNavigation(false);\n }\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref: \"appNavigationContainer\",\n class: normalizeClass([\"app-navigation\", {\n \"app-navigation--closed\": !open.value,\n \"app-navigation--legacy\": unref(isLegacy34)\n }])\n }, [\n createElementVNode(\"nav\", {\n id: \"app-navigation-vue\",\n \"aria-hidden\": open.value ? \"false\" : \"true\",\n \"aria-label\": __props.ariaLabel || void 0,\n \"aria-labelledby\": __props.ariaLabelledby || void 0,\n class: \"app-navigation__content\",\n inert: !open.value || void 0,\n onKeydown: withKeys(handleEsc, [\"esc\"])\n }, [\n createElementVNode(\"div\", _hoisted_2, [\n renderSlot(_ctx.$slots, \"search\", {}, void 0, true)\n ]),\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-navigation__body\", { \"app-navigation__body--no-list\": !_ctx.$slots.list }])\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ], 2),\n _ctx.$slots.list ? (openBlock(), createBlock(NcAppNavigationList, {\n key: 0,\n class: \"app-navigation__list\"\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"list\", {}, void 0, true)\n ]),\n _: 3\n })) : createCommentVNode(\"\", true),\n renderSlot(_ctx.$slots, \"footer\", {}, void 0, true)\n ], 40, _hoisted_1),\n createVNode(NcAppNavigationToggle, {\n open: open.value,\n \"onUpdate:open\": toggleNavigation\n }, null, 8, [\"open\"])\n ], 2);\n };\n }\n});\nconst NcAppNavigation = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-104ef656\"]]);\nexport {\n NcAppNavigation as N\n};\n//# sourceMappingURL=NcAppNavigation-Bb9-C2eO.mjs.map\n","import { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"ChevronUpIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3 = { d: \"M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z\" };\nconst _hoisted_4 = { key: 0 };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon chevron-up-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2))\n ], 16, _hoisted_1);\n}\nconst ChevronUp = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport {\n ChevronUp as C\n};\n//# sourceMappingURL=ChevronUp-ChH8oB7p.mjs.map\n","import { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"ArrowRightIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3 = { d: \"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z\" };\nconst _hoisted_4 = { key: 0 };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon arrow-right-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2))\n ], 16, _hoisted_1);\n}\nconst IconArrowRight = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport {\n IconArrowRight as I\n};\n//# sourceMappingURL=ArrowRight-B1ncAhus.mjs.map\n","import '../assets/NcInputConfirmCancel-BEmwC87z.css';\nimport { I as IconArrowRight } from \"./ArrowRight-B1ncAhus.mjs\";\nimport { I as IconClose } from \"./Close-CuhcJnX2.mjs\";\nimport { r as register, k as t14, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, withModifiers, withKeys, withDirectives, vModelText, createVNode, withCtx } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t14);\nconst _sfc_main = {\n name: \"NcInputConfirmCancel\",\n components: {\n IconArrowRight,\n IconClose,\n NcButton\n },\n setup() {\n return { isLegacy34 };\n },\n props: {\n /**\n * If this element is used on a primary element set to true for primary styling.\n */\n primary: {\n default: false,\n type: Boolean\n },\n /**\n * Placeholder of the edit field\n */\n placeholder: {\n default: \"\",\n type: String\n },\n /**\n * The current name (model value)\n */\n modelValue: {\n default: \"\",\n type: String\n }\n },\n emits: [\n \"cancel\",\n \"confirm\",\n \"update:modelValue\"\n ],\n data() {\n return {\n labelConfirm: t(\"Confirm changes\"),\n labelCancel: t(\"Cancel changes\")\n };\n },\n computed: {\n valueModel: {\n get() {\n return this.modelValue;\n },\n set(newValue) {\n this.$emit(\"update:modelValue\", newValue);\n }\n }\n },\n methods: {\n confirm() {\n this.$emit(\"confirm\");\n },\n cancel() {\n this.$emit(\"cancel\");\n },\n focusInput() {\n this.$refs.input.focus();\n }\n }\n};\nconst _hoisted_1 = [\"placeholder\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_IconArrowRight = resolveComponent(\"IconArrowRight\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n const _component_IconClose = resolveComponent(\"IconClose\");\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"app-navigation-input-confirm\", { \"app-navigation-input-confirm--legacy\": $setup.isLegacy34 }])\n }, [\n createElementVNode(\"form\", {\n onSubmit: _cache[1] || (_cache[1] = withModifiers((...args) => $options.confirm && $options.confirm(...args), [\"prevent\"])),\n onKeydown: _cache[2] || (_cache[2] = withKeys(withModifiers((...args) => $options.cancel && $options.cancel(...args), [\"exact\", \"stop\", \"prevent\"]), [\"esc\"])),\n onClick: _cache[3] || (_cache[3] = withModifiers(() => {\n }, [\"stop\", \"prevent\"]))\n }, [\n withDirectives(createElementVNode(\"input\", {\n ref: \"input\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $options.valueModel = $event),\n type: \"text\",\n class: \"app-navigation-input-confirm__input\",\n placeholder: $props.placeholder\n }, null, 8, _hoisted_1), [\n [vModelText, $options.valueModel]\n ]),\n createVNode(_component_NcButton, {\n \"aria-label\": $data.labelConfirm,\n type: \"submit\",\n variant: \"primary\",\n onClick: withModifiers($options.confirm, [\"stop\", \"prevent\"])\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconArrowRight, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"]),\n createVNode(_component_NcButton, {\n \"aria-label\": $data.labelCancel,\n type: \"reset\",\n variant: $props.primary ? \"primary\" : \"tertiary\",\n onClick: withModifiers($options.cancel, [\"stop\", \"prevent\"])\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconClose, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"variant\", \"onClick\"])\n ], 32)\n ], 2);\n}\nconst NcInputConfirmCancel = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-a8724c7f\"]]);\nexport {\n NcInputConfirmCancel as N\n};\n//# sourceMappingURL=NcInputConfirmCancel-B6qC3s63.mjs.map\n","import { defineComponent } from \"vue\";\nconst _sfc_main = defineComponent({\n name: \"NcVNodes\",\n props: {\n /**\n * The vnodes to render\n */\n vnodes: {\n type: [Array, Object],\n default: null\n }\n },\n /**\n * The render function to display the component\n */\n render() {\n return this.vnodes || this.$slots?.default?.({});\n }\n});\nexport {\n _sfc_main as _\n};\n//# sourceMappingURL=NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs.map\n","import '../assets/NcAppNavigationItem-BsuZoJAq.css';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, resolveComponent, createBlock, normalizeClass, withCtx, resolveDynamicComponent, normalizeProps, guardReactiveProps, withKeys, withModifiers, renderSlot, createVNode, createTextVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { C as ChevronDown } from \"./ChevronDown-C6gc637b.mjs\";\nimport { C as ChevronUp } from \"./ChevronUp-ChH8oB7p.mjs\";\nimport { r as register, N as t21, a as t, b as t51, O as t23 } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { N as NcInputConfirmCancel } from \"./NcInputConfirmCancel-B6qC3s63.mjs\";\nimport { useIsMobile } from \"../composables/useIsMobile/index.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-BO5T5ePT.mjs\";\nimport { N as NcActions } from \"./NcActions-DY4GGONi.mjs\";\nimport { N as NcLoadingIcon } from \"./NcLoadingIcon-BOVpFVQz.mjs\";\nimport { _ as _sfc_main$4 } from \"./NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs\";\nconst _sfc_main$3 = {\n name: \"PencilIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$2 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$2 = { 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\" };\nconst _hoisted_4$2 = { key: 0 };\nfunction _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon pencil-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$2, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$2, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$2))\n ], 16, _hoisted_1$2);\n}\nconst Pencil = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$3]]);\nconst _sfc_main$2 = {\n name: \"UndoIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { 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\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon undo-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$1);\n}\nconst Undo = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$2]]);\nregister(t21);\nconst _sfc_main$1 = {\n name: \"NcAppNavigationIconCollapsible\",\n components: {\n NcButton,\n ChevronDown,\n ChevronUp\n },\n setup() {\n return { isLegacy34 };\n },\n props: {\n /**\n * Is the list currently open (or collapsed)\n */\n open: {\n type: Boolean,\n required: true\n },\n /**\n * Is the navigation item currently active.\n */\n active: {\n type: Boolean,\n required: true\n }\n },\n emits: [\"click\"],\n computed: {\n labelButton() {\n return this.open ? t(\"Collapse menu\") : t(\"Open menu\");\n }\n },\n methods: {\n onClick(e) {\n this.$emit(\"click\", e);\n }\n }\n};\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ChevronUp = resolveComponent(\"ChevronUp\");\n const _component_ChevronDown = resolveComponent(\"ChevronDown\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n return openBlock(), createBlock(_component_NcButton, {\n class: normalizeClass([\"icon-collapse\", {\n \"icon-collapse--active\": $props.active,\n \"icon-collapse--open\": $props.open\n }]),\n \"aria-label\": $options.labelButton,\n variant: $props.active && $setup.isLegacy34 ? \"tertiary-on-primary\" : \"tertiary\",\n onClick: $options.onClick\n }, {\n icon: withCtx(() => [\n $props.open ? (openBlock(), createBlock(_component_ChevronUp, {\n key: 0,\n size: 20\n })) : (openBlock(), createBlock(_component_ChevronDown, {\n key: 1,\n size: 20\n }))\n ]),\n _: 1\n }, 8, [\"class\", \"aria-label\", \"variant\", \"onClick\"]);\n}\nconst NcAppNavigationIconCollapsible = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-acf5ed2f\"]]);\nregister(t23, t51);\nconst _sfc_main = {\n name: \"NcAppNavigationItem\",\n components: {\n NcActions,\n NcActionButton,\n NcAppNavigationIconCollapsible,\n NcInputConfirmCancel,\n NcLoadingIcon,\n NcVNodes: _sfc_main$4,\n Pencil,\n Undo\n },\n props: {\n /**\n * If you are not using vue-router you can use the property to set this item as the active navigation entry.\n * When using vue-router and the `to` property this is set automatically.\n */\n active: {\n type: Boolean,\n default: false\n },\n /**\n * The main text content of the entry.\n */\n name: {\n type: String,\n required: true\n },\n /**\n * The title attribute of the element.\n */\n title: {\n type: String,\n default: null\n },\n /**\n * id attribute of the list item element\n */\n id: {\n type: String,\n default: () => createElementId(),\n validator: (id) => id.trim() !== \"\"\n },\n /**\n * Refers to the icon on the left, this prop accepts a class\n * like 'icon-category-enabled'.\n */\n icon: {\n type: String,\n default: \"\"\n },\n /**\n * Displays a loading animated icon on the left of the element\n * instead of the icon.\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * Passing in a route will make the root element of this\n * component a `<router-link />` that points to that route.\n * By leaving this blank, the root element will be a `<li>`.\n */\n to: {\n type: [String, Object],\n default: null\n },\n /**\n * A direct link. This will be used as the `href` attribute.\n * This will ignore any `to` prop being defined.\n */\n href: {\n type: String,\n default: null\n },\n /**\n * Gives the possibility to collapse the children elements into the\n * parent element (true) or expands the children elements (false).\n */\n allowCollapse: {\n type: Boolean,\n default: false\n },\n /**\n * Makes the name of the item editable by providing an `ActionButton`\n * component that toggles a form\n */\n editable: {\n type: Boolean,\n default: false\n },\n /**\n * Only for 'editable' items, sets label for the edit action button.\n */\n editLabel: {\n type: String,\n default: \"\"\n },\n /**\n * Only for items in 'editable' mode, sets the placeholder text for the editing form.\n */\n editPlaceholder: {\n type: String,\n default: \"\"\n },\n /**\n * Pins the item to the bottom left area, above the settings. Do not\n * place 'non-pinned' `AppnavigationItem` components below `pinned`\n * ones.\n */\n pinned: {\n type: Boolean,\n default: false\n },\n /**\n * Puts the item in the 'undo' state.\n */\n undo: {\n type: Boolean,\n default: false\n },\n /**\n * The navigation collapsible state (synced)\n */\n open: {\n type: Boolean,\n default: false\n },\n /**\n * The actions menu open state (synced)\n */\n menuOpen: {\n type: Boolean,\n default: false\n },\n /**\n * Force the actions to display in a three dot menu\n */\n forceMenu: {\n type: Boolean,\n default: false\n },\n /**\n * The action's menu default icon\n */\n menuIcon: {\n type: String,\n default: void 0\n },\n /**\n * The action's menu direction\n */\n menuPlacement: {\n type: String,\n default: \"bottom\"\n },\n /**\n * Entry aria details\n */\n ariaDescription: {\n type: String,\n default: null\n },\n /**\n * To be used only when the elements in the actions menu are very important\n */\n forceDisplayActions: {\n type: Boolean,\n default: false\n },\n /**\n * Number of action items outside the menu\n */\n inlineActions: {\n type: Number,\n default: 0\n }\n },\n emits: [\n \"update:menuOpen\",\n \"update:open\",\n \"update:name\",\n \"click\",\n \"undo\"\n ],\n setup() {\n return {\n isMobile: useIsMobile(),\n isLegacy34\n };\n },\n data() {\n return {\n actionsBoundariesElement: void 0,\n editingValue: \"\",\n opened: this.open,\n // Collapsible state\n editingActive: false,\n /**\n * Tracks the open state of the actions menu\n */\n menuOpenLocalValue: false,\n focused: false\n };\n },\n computed: {\n isRouterLink() {\n return this.to && !this.href;\n },\n // Checks if the component is already a children of another\n // instance of AppNavigationItem\n canHaveChildren() {\n if (this.$parent.$options._componentTag === \"AppNavigationItem\") {\n return false;\n } else {\n return true;\n }\n },\n editButtonAriaLabel() {\n return this.editLabel ? this.editLabel : t(\"Edit item\");\n },\n undoButtonAriaLabel() {\n return t(\"Undo changes\");\n }\n },\n watch: {\n open(newVal) {\n this.opened = newVal;\n }\n },\n mounted() {\n this.actionsBoundariesElement = document.querySelector(\"#content-vue\") || void 0;\n },\n methods: {\n // sync opened menu state with prop\n onMenuToggle(state) {\n this.$emit(\"update:menuOpen\", state);\n this.menuOpenLocalValue = state;\n },\n // toggle the collapsible state\n toggleCollapse() {\n this.opened = !this.opened;\n this.$emit(\"update:open\", this.opened);\n },\n /**\n * Handle link click\n *\n * @param {PointerEvent} event - Native click event\n * @param {Function} [navigate] - VueRouter link's navigate if any\n * @param {string} [routerLinkHref] - VueRouter link's href\n */\n onClick(event, navigate, routerLinkHref) {\n this.$emit(\"click\", event);\n if (event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) {\n return;\n }\n if (routerLinkHref) {\n navigate?.(event);\n event.preventDefault();\n }\n },\n // Edition methods\n handleEdit() {\n this.editingValue = this.name;\n this.editingActive = true;\n this.onMenuToggle(false);\n this.$nextTick(() => {\n this.$refs.editingInput.focusInput();\n });\n },\n cancelEditing() {\n this.editingActive = false;\n },\n handleEditingDone() {\n this.$emit(\"update:name\", this.editingValue);\n this.editingValue = \"\";\n this.editingActive = false;\n },\n // Undo methods\n handleUndo() {\n this.$emit(\"undo\");\n },\n /**\n * Show actions upon focus\n */\n handleFocus() {\n this.focused = true;\n },\n handleBlur() {\n this.focused = false;\n },\n /**\n * This method checks if the root element of the component is focused and\n * if that's the case it focuses the actions button if available\n *\n * @param {Event} e the keydown event\n */\n handleTab(e) {\n if (!this.$refs.actions) {\n return;\n }\n if (this.focused) {\n e.preventDefault();\n this.$refs.actions.$refs.triggerButton.$el.focus();\n this.focused = false;\n } else {\n this.$refs.actions.$refs.triggerButton.$el.blur();\n }\n },\n /**\n * Is this an external link\n *\n * @param {string} href The link to check\n * @return {boolean} Whether it is external or not\n */\n isExternal(href) {\n return href && href.match(/[a-z]+:\\/\\//i);\n }\n }\n};\nconst _hoisted_1 = [\"id\"];\nconst _hoisted_2 = [\"aria-current\", \"aria-description\", \"aria-expanded\", \"href\", \"target\", \"title\", \"onClick\"];\nconst _hoisted_3 = {\n key: 0,\n class: \"editingContainer\"\n};\nconst _hoisted_4 = {\n key: 1,\n class: \"app-navigation-entry__deleted\"\n};\nconst _hoisted_5 = { class: \"app-navigation-entry__deleted-description\" };\nconst _hoisted_6 = {\n key: 0,\n class: \"app-navigation-entry__counter-wrapper\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"app-navigation-entry__children\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcLoadingIcon = resolveComponent(\"NcLoadingIcon\");\n const _component_NcInputConfirmCancel = resolveComponent(\"NcInputConfirmCancel\");\n const _component_Pencil = resolveComponent(\"Pencil\");\n const _component_NcActionButton = resolveComponent(\"NcActionButton\");\n const _component_Undo = resolveComponent(\"Undo\");\n const _component_NcActions = resolveComponent(\"NcActions\");\n const _component_NcAppNavigationIconCollapsible = resolveComponent(\"NcAppNavigationIconCollapsible\");\n return openBlock(), createElementBlock(\"li\", {\n id: $props.id,\n class: normalizeClass([{\n \"app-navigation-entry--opened\": $data.opened,\n \"app-navigation-entry--pinned\": $props.pinned,\n \"app-navigation-entry--collapsible\": $props.allowCollapse && !!_ctx.$slots.default\n }, \"app-navigation-entry-wrapper\"])\n }, [\n (openBlock(), createBlock(resolveDynamicComponent($options.isRouterLink ? \"router-link\" : \"NcVNodes\"), normalizeProps(guardReactiveProps({ ...$options.isRouterLink && { custom: true, to: $props.to } })), {\n default: withCtx(({ href: routerLinkHref, navigate, isActive }) => [\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-navigation-entry\", {\n \"app-navigation-entry--editing\": $data.editingActive,\n \"app-navigation-entry--deleted\": $props.undo,\n \"app-navigation-entry--legacy\": $setup.isLegacy34,\n active: $props.to && isActive || $props.active\n }])\n }, [\n !$props.undo ? (openBlock(), createElementBlock(\"a\", {\n key: 0,\n class: \"app-navigation-entry-link\",\n \"aria-current\": $props.active || $props.to && isActive ? \"page\" : void 0,\n \"aria-description\": $props.ariaDescription,\n \"aria-expanded\": !!_ctx.$slots.default ? $data.opened.toString() : void 0,\n href: $props.href || routerLinkHref || \"#\",\n target: $options.isExternal($props.href) ? \"_blank\" : void 0,\n title: $props.title || $props.name,\n onBlur: _cache[1] || (_cache[1] = (...args) => $options.handleBlur && $options.handleBlur(...args)),\n onClick: ($event) => $options.onClick($event, navigate, routerLinkHref),\n onFocus: _cache[2] || (_cache[2] = (...args) => $options.handleFocus && $options.handleFocus(...args)),\n onKeydown: _cache[3] || (_cache[3] = withKeys(withModifiers((...args) => $options.handleTab && $options.handleTab(...args), [\"exact\"]), [\"tab\"]))\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-navigation-entry-icon\", { [$props.icon]: $props.icon }])\n }, [\n $props.loading ? (openBlock(), createBlock(_component_NcLoadingIcon, { key: 0 })) : renderSlot(_ctx.$slots, \"icon\", {\n key: 1,\n active: $props.active || $props.to && isActive\n }, void 0, true)\n ], 2),\n createElementVNode(\"span\", {\n class: normalizeClass([\"app-navigation-entry__name\", { \"hidden-visually\": $data.editingActive }])\n }, toDisplayString($props.name), 3),\n $data.editingActive ? (openBlock(), createElementBlock(\"div\", _hoisted_3, [\n createVNode(_component_NcInputConfirmCancel, {\n ref: \"editingInput\",\n modelValue: $data.editingValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $data.editingValue = $event),\n placeholder: $props.editPlaceholder !== \"\" ? $props.editPlaceholder : $props.name,\n primary: $props.to && isActive || $props.active,\n onCancel: $options.cancelEditing,\n onConfirm: $options.handleEditingDone\n }, null, 8, [\"modelValue\", \"placeholder\", \"primary\", \"onCancel\", \"onConfirm\"])\n ])) : createCommentVNode(\"\", true)\n ], 40, _hoisted_2)) : createCommentVNode(\"\", true),\n $props.undo ? (openBlock(), createElementBlock(\"div\", _hoisted_4, [\n createElementVNode(\"div\", _hoisted_5, toDisplayString($props.name), 1)\n ])) : createCommentVNode(\"\", true),\n (!!_ctx.$slots.actions || !!_ctx.$slots.counter || $props.editable || $props.undo) && !$data.editingActive ? (openBlock(), createElementBlock(\"div\", {\n key: 2,\n class: normalizeClass([\"app-navigation-entry__utils\", { \"app-navigation-entry__utils--display-actions\": $props.forceDisplayActions || $data.menuOpenLocalValue || $props.menuOpen }])\n }, [\n !!_ctx.$slots.counter ? (openBlock(), createElementBlock(\"div\", _hoisted_6, [\n renderSlot(_ctx.$slots, \"counter\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true),\n !!_ctx.$slots.actions || $props.editable && !$data.editingActive || $props.undo ? (openBlock(), createBlock(_component_NcActions, {\n key: 1,\n ref: \"actions\",\n class: \"app-navigation-entry__actions\",\n container: \"#app-navigation-vue\",\n boundariesElement: $data.actionsBoundariesElement,\n inline: $props.inlineActions,\n placement: $props.menuPlacement,\n open: $props.menuOpen,\n forceMenu: $props.forceMenu,\n defaultIcon: $props.menuIcon,\n variant: \"tertiary\",\n \"onUpdate:open\": $options.onMenuToggle\n }, {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"menu-icon\", {}, void 0, true)\n ]),\n default: withCtx(() => [\n $props.editable && !$data.editingActive ? (openBlock(), createBlock(_component_NcActionButton, {\n key: 0,\n \"aria-label\": $options.editButtonAriaLabel,\n onClick: $options.handleEdit\n }, {\n icon: withCtx(() => [\n createVNode(_component_Pencil, { size: 20 })\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString($props.editLabel), 1)\n ]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])) : createCommentVNode(\"\", true),\n $props.undo ? (openBlock(), createBlock(_component_NcActionButton, {\n key: 1,\n \"aria-label\": $options.undoButtonAriaLabel,\n onClick: $options.handleUndo\n }, {\n icon: withCtx(() => [\n createVNode(_component_Undo, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])) : createCommentVNode(\"\", true),\n renderSlot(_ctx.$slots, \"actions\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"boundariesElement\", \"inline\", \"placement\", \"open\", \"forceMenu\", \"defaultIcon\", \"onUpdate:open\"])) : createCommentVNode(\"\", true)\n ], 2)) : createCommentVNode(\"\", true),\n $props.allowCollapse && !!_ctx.$slots.default ? (openBlock(), createBlock(_component_NcAppNavigationIconCollapsible, {\n key: 3,\n active: $props.to && isActive || $props.active,\n open: $data.opened,\n onClick: withModifiers($options.toggleCollapse, [\"prevent\", \"stop\"])\n }, null, 8, [\"active\", \"open\", \"onClick\"])) : createCommentVNode(\"\", true),\n renderSlot(_ctx.$slots, \"extra\", {}, void 0, true)\n ], 2)\n ]),\n _: 3\n }, 16)),\n $options.canHaveChildren && !!_ctx.$slots.default ? (openBlock(), createElementBlock(\"ul\", _hoisted_7, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true)\n ], 10, _hoisted_1);\n}\nconst NcAppNavigationItem = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-e4d562ae\"]]);\nexport {\n NcAppNavigationItem as N\n};\n//# sourceMappingURL=NcAppNavigationItem-B0-60shw.mjs.map\n","import '../assets/NcAppNavigationNew-Bn8zj5lM.css';\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, createVNode, withCtx, createTextVNode, toDisplayString, renderSlot } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n components: {\n NcButton\n },\n props: {\n /**\n * Id of the button\n */\n buttonId: {\n type: String,\n required: false,\n default: \"\"\n },\n /**\n * Disabled state of the button\n */\n disabled: {\n type: Boolean,\n required: false,\n default: false\n },\n /**\n * Main text of the button\n */\n text: {\n type: String,\n required: true\n },\n /**\n * The color variant to use.\n *\n * @default 'primary'\n */\n variant: {\n type: String,\n default: \"primary\",\n validator(value) {\n return [\"primary\", \"secondary\", \"tertiary\"].indexOf(value) !== -1;\n }\n }\n },\n emits: [\"click\"]\n};\nconst _hoisted_1 = { class: \"app-navigation-new\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcButton = resolveComponent(\"NcButton\");\n return openBlock(), createElementBlock(\"div\", _hoisted_1, [\n createVNode(_component_NcButton, {\n id: $props.buttonId,\n disabled: $props.disabled,\n variant: $props.variant,\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\"))\n }, {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"icon\", {}, void 0, true)\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString($props.text), 1)\n ]),\n _: 3\n }, 8, [\"id\", \"disabled\", \"variant\"])\n ]);\n}\nconst NcAppNavigationNew = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-0ba6c9df\"]]);\nexport {\n NcAppNavigationNew as N\n};\n//# sourceMappingURL=NcAppNavigationNew-Dspn3-4i.mjs.map\n","import '../assets/NcAppNavigationSearch-DD7mo6OW.css';\nimport { defineComponent, useModel, useSlots, ref, useTemplateRef, watch, openBlock, createElementBlock, normalizeClass, createVNode, unref, withCtx, renderSlot, createCommentVNode, mergeModels, nextTick } from \"vue\";\nimport { useFocusWithin } from \"@vueuse/core\";\nimport { I as IconClose } from \"./Close-CuhcJnX2.mjs\";\nimport { N as NcInputField } from \"./NcInputField-B1bGxYHt.mjs\";\nimport { r as register, C as t44, u as t16, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t16, t44);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppNavigationSearch\",\n props: /* @__PURE__ */ mergeModels({\n /**\n * Text used to label the search input\n */\n label: {\n type: String,\n default: t(\"Search …\")\n },\n /**\n * Placeholder of the search input\n * By default the value of `label` is used.\n */\n placeholder: {\n type: String,\n default: null\n }\n }, {\n \"modelValue\": { default: \"\" },\n \"modelModifiers\": {}\n }),\n emits: [\"update:modelValue\"],\n setup(__props) {\n const model = useModel(__props, \"modelValue\");\n const slots = useSlots();\n const inputElement = ref();\n const { focused: inputHasFocus } = useFocusWithin(inputElement);\n const transitionTimeout = Number.parseInt(window.getComputedStyle(window.document.body).getPropertyValue(\"--animation-quick\")) || 100;\n const actionsContainerElement = useTemplateRef(\"actionsContainer\");\n const hasActions = () => !!slots.actions?.({});\n const showActions = ref(true);\n const timeoutId = ref();\n const hideActions = ref(false);\n watch(inputHasFocus, () => {\n showActions.value = !inputHasFocus.value;\n window.clearTimeout(timeoutId.value);\n if (showActions.value) {\n hideActions.value = false;\n } else {\n window.setTimeout(() => {\n hideActions.value = !showActions.value;\n }, transitionTimeout);\n }\n });\n function onCloseSearch() {\n model.value = \"\";\n if (hasActions()) {\n showActions.value = true;\n nextTick(() => actionsContainerElement.value?.querySelector(\"button\")?.focus());\n }\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"app-navigation-search\", {\n \"app-navigation-search--has-actions\": hasActions()\n }])\n }, [\n createVNode(NcInputField, {\n ref_key: \"inputElement\",\n ref: inputElement,\n modelValue: model.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => model.value = $event),\n \"aria-label\": __props.label,\n class: \"app-navigation-search__input\",\n labelOutside: \"\",\n placeholder: __props.placeholder ?? __props.label,\n showTrailingButton: model.value.length > 0,\n trailingButtonLabel: unref(t)(\"Clear search\"),\n type: \"search\",\n onTrailingButtonClick: onCloseSearch\n }, {\n \"trailing-button-icon\": withCtx(() => [\n createVNode(IconClose, { size: 20 })\n ]),\n _: 1\n }, 8, [\"modelValue\", \"aria-label\", \"placeholder\", \"showTrailingButton\", \"trailingButtonLabel\"]),\n hasActions() ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n ref: \"actionsContainer\",\n class: normalizeClass([\"app-navigation-search__actions\", {\n \"app-navigation-search__actions--hidden\": !showActions.value,\n \"hidden-visually\": hideActions.value\n }])\n }, [\n renderSlot(_ctx.$slots, \"actions\", {}, void 0, true)\n ], 2)) : createCommentVNode(\"\", true)\n ], 2);\n };\n }\n});\nconst NcAppNavigationSearch = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-191b6717\"]]);\nexport {\n NcAppNavigationSearch as N\n};\n//# sourceMappingURL=NcAppNavigationSearch-CiOKjV3M.mjs.map\n","<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport NcAvatar from '@nextcloud/vue/components/NcAvatar'\n\nwithDefaults(defineProps<{\n\tdisplayName: string\n\tsize?: number\n}>(), {\n\tsize: 32,\n})\n</script>\n\n<template>\n\t<!-- Teams have no user account, so render a generated initials avatar. -->\n\t<NcAvatar\n\t\t:displayName=\"displayName\"\n\t\t:isNoUser=\"true\"\n\t\t:size=\"size\"\n\t\thideStatus\n\t\tdisableMenu\n\t\tdisableTooltip />\n</template>\n","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp(appName)\n\t.detectUser()\n\t.build()\n","// @ts-nocheck\n/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { MemberLevel, MemberType } from './constants.ts'\n\nimport logger from '../services/logger.js'\nimport Circle from './circle.ts'\nimport { MemberLevels, MemberTypes } from './constants.ts'\n\nexport default class Member {\n\t_data: any = {}\n\t_circle: Circle\n\n\t/**\n\t * Creates an instance of Member\n\t *\n\t * @param data\n\t * @param circle\n\t */\n\tconstructor(data: any, circle: Circle) {\n\t\tif (typeof data !== 'object') {\n\t\t\tthrow new Error('Invalid member')\n\t\t}\n\n\t\t// if no uid set, fail\n\t\tif (data.id && typeof data.id !== 'string') {\n\t\t\tlogger.error('This member do not have a proper uid', data)\n\t\t\tthrow new Error('This member do not have a proper uid')\n\t\t}\n\n\t\tthis._circle = circle\n\t\tthis._data = data\n\t}\n\n\t/**\n\t * Get the circle of this member\n\t */\n\tget circle(): Circle {\n\t\treturn this._circle\n\t}\n\n\t/**\n\t * Set the circle of this member\n\t */\n\tset circle(circle: Circle) {\n\t\tif (circle.constructor.name !== Circle.name) {\n\t\t\tthrow new Error('circle must be a Circle type')\n\t\t}\n\t\tthis._circle = circle\n\t}\n\n\t/**\n\t * Member id\n\t */\n\tget id(): string {\n\t\treturn this._data.id\n\t}\n\n\t/**\n\t * Single uid\n\t */\n\tget singleId(): string {\n\t\treturn this._data.singleId\n\t}\n\n\t/**\n\t * Formatted display name\n\t */\n\tget displayName(): string {\n\t\treturn this._data.displayName\n\t}\n\n\t/**\n\t * Member userId\n\t */\n\tget userId(): string {\n\t\treturn this._data.userId\n\t}\n\n\t/**\n\t * Member type\n\t */\n\tget userType(): MemberType {\n\t\t// If the user type is a circle, this could originate from multiple sources\n\t\treturn this._data.userType !== MemberTypes.CIRCLE\n\t\t\t? this._data.userType\n\t\t\t: this.basedOn.source\n\t}\n\n\t/**\n\t * Member based on source\n\t */\n\tget basedOn(): any {\n\t\treturn this._data.basedOn\n\t}\n\n\t/**\n\t * Member level\n\t *\n\t */\n\tget level(): MemberLevel {\n\t\treturn this._data.level\n\t}\n\n\t/**\n\t * Set member level\n\t */\n\tset level(level: MemberLevel) {\n\t\tif (!(level in MemberLevels)) {\n\t\t\tthrow new Error('Invalid level')\n\t\t}\n\t\tthis._data.level = level\n\t}\n\n\t/**\n\t * Member request status\n\t *\n\t */\n\tget status(): string {\n\t\treturn this._data.status\n\t}\n\n\t/**\n\t * Is the current member a user?\n\t */\n\tget isUser() {\n\t\treturn this._data.userType === MemberLevels.MEMBER\n\t}\n\n\t/**\n\t * Is the current member without a circle?\n\t */\n\tget isOrphan() {\n\t\treturn this._circle?.constructor?.name !== Circle.name\n\t}\n\n\t/**\n\t * Delete this member and any reference from its circle\n\t */\n\tdelete() {\n\t\tif (this.isOrphan) {\n\t\t\tthrow new Error('Cannot delete this member as it doesn\\'t belong to any circle')\n\t\t}\n\t\tthis.circle.deleteMember(this)\n\t\tthis._data = undefined\n\t}\n}\n","// @ts-nocheck\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { CircleConfigs, MemberLevels, ROUTE_CIRCLE } from './constants.ts'\nimport Member from './member.ts'\n\ntype MemberList = Record<string, Member>\n\nexport default class Circle {\n\t_data: any = {}\n\t_members: MemberList = {}\n\t_owner: Member\n\t_initiator: Member\n\n\t/**\n\t * Creates an instance of Circle\n\t *\n\t * @param data\n\t */\n\tconstructor(data: object) {\n\t\tthis.updateData(data)\n\t}\n\n\t/**\n\t * Update inner circle data, owner and initiator\n\t *\n\t * @param data\n\t */\n\tupdateData(data: any) {\n\t\tif (typeof data !== 'object') {\n\t\t\tthrow new Error('Invalid circle')\n\t\t}\n\n\t\t// if no uid set, fail\n\t\tif (!data.id) {\n\t\t\tthrow new Error('This circle do not have a proper uid')\n\t\t}\n\n\t\tthis._data = data\n\t\tthis._owner = new Member(data.owner, this)\n\n\t\tif (data.initiator) {\n\t\t\tthis._initiator = new Member(data.initiator, this)\n\t\t}\n\t}\n\n\t// METADATA -----------------------------------------\n\t/**\n\t * Circle id\n\t */\n\tget id(): string {\n\t\treturn this._data.id\n\t}\n\n\t/**\n\t * Formatted display name\n\t */\n\tget displayName(): string {\n\t\treturn this._data.displayName\n\t}\n\n\t/**\n\t * Set the display name\n\t */\n\tset displayName(text: string) {\n\t\tthis._data.displayName = text\n\t}\n\n\t/**\n\t * Circle creation date\n\t */\n\tget creation(): number {\n\t\treturn this._data.creation\n\t}\n\n\t/**\n\t * Circle description\n\t */\n\tget description(): string {\n\t\treturn this._data.description\n\t}\n\n\t/**\n\t * Circle description\n\t */\n\tset description(text: string) {\n\t\tthis._data.description = text\n\t}\n\n\t/**\n\t * Circle direct member count (excluding nested circles)\n\t */\n\tget population() {\n\t\treturn this._data.population\n\t}\n\n\t/**\n\t * Circle total member count (direct + inherited from nested circles)\n\t */\n\tget populationInherited() {\n\t\treturn this._data.populationInherited\n\t}\n\n\t// MEMBERSHIP -----------------------------------------\n\t/**\n\t * Circle ini_initiator the current\n\t * user info for this circle\n\t * null if not a member\n\t */\n\tget initiator(): Member | null {\n\t\treturn this._initiator\n\t}\n\n\t/**\n\t * Set new circle initiator\n\t * null if not a member\n\t */\n\tset initiator(initiator: Member) {\n\t\tif (initiator && initiator.constructor.name !== Member.name) {\n\t\t\tthrow new Error('Initiator must be a Member type')\n\t\t}\n\t\tthis._initiator = initiator\n\t}\n\n\t/**\n\t * Circle ownership\n\t */\n\tget owner(): Member {\n\t\treturn this._owner\n\t}\n\n\t/**\n\t * Set new circle owner\n\t */\n\tset owner(owner: Member) {\n\t\tif (owner.constructor.name !== Member.name) {\n\t\t\tthrow new Error('Owner must be a Member type')\n\t\t}\n\t\tthis._owner = owner\n\t}\n\n\t/**\n\t * Circle members\n\t */\n\tget members(): MemberList {\n\t\treturn this._members\n\t}\n\n\t/**\n\t * Define members circle\n\t */\n\tset members(members: MemberList) {\n\t\tthis._members = members\n\t}\n\n\t/**\n\t * Add a member to this circle\n\t *\n\t * @param member\n\t */\n\taddMember(member: Member) {\n\t\tif (member.constructor.name !== Member.name) {\n\t\t\tthrow new Error('Member must be a Member type')\n\t\t}\n\n\t\tconst singleId = member.singleId\n\t\tif (this._members[singleId]) {\n\t\t\tconsole.warn('Replacing existing member data', member)\n\t\t}\n\t\tthis._members[singleId] = member\n\t}\n\n\t/**\n\t * Remove a member from this circle\n\t *\n\t * @param member\n\t */\n\tdeleteMember(member: Member) {\n\t\tif (member.constructor.name !== Member.name) {\n\t\t\tthrow new Error('Member must be a Member type')\n\t\t}\n\n\t\tconst singleId = member.singleId\n\t\tif (!this._members[singleId]) {\n\t\t\tconsole.warn('The member was not in this circle. Nothing was done.', member)\n\t\t}\n\n\t\t// Delete and clear memory\n\t\tdelete this._members[singleId]\n\t}\n\n\t// CONFIGS --------------------------------------------\n\tget settings() {\n\t\treturn this._data.settings\n\t}\n\n\t/**\n\t * Circle config\n\t */\n\tget config(): number {\n\t\treturn this._data.config\n\t}\n\n\t/**\n\t * Define circle config\n\t */\n\tset config(config: number) {\n\t\tthis._data.config = config\n\t}\n\n\t/**\n\t * Circle is personal\n\t */\n\tget isPersonal() {\n\t\treturn (this._data.config & CircleConfigs.PERSONAL) !== 0\n\t}\n\n\t/**\n\t * Circle requires invite to be confirmed by moderator or above\n\t */\n\tget requireJoinAccept() {\n\t\treturn (this._data.config & CircleConfigs.VISIBLE) !== 0\n\t}\n\n\t/**\n\t * Circle can be requested to join\n\t */\n\tget canJoin() {\n\t\treturn (this._data.config & CircleConfigs.OPEN) !== 0\n\t}\n\n\t/**\n\t * Circle is visible to others\n\t */\n\tget isVisible() {\n\t\treturn (this._data.config & CircleConfigs.VISIBLE) !== 0\n\t}\n\n\t/**\n\t * Circle requires invite to be accepted by the member\n\t */\n\tget requireInviteAccept() {\n\t\treturn (this._data.config & CircleConfigs.INVITE) !== 0\n\t}\n\n\t// PERMISSIONS SHORTCUTS ------------------------------\n\t/**\n\t * Can the initiator add members to this circle?\n\t */\n\tget isOwner() {\n\t\treturn this.initiator?.level === MemberLevels.OWNER\n\t}\n\n\t// PERMISSIONS SHORTCUTS ------------------------------\n\t/**\n\t * Is the initiator an admin of this circle?\n\t */\n\tget isAdmin() {\n\t\treturn this.initiator?.level === MemberLevels.ADMIN\n\t}\n\n\t/**\n\t * Is the initiator a member of this circle?\n\t */\n\tget isMember() {\n\t\treturn this.initiator?.level\n\t\t\t&& this.initiator?.level > MemberLevels.NONE\n\t}\n\n\t/**\n\t * Is the initiator a pending member of this circle?\n\t */\n\tget isPendingMember() {\n\t\treturn this.initiator?.level === MemberLevels.NONE\n\t}\n\n\t/**\n\t * Can the initiator delete this circle?\n\t */\n\tget canDelete() {\n\t\treturn this.isOwner\n\t}\n\n\t/**\n\t * Can the initiator leave this circle?\n\t */\n\tget canLeave() {\n\t\treturn this.isMember && !this.isOwner\n\t}\n\n\t/**\n\t * Can the initiator add/remove members to this circle?\n\t */\n\tget canManageMembers() {\n\t\treturn (this.initiator?.level\n\t\t\t&& this.initiator?.level >= MemberLevels.MODERATOR)\n\t\t|| (this.config & CircleConfigs.FRIEND) !== 0\n\t}\n\n\t// PARAMS ---------------------------------------------\n\t/**\n\t * Vue router param\n\t */\n\tget router() {\n\t\treturn {\n\t\t\tname: 'team',\n\t\t\tparams: { teamId: this.id },\n\t\t}\n\t}\n\n\tget invitationCode() {\n\t\treturn this._data.invitationCode\n\t}\n\n\tset invitationCode(invitationCode: string) {\n\t\tthis._data.invitationCode = invitationCode\n\t}\n\n\t/**\n\t * Default javascript fallback\n\t * Used for sorting as well\n\t */\n\ttoString() {\n\t\treturn this.displayName\n\t}\n}\n","// @ts-nocheck\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { MemberLevel, MemberType } from '../models/constants.ts'\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { MemberLevels } from '../models/constants.ts'\ninterface MemberPairs {\n\tid: string\n\ttype: MemberType\n}\n\ntype CircleEditType = 'name' | 'description' | 'settings' | 'config'\nexport enum CircleEdit {\n\tName = 'name',\n\tDescription = 'description',\n\tSettings = 'settings',\n\tConfig = 'config',\n}\n\ninterface CircleSetting {\n\tsetting: string\n\tvalue: string\n}\n\n/**\n * Get the circles list without the members\n *\n * @return\n */\nexport async function getCircles() {\n\tconst response = await axios.get(generateOcsUrl('apps/circles/circles'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Get a specific circle\n *\n * @param circleId\n * @return\n */\nexport async function getCircle(circleId: string) {\n\tconst response = await axios.get(generateOcsUrl('apps/circles/circles/{circleId}', { circleId }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new circle\n *\n * @param name the circle name\n * @param personal\n * @param local\n * @return\n */\nexport async function createCircle(name: string, personal: boolean, local: boolean) {\n\tconst response = await axios.post(generateOcsUrl('apps/circles/circles'), {\n\t\tname,\n\t\tpersonal,\n\t\tlocal,\n\t})\n\treturn response.data.ocs.data\n}\n\n/**\n * Delete an existing circle\n *\n * @param circleId the circle id\n * @return\n */\nexport async function deleteCircle(circleId: string) {\n\tconst response = await axios.delete(generateOcsUrl('apps/circles/circles/{circleId}', { circleId }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Edit an existing circle\n *\n * @param circleId the circle id\n * @param type the edit type\n * @param data the data\n * @param value\n * @return\n */\nexport async function editCircle(circleId: string, type: CircleEditType, value: any) {\n\tconst response = await axios.put(generateOcsUrl('apps/circles/circles/{circleId}/{type}', { circleId, type }), { value })\n\treturn response.data.ocs.data\n}\n\n/**\n * Join a circle\n *\n * @param circleId the circle id\n * @return\n */\nexport async function joinCircle(circleId: string) {\n\tconst response = await axios.put(generateOcsUrl('apps/circles/circles/{circleId}/join', { circleId }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Leave a circle\n *\n * @param circleId the circle id\n * @return\n */\nexport async function leaveCircle(circleId: string) {\n\tconst response = await axios.put(generateOcsUrl('apps/circles/circles/{circleId}/leave', { circleId }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Get the circle members without the members\n *\n * @param circleId the circle id\n * @param search the search query\n * @param role the role\n * @param limit the limit\n * @return\n */\nexport async function getCircleMembers(circleId: string, search?: string, role?: string, limit?: number) {\n\tconst response = await axios.get(\n\t\tgenerateOcsUrl('apps/circles/circles/{circleId}/members', { circleId }),\n\t\t{\n\t\t\tparams: {\n\t\t\t\tsearch,\n\t\t\t\trole,\n\t\t\t\t...(limit ? { limit } : {}),\n\t\t\t},\n\t\t},\n\t)\n\treturn response.data.ocs.data\n}\n\n/**\n * Search a potential circle member\n *\n * @param term the search query\n * @return\n */\nexport async function searchMember(term: string) {\n\tconst response = await axios.get(generateOcsUrl('apps/circles/search?term={term}', { term }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Add a circle member\n *\n * @param circleId the circle id\n * @param members the member id\n * @return\n */\nexport async function addMembers(circleId: string, members: Array<MemberPairs>) {\n\tconst response = await axios.post(generateOcsUrl('apps/circles/circles/{circleId}/members/multi', { circleId }), { members })\n\treturn response.data.ocs.data\n}\n\n/**\n * Delete a circle member\n *\n * @param circleId the circle id\n * @param memberId the member id\n * @return\n */\nexport async function deleteMember(circleId: string, memberId: string) {\n\tconst response = await axios.delete(generateOcsUrl('apps/circles/circles/{circleId}/members/{memberId}', { circleId, memberId }))\n\treturn Object.values(response.data.ocs.data)\n}\n\n/**\n * change a member level\n *\n * @see levels file src/models/constants.js\n *\n * @param circleId the circle id\n * @param memberId the member id\n * @param level the new member level\n * @return\n */\nexport async function changeMemberLevel(circleId: string, memberId: string, level: MemberLevel) {\n\tif (!(level in MemberLevels)) {\n\t\tthrow new Error('Invalid level.')\n\t}\n\n\tconst response = await axios.put(generateOcsUrl('apps/circles/circles/{circleId}/members/{memberId}/level', { circleId, memberId }), {\n\t\tlevel,\n\t})\n\treturn Object.values(response.data.ocs.data)\n}\n\n/**\n * Accept a circle member request\n *\n * @param circleId the circle id\n * @param memberId the member id\n * @return\n */\nexport async function acceptMember(circleId: string, memberId: string) {\n\tconst response = await axios.put(generateOcsUrl('apps/circles/circles/{circleId}/members/{memberId}', { circleId, memberId }))\n\treturn response.data.ocs.data\n}\n\nexport async function editCircleSetting(circleId: string, setting: CircleSetting) {\n\tconst response = await axios.put(\n\t\tgenerateOcsUrl('apps/circles/circles/{circleId}/setting', { circleId }),\n\t\tsetting,\n\t)\n\treturn response.data.ocs.data\n}\n\n/**\n * Get a specific invitation\n *\n * @param invitationCode\n * @return\n */\nexport async function getInvitation(invitationCode: string) {\n\tconst response = await axios.get(generateOcsUrl('apps/circles/invitations/{invitationCode}', { invitationCode }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Join a circle using an invitation\n *\n * @param invitationCode\n * @return\n */\nexport async function joinInvitation(invitationCode: string) {\n\tconst response = await axios.post(generateOcsUrl('apps/circles/invitations/{invitationCode}', { invitationCode }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create an invitation link for a circle\n *\n * @param circleId\n * @return\n */\nexport async function createInvitationLink(circleId: string) {\n\tconst response = await axios.put(generateOcsUrl('apps/circles/circles/{circleId}/invitation', { circleId }))\n\treturn response.data.ocs.data\n}\n\n/**\n * Revoke the invitation link of a circle\n *\n * @param circleId\n * @return\n */\nexport async function revokeInvitationLink(circleId: string) {\n\tconst response = await axios.delete(generateOcsUrl('apps/circles/circles/{circleId}/invitation', { circleId }))\n\treturn response.data.ocs.data\n}\n","<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<ul class=\"circle-config__list\">\n\t\t<NcCheckboxRadioSwitch\n\t\t\tv-for=\"(label, config) in configs\"\n\t\t\t:key=\"'circle-config' + config\"\n\t\t\t:model-value=\"isChecked(Number(config))\"\n\t\t\t:loading=\"loading === Number(config)\"\n\t\t\t:disabled=\"loading !== false\"\n\t\t\twrapper-element=\"li\"\n\t\t\t@update:model-value=\"onChange(Number(config), $event)\">\n\t\t\t{{ label }}\n\t\t</NcCheckboxRadioSwitch>\n\t</ul>\n</template>\n\n<script setup lang=\"ts\">\nimport { showConfirmation, showError } from '@nextcloud/dialogs'\nimport { t } from '@nextcloud/l10n'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\nimport { ref } from 'vue'\nimport Circle from '../../../models/circle.ts'\nimport { CircleConfigs } from '../../../models/constants.ts'\nimport { CircleEdit, editCircle } from '../../../services/circles.ts'\nimport logger from '../../../services/logger.js'\n\nconst props = defineProps<{\n\tcircle: Circle\n\tconfigs: Record<string, string>\n}>()\n\nconst emit = defineEmits<{\n\t(e: 'close-settings-popover'): void\n}>()\n\nconst loading = ref<number | false>(false)\n\nfunction isChecked(config: number): boolean {\n\treturn (props.circle.config & config) !== 0\n}\n\nasync function onChange(config: number, checked: boolean) {\n\tlogger.debug(`Circle config ${config} is set to ${checked}`)\n\n\tif (checked && config === CircleConfigs.FEDERATED) {\n\t\temit('close-settings-popover')\n\t\tconst confirmed = await confirmEnableFederationForCircle()\n\t\tif (!confirmed) {\n\t\t\treturn\n\t\t}\n\t}\n\n\tloading.value = config\n\tconst prevConfig = props.circle.config\n\tconst nextConfig = checked ? prevConfig | config : prevConfig & ~config\n\n\ttry {\n\t\tconst circleData = await editCircle(props.circle.id, CircleEdit.Config, nextConfig)\n\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\tprops.circle.config = circleData.config\n\t} catch (error) {\n\t\tlogger.error('Unable to edit circle config', { prevConfig, config: nextConfig, error })\n\t\tshowError(t('circles', 'An error happened during the config change'))\n\t} finally {\n\t\tloading.value = false\n\t}\n}\n\nasync function confirmEnableFederationForCircle(): Promise<boolean> {\n\tconst confirmed = await showConfirmation({\n\t\tname: t('circles', 'Confirm enabling federation'),\n\t\ttext: t('circles', 'Enabling this will prevent {circle} from being a member of other teams.\\nAre you sure?', {\n\t\t\tcircle: props.circle.displayName,\n\t\t}),\n\t\tlabelConfirm: t('circles', 'Enable federation'),\n\t\tlabelReject: t('circles', 'Cancel'),\n\t\tseverity: 'warning',\n\t})\n\tif (!confirmed) {\n\t\tlogger.debug('Enable federation cancelled')\n\t\treturn false\n\t}\n\treturn true\n}\n</script>\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon autorenew-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,6V9L16,5L12,1V4A8,8 0 0,0 4,12C4,13.57 4.46,15.03 5.24,16.26L6.7,14.8C6.25,13.97 6,13 6,12A6,6 0 0,1 12,6M18.76,7.74L17.3,9.2C17.74,10.04 18,11 18,12A6,6 0 0,1 12,18V15L8,19L12,23V20A8,8 0 0,0 20,12C20,10.43 19.54,8.97 18.76,7.74Z\">\n <title v-if=\"title\">{{ title }}\n \n \n \n\n\n","\n\n","\n\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { showError, showSuccess } from '@nextcloud/dialogs'\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tcopied: false,\n\t\t\tcopyLoading: false,\n\t\t\tcopySuccess: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcopyLinkIcon() {\n\t\t\tif (this.copySuccess) {\n\t\t\t\treturn 'icon-checkmark'\n\t\t\t}\n\t\t\tif (this.copyLoading) {\n\t\t\t\treturn 'icon-loading-small'\n\t\t\t}\n\t\t\treturn 'icon-public'\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync copyToClipboard(url) {\n\t\t\t// change to loading status\n\t\t\tthis.copyLoading = true\n\n\t\t\t// copy link to clipboard\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(url)\n\t\t\t\tthis.copySuccess = true\n\t\t\t\tthis.copied = true\n\n\t\t\t\t// Notify success\n\t\t\t\tshowSuccess(t('circles', 'Link copied to the clipboard'))\n\t\t\t} catch (error) {\n\t\t\t\tthis.copySuccess = false\n\t\t\t\tthis.copied = true\n\t\t\t\tshowError(t('circles', 'Could not copy link to the clipboard.'))\n\t\t\t} finally {\n\t\t\t\tthis.copyLoading = false\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t// stop loading status regardless of outcome\n\t\t\t\t\tthis.copied = false\n\t\t\t\t\tthis.copySuccess = false\n\t\t\t\t}, 2000)\n\t\t\t}\n\t\t},\n\t},\n}\n","\n\n\n\n\n","// @ts-nocheck\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/// \n\nimport { translate as t } from '@nextcloud/l10n'\nimport { ShareType } from '@nextcloud/sharing'\nimport CircleConfigCheckboxesList from '../components/CircleDetails/CircleConfigs/CircleConfigCheckboxesList.vue'\nimport CircleConfigInvitationLink from '../components/CircleDetails/CircleConfigs/CircleConfigInvitationLink.vue'\n\nexport type DefaultGroup = string\nexport type DefaultChart = string\nexport type CircleConfig = number\nexport type MemberLevel = number\nexport type MemberType = number\n\n// Global sizes\nexport const LIST_SIZE = 60\n\n// Dynamic default groups\nexport const GROUP_ALL_CONTACTS: DefaultGroup = t('circles', 'All contacts')\nexport const GROUP_NO_GROUP_CONTACTS: DefaultGroup = t('circles', 'Not grouped')\nexport const GROUP_RECENTLY_CONTACTED: DefaultGroup = t('circles', 'Recently contacted')\n\n// Organization default chart for all contacts\nexport const CHART_ALL_CONTACTS: DefaultChart = t('circles', 'Organization chart')\n\n// Circle route, see vue-router conf\nexport const ROUTE_CIRCLE = 'circle'\nexport const ROUTE_CHART = 'chart'\nexport const ROUTE_USER_GROUP = 'user_group'\n\n// Contact settings\nexport const CONTACTS_SETTINGS: DefaultGroup = t('circles', 'Contacts settings')\n\n// Default max number of items to show in the navigation\nexport const ELLIPSIS_COUNT = 5\n\n// Circles member levels\nconst MEMBER_LEVEL_NONE: MemberLevel = 0\nconst MEMBER_LEVEL_MEMBER: MemberLevel = 1\nconst MEMBER_LEVEL_MODERATOR: MemberLevel = 4\nconst MEMBER_LEVEL_ADMIN: MemberLevel = 8\nconst MEMBER_LEVEL_OWNER: MemberLevel = 9\n\n// Circles member types\n\nconst MEMBER_TYPE_SINGLEID: MemberType = 0\nconst MEMBER_TYPE_USER: MemberType = 1\nconst MEMBER_TYPE_GROUP: MemberType = 2\nconst MEMBER_TYPE_MAIL: MemberType = 4\nconst MEMBER_TYPE_CONTACT: MemberType = 8\nconst MEMBER_TYPE_CIRCLE: MemberType = 16\n\nexport const CIRCLE_DESC = t('circles', 'Create your own teams for sharing. Add Nextcloud users, contacts, or anyone via email.')\n\n// Circles config flags\n\nconst CIRCLE_CONFIG_PERSONAL: CircleConfig = 2 // Personal circle, only the owner can see it.\nconst CIRCLE_CONFIG_SYSTEM: CircleConfig = 4 // System Circle (not managed by the official front-end). Meaning some config are limited\nconst CIRCLE_CONFIG_VISIBLE: CircleConfig = 8 // Visible to everyone, if not visible, people have to know its name to be able to find it\nconst CIRCLE_CONFIG_OPEN: CircleConfig = 16 // Circle is open, people can join\nconst CIRCLE_CONFIG_INVITE: CircleConfig = 32 // Adding a member generate an invitation that needs to be accepted\nconst CIRCLE_CONFIG_REQUEST: CircleConfig = 64 // Request to join Circles needs to be confirmed by a moderator\nconst CIRCLE_CONFIG_FRIEND: CircleConfig = 128 // Members of the circle can invite their friends\nconst CIRCLE_CONFIG_PROTECTED: CircleConfig = 256 // Password protected to join/request\nconst CIRCLE_CONFIG_NO_OWNER: CircleConfig = 512 // no owner, only members\nconst CIRCLE_CONFIG_HIDDEN: CircleConfig = 1024 // hidden from listing, but available as a share entity\nconst CIRCLE_CONFIG_BACKEND: CircleConfig = 2048 // Fully hidden, only backend Circles\nconst CIRCLE_CONFIG_LOCAL: CircleConfig = 4096 // Circle is not shared to other instance in globalscale\nconst CIRCLE_CONFIG_ROOT: CircleConfig = 8192 // Circle cannot be a member of another Circle\nconst CIRCLE_CONFIG_CIRCLE_INVITE: CircleConfig = 16384 // Circle must confirm when invited in another circle\nconst CIRCLE_CONFIG_FEDERATED: CircleConfig = 32768 // Federated\n\n// Existing members types\nexport const CIRCLES_MEMBER_TYPES = {\n\t[MEMBER_TYPE_CIRCLE]: t('circles', 'Team'),\n\t[MEMBER_TYPE_USER]: t('circles', 'User'),\n\t[MEMBER_TYPE_GROUP]: t('circles', 'Group'),\n\t[MEMBER_TYPE_MAIL]: t('circles', 'Email'),\n\t[MEMBER_TYPE_CONTACT]: t('circles', 'Contact'),\n}\n\n// Available circles promote/demote levels\nexport const CIRCLES_MEMBER_LEVELS = {\n\t// [MEMBER_LEVEL_NONE]: t('circles', 'Pending'),\n\t[MEMBER_LEVEL_MEMBER]: t('circles', 'Member'),\n\t[MEMBER_LEVEL_MODERATOR]: t('circles', 'Moderator'),\n\t[MEMBER_LEVEL_ADMIN]: t('circles', 'Admin'),\n\t[MEMBER_LEVEL_OWNER]: t('circles', 'Owner'),\n}\n\n// Available circle configs in the circle details view\nexport const PUBLIC_CIRCLE_CONFIG = {\n\t[t('circles', 'Invites')]: {\n\t\tcomponent: CircleConfigCheckboxesList,\n\t\tprops: {\n\t\t\tconfigs: {\n\t\t\t\t[CIRCLE_CONFIG_OPEN]: t('circles', 'Anyone can request membership'),\n\t\t\t\t[CIRCLE_CONFIG_INVITE]: t('circles', 'Members need to accept invitation'),\n\t\t\t\t[CIRCLE_CONFIG_REQUEST]: t('circles', 'Memberships must be confirmed/accepted by a Moderator (requires \"Anyone can request membership\")'),\n\t\t\t\t[CIRCLE_CONFIG_FRIEND]: t('circles', 'Members can also invite'),\n\t\t\t},\n\t\t},\n\t},\n\n\t[t('circles', 'Invitation links')]: {\n\t\tcomponent: CircleConfigInvitationLink,\n\t\tprops: {},\n\t},\n\n\t[t('circles', 'Membership')]: {\n\t\tcomponent: CircleConfigCheckboxesList,\n\t\tprops: {\n\t\t\tconfigs: {\n\t\t\t\t// TODO: implement backend\n\t\t\t\t// [CIRCLE_CONFIG_CIRCLE_INVITE]: t('circles', 'Team must confirm when invited in another circle'),\n\t\t\t\t[CIRCLE_CONFIG_ROOT]: t('circles', 'Prevent teams from being a member of another team'),\n\t\t\t},\n\t\t},\n\t},\n\n\t[t('circles', 'Federation')]: {\n\t\tcomponent: CircleConfigCheckboxesList,\n\t\tprops: {\n\t\t\tconfigs: {\n\t\t\t\t[CIRCLE_CONFIG_FEDERATED]: t('circles', 'Allow federated members'),\n\t\t\t},\n\t\t},\n\t},\n\n\t[t('circles', 'Privacy')]: {\n\t\tcomponent: CircleConfigCheckboxesList,\n\t\tprops: {\n\t\t\tconfigs: {\n\t\t\t\t[CIRCLE_CONFIG_VISIBLE]: t('circles', 'Visible to everyone'),\n\t\t\t},\n\t\t},\n\t},\n}\n\n// Represents the picker options (label is used lower case in a list of options: Search users, groups, teams, ...)\n// labelStandalone is used as heading for the member list where we need it starting captialized\nexport const CIRCLES_MEMBER_GROUPING = [\n\t{\n\t\tid: `picker-${ShareType.User}`,\n\t\tlabel: t('circles', 'users'),\n\t\tlabelStandalone: t('circles', 'Users'),\n\t\tshare: ShareType.User,\n\t\ttype: MEMBER_TYPE_USER,\n\t},\n\t{\n\t\tid: `picker-${ShareType.Group}`,\n\t\tlabel: t('circles', 'groups'),\n\t\tlabelStandalone: t('circles', 'Groups'),\n\t\tshare: ShareType.Group,\n\t\ttype: MEMBER_TYPE_GROUP,\n\t},\n\t{\n\t\tid: `picker-${ShareType.Remote}`,\n\t\tlabel: t('circles', 'federated users'),\n\t\tlabelStandalone: t('circles', 'Federated users'),\n\t\tshare: ShareType.Remote,\n\t\ttype: MEMBER_TYPE_USER,\n\t},\n\t// {\n\t// id: `picker-${ShareType.RemoteGroup}`,\n\t// label: t('circles', 'federated groups'),\n\t// share: ShareType.RemoteGroup,\n\t// type: MEMBER_TYPE_GROUP\n\t// },\n\t{\n\t\tid: `picker-${ShareType.Team}`,\n\t\tlabel: t('circles', 'teams'),\n\t\tlabelStandalone: t('circles', 'Teams'),\n\t\tshare: ShareType.Team,\n\t\ttype: MEMBER_TYPE_CIRCLE,\n\t},\n\t{\n\t\tid: `picker-${ShareType.Email}`,\n\t\tlabel: t('circles', 'email addresses'),\n\t\tlabelStandalone: t('circles', 'Email addresses'),\n\t\tshare: ShareType.Email,\n\t\ttype: MEMBER_TYPE_MAIL,\n\t},\n\t// TODO: implement SHARE_TYPE_CONTACT\n\t{\n\t\tid: 'picker-contact',\n\t\tlabel: t('circles', 'contacts'),\n\t\tlabelStandalone: t('circles', 'Contacts'),\n\t\tshare: ShareType.Email,\n\t\ttype: MEMBER_TYPE_CONTACT,\n\t},\n]\n\n// Generating a map between share types and circle member types\nexport const SHARES_TYPES_MEMBER_MAP = CIRCLES_MEMBER_GROUPING.reduce((list, entry) => {\n\t// ! Ignore duplicate share types\n\tif (!list[entry.share]) {\n\t\tlist[entry.share] = entry.type\n\t}\n\treturn list\n}, {})\n\nexport enum MemberLevels {\n\tNONE = MEMBER_LEVEL_NONE,\n\tMEMBER = MEMBER_LEVEL_MEMBER,\n\tMODERATOR = MEMBER_LEVEL_MODERATOR,\n\tADMIN = MEMBER_LEVEL_ADMIN,\n\tOWNER = MEMBER_LEVEL_OWNER,\n}\n\nexport enum MemberTypes {\n\tCIRCLE = MEMBER_TYPE_CIRCLE,\n\tUSER = MEMBER_TYPE_USER,\n\tGROUP = MEMBER_TYPE_GROUP,\n\tMAIL = MEMBER_TYPE_MAIL,\n\tCONTACT = MEMBER_TYPE_CONTACT,\n}\n\nexport enum CircleConfigs {\n\tPERSONAL = CIRCLE_CONFIG_PERSONAL,\n\tSYSTEM = CIRCLE_CONFIG_SYSTEM,\n\tVISIBLE = CIRCLE_CONFIG_VISIBLE,\n\tOPEN = CIRCLE_CONFIG_OPEN,\n\tINVITE = CIRCLE_CONFIG_INVITE,\n\tREQUEST = CIRCLE_CONFIG_REQUEST,\n\tFRIEND = CIRCLE_CONFIG_FRIEND,\n\tPROTECTED = CIRCLE_CONFIG_PROTECTED,\n\tNO_OWNER = CIRCLE_CONFIG_NO_OWNER,\n\tHIDDEN = CIRCLE_CONFIG_HIDDEN,\n\tBACKEND = CIRCLE_CONFIG_BACKEND,\n\tLOCAL = CIRCLE_CONFIG_LOCAL,\n\tROOT = CIRCLE_CONFIG_ROOT,\n\tCIRCLE_INVITE = CIRCLE_CONFIG_CIRCLE_INVITE,\n\tFEDERATED = CIRCLE_CONFIG_FEDERATED,\n}\n\nexport enum MemberStatus {\n\tINVITED = 'Invited',\n\tMEMBER = 'Member',\n\tREQUESTING = 'Requesting',\n}\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { ShareType } from '@nextcloud/sharing'\nimport { CircleConfigs, SHARES_TYPES_MEMBER_MAP } from '../models/constants.ts'\n\n// generate allowed shareType from SHARES_TYPES_MEMBER_MAP\nconst shareType = Object.keys(SHARES_TYPES_MEMBER_MAP)\nconst maxAutocompleteResults = parseInt(window.OC.config['sharing.maxAutocompleteResults'], 10) || 25\n\n/**\n * Get suggestions\n *\n * @param {string} search the search query\n * @param {object|null} circle - the circle object\n */\nexport async function getSuggestions(search, circle = null) {\n\tconst request = await axios.get(generateOcsUrl('apps/files_sharing/api/v1/sharees'), {\n\t\tparams: {\n\t\t\tformat: 'json',\n\t\t\titemType: 'teams',\n\t\t\tsearch,\n\t\t\tperPage: maxAutocompleteResults,\n\t\t\tshareType,\n\t\t\tlookup: false,\n\t\t},\n\t})\n\n\tconst data = request.data.ocs.data\n\tconst exact = request.data.ocs.data.exact\n\tdata.exact = [] // removing exact from general results\n\n\t// flatten array of arrays\n\tlet rawExactSuggestions = Object.values(exact).reduce((arr, elem) => arr.concat(elem), [])\n\tlet rawSuggestions = Object.values(data).reduce((arr, elem) => arr.concat(elem), [])\n\n\t// check if federation flag is enabled using bitwise AND on circle config\n\tconst isCircleFederated = circle ? (circle.config & CircleConfigs.FEDERATED) !== 0 : false\n\tif (isCircleFederated) {\n\t\t// remove results from untrusted remote servers\n\t\trawExactSuggestions = rawExactSuggestions\n\t\t\t.filter((result) => !(result.value?.shareType === ShareType.Remote && result.value?.isTrustedServer === false))\n\t\trawSuggestions = rawSuggestions\n\t\t\t.filter((result) => !(result.value?.shareType === ShareType.Remote && result.value?.isTrustedServer === false))\n\t} else {\n\t\t// remove all results from remote servers\n\t\trawExactSuggestions = rawExactSuggestions\n\t\t\t.filter((result) => result.value?.shareType !== ShareType.Remote)\n\t\trawSuggestions = rawSuggestions\n\t\t\t.filter((result) => result.value?.shareType !== ShareType.Remote)\n\t}\n\n\t// remove invalid data and format to user-select layout\n\tconst exactSuggestions = rawExactSuggestions\n\t\t.filter((result) => typeof result === 'object')\n\t\t.map((share) => formatResults(share))\n\t\t// sort by type so we can get user&groups first...\n\t\t.sort((a, b) => a.shareType - b.shareType)\n\tconst suggestions = rawSuggestions\n\t\t.filter((result) => typeof result === 'object')\n\t\t.map((share) => formatResults(share))\n\t\t// sort by type so we can get user&groups first...\n\t\t.sort((a, b) => a.shareType - b.shareType)\n\n\tconst allSuggestions = exactSuggestions.concat(suggestions)\n\n\t// Count occurances of display names in order to provide a distinguishable description if needed\n\tconst nameCounts = allSuggestions.reduce((nameCounts, result) => {\n\t\tif (!result.displayName) {\n\t\t\treturn nameCounts\n\t\t}\n\t\tif (!nameCounts[result.displayName]) {\n\t\t\tnameCounts[result.displayName] = 0\n\t\t}\n\t\tnameCounts[result.displayName]++\n\t\treturn nameCounts\n\t}, {})\n\n\tconst finalResults = allSuggestions.map((item) => {\n\t\t// Make sure that items with duplicate displayName get the shareWith applied as a description\n\t\tif (nameCounts[item.displayName] > 1 && !item.desc) {\n\t\t\treturn { ...item, desc: item.shareWithDisplayNameUnique }\n\t\t}\n\t\treturn item\n\t})\n\n\tconsole.info('suggestions', finalResults)\n\n\treturn finalResults\n}\n\n/**\n * Get the sharing recommendations\n */\nexport async function getRecommendations() {\n\tconst request = await axios.get(generateOcsUrl('apps/files_sharing/api/v1/sharees_recommended'), {\n\t\tparams: {\n\t\t\tformat: 'json',\n\t\t\titemType: 'contacts',\n\t\t\tshareType,\n\t\t},\n\t})\n\n\t// flatten array of arrays\n\tconst exact = request.data.ocs.data.exact\n\tconst recommendations = Object.values(exact).reduce((arr, elem) => arr.concat(elem), [])\n\n\t// remove invalid data and format to user-select layout\n\tconst finalResults = recommendations\n\t\t.map((share) => formatResults(share))\n\n\tconsole.info('recommendations', finalResults)\n\n\treturn finalResults\n}\n\nfunction formatResults(result) {\n\tconst type = `picker-${result.value.shareType}`\n\treturn {\n\t\tlabel: result.label,\n\t\tid: `${type}-${result.value.shareWith}`,\n\t\t// If this is a user, set as user for avatar display by UserBubble\n\t\tuser: [window.OC.Share.SHARE_TYPE_USER, window.OC.Share.SHARE_TYPE_REMOTE].indexOf(result.value.shareType) > -1\n\t\t\t? result.value.shareWith\n\t\t\t: null,\n\t\ttype,\n\t\t...result.value,\n\t}\n}\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Member, MemberCandidate, Resource, Team, TeamRole } from './types.ts'\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { logger } from '../logger.ts'\nimport { SHARES_TYPES_MEMBER_MAP } from './team-page/models/constants.ts'\nimport { getRecommendations, getSuggestions } from './team-page/services/collaborationAutocompletion.js'\n\n/** `SHARES_TYPES_MEMBER_MAP` is built dynamically, so type its shape explicitly. */\nconst shareTypeToMemberType = SHARES_TYPES_MEMBER_MAP as Record\n\n/** OCS endpoints require this header. */\nconst HEADERS = { 'OCS-APIRequest': 'true' }\n\n/** Minimal shape of an OCS response envelope. */\ninterface OcsResponse {\n\tocs: { data: T }\n}\n\n/** Raw member as returned by the circles API. */\ninterface RawMember {\n\tsingleId: string\n\tuserId: string | null\n\tdisplayName: string\n\tuserType?: number\n\ttype?: number\n\tlevel?: number\n}\n\n/** Raw resource as returned by the dashboard endpoint. */\ninterface RawResource {\n\tid: string | number\n\tname: string\n\ttype: string\n\ticonUrl: string\n\tfallbackIcon: string\n\turl: string\n}\n\n/** Raw circle as returned by the `/circles` endpoint. */\ninterface RawCircle {\n\tid: string\n\tname: string\n\tdisplayName: string\n\tdescription?: string\n\tpopulation?: number\n\tinitiator?: { level?: number }\n}\n\n/** Raw team as returned by the dashboard widget endpoint. */\ninterface RawDashboardTeam {\n\tsingleId: string\n\tmembers: RawMember[]\n\tresources: RawResource[]\n}\n\n/** Raw sharee suggestion, as returned by the files_sharing autocompletion helper. */\ninterface RawSuggestion {\n\tid: string\n\tlabel: string\n\tshareWith: string\n\tshareType: number\n\tuser?: string | null\n}\n\n/**\n * Map a circles member level to a role.\n *\n * @param level - The circles member level (9 owner, 8 admin, 4 moderator, …)\n */\nfunction levelToRole(level: number | undefined): TeamRole {\n\tif (level === undefined) {\n\t\treturn 'member'\n\t}\n\tif (level >= 9) {\n\t\treturn 'owner'\n\t}\n\tif (level >= 8) {\n\t\treturn 'admin'\n\t}\n\tif (level >= 4) {\n\t\treturn 'moderator'\n\t}\n\treturn 'member'\n}\n\n/**\n * Map a resource from the dashboard endpoint to our type.\n *\n * @param raw - The raw resource\n */\nfunction mapResource(raw: RawResource): Resource {\n\treturn {\n\t\tid: String(raw.id),\n\t\tname: raw.name,\n\t\ttype: raw.type === 'folder' ? 'folder' : 'file',\n\t\ticonUrl: raw.iconUrl,\n\t\tfallbackIcon: raw.fallbackIcon,\n\t\turl: raw.url,\n\t}\n}\n\n/**\n * Map a preview member (from the dashboard endpoint, no level) to our type.\n *\n * @param raw - The raw member\n */\nfunction mapPreviewMember(raw: RawMember): Member {\n\treturn {\n\t\tid: raw.singleId,\n\t\tuserId: raw.userId ?? null,\n\t\tdisplayName: raw.displayName,\n\t\tisUser: raw.type === 1,\n\t\trole: 'member',\n\t}\n}\n\n/**\n * Map a full member (from the members endpoint, includes level) to our type.\n *\n * @param raw - The raw member\n */\nfunction mapFullMember(raw: RawMember): Member {\n\treturn {\n\t\tid: raw.singleId,\n\t\tuserId: raw.userId ?? null,\n\t\tdisplayName: raw.displayName,\n\t\tisUser: raw.userType === 1,\n\t\trole: levelToRole(raw.level),\n\t}\n}\n\n/**\n * Fetch all of the current user's teams, merging team metadata (name,\n * description, member count, our role) with the members preview and resources.\n */\nexport async function fetchTeams(): Promise {\n\tconst [circlesRes, dashRes] = await Promise.allSettled([\n\t\taxios.get>(generateOcsUrl('apps/circles/circles') + '?limit=-1', { headers: HEADERS }),\n\t\taxios.get>(generateOcsUrl('apps/circles/teams/dashboard/widget') + '?limit=200&offset=0', { headers: HEADERS }),\n\t])\n\n\t// The team list is required; without it we have nothing to show.\n\tif (circlesRes.status === 'rejected') {\n\t\tthrow circlesRes.reason\n\t}\n\tconst circles = circlesRes.value.data.ocs.data ?? []\n\n\t// The dashboard only enriches each team with member/resource previews, so\n\t// treat a failure there as \"no previews\" rather than failing the whole page.\n\tlet dashboard: RawDashboardTeam[] = []\n\tif (dashRes.status === 'fulfilled') {\n\t\tdashboard = dashRes.value.data.ocs.data ?? []\n\t} else {\n\t\tlogger.warn('Failed to load team dashboard previews', { error: dashRes.reason })\n\t}\n\tconst dashboardById = new Map(dashboard.map((team) => [team.singleId, team]))\n\n\treturn circles.map((circle) => {\n\t\tconst extra = dashboardById.get(circle.id)\n\t\treturn {\n\t\t\tid: circle.id,\n\t\t\tdisplayName: circle.displayName || circle.name,\n\t\t\tdescription: circle.description ?? '',\n\t\t\tmemberCount: circle.population ?? extra?.members.length ?? 0,\n\t\t\tmyRole: levelToRole(circle.initiator?.level),\n\t\t\tmembers: (extra?.members ?? []).map(mapPreviewMember),\n\t\t\tresources: (extra?.resources ?? []).map(mapResource),\n\t\t}\n\t})\n}\n\n/**\n * Fetch the full member list for a team (includes roles).\n *\n * @param teamId - The team single id\n */\nexport async function fetchTeamMembers(teamId: string): Promise {\n\tconst res = await axios.get>(\n\t\tgenerateOcsUrl('apps/circles/circles/{circleId}/members', { circleId: teamId }),\n\t\t{ headers: HEADERS },\n\t)\n\treturn (res.data.ocs.data ?? []).map(mapFullMember)\n}\n\n/**\n * Create a team and return its single id.\n *\n * @param name - The team name\n */\nexport async function createTeam(name: string): Promise {\n\tconst res = await axios.post>(\n\t\tgenerateOcsUrl('apps/circles/circles'),\n\t\t{ name },\n\t\t{ headers: HEADERS },\n\t)\n\treturn res.data.ocs.data.id\n}\n\n/**\n * Set a team's description.\n *\n * @param teamId - The team single id\n * @param description - The new description\n */\nexport async function setTeamDescription(teamId: string, description: string): Promise {\n\tawait axios.put(\n\t\tgenerateOcsUrl('apps/circles/circles/{circleId}/description', { circleId: teamId }),\n\t\t{ value: description },\n\t\t{ headers: HEADERS },\n\t)\n}\n\n/**\n * Leave a team.\n *\n * @param teamId - The team single id\n */\nexport async function leaveTeam(teamId: string): Promise {\n\tawait axios.put(\n\t\tgenerateOcsUrl('apps/circles/circles/{circleId}/leave', { circleId: teamId }),\n\t\t{},\n\t\t{ headers: HEADERS },\n\t)\n}\n\n/**\n * Delete a team.\n *\n * @param teamId - The team single id\n */\nexport async function deleteTeam(teamId: string): Promise {\n\tawait axios.delete(\n\t\tgenerateOcsUrl('apps/circles/circles/{circleId}', { circleId: teamId }),\n\t\t{ headers: HEADERS },\n\t)\n}\n\n/**\n * The team folder linked to a team.\n */\nexport interface TeamFolder {\n\tid: number\n\tmountPoint: string\n}\n\n/**\n * Fetch the team folder linked to a team.\n *\n * The Circles app exposes the team-folder lifecycle through the core Teams\n * contract. The active provider is discovered server-side.\n *\n * @param teamId - The team single id\n * @return The linked team folder, or null if none exists.\n */\nexport async function getTeamFolder(teamId: string): Promise {\n\ttry {\n\t\tconst { data } = await axios.get>(\n\t\t\tgenerateOcsUrl('apps/circles/teams/{circleId}/folder', { circleId: teamId }),\n\t\t\t{ headers: HEADERS },\n\t\t)\n\t\treturn data.ocs.data\n\t} catch (error) {\n\t\tif (error && typeof error === 'object'\n\t\t\t&& 'response' in error\n\t\t\t&& (error.response as { status?: number })?.status === 404) {\n\t\t\treturn null\n\t\t}\n\t\tthrow error\n\t}\n}\n\n/**\n * Create a team folder for a team that predates the auto-create feature.\n *\n * Idempotent: if the team already owns a folder, the existing folder is\n * returned. Requires team owner privileges.\n *\n * @param teamId - The team single id\n * @return The created (or existing) team folder.\n */\nexport async function upgradeTeamFolder(teamId: string): Promise {\n\tconst { data } = await axios.post>(\n\t\tgenerateOcsUrl('apps/circles/teams/{circleId}/folder', { circleId: teamId }),\n\t\t{},\n\t\t{ headers: HEADERS },\n\t)\n\treturn data.ocs.data.folder\n}\n\n/**\n * Search for potential new members (users, groups, emails, contacts, other\n * teams…) using the same sharee autocompletion endpoint as file sharing.\n * This restores the legacy \"add members while creating a team\" feature for\n * the team creation wizard.\n *\n * @param term - The search query. An empty term returns curated recommendations.\n */\nexport async function searchMemberCandidates(term: string): Promise {\n\tconst suggestions: RawSuggestion[] = term.trim()\n\t\t? await getSuggestions(term)\n\t\t: await getRecommendations()\n\n\treturn suggestions.map((suggestion) => ({\n\t\tkey: suggestion.id,\n\t\tshareWith: suggestion.shareWith,\n\t\tshareType: suggestion.shareType,\n\t\tdisplayName: suggestion.label,\n\t\tisUser: suggestion.user !== null && suggestion.user !== undefined,\n\t}))\n}\n\n/**\n * Add a batch of picked candidates as members of a team, typically right\n * after creating it from the wizard.\n *\n * @param teamId - The team single id\n * @param candidates - The candidates picked in the wizard's member step\n * @return The number of candidates that were actually added.\n */\nexport async function addTeamMembers(teamId: string, candidates: MemberCandidate[]): Promise {\n\tconst members = candidates.map((candidate) => ({\n\t\tid: candidate.shareWith,\n\t\ttype: shareTypeToMemberType[candidate.shareType],\n\t}))\n\tconst res = await axios.post>>(\n\t\tgenerateOcsUrl('apps/circles/circles/{circleId}/members/multi', { circleId: teamId }),\n\t\t{ members },\n\t\t{ headers: HEADERS },\n\t)\n\treturn Object.keys(res.data.ocs.data ?? {}).length\n}\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Member, MemberCandidate, Team } from './types.ts'\n\nimport { defineStore } from 'pinia'\nimport { logger } from '../logger.ts'\nimport * as api from './api.ts'\n\ninterface TeamsState {\n\t/** All teams the current user is part of. */\n\tteams: Team[]\n\t/** Whether the teams list is currently loading. */\n\tloading: boolean\n\t/** Whether the last teams load failed. */\n\tloadError: boolean\n\t/** Whether the \"create a new team\" wizard is open (shared across the app). */\n\tcreateWizardOpen: boolean\n}\n\n/**\n * Store backing the app. Teams are fetched from the circles API; mutations\n * (create/leave/delete) hit the API and then reload the list so the UI stays\n * in sync with the backend.\n */\nexport const useTeamsStore = defineStore('teams', {\n\tstate: (): TeamsState => ({\n\t\tteams: [],\n\t\tloading: false,\n\t\tloadError: false,\n\t\tcreateWizardOpen: false,\n\t}),\n\n\tgetters: {\n\t\t// Find a single team by id.\n\t\tgetTeam: (state) => (id: string): Team | undefined => state.teams.find((team) => team.id === id),\n\n\t\t// Filter teams by a free-text query against their display name.\n\t\tsearchTeams: (state) => (query: string): Team[] => {\n\t\t\tconst needle = query.trim().toLowerCase()\n\t\t\tif (!needle) {\n\t\t\t\treturn state.teams\n\t\t\t}\n\t\t\treturn state.teams.filter((team) => team.displayName.toLowerCase().includes(needle))\n\t\t},\n\t},\n\n\tactions: {\n\t\t/** Open the \"create a new team\" wizard. */\n\t\topenCreateTeamWizard(): void {\n\t\t\tthis.createWizardOpen = true\n\t\t},\n\n\t\t/** Load (or reload) the list of teams from the backend. */\n\t\tasync loadTeams(): Promise {\n\t\t\tthis.loading = true\n\t\t\tthis.loadError = false\n\t\t\ttry {\n\t\t\t\tthis.teams = await api.fetchTeams()\n\t\t\t} catch (error) {\n\t\t\t\tthis.loadError = true\n\t\t\t\tlogger.error('Failed to load teams', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Fetch the full member list (with roles) for a team.\n\t\t *\n\t\t * @param id - The team id\n\t\t */\n\t\tfetchTeamMembers(id: string): Promise {\n\t\t\treturn api.fetchTeamMembers(id)\n\t\t},\n\n\t\t/**\n\t\t * Create a team (optionally with a description), reload the list and\n\t\t * return it.\n\t\t *\n\t\t * @param displayName - The team name\n\t\t * @param description - An optional description\n\t\t */\n\t\tasync createTeam(displayName: string, description = ''): Promise {\n\t\t\tconst id = await api.createTeam(displayName.trim())\n\t\t\tconst trimmedDescription = description.trim()\n\t\t\tif (trimmedDescription) {\n\t\t\t\ttry {\n\t\t\t\t\tawait api.setTeamDescription(id, trimmedDescription)\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.warn('Failed to set team description', { error })\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait this.loadTeams()\n\t\t\treturn this.getTeam(id)\n\t\t},\n\n\t\t/**\n\t\t * Search for potential new members while creating a team (users,\n\t\t * groups, emails, contacts, other teams…).\n\t\t *\n\t\t * @param term - The search query\n\t\t */\n\t\tsearchMemberCandidates(term: string): Promise {\n\t\t\treturn api.searchMemberCandidates(term)\n\t\t},\n\n\t\t/**\n\t\t * Add initial members to a freshly created team.\n\t\t *\n\t\t * @param teamId - The team id\n\t\t * @param candidates - The candidates picked in the wizard's member step\n\t\t * @return The number of candidates that were actually added.\n\t\t */\n\t\taddTeamMembers(teamId: string, candidates: MemberCandidate[]): Promise {\n\t\t\treturn api.addTeamMembers(teamId, candidates)\n\t\t},\n\n\t\t/**\n\t\t * Leave a team and reload the list.\n\t\t *\n\t\t * @param id - The team id\n\t\t */\n\t\tasync leaveTeam(id: string): Promise {\n\t\t\tawait api.leaveTeam(id)\n\t\t\tawait this.loadTeams()\n\t\t},\n\n\t\t/**\n\t\t * Delete a team and reload the list.\n\t\t *\n\t\t * @param id - The team id\n\t\t */\n\t\tasync deleteTeam(id: string): Promise {\n\t\t\tawait api.deleteTeam(id)\n\t\t\tawait this.loadTeams()\n\t\t},\n\t},\n})\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Team } from '../types.ts'\n\nimport { showConfirmation, showError, showSuccess } from '@nextcloud/dialogs'\nimport { t } from '@nextcloud/l10n'\nimport { computed } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { logger } from '../../logger.ts'\nimport { useTeamsStore } from '../store.ts'\n\n/**\n * Team-level actions (manage/copy link/leave/delete) shared between the\n * sidebar navigation item's context menu and the dashboard's admin actions\n * menu.\n *\n * @param getTeam a getter returning the team the actions apply to (may be\n * undefined while it is still loading)\n */\nexport function useTeamActions(getTeam: () => Team | undefined) {\n\tconst router = useRouter()\n\tconst store = useTeamsStore()\n\n\tconst to = computed(() => ({ name: 'team', params: { teamId: getTeam()?.id } }))\n\tconst settingsTo = computed(() => ({ name: 'team-settings', params: { teamId: getTeam()?.id } }))\n\tconst isOwner = computed(() => getTeam()?.myRole === 'owner')\n\tconst canManage = computed(() => {\n\t\tconst team = getTeam()\n\t\treturn !!team && ['owner', 'admin', 'moderator'].includes(team.myRole)\n\t})\n\tconst canLeave = computed(() => !!getTeam() && !isOwner.value)\n\tconst canDelete = computed(() => isOwner.value)\n\n\t/** Open the team's Settings page. */\n\tasync function onManage(): Promise {\n\t\tawait router.push(settingsTo.value)\n\t}\n\n\t/** Copy a direct link to the team. */\n\tasync function onCopyLink(): Promise {\n\t\tconst href = window.location.origin + router.resolve(to.value).href\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(href)\n\t\t\tshowSuccess(t('circles', 'Link copied to the clipboard'))\n\t\t} catch (error) {\n\t\t\tlogger.error('Could not copy link', { error })\n\t\t\tshowError(t('circles', 'Could not copy link to the clipboard'))\n\t\t}\n\t}\n\n\t/** Leave the team after confirmation. */\n\tasync function onLeave(): Promise {\n\t\tconst team = getTeam()\n\t\tif (!team) {\n\t\t\treturn\n\t\t}\n\t\tconst confirmed = await showConfirmation({\n\t\t\tname: t('circles', 'Leave team'),\n\t\t\ttext: t('circles', 'Are you sure you want to leave {team}?', { team: team.displayName }),\n\t\t\tlabelConfirm: t('circles', 'Leave team'),\n\t\t\tlabelReject: t('circles', 'Cancel'),\n\t\t\tseverity: 'warning',\n\t\t})\n\t\tif (!confirmed) {\n\t\t\treturn\n\t\t}\n\t\ttry {\n\t\t\tawait store.leaveTeam(team.id)\n\t\t\tshowSuccess(t('circles', 'You left \"{name}\"', { name: team.displayName }))\n\t\t\tif (router.currentRoute.value.params.teamId === team.id) {\n\t\t\t\trouter.push({ name: 'home' })\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.error('Could not leave the team', { error })\n\t\t\tshowError(t('circles', 'Could not leave the team'))\n\t\t}\n\t}\n\n\t/** Delete the team after confirmation. */\n\tasync function onDelete(): Promise {\n\t\tconst team = getTeam()\n\t\tif (!team) {\n\t\t\treturn\n\t\t}\n\t\tconst confirmed = await showConfirmation({\n\t\t\tname: t('circles', 'Delete team'),\n\t\t\ttext: t('circles', 'Are you sure you want to delete {team}? This cannot be undone.', { team: team.displayName }),\n\t\t\tlabelConfirm: t('circles', 'Delete team'),\n\t\t\tlabelReject: t('circles', 'Cancel'),\n\t\t\tseverity: 'error',\n\t\t})\n\t\tif (!confirmed) {\n\t\t\treturn\n\t\t}\n\t\ttry {\n\t\t\tawait store.deleteTeam(team.id)\n\t\t\tshowSuccess(t('circles', 'Team deleted'))\n\t\t\tif (router.currentRoute.value.params.teamId === team.id) {\n\t\t\t\trouter.push({ name: 'home' })\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.error('Could not delete the team', { error })\n\t\t\tshowError(t('circles', 'Could not delete the team'))\n\t\t}\n\t}\n\n\treturn {\n\t\tto,\n\t\tsettingsTo,\n\t\tisOwner,\n\t\tcanManage,\n\t\tcanLeave,\n\t\tcanDelete,\n\t\tonManage,\n\t\tonCopyLink,\n\t\tonLeave,\n\t\tonDelete,\n\t}\n}\n","\n\n\n\n\n","\n\n\n\n\n","import '../assets/NcUserBubble-DFUmBxeb.css';\nimport { openBlock, createElementBlock, renderSlot, defineComponent, useModel, computed, warn, watch, createBlock, resolveDynamicComponent, withCtx, mergeProps, createVNode, normalizeStyle, createElementVNode, toDisplayString, createCommentVNode, mergeModels } from \"vue\";\nimport { RouterLink } from \"vue-router\";\nimport { N as NcAvatar } from \"./NcAvatar-DX-Nk9Es.mjs\";\nimport { N as NcPopover } from \"./NcPopover-CObDh89q.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main$1 = {};\nfunction _sfc_render(_ctx, _cache) {\n return openBlock(), createElementBlock(\"div\", null, [\n renderSlot(_ctx.$slots, \"trigger\")\n ]);\n}\nconst NcUserBubbleDiv = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render]]);\nconst _hoisted_1 = { class: \"user-bubble__name\" };\nconst _hoisted_2 = {\n key: 0,\n class: \"user-bubble__secondary\"\n};\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcUserBubble\",\n props: /* @__PURE__ */ mergeModels({\n avatarImage: { default: void 0 },\n user: { default: void 0 },\n displayName: { default: void 0 },\n showUserStatus: { type: Boolean },\n url: { default: void 0 },\n to: { default: void 0 },\n primary: { type: Boolean },\n size: { default: 20 },\n margin: { default: 2 }\n }, {\n \"open\": { type: Boolean },\n \"openModifiers\": {}\n }),\n emits: /* @__PURE__ */ mergeModels([\"click\"], [\"update:open\"]),\n setup(__props, { emit: __emit }) {\n const isOpen = useModel(__props, \"open\");\n const props = __props;\n const emit = __emit;\n const isAvatarUrl = computed(() => {\n if (!props.avatarImage) {\n return false;\n }\n try {\n const url = new URL(props.avatarImage);\n return !!url;\n } catch {\n return false;\n }\n });\n const isCustomAvatar = computed(() => !!props.avatarImage);\n const avatarStyle = computed(() => ({\n marginInlineStart: `${props.margin}px`\n }));\n const hasUrl = computed(() => {\n if (!props.url || props.url.trim() === \"\") {\n return false;\n }\n try {\n const url = new URL(props.url, props.url?.startsWith?.(\"/\") ? window.location.href : void 0);\n return !!url;\n } catch {\n warn(\"[NcUserBubble] Invalid URL passed\", { url: props.url });\n return false;\n }\n });\n const href = computed(() => hasUrl.value ? props.url : void 0);\n const contentComponent = computed(() => {\n if (hasUrl.value) {\n return \"a\";\n } else if (props.to) {\n return RouterLink;\n } else {\n return \"div\";\n }\n });\n const contentStyle = computed(() => ({\n height: `${props.size}px`,\n lineHeight: `${props.size}px`,\n borderRadius: `${props.size / 2}px`\n }));\n watch([() => props.displayName, () => props.user], () => {\n if (!props.displayName && !props.user) {\n warn(\"[NcUserBubble] At least `displayName` or `user` property should be set.\");\n }\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(resolveDynamicComponent(!!_ctx.$slots.default ? NcPopover : NcUserBubbleDiv), {\n shown: isOpen.value,\n \"onUpdate:shown\": _cache[1] || (_cache[1] = ($event) => isOpen.value = $event),\n class: \"user-bubble__wrapper\",\n trigger: \"hover focus\"\n }, {\n trigger: withCtx(({ attrs }) => [\n (openBlock(), createBlock(resolveDynamicComponent(contentComponent.value), mergeProps({\n class: [\"user-bubble__content\", { \"user-bubble__content--primary\": __props.primary }],\n style: contentStyle.value,\n to: __props.to,\n href: href.value\n }, attrs, {\n onClick: _cache[0] || (_cache[0] = ($event) => emit(\"click\", $event))\n }), {\n default: withCtx(() => [\n createVNode(NcAvatar, {\n url: isCustomAvatar.value && isAvatarUrl.value ? __props.avatarImage : void 0,\n iconClass: isCustomAvatar.value && !isAvatarUrl.value ? __props.avatarImage : void 0,\n user: __props.user,\n displayName: __props.displayName,\n size: __props.size - __props.margin * 2,\n style: normalizeStyle(avatarStyle.value),\n disableTooltip: \"\",\n disableMenu: \"\",\n hideStatus: !__props.showUserStatus,\n class: \"user-bubble__avatar\"\n }, null, 8, [\"url\", \"iconClass\", \"user\", \"displayName\", \"size\", \"style\", \"hideStatus\"]),\n createElementVNode(\"span\", _hoisted_1, toDisplayString(__props.displayName || __props.user), 1),\n !!_ctx.$slots.name ? (openBlock(), createElementBlock(\"span\", _hoisted_2, [\n renderSlot(_ctx.$slots, \"name\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true)\n ]),\n _: 3\n }, 16, [\"class\", \"style\", \"to\", \"href\"]))\n ]),\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ]),\n _: 3\n }, 40, [\"shown\"]);\n };\n }\n});\nconst NcUserBubble = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-9189d023\"]]);\nexport {\n NcUserBubble as N\n};\n//# sourceMappingURL=NcUserBubble-BXBgGflZ.mjs.map\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","export function getDevtoolsGlobalHook() {\n return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;\n}\nexport function getTarget() {\n // @ts-expect-error navigator and windows are not available in all environments\n return (typeof navigator !== 'undefined' && typeof window !== 'undefined')\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : {};\n}\nexport const isProxyAvailable = typeof Proxy === 'function';\n","export const HOOK_SETUP = 'devtools-plugin:setup';\nexport const HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set';\n","let supported;\nlet perf;\nexport function isPerformanceSupported() {\n var _a;\n if (supported !== undefined) {\n return supported;\n }\n if (typeof window !== 'undefined' && window.performance) {\n supported = true;\n perf = window.performance;\n }\n else if (typeof globalThis !== 'undefined' && ((_a = globalThis.perf_hooks) === null || _a === void 0 ? void 0 : _a.performance)) {\n supported = true;\n perf = globalThis.perf_hooks.performance;\n }\n else {\n supported = false;\n }\n return supported;\n}\nexport function now() {\n return isPerformanceSupported() ? perf.now() : Date.now();\n}\n","import { HOOK_PLUGIN_SETTINGS_SET } from './const.js';\nimport { now } from './time.js';\nexport class ApiProxy {\n constructor(plugin, hook) {\n this.target = null;\n this.targetQueue = [];\n this.onQueue = [];\n this.plugin = plugin;\n this.hook = hook;\n const defaultSettings = {};\n if (plugin.settings) {\n for (const id in plugin.settings) {\n const item = plugin.settings[id];\n defaultSettings[id] = item.defaultValue;\n }\n }\n const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;\n let currentSettings = Object.assign({}, defaultSettings);\n try {\n const raw = localStorage.getItem(localSettingsSaveId);\n const data = JSON.parse(raw);\n Object.assign(currentSettings, data);\n }\n catch (e) {\n // noop\n }\n this.fallbacks = {\n getSettings() {\n return currentSettings;\n },\n setSettings(value) {\n try {\n localStorage.setItem(localSettingsSaveId, JSON.stringify(value));\n }\n catch (e) {\n // noop\n }\n currentSettings = value;\n },\n now() {\n return now();\n },\n };\n if (hook) {\n hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {\n if (pluginId === this.plugin.id) {\n this.fallbacks.setSettings(value);\n }\n });\n }\n this.proxiedOn = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target.on[prop];\n }\n else {\n return (...args) => {\n this.onQueue.push({\n method: prop,\n args,\n });\n };\n }\n },\n });\n this.proxiedTarget = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target[prop];\n }\n else if (prop === 'on') {\n return this.proxiedOn;\n }\n else if (Object.keys(this.fallbacks).includes(prop)) {\n return (...args) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve: () => { },\n });\n return this.fallbacks[prop](...args);\n };\n }\n else {\n return (...args) => {\n return new Promise((resolve) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve,\n });\n });\n };\n }\n },\n });\n }\n async setRealTarget(target) {\n this.target = target;\n for (const item of this.onQueue) {\n this.target.on[item.method](...item.args);\n }\n for (const item of this.targetQueue) {\n item.resolve(await this.target[item.method](...item.args));\n }\n }\n}\n","import { getDevtoolsGlobalHook, getTarget, isProxyAvailable } from './env.js';\nimport { HOOK_SETUP } from './const.js';\nimport { ApiProxy } from './proxy.js';\nexport * from './api/index.js';\nexport * from './plugin.js';\nexport * from './time.js';\nexport function setupDevtoolsPlugin(pluginDescriptor, setupFn) {\n const descriptor = pluginDescriptor;\n const target = getTarget();\n const hook = getDevtoolsGlobalHook();\n const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;\n if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {\n hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);\n }\n else {\n const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;\n const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];\n list.push({\n pluginDescriptor: descriptor,\n setupFn,\n proxy,\n });\n if (proxy) {\n setupFn(proxy.proxiedTarget);\n }\n }\n}\n","/*!\n * vuex v4.1.0\n * (c) 2022 Evan You\n * @license MIT\n */\nimport { inject, effectScope, reactive, watch, computed } from 'vue';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\nvar storeKey = 'store';\n\nfunction useStore (key) {\n if ( key === void 0 ) key = null;\n\n return inject(key !== null ? key : storeKey)\n}\n\n/**\n * Get the first item that pass the test\n * by second argument function\n *\n * @param {Array} list\n * @param {Function} f\n * @return {*}\n */\nfunction find (list, f) {\n return list.filter(f)[0]\n}\n\n/**\n * Deep copy the given object considering circular structure.\n * This function caches all nested objects and its copies.\n * If it detects circular structure, use cached copy to avoid infinite loop.\n *\n * @param {*} obj\n * @param {Array} cache\n * @return {*}\n */\nfunction deepCopy (obj, cache) {\n if ( cache === void 0 ) cache = [];\n\n // just return if obj is immutable value\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n // if obj is hit, it is in circular structure\n var hit = find(cache, function (c) { return c.original === obj; });\n if (hit) {\n return hit.copy\n }\n\n var copy = Array.isArray(obj) ? [] : {};\n // put the copy into cache at first\n // because we want to refer it in recursive deepCopy\n cache.push({\n original: obj,\n copy: copy\n });\n\n Object.keys(obj).forEach(function (key) {\n copy[key] = deepCopy(obj[key], cache);\n });\n\n return copy\n}\n\n/**\n * forEach for object\n */\nfunction forEachValue (obj, fn) {\n Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\n}\n\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\nfunction isPromise (val) {\n return val && typeof val.then === 'function'\n}\n\nfunction assert (condition, msg) {\n if (!condition) { throw new Error((\"[vuex] \" + msg)) }\n}\n\nfunction partial (fn, arg) {\n return function () {\n return fn(arg)\n }\n}\n\nfunction genericSubscribe (fn, subs, options) {\n if (subs.indexOf(fn) < 0) {\n options && options.prepend\n ? subs.unshift(fn)\n : subs.push(fn);\n }\n return function () {\n var i = subs.indexOf(fn);\n if (i > -1) {\n subs.splice(i, 1);\n }\n }\n}\n\nfunction resetStore (store, hot) {\n store._actions = Object.create(null);\n store._mutations = Object.create(null);\n store._wrappedGetters = Object.create(null);\n store._modulesNamespaceMap = Object.create(null);\n var state = store.state;\n // init all modules\n installModule(store, state, [], store._modules.root, true);\n // reset state\n resetStoreState(store, state, hot);\n}\n\nfunction resetStoreState (store, state, hot) {\n var oldState = store._state;\n var oldScope = store._scope;\n\n // bind store public getters\n store.getters = {};\n // reset local getters cache\n store._makeLocalGettersCache = Object.create(null);\n var wrappedGetters = store._wrappedGetters;\n var computedObj = {};\n var computedCache = {};\n\n // create a new effect scope and create computed object inside it to avoid\n // getters (computed) getting destroyed on component unmount.\n var scope = effectScope(true);\n\n scope.run(function () {\n forEachValue(wrappedGetters, function (fn, key) {\n // use computed to leverage its lazy-caching mechanism\n // direct inline function use will lead to closure preserving oldState.\n // using partial to return function with only arguments preserved in closure environment.\n computedObj[key] = partial(fn, store);\n computedCache[key] = computed(function () { return computedObj[key](); });\n Object.defineProperty(store.getters, key, {\n get: function () { return computedCache[key].value; },\n enumerable: true // for local getters\n });\n });\n });\n\n store._state = reactive({\n data: state\n });\n\n // register the newly created effect scope to the store so that we can\n // dispose the effects when this method runs again in the future.\n store._scope = scope;\n\n // enable strict mode for new state\n if (store.strict) {\n enableStrictMode(store);\n }\n\n if (oldState) {\n if (hot) {\n // dispatch changes in all subscribed watchers\n // to force getter re-evaluation for hot reloading.\n store._withCommit(function () {\n oldState.data = null;\n });\n }\n }\n\n // dispose previously registered effect scope if there is one.\n if (oldScope) {\n oldScope.stop();\n }\n}\n\nfunction installModule (store, rootState, path, module, hot) {\n var isRoot = !path.length;\n var namespace = store._modules.getNamespace(path);\n\n // register in namespace map\n if (module.namespaced) {\n if (store._modulesNamespaceMap[namespace] && (process.env.NODE_ENV !== 'production')) {\n console.error((\"[vuex] duplicate namespace \" + namespace + \" for the namespaced module \" + (path.join('/'))));\n }\n store._modulesNamespaceMap[namespace] = module;\n }\n\n // set state\n if (!isRoot && !hot) {\n var parentState = getNestedState(rootState, path.slice(0, -1));\n var moduleName = path[path.length - 1];\n store._withCommit(function () {\n if ((process.env.NODE_ENV !== 'production')) {\n if (moduleName in parentState) {\n console.warn(\n (\"[vuex] state field \\\"\" + moduleName + \"\\\" was overridden by a module with the same name at \\\"\" + (path.join('.')) + \"\\\"\")\n );\n }\n }\n parentState[moduleName] = module.state;\n });\n }\n\n var local = module.context = makeLocalContext(store, namespace, path);\n\n module.forEachMutation(function (mutation, key) {\n var namespacedType = namespace + key;\n registerMutation(store, namespacedType, mutation, local);\n });\n\n module.forEachAction(function (action, key) {\n var type = action.root ? key : namespace + key;\n var handler = action.handler || action;\n registerAction(store, type, handler, local);\n });\n\n module.forEachGetter(function (getter, key) {\n var namespacedType = namespace + key;\n registerGetter(store, namespacedType, getter, local);\n });\n\n module.forEachChild(function (child, key) {\n installModule(store, rootState, path.concat(key), child, hot);\n });\n}\n\n/**\n * make localized dispatch, commit, getters and state\n * if there is no namespace, just use root ones\n */\nfunction makeLocalContext (store, namespace, path) {\n var noNamespace = namespace === '';\n\n var local = {\n dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\n var args = unifyObjectStyle(_type, _payload, _options);\n var payload = args.payload;\n var options = args.options;\n var type = args.type;\n\n if (!options || !options.root) {\n type = namespace + type;\n if ((process.env.NODE_ENV !== 'production') && !store._actions[type]) {\n console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\n return\n }\n }\n\n return store.dispatch(type, payload)\n },\n\n commit: noNamespace ? store.commit : function (_type, _payload, _options) {\n var args = unifyObjectStyle(_type, _payload, _options);\n var payload = args.payload;\n var options = args.options;\n var type = args.type;\n\n if (!options || !options.root) {\n type = namespace + type;\n if ((process.env.NODE_ENV !== 'production') && !store._mutations[type]) {\n console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\n return\n }\n }\n\n store.commit(type, payload, options);\n }\n };\n\n // getters and state object must be gotten lazily\n // because they will be changed by state update\n Object.defineProperties(local, {\n getters: {\n get: noNamespace\n ? function () { return store.getters; }\n : function () { return makeLocalGetters(store, namespace); }\n },\n state: {\n get: function () { return getNestedState(store.state, path); }\n }\n });\n\n return local\n}\n\nfunction makeLocalGetters (store, namespace) {\n if (!store._makeLocalGettersCache[namespace]) {\n var gettersProxy = {};\n var splitPos = namespace.length;\n Object.keys(store.getters).forEach(function (type) {\n // skip if the target getter is not match this namespace\n if (type.slice(0, splitPos) !== namespace) { return }\n\n // extract local getter type\n var localType = type.slice(splitPos);\n\n // Add a port to the getters proxy.\n // Define as getter property because\n // we do not want to evaluate the getters in this time.\n Object.defineProperty(gettersProxy, localType, {\n get: function () { return store.getters[type]; },\n enumerable: true\n });\n });\n store._makeLocalGettersCache[namespace] = gettersProxy;\n }\n\n return store._makeLocalGettersCache[namespace]\n}\n\nfunction registerMutation (store, type, handler, local) {\n var entry = store._mutations[type] || (store._mutations[type] = []);\n entry.push(function wrappedMutationHandler (payload) {\n handler.call(store, local.state, payload);\n });\n}\n\nfunction registerAction (store, type, handler, local) {\n var entry = store._actions[type] || (store._actions[type] = []);\n entry.push(function wrappedActionHandler (payload) {\n var res = handler.call(store, {\n dispatch: local.dispatch,\n commit: local.commit,\n getters: local.getters,\n state: local.state,\n rootGetters: store.getters,\n rootState: store.state\n }, payload);\n if (!isPromise(res)) {\n res = Promise.resolve(res);\n }\n if (store._devtoolHook) {\n return res.catch(function (err) {\n store._devtoolHook.emit('vuex:error', err);\n throw err\n })\n } else {\n return res\n }\n });\n}\n\nfunction registerGetter (store, type, rawGetter, local) {\n if (store._wrappedGetters[type]) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.error((\"[vuex] duplicate getter key: \" + type));\n }\n return\n }\n store._wrappedGetters[type] = function wrappedGetter (store) {\n return rawGetter(\n local.state, // local state\n local.getters, // local getters\n store.state, // root state\n store.getters // root getters\n )\n };\n}\n\nfunction enableStrictMode (store) {\n watch(function () { return store._state.data; }, function () {\n if ((process.env.NODE_ENV !== 'production')) {\n assert(store._committing, \"do not mutate vuex store state outside mutation handlers.\");\n }\n }, { deep: true, flush: 'sync' });\n}\n\nfunction getNestedState (state, path) {\n return path.reduce(function (state, key) { return state[key]; }, state)\n}\n\nfunction unifyObjectStyle (type, payload, options) {\n if (isObject(type) && type.type) {\n options = payload;\n payload = type;\n type = type.type;\n }\n\n if ((process.env.NODE_ENV !== 'production')) {\n assert(typeof type === 'string', (\"expects string as the type, but found \" + (typeof type) + \".\"));\n }\n\n return { type: type, payload: payload, options: options }\n}\n\nvar LABEL_VUEX_BINDINGS = 'vuex bindings';\nvar MUTATIONS_LAYER_ID = 'vuex:mutations';\nvar ACTIONS_LAYER_ID = 'vuex:actions';\nvar INSPECTOR_ID = 'vuex';\n\nvar actionId = 0;\n\nfunction addDevtools (app, store) {\n setupDevtoolsPlugin(\n {\n id: 'org.vuejs.vuex',\n app: app,\n label: 'Vuex',\n homepage: 'https://next.vuex.vuejs.org/',\n logo: 'https://vuejs.org/images/icons/favicon-96x96.png',\n packageName: 'vuex',\n componentStateTypes: [LABEL_VUEX_BINDINGS]\n },\n function (api) {\n api.addTimelineLayer({\n id: MUTATIONS_LAYER_ID,\n label: 'Vuex Mutations',\n color: COLOR_LIME_500\n });\n\n api.addTimelineLayer({\n id: ACTIONS_LAYER_ID,\n label: 'Vuex Actions',\n color: COLOR_LIME_500\n });\n\n api.addInspector({\n id: INSPECTOR_ID,\n label: 'Vuex',\n icon: 'storage',\n treeFilterPlaceholder: 'Filter stores...'\n });\n\n api.on.getInspectorTree(function (payload) {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n if (payload.filter) {\n var nodes = [];\n flattenStoreForInspectorTree(nodes, store._modules.root, payload.filter, '');\n payload.rootNodes = nodes;\n } else {\n payload.rootNodes = [\n formatStoreForInspectorTree(store._modules.root, '')\n ];\n }\n }\n });\n\n api.on.getInspectorState(function (payload) {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n var modulePath = payload.nodeId;\n makeLocalGetters(store, modulePath);\n payload.state = formatStoreForInspectorState(\n getStoreModule(store._modules, modulePath),\n modulePath === 'root' ? store.getters : store._makeLocalGettersCache,\n modulePath\n );\n }\n });\n\n api.on.editInspectorState(function (payload) {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n var modulePath = payload.nodeId;\n var path = payload.path;\n if (modulePath !== 'root') {\n path = modulePath.split('/').filter(Boolean).concat( path);\n }\n store._withCommit(function () {\n payload.set(store._state.data, path, payload.state.value);\n });\n }\n });\n\n store.subscribe(function (mutation, state) {\n var data = {};\n\n if (mutation.payload) {\n data.payload = mutation.payload;\n }\n\n data.state = state;\n\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: Date.now(),\n title: mutation.type,\n data: data\n }\n });\n });\n\n store.subscribeAction({\n before: function (action, state) {\n var data = {};\n if (action.payload) {\n data.payload = action.payload;\n }\n action._id = actionId++;\n action._time = Date.now();\n data.state = state;\n\n api.addTimelineEvent({\n layerId: ACTIONS_LAYER_ID,\n event: {\n time: action._time,\n title: action.type,\n groupId: action._id,\n subtitle: 'start',\n data: data\n }\n });\n },\n after: function (action, state) {\n var data = {};\n var duration = Date.now() - action._time;\n data.duration = {\n _custom: {\n type: 'duration',\n display: (duration + \"ms\"),\n tooltip: 'Action duration',\n value: duration\n }\n };\n if (action.payload) {\n data.payload = action.payload;\n }\n data.state = state;\n\n api.addTimelineEvent({\n layerId: ACTIONS_LAYER_ID,\n event: {\n time: Date.now(),\n title: action.type,\n groupId: action._id,\n subtitle: 'end',\n data: data\n }\n });\n }\n });\n }\n );\n}\n\n// extracted from tailwind palette\nvar COLOR_LIME_500 = 0x84cc16;\nvar COLOR_DARK = 0x666666;\nvar COLOR_WHITE = 0xffffff;\n\nvar TAG_NAMESPACED = {\n label: 'namespaced',\n textColor: COLOR_WHITE,\n backgroundColor: COLOR_DARK\n};\n\n/**\n * @param {string} path\n */\nfunction extractNameFromPath (path) {\n return path && path !== 'root' ? path.split('/').slice(-2, -1)[0] : 'Root'\n}\n\n/**\n * @param {*} module\n * @return {import('@vue/devtools-api').CustomInspectorNode}\n */\nfunction formatStoreForInspectorTree (module, path) {\n return {\n id: path || 'root',\n // all modules end with a `/`, we want the last segment only\n // cart/ -> cart\n // nested/cart/ -> cart\n label: extractNameFromPath(path),\n tags: module.namespaced ? [TAG_NAMESPACED] : [],\n children: Object.keys(module._children).map(function (moduleName) { return formatStoreForInspectorTree(\n module._children[moduleName],\n path + moduleName + '/'\n ); }\n )\n }\n}\n\n/**\n * @param {import('@vue/devtools-api').CustomInspectorNode[]} result\n * @param {*} module\n * @param {string} filter\n * @param {string} path\n */\nfunction flattenStoreForInspectorTree (result, module, filter, path) {\n if (path.includes(filter)) {\n result.push({\n id: path || 'root',\n label: path.endsWith('/') ? path.slice(0, path.length - 1) : path || 'Root',\n tags: module.namespaced ? [TAG_NAMESPACED] : []\n });\n }\n Object.keys(module._children).forEach(function (moduleName) {\n flattenStoreForInspectorTree(result, module._children[moduleName], filter, path + moduleName + '/');\n });\n}\n\n/**\n * @param {*} module\n * @return {import('@vue/devtools-api').CustomInspectorState}\n */\nfunction formatStoreForInspectorState (module, getters, path) {\n getters = path === 'root' ? getters : getters[path];\n var gettersKeys = Object.keys(getters);\n var storeState = {\n state: Object.keys(module.state).map(function (key) { return ({\n key: key,\n editable: true,\n value: module.state[key]\n }); })\n };\n\n if (gettersKeys.length) {\n var tree = transformPathsToObjectTree(getters);\n storeState.getters = Object.keys(tree).map(function (key) { return ({\n key: key.endsWith('/') ? extractNameFromPath(key) : key,\n editable: false,\n value: canThrow(function () { return tree[key]; })\n }); });\n }\n\n return storeState\n}\n\nfunction transformPathsToObjectTree (getters) {\n var result = {};\n Object.keys(getters).forEach(function (key) {\n var path = key.split('/');\n if (path.length > 1) {\n var target = result;\n var leafKey = path.pop();\n path.forEach(function (p) {\n if (!target[p]) {\n target[p] = {\n _custom: {\n value: {},\n display: p,\n tooltip: 'Module',\n abstract: true\n }\n };\n }\n target = target[p]._custom.value;\n });\n target[leafKey] = canThrow(function () { return getters[key]; });\n } else {\n result[key] = canThrow(function () { return getters[key]; });\n }\n });\n return result\n}\n\nfunction getStoreModule (moduleMap, path) {\n var names = path.split('/').filter(function (n) { return n; });\n return names.reduce(\n function (module, moduleName, i) {\n var child = module[moduleName];\n if (!child) {\n throw new Error((\"Missing module \\\"\" + moduleName + \"\\\" for path \\\"\" + path + \"\\\".\"))\n }\n return i === names.length - 1 ? child : child._children\n },\n path === 'root' ? moduleMap : moduleMap.root._children\n )\n}\n\nfunction canThrow (cb) {\n try {\n return cb()\n } catch (e) {\n return e\n }\n}\n\n// Base data struct for store's module, package with some attribute and method\nvar Module = function Module (rawModule, runtime) {\n this.runtime = runtime;\n // Store some children item\n this._children = Object.create(null);\n // Store the origin module object which passed by programmer\n this._rawModule = rawModule;\n var rawState = rawModule.state;\n\n // Store the origin module's state\n this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\n};\n\nvar prototypeAccessors$1 = { namespaced: { configurable: true } };\n\nprototypeAccessors$1.namespaced.get = function () {\n return !!this._rawModule.namespaced\n};\n\nModule.prototype.addChild = function addChild (key, module) {\n this._children[key] = module;\n};\n\nModule.prototype.removeChild = function removeChild (key) {\n delete this._children[key];\n};\n\nModule.prototype.getChild = function getChild (key) {\n return this._children[key]\n};\n\nModule.prototype.hasChild = function hasChild (key) {\n return key in this._children\n};\n\nModule.prototype.update = function update (rawModule) {\n this._rawModule.namespaced = rawModule.namespaced;\n if (rawModule.actions) {\n this._rawModule.actions = rawModule.actions;\n }\n if (rawModule.mutations) {\n this._rawModule.mutations = rawModule.mutations;\n }\n if (rawModule.getters) {\n this._rawModule.getters = rawModule.getters;\n }\n};\n\nModule.prototype.forEachChild = function forEachChild (fn) {\n forEachValue(this._children, fn);\n};\n\nModule.prototype.forEachGetter = function forEachGetter (fn) {\n if (this._rawModule.getters) {\n forEachValue(this._rawModule.getters, fn);\n }\n};\n\nModule.prototype.forEachAction = function forEachAction (fn) {\n if (this._rawModule.actions) {\n forEachValue(this._rawModule.actions, fn);\n }\n};\n\nModule.prototype.forEachMutation = function forEachMutation (fn) {\n if (this._rawModule.mutations) {\n forEachValue(this._rawModule.mutations, fn);\n }\n};\n\nObject.defineProperties( Module.prototype, prototypeAccessors$1 );\n\nvar ModuleCollection = function ModuleCollection (rawRootModule) {\n // register root module (Vuex.Store options)\n this.register([], rawRootModule, false);\n};\n\nModuleCollection.prototype.get = function get (path) {\n return path.reduce(function (module, key) {\n return module.getChild(key)\n }, this.root)\n};\n\nModuleCollection.prototype.getNamespace = function getNamespace (path) {\n var module = this.root;\n return path.reduce(function (namespace, key) {\n module = module.getChild(key);\n return namespace + (module.namespaced ? key + '/' : '')\n }, '')\n};\n\nModuleCollection.prototype.update = function update$1 (rawRootModule) {\n update([], this.root, rawRootModule);\n};\n\nModuleCollection.prototype.register = function register (path, rawModule, runtime) {\n var this$1$1 = this;\n if ( runtime === void 0 ) runtime = true;\n\n if ((process.env.NODE_ENV !== 'production')) {\n assertRawModule(path, rawModule);\n }\n\n var newModule = new Module(rawModule, runtime);\n if (path.length === 0) {\n this.root = newModule;\n } else {\n var parent = this.get(path.slice(0, -1));\n parent.addChild(path[path.length - 1], newModule);\n }\n\n // register nested modules\n if (rawModule.modules) {\n forEachValue(rawModule.modules, function (rawChildModule, key) {\n this$1$1.register(path.concat(key), rawChildModule, runtime);\n });\n }\n};\n\nModuleCollection.prototype.unregister = function unregister (path) {\n var parent = this.get(path.slice(0, -1));\n var key = path[path.length - 1];\n var child = parent.getChild(key);\n\n if (!child) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.warn(\n \"[vuex] trying to unregister module '\" + key + \"', which is \" +\n \"not registered\"\n );\n }\n return\n }\n\n if (!child.runtime) {\n return\n }\n\n parent.removeChild(key);\n};\n\nModuleCollection.prototype.isRegistered = function isRegistered (path) {\n var parent = this.get(path.slice(0, -1));\n var key = path[path.length - 1];\n\n if (parent) {\n return parent.hasChild(key)\n }\n\n return false\n};\n\nfunction update (path, targetModule, newModule) {\n if ((process.env.NODE_ENV !== 'production')) {\n assertRawModule(path, newModule);\n }\n\n // update target module\n targetModule.update(newModule);\n\n // update nested modules\n if (newModule.modules) {\n for (var key in newModule.modules) {\n if (!targetModule.getChild(key)) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.warn(\n \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\n 'manual reload is needed'\n );\n }\n return\n }\n update(\n path.concat(key),\n targetModule.getChild(key),\n newModule.modules[key]\n );\n }\n }\n}\n\nvar functionAssert = {\n assert: function (value) { return typeof value === 'function'; },\n expected: 'function'\n};\n\nvar objectAssert = {\n assert: function (value) { return typeof value === 'function' ||\n (typeof value === 'object' && typeof value.handler === 'function'); },\n expected: 'function or object with \"handler\" function'\n};\n\nvar assertTypes = {\n getters: functionAssert,\n mutations: functionAssert,\n actions: objectAssert\n};\n\nfunction assertRawModule (path, rawModule) {\n Object.keys(assertTypes).forEach(function (key) {\n if (!rawModule[key]) { return }\n\n var assertOptions = assertTypes[key];\n\n forEachValue(rawModule[key], function (value, type) {\n assert(\n assertOptions.assert(value),\n makeAssertionMessage(path, key, type, value, assertOptions.expected)\n );\n });\n });\n}\n\nfunction makeAssertionMessage (path, key, type, value, expected) {\n var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\n if (path.length > 0) {\n buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\n }\n buf += \" is \" + (JSON.stringify(value)) + \".\";\n return buf\n}\n\nfunction createStore (options) {\n return new Store(options)\n}\n\nvar Store = function Store (options) {\n var this$1$1 = this;\n if ( options === void 0 ) options = {};\n\n if ((process.env.NODE_ENV !== 'production')) {\n assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\n assert(this instanceof Store, \"store must be called with the new operator.\");\n }\n\n var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\n var strict = options.strict; if ( strict === void 0 ) strict = false;\n var devtools = options.devtools;\n\n // store internal state\n this._committing = false;\n this._actions = Object.create(null);\n this._actionSubscribers = [];\n this._mutations = Object.create(null);\n this._wrappedGetters = Object.create(null);\n this._modules = new ModuleCollection(options);\n this._modulesNamespaceMap = Object.create(null);\n this._subscribers = [];\n this._makeLocalGettersCache = Object.create(null);\n\n // EffectScope instance. when registering new getters, we wrap them inside\n // EffectScope so that getters (computed) would not be destroyed on\n // component unmount.\n this._scope = null;\n\n this._devtools = devtools;\n\n // bind commit and dispatch to self\n var store = this;\n var ref = this;\n var dispatch = ref.dispatch;\n var commit = ref.commit;\n this.dispatch = function boundDispatch (type, payload) {\n return dispatch.call(store, type, payload)\n };\n this.commit = function boundCommit (type, payload, options) {\n return commit.call(store, type, payload, options)\n };\n\n // strict mode\n this.strict = strict;\n\n var state = this._modules.root.state;\n\n // init root module.\n // this also recursively registers all sub-modules\n // and collects all module getters inside this._wrappedGetters\n installModule(this, state, [], this._modules.root);\n\n // initialize the store state, which is responsible for the reactivity\n // (also registers _wrappedGetters as computed properties)\n resetStoreState(this, state);\n\n // apply plugins\n plugins.forEach(function (plugin) { return plugin(this$1$1); });\n};\n\nvar prototypeAccessors = { state: { configurable: true } };\n\nStore.prototype.install = function install (app, injectKey) {\n app.provide(injectKey || storeKey, this);\n app.config.globalProperties.$store = this;\n\n var useDevtools = this._devtools !== undefined\n ? this._devtools\n : (process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__;\n\n if (useDevtools) {\n addDevtools(app, this);\n }\n};\n\nprototypeAccessors.state.get = function () {\n return this._state.data\n};\n\nprototypeAccessors.state.set = function (v) {\n if ((process.env.NODE_ENV !== 'production')) {\n assert(false, \"use store.replaceState() to explicit replace store state.\");\n }\n};\n\nStore.prototype.commit = function commit (_type, _payload, _options) {\n var this$1$1 = this;\n\n // check object-style commit\n var ref = unifyObjectStyle(_type, _payload, _options);\n var type = ref.type;\n var payload = ref.payload;\n var options = ref.options;\n\n var mutation = { type: type, payload: payload };\n var entry = this._mutations[type];\n if (!entry) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.error((\"[vuex] unknown mutation type: \" + type));\n }\n return\n }\n this._withCommit(function () {\n entry.forEach(function commitIterator (handler) {\n handler(payload);\n });\n });\n\n this._subscribers\n .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe\n .forEach(function (sub) { return sub(mutation, this$1$1.state); });\n\n if (\n (process.env.NODE_ENV !== 'production') &&\n options && options.silent\n ) {\n console.warn(\n \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\n 'Use the filter functionality in the vue-devtools'\n );\n }\n};\n\nStore.prototype.dispatch = function dispatch (_type, _payload) {\n var this$1$1 = this;\n\n // check object-style dispatch\n var ref = unifyObjectStyle(_type, _payload);\n var type = ref.type;\n var payload = ref.payload;\n\n var action = { type: type, payload: payload };\n var entry = this._actions[type];\n if (!entry) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.error((\"[vuex] unknown action type: \" + type));\n }\n return\n }\n\n try {\n this._actionSubscribers\n .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe\n .filter(function (sub) { return sub.before; })\n .forEach(function (sub) { return sub.before(action, this$1$1.state); });\n } catch (e) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.warn(\"[vuex] error in before action subscribers: \");\n console.error(e);\n }\n }\n\n var result = entry.length > 1\n ? Promise.all(entry.map(function (handler) { return handler(payload); }))\n : entry[0](payload);\n\n return new Promise(function (resolve, reject) {\n result.then(function (res) {\n try {\n this$1$1._actionSubscribers\n .filter(function (sub) { return sub.after; })\n .forEach(function (sub) { return sub.after(action, this$1$1.state); });\n } catch (e) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.warn(\"[vuex] error in after action subscribers: \");\n console.error(e);\n }\n }\n resolve(res);\n }, function (error) {\n try {\n this$1$1._actionSubscribers\n .filter(function (sub) { return sub.error; })\n .forEach(function (sub) { return sub.error(action, this$1$1.state, error); });\n } catch (e) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.warn(\"[vuex] error in error action subscribers: \");\n console.error(e);\n }\n }\n reject(error);\n });\n })\n};\n\nStore.prototype.subscribe = function subscribe (fn, options) {\n return genericSubscribe(fn, this._subscribers, options)\n};\n\nStore.prototype.subscribeAction = function subscribeAction (fn, options) {\n var subs = typeof fn === 'function' ? { before: fn } : fn;\n return genericSubscribe(subs, this._actionSubscribers, options)\n};\n\nStore.prototype.watch = function watch$1 (getter, cb, options) {\n var this$1$1 = this;\n\n if ((process.env.NODE_ENV !== 'production')) {\n assert(typeof getter === 'function', \"store.watch only accepts a function.\");\n }\n return watch(function () { return getter(this$1$1.state, this$1$1.getters); }, cb, Object.assign({}, options))\n};\n\nStore.prototype.replaceState = function replaceState (state) {\n var this$1$1 = this;\n\n this._withCommit(function () {\n this$1$1._state.data = state;\n });\n};\n\nStore.prototype.registerModule = function registerModule (path, rawModule, options) {\n if ( options === void 0 ) options = {};\n\n if (typeof path === 'string') { path = [path]; }\n\n if ((process.env.NODE_ENV !== 'production')) {\n assert(Array.isArray(path), \"module path must be a string or an Array.\");\n assert(path.length > 0, 'cannot register the root module by using registerModule.');\n }\n\n this._modules.register(path, rawModule);\n installModule(this, this.state, path, this._modules.get(path), options.preserveState);\n // reset store to update getters...\n resetStoreState(this, this.state);\n};\n\nStore.prototype.unregisterModule = function unregisterModule (path) {\n var this$1$1 = this;\n\n if (typeof path === 'string') { path = [path]; }\n\n if ((process.env.NODE_ENV !== 'production')) {\n assert(Array.isArray(path), \"module path must be a string or an Array.\");\n }\n\n this._modules.unregister(path);\n this._withCommit(function () {\n var parentState = getNestedState(this$1$1.state, path.slice(0, -1));\n delete parentState[path[path.length - 1]];\n });\n resetStore(this);\n};\n\nStore.prototype.hasModule = function hasModule (path) {\n if (typeof path === 'string') { path = [path]; }\n\n if ((process.env.NODE_ENV !== 'production')) {\n assert(Array.isArray(path), \"module path must be a string or an Array.\");\n }\n\n return this._modules.isRegistered(path)\n};\n\nStore.prototype.hotUpdate = function hotUpdate (newOptions) {\n this._modules.update(newOptions);\n resetStore(this, true);\n};\n\nStore.prototype._withCommit = function _withCommit (fn) {\n var committing = this._committing;\n this._committing = true;\n fn();\n this._committing = committing;\n};\n\nObject.defineProperties( Store.prototype, prototypeAccessors );\n\n/**\n * Reduce the code which written in Vue.js for getting the state.\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.\n * @param {Object}\n */\nvar mapState = normalizeNamespace(function (namespace, states) {\n var res = {};\n if ((process.env.NODE_ENV !== 'production') && !isValidMap(states)) {\n console.error('[vuex] mapState: mapper parameter must be either an Array or an Object');\n }\n normalizeMap(states).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n res[key] = function mappedState () {\n var state = this.$store.state;\n var getters = this.$store.getters;\n if (namespace) {\n var module = getModuleByNamespace(this.$store, 'mapState', namespace);\n if (!module) {\n return\n }\n state = module.context.state;\n getters = module.context.getters;\n }\n return typeof val === 'function'\n ? val.call(this, state, getters)\n : state[val]\n };\n // mark vuex getter for devtools\n res[key].vuex = true;\n });\n return res\n});\n\n/**\n * Reduce the code which written in Vue.js for committing the mutation\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept another params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n * @return {Object}\n */\nvar mapMutations = normalizeNamespace(function (namespace, mutations) {\n var res = {};\n if ((process.env.NODE_ENV !== 'production') && !isValidMap(mutations)) {\n console.error('[vuex] mapMutations: mapper parameter must be either an Array or an Object');\n }\n normalizeMap(mutations).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n res[key] = function mappedMutation () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n // Get the commit method from store\n var commit = this.$store.commit;\n if (namespace) {\n var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\n if (!module) {\n return\n }\n commit = module.context.commit;\n }\n return typeof val === 'function'\n ? val.apply(this, [commit].concat(args))\n : commit.apply(this.$store, [val].concat(args))\n };\n });\n return res\n});\n\n/**\n * Reduce the code which written in Vue.js for getting the getters\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} getters\n * @return {Object}\n */\nvar mapGetters = normalizeNamespace(function (namespace, getters) {\n var res = {};\n if ((process.env.NODE_ENV !== 'production') && !isValidMap(getters)) {\n console.error('[vuex] mapGetters: mapper parameter must be either an Array or an Object');\n }\n normalizeMap(getters).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n // The namespace has been mutated by normalizeNamespace\n val = namespace + val;\n res[key] = function mappedGetter () {\n if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\n return\n }\n if ((process.env.NODE_ENV !== 'production') && !(val in this.$store.getters)) {\n console.error((\"[vuex] unknown getter: \" + val));\n return\n }\n return this.$store.getters[val]\n };\n // mark vuex getter for devtools\n res[key].vuex = true;\n });\n return res\n});\n\n/**\n * Reduce the code which written in Vue.js for dispatch the action\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n * @return {Object}\n */\nvar mapActions = normalizeNamespace(function (namespace, actions) {\n var res = {};\n if ((process.env.NODE_ENV !== 'production') && !isValidMap(actions)) {\n console.error('[vuex] mapActions: mapper parameter must be either an Array or an Object');\n }\n normalizeMap(actions).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n res[key] = function mappedAction () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n // get dispatch function from store\n var dispatch = this.$store.dispatch;\n if (namespace) {\n var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\n if (!module) {\n return\n }\n dispatch = module.context.dispatch;\n }\n return typeof val === 'function'\n ? val.apply(this, [dispatch].concat(args))\n : dispatch.apply(this.$store, [val].concat(args))\n };\n });\n return res\n});\n\n/**\n * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object\n * @param {String} namespace\n * @return {Object}\n */\nvar createNamespacedHelpers = function (namespace) { return ({\n mapState: mapState.bind(null, namespace),\n mapGetters: mapGetters.bind(null, namespace),\n mapMutations: mapMutations.bind(null, namespace),\n mapActions: mapActions.bind(null, namespace)\n}); };\n\n/**\n * Normalize the map\n * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]\n * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]\n * @param {Array|Object} map\n * @return {Object}\n */\nfunction normalizeMap (map) {\n if (!isValidMap(map)) {\n return []\n }\n return Array.isArray(map)\n ? map.map(function (key) { return ({ key: key, val: key }); })\n : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\n}\n\n/**\n * Validate whether given map is valid or not\n * @param {*} map\n * @return {Boolean}\n */\nfunction isValidMap (map) {\n return Array.isArray(map) || isObject(map)\n}\n\n/**\n * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.\n * @param {Function} fn\n * @return {Function}\n */\nfunction normalizeNamespace (fn) {\n return function (namespace, map) {\n if (typeof namespace !== 'string') {\n map = namespace;\n namespace = '';\n } else if (namespace.charAt(namespace.length - 1) !== '/') {\n namespace += '/';\n }\n return fn(namespace, map)\n }\n}\n\n/**\n * Search a special module from store by namespace. if module not exist, print error message.\n * @param {Object} store\n * @param {String} helper\n * @param {String} namespace\n * @return {Object}\n */\nfunction getModuleByNamespace (store, helper, namespace) {\n var module = store._modulesNamespaceMap[namespace];\n if ((process.env.NODE_ENV !== 'production') && !module) {\n console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\n }\n return module\n}\n\n// Credits: borrowed code from fcomb/redux-logger\n\nfunction createLogger (ref) {\n if ( ref === void 0 ) ref = {};\n var collapsed = ref.collapsed; if ( collapsed === void 0 ) collapsed = true;\n var filter = ref.filter; if ( filter === void 0 ) filter = function (mutation, stateBefore, stateAfter) { return true; };\n var transformer = ref.transformer; if ( transformer === void 0 ) transformer = function (state) { return state; };\n var mutationTransformer = ref.mutationTransformer; if ( mutationTransformer === void 0 ) mutationTransformer = function (mut) { return mut; };\n var actionFilter = ref.actionFilter; if ( actionFilter === void 0 ) actionFilter = function (action, state) { return true; };\n var actionTransformer = ref.actionTransformer; if ( actionTransformer === void 0 ) actionTransformer = function (act) { return act; };\n var logMutations = ref.logMutations; if ( logMutations === void 0 ) logMutations = true;\n var logActions = ref.logActions; if ( logActions === void 0 ) logActions = true;\n var logger = ref.logger; if ( logger === void 0 ) logger = console;\n\n return function (store) {\n var prevState = deepCopy(store.state);\n\n if (typeof logger === 'undefined') {\n return\n }\n\n if (logMutations) {\n store.subscribe(function (mutation, state) {\n var nextState = deepCopy(state);\n\n if (filter(mutation, prevState, nextState)) {\n var formattedTime = getFormattedTime();\n var formattedMutation = mutationTransformer(mutation);\n var message = \"mutation \" + (mutation.type) + formattedTime;\n\n startMessage(logger, message, collapsed);\n logger.log('%c prev state', 'color: #9E9E9E; font-weight: bold', transformer(prevState));\n logger.log('%c mutation', 'color: #03A9F4; font-weight: bold', formattedMutation);\n logger.log('%c next state', 'color: #4CAF50; font-weight: bold', transformer(nextState));\n endMessage(logger);\n }\n\n prevState = nextState;\n });\n }\n\n if (logActions) {\n store.subscribeAction(function (action, state) {\n if (actionFilter(action, state)) {\n var formattedTime = getFormattedTime();\n var formattedAction = actionTransformer(action);\n var message = \"action \" + (action.type) + formattedTime;\n\n startMessage(logger, message, collapsed);\n logger.log('%c action', 'color: #03A9F4; font-weight: bold', formattedAction);\n endMessage(logger);\n }\n });\n }\n }\n}\n\nfunction startMessage (logger, message, collapsed) {\n var startMessage = collapsed\n ? logger.groupCollapsed\n : logger.group;\n\n // render\n try {\n startMessage.call(logger, message);\n } catch (e) {\n logger.log(message);\n }\n}\n\nfunction endMessage (logger) {\n try {\n logger.groupEnd();\n } catch (e) {\n logger.log('—— log end ——');\n }\n}\n\nfunction getFormattedTime () {\n var time = new Date();\n return (\" @ \" + (pad(time.getHours(), 2)) + \":\" + (pad(time.getMinutes(), 2)) + \":\" + (pad(time.getSeconds(), 2)) + \".\" + (pad(time.getMilliseconds(), 3)))\n}\n\nfunction repeat (str, times) {\n return (new Array(times + 1)).join(str)\n}\n\nfunction pad (num, maxLength) {\n return repeat('0', maxLength - num.toString().length) + num\n}\n\nvar index = {\n version: '4.1.0',\n Store: Store,\n storeKey: storeKey,\n createStore: createStore,\n useStore: useStore,\n mapState: mapState,\n mapMutations: mapMutations,\n mapGetters: mapGetters,\n mapActions: mapActions,\n createNamespacedHelpers: createNamespacedHelpers,\n createLogger: createLogger\n};\n\nexport default index;\nexport { Store, createLogger, createNamespacedHelpers, createStore, mapActions, mapGetters, mapMutations, mapState, storeKey, useStore };\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","function encodePath(path) {\n if (!path) {\n return path;\n }\n return path.split(\"/\").map(encodeURIComponent).join(\"/\");\n}\nfunction basename(path) {\n return path.replace(/\\\\/g, \"/\").replace(/.*\\//, \"\");\n}\nfunction dirname(path) {\n return path.replace(/\\\\/g, \"/\").replace(/\\/[^\\/]*$/, \"\");\n}\nfunction joinPaths(...args) {\n if (arguments.length < 1) {\n return \"\";\n }\n const nonEmptyArgs = args.filter((arg) => arg.length > 0);\n if (nonEmptyArgs.length < 1) {\n return \"\";\n }\n const lastArg = nonEmptyArgs[nonEmptyArgs.length - 1];\n const leadingSlash = nonEmptyArgs[0].charAt(0) === \"/\";\n const trailingSlash = lastArg.charAt(lastArg.length - 1) === \"/\";\n const sections = nonEmptyArgs.reduce((acc, section) => acc.concat(section.split(\"/\")), []);\n let first = !leadingSlash;\n const path = sections.reduce((acc, section) => {\n if (section === \"\") {\n return acc;\n }\n if (first) {\n first = false;\n return acc + section;\n }\n return acc + \"/\" + section;\n }, \"\");\n if (trailingSlash) {\n return path + \"/\";\n }\n return path;\n}\nfunction isSamePath(path1, path2) {\n const pathSections1 = (path1 || \"\").split(\"/\").filter((p) => p !== \".\");\n const pathSections2 = (path2 || \"\").split(\"/\").filter((p) => p !== \".\");\n path1 = joinPaths.apply(void 0, pathSections1);\n path2 = joinPaths.apply(void 0, pathSections2);\n return path1 === path2;\n}\nexport {\n basename,\n dirname,\n encodePath,\n isSamePath,\n joinPaths\n};\n","import '../assets/NcActionButtonGroup-Bt8kRk79.css';\nimport { defineComponent, openBlock, createElementBlock, toDisplayString, createCommentVNode, createElementVNode, renderSlot } from \"vue\";\nimport { r as register, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as NC_ACTIONS_IS_SEMANTIC_MENU } from \"./useNcActions-BzPO2c4h.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister();\nconst _sfc_main = defineComponent({\n name: \"NcActionButtonGroup\",\n inject: {\n isInSemanticMenu: {\n from: NC_ACTIONS_IS_SEMANTIC_MENU,\n default: false\n }\n },\n props: {\n /**\n * Optional text shown below the button group\n */\n name: {\n required: false,\n default: void 0,\n type: String\n }\n },\n setup() {\n return {\n labelId: createElementId()\n };\n },\n methods: {\n t\n }\n});\nconst _hoisted_1 = [\"role\"];\nconst _hoisted_2 = [\"id\"];\nconst _hoisted_3 = [\"aria-labelledby\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"li\", {\n class: \"nc-button-group-base\",\n role: _ctx.isInSemanticMenu && \"presentation\"\n }, [\n _ctx.name ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n id: _ctx.labelId\n }, toDisplayString(_ctx.name), 9, _hoisted_2)) : createCommentVNode(\"\", true),\n createElementVNode(\"ul\", {\n class: \"nc-button-group-content\",\n role: \"group\",\n \"aria-labelledby\": _ctx.name ? _ctx.labelId : void 0\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 8, _hoisted_3)\n ], 8, _hoisted_1);\n}\nconst NcActionButtonGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-6a2b8de0\"]]);\nexport {\n NcActionButtonGroup as N\n};\n//# sourceMappingURL=NcActionButtonGroup-B9LfyE-G.mjs.map\n","import '../assets/NcActionSeparator-Ct2RnclR.css';\nimport { openBlock, createElementBlock } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcActionSeparator\"\n};\nconst _hoisted_1 = {\n class: \"action action-separator action--disabled\",\n role: \"separator\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"li\", _hoisted_1);\n}\nconst NcActionSeparator = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-3e2324b7\"]]);\nexport {\n NcActionSeparator as N\n};\n//# sourceMappingURL=NcActionSeparator-B9pNQaji.mjs.map\n","import '../assets/NcAppNavigationCaption-ggcWspH2.css';\nimport { N as NcActions } from \"./NcActions-DY4GGONi.mjs\";\nimport { resolveComponent, openBlock, createBlock, resolveDynamicComponent, normalizeClass, withCtx, createTextVNode, toDisplayString, createElementBlock, createVNode, normalizeProps, guardReactiveProps, renderSlot, createCommentVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcAppNavigationCaption\",\n components: {\n NcActions\n },\n props: {\n /**\n * The text of the caption\n */\n name: {\n type: String,\n required: true\n },\n /**\n * `id` to set on the inner caption\n * Can be used for connecting the `NcActionCaption` with `NcActionList` using `aria-labelledby`.\n */\n headingId: {\n type: String,\n default: null\n },\n /**\n * Enable when used as a heading\n * e.g. Before NcAppNavigationList\n */\n isHeading: {\n type: Boolean,\n default: false\n },\n /**\n * If `isHeading` is set, this defines the heading level that should be used\n */\n headingLevel: {\n type: Number,\n default: 2\n },\n /**\n * Any [NcActions](#/Components/NcActions?id=ncactions-1) prop\n */\n // Not an actual prop but needed to show in vue-styleguidist docs\n ...NcActions.props\n },\n computed: {\n actionsProps() {\n const actionProps = Object.keys(NcActions.props);\n const props = Object.entries(this.$props).filter(([key, _value]) => actionProps.includes(key));\n return Object.fromEntries(props);\n },\n wrapperTag() {\n return this.isHeading ? \"div\" : \"li\";\n },\n captionTag() {\n const headingLevel = Math.max(2, this.headingLevel);\n return this.isHeading ? `h${headingLevel}` : \"span\";\n }\n }\n};\nconst _hoisted_1 = {\n key: 0,\n class: \"app-navigation-caption__actions\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcActions = resolveComponent(\"NcActions\");\n return openBlock(), createBlock(resolveDynamicComponent($options.wrapperTag), {\n class: normalizeClass([\"app-navigation-caption\", { \"app-navigation-caption--heading\": $props.isHeading }])\n }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent($options.captionTag), {\n id: $props.headingId,\n class: \"app-navigation-caption__name\"\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString($props.name), 1)\n ]),\n _: 1\n }, 8, [\"id\"])),\n !!_ctx.$slots.actions ? (openBlock(), createElementBlock(\"div\", _hoisted_1, [\n createVNode(_component_NcActions, normalizeProps(guardReactiveProps($options.actionsProps)), {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"actionsTriggerIcon\", {}, void 0, true)\n ]),\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"actions\", {}, void 0, true)\n ]),\n _: 3\n }, 16)\n ])) : createCommentVNode(\"\", true)\n ]),\n _: 3\n }, 8, [\"class\"]);\n}\nconst NcAppNavigationCaption = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-f0e411c2\"]]);\nexport {\n NcAppNavigationCaption as N\n};\n//# sourceMappingURL=NcAppNavigationCaption-BptTnvQU.mjs.map\n","import '../assets/NcAppNavigationSettings-B4ZZe32B.css';\nimport { defineComponent, ref, useTemplateRef, computed, openBlock, createElementBlock, normalizeClass, createElementVNode, createVNode, unref, withCtx, createTextVNode, toDisplayString, Transition, withDirectives, renderSlot, vShow } from \"vue\";\nimport { C as mdiCog, D as mdiCogOutline } from \"./mdi-CpchYUUV.mjs\";\nimport { onClickOutside } from \"@vueuse/core\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { r as register, B as t47, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as isLegacy } from \"./legacy-BoqDmOCa.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t47);\nconst _hoisted_1 = [\"id\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppNavigationSettings\",\n props: {\n excludeClickOutsideSelectors: { default: () => [] },\n name: { default: () => t(\"Settings\") }\n },\n setup(__props) {\n const contentId = createElementId();\n const open = ref(false);\n const container2 = useTemplateRef(\"wrapperElement\");\n const ignore = computed(() => Array.isArray(__props.excludeClickOutsideSelectors) ? __props.excludeClickOutsideSelectors : __props.excludeClickOutsideSelectors.split(\" \"));\n onClickOutside(container2, () => {\n open.value = false;\n }, { ignore });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref: \"wrapperElement\",\n class: normalizeClass(_ctx.$style.container)\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.$style.header)\n }, [\n createVNode(NcButton, {\n \"aria-controls\": unref(contentId),\n \"aria-expanded\": open.value ? \"true\" : \"false\",\n class: normalizeClass(_ctx.$style.button),\n alignment: \"start\",\n variant: \"tertiary\",\n wide: \"\",\n onClick: _cache[0] || (_cache[0] = ($event) => open.value = !open.value)\n }, {\n icon: withCtx(() => [\n createVNode(NcIconSvgWrapper, {\n path: unref(isLegacy) ? unref(mdiCog) : unref(mdiCogOutline)\n }, null, 8, [\"path\"])\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(__props.name), 1)\n ]),\n _: 1\n }, 8, [\"aria-controls\", \"aria-expanded\", \"class\"])\n ], 2),\n createVNode(Transition, {\n enterActiveClass: _ctx.$style.animationActive,\n leaveActiveClass: _ctx.$style.animationActive,\n enterFromClass: _ctx.$style.animationStop,\n leaveToClass: _ctx.$style.animationStop\n }, {\n default: withCtx(() => [\n withDirectives(createElementVNode(\"div\", {\n id: unref(contentId),\n class: normalizeClass(_ctx.$style.content)\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 10, _hoisted_1), [\n [vShow, open.value]\n ])\n ]),\n _: 3\n }, 8, [\"enterActiveClass\", \"leaveActiveClass\", \"enterFromClass\", \"leaveToClass\"])\n ], 2);\n };\n }\n});\nconst container = \"_container_F8eZN\";\nconst header = \"_header_6cJQC\";\nconst button = \"_button_WIBAi\";\nconst content = \"_content_n4gdW\";\nconst animationActive = \"_animationActive_Qy1KZ\";\nconst animationStop = \"_animationStop_xLHlm\";\nconst style0 = {\n container,\n header,\n button,\n content,\n animationActive,\n animationStop\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcAppNavigationSettings = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcAppNavigationSettings as N\n};\n//# sourceMappingURL=NcAppNavigationSettings-1BzAhIDg.mjs.map\n","import '../assets/NcAppSettingsDialog-BPOsEn6K.css';\nimport { defineComponent, inject, openBlock, createElementBlock, normalizeClass, unref, toDisplayString, useModel, provide, toRef, useTemplateRef, ref, computed, onBeforeUnmount, warn, createBlock, createSlots, withCtx, createElementVNode, renderSlot, createCommentVNode, Fragment, renderList, withKeys, withModifiers, mergeModels } from \"vue\";\nimport debounce from \"debounce\";\nimport { N as NcDialog } from \"./NcDialog-D1u-qo74.mjs\";\nimport { _ as _sfc_main$2 } from \"./NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs\";\nimport { u as useLocalizedAppName, A as APP_VERSION } from \"./appName-DyNMVZpX.mjs\";\nimport { A as APP_SETTINGS_LEGACY_DESIGN_KEY, a as APP_SETTINGS_REGISTRATION_KEY } from \"./useAppSettingsDialog-C73Wx6iQ.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { useIsMobile } from \"../composables/useIsMobile/index.mjs\";\nimport { r as register, I as t48, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSettingsDialogVersion\",\n setup(__props) {\n const legacy = inject(APP_SETTINGS_LEGACY_DESIGN_KEY);\n const localizedAppName = useLocalizedAppName();\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([_ctx.$style.appSettingsDialogVersion, { [_ctx.$style.appSettingsDialogVersion__legacy]: unref(legacy) }])\n }, toDisplayString(unref(localizedAppName)) + \" \" + toDisplayString(unref(APP_VERSION)), 3);\n };\n }\n});\nconst appSettingsDialogVersion = \"_appSettingsDialogVersion_cjsRO\";\nconst appSettingsDialogVersion__legacy = \"_appSettingsDialogVersion__legacy_FaQVZ\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_p1TBV\",\n appSettingsDialogVersion,\n appSettingsDialogVersion__legacy\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcAppSettingsDialogVersion = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"__cssModules\", cssModules]]);\nregister(t48);\nconst _hoisted_1 = {\n key: 0,\n class: \"app-settings__title\"\n};\nconst _hoisted_2 = {\n key: 1,\n class: \"navigation-list\"\n};\nconst _hoisted_3 = [\"aria-current\", \"href\", \"onClick\", \"onKeydown\"];\nconst _hoisted_4 = {\n key: 0,\n class: \"navigation-list__link-icon\"\n};\nconst _hoisted_5 = { class: \"navigation-list__link-text\" };\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSettingsDialog\",\n props: /* @__PURE__ */ mergeModels({\n showNavigation: { type: Boolean },\n container: { default: \"body\" },\n name: { default: \"\" },\n additionalTrapElements: { default: () => [] },\n legacy: { type: Boolean, default: false },\n noVersion: { type: Boolean, default: false }\n }, {\n \"open\": { type: Boolean, ...{ required: true } },\n \"openModifiers\": {}\n }),\n emits: [\"update:open\"],\n setup(__props) {\n const open = useModel(__props, \"open\");\n const props = __props;\n provide(APP_SETTINGS_REGISTRATION_KEY, {\n registerSection,\n unregisterSection\n });\n provide(APP_SETTINGS_LEGACY_DESIGN_KEY, toRef(() => props.legacy));\n const settingsScrollerElement = useTemplateRef(\"settingsScroller\");\n const isMobile = useIsMobile();\n const selectedSection = ref(\"\");\n const linkClicked = ref(false);\n const registeredSections = ref([]);\n const hasNavigation = computed(() => !isMobile.value && props.showNavigation);\n const hasNavigationIcons = computed(() => registeredSections.value.some(({ icon }) => !!icon));\n const unfocusNavigationItem = debounce(() => {\n selectedSection.value = \"\";\n if (document.activeElement?.className.includes(\"navigation-list__link\")) {\n document.activeElement.blur();\n }\n }, 300);\n const sectionsOrderMap = /* @__PURE__ */ new Map();\n onBeforeUnmount(() => {\n sectionsOrderMap.clear();\n });\n function handleSettingsNavigationClick(item) {\n linkClicked.value = true;\n document.getElementById(\"settings-section_\" + item).scrollIntoView({\n behavior: \"smooth\",\n inline: \"nearest\"\n });\n selectedSection.value = item;\n setTimeout(() => {\n linkClicked.value = false;\n }, 1e3);\n }\n function handleCloseModal(isOpen) {\n if (isOpen) {\n return;\n }\n open.value = false;\n settingsScrollerElement.value.scrollTop = 0;\n }\n function handleScroll() {\n if (open.value && !linkClicked.value) {\n unfocusNavigationItem();\n }\n }\n function registerSection(id, name, order, icon) {\n if (registeredSections.value.some(({ id: otherId }) => id === otherId)) {\n throw new Error(`Duplicate section id found: ${id}. Settings navigation sections must have unique section ids.`);\n }\n if (registeredSections.value.some(({ name: otherName }) => name === otherName)) {\n warn(`Duplicate section name found: ${name}. Settings navigation sections must have unique section names.`);\n }\n if (order !== void 0) {\n sectionsOrderMap.set(id, order);\n } else if (sectionsOrderMap.has(id)) {\n order = sectionsOrderMap.get(id);\n } else {\n order = Math.max(0, ...sectionsOrderMap.values()) + 1;\n sectionsOrderMap.set(id, order);\n }\n registeredSections.value = [...registeredSections.value, { id, name, order, icon }].sort(({ order: orderA }, { order: orderB }) => {\n return orderA - orderB;\n });\n if (registeredSections.value.length === 1) {\n selectedSection.value = id;\n }\n }\n function unregisterSection(id) {\n registeredSections.value = registeredSections.value.filter(({ id: otherId }) => id !== otherId);\n if (selectedSection.value === id) {\n selectedSection.value = registeredSections.value[0]?.id ?? \"\";\n }\n }\n return (_ctx, _cache) => {\n return open.value ? (openBlock(), createBlock(NcDialog, {\n key: 0,\n class: normalizeClass([\"app-settings\", { \"app-settings--legacy\": unref(isLegacy34) }]),\n contentClasses: \"app-settings__content\",\n navigationClasses: \"app-settings__navigation\",\n additionalTrapElements: __props.additionalTrapElements,\n container: __props.container,\n closeOnClickOutside: \"\",\n \"navigation-aria-label\": unref(t)(\"Settings navigation\"),\n size: \"large\",\n name: __props.name,\n \"onUpdate:open\": handleCloseModal\n }, createSlots({\n default: withCtx(() => [\n createElementVNode(\"div\", {\n ref: \"settingsScroller\",\n onScroll: handleScroll\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true),\n !__props.noVersion ? (openBlock(), createBlock(NcAppSettingsDialogVersion, { key: 0 })) : createCommentVNode(\"\", true)\n ], 544)\n ]),\n _: 2\n }, [\n hasNavigation.value ? {\n name: \"navigation\",\n fn: withCtx(({ isCollapsed }) => [\n !unref(isLegacy34) ? (openBlock(), createElementBlock(\"div\", _hoisted_1, toDisplayString(__props.name), 1)) : createCommentVNode(\"\", true),\n !isCollapsed ? (openBlock(), createElementBlock(\"ul\", _hoisted_2, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(registeredSections.value, (section) => {\n return openBlock(), createElementBlock(\"li\", {\n key: section.id\n }, [\n createElementVNode(\"a\", {\n \"aria-current\": `${section.id === selectedSection.value}`,\n class: normalizeClass([\"navigation-list__link\", {\n \"navigation-list__link--active\": section.id === selectedSection.value,\n \"navigation-list__link--icon\": hasNavigationIcons.value\n }]),\n href: `#settings-section_${section.id}`,\n tabindex: \"0\",\n onClick: withModifiers(($event) => handleSettingsNavigationClick(section.id), [\"prevent\"]),\n onKeydown: withKeys(($event) => handleSettingsNavigationClick(section.id), [\"enter\"])\n }, [\n hasNavigationIcons.value ? (openBlock(), createElementBlock(\"div\", _hoisted_4, [\n section.icon ? (openBlock(), createBlock(_sfc_main$2, {\n key: 0,\n vnodes: section.icon\n }, null, 8, [\"vnodes\"])) : createCommentVNode(\"\", true)\n ])) : createCommentVNode(\"\", true),\n createElementVNode(\"span\", _hoisted_5, toDisplayString(section.name), 1)\n ], 42, _hoisted_3)\n ]);\n }), 128))\n ])) : createCommentVNode(\"\", true)\n ]),\n key: \"0\"\n } : void 0\n ]), 1032, [\"class\", \"additionalTrapElements\", \"container\", \"navigation-aria-label\", \"name\"])) : createCommentVNode(\"\", true);\n };\n }\n});\nconst NcAppSettingsDialog = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-e669a5ef\"]]);\nexport {\n NcAppSettingsDialog as N\n};\n//# sourceMappingURL=NcAppSettingsDialog-BgZCuMK0.mjs.map\n","import '../assets/NcAppSettingsShortcutsSection-ABRbmy1I.css';\nimport { defineComponent, openBlock, createBlock, unref, withCtx, createElementVNode, normalizeClass, renderSlot } from \"vue\";\nimport { N as NcAppSettingsSection } from \"./NcAppSettingsSection-BosSmisT.mjs\";\nimport { r as register, p as t31, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t31);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSettingsShortcutsSection\",\n setup(__props) {\n return (_ctx, _cache) => {\n return openBlock(), createBlock(NcAppSettingsSection, {\n id: \"keyboard-shortcuts\",\n name: unref(t)(\"Keyboard shortcuts\")\n }, {\n default: withCtx(() => [\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.$style.appSettingsSectionShortcuts)\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 2)\n ]),\n _: 3\n }, 8, [\"name\"]);\n };\n }\n});\nconst appSettingsSectionShortcuts = \"_appSettingsSectionShortcuts_5DFzJ\";\nconst style0 = {\n appSettingsSectionShortcuts\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcAppSettingsShortcutsSection = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcAppSettingsShortcutsSection as N\n};\n//# sourceMappingURL=NcAppSettingsShortcutsSection-og6gyYxr.mjs.map\n","// THIS FILE IS AUTOMATICALLY GENERATED DO NOT EDIT DIRECTLY\n// See update-tlds.js for encoding/decoding format\n// https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst encodedTlds = 'aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2';\n// Internationalized domain names containing non-ASCII\nconst encodedUtlds = 'ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2';\n\n/**\n * Finite State Machine generation utilities\n */\n\n/**\n * @template T\n * @typedef {{ [group: string]: T[] }} Collections\n */\n\n/**\n * @typedef {{ [group: string]: true }} Flags\n */\n\n// Keys in scanner Collections instances\nconst numeric = 'numeric';\nconst ascii = 'ascii';\nconst alpha = 'alpha';\nconst asciinumeric = 'asciinumeric';\nconst alphanumeric = 'alphanumeric';\nconst domain = 'domain';\nconst emoji = 'emoji';\nconst scheme = 'scheme';\nconst slashscheme = 'slashscheme';\nconst whitespace = 'whitespace';\n\n/**\n * @template T\n * @param {string} name\n * @param {Collections} groups to register in\n * @returns {T[]} Current list of tokens in the given collection\n */\nfunction registerGroup(name, groups) {\n if (!(name in groups)) {\n groups[name] = [];\n }\n return groups[name];\n}\n\n/**\n * @template T\n * @param {T} t token to add\n * @param {Collections} groups\n * @param {Flags} flags\n */\nfunction addToGroups(t, flags, groups) {\n if (flags[numeric]) {\n flags[asciinumeric] = true;\n flags[alphanumeric] = true;\n }\n if (flags[ascii]) {\n flags[asciinumeric] = true;\n flags[alpha] = true;\n }\n if (flags[asciinumeric]) {\n flags[alphanumeric] = true;\n }\n if (flags[alpha]) {\n flags[alphanumeric] = true;\n }\n if (flags[alphanumeric]) {\n flags[domain] = true;\n }\n if (flags[emoji]) {\n flags[domain] = true;\n }\n for (const k in flags) {\n const group = registerGroup(k, groups);\n if (group.indexOf(t) < 0) {\n group.push(t);\n }\n }\n}\n\n/**\n * @template T\n * @param {T} t token to check\n * @param {Collections} groups\n * @returns {Flags} group flags that contain this token\n */\nfunction flagsForToken(t, groups) {\n const result = {};\n for (const c in groups) {\n if (groups[c].indexOf(t) >= 0) {\n result[c] = true;\n }\n }\n return result;\n}\n\n/**\n * @template T\n * @typedef {null | T } Transition\n */\n\n/**\n * Define a basic state machine state. j is the list of character transitions,\n * jr is the list of regex-match transitions, jd is the default state to\n * transition to t is the accepting token type, if any. If this is the terminal\n * state, then it does not emit a token.\n *\n * The template type T represents the type of the token this state accepts. This\n * should be a string (such as of the token exports in `text.js`) or a\n * MultiToken subclass (from `multi.js`)\n *\n * @template T\n * @param {T} [token] Token that this state emits\n */\nfunction State(token = null) {\n // this.n = null; // DEBUG: State name\n /** @type {{ [input: string]: State }} j */\n this.j = {}; // IMPLEMENTATION 1\n // this.j = []; // IMPLEMENTATION 2\n /** @type {[RegExp, State][]} jr */\n this.jr = [];\n /** @type {?State} jd */\n this.jd = null;\n /** @type {?T} t */\n this.t = token;\n}\n\n/**\n * Scanner token groups\n * @type Collections\n */\nState.groups = {};\nState.prototype = {\n accepts() {\n return !!this.t;\n },\n /**\n * Follow an existing transition from the given input to the next state.\n * Does not mutate.\n * @param {string} input character or token type to transition on\n * @returns {?State} the next state, if any\n */\n go(input) {\n const state = this;\n const nextState = state.j[input];\n if (nextState) {\n return nextState;\n }\n for (let i = 0; i < state.jr.length; i++) {\n const regex = state.jr[i][0];\n const nextState = state.jr[i][1]; // note: might be empty to prevent default jump\n if (nextState && regex.test(input)) {\n return nextState;\n }\n }\n // Nowhere left to jump! Return default, if any\n return state.jd;\n },\n /**\n * Whether the state has a transition for the given input. Set the second\n * argument to true to only look for an exact match (and not a default or\n * regular-expression-based transition)\n * @param {string} input\n * @param {boolean} exactOnly\n */\n has(input, exactOnly = false) {\n return exactOnly ? input in this.j : !!this.go(input);\n },\n /**\n * Short for \"transition all\"; create a transition from the array of items\n * in the given list to the same final resulting state.\n * @param {string | string[]} inputs Group of inputs to transition on\n * @param {Transition | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n */\n ta(inputs, next, flags, groups) {\n for (let i = 0; i < inputs.length; i++) {\n this.tt(inputs[i], next, flags, groups);\n }\n },\n /**\n * Short for \"take regexp transition\"; defines a transition for this state\n * when it encounters a token which matches the given regular expression\n * @param {RegExp} regexp Regular expression transition (populate first)\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n * @returns {State} taken after the given input\n */\n tr(regexp, next, flags, groups) {\n groups = groups || State.groups;\n let nextState;\n if (next && next.j) {\n nextState = next;\n } else {\n // Token with maybe token groups\n nextState = new State(next);\n if (flags && groups) {\n addToGroups(next, flags, groups);\n }\n }\n this.jr.push([regexp, nextState]);\n return nextState;\n },\n /**\n * Short for \"take transitions\", will take as many sequential transitions as\n * the length of the given input and returns the\n * resulting final state.\n * @param {string | string[]} input\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n * @returns {State} taken after the given input\n */\n ts(input, next, flags, groups) {\n let state = this;\n const len = input.length;\n if (!len) {\n return state;\n }\n for (let i = 0; i < len - 1; i++) {\n state = state.tt(input[i]);\n }\n return state.tt(input[len - 1], next, flags, groups);\n },\n /**\n * Short for \"take transition\", this is a method for building/working with\n * state machines.\n *\n * If a state already exists for the given input, returns it.\n *\n * If a token is specified, that state will emit that token when reached by\n * the linkify engine.\n *\n * If no state exists, it will be initialized with some default transitions\n * that resemble existing default transitions.\n *\n * If a state is given for the second argument, that state will be\n * transitioned to on the given input regardless of what that input\n * previously did.\n *\n * Specify a token group flags to define groups that this token belongs to.\n * The token will be added to corresponding entires in the given groups\n * object.\n *\n * @param {string} input character, token type to transition on\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of groups\n * @returns {State} taken after the given input\n */\n tt(input, next, flags, groups) {\n groups = groups || State.groups;\n const state = this;\n\n // Check if existing state given, just a basic transition\n if (next && next.j) {\n state.j[input] = next;\n return next;\n }\n const t = next;\n\n // Take the transition with the usual default mechanisms and use that as\n // a template for creating the next state\n let nextState,\n templateState = state.go(input);\n if (templateState) {\n nextState = new State();\n Object.assign(nextState.j, templateState.j);\n nextState.jr.push.apply(nextState.jr, templateState.jr);\n nextState.jd = templateState.jd;\n nextState.t = templateState.t;\n } else {\n nextState = new State();\n }\n if (t) {\n // Ensure newly token is in the same groups as the old token\n if (groups) {\n if (nextState.t && typeof nextState.t === 'string') {\n const allFlags = Object.assign(flagsForToken(nextState.t, groups), flags);\n addToGroups(t, allFlags, groups);\n } else if (flags) {\n addToGroups(t, flags, groups);\n }\n }\n nextState.t = t; // overwrite anything that was previously there\n }\n state.j[input] = nextState;\n return nextState;\n }\n};\n\n// Helper functions to improve minification (not exported outside linkifyjs module)\n\n/**\n * @template T\n * @param {State} state\n * @param {string | string[]} input\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {RegExp} regexp\n * @param {T | State} [next]\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {string | string[]} input\n * @param {T | State} [next]\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {string} input\n * @param {T | State} [next]\n * @param {Collections} [groups]\n * @param {Flags} [flags]\n */\nconst tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups);\n\n/******************************************************************************\nText Tokens\nIdentifiers for token outputs from the regexp scanner\n******************************************************************************/\n\n// A valid web domain token\nconst WORD = 'WORD'; // only contains a-z\nconst UWORD = 'UWORD'; // contains letters other than a-z, used for IDN\nconst ASCIINUMERICAL = 'ASCIINUMERICAL'; // contains a-z, 0-9\nconst ALPHANUMERICAL = 'ALPHANUMERICAL'; // contains numbers and letters other than a-z, used for IDN\n\n// Special case of word\nconst LOCALHOST = 'LOCALHOST';\n\n// Valid top-level domain, special case of WORD (see tlds.js)\nconst TLD = 'TLD';\n\n// Valid IDN TLD, special case of UWORD (see tlds.js)\nconst UTLD = 'UTLD';\n\n// The scheme portion of a web URI protocol. Supported types include: `mailto`,\n// `file`, and user-defined custom protocols. Limited to schemes that contain\n// only letters\nconst SCHEME = 'SCHEME';\n\n// Similar to SCHEME, except makes distinction for schemes that must always be\n// followed by `://`, not just `:`. Supported types include `http`, `https`,\n// `ftp`, `ftps`\nconst SLASH_SCHEME = 'SLASH_SCHEME';\n\n// Any sequence of digits 0-9\nconst NUM = 'NUM';\n\n// Any number of consecutive whitespace characters that are not newline\nconst WS = 'WS';\n\n// New line (unix style)\nconst NL = 'NL'; // \\n\n\n// Opening/closing bracket classes\n// TODO: Rename OPEN -> LEFT and CLOSE -> RIGHT in v5 to fit with Unicode names\n// Also rename angle brackes to LESSTHAN and GREATER THAN\nconst OPENBRACE = 'OPENBRACE'; // {\nconst CLOSEBRACE = 'CLOSEBRACE'; // }\nconst OPENBRACKET = 'OPENBRACKET'; // [\nconst CLOSEBRACKET = 'CLOSEBRACKET'; // ]\nconst OPENPAREN = 'OPENPAREN'; // (\nconst CLOSEPAREN = 'CLOSEPAREN'; // )\nconst OPENANGLEBRACKET = 'OPENANGLEBRACKET'; // <\nconst CLOSEANGLEBRACKET = 'CLOSEANGLEBRACKET'; // >\nconst FULLWIDTHLEFTPAREN = 'FULLWIDTHLEFTPAREN'; // (\nconst FULLWIDTHRIGHTPAREN = 'FULLWIDTHRIGHTPAREN'; // )\nconst LEFTCORNERBRACKET = 'LEFTCORNERBRACKET'; // 「\nconst RIGHTCORNERBRACKET = 'RIGHTCORNERBRACKET'; // 」\nconst LEFTWHITECORNERBRACKET = 'LEFTWHITECORNERBRACKET'; // 『\nconst RIGHTWHITECORNERBRACKET = 'RIGHTWHITECORNERBRACKET'; // 』\nconst FULLWIDTHLESSTHAN = 'FULLWIDTHLESSTHAN'; // <\nconst FULLWIDTHGREATERTHAN = 'FULLWIDTHGREATERTHAN'; // >\n\n// Various symbols\nconst AMPERSAND = 'AMPERSAND'; // &\nconst APOSTROPHE = 'APOSTROPHE'; // '\nconst ASTERISK = 'ASTERISK'; // *\nconst AT = 'AT'; // @\nconst BACKSLASH = 'BACKSLASH'; // \\\nconst BACKTICK = 'BACKTICK'; // `\nconst CARET = 'CARET'; // ^\nconst COLON = 'COLON'; // :\nconst COMMA = 'COMMA'; // ,\nconst DOLLAR = 'DOLLAR'; // $\nconst DOT = 'DOT'; // .\nconst EQUALS = 'EQUALS'; // =\nconst EXCLAMATION = 'EXCLAMATION'; // !\nconst HYPHEN = 'HYPHEN'; // -\nconst PERCENT = 'PERCENT'; // %\nconst PIPE = 'PIPE'; // |\nconst PLUS = 'PLUS'; // +\nconst POUND = 'POUND'; // #\nconst QUERY = 'QUERY'; // ?\nconst QUOTE = 'QUOTE'; // \"\nconst FULLWIDTHMIDDLEDOT = 'FULLWIDTHMIDDLEDOT'; // ・\n\nconst SEMI = 'SEMI'; // ;\nconst SLASH = 'SLASH'; // /\nconst TILDE = 'TILDE'; // ~\nconst UNDERSCORE = 'UNDERSCORE'; // _\n\n// Emoji symbol\nconst EMOJI$1 = 'EMOJI';\n\n// Default token - anything that is not one of the above\nconst SYM = 'SYM';\n\nvar tk = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tALPHANUMERICAL: ALPHANUMERICAL,\n\tAMPERSAND: AMPERSAND,\n\tAPOSTROPHE: APOSTROPHE,\n\tASCIINUMERICAL: ASCIINUMERICAL,\n\tASTERISK: ASTERISK,\n\tAT: AT,\n\tBACKSLASH: BACKSLASH,\n\tBACKTICK: BACKTICK,\n\tCARET: CARET,\n\tCLOSEANGLEBRACKET: CLOSEANGLEBRACKET,\n\tCLOSEBRACE: CLOSEBRACE,\n\tCLOSEBRACKET: CLOSEBRACKET,\n\tCLOSEPAREN: CLOSEPAREN,\n\tCOLON: COLON,\n\tCOMMA: COMMA,\n\tDOLLAR: DOLLAR,\n\tDOT: DOT,\n\tEMOJI: EMOJI$1,\n\tEQUALS: EQUALS,\n\tEXCLAMATION: EXCLAMATION,\n\tFULLWIDTHGREATERTHAN: FULLWIDTHGREATERTHAN,\n\tFULLWIDTHLEFTPAREN: FULLWIDTHLEFTPAREN,\n\tFULLWIDTHLESSTHAN: FULLWIDTHLESSTHAN,\n\tFULLWIDTHMIDDLEDOT: FULLWIDTHMIDDLEDOT,\n\tFULLWIDTHRIGHTPAREN: FULLWIDTHRIGHTPAREN,\n\tHYPHEN: HYPHEN,\n\tLEFTCORNERBRACKET: LEFTCORNERBRACKET,\n\tLEFTWHITECORNERBRACKET: LEFTWHITECORNERBRACKET,\n\tLOCALHOST: LOCALHOST,\n\tNL: NL,\n\tNUM: NUM,\n\tOPENANGLEBRACKET: OPENANGLEBRACKET,\n\tOPENBRACE: OPENBRACE,\n\tOPENBRACKET: OPENBRACKET,\n\tOPENPAREN: OPENPAREN,\n\tPERCENT: PERCENT,\n\tPIPE: PIPE,\n\tPLUS: PLUS,\n\tPOUND: POUND,\n\tQUERY: QUERY,\n\tQUOTE: QUOTE,\n\tRIGHTCORNERBRACKET: RIGHTCORNERBRACKET,\n\tRIGHTWHITECORNERBRACKET: RIGHTWHITECORNERBRACKET,\n\tSCHEME: SCHEME,\n\tSEMI: SEMI,\n\tSLASH: SLASH,\n\tSLASH_SCHEME: SLASH_SCHEME,\n\tSYM: SYM,\n\tTILDE: TILDE,\n\tTLD: TLD,\n\tUNDERSCORE: UNDERSCORE,\n\tUTLD: UTLD,\n\tUWORD: UWORD,\n\tWORD: WORD,\n\tWS: WS\n});\n\n// Note that these two Unicode ones expand into a really big one with Babel\nconst ASCII_LETTER = /[a-z]/;\nconst LETTER = /\\p{L}/u; // Any Unicode character with letter data type\nconst EMOJI = /\\p{Emoji}/u; // Any Unicode emoji character\nconst EMOJI_VARIATION$1 = /\\ufe0f/;\nconst DIGIT = /\\d/;\nconst SPACE = /\\s/;\n\nvar regexp = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tASCII_LETTER: ASCII_LETTER,\n\tDIGIT: DIGIT,\n\tEMOJI: EMOJI,\n\tEMOJI_VARIATION: EMOJI_VARIATION$1,\n\tLETTER: LETTER,\n\tSPACE: SPACE\n});\n\n/**\n\tThe scanner provides an interface that takes a string of text as input, and\n\toutputs an array of tokens instances that can be used for easy URL parsing.\n*/\n\nconst CR = '\\r'; // carriage-return character\nconst LF = '\\n'; // line-feed character\nconst EMOJI_VARIATION = '\\ufe0f'; // Variation selector, follows heart and others\nconst EMOJI_JOINER = '\\u200d'; // zero-width joiner\nconst OBJECT_REPLACEMENT = '\\ufffc'; // whitespace placeholder that sometimes appears in rich text editors\n\nlet tlds = null,\n utlds = null; // don't change so only have to be computed once\n\n/**\n * Scanner output token:\n * - `t` is the token name (e.g., 'NUM', 'EMOJI', 'TLD')\n * - `v` is the value of the token (e.g., '123', '❤️', 'com')\n * - `s` is the start index of the token in the original string\n * - `e` is the end index of the token in the original string\n * @typedef {{t: string, v: string, s: number, e: number}} Token\n */\n\n/**\n * @template T\n * @typedef {{ [collection: string]: T[] }} Collections\n */\n\n/**\n * Initialize the scanner character-based state machine for the given start\n * state\n * @param {[string, boolean][]} customSchemes List of custom schemes, where each\n * item is a length-2 tuple with the first element set to the string scheme, and\n * the second element set to `true` if the `://` after the scheme is optional\n */\nfunction init$2(customSchemes = []) {\n // Frequently used states (name argument removed during minification)\n /** @type Collections */\n const groups = {}; // of tokens\n State.groups = groups;\n /** @type State */\n const Start = new State();\n if (tlds == null) {\n tlds = decodeTlds(encodedTlds);\n }\n if (utlds == null) {\n utlds = decodeTlds(encodedUtlds);\n }\n\n // States for special URL symbols that accept immediately after start\n tt(Start, \"'\", APOSTROPHE);\n tt(Start, '{', OPENBRACE);\n tt(Start, '}', CLOSEBRACE);\n tt(Start, '[', OPENBRACKET);\n tt(Start, ']', CLOSEBRACKET);\n tt(Start, '(', OPENPAREN);\n tt(Start, ')', CLOSEPAREN);\n tt(Start, '<', OPENANGLEBRACKET);\n tt(Start, '>', CLOSEANGLEBRACKET);\n tt(Start, '(', FULLWIDTHLEFTPAREN);\n tt(Start, ')', FULLWIDTHRIGHTPAREN);\n tt(Start, '「', LEFTCORNERBRACKET);\n tt(Start, '」', RIGHTCORNERBRACKET);\n tt(Start, '『', LEFTWHITECORNERBRACKET);\n tt(Start, '』', RIGHTWHITECORNERBRACKET);\n tt(Start, '<', FULLWIDTHLESSTHAN);\n tt(Start, '>', FULLWIDTHGREATERTHAN);\n tt(Start, '&', AMPERSAND);\n tt(Start, '*', ASTERISK);\n tt(Start, '@', AT);\n tt(Start, '`', BACKTICK);\n tt(Start, '^', CARET);\n tt(Start, ':', COLON);\n tt(Start, ',', COMMA);\n tt(Start, '$', DOLLAR);\n tt(Start, '.', DOT);\n tt(Start, '=', EQUALS);\n tt(Start, '!', EXCLAMATION);\n tt(Start, '-', HYPHEN);\n tt(Start, '%', PERCENT);\n tt(Start, '|', PIPE);\n tt(Start, '+', PLUS);\n tt(Start, '#', POUND);\n tt(Start, '?', QUERY);\n tt(Start, '\"', QUOTE);\n tt(Start, '/', SLASH);\n tt(Start, ';', SEMI);\n tt(Start, '~', TILDE);\n tt(Start, '_', UNDERSCORE);\n tt(Start, '\\\\', BACKSLASH);\n tt(Start, '・', FULLWIDTHMIDDLEDOT);\n const Num = tr(Start, DIGIT, NUM, {\n [numeric]: true\n });\n tr(Num, DIGIT, Num);\n const Asciinumeric = tr(Num, ASCII_LETTER, ASCIINUMERICAL, {\n [asciinumeric]: true\n });\n const Alphanumeric = tr(Num, LETTER, ALPHANUMERICAL, {\n [alphanumeric]: true\n });\n\n // State which emits a word token\n const Word = tr(Start, ASCII_LETTER, WORD, {\n [ascii]: true\n });\n tr(Word, DIGIT, Asciinumeric);\n tr(Word, ASCII_LETTER, Word);\n tr(Asciinumeric, DIGIT, Asciinumeric);\n tr(Asciinumeric, ASCII_LETTER, Asciinumeric);\n\n // Same as previous, but specific to non-fsm.ascii alphabet words\n const UWord = tr(Start, LETTER, UWORD, {\n [alpha]: true\n });\n tr(UWord, ASCII_LETTER); // Non-accepting\n tr(UWord, DIGIT, Alphanumeric);\n tr(UWord, LETTER, UWord);\n tr(Alphanumeric, DIGIT, Alphanumeric);\n tr(Alphanumeric, ASCII_LETTER); // Non-accepting\n tr(Alphanumeric, LETTER, Alphanumeric); // Non-accepting\n\n // Whitespace jumps\n // Tokens of only non-newline whitespace are arbitrarily long\n // If any whitespace except newline, more whitespace!\n const Nl = tt(Start, LF, NL, {\n [whitespace]: true\n });\n const Cr = tt(Start, CR, WS, {\n [whitespace]: true\n });\n const Ws = tr(Start, SPACE, WS, {\n [whitespace]: true\n });\n tt(Start, OBJECT_REPLACEMENT, Ws);\n tt(Cr, LF, Nl); // \\r\\n\n tt(Cr, OBJECT_REPLACEMENT, Ws);\n tr(Cr, SPACE, Ws);\n tt(Ws, CR); // non-accepting state to avoid mixing whitespaces\n tt(Ws, LF); // non-accepting state to avoid mixing whitespaces\n tr(Ws, SPACE, Ws);\n tt(Ws, OBJECT_REPLACEMENT, Ws);\n\n // Emoji tokens. They are not grouped by the scanner except in cases where a\n // zero-width joiner is present\n const Emoji = tr(Start, EMOJI, EMOJI$1, {\n [emoji]: true\n });\n tt(Emoji, '#'); // no transition, emoji regex seems to match #\n tr(Emoji, EMOJI, Emoji);\n tt(Emoji, EMOJI_VARIATION, Emoji);\n // tt(Start, EMOJI_VARIATION, Emoji); // This one is sketchy\n\n const EmojiJoiner = tt(Emoji, EMOJI_JOINER);\n tt(EmojiJoiner, '#');\n tr(EmojiJoiner, EMOJI, Emoji);\n // tt(EmojiJoiner, EMOJI_VARIATION, Emoji); // also sketchy\n\n // Generates states for top-level domains\n // Note that this is most accurate when tlds are in alphabetical order\n const wordjr = [[ASCII_LETTER, Word], [DIGIT, Asciinumeric]];\n const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord], [DIGIT, Alphanumeric]];\n for (let i = 0; i < tlds.length; i++) {\n fastts(Start, tlds[i], TLD, WORD, wordjr);\n }\n for (let i = 0; i < utlds.length; i++) {\n fastts(Start, utlds[i], UTLD, UWORD, uwordjr);\n }\n addToGroups(TLD, {\n tld: true,\n ascii: true\n }, groups);\n addToGroups(UTLD, {\n utld: true,\n alpha: true\n }, groups);\n\n // Collect the states generated by different protocols. NOTE: If any new TLDs\n // get added that are also protocols, set the token to be the same as the\n // protocol to ensure parsing works as expected.\n fastts(Start, 'file', SCHEME, WORD, wordjr);\n fastts(Start, 'mailto', SCHEME, WORD, wordjr);\n fastts(Start, 'http', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'https', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftp', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftps', SLASH_SCHEME, WORD, wordjr);\n addToGroups(SCHEME, {\n scheme: true,\n ascii: true\n }, groups);\n addToGroups(SLASH_SCHEME, {\n slashscheme: true,\n ascii: true\n }, groups);\n\n // Register custom schemes. Assumes each scheme is asciinumeric with hyphens\n customSchemes = customSchemes.sort((a, b) => a[0] > b[0] ? 1 : -1);\n for (let i = 0; i < customSchemes.length; i++) {\n const sch = customSchemes[i][0];\n const optionalSlashSlash = customSchemes[i][1];\n const flags = optionalSlashSlash ? {\n [scheme]: true\n } : {\n [slashscheme]: true\n };\n if (sch.indexOf('-') >= 0) {\n flags[domain] = true;\n } else if (!ASCII_LETTER.test(sch)) {\n flags[numeric] = true; // numbers only\n } else if (DIGIT.test(sch)) {\n flags[asciinumeric] = true;\n } else {\n flags[ascii] = true;\n }\n ts(Start, sch, sch, flags);\n }\n\n // Localhost token\n ts(Start, 'localhost', LOCALHOST, {\n ascii: true\n });\n\n // Set default transition for start state (some symbol)\n Start.jd = new State(SYM);\n return {\n start: Start,\n tokens: Object.assign({\n groups\n }, tk)\n };\n}\n\n/**\n\tGiven a string, returns an array of TOKEN instances representing the\n\tcomposition of that string.\n\n\t@method run\n\t@param {State} start scanner starting state\n\t@param {string} str input string to scan\n\t@return {Token[]} list of tokens, each with a type and value\n*/\nfunction run$1(start, str) {\n // State machine is not case sensitive, so input is tokenized in lowercased\n // form (still returns regular case). Uses selective `toLowerCase` because\n // lowercasing the entire string causes the length and character position to\n // vary in some non-English strings with V8-based runtimes.\n const iterable = stringToArray(str.replace(/[A-Z]/g, c => c.toLowerCase()));\n const charCount = iterable.length; // <= len if there are emojis, etc\n const tokens = []; // return value\n\n // cursor through the string itself, accounting for characters that have\n // width with length 2 such as emojis\n let cursor = 0;\n\n // Cursor through the array-representation of the string\n let charCursor = 0;\n\n // Tokenize the string\n while (charCursor < charCount) {\n let state = start;\n let nextState = null;\n let tokenLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n let charsSinceAccepts = -1;\n while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) {\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n charsSinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts += iterable[charCursor].length;\n charsSinceAccepts++;\n }\n tokenLength += iterable[charCursor].length;\n cursor += iterable[charCursor].length;\n charCursor++;\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n charCursor -= charsSinceAccepts;\n tokenLength -= sinceAccepts;\n\n // No more jumps, just make a new token from the last accepting one\n tokens.push({\n t: latestAccepting.t,\n // token type/name\n v: str.slice(cursor - tokenLength, cursor),\n // string value\n s: cursor - tokenLength,\n // start index\n e: cursor // end index (excluding)\n });\n }\n return tokens;\n}\n\n/**\n * Convert a String to an Array of characters, taking into account that some\n * characters like emojis take up two string indexes.\n *\n * Adapted from core-js (MIT license)\n * https://github.com/zloirock/core-js/blob/2d69cf5f99ab3ea3463c395df81e5a15b68f49d9/packages/core-js/internals/string-multibyte.js\n *\n * @function stringToArray\n * @param {string} str\n * @returns {string[]}\n */\nfunction stringToArray(str) {\n const result = [];\n const len = str.length;\n let index = 0;\n while (index < len) {\n let first = str.charCodeAt(index);\n let second;\n let char = first < 0xd800 || first > 0xdbff || index + 1 === len || (second = str.charCodeAt(index + 1)) < 0xdc00 || second > 0xdfff ? str[index] // single character\n : str.slice(index, index + 2); // two-index characters\n result.push(char);\n index += char.length;\n }\n return result;\n}\n\n/**\n * Fast version of ts function for when transition defaults are well known\n * @param {State} state\n * @param {string} input\n * @param {string} t\n * @param {string} defaultt\n * @param {[RegExp, State][]} jr\n * @returns {State}\n */\nfunction fastts(state, input, t, defaultt, jr) {\n let next;\n const len = input.length;\n for (let i = 0; i < len - 1; i++) {\n const char = input[i];\n if (state.j[char]) {\n next = state.j[char];\n } else {\n next = new State(defaultt);\n next.jr = jr.slice();\n state.j[char] = next;\n }\n state = next;\n }\n next = new State(t);\n next.jr = jr.slice();\n state.j[input[len - 1]] = next;\n return next;\n}\n\n/**\n * Converts a string of Top-Level Domain names encoded in update-tlds.js back\n * into a list of strings.\n * @param {str} encoded encoded TLDs string\n * @returns {str[]} original TLDs list\n */\nfunction decodeTlds(encoded) {\n const words = [];\n const stack = [];\n let i = 0;\n let digits = '0123456789';\n while (i < encoded.length) {\n let popDigitCount = 0;\n while (digits.indexOf(encoded[i + popDigitCount]) >= 0) {\n popDigitCount++; // encountered some digits, have to pop to go one level up trie\n }\n if (popDigitCount > 0) {\n words.push(stack.join('')); // whatever preceded the pop digits must be a word\n for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) {\n stack.pop();\n }\n i += popDigitCount;\n } else {\n stack.push(encoded[i]); // drop down a level into the trie\n i++;\n }\n }\n return words;\n}\n\n/**\n * An object where each key is a valid DOM Event Name such as `click` or `focus`\n * and each value is an event handler function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element#events\n * @typedef {?{ [event: string]: Function }} EventListeners\n */\n\n/**\n * All formatted properties required to render a link, including `tagName`,\n * `attributes`, `content` and `eventListeners`.\n * @typedef {{ tagName: any, attributes: {[attr: string]: any}, content: string,\n * eventListeners: EventListeners }} IntermediateRepresentation\n */\n\n/**\n * Specify either an object described by the template type `O` or a function.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `O`\n * @template O\n * @typedef {O | ((value: string, type: string, token: MultiToken) => O)} OptObj\n */\n\n/**\n * Specify either a function described by template type `F` or an object.\n *\n * Each key in the object should be a link type (`'url'`, `'hashtag`', etc.). Each\n * value should be a function with template type `F` that is called when the\n * corresponding link type is encountered.\n * @template F\n * @typedef {F | { [type: string]: F}} OptFn\n */\n\n/**\n * Specify either a value with template type `V`, a function that returns `V` or\n * an object where each value resolves to `V`.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `V`\n *\n * For the object, each key should be a link type (`'url'`, `'hashtag`', etc.).\n * Each value should either have type `V` or a function that returns V. This\n * function similarly takes a string value and a token.\n *\n * Example valid types for `Opt`:\n *\n * ```js\n * 'hello'\n * (value, type, token) => 'world'\n * { url: 'hello', email: (value, token) => 'world'}\n * ```\n * @template V\n * @typedef {V | ((value: string, type: string, token: MultiToken) => V) | { [type: string]: V | ((value: string, token: MultiToken) => V) }} Opt\n */\n\n/**\n * See available options: https://linkify.js.org/docs/options.html\n * @typedef {{\n * \tdefaultProtocol?: string,\n * events?: OptObj,\n * \tformat?: Opt,\n * \tformatHref?: Opt,\n * \tnl2br?: boolean,\n * \ttagName?: Opt,\n * \ttarget?: Opt,\n * \trel?: Opt,\n * \tvalidate?: Opt,\n * \ttruncate?: Opt,\n * \tclassName?: Opt,\n * \tattributes?: OptObj<({ [attr: string]: any })>,\n * ignoreTags?: string[],\n * \trender?: OptFn<((ir: IntermediateRepresentation) => any)>\n * }} Opts\n */\n\n/**\n * @type Required\n */\nconst defaults = {\n defaultProtocol: 'http',\n events: null,\n format: noop,\n formatHref: noop,\n nl2br: false,\n tagName: 'a',\n target: null,\n rel: null,\n validate: true,\n truncate: Infinity,\n className: null,\n attributes: null,\n ignoreTags: [],\n render: null\n};\n\n/**\n * Utility class for linkify interfaces to apply specified\n * {@link Opts formatting and rendering options}.\n *\n * @param {Opts | Options} [opts] Option value overrides.\n * @param {(ir: IntermediateRepresentation) => any} [defaultRender] (For\n * internal use) default render function that determines how to generate an\n * HTML element based on a link token's derived tagName, attributes and HTML.\n * Similar to render option\n */\nfunction Options(opts, defaultRender = null) {\n let o = Object.assign({}, defaults);\n if (opts) {\n o = Object.assign(o, opts instanceof Options ? opts.o : opts);\n }\n\n // Ensure all ignored tags are uppercase\n const ignoredTags = o.ignoreTags;\n const uppercaseIgnoredTags = [];\n for (let i = 0; i < ignoredTags.length; i++) {\n uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase());\n }\n /** @protected */\n this.o = o;\n if (defaultRender) {\n this.defaultRender = defaultRender;\n }\n this.ignoreTags = uppercaseIgnoredTags;\n}\nOptions.prototype = {\n o: defaults,\n /**\n * @type string[]\n */\n ignoreTags: [],\n /**\n * @param {IntermediateRepresentation} ir\n * @returns {any}\n */\n defaultRender(ir) {\n return ir;\n },\n /**\n * Returns true or false based on whether a token should be displayed as a\n * link based on the user options.\n * @param {MultiToken} token\n * @returns {boolean}\n */\n check(token) {\n return this.get('validate', token.toString(), token);\n },\n // Private methods\n\n /**\n * Resolve an option's value based on the value of the option and the given\n * params. If operator and token are specified and the target option is\n * callable, automatically calls the function with the given argument.\n * @template {keyof Opts} K\n * @param {K} key Name of option to use\n * @param {string} [operator] will be passed to the target option if it's a\n * function. If not specified, RAW function value gets returned\n * @param {MultiToken} [token] The token from linkify.tokenize\n * @returns {Opts[K] | any}\n */\n get(key, operator, token) {\n const isCallable = operator != null;\n let option = this.o[key];\n if (!option) {\n return option;\n }\n if (typeof option === 'object') {\n option = token.t in option ? option[token.t] : defaults[key];\n if (typeof option === 'function' && isCallable) {\n option = option(operator, token);\n }\n } else if (typeof option === 'function' && isCallable) {\n option = option(operator, token.t, token);\n }\n return option;\n },\n /**\n * @template {keyof Opts} L\n * @param {L} key Name of options object to use\n * @param {string} [operator]\n * @param {MultiToken} [token]\n * @returns {Opts[L] | any}\n */\n getObj(key, operator, token) {\n let obj = this.o[key];\n if (typeof obj === 'function' && operator != null) {\n obj = obj(operator, token.t, token);\n }\n return obj;\n },\n /**\n * Convert the given token to a rendered element that may be added to the\n * calling-interface's DOM\n * @param {MultiToken} token Token to render to an HTML element\n * @returns {any} Render result; e.g., HTML string, DOM element, React\n * Component, etc.\n */\n render(token) {\n const ir = token.render(this); // intermediate representation\n const renderFn = this.get('render', null, token) || this.defaultRender;\n return renderFn(ir, token.t, token);\n }\n};\nfunction noop(val) {\n return val;\n}\n\nvar options = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tOptions: Options,\n\tdefaults: defaults\n});\n\n/******************************************************************************\n\tMulti-Tokens\n\tTokens composed of arrays of TextTokens\n******************************************************************************/\n\n/**\n * @param {string} value\n * @param {Token[]} tokens\n */\nfunction MultiToken(value, tokens) {\n this.t = 'token';\n this.v = value;\n this.tk = tokens;\n}\n\n/**\n * Abstract class used for manufacturing tokens of text tokens. That is rather\n * than the value for a token being a small string of text, it's value an array\n * of text tokens.\n *\n * Used for grouping together URLs, emails, hashtags, and other potential\n * creations.\n * @class MultiToken\n * @property {string} t\n * @property {string} v\n * @property {Token[]} tk\n * @abstract\n */\nMultiToken.prototype = {\n isLink: false,\n /**\n * Return the string this token represents.\n * @return {string}\n */\n toString() {\n return this.v;\n },\n /**\n * What should the value for this token be in the `href` HTML attribute?\n * Returns the `.toString` value by default.\n * @param {string} [scheme]\n * @return {string}\n */\n toHref(scheme) {\n return this.toString();\n },\n /**\n * @param {Options} options Formatting options\n * @returns {string}\n */\n toFormattedString(options) {\n const val = this.toString();\n const truncate = options.get('truncate', val, this);\n const formatted = options.get('format', val, this);\n return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + '…' : formatted;\n },\n /**\n *\n * @param {Options} options\n * @returns {string}\n */\n toFormattedHref(options) {\n return options.get('formatHref', this.toHref(options.get('defaultProtocol')), this);\n },\n /**\n * The start index of this token in the original input string\n * @returns {number}\n */\n startIndex() {\n return this.tk[0].s;\n },\n /**\n * The end index of this token in the original input string (up to this\n * index but not including it)\n * @returns {number}\n */\n endIndex() {\n return this.tk[this.tk.length - 1].e;\n },\n /**\n \tReturns an object of relevant values for this token, which includes keys\n \t* type - Kind of token ('url', 'email', etc.)\n \t* value - Original text\n \t* href - The value that should be added to the anchor tag's href\n \t\tattribute\n \t\t@method toObject\n \t@param {string} [protocol] `'http'` by default\n */\n toObject(protocol = defaults.defaultProtocol) {\n return {\n type: this.t,\n value: this.toString(),\n isLink: this.isLink,\n href: this.toHref(protocol),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n *\n * @param {Options} options Formatting option\n */\n toFormattedObject(options) {\n return {\n type: this.t,\n value: this.toFormattedString(options),\n isLink: this.isLink,\n href: this.toFormattedHref(options),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n * Whether this token should be rendered as a link according to the given options\n * @param {Options} options\n * @returns {boolean}\n */\n validate(options) {\n return options.get('validate', this.toString(), this);\n },\n /**\n * Return an object that represents how this link should be rendered.\n * @param {Options} options Formattinng options\n */\n render(options) {\n const token = this;\n const href = this.toHref(options.get('defaultProtocol'));\n const formattedHref = options.get('formatHref', href, this);\n const tagName = options.get('tagName', href, token);\n const content = this.toFormattedString(options);\n const attributes = {};\n const className = options.get('className', href, token);\n const target = options.get('target', href, token);\n const rel = options.get('rel', href, token);\n const attrs = options.getObj('attributes', href, token);\n const eventListeners = options.getObj('events', href, token);\n attributes.href = formattedHref;\n if (className) {\n attributes.class = className;\n }\n if (target) {\n attributes.target = target;\n }\n if (rel) {\n attributes.rel = rel;\n }\n if (attrs) {\n Object.assign(attributes, attrs);\n }\n return {\n tagName,\n attributes,\n content,\n eventListeners\n };\n }\n};\n\n/**\n * Create a new token that can be emitted by the parser state machine\n * @param {string} type readable type of the token\n * @param {object} props properties to assign or override, including isLink = true or false\n * @returns {new (value: string, tokens: Token[]) => MultiToken} new token class\n */\nfunction createTokenClass(type, props) {\n class Token extends MultiToken {\n constructor(value, tokens) {\n super(value, tokens);\n this.t = type;\n }\n }\n for (const p in props) {\n Token.prototype[p] = props[p];\n }\n Token.t = type;\n return Token;\n}\n\n/**\n\tRepresents a list of tokens making up a valid email address\n*/\nconst Email = createTokenClass('email', {\n isLink: true,\n toHref() {\n return 'mailto:' + this.toString();\n }\n});\n\n/**\n\tRepresents some plain text\n*/\nconst Text = createTokenClass('text');\n\n/**\n\tMulti-linebreak token - represents a line break\n\t@class Nl\n*/\nconst Nl = createTokenClass('nl');\n\n/**\n\tRepresents a list of text tokens making up a valid URL\n\t@class Url\n*/\nconst Url = createTokenClass('url', {\n isLink: true,\n /**\n \tLowercases relevant parts of the domain and adds the protocol if\n \trequired. Note that this will not escape unsafe HTML characters in the\n \tURL.\n \t\t@param {string} [scheme] default scheme (e.g., 'https')\n \t@return {string} the full href\n */\n toHref(scheme = defaults.defaultProtocol) {\n // Check if already has a prefix scheme\n return this.hasProtocol() ? this.v : `${scheme}://${this.v}`;\n },\n /**\n * Check whether this URL token has a protocol\n * @return {boolean}\n */\n hasProtocol() {\n const tokens = this.tk;\n return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON;\n }\n});\n\nvar multi = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBase: MultiToken,\n\tEmail: Email,\n\tMultiToken: MultiToken,\n\tNl: Nl,\n\tText: Text,\n\tUrl: Url,\n\tcreateTokenClass: createTokenClass\n});\n\n/**\n\tNot exactly parser, more like the second-stage scanner (although we can\n\ttheoretically hotswap the code here with a real parser in the future... but\n\tfor a little URL-finding utility abstract syntax trees may be a little\n\toverkill).\n\n\tURL format: http://en.wikipedia.org/wiki/URI_scheme\n\tEmail format: http://en.wikipedia.org/wiki/EmailAddress (links to RFC in\n\treference)\n\n\t@module linkify\n\t@submodule parser\n\t@main run\n*/\n\nconst makeState = arg => new State(arg);\n\n/**\n * Generate the parser multi token-based state machine\n * @param {{ groups: Collections }} tokens\n */\nfunction init$1({\n groups\n}) {\n // Types of characters the URL can definitely end in\n const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]);\n\n // Types of tokens that can follow a URL and be part of the query string\n // but cannot be the very last characters\n // Characters that cannot appear in the URL at all should be excluded\n const qsNonAccepting = [APOSTROPHE, COLON, COMMA, DOT, EXCLAMATION, PERCENT, QUERY, QUOTE, SEMI, OPENANGLEBRACKET, CLOSEANGLEBRACKET, OPENBRACE, CLOSEBRACE, CLOSEBRACKET, OPENBRACKET, OPENPAREN, CLOSEPAREN, FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN, LEFTCORNERBRACKET, RIGHTCORNERBRACKET, LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET, FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN];\n\n // For addresses without the mailto prefix\n // Tokens allowed in the localpart of the email\n const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, OPENBRACE, CLOSEBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE];\n\n // The universal starting state.\n /**\n * @type State\n */\n const Start = makeState();\n const Localpart = tt(Start, TILDE); // Local part of the email address\n ta(Localpart, localpartAccepting, Localpart);\n ta(Localpart, groups.domain, Localpart);\n const Domain = makeState(),\n Scheme = makeState(),\n SlashScheme = makeState();\n ta(Start, groups.domain, Domain); // parsed string ends with a potential domain name (A)\n ta(Start, groups.scheme, Scheme); // e.g., 'mailto'\n ta(Start, groups.slashscheme, SlashScheme); // e.g., 'http'\n\n ta(Domain, localpartAccepting, Localpart);\n ta(Domain, groups.domain, Domain);\n const LocalpartAt = tt(Domain, AT); // Local part of the email address plus @\n\n tt(Localpart, AT, LocalpartAt); // close to an email address now\n\n // Local part of an email address can be e.g. 'http' or 'mailto'\n tt(Scheme, AT, LocalpartAt);\n tt(SlashScheme, AT, LocalpartAt);\n const LocalpartDot = tt(Localpart, DOT); // Local part of the email address plus '.' (localpart cannot end in .)\n ta(LocalpartDot, localpartAccepting, Localpart);\n ta(LocalpartDot, groups.domain, Localpart);\n const EmailDomain = makeState();\n ta(LocalpartAt, groups.domain, EmailDomain); // parsed string starts with local email info + @ with a potential domain name\n ta(EmailDomain, groups.domain, EmailDomain);\n const EmailDomainDot = tt(EmailDomain, DOT); // domain followed by DOT\n ta(EmailDomainDot, groups.domain, EmailDomain);\n const Email$1 = makeState(Email); // Possible email address (could have more tlds)\n ta(EmailDomainDot, groups.tld, Email$1);\n ta(EmailDomainDot, groups.utld, Email$1);\n tt(LocalpartAt, LOCALHOST, Email$1);\n\n // Hyphen can jump back to a domain name\n const EmailDomainHyphen = tt(EmailDomain, HYPHEN); // parsed string starts with local email info + @ with a potential domain name\n tt(EmailDomainHyphen, HYPHEN, EmailDomainHyphen);\n ta(EmailDomainHyphen, groups.domain, EmailDomain);\n ta(Email$1, groups.domain, EmailDomain);\n tt(Email$1, DOT, EmailDomainDot);\n tt(Email$1, HYPHEN, EmailDomainHyphen);\n\n // Account for dots and hyphens. Hyphens are usually parts of domain names\n // (but not TLDs)\n const DomainHyphen = tt(Domain, HYPHEN); // domain followed by hyphen\n const DomainDot = tt(Domain, DOT); // domain followed by DOT\n tt(DomainHyphen, HYPHEN, DomainHyphen);\n ta(DomainHyphen, groups.domain, Domain);\n ta(DomainDot, localpartAccepting, Localpart);\n ta(DomainDot, groups.domain, Domain);\n const DomainDotTld = makeState(Url); // Simplest possible URL with no query string\n ta(DomainDot, groups.tld, DomainDotTld);\n ta(DomainDot, groups.utld, DomainDotTld);\n ta(DomainDotTld, groups.domain, Domain);\n ta(DomainDotTld, localpartAccepting, Localpart);\n tt(DomainDotTld, DOT, DomainDot);\n tt(DomainDotTld, HYPHEN, DomainHyphen);\n tt(DomainDotTld, AT, LocalpartAt);\n const DomainDotTldColon = tt(DomainDotTld, COLON); // URL followed by colon (potential port number here)\n const DomainDotTldColonPort = makeState(Url); // TLD followed by a port number\n ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort);\n\n // Long URL with optional port and maybe query string\n const Url$1 = makeState(Url);\n\n // URL with extra symbols at the end, followed by an opening bracket\n const UrlNonaccept = makeState(); // URL followed by some symbols (will not be part of the final URL)\n\n // Query strings\n ta(Url$1, qsAccepting, Url$1);\n ta(Url$1, qsNonAccepting, UrlNonaccept);\n ta(UrlNonaccept, qsAccepting, Url$1);\n ta(UrlNonaccept, qsNonAccepting, UrlNonaccept);\n\n // Become real URLs after `SLASH` or `COLON NUM SLASH`\n // Here works with or without scheme:// prefix\n tt(DomainDotTld, SLASH, Url$1);\n tt(DomainDotTldColonPort, SLASH, Url$1);\n\n // Note that domains that begin with schemes are treated slighly differently\n const SchemeColon = tt(Scheme, COLON); // e.g., 'mailto:'\n const SlashSchemeColon = tt(SlashScheme, COLON); // e.g., 'http:'\n const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH); // e.g., 'http:/'\n\n const UriPrefix = tt(SlashSchemeColonSlash, SLASH); // e.g., 'http://'\n\n // Scheme states can transition to domain states\n ta(Scheme, groups.domain, Domain);\n tt(Scheme, DOT, DomainDot);\n tt(Scheme, HYPHEN, DomainHyphen);\n ta(SlashScheme, groups.domain, Domain);\n tt(SlashScheme, DOT, DomainDot);\n tt(SlashScheme, HYPHEN, DomainHyphen);\n\n // Force URL with scheme prefix followed by anything sane\n ta(SchemeColon, groups.domain, Url$1);\n tt(SchemeColon, SLASH, Url$1);\n tt(SchemeColon, QUERY, Url$1);\n ta(UriPrefix, groups.domain, Url$1);\n ta(UriPrefix, qsAccepting, Url$1);\n tt(UriPrefix, SLASH, Url$1);\n const bracketPairs = [[OPENBRACE, CLOSEBRACE],\n // {}\n [OPENBRACKET, CLOSEBRACKET],\n // []\n [OPENPAREN, CLOSEPAREN],\n // ()\n [OPENANGLEBRACKET, CLOSEANGLEBRACKET],\n // <>\n [FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN],\n // ()\n [LEFTCORNERBRACKET, RIGHTCORNERBRACKET],\n // 「」\n [LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET],\n // 『』\n [FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN] // <>\n ];\n for (let i = 0; i < bracketPairs.length; i++) {\n const [OPEN, CLOSE] = bracketPairs[i];\n const UrlOpen = tt(Url$1, OPEN); // URL followed by open bracket\n\n // Continue not accepting for open brackets\n tt(UrlNonaccept, OPEN, UrlOpen);\n\n // URL that begins with an opening bracket, followed by a symbols.\n // Note that the final state can still be `UrlOpen` (if the URL has a\n // single opening bracket for some reason).\n const UrlOpenQ = makeState(Url);\n ta(UrlOpen, qsAccepting, UrlOpenQ);\n const UrlOpenSyms = makeState(); // UrlOpen followed by some symbols it cannot end it\n ta(UrlOpen, qsNonAccepting, UrlOpenSyms);\n\n // Closing bracket component. This character WILL be included in the URL.\n // Must come after qsNonAccepting (which includes all close-bracket tokens)\n // so that CLOSE -> Url wins over CLOSE -> UrlOpenSyms.\n tt(UrlOpen, CLOSE, Url$1);\n\n // URL that begins with an opening bracket, followed by some symbols\n ta(UrlOpenQ, qsAccepting, UrlOpenQ);\n ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms);\n ta(UrlOpenSyms, qsAccepting, UrlOpenQ);\n ta(UrlOpenSyms, qsNonAccepting, UrlOpenSyms);\n\n // Close brace/bracket to become regular URL\n tt(UrlOpenQ, CLOSE, Url$1);\n tt(UrlOpenSyms, CLOSE, Url$1);\n }\n tt(Start, LOCALHOST, DomainDotTld); // localhost is a valid URL state\n tt(Start, NL, Nl); // single new line\n\n return {\n start: Start,\n tokens: tk\n };\n}\n\n/**\n * Run the parser state machine on a list of scanned string-based tokens to\n * create a list of multi tokens, each of which represents a URL, email address,\n * plain text, etc.\n *\n * @param {State} start parser start state\n * @param {string} input the original input used to generate the given tokens\n * @param {Token[]} tokens list of scanned tokens\n * @returns {MultiToken[]}\n */\nfunction run(start, input, tokens) {\n let len = tokens.length;\n let cursor = 0;\n let multis = [];\n let textTokens = [];\n while (cursor < len) {\n let state = start;\n let secondState = null;\n let nextState = null;\n let multiLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n while (cursor < len && !(secondState = state.go(tokens[cursor].t))) {\n // Starting tokens with nowhere to jump to.\n // Consider these to be just plain text\n textTokens.push(tokens[cursor++]);\n }\n while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) {\n // Get the next state\n secondState = null;\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts++;\n }\n cursor++;\n multiLength++;\n }\n if (sinceAccepts < 0) {\n // No accepting state was found, part of a regular text token add\n // the first text token to the text tokens array and try again from\n // the next\n cursor -= multiLength;\n if (cursor < len) {\n textTokens.push(tokens[cursor]);\n cursor++;\n }\n } else {\n // Accepting state!\n // First close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n textTokens = [];\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n multiLength -= sinceAccepts;\n\n // Create a new multitoken\n const Multi = latestAccepting.t;\n const subtokens = tokens.slice(cursor - multiLength, cursor);\n multis.push(initMultiToken(Multi, input, subtokens));\n }\n }\n\n // Finally close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n }\n return multis;\n}\n\n/**\n * Utility function for instantiating a new multitoken with all the relevant\n * fields during parsing.\n * @param {new (value: string, tokens: Token[]) => MultiToken} Multi class to instantiate\n * @param {string} input original input string\n * @param {Token[]} tokens consecutive tokens scanned from input string\n * @returns {MultiToken}\n */\nfunction initMultiToken(Multi, input, tokens) {\n const startIdx = tokens[0].s;\n const endIdx = tokens[tokens.length - 1].e;\n const value = input.slice(startIdx, endIdx);\n return new Multi(value, tokens);\n}\n\nconst warn = typeof console !== 'undefined' && console && console.warn || (() => {});\nconst warnAdvice = 'until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.';\n\n// Side-effect initialization state\nconst INIT = {\n scanner: null,\n parser: null,\n tokenQueue: [],\n pluginQueue: [],\n customSchemes: [],\n initialized: false\n};\n\n/**\n * @typedef {{\n * \tstart: State,\n * \ttokens: { groups: Collections } & typeof tk\n * }} ScannerInit\n */\n\n/**\n * @typedef {{\n * \tstart: State,\n * \ttokens: typeof multi\n * }} ParserInit\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit }) => void} TokenPlugin\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit, parser: ParserInit }) => void} Plugin\n */\n\n/**\n * De-register all plugins and reset the internal state-machine. Used for\n * testing; not required in practice.\n * @private\n */\nfunction reset() {\n State.groups = {};\n INIT.scanner = null;\n INIT.parser = null;\n INIT.tokenQueue = [];\n INIT.pluginQueue = [];\n INIT.customSchemes = [];\n INIT.initialized = false;\n return INIT;\n}\n\n/**\n * Register a token plugin to allow the scanner to recognize additional token\n * types before the parser state machine is constructed from the results.\n * @param {string} name of plugin to register\n * @param {TokenPlugin} plugin function that accepts the scanner state machine\n * and available scanner tokens and collections and extends the state machine to\n * recognize additional tokens or groups.\n */\nfunction registerTokenPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid token plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n if (name === INIT.tokenQueue[i][0]) {\n warn(`linkifyjs: token plugin \"${name}\" already registered - will be overwritten`);\n INIT.tokenQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.tokenQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register token plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Register a linkify plugin\n * @param {string} name of plugin to register\n * @param {Plugin} plugin function that accepts the parser state machine and\n * extends the parser to recognize additional link types\n */\nfunction registerPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n if (name === INIT.pluginQueue[i][0]) {\n warn(`linkifyjs: plugin \"${name}\" already registered - will be overwritten`);\n INIT.pluginQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.pluginQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Detect URLs with the following additional protocol. Anything with format\n * \"protocol://...\" will be considered a link. If `optionalSlashSlash` is set to\n * `true`, anything with format \"protocol:...\" will be considered a link.\n * @param {string} scheme\n * @param {boolean} [optionalSlashSlash]\n */\nfunction registerCustomProtocol(scheme, optionalSlashSlash = false) {\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register custom scheme \"${scheme}\" ${warnAdvice}`);\n }\n if (!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(scheme)) {\n throw new Error(`linkifyjs: incorrect scheme format.\n1. Must only contain digits, lowercase ASCII letters or \"-\"\n2. Cannot start or end with \"-\"\n3. \"-\" cannot repeat`);\n }\n INIT.customSchemes.push([scheme, optionalSlashSlash]);\n}\n\n/**\n * Initialize the linkify state machine. Called automatically the first time\n * linkify is called on a string, but may be called manually as well.\n */\nfunction init() {\n // Initialize scanner state machine and plugins\n INIT.scanner = init$2(INIT.customSchemes);\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n INIT.tokenQueue[i][1]({\n scanner: INIT.scanner\n });\n }\n\n // Initialize parser state machine and plugins\n INIT.parser = init$1(INIT.scanner.tokens);\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n INIT.pluginQueue[i][1]({\n scanner: INIT.scanner,\n parser: INIT.parser\n });\n }\n INIT.initialized = true;\n return INIT;\n}\n\n/**\n * Parse a string into tokens that represent linkable and non-linkable sub-components\n * @param {string} str\n * @return {MultiToken[]} tokens\n */\nfunction tokenize(str) {\n if (!INIT.initialized) {\n init();\n }\n return run(INIT.parser.start, str, run$1(INIT.scanner.start, str));\n}\ntokenize.scan = run$1; // for testing\n\n/**\n * Find a list of linkable items in the given string.\n * @param {string} str string to find links in\n * @param {string | Opts} [type] either formatting options or specific type of\n * links to find, e.g., 'url' or 'email'\n * @param {Opts} [opts] formatting options for final output. Cannot be specified\n * if opts already provided in `type` argument\n */\nfunction find(str, type = null, opts = null) {\n if (type && typeof type === 'object') {\n if (opts) {\n throw Error(`linkifyjs: Invalid link type ${type}; must be a string`);\n }\n opts = type;\n type = null;\n }\n const options = new Options(opts);\n const tokens = tokenize(str);\n const filtered = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.isLink && (!type || token.t === type) && options.check(token)) {\n filtered.push(token.toFormattedObject(options));\n }\n }\n return filtered;\n}\n\n/**\n * Is the given string valid linkable text of some sort. Note that this does not\n * trim the text for you.\n *\n * Optionally pass in a second `type` param, which is the type of link to test\n * for.\n *\n * For example,\n *\n * linkify.test(str, 'email');\n *\n * Returns `true` if str is a valid email.\n * @param {string} str string to test for links\n * @param {string} [type] optional specific link type to look for\n * @returns boolean true/false\n */\nfunction test(str, type = null) {\n const tokens = tokenize(str);\n return tokens.length === 1 && tokens[0].isLink && (!type || tokens[0].t === type);\n}\n\nexport { MultiToken, Options, State, createTokenClass, find, init, multi, options, regexp, registerCustomProtocol, registerPlugin, registerTokenPlugin, reset, stringToArray, test, multi as text, tokenize };\n","import '../assets/NcAppSidebar-TcyGhk0L.css';\nimport { vOnClickOutside } from \"@vueuse/components\";\nimport { createFocusTrap } from \"focus-trap\";\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, defineComponent, useModel, normalizeClass, unref, createVNode, withCtx, mergeModels, resolveComponent, withKeys, withModifiers, Fragment, renderList, createBlock, renderSlot, resolveDirective, Transition, withDirectives, Teleport, normalizeStyle, vShow, createTextVNode, warn, ref, provide } from \"vue\";\nimport { I as IconArrowRight } from \"./ArrowRight-B1ncAhus.mjs\";\nimport { I as IconClose } from \"./Close-CuhcJnX2.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { getCanonicalLocale } from \"@nextcloud/l10n\";\nimport { _ as _sfc_main$6 } from \"./NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { useIsSmallMobile } from \"../composables/useIsMobile/index.mjs\";\nimport directive from \"../directives/Focus/index.mjs\";\nimport { r as register, V as t15, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { g as getTrapStack } from \"./focusTrap-HJQ4pqHV.mjs\";\nimport { i as isSlotPopulated, N as NcActions } from \"./NcActions-DY4GGONi.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { _ as _sfc_main$7 } from \"./NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-C-QhdyiN.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { C as CONTENT_SELECTOR_KEY } from \"./constants-Ciwvl5xb.mjs\";\nimport { N as NcEmptyContent } from \"./NcEmptyContent-CGAPqk4S.mjs\";\nimport { N as NcLoadingIcon } from \"./NcLoadingIcon-BOVpFVQz.mjs\";\nconst _sfc_main$5 = {\n name: \"DockRightIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$5 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$3 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$3 = { d: \"M20 4H4A2 2 0 0 0 2 6V18A2 2 0 0 0 4 20H20A2 2 0 0 0 22 18V6A2 2 0 0 0 20 4M15 18H4V6H15Z\" };\nconst _hoisted_4$3 = { key: 0 };\nfunction _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon dock-right-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$3, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$3, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$3))\n ], 16, _hoisted_1$5);\n}\nconst IconDockRight = /* @__PURE__ */ _export_sfc(_sfc_main$5, [[\"render\", _sfc_render$4]]);\nconst _sfc_main$4 = {\n name: \"StarIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$4 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$2 = { d: \"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z\" };\nconst _hoisted_4$2 = { key: 0 };\nfunction _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon star-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$2, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$2, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$2))\n ], 16, _hoisted_1$4);\n}\nconst IconStar = /* @__PURE__ */ _export_sfc(_sfc_main$4, [[\"render\", _sfc_render$3]]);\nconst _sfc_main$3 = {\n name: \"StarOutlineIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$3 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon star-outline-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$3);\n}\nconst IconStarOutline = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$2]]);\nconst _hoisted_1$2 = [\"aria-selected\", \"tabindex\"];\nconst _sfc_main$2 = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSidebarTabsButton\",\n props: /* @__PURE__ */ mergeModels({\n tab: {}\n }, {\n \"selected\": { type: Boolean, ...{ required: true } },\n \"selectedModifiers\": {}\n }),\n emits: [\"update:selected\"],\n setup(__props) {\n const selected = useModel(__props, \"selected\");\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"button\", {\n class: normalizeClass([\"button-vue\", [_ctx.$style.sidebarTabsButton, {\n [_ctx.$style.sidebarTabsButton_selected]: selected.value,\n [_ctx.$style.sidebarTabsButton_legacy]: unref(isLegacy34)\n }]]),\n role: \"tab\",\n \"aria-selected\": selected.value,\n tabindex: selected.value ? 0 : -1,\n onClick: _cache[0] || (_cache[0] = ($event) => selected.value = true)\n }, [\n createElementVNode(\"span\", {\n class: normalizeClass(_ctx.$style.sidebarTabsButton__icon)\n }, [\n createVNode(_sfc_main$6, {\n vnodes: __props.tab.renderIcon()\n }, {\n default: withCtx(() => [\n createElementVNode(\"span\", {\n class: normalizeClass([_ctx.$style.sidebarTabsButton__legacyIcon, __props.tab.icon])\n }, null, 2)\n ]),\n _: 1\n }, 8, [\"vnodes\"])\n ], 2),\n createElementVNode(\"span\", {\n class: normalizeClass(_ctx.$style.sidebarTabsButton__name)\n }, toDisplayString(__props.tab.name), 3)\n ], 10, _hoisted_1$2);\n };\n }\n});\nconst sidebarTabsButton = \"_sidebarTabsButton_Uw0-N\";\nconst sidebarTabsButton_legacy = \"_sidebarTabsButton_legacy_FsjhV\";\nconst sidebarTabsButton_selected = \"_sidebarTabsButton_selected_MiFwn\";\nconst sidebarTabsButton__name = \"_sidebarTabsButton__name_Uzc5r\";\nconst sidebarTabsButton__icon = \"_sidebarTabsButton__icon_-Zy-g\";\nconst sidebarTabsButton__legacyIcon = \"_sidebarTabsButton__legacyIcon_svLe8\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_fPSY2\",\n sidebarTabsButton,\n sidebarTabsButton_legacy,\n sidebarTabsButton_selected,\n sidebarTabsButton__name,\n sidebarTabsButton__icon,\n sidebarTabsButton__legacyIcon\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcAppSidebarTabsButton = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"__cssModules\", cssModules]]);\nconst _sfc_main$1 = {\n name: \"NcAppSidebarTabs\",\n components: {\n NcAppSidebarTabsButton\n },\n provide() {\n return {\n registerTab: this.registerTab,\n unregisterTab: this.unregisterTab,\n // Getter as an alternative to Vue 2.7 computed(() => this.activeTab)\n getActiveTab: () => this.activeTab,\n // Used to check whether the tab header is shown so the tabs can reference the tab header for `aria-labelledby` or not\n isTablistShown: () => this.hasMultipleTabs\n };\n },\n props: {\n /**\n * Id of the tab to activate\n */\n active: {\n type: String,\n default: \"\"\n },\n /**\n * Force the tab navigation to display even if there is only one tab\n */\n forceTabs: {\n type: Boolean,\n default: false\n }\n },\n emits: [\"update:active\"],\n data(props) {\n return {\n /**\n * Tab descriptions from the passed NcSidebarTab components' props to build the tab navbar from.\n */\n tabs: [],\n /**\n * Local active (open) tab's ID. It allows to use component without v-model:active\n */\n activeTab: props.active,\n isLegacy34\n };\n },\n computed: {\n /**\n * Has multiple tabs. If only one tab - its content is shown without navigation\n *\n * @return {boolean}\n */\n hasMultipleTabs() {\n return this.tabs.length > 1;\n },\n showForSingleTab() {\n return this.forceTabs && this.tabs.length === 1;\n },\n currentTabIndex() {\n return this.tabs.findIndex((tab) => tab.id === this.activeTab);\n }\n },\n watch: {\n tabs() {\n if (this.active) {\n this.updateActive();\n }\n },\n active(active) {\n if (active !== this.activeTab) {\n this.updateActive();\n }\n }\n },\n methods: {\n /**\n * Set the current active tab\n *\n * @param {string} id the id of the tab\n */\n setActive(id) {\n this.activeTab = id;\n this.$emit(\"update:active\", this.activeTab);\n },\n /**\n * Focus the previous tab\n * and emit to the parent component\n */\n focusPreviousTab() {\n if (this.currentTabIndex > 0) {\n this.setActive(this.tabs[this.currentTabIndex - 1].id);\n }\n this.focusActiveTab();\n },\n /**\n * Focus the next tab\n * and emit to the parent component\n */\n focusNextTab() {\n if (this.currentTabIndex < this.tabs.length - 1) {\n this.setActive(this.tabs[this.currentTabIndex + 1].id);\n }\n this.focusActiveTab();\n },\n /**\n * Focus the first tab\n * and emit to the parent component\n */\n focusFirstTab() {\n this.setActive(this.tabs[0].id);\n this.focusActiveTab();\n },\n /**\n * Focus the last tab\n * and emit to the parent component\n */\n focusLastTab() {\n this.setActive(this.tabs[this.tabs.length - 1].id);\n this.focusActiveTab();\n },\n /**\n * Focus the current active tab\n */\n focusActiveTab() {\n this.$el.querySelector(`#tab-button-${this.activeTab}`).focus();\n },\n /**\n * Focus the content on tab\n * see aria accessibility guidelines\n */\n focusActiveTabContent() {\n this.$el.querySelector(\"#tab-\" + this.activeTab).focus();\n },\n /**\n * Update the current active tab\n */\n updateActive() {\n this.activeTab = this.active && this.tabs.some(({ id }) => id === this.active) ? this.active : this.tabs[0]?.id ?? \"\";\n },\n /**\n * Register child tab in the tabs\n *\n * @param {object} tab child tab passed to slot\n */\n registerTab(tab) {\n this.tabs.push(tab);\n this.tabs.sort((a, b) => {\n if (a.order === b.order) {\n return a.name.localeCompare(b.name, [getCanonicalLocale()]);\n }\n return a.order - b.order;\n });\n this.updateActive();\n },\n /**\n * Unregister child tab from the tabs\n *\n * @param {string} id tab's id\n */\n unregisterTab(id) {\n const tabIndex = this.tabs.findIndex((tab) => tab.id === id);\n if (tabIndex !== -1) {\n this.tabs.splice(tabIndex, 1);\n }\n if (this.activeTab === id) {\n this.updateActive();\n }\n }\n }\n};\nconst _hoisted_1$1 = { class: \"app-sidebar-tabs\" };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAppSidebarTabsButton = resolveComponent(\"NcAppSidebarTabsButton\");\n return openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n $options.hasMultipleTabs || $options.showForSingleTab ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n role: \"tablist\",\n class: normalizeClass([\"app-sidebar-tabs__nav\", { \"app-sidebar-tabs__nav--legacy\": $data.isLegacy34 }]),\n onKeydown: [\n _cache[0] || (_cache[0] = withKeys(withModifiers((...args) => $options.focusPreviousTab && $options.focusPreviousTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"left\"])),\n _cache[1] || (_cache[1] = withKeys(withModifiers((...args) => $options.focusNextTab && $options.focusNextTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"right\"])),\n _cache[2] || (_cache[2] = withKeys(withModifiers((...args) => $options.focusActiveTabContent && $options.focusActiveTabContent(...args), [\"exact\", \"prevent\", \"stop\"]), [\"tab\"])),\n _cache[3] || (_cache[3] = withKeys(withModifiers((...args) => $options.focusFirstTab && $options.focusFirstTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"home\"])),\n _cache[4] || (_cache[4] = withKeys(withModifiers((...args) => $options.focusLastTab && $options.focusLastTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"end\"])),\n _cache[5] || (_cache[5] = withKeys(withModifiers((...args) => $options.focusFirstTab && $options.focusFirstTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"page-up\"])),\n _cache[6] || (_cache[6] = withKeys(withModifiers((...args) => $options.focusLastTab && $options.focusLastTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"page-down\"]))\n ]\n }, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($data.tabs, (tab) => {\n return openBlock(), createBlock(_component_NcAppSidebarTabsButton, {\n id: `tab-button-${tab.id}`,\n key: tab.id,\n class: \"app-sidebar-tabs__tab\",\n \"aria-controls\": `tab-${tab.id}`,\n selected: $data.activeTab === tab.id,\n tab,\n \"onUpdate:selected\": ($event) => $options.setActive(tab.id)\n }, null, 8, [\"id\", \"aria-controls\", \"selected\", \"tab\", \"onUpdate:selected\"]);\n }), 128))\n ], 34)) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-sidebar-tabs__content\", { \"app-sidebar-tabs__content--multiple\": $options.hasMultipleTabs }])\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ], 2)\n ]);\n}\nconst NcAppSidebarTabs = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-e74d1502\"]]);\nregister(t15);\nconst _sfc_main = {\n name: \"NcAppSidebar\",\n components: {\n NcActions,\n NcAppSidebarHeader: _sfc_main$7,\n NcAppSidebarTabs,\n NcButton,\n NcLoadingIcon,\n NcEmptyContent,\n IconArrowRight,\n IconClose,\n IconDockRight,\n IconStar,\n IconStarOutline\n },\n directives: {\n Focus: directive,\n /** @type {import('vue').ObjectDirective} */\n ClickOutside: vOnClickOutside\n },\n inject: {\n ncContentSelector: {\n from: CONTENT_SELECTOR_KEY,\n default: void 0\n }\n },\n props: {\n /**\n * The active tab\n */\n active: {\n type: String,\n default: \"\"\n },\n /**\n * Main text of the sidebar\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Allow to edit the sidebar name.\n */\n nameEditable: {\n type: Boolean,\n default: false\n },\n /**\n * Placeholder in the edit field if the name is editable.\n */\n namePlaceholder: {\n type: String,\n default: \"\"\n },\n /**\n * Secondary name of the sidebar (subline)\n */\n subname: {\n type: String,\n default: \"\"\n },\n /**\n * Title to display for the subname.\n */\n subtitle: {\n type: String,\n default: \"\"\n },\n /**\n * Url to the top header background image\n * Applied with css\n */\n background: {\n type: String,\n default: \"\"\n },\n /**\n * Enable the favourite icon if not null\n * See fired events\n */\n starred: {\n type: Boolean,\n default: null\n },\n /**\n * Show loading spinner instead of the star icon\n */\n starLoading: {\n type: Boolean,\n default: false\n },\n /**\n * Show loading spinner instead of tabs\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * Display the sidebar in compact mode\n */\n compact: {\n type: Boolean,\n default: false\n },\n /**\n * Only display close button and default slot content.\n * Don't display other header content and primary and secondary actions.\n * Useful when showing the EmptyContent component as content.\n */\n empty: {\n type: Boolean,\n default: false\n },\n /**\n * Force the actions to display in a three dot menu\n */\n forceMenu: {\n type: Boolean,\n default: false\n },\n /**\n * Force the tab navigation to display even if there is only one tab\n */\n forceTabs: {\n type: Boolean,\n default: false\n },\n /**\n * Linkify the name\n */\n linkifyName: {\n type: Boolean,\n default: false\n },\n /**\n * Title to display for the name.\n * Can be set to the same text in case it's too long.\n */\n title: {\n type: String,\n default: \"\"\n },\n /**\n * Allow to conditionally show the sidebar\n * You can also use `v-if` on the sidebar, but using the open prop allow to keep\n * the sidebar inside the DOM for performance if it is opened and closed multiple times.\n *\n * When using the `open` property to close the sidebar a built-in toggle button will be shown to reopen it,\n * similar to the app navigation. You can remove this button with the `no-toggle` prop.\n */\n open: {\n type: Boolean,\n default: true\n },\n /**\n * Custom classes to assign to the sidebar toggle button.\n * If needed this can be used to assign styles to the button using `:deep()` selector.\n */\n toggleClasses: {\n type: [String, Array, Object],\n default: \"\"\n },\n /**\n * Custom attrs to assign to the sidebar toggle button.\n */\n toggleAttrs: {\n type: Object,\n default: void 0\n },\n /**\n * Do not add the built-in toggle button with `open` prop.\n */\n noToggle: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"close\",\n \"closed\",\n \"opened\",\n // 'figureClick', not emitted on purpose to make \"hasFigureClickListener\" work\n \"update:active\",\n \"update:name\",\n \"update:nameEditable\",\n \"update:open\",\n \"update:starred\",\n \"submitName\",\n \"dismissEditing\"\n ],\n setup() {\n const headerRef = ref(null);\n provide(\"NcAppSidebar:header:ref\", headerRef);\n return {\n uid: createElementId(),\n isMobile: useIsSmallMobile(),\n headerRef\n };\n },\n data() {\n return {\n changeNameTranslated: t(\"Change name\"),\n closeTranslated: t(\"Close sidebar\"),\n favoriteTranslated: t(\"Favorite\"),\n isStarred: this.starred,\n focusTrap: null,\n elementToReturnFocus: null\n };\n },\n computed: {\n canStar() {\n return this.isStarred !== null;\n },\n hasFigureClickListener() {\n return !!this.$attrs.onFigureClick;\n }\n },\n watch: {\n starred() {\n this.isStarred = this.starred;\n },\n isMobile() {\n this.toggleFocusTrap();\n },\n open() {\n this.checkToggleButtonContainerAvailability();\n }\n },\n created() {\n this.preserveElementToReturnFocus();\n this.checkToggleButtonContainerAvailability();\n },\n beforeUnmount() {\n this.$emit(\"closed\");\n this.focusTrap?.deactivate();\n },\n methods: {\n isSlotPopulated,\n t,\n preserveElementToReturnFocus() {\n if (document.activeElement && document.activeElement !== document.body) {\n this.elementToReturnFocus = document.activeElement;\n if (this.elementToReturnFocus.getAttribute(\"role\") === \"menuitem\") {\n const menu = this.elementToReturnFocus.closest('[role=\"menu\"]');\n if (menu) {\n const menuTrigger = document.querySelector(`[aria-controls=\"${menu.id}\"]`);\n this.elementToReturnFocus = menuTrigger;\n }\n }\n }\n },\n initFocusTrap() {\n if (this.focusTrap) {\n return;\n }\n this.focusTrap = createFocusTrap([\n // The sidebar itself\n this.$refs.sidebar,\n // Nextcloud Server header navigation\n document.querySelector(\"#header\")\n ], {\n allowOutsideClick: true,\n fallbackFocus: this.$refs.closeButton.$el,\n trapStack: getTrapStack(),\n escapeDeactivates: false\n });\n },\n /**\n * Activate focus trap if it is currently needed, otherwise deactivate\n */\n toggleFocusTrap() {\n if (this.open && this.isMobile) {\n this.initFocusTrap();\n this.focusTrap.activate();\n } else {\n this.focusTrap?.deactivate();\n }\n },\n /**\n * Close the sidebar on pressing the escape key on mobile\n *\n * @param {KeyboardEvent} event key down event\n */\n onKeydownEsc(event) {\n if (this.isMobile) {\n event.stopPropagation();\n this.closeSidebar();\n }\n },\n onAfterEnter(element) {\n if (this.elementToReturnFocus) {\n this.focus();\n }\n this.toggleFocusTrap();\n this.$emit(\"opened\", element);\n },\n onAfterLeave(element) {\n this.$emit(\"closed\", element);\n this.toggleFocusTrap();\n this.elementToReturnFocus?.focus({ focusVisible: true });\n this.elementToReturnFocus = null;\n },\n /**\n * Used to tell parent component the user asked to close the sidebar\n *\n * @param {Event} e close icon click event\n */\n closeSidebar(e) {\n this.$emit(\"close\", e);\n this.$emit(\"update:open\", false);\n },\n /**\n * Emit figure click event to parent component\n *\n * @param {Event} e click event\n */\n onFigureClick(e) {\n this.$emit(\"figureClick\", e);\n },\n /**\n * Toggle the favourite state\n * and emit to the parent component\n */\n toggleStarred() {\n this.isStarred = !this.isStarred;\n this.$emit(\"update:starred\", this.isStarred);\n },\n async editName() {\n this.$emit(\"update:nameEditable\", true);\n if (this.nameEditable) {\n await this.$nextTick();\n this.$refs.nameInput.focus();\n }\n },\n /**\n * Focus the sidebar\n *\n * @public\n */\n focus() {\n if (!this.open && !this.noToggle) {\n this.$refs.toggle.$el.focus();\n return;\n }\n try {\n this.headerRef.focus();\n } catch {\n warn(\"NcAppSidebar should have focusable header for accessibility reasons. Use NcAppSidebarHeader component.\");\n }\n },\n /**\n * Focus the active tab\n *\n * @public\n */\n focusActiveTabContent() {\n this.preserveElementToReturnFocus();\n this.$refs.tabs.focusActiveTabContent();\n },\n /**\n * Check if the toggle button container is available\n */\n checkToggleButtonContainerAvailability() {\n if (this.open === false && !this.noToggle && !this.ncContentSelector) {\n logger.warn(\"[NcAppSidebar] It looks like you want to use NcAppSidebar with the built-in toggle button. This feature is only available when NcAppSidebar is used in NcContent.\");\n }\n },\n /**\n * Emit name change event to parent component\n *\n * @param {Event} event input event\n */\n onNameInput(event) {\n this.$emit(\"update:name\", event.target.value);\n },\n /**\n * Emit when the name form edit confirm button is pressed in order\n * to change the name.\n *\n * @param {Event} event submit event\n */\n onSubmitName(event) {\n this.$emit(\"update:nameEditable\", false);\n this.$emit(\"submitName\", event);\n },\n onDismissEditing() {\n this.$emit(\"update:nameEditable\", false);\n this.$emit(\"dismissEditing\");\n },\n onUpdateActive(activeTab) {\n this.$emit(\"update:active\", activeTab);\n }\n }\n};\nconst _hoisted_1 = [\"aria-labelledby\"];\nconst _hoisted_2 = { class: \"app-sidebar-header__info\" };\nconst _hoisted_3 = {\n key: 0,\n class: \"app-sidebar-header__tertiary-actions\"\n};\nconst _hoisted_4 = { class: \"app-sidebar-header__name-container\" };\nconst _hoisted_5 = { class: \"app-sidebar-header__mainname-container\" };\nconst _hoisted_6 = [\"placeholder\", \"value\"];\nconst _hoisted_7 = [\"title\"];\nconst _hoisted_8 = {\n key: 2,\n class: \"app-sidebar-header__description\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_IconDockRight = resolveComponent(\"IconDockRight\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n const _component_NcLoadingIcon = resolveComponent(\"NcLoadingIcon\");\n const _component_IconStar = resolveComponent(\"IconStar\");\n const _component_IconStarOutline = resolveComponent(\"IconStarOutline\");\n const _component_NcAppSidebarHeader = resolveComponent(\"NcAppSidebarHeader\");\n const _component_IconArrowRight = resolveComponent(\"IconArrowRight\");\n const _component_NcActions = resolveComponent(\"NcActions\");\n const _component_IconClose = resolveComponent(\"IconClose\");\n const _component_NcAppSidebarTabs = resolveComponent(\"NcAppSidebarTabs\");\n const _component_NcEmptyContent = resolveComponent(\"NcEmptyContent\");\n const _directive_focus = resolveDirective(\"focus\");\n const _directive_click_outside = resolveDirective(\"click-outside\");\n return openBlock(), createBlock(Transition, {\n appear: \"\",\n name: \"slide-right\",\n onAfterEnter: $options.onAfterEnter,\n onAfterLeave: $options.onAfterLeave\n }, {\n default: withCtx(() => [\n withDirectives(createElementVNode(\"aside\", {\n id: \"app-sidebar-vue\",\n ref: \"sidebar\",\n class: \"app-sidebar\",\n \"aria-labelledby\": `app-sidebar-vue-${$setup.uid}__header`,\n onKeydown: _cache[6] || (_cache[6] = withKeys((...args) => $options.onKeydownEsc && $options.onKeydownEsc(...args), [\"esc\"]))\n }, [\n $options.ncContentSelector && !$props.open && !$props.noToggle ? (openBlock(), createBlock(Teleport, {\n key: 0,\n to: $options.ncContentSelector\n }, [\n createVNode(_component_NcButton, mergeProps({\n ref: \"toggle\",\n \"aria-label\": $options.t(\"Open sidebar\"),\n class: [\"app-sidebar__toggle\", $props.toggleClasses],\n variant: \"tertiary\"\n }, $props.toggleAttrs, {\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"update:open\", true))\n }), {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"toggle-icon\", {}, () => [\n createVNode(_component_IconDockRight, { size: 20 })\n ], true)\n ]),\n _: 3\n }, 16, [\"aria-label\", \"class\"])\n ], 8, [\"to\"])) : createCommentVNode(\"\", true),\n createElementVNode(\"header\", {\n class: normalizeClass([\"app-sidebar-header\", {\n \"app-sidebar-header--with-figure\": $options.isSlotPopulated(_ctx.$slots.header?.()) || $props.background,\n \"app-sidebar-header--compact\": $props.compact\n }])\n }, [\n !$props.empty ? renderSlot(_ctx.$slots, \"info\", { key: 0 }, () => [\n createElementVNode(\"div\", _hoisted_2, [\n $options.isSlotPopulated(_ctx.$slots.header?.()) || $props.background ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass([\"app-sidebar-header__figure\", {\n \"app-sidebar-header__figure--with-action\": $options.hasFigureClickListener\n }]),\n style: normalizeStyle({\n backgroundImage: `url(${$props.background})`\n }),\n tabindex: \"0\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.onFigureClick && $options.onFigureClick(...args)),\n onKeydown: _cache[2] || (_cache[2] = withKeys((...args) => $options.onFigureClick && $options.onFigureClick(...args), [\"enter\"]))\n }, [\n renderSlot(_ctx.$slots, \"header\", { class: \"app-sidebar-header__background\" }, void 0, true)\n ], 38)) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-sidebar-header__desc\", {\n \"app-sidebar-header__desc--with-tertiary-action\": $options.canStar || $options.isSlotPopulated(_ctx.$slots[\"tertiary-actions\"]?.()),\n \"app-sidebar-header__desc--editable\": $props.nameEditable && !$props.subname,\n \"app-sidebar-header__desc--with-subname--editable\": $props.nameEditable && $props.subname,\n \"app-sidebar-header__desc--without-actions\": !$options.isSlotPopulated(_ctx.$slots[\"secondary-actions\"]?.())\n }])\n }, [\n $options.canStar || $options.isSlotPopulated(_ctx.$slots[\"tertiary-actions\"]?.()) ? (openBlock(), createElementBlock(\"div\", _hoisted_3, [\n renderSlot(_ctx.$slots, \"tertiary-actions\", {}, () => [\n $options.canStar ? (openBlock(), createBlock(_component_NcButton, {\n key: 0,\n \"aria-label\": $data.favoriteTranslated,\n pressed: $data.isStarred,\n class: \"app-sidebar-header__star\",\n variant: \"secondary\",\n onClick: withModifiers($options.toggleStarred, [\"prevent\"])\n }, {\n icon: withCtx(() => [\n $props.starLoading ? (openBlock(), createBlock(_component_NcLoadingIcon, { key: 0 })) : $data.isStarred ? (openBlock(), createBlock(_component_IconStar, {\n key: 1,\n size: 20\n })) : (openBlock(), createBlock(_component_IconStarOutline, {\n key: 2,\n size: 20\n }))\n ]),\n _: 1\n }, 8, [\"aria-label\", \"pressed\", \"onClick\"])) : createCommentVNode(\"\", true)\n ], true)\n ])) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", _hoisted_4, [\n createElementVNode(\"div\", _hoisted_5, [\n withDirectives(createVNode(_component_NcAppSidebarHeader, {\n class: \"app-sidebar-header__mainname\",\n name: $props.name,\n linkify: $props.linkifyName,\n title: $props.title,\n tabindex: $props.nameEditable ? 0 : -1,\n onClick: withModifiers($options.editName, [\"self\"])\n }, null, 8, [\"name\", \"linkify\", \"title\", \"tabindex\", \"onClick\"]), [\n [vShow, !$props.nameEditable]\n ]),\n $props.nameEditable ? withDirectives((openBlock(), createElementBlock(\"form\", {\n key: 0,\n class: \"app-sidebar-header__mainname-form\",\n onSubmit: _cache[5] || (_cache[5] = withModifiers((...args) => $options.onSubmitName && $options.onSubmitName(...args), [\"prevent\"]))\n }, [\n withDirectives(createElementVNode(\"input\", {\n ref: \"nameInput\",\n class: \"app-sidebar-header__mainname-input\",\n type: \"text\",\n placeholder: $props.namePlaceholder,\n value: $props.name,\n onKeydown: _cache[3] || (_cache[3] = withKeys(withModifiers((...args) => $options.onDismissEditing && $options.onDismissEditing(...args), [\"stop\"]), [\"esc\"])),\n onInput: _cache[4] || (_cache[4] = (...args) => $options.onNameInput && $options.onNameInput(...args))\n }, null, 40, _hoisted_6), [\n [_directive_focus]\n ]),\n createVNode(_component_NcButton, {\n \"aria-label\": $data.changeNameTranslated,\n type: \"submit\",\n variant: \"tertiary-no-background\"\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconArrowRight, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\"])\n ], 32)), [\n [_directive_click_outside, () => $options.onSubmitName()]\n ]) : createCommentVNode(\"\", true),\n $options.isSlotPopulated(_ctx.$slots[\"secondary-actions\"]?.()) ? (openBlock(), createBlock(_component_NcActions, {\n key: 1,\n class: \"app-sidebar-header__menu\",\n forceMenu: $props.forceMenu\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"secondary-actions\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"forceMenu\"])) : createCommentVNode(\"\", true)\n ]),\n $props.subname.trim() !== \"\" || _ctx.$slots[\"subname\"] ? (openBlock(), createElementBlock(\"p\", {\n key: 0,\n title: $props.subtitle || void 0,\n class: \"app-sidebar-header__subname\"\n }, [\n renderSlot(_ctx.$slots, \"subname\", {}, () => [\n createTextVNode(toDisplayString($props.subname), 1)\n ], true)\n ], 8, _hoisted_7)) : createCommentVNode(\"\", true)\n ])\n ], 2)\n ])\n ], true) : (openBlock(), createBlock(_component_NcAppSidebarHeader, {\n key: 1,\n class: \"app-sidebar-header__mainname--hidden\",\n name: $props.name,\n tabindex: \"-1\"\n }, null, 8, [\"name\"])),\n createVNode(_component_NcButton, {\n ref: \"closeButton\",\n \"aria-label\": $data.closeTranslated,\n title: $data.closeTranslated,\n class: \"app-sidebar__close\",\n variant: \"tertiary\",\n onClick: withModifiers($options.closeSidebar, [\"prevent\"])\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconClose, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"title\", \"onClick\"]),\n $options.isSlotPopulated(_ctx.$slots.description?.()) && !$props.empty ? (openBlock(), createElementBlock(\"div\", _hoisted_8, [\n renderSlot(_ctx.$slots, \"description\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true)\n ], 2),\n withDirectives(createVNode(_component_NcAppSidebarTabs, {\n ref: \"tabs\",\n active: $props.active,\n forceTabs: $props.forceTabs,\n \"onUpdate:active\": $options.onUpdateActive\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"active\", \"forceTabs\", \"onUpdate:active\"]), [\n [vShow, !$props.loading]\n ]),\n $props.loading ? (openBlock(), createBlock(_component_NcEmptyContent, { key: 1 }, {\n icon: withCtx(() => [\n createVNode(_component_NcLoadingIcon, { size: 64 })\n ]),\n _: 1\n })) : createCommentVNode(\"\", true)\n ], 40, _hoisted_1), [\n [vShow, $props.open]\n ])\n ]),\n _: 3\n }, 8, [\"onAfterEnter\", \"onAfterLeave\"]);\n}\nconst NcAppSidebar = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-e8979b7f\"]]);\nexport {\n NcAppSidebar as N\n};\n//# sourceMappingURL=NcAppSidebar-DX26aRNB.mjs.map\n","import PQueue from \"p-queue\";\nconst queue = new PQueue({ concurrency: 5 });\nfunction preloadImage(url) {\n const { resolve, promise } = Promise.withResolvers();\n queue.add(() => {\n const image = new Image();\n image.onerror = () => resolve(false);\n image.onload = () => resolve(true);\n image.src = url;\n return promise;\n });\n return promise;\n}\nexport {\n preloadImage\n};\n//# sourceMappingURL=index.mjs.map\n","import '../assets/NcChip-DbSI4mFP.css';\nimport { defineComponent, useSlots, computed, openBlock, createElementBlock, normalizeClass, renderSlot, createBlock, createCommentVNode, createElementVNode, createTextVNode, toDisplayString, withCtx, createVNode, unref } from \"vue\";\nimport { b as mdiClose } from \"./mdi-CpchYUUV.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-BO5T5ePT.mjs\";\nimport { N as NcActions } from \"./NcActions-DY4GGONi.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { r as register, A as t19, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t19);\nconst _hoisted_1 = {\n key: 0,\n class: \"nc-chip__icon\"\n};\nconst _hoisted_2 = { class: \"nc-chip__text\" };\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcChip\",\n props: {\n ariaLabelClose: { default: t(\"Close\") },\n actionsContainer: { default: \"body\" },\n text: { default: \"\" },\n iconPath: { default: void 0 },\n iconSvg: { default: void 0 },\n noClose: { type: Boolean },\n variant: { default: \"secondary\" }\n },\n emits: [\"close\"],\n setup(__props, { emit: __emit }) {\n const props = __props;\n const emit = __emit;\n const slots = useSlots();\n const canClose = computed(() => !props.noClose);\n const hasActions = () => !!slots.actions;\n const hasIcon = () => Boolean(props.iconPath || props.iconSvg || !!slots.icon);\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"nc-chip\", {\n [`nc-chip--${__props.variant}`]: true,\n \"nc-chip--no-actions\": __props.noClose && !hasActions(),\n \"nc-chip--no-icon\": !hasIcon()\n }])\n }, [\n hasIcon() ? (openBlock(), createElementBlock(\"span\", _hoisted_1, [\n renderSlot(_ctx.$slots, \"icon\", {}, () => [\n __props.iconPath || __props.iconSvg ? (openBlock(), createBlock(NcIconSvgWrapper, {\n key: 0,\n inline: \"\",\n path: __props.iconPath,\n svg: __props.iconPath ? void 0 : __props.iconSvg,\n size: 18\n }, null, 8, [\"path\", \"svg\"])) : createCommentVNode(\"\", true)\n ], true)\n ])) : createCommentVNode(\"\", true),\n createElementVNode(\"span\", _hoisted_2, [\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n createTextVNode(toDisplayString(__props.text), 1)\n ], true)\n ]),\n canClose.value || hasActions() ? (openBlock(), createBlock(NcActions, {\n key: 1,\n class: \"nc-chip__actions\",\n container: __props.actionsContainer,\n forceMenu: !canClose.value,\n variant: \"tertiary-no-background\"\n }, {\n default: withCtx(() => [\n canClose.value ? (openBlock(), createBlock(NcActionButton, {\n key: 0,\n closeAfterClick: \"\",\n onClick: _cache[0] || (_cache[0] = ($event) => emit(\"close\"))\n }, {\n icon: withCtx(() => [\n createVNode(NcIconSvgWrapper, {\n path: unref(mdiClose),\n size: 20\n }, null, 8, [\"path\"])\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(__props.ariaLabelClose), 1)\n ]),\n _: 1\n })) : createCommentVNode(\"\", true),\n renderSlot(_ctx.$slots, \"actions\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"container\", \"forceMenu\"])) : createCommentVNode(\"\", true)\n ], 2);\n };\n }\n});\nconst NcChip = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-8f5d3c40\"]]);\nexport {\n NcChip as N\n};\n//# sourceMappingURL=NcChip-BCtDxh7v.mjs.map\n","import '../assets/NcCollectionList-e5JFvzqX.css';\nimport debounce from \"debounce\";\nimport { resolveComponent, openBlock, createElementBlock, createVNode, toDisplayString, withModifiers, normalizeClass, withDirectives, createElementVNode, vModelText, Fragment, renderList, createBlock, resolveDynamicComponent, withCtx, createCommentVNode, createTextVNode, Transition, ref } from \"vue\";\nimport { r as register, L as t28, a as t, M as t6 } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-BO5T5ePT.mjs\";\nimport { N as NcActions } from \"./NcActions-DY4GGONi.mjs\";\nimport { N as NcAvatar } from \"./NcAvatar-DX-Nk9Es.mjs\";\nimport { g as getRoute } from \"./autolink-B2azbG18.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { N as NcSelect } from \"./NcSelect-BOFzoCwK.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nregister(t28);\nconst _sfc_main$1 = {\n name: \"NcCollectionListItem\",\n components: {\n NcAvatar,\n NcActions,\n NcActionButton\n },\n props: {\n /**\n * The collection\n */\n collection: {\n type: Object,\n default: null\n },\n /**\n * Current error if any\n */\n error: {\n type: String,\n default: void 0\n }\n },\n emits: [\n \"removeResource\",\n \"renameCollection\"\n ],\n data() {\n return {\n detailsOpen: false,\n newName: null\n };\n },\n computed: {\n getIcon() {\n return (resource) => [resource.iconClass];\n },\n typeClass() {\n return (resource) => \"resource-type-\" + resource.type;\n },\n resources() {\n return this.collection.resources?.filter((resource) => !Array.isArray(resource)) ?? [];\n },\n getComponent() {\n return (resource) => {\n const route = getRoute(this.$router, resource.link);\n return route ? { component: \"router-link\", to: route, href: void 0 } : { component: \"a\", to: void 0, href: resource.link };\n };\n },\n iconUrl() {\n return (resource) => {\n if (resource.mimetype) {\n return OC.MimeType.getIconUrl(resource.mimetype);\n }\n if (resource.iconUrl) {\n return resource.iconUrl;\n }\n return \"\";\n };\n }\n },\n methods: {\n t,\n toggleDetails() {\n this.detailsOpen = !this.detailsOpen;\n },\n showDetails() {\n this.detailsOpen = true;\n },\n removeResource(collection, resource) {\n this.$emit(\"removeResource\", {\n collectionId: collection.id,\n resourceType: resource.type,\n resourceId: resource.id\n });\n },\n openRename() {\n this.newName = this.collection.name;\n },\n renameCollection() {\n if (this.newName) {\n this.$emit(\"renameCollection\", {\n collectionId: this.collection.id,\n name: this.newName\n });\n }\n this.newName = null;\n }\n }\n};\nconst _hoisted_1$1 = { class: \"collection-list-item\" };\nconst _hoisted_2$1 = {\n key: 2,\n class: \"linked-icons\"\n};\nconst _hoisted_3$1 = [\"src\", \"alt\"];\nconst _hoisted_4$1 = {\n key: 3,\n class: \"sharingOptionsGroup\"\n};\nconst _hoisted_5$1 = {\n key: 0,\n class: \"error\"\n};\nconst _hoisted_6$1 = {\n key: 0,\n class: \"resource-list-details\"\n};\nconst _hoisted_7$1 = [\"src\", \"alt\"];\nconst _hoisted_8$1 = { class: \"resource-name\" };\nconst _hoisted_9 = [\"onClick\"];\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n const _component_NcActionButton = resolveComponent(\"NcActionButton\");\n const _component_NcActions = resolveComponent(\"NcActions\");\n return openBlock(), createElementBlock(\"li\", _hoisted_1$1, [\n createVNode(_component_NcAvatar, {\n displayName: $props.collection.name,\n allowPlaceholder: \"\",\n class: \"collection-avatar\"\n }, null, 8, [\"displayName\"]),\n $data.newName === null ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n class: \"collection-item-name\",\n title: \"\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.showDetails && $options.showDetails(...args))\n }, toDisplayString($props.collection.name), 1)) : (openBlock(), createElementBlock(\"form\", {\n key: 1,\n class: normalizeClass({ \"should-shake\": $props.error }),\n onSubmit: _cache[2] || (_cache[2] = withModifiers((...args) => $options.renameCollection && $options.renameCollection(...args), [\"prevent\"]))\n }, [\n withDirectives(createElementVNode(\"input\", {\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event) => $data.newName = $event),\n type: \"text\",\n autocomplete: \"off\",\n autocapitalize: \"off\"\n }, null, 512), [\n [vModelText, $data.newName]\n ]),\n _cache[3] || (_cache[3] = createElementVNode(\"input\", {\n type: \"submit\",\n value: \"\",\n class: \"icon-confirm\"\n }, null, -1))\n ], 34)),\n !$data.detailsOpen && $data.newName === null ? (openBlock(), createElementBlock(\"div\", _hoisted_2$1, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.resources.slice(0, 2), (resource) => {\n return openBlock(), createBlock(resolveDynamicComponent($options.getComponent(resource).component), {\n key: resource.type + \"|\" + resource.id,\n title: resource.name,\n to: $options.getComponent(resource).to,\n href: $options.getComponent(resource).href,\n class: normalizeClass($options.typeClass(resource))\n }, {\n default: withCtx(() => [\n createElementVNode(\"img\", {\n src: $options.iconUrl(resource),\n alt: resource.name\n }, null, 8, _hoisted_3$1)\n ]),\n _: 2\n }, 1032, [\"title\", \"to\", \"href\", \"class\"]);\n }), 128))\n ])) : createCommentVNode(\"\", true),\n $data.newName === null ? (openBlock(), createElementBlock(\"span\", _hoisted_4$1, [\n createVNode(_component_NcActions, null, {\n default: withCtx(() => [\n createVNode(_component_NcActionButton, {\n icon: \"icon-info\",\n onClick: withModifiers($options.toggleDetails, [\"prevent\"])\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString($data.detailsOpen ? $options.t(\"Hide details\") : $options.t(\"Show details\")), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"]),\n createVNode(_component_NcActionButton, {\n icon: \"icon-rename\",\n onClick: withModifiers($options.openRename, [\"prevent\"])\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString($options.t(\"Rename project\")), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ]),\n _: 1\n })\n ])) : createCommentVNode(\"\", true),\n createVNode(Transition, { name: \"fade\" }, {\n default: withCtx(() => [\n $props.error ? (openBlock(), createElementBlock(\"div\", _hoisted_5$1, toDisplayString($props.error), 1)) : createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n createVNode(Transition, { name: \"fade\" }, {\n default: withCtx(() => [\n $data.detailsOpen ? (openBlock(), createElementBlock(\"ul\", _hoisted_6$1, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.resources, (resource) => {\n return openBlock(), createElementBlock(\"li\", {\n key: resource.type + \"|\" + resource.id,\n class: normalizeClass($options.typeClass(resource))\n }, [\n (openBlock(), createBlock(resolveDynamicComponent($options.getComponent(resource).component), {\n to: $options.getComponent(resource).to,\n href: $options.getComponent(resource).href\n }, {\n default: withCtx(() => [\n createElementVNode(\"img\", {\n src: $options.iconUrl(resource),\n alt: resource.name\n }, null, 8, _hoisted_7$1),\n createElementVNode(\"span\", _hoisted_8$1, toDisplayString(resource.name || \"\"), 1)\n ]),\n _: 2\n }, 1032, [\"to\", \"href\"])),\n createElementVNode(\"span\", {\n class: \"icon-close\",\n onClick: ($event) => $options.removeResource($props.collection, resource)\n }, null, 8, _hoisted_9)\n ], 2);\n }), 128))\n ])) : createCommentVNode(\"\", true)\n ]),\n _: 1\n })\n ]);\n}\nconst NcCollectionListItem = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-8ebb9fc1\"]]);\nregister(t6);\nfunction extractOcsData(response) {\n return response.data.ocs.data;\n}\nfunction renameCollectionService(collectionId, collectionName) {\n return axios.put(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { collectionName }).then(extractOcsData);\n}\nfunction getCollectionsByResourceService(resourceType, resourceId) {\n return axios.get(generateOcsUrl(\"collaboration/resources/{resourceType}/{resourceId}\", { resourceType, resourceId })).then(extractOcsData);\n}\nfunction createCollectionService(resourceType, resourceId, name) {\n return axios.post(generateOcsUrl(\"collaboration/resources/{resourceType}/{resourceId}\", { resourceType, resourceId }), { name }).then(extractOcsData);\n}\nfunction addResourceService(collectionId, resourceType, resourceId) {\n return axios.post(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { resourceType, resourceId }).then(extractOcsData);\n}\nfunction removeResourceService(collectionId, resourceType, resourceId) {\n return axios.delete(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { params: { resourceType, resourceId } }).then(extractOcsData);\n}\nfunction searchService(query) {\n return axios.get(generateOcsUrl(\"collaboration/resources/collections/search/{query}\", { query })).then(extractOcsData);\n}\nfunction useCollections() {\n const storedCollections = ref([]);\n const addCollections = (collections) => {\n storedCollections.value = collections;\n };\n const addCollection = (collection) => {\n storedCollections.value.push(collection);\n };\n const removeCollection = (collectionId) => {\n storedCollections.value = storedCollections.value.filter((item) => item.id !== collectionId);\n };\n const updateCollection = (collection) => {\n const index = storedCollections.value.findIndex((item) => item.id === collection.id);\n if (index !== -1) {\n storedCollections.value[index] = collection;\n } else {\n addCollection(collection);\n }\n };\n const fetchCollectionsByResource = async ({ resourceType, resourceId }) => {\n const collections = await getCollectionsByResourceService(resourceType, resourceId);\n addCollections(collections);\n };\n const createCollection = async ({ baseResourceType, baseResourceId, resourceType, resourceId, name }) => {\n const collection = await createCollectionService(baseResourceType, baseResourceId, name);\n addCollection(collection);\n await addResourceToCollection({\n collectionId: collection.id,\n resourceType,\n resourceId\n });\n };\n const renameCollection = async ({ collectionId, name }) => {\n const collection = await renameCollectionService(collectionId, name);\n updateCollection(collection);\n };\n async function addResourceToCollection({ collectionId, resourceType, resourceId }) {\n const collection = await addResourceService(collectionId, resourceType, String(resourceId));\n updateCollection(collection);\n }\n const removeResourceFromCollection = async ({ collectionId, resourceType, resourceId }) => {\n const collection = await removeResourceService(collectionId, resourceType, String(resourceId));\n if (collection.resources.length > 0) {\n updateCollection(collection);\n } else {\n removeCollection(collectionId);\n }\n };\n return {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n renameCollection,\n addResourceToCollection,\n removeResourceFromCollection\n };\n}\nconst METHOD_CREATE_COLLECTION = 0;\nconst METHOD_ADD_TO_COLLECTION = 1;\nconst _sfc_main = {\n name: \"NcCollectionList\",\n components: {\n NcCollectionListItem,\n NcAvatar,\n NcSelect\n },\n props: {\n /**\n * Resource type identifier\n */\n type: {\n type: String,\n default: null\n },\n /**\n * Unique id of the resource\n */\n id: {\n type: String,\n default: null\n },\n /**\n * Name of the resource\n */\n name: {\n type: String,\n default: \"\"\n },\n /**\n * Whether the component is active (to start fetch resources)\n */\n isActive: {\n type: Boolean,\n default: true\n }\n },\n setup() {\n const {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n addResourceToCollection,\n removeResourceFromCollection,\n renameCollection\n } = useCollections();\n const searchCollections = ref([]);\n const search = debounce(function(query, loading) {\n if (query !== \"\") {\n loading(true);\n searchService(query).then((collections) => {\n searchCollections.value = collections;\n }).catch((error) => {\n logger.error(\"Failed to search for collections\", { error });\n }).finally(() => {\n loading(false);\n });\n }\n }, 500);\n return {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n addResourceToCollection,\n removeResourceFromCollection,\n renameCollection,\n searchCollections,\n search\n };\n },\n data() {\n return {\n selectIsOpen: false,\n generatingCodes: false,\n codes: void 0,\n value: null,\n model: {},\n collectionsError: {},\n error: null,\n isSelectOpen: false\n };\n },\n computed: {\n collections() {\n return this.storedCollections.filter((collection) => collection.resources.some((resource) => resource && resource.id === String(this.id) && resource.type === this.type));\n },\n placeholder() {\n return this.isSelectOpen ? t(\"Type to search for existing projects\") : t(\"Add to a project\");\n },\n options() {\n const options = [];\n window.OCP.Collaboration.getTypes().sort().forEach((type) => {\n options.push({\n method: METHOD_CREATE_COLLECTION,\n type,\n title: window.OCP.Collaboration.getLabel(type),\n class: window.OCP.Collaboration.getIcon(type),\n action: () => window.OCP.Collaboration.trigger(type)\n });\n });\n for (const index in this.searchCollections) {\n if (!this.collections.find((collection) => collection.id === this.searchCollections[index].id)) {\n options.push({\n method: METHOD_ADD_TO_COLLECTION,\n title: this.searchCollections[index].name,\n collectionId: this.searchCollections[index].id\n });\n }\n }\n return options;\n },\n resourceIdentifier() {\n return {\n resourceType: this.type,\n resourceId: this.id,\n isActive: this.isActive\n };\n }\n },\n watch: {\n resourceIdentifier: {\n deep: true,\n immediate: true,\n handler(resourceIdentifier) {\n if (!resourceIdentifier.isActive || !resourceIdentifier.resourceId || !resourceIdentifier.resourceType) {\n return;\n }\n this.fetchCollectionsByResource(resourceIdentifier);\n }\n }\n },\n methods: {\n t,\n select(selectedOption) {\n if (selectedOption.method === METHOD_CREATE_COLLECTION) {\n selectedOption.action().then((resourceId) => {\n this.createCollection({\n baseResourceType: this.type,\n baseResourceId: this.id,\n resourceType: selectedOption.type,\n resourceId,\n name: this.name\n }).catch((e) => {\n this.setError(t(\"Failed to create a project\"), e);\n });\n }).catch((e) => {\n logger.error(\"[NcCollectionList] No resource selected\", e);\n });\n }\n if (selectedOption.method === METHOD_ADD_TO_COLLECTION) {\n this.addResourceToCollection({\n collectionId: selectedOption.collectionId,\n resourceType: this.type,\n resourceId: this.id\n }).catch((e) => {\n this.setError(t(\"Failed to add the item to the project\"), e);\n });\n }\n this.value = null;\n },\n showSelect() {\n this.selectIsOpen = true;\n this.$refs.select.$el.focus();\n },\n setError(error, e) {\n logger.error(error, { error: e });\n this.error = error;\n setTimeout(() => {\n this.error = null;\n }, 5e3);\n },\n renameCollectionFromItem({ collectionId, name }) {\n this.renameCollection({ collectionId, name }).catch((e) => {\n logger.error(t(\"Failed to rename the project\"), { error: e });\n this.collectionsError[collectionId] = t(\"Failed to rename the project\");\n setTimeout(() => {\n this.collectionsError[collectionId] = null;\n }, 5e3);\n });\n }\n }\n};\nconst _hoisted_1 = {\n key: 0,\n id: \"collection-list\",\n class: \"collection-list\"\n};\nconst _hoisted_2 = { id: \"collection-select-container\" };\nconst _hoisted_3 = { class: \"option__desc\" };\nconst _hoisted_4 = { class: \"option__title\" };\nconst _hoisted_5 = { class: \"option__wrapper\" };\nconst _hoisted_6 = { class: \"option__title\" };\nconst _hoisted_7 = { class: \"hint\" };\nconst _hoisted_8 = {\n key: 0,\n class: \"error\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n const _component_NcSelect = resolveComponent(\"NcSelect\");\n const _component_NcCollectionListItem = resolveComponent(\"NcCollectionListItem\");\n return $options.collections && $props.type && $props.id ? (openBlock(), createElementBlock(\"ul\", _hoisted_1, [\n createElementVNode(\"li\", {\n onClick: _cache[3] || (_cache[3] = (...args) => $options.showSelect && $options.showSelect(...args))\n }, [\n _cache[4] || (_cache[4] = createElementVNode(\"div\", { class: \"avatar\" }, [\n createElementVNode(\"span\", { class: \"icon-projects\" })\n ], -1)),\n createElementVNode(\"div\", _hoisted_2, [\n createVNode(_component_NcSelect, {\n ref: \"select\",\n modelValue: $data.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $data.value = $event),\n \"aria-label-combobox\": $options.t(\"Add to a project\"),\n options: $options.options,\n placeholder: $options.placeholder,\n label: \"title\",\n limit: 5,\n onClose: _cache[1] || (_cache[1] = ($event) => $data.isSelectOpen = false),\n onOpen: _cache[2] || (_cache[2] = ($event) => $data.isSelectOpen = true),\n \"onOption:selected\": $options.select,\n onSearch: $setup.search\n }, {\n \"selected-option\": withCtx((option) => [\n createElementVNode(\"span\", _hoisted_3, [\n createElementVNode(\"span\", _hoisted_4, toDisplayString(option.title), 1)\n ])\n ]),\n option: withCtx((option) => [\n createElementVNode(\"span\", _hoisted_5, [\n option.class ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n class: normalizeClass([option.class, \"avatar\"])\n }, null, 2)) : option.method !== 2 ? (openBlock(), createBlock(_component_NcAvatar, {\n key: 1,\n allowPlaceholder: \"\",\n displayName: option.title\n }, null, 8, [\"displayName\"])) : createCommentVNode(\"\", true),\n createElementVNode(\"span\", _hoisted_6, toDisplayString(option.title), 1)\n ])\n ]),\n default: withCtx(() => [\n createElementVNode(\"p\", _hoisted_7, toDisplayString($options.t(\"Connect items to a project to make them easier to find\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\", \"aria-label-combobox\", \"options\", \"placeholder\", \"onOption:selected\", \"onSearch\"])\n ])\n ]),\n createVNode(Transition, { name: \"fade\" }, {\n default: withCtx(() => [\n $data.error ? (openBlock(), createElementBlock(\"li\", _hoisted_8, toDisplayString($data.error), 1)) : createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.collections, (collection) => {\n return openBlock(), createBlock(_component_NcCollectionListItem, {\n key: collection.id,\n collection,\n error: $data.collectionsError[collection.id],\n onRenameCollection: $options.renameCollectionFromItem,\n onRemoveResource: $setup.removeResourceFromCollection\n }, null, 8, [\"collection\", \"error\", \"onRenameCollection\", \"onRemoveResource\"]);\n }), 128))\n ])) : createCommentVNode(\"\", true);\n}\nconst NcCollectionList = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-0e169eff\"]]);\nexport {\n NcCollectionList as N\n};\n//# sourceMappingURL=NcCollectionList-DNfWulkK.mjs.map\n","import '../assets/NcCounterBubble-ZnteskDR.css';\nimport { defineComponent, computed, openBlock, createElementBlock, normalizeClass, toDisplayString } from \"vue\";\nimport { getCanonicalLocale } from \"@nextcloud/l10n\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = [\"title\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcCounterBubble\",\n props: {\n count: {},\n active: { type: Boolean },\n type: { default: \"\" },\n raw: { type: Boolean }\n },\n setup(__props) {\n const props = __props;\n const humanizedCount = computed(() => {\n if (props.raw) {\n return props.count.toString();\n }\n const formatter = new Intl.NumberFormat(getCanonicalLocale(), {\n notation: \"compact\",\n compactDisplay: \"short\"\n });\n return formatter.format(props.count);\n });\n const originalCountAsTitleIfNeeded = computed(() => {\n if (props.raw) {\n return;\n }\n const countAsString = props.count.toString();\n if (countAsString === humanizedCount.value) {\n return;\n }\n return countAsString;\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"counter-bubble__counter\", {\n active: __props.active,\n \"counter-bubble__counter--highlighted\": __props.type === \"highlighted\",\n \"counter-bubble__counter--outlined\": __props.type === \"outlined\"\n }]),\n title: originalCountAsTitleIfNeeded.value\n }, toDisplayString(humanizedCount.value), 11, _hoisted_1);\n };\n }\n});\nconst NcCounterBubble = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-36ffc13f\"]]);\nexport {\n NcCounterBubble as N\n};\n//# sourceMappingURL=NcCounterBubble-CV0YMrXW.mjs.map\n","import '../assets/NcDashboardWidget-nZuIL1UN.css';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, resolveComponent, createBlock, withCtx, renderSlot, createVNode, Fragment, renderList, toHandlers } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { r as register, z as t35, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcAvatar } from \"./NcAvatar-DX-Nk9Es.mjs\";\nimport { N as NcDashboardWidgetItem } from \"./NcDashboardWidgetItem-DxA6-V0R.mjs\";\nimport { N as NcEmptyContent } from \"./NcEmptyContent-CGAPqk4S.mjs\";\nconst _sfc_main$1 = {\n name: \"CheckIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\" };\nconst _hoisted_4 = { key: 0 };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon check-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$1);\n}\nconst Check = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1]]);\nregister(t35);\nconst _sfc_main = {\n name: \"NcDashboardWidget\",\n components: {\n NcAvatar,\n NcDashboardWidgetItem,\n NcEmptyContent,\n Check\n },\n props: {\n /**\n * An array containing the items to show (specific structure must be respected,\n * except if you override item rendering in the default slot).\n */\n items: {\n type: Array,\n default: () => {\n return [];\n }\n },\n /**\n * If this is set, a \"show more\" text is displayed on the widget's bottom.\n * It's a link pointing to this URL.\n */\n showMoreUrl: {\n type: String,\n default: \"\"\n },\n /**\n * The text of show more button.\n *\n * Expected to be in the form \"More {itemName} …\"\n */\n showMoreLabel: {\n type: String,\n default: t(\"More items …\")\n },\n /**\n * A boolean to put the widget in a loading state.\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * An object containing context menu entries that will be displayed for each item.\n */\n itemMenu: {\n type: Object,\n default: () => {\n return {};\n }\n },\n /**\n * Whether both the items and the empty content message are shown.\n * Usefull for e.g. showing \"No mentions\" and a list of elements.\n */\n showItemsAndEmptyContent: {\n type: Boolean,\n default: false\n },\n /**\n * The text to show in the empty content area.\n */\n emptyContentMessage: {\n type: String,\n default: \"\"\n },\n /**\n * The text to show in the half empty content area.\n */\n halfEmptyContentMessage: {\n type: String,\n default: \"\"\n }\n },\n computed: {\n // forward menu events to my parent\n handlers() {\n const h = {};\n for (const evName in this.itemMenu) {\n h[evName] = (it) => {\n this.$emit(evName, it);\n };\n }\n return h;\n },\n displayedItems() {\n const nbItems = this.showMoreUrl && this.items.length >= this.maxItemNumber ? this.maxItemNumber - 1 : this.maxItemNumber;\n return this.items.slice(0, nbItems);\n },\n showHalfEmptyContentArea() {\n return this.showItemsAndEmptyContent && this.halfEmptyContentString && this.items.length !== 0;\n },\n halfEmptyContentString() {\n return this.halfEmptyContentMessage || this.emptyContentMessage;\n },\n maxItemNumber() {\n return this.showItemsAndEmptyContent ? 5 : 7;\n },\n showMore() {\n return this.showMoreUrl && this.items.length >= this.maxItemNumber;\n }\n }\n};\nconst _hoisted_1 = { class: \"dashboard-widget\" };\nconst _hoisted_2 = { key: 1 };\nconst _hoisted_3 = [\"href\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_Check = resolveComponent(\"Check\");\n const _component_NcEmptyContent = resolveComponent(\"NcEmptyContent\");\n const _component_NcDashboardWidgetItem = resolveComponent(\"NcDashboardWidgetItem\");\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n return openBlock(), createElementBlock(\"div\", _hoisted_1, [\n $options.showHalfEmptyContentArea ? (openBlock(), createBlock(_component_NcEmptyContent, {\n key: 0,\n description: $options.halfEmptyContentString,\n class: \"half-screen\"\n }, {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"halfEmptyContentIcon\", {}, () => [\n createVNode(_component_Check)\n ], true)\n ]),\n _: 3\n }, 8, [\"description\"])) : createCommentVNode(\"\", true),\n createElementVNode(\"ul\", null, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.displayedItems, (item) => {\n return openBlock(), createElementBlock(\"li\", {\n key: item.id\n }, [\n renderSlot(_ctx.$slots, \"default\", { item }, () => [\n createVNode(_component_NcDashboardWidgetItem, mergeProps({ ref_for: true }, item, { itemMenu: $props.itemMenu }, toHandlers($options.handlers)), null, 16, [\"itemMenu\"])\n ], true)\n ]);\n }), 128))\n ]),\n $props.loading ? (openBlock(), createElementBlock(\"div\", _hoisted_2, [\n (openBlock(), createElementBlock(Fragment, null, renderList(7, (i) => {\n return createElementVNode(\"div\", {\n key: i,\n class: \"item-list__entry\"\n }, [\n createVNode(_component_NcAvatar, {\n class: \"item-avatar\",\n size: 44\n }),\n _cache[0] || (_cache[0] = createElementVNode(\"div\", { class: \"item__details\" }, [\n createElementVNode(\"h3\", null, \" \"),\n createElementVNode(\"p\", { class: \"message\" }, \"   \")\n ], -1))\n ]);\n }), 64))\n ])) : $props.items.length === 0 ? renderSlot(_ctx.$slots, \"empty-content\", { key: 2 }, () => [\n $props.emptyContentMessage ? (openBlock(), createBlock(_component_NcEmptyContent, {\n key: 0,\n description: $props.emptyContentMessage\n }, {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"emptyContentIcon\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"description\"])) : createCommentVNode(\"\", true)\n ], true) : $options.showMore ? (openBlock(), createElementBlock(\"a\", {\n key: 3,\n href: $props.showMoreUrl,\n target: \"_blank\",\n class: \"more\",\n tabindex: \"0\"\n }, toDisplayString($props.showMoreLabel), 9, _hoisted_3)) : createCommentVNode(\"\", true)\n ]);\n}\nconst NcDashboardWidget = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-8dabc003\"]]);\nexport {\n NcDashboardWidget as N\n};\n//# sourceMappingURL=NcDashboardWidget-DKZ8Mgt0.mjs.map\n","// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\n// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n\n// MIT license\n\nvar isWindowAvailable = typeof window !== 'undefined'\n\nisWindowAvailable &&\n (function () {\n var lastTime = 0\n var vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame =\n window[vendors[x] + 'RequestAnimationFrame']\n window.cancelAnimationFrame =\n window[vendors[x] + 'CancelAnimationFrame'] ||\n window[vendors[x] + 'CancelRequestAnimationFrame']\n }\n\n if (!window.requestAnimationFrame)\n window.requestAnimationFrame = function (callback, element) {\n var currTime = new Date().getTime()\n var timeToCall = Math.max(0, 16 - (currTime - lastTime))\n var id = window.setTimeout(function () {\n callback(currTime + timeToCall)\n }, timeToCall)\n\n lastTime = currTime + timeToCall\n return id\n }\n\n if (!window.cancelAnimationFrame)\n window.cancelAnimationFrame = function (id) {\n clearTimeout(id)\n }\n })()\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.EmojiMart=t():e.EmojiMart=t()}(\"undefined\"!=typeof self?self:this,(function(){return function(){var e={537:function(){\"undefined\"!=typeof window&&function(){for(var e=0,t=[\"ms\",\"moz\",\"webkit\",\"o\"],i=0;ie.length)&&(t=e.length);for(var i=0,n=new Array(t);i=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var o,s=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw o}}}}(Object.getOwnPropertyNames(e));try{for(i.s();!(t=i.n()).done;){var n=t.value,r=e[n];e[n]=r&&\"object\"===u(r)?d(r):r}}catch(e){i.e(e)}finally{i.f()}return Object.freeze(e)}var f,v,p=function(e){if(!e.compressed)return e;for(var t in e.compressed=!1,e.emojis){var i=e.emojis[t];for(var n in h)i[n]=i[h[n]],delete i[h[n]];i.short_names||(i.short_names=[]),i.short_names.unshift(t),i.sheet_x=i.sheet[0],i.sheet_y=i.sheet[1],delete i.sheet,i.text||(i.text=\"\"),i.added_in||(i.added_in=6),i.added_in=i.added_in.toFixed(1),i.search=m(i)}return d(e)},j=[\"+1\",\"grinning\",\"kissing_heart\",\"heart_eyes\",\"laughing\",\"stuck_out_tongue_winking_eye\",\"sweat_smile\",\"joy\",\"scream\",\"disappointed\",\"unamused\",\"weary\",\"sob\",\"sunglasses\",\"heart\",\"hankey\"],g={};function y(){v=!0,f=c.get(\"frequently\")}var w={add:function(e){v||y();var t=e.id;f||(f=g),f[t]||(f[t]=0),f[t]+=1,c.set(\"last\",t),c.set(\"frequently\",f)},get:function(e){if(v||y(),!f){g={};for(var t=[],i=Math.min(e,j.length),n=0;n',custom:'',flags:'',foods:'',nature:'',objects:'',smileys:'',people:' ',places:'',recent:'',symbols:''};function b(e,t,i,n,r,o,s,a){var c,u=\"function\"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=i,u._compiled=!0),n&&(u.functional=!0),o&&(u._scopeId=\"data-v-\"+o),s?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(s)},u._ssrRegister=c):r&&(c=a?function(){r.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:r),c)if(u.functional){u._injectStyles=c;var l=u.render;u.render=function(e,t){return c.call(t),l(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,c):[c]}return{exports:e,options:u}}var C=b({props:{i18n:{type:Object,required:!0},color:{type:String},categories:{type:Array,required:!0},activeCategory:{type:Object,default:function(){return{}}}},emits:[\"click\"],created:function(){this.svgs=_}},(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"emoji-mart-anchors\",attrs:{role:\"tablist\"}},e._l(e.categories,(function(i){return t(\"button\",{key:i.id,class:{\"emoji-mart-anchor\":!0,\"emoji-mart-anchor-selected\":i.id==e.activeCategory.id},style:{color:i.id==e.activeCategory.id?e.color:\"\"},attrs:{role:\"tab\",type:\"button\",\"aria-label\":i.name,\"aria-selected\":i.id==e.activeCategory.id,\"data-title\":e.i18n.categories[i.id]},on:{click:function(t){return e.$emit(\"click\",i)}}},[t(\"div\",{attrs:{\"aria-hidden\":\"true\"},domProps:{innerHTML:e._s(e.svgs[i.id])}}),e._v(\" \"),t(\"span\",{staticClass:\"emoji-mart-anchor-bar\",style:{backgroundColor:e.color},attrs:{\"aria-hidden\":\"true\"}})])})),0)}),[],!1,null,null,null),k=C.exports;function E(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function S(e){var t=function(e,t){if(\"object\"!=u(e)||!e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,\"string\");if(\"object\"!=u(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==u(t)?t:t+\"\"}function x(e,t){for(var i=0;i1114111||Math.floor(s)!=s)throw RangeError(\"Invalid code point: \"+s);s<=65535?i.push(s):(e=55296+((s-=65536)>>10),t=s%1024+56320,i.push(e,t)),(n+1===r||i.length>16384)&&(o+=String.fromCharCode.apply(null,i),i.length=0)}return o};function A(e){var t=e.split(\"-\").map((function(e){return\"0x\".concat(e)}));return P.apply(null,t)}function M(e){return e.reduce((function(e,t){return-1===e.indexOf(t)&&e.push(t),e}),[])}function I(e,t){var i=M(e),n=M(t);return i.filter((function(e){return n.indexOf(e)>=0}))}function F(e,t){var i={};for(var n in e){var r=e[n],o=r;Object.prototype.hasOwnProperty.call(t,n)&&(o=t[n]),\"object\"===u(o)&&(o=F(r,o)),i[n]=o}return i}function z(e,t){var i=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!i){if(Array.isArray(e)||(i=function(e,t){if(e){if(\"string\"==typeof e)return L(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===i&&e.constructor&&(i=e.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(e):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?L(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){i&&(e=i);var n=0,r=function(){};return{s:r,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var o,s=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw o}}}}function L(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i1&&void 0!==arguments[1]?arguments[1]:{},n=i.emojisToShowFilter,r=i.include,o=i.exclude,s=i.custom,a=i.recent,c=i.recentLength,u=void 0===c?20:c;E(this,e),this._data=p(t),this._emojisFilter=n||null,this._include=r||null,this._exclude=o||null,this._custom=s||[],this._recent=a||w.get(u),this._emojis={},this._nativeEmojis={},this._emoticons={},this._categories=[],this._recentCategory={id:\"recent\",name:\"Recent\",emojis:[]},this._customCategory={id:\"custom\",name:\"Custom\",emojis:[]},this._searchIndex={},this.buildIndex(),Object.freeze(this)}),[{key:\"buildIndex\",value:function(){var e=this,t=this._data.categories;if(this._include&&(t=(t=t.filter((function(t){return e._include.includes(t.id)}))).sort((function(t,i){var n=e._include.indexOf(t.id),r=e._include.indexOf(i.id);return nr?1:0}))),t.forEach((function(t){if(e.isCategoryNeeded(t.id)){var i={id:t.id,name:t.name,emojis:[]};t.emojis.forEach((function(t){var n=e.addEmoji(t);n&&i.emojis.push(n)})),i.emojis.length&&e._categories.push(i)}})),this.isCategoryNeeded(\"custom\")){if(this._custom.length>0){var i,n=z(this._custom);try{for(n.s();!(i=n.n()).done;){var r=i.value;this.addCustomEmoji(r)}}catch(e){n.e(e)}finally{n.f()}}this._customCategory.emojis.length&&this._categories.push(this._customCategory)}this.isCategoryNeeded(\"recent\")&&(this._recent.length&&this._recent.map((function(t){var i,n=z(e._customCategory.emojis);try{for(n.s();!(i=n.n()).done;){var r=i.value;if(r.id===t)return void e._recentCategory.emojis.push(r)}}catch(e){n.e(e)}finally{n.f()}e.hasEmoji(t)&&e._recentCategory.emojis.push(e.emoji(t))})),this._recentCategory.emojis.length&&this._categories.unshift(this._recentCategory))}},{key:\"findEmoji\",value:function(e,t){var i=e.match(T);if(i&&(e=i[1],i[2]&&(t=parseInt(i[2],10))),this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),this._emojis.hasOwnProperty(e)){var n=this._emojis[e];return t?n.getSkin(t):n}return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:\"categories\",value:function(){return this._categories}},{key:\"emoji\",value:function(e){this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]);var t=this._emojis[e];if(!t)throw new Error(\"Can not find emoji by id: \"+e);return t}},{key:\"firstEmoji\",value:function(){var e=this._emojis[Object.keys(this._emojis)[0]];if(!e)throw new Error(\"Can not get first emoji\");return e}},{key:\"hasEmoji\",value:function(e){return this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),!!this._emojis[e]}},{key:\"nativeEmoji\",value:function(e){return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:\"search\",value:function(e,t){var i=this;if(t||(t=75),!e.length)return null;if(\"-\"==e||\"-1\"==e)return[this.emoji(\"-1\")];var n,r=e.toLowerCase().split(/[\\s|,|\\-|_]+/);r.length>2&&(r=[r[0],r[1]]),n=r.map((function(e){for(var t=i._emojis,n=i._searchIndex,r=0,o=function(){var i=e[s];if(r++,n[i]||(n[i]={}),!(n=n[i]).results){var o={};for(var a in n.results=[],n.emojis={},t){var c=t[a],u=c._data.search,l=e.substr(0,r),h=u.indexOf(l);if(-1!=h){var m=h+1;l==a&&(m=0),n.results.push(c),n.emojis[a]=c,o[a]=m}}n.results.sort((function(e,t){return o[e.id]-o[t.id]}))}t=n.emojis},s=0;s1?I.apply(null,n):n.length?n[0]:[])&&o.length>t&&(o=o.slice(0,t)),o}},{key:\"addCustomEmoji\",value:function(e){var t=Object.assign({},e,{id:e.short_names[0],custom:!0});t.search||(t.search=m(t));var i=new N(t);return this._emojis[i.id]=i,this._customCategory.emojis.push(i),i}},{key:\"addEmoji\",value:function(e){var t=this,i=this._data.emojis[e];if(!this.isEmojiNeeded(i))return!1;var n=new N(i);if(this._emojis[e]=n,n.native&&(this._nativeEmojis[n.native]=n),n._skins)for(var r in n._skins){var o=n._skins[r];o.native&&(this._nativeEmojis[o.native]=o)}return n.emoticons&&n.emoticons.forEach((function(i){t._emoticons[i]||(t._emoticons[i]=e)})),n}},{key:\"isCategoryNeeded\",value:function(e){var t=!this._include||!this._include.length||this._include.indexOf(e)>-1,i=!(!this._exclude||!this._exclude.length)&&this._exclude.indexOf(e)>-1;return!(!t||i)}},{key:\"isEmojiNeeded\",value:function(e){return!this._emojisFilter||this._emojisFilter(e)}}])}(),N=function(){return O((function e(t){if(E(this,e),this._data=Object.assign({},t),this._skins=null,this._data.skin_variations)for(var i in this._skins=[],q){var n=q[i],r=this._data.skin_variations[n],o=Object.assign({},t);for(var s in r)o[s]=r[s];delete o.skin_variations,o.skin_tone=parseInt(i)+1,this._skins.push(new e(o))}for(var a in this._sanitized=D(this._data),this._sanitized)this[a]=this._sanitized[a];this.short_names=this._data.short_names,this.short_name=this._data.short_names[0],Object.freeze(this)}),[{key:\"getSkin\",value:function(e){return e&&\"native\"!=e&&this._skins?this._skins[e-1]:this}},{key:\"getPosition\",value:function(){var e=+(100/60*this._data.sheet_x).toFixed(2),t=+(100/60*this._data.sheet_y).toFixed(2);return\"\".concat(e,\"% \").concat(t,\"%\")}},{key:\"ariaLabel\",value:function(){return[this.native].concat(this.short_names).filter(Boolean).join(\", \")}}])}(),$=function(){return O((function e(t,i,n,r,o,s,a){E(this,e),this._emoji=t,this._native=r,this._skin=i,this._set=n,this._fallback=o,this.canRender=this._canRender(),this.cssClass=this._cssClass(),this.cssStyle=this._cssStyle(a),this.content=this._content(),this.title=!0===s?t.short_name:null,this.ariaLabel=t.ariaLabel(),Object.freeze(this)}),[{key:\"getEmoji\",value:function(){return this._emoji.getSkin(this._skin)}},{key:\"_canRender\",value:function(){return this._isCustom()||this._isNative()||this._hasEmoji()||this._fallback}},{key:\"_cssClass\",value:function(){return[\"emoji-set-\"+this._set,\"emoji-type-\"+this._emojiType()]}},{key:\"_cssStyle\",value:function(e){var t={};return this._isCustom()?t={backgroundImage:\"url(\"+this.getEmoji()._data.imageUrl+\")\",backgroundSize:\"100%\",width:e+\"px\",height:e+\"px\"}:this._hasEmoji()&&!this._isNative()&&(t={backgroundPosition:this.getEmoji().getPosition()}),e&&(t=this._isNative()?Object.assign(t,{fontSize:Math.round(.95*e*10)/10+\"px\"}):Object.assign(t,{width:e+\"px\",height:e+\"px\"})),t}},{key:\"_content\",value:function(){return this._isCustom()?\"\":this._isNative()?this.getEmoji().native:this._hasEmoji()?\"\":this._fallback?this._fallback(this.getEmoji()):null}},{key:\"_isNative\",value:function(){return this._native}},{key:\"_isCustom\",value:function(){return this.getEmoji().custom}},{key:\"_hasEmoji\",value:function(){if(!this.getEmoji()._data)return!1;var e=this.getEmoji()._data[\"has_img_\"+this._set];return void 0===e||e}},{key:\"_emojiType\",value:function(){return this._isCustom()?\"custom\":this._isNative()?\"native\":this._hasEmoji()?\"image\":\"fallback\"}}])}();function D(e){var t=e.name,i=e.short_names,n=e.skin_tone,r=e.skin_variations,o=e.emoticons,s=e.unified,a=e.custom,c=e.imageUrl,u=e.id||i[0],l=\":\".concat(u,\":\");return a?{id:u,name:t,colons:l,emoticons:o,custom:a,imageUrl:c}:(n&&(l+=\":skin-tone-\".concat(n,\":\")),{id:u,name:t,colons:l,emoticons:o,unified:s.toLowerCase(),skin:n||(r?1:null),native:A(s)})}function B(e,t,i){return(t=S(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}var H={native:{type:Boolean,default:!1},tooltip:{type:Boolean,default:!1},fallback:{type:Function},skin:{type:Number,default:1},set:{type:String,default:\"apple\"},emoji:{type:[String,Object],required:!0},size:{type:Number,default:null},tag:{type:String,default:\"span\"}},U={perLine:{type:Number,default:9},maxSearchResults:{type:Number,default:75},emojiSize:{type:Number,default:24},title:{type:String,default:\"Emoji Mart™\"},emoji:{type:String,default:\"department_store\"},color:{type:String,default:\"#ae65c5\"},set:{type:String,default:\"apple\"},skin:{type:Number,default:null},defaultSkin:{type:Number,default:1},native:{type:Boolean,default:!1},emojiTooltip:{type:Boolean,default:!1},autoFocus:{type:Boolean,default:!1},i18n:{type:Object,default:function(){return{}}},showPreview:{type:Boolean,default:!0},showSearch:{type:Boolean,default:!0},showCategories:{type:Boolean,default:!0},showSkinTones:{type:Boolean,default:!0},infiniteScroll:{type:Boolean,default:!0},pickerStyles:{type:Object,default:function(){return{}}}};function V(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function W(e){for(var t=1;t0},emojiObjects:function(){var e=this;return this.emojis.map((function(t){return{emojiObject:t,emojiView:new $(t,e.emojiProps.skin,e.emojiProps.set,e.emojiProps.native,e.emojiProps.fallback,e.emojiProps.emojiTooltip,e.emojiProps.emojiSize)}}))}},components:{Emoji:J}},(function(){var e=this,t=e._self._c;return e.isVisible&&(e.isSearch||e.hasResults)?t(\"section\",{class:{\"emoji-mart-category\":!0,\"emoji-mart-no-results\":!e.hasResults},attrs:{\"aria-label\":e.i18n.categories[e.id]}},[t(\"div\",{staticClass:\"emoji-mart-category-label\"},[t(\"h3\",{staticClass:\"emoji-mart-category-label\"},[e._v(e._s(e.i18n.categories[e.id]))])]),e._v(\" \"),e._l(e.emojiObjects,(function(i){var n=i.emojiObject,r=i.emojiView;return[r.canRender?t(\"button\",{key:n.id,staticClass:\"emoji-mart-emoji\",class:e.activeClass(n),attrs:{\"aria-label\":r.ariaLabel,role:\"option\",\"aria-selected\":\"false\",\"aria-posinset\":\"1\",\"aria-setsize\":\"1812\",type:\"button\",\"data-title\":n.short_name,title:r.title},on:{mouseenter:function(t){e.emojiProps.onEnter(r.getEmoji())},mouseleave:function(t){e.emojiProps.onLeave(r.getEmoji())},click:function(t){e.emojiProps.onClick(r.getEmoji())}}},[t(\"span\",{class:r.cssClass,style:r.cssStyle},[e._v(e._s(r.content))])]):e._e()]})),e._v(\" \"),e.hasResults?e._e():t(\"div\",[t(\"emoji\",{attrs:{data:e.data,emoji:\"sleuth_or_spy\",native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}}),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-no-results-label\"},[e._v(e._s(e.i18n.notfound))])],1)],2):e._e()}),[],!1,null,null,null).exports,Z=b({props:{skin:{type:Number,required:!0}},emits:[\"change\"],data:function(){return{opened:!1}},methods:{onClick:function(e){this.opened&&e!=this.skin&&this.$emit(\"change\",e),this.opened=!this.opened}}},(function(){var e=this,t=e._self._c;return t(\"div\",{class:{\"emoji-mart-skin-swatches\":!0,\"emoji-mart-skin-swatches-opened\":e.opened}},e._l(6,(function(i){return t(\"span\",{key:i,class:{\"emoji-mart-skin-swatch\":!0,\"emoji-mart-skin-swatch-selected\":e.skin==i}},[t(\"span\",{class:\"emoji-mart-skin emoji-mart-skin-tone-\"+i,on:{click:function(t){return e.onClick(i)}}})])})),0)}),[],!1,null,null,null).exports,G=b({props:{data:{type:Object,required:!0},title:{type:String,required:!0},emoji:{type:[String,Object]},idleEmoji:{type:[String,Object],required:!0},showSkinTones:{type:Boolean,default:!0},emojiProps:{type:Object,required:!0},skinProps:{type:Object,required:!0},onSkinChange:{type:Function,required:!0}},computed:{emojiData:function(){return this.emoji?this.emoji:{}},emojiShortNames:function(){return this.emojiData.short_names},emojiEmoticons:function(){return this.emojiData.emoticons}},components:{Emoji:J,Skins:Z}},(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"emoji-mart-preview\"},[e.emoji?[t(\"div\",{staticClass:\"emoji-mart-preview-emoji\"},[t(\"emoji\",{attrs:{data:e.data,emoji:e.emoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-preview-data\"},[t(\"div\",{staticClass:\"emoji-mart-preview-name\"},[e._v(e._s(e.emoji.name))]),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-preview-shortnames\"},e._l(e.emojiShortNames,(function(i){return t(\"span\",{key:i,staticClass:\"emoji-mart-preview-shortname\"},[e._v(\":\"+e._s(i)+\":\")])})),0),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-preview-emoticons\"},e._l(e.emojiEmoticons,(function(i){return t(\"span\",{key:i,staticClass:\"emoji-mart-preview-emoticon\"},[e._v(e._s(i))])})),0)])]:[t(\"div\",{staticClass:\"emoji-mart-preview-emoji\"},[t(\"emoji\",{attrs:{data:e.data,emoji:e.idleEmoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-preview-data\"},[t(\"span\",{staticClass:\"emoji-mart-title-label\"},[e._v(e._s(e.title))])]),e._v(\" \"),e.showSkinTones?t(\"div\",{staticClass:\"emoji-mart-preview-skins\"},[t(\"skins\",{attrs:{skin:e.skinProps.skin},on:{change:function(t){return e.onSkinChange(t)}}})],1):e._e()]],2)}),[],!1,null,null,null).exports,K=b({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},autoFocus:{type:Boolean,default:!1},onSearch:{type:Function,required:!0},onArrowLeft:{type:Function,required:!1},onArrowRight:{type:Function,required:!1},onArrowDown:{type:Function,required:!1},onArrowUp:{type:Function,required:!1},onEnter:{type:Function,required:!1}},emits:[\"search\",\"enter\",\"arrowUp\",\"arrowDown\",\"arrowRight\",\"arrowLeft\"],data:function(){return{value:\"\"}},computed:{emojiIndex:function(){return this.data}},watch:{value:function(){this.$emit(\"search\",this.value)}},methods:{clear:function(){this.value=\"\"}},mounted:function(){var e=this.$el.querySelector(\"input\");this.autoFocus&&e.focus()}},(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"emoji-mart-search\"},[t(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.value,expression:\"value\"}],attrs:{type:\"text\",placeholder:e.i18n.search,role:\"textbox\",\"aria-autocomplete\":\"list\",\"aria-owns\":\"emoji-mart-list\",\"aria-label\":\"Search for an emoji\",\"aria-describedby\":\"emoji-mart-search-description\"},domProps:{value:e.value},on:{keydown:[function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"left\",37,t.key,[\"Left\",\"ArrowLeft\"])||\"button\"in t&&0!==t.button?null:function(t){return e.$emit(\"arrowLeft\",t)}.apply(null,arguments)},function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"right\",39,t.key,[\"Right\",\"ArrowRight\"])||\"button\"in t&&2!==t.button?null:function(){return e.$emit(\"arrowRight\")}.apply(null,arguments)},function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"down\",40,t.key,[\"Down\",\"ArrowDown\"])?null:function(){return e.$emit(\"arrowDown\")}.apply(null,arguments)},function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"up\",38,t.key,[\"Up\",\"ArrowUp\"])?null:function(t){return e.$emit(\"arrowUp\",t)}.apply(null,arguments)},function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"enter\",13,t.key,\"Enter\")?null:function(){return e.$emit(\"enter\")}.apply(null,arguments)}],input:function(t){t.target.composing||(e.value=t.target.value)}}}),e._v(\" \"),t(\"span\",{staticClass:\"hidden\",attrs:{id:\"emoji-picker-search-description\"}},[e._v(\"Use the left, right, up and down arrow keys to navigate the emoji search\\n results.\")])])}),[],!1,null,null,null),Q=K.exports;function Y(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i0})),this._categories[0].first=!0,Object.freeze(this._categories),this.activeCategory=this._categories[0],this.searchEmojis=null,this.previewEmoji=null,this.previewEmojiCategoryIdx=0,this.previewEmojiIdx=-1}),[{key:\"onScroll\",value:function(){var e=this._vm.$refs.scroll;if(e){for(var t=e.scrollTop,i=this.filteredCategories[0],n=0,r=this.filteredCategories.length;nt)break;i=o}this.activeCategory=i}}},{key:\"allCategories\",get:function(){return this._categories}},{key:\"filteredCategories\",get:function(){return this.searchEmojis?[{id:\"search\",name:\"Search\",emojis:this.searchEmojis}]:this._categories.filter((function(e){return e.emojis.length>0}))}},{key:\"previewEmojiCategory\",get:function(){return this.previewEmojiCategoryIdx>=0?this.filteredCategories[this.previewEmojiCategoryIdx]:null}},{key:\"onAnchorClick\",value:function(e){var t=this;if(!this.searchEmojis){var i=this.filteredCategories.indexOf(e),n=this._vm.getCategoryComponent(i);this._vm.infiniteScroll?function(){if(n){var i=n.$el.offsetTop;e.first&&(i=0),t._vm.$refs.scroll.scrollTop=i}}():this.activeCategory=this.filteredCategories[i]}}},{key:\"onSearch\",value:function(e){var t=this._data.search(e,this.maxSearchResults);this.searchEmojis=t,this.previewEmojiCategoryIdx=0,this.previewEmojiIdx=0,this.updatePreviewEmoji()}},{key:\"onEmojiEnter\",value:function(e){this.previewEmoji=e,this.previewEmojiIdx=-1,this.previewEmojiCategoryIdx=-1}},{key:\"onEmojiLeave\",value:function(e){this.previewEmoji=null}},{key:\"onArrowLeft\",value:function(){this.previewEmojiIdx>0?this.previewEmojiIdx-=1:(this.previewEmojiCategoryIdx-=1,this.previewEmojiCategoryIdx<0?this.previewEmojiCategoryIdx=0:this.previewEmojiIdx=this.filteredCategories[this.previewEmojiCategoryIdx].emojis.length-1),this.updatePreviewEmoji()}},{key:\"onArrowRight\",value:function(){this.previewEmojiIdx=this.filteredCategories.length?this.previewEmojiCategoryIdx=this.filteredCategories.length-1:this.previewEmojiIdx=0),this.updatePreviewEmoji()}},{key:\"onArrowDown\",value:function(){if(-1==this.previewEmojiIdx)return this.onArrowRight();var e=this.filteredCategories[this.previewEmojiCategoryIdx].emojis.length,t=this._perLine;this.previewEmojiIdx+t>e&&(t=e%this._perLine);for(var i=0;i0?this.filteredCategories[this.previewEmojiCategoryIdx-1].emojis.length%this._perLine:0);for(var t=0;tn+t.scrollTop&&(t.scrollTop+=i.offsetHeight),i&&i.offsetTop {\n EmojiSkinTone2[EmojiSkinTone2[\"Neutral\"] = 1] = \"Neutral\";\n EmojiSkinTone2[EmojiSkinTone2[\"Light\"] = 2] = \"Light\";\n EmojiSkinTone2[EmojiSkinTone2[\"MediumLight\"] = 3] = \"MediumLight\";\n EmojiSkinTone2[EmojiSkinTone2[\"Medium\"] = 4] = \"Medium\";\n EmojiSkinTone2[EmojiSkinTone2[\"MediumDark\"] = 5] = \"MediumDark\";\n EmojiSkinTone2[EmojiSkinTone2[\"Dark\"] = 6] = \"Dark\";\n return EmojiSkinTone2;\n})(EmojiSkinTone || {});\nfunction emojiSearch(query, maxResults = 10) {\n if (!emojiIndex) {\n emojiIndex = new EmojiIndex(data);\n }\n const currentSkinTone = getCurrentSkinTone();\n let results;\n if (query) {\n results = emojiIndex.search(`:${query}`, maxResults);\n if (results.length < maxResults) {\n results = results.concat(emojiIndex.search(query, maxResults - results.length));\n }\n } else {\n results = frequently.get(maxResults).map((id) => emojiIndex.emoji(id)) || [];\n }\n return results.map((emoji) => emoji.getSkin(currentSkinTone));\n}\nfunction emojiAddRecent(emojiOrEmojiData) {\n let emojiData;\n if (typeof emojiOrEmojiData === \"string\") {\n if (!emojiIndex) {\n emojiIndex = new EmojiIndex(data);\n }\n emojiData = emojiIndex.findEmoji(emojiOrEmojiData);\n } else {\n emojiData = emojiOrEmojiData;\n }\n if (emojiData && \"id\" in emojiData) {\n frequently.add(emojiData);\n }\n}\nfunction getCurrentSkinTone() {\n const skinTone = Number.parseInt(storage.getItem(\"NcEmojiPicker::currentSkinTone\") ?? \"1\");\n return Math.min(\n Math.max(\n skinTone,\n 1\n /* Neutral */\n ),\n 6\n /* Dark */\n );\n}\nfunction setCurrentSkinTone(skinTone) {\n skinTone = Math.min(\n Math.max(\n skinTone,\n 1\n /* Neutral */\n ),\n 6\n /* Dark */\n );\n storage.setItem(\"NcEmojiPicker::currentSkinTone\", skinTone.toString());\n}\nexport {\n EmojiSkinTone as E,\n emojiSearch as a,\n emojiAddRecent as e,\n getCurrentSkinTone as g,\n setCurrentSkinTone as s\n};\n//# sourceMappingURL=emoji-C8k9NUlo.mjs.map\n","import '../assets/NcEmojiPicker-vNKR9S87.css';\nimport data from \"emoji-mart-vue-fast/data/all.json\";\nimport { Picker, Emoji, EmojiIndex } from \"emoji-mart-vue-fast/src/index.js\";\nimport { isFocusable } from \"tabbable\";\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, resolveComponent, createBlock, withCtx, createVNode, withKeys, withModifiers, createSlots, normalizeStyle, renderSlot, normalizeProps, guardReactiveProps } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { N as NcColorPicker } from \"./NcColorPicker-CGE4Kei4.mjs\";\nimport { u as useTrapStackControl } from \"./useTrapStackControl-B6cEicto.mjs\";\nimport { s as setCurrentSkinTone, g as getCurrentSkinTone } from \"./emoji-C8k9NUlo.mjs\";\nimport { r as register, q as t43, s as t37, u as t16, v as t5, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { C as Color } from \"./colors-BDeMBgfq.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { N as NcPopover } from \"./NcPopover-CObDh89q.mjs\";\nimport { _ as _sfc_main$2 } from \"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r.mjs\";\nconst _sfc_main$1 = {\n name: \"CircleIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon circle-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$1);\n}\nconst IconCircle = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1]]);\nregister(t5, t16, t37, t43);\nlet emojiIndex;\nconst i18n = {\n search: t(\"Search emoji\"),\n notfound: t(\"No emoji found\"),\n categories: {\n search: t(\"Search results\"),\n recent: t(\"Frequently used\"),\n smileys: t(\"Smileys & Emotion\"),\n people: t(\"People & Body\"),\n nature: t(\"Animals & Nature\"),\n foods: t(\"Food & Drink\"),\n activity: t(\"Activities\"),\n places: t(\"Travel & Places\"),\n objects: t(\"Objects\"),\n symbols: t(\"Symbols\"),\n flags: t(\"Flags\"),\n custom: t(\"Custom\")\n }\n};\nconst skinTonePalette = [\n new Color(255, 222, 52, t(\"Neutral skin color\")),\n new Color(228, 205, 166, t(\"Light skin tone\")),\n new Color(250, 221, 192, t(\"Medium light skin tone\")),\n new Color(174, 129, 87, t(\"Medium skin tone\")),\n new Color(158, 113, 88, t(\"Medium dark skin tone\")),\n new Color(96, 79, 69, t(\"Dark skin tone\"))\n];\nconst _sfc_main = {\n name: \"NcEmojiPicker\",\n components: {\n IconCircle,\n NcButton,\n NcColorPicker,\n NcPopover,\n NcTextField: _sfc_main$2,\n Emoji,\n Picker\n },\n props: {\n /**\n * The emoji-set\n */\n activeSet: {\n type: String,\n default: \"native\"\n },\n /**\n * Show preview section when hovering emoji\n */\n showPreview: {\n type: Boolean,\n default: false\n },\n /**\n * Allow unselecting the selected emoji\n */\n allowUnselect: {\n type: Boolean,\n default: false\n },\n /**\n * Selected emoji to allow unselecting\n */\n selectedEmoji: {\n type: String,\n default: \"\"\n },\n /**\n * The fallback emoji in the preview section\n */\n previewFallbackEmoji: {\n type: String,\n default: \"grinning\"\n },\n /**\n * The fallback text in the preview section\n */\n previewFallbackName: {\n type: String,\n default: t(\"Pick an emoji\")\n },\n /**\n * Whether to close the emoji picker after picking one\n */\n closeOnSelect: {\n type: Boolean,\n default: true\n },\n /**\n * Selector for the popover container\n */\n container: {\n type: [Boolean, String, Object, Element],\n default: \"body\"\n }\n },\n emits: [\n \"select\",\n \"selectData\",\n \"unselect\"\n ],\n setup() {\n if (!emojiIndex) {\n emojiIndex = new EmojiIndex(data);\n }\n return {\n // Non-reactive constants\n emojiIndex,\n skinTonePalette,\n i18n\n };\n },\n data() {\n const currentSkinTone = getCurrentSkinTone();\n return {\n /**\n * The current active color from the skin tone palette\n */\n currentColor: skinTonePalette[currentSkinTone - 1],\n /**\n * The current active skin tone\n *\n * @type {1|2|3|4|5|6}\n */\n currentSkinTone,\n search: \"\",\n open: false\n };\n },\n computed: {\n native() {\n return this.activeSet === \"native\";\n }\n },\n created() {\n useTrapStackControl(() => this.open);\n },\n methods: {\n t,\n clearSearch() {\n this.search = \"\";\n this.$refs.search.focus();\n },\n /**\n * Update the current skin tone by the result of the color picker\n *\n * @param {string} color Color set\n */\n onChangeSkinTone(color) {\n const index = this.skinTonePalette.findIndex((tone) => tone.color.toLowerCase() === color.toLowerCase());\n if (index > -1) {\n this.currentSkinTone = index + 1;\n this.currentColor = this.skinTonePalette[index];\n setCurrentSkinTone(this.currentSkinTone);\n }\n },\n select(emojiObject) {\n this.$emit(\"select\", emojiObject.native);\n this.$emit(\"selectData\", emojiObject);\n if (this.closeOnSelect) {\n this.open = false;\n }\n },\n unselect() {\n this.$emit(\"unselect\");\n },\n afterShow() {\n this.$refs.search.focus();\n },\n afterHide() {\n if (!document.activeElement || this.$refs.picker.$el.contains(document.activeElement) || !isFocusable(document.activeElement)) {\n this.$refs.popover.$el.querySelector('button, [role=\"button\"]')?.focus();\n }\n },\n /**\n * Manually handle Tab navigation skipping emoji buttons.\n * Navigation over emojis is handled by Arrow keys.\n *\n * @param {KeyboardEvent} event - Keyboard event\n */\n handleTabNavigationSkippingEmojis(event) {\n const current = event.target;\n const focusable = Array.from(this.$refs.picker.$el.querySelectorAll(\"button:not(.emoji-mart-emoji), input\"));\n if (!event.shiftKey) {\n const nextNode = focusable.find((node) => current.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_FOLLOWING) || focusable[0];\n nextNode.focus();\n } else {\n const prevNode = focusable.findLast((node) => current.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_PRECEDING) || focusable.at(-1);\n prevNode.focus();\n }\n },\n /**\n * Handle arrow navigation via 's handlers with scroll bug fix\n *\n * @param {'onArrowLeft' | 'onArrowRight' | 'onArrowDown' | 'onArrowUp'} originalHandlerName - Picker's arrow keydown handler name\n * @param {KeyboardEvent} event - Keyboard event\n */\n async callPickerArrowHandlerWithScrollFix(originalHandlerName, event) {\n this.$refs.picker[originalHandlerName](event);\n await this.$nextTick();\n const selectedEmoji = this.$refs.picker.$el.querySelector(\".emoji-mart-emoji-selected\");\n selectedEmoji?.scrollIntoView({\n block: \"center\",\n inline: \"center\"\n });\n }\n }\n};\nconst _hoisted_1 = { class: \"nc-emoji-picker-container\" };\nconst _hoisted_2 = { class: \"search__wrapper\" };\nconst _hoisted_3 = { class: \"emoji-mart-category-label\" };\nconst _hoisted_4 = { class: \"emoji-mart-category-label\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcTextField = resolveComponent(\"NcTextField\");\n const _component_IconCircle = resolveComponent(\"IconCircle\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n const _component_NcColorPicker = resolveComponent(\"NcColorPicker\");\n const _component_Emoji = resolveComponent(\"Emoji\");\n const _component_Picker = resolveComponent(\"Picker\");\n const _component_NcPopover = resolveComponent(\"NcPopover\");\n return openBlock(), createBlock(_component_NcPopover, {\n ref: \"popover\",\n shown: $data.open,\n \"onUpdate:shown\": _cache[6] || (_cache[6] = ($event) => $data.open = $event),\n container: $props.container,\n popupRole: \"dialog\",\n noFocusTrap: true,\n onAfterShow: $options.afterShow,\n onAfterHide: $options.afterHide\n }, {\n trigger: withCtx((slotProps) => [\n renderSlot(_ctx.$slots, \"default\", normalizeProps(guardReactiveProps(slotProps)), void 0, true)\n ]),\n default: withCtx(() => [\n createElementVNode(\"div\", _hoisted_1, [\n createVNode(_component_Picker, mergeProps({\n ref: \"picker\",\n color: \"var(--color-primary-element)\",\n data: $setup.emojiIndex,\n emoji: $props.previewFallbackEmoji,\n i18n: $setup.i18n,\n native: $options.native,\n emojiSize: 20,\n perLine: 8,\n pickerStyles: { width: \"320px\" },\n showPreview: $props.showPreview,\n skin: $data.currentSkinTone,\n showSkinTones: false,\n title: $props.previewFallbackName,\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-label\": $options.t(\"Emoji picker\")\n }, _ctx.$attrs, {\n onKeydown: withKeys(withModifiers($options.handleTabNavigationSkippingEmojis, [\"prevent\"]), [\"tab\"]),\n onSelect: $options.select\n }), createSlots({\n searchTemplate: withCtx(({ onSearch }) => [\n createElementVNode(\"div\", _hoisted_2, [\n createVNode(_component_NcTextField, {\n ref: \"search\",\n modelValue: $data.search,\n \"onUpdate:modelValue\": [\n _cache[0] || (_cache[0] = ($event) => $data.search = $event),\n ($event) => onSearch($data.search)\n ],\n class: \"search\",\n label: $options.t(\"Search\"),\n labelVisible: true,\n placeholder: $setup.i18n.search,\n trailingButtonIcon: \"close\",\n trailingButtonLabel: $options.t(\"Clear search\"),\n showTrailingButton: $data.search !== \"\",\n onKeydown: [\n _cache[1] || (_cache[1] = withKeys(($event) => $options.callPickerArrowHandlerWithScrollFix(\"onArrowLeft\", $event), [\"left\"])),\n _cache[2] || (_cache[2] = withKeys(($event) => $options.callPickerArrowHandlerWithScrollFix(\"onArrowRight\", $event), [\"right\"])),\n _cache[3] || (_cache[3] = withKeys(($event) => $options.callPickerArrowHandlerWithScrollFix(\"onArrowDown\", $event), [\"down\"])),\n _cache[4] || (_cache[4] = withKeys(($event) => $options.callPickerArrowHandlerWithScrollFix(\"onArrowUp\", $event), [\"up\"])),\n _cache[5] || (_cache[5] = withKeys(($event) => _ctx.$refs.picker.onEnter($event), [\"enter\"]))\n ],\n onTrailingButtonClick: ($event) => {\n $options.clearSearch();\n onSearch(\"\");\n }\n }, null, 8, [\"modelValue\", \"label\", \"placeholder\", \"trailingButtonLabel\", \"showTrailingButton\", \"onTrailingButtonClick\", \"onUpdate:modelValue\"]),\n createVNode(_component_NcColorPicker, {\n paletteOnly: \"\",\n container: $props.container,\n palette: $setup.skinTonePalette,\n modelValue: $data.currentColor.color,\n \"onUpdate:modelValue\": $options.onChangeSkinTone\n }, {\n default: withCtx(() => [\n createVNode(_component_NcButton, {\n \"aria-label\": $options.t(\"Skin tone\"),\n variant: \"tertiary-no-background\"\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconCircle, {\n style: normalizeStyle({ color: $data.currentColor.color }),\n title: $data.currentColor.name,\n size: 20\n }, null, 8, [\"style\", \"title\"])\n ]),\n _: 1\n }, 8, [\"aria-label\"])\n ]),\n _: 1\n }, 8, [\"container\", \"palette\", \"modelValue\", \"onUpdate:modelValue\"])\n ])\n ]),\n _: 2\n }, [\n $props.allowUnselect && $props.selectedEmoji ? {\n name: \"customCategory\",\n fn: withCtx(() => [\n createElementVNode(\"div\", _hoisted_3, [\n createElementVNode(\"h3\", _hoisted_4, toDisplayString($options.t(\"Selected\")), 1)\n ]),\n createVNode(_component_Emoji, {\n class: \"emoji-selected\",\n data: $setup.emojiIndex,\n emoji: $props.selectedEmoji,\n native: \"\",\n size: 32,\n onClick: $options.unselect\n }, null, 8, [\"data\", \"emoji\", \"onClick\"]),\n createVNode(_component_Emoji, {\n class: \"emoji-delete\",\n data: $setup.emojiIndex,\n emoji: \":x:\",\n native: \"\",\n size: 10,\n onClick: $options.unselect\n }, null, 8, [\"data\", \"onClick\"])\n ]),\n key: \"0\"\n } : void 0\n ]), 1040, [\"data\", \"emoji\", \"i18n\", \"native\", \"showPreview\", \"skin\", \"title\", \"aria-label\", \"onKeydown\", \"onSelect\"])\n ])\n ]),\n _: 3\n }, 8, [\"shown\", \"container\", \"onAfterShow\", \"onAfterHide\"]);\n}\nconst NcEmojiPicker = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-11acdb77\"]]);\nexport {\n NcEmojiPicker as N\n};\n//# sourceMappingURL=NcEmojiPicker-R2GSAiCW.mjs.map\n","import '../assets/NcFilePicker-CGYCxNdK.css';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, defineComponent, useTemplateRef, computed, normalizeClass, createVNode, withCtx, createBlock, createTextVNode, unref, Fragment, renderList, renderSlot, nextTick } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-BO5T5ePT.mjs\";\nimport { N as NcActionCaption } from \"./NcActionCaption-f7L9gBlT.mjs\";\nimport { N as NcActions } from \"./NcActions-DY4GGONi.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { N as NcLoadingIcon } from \"./NcLoadingIcon-BOVpFVQz.mjs\";\nimport { getGettextBuilder } from \"@nextcloud/l10n/gettext\";\nconst _sfc_main$3 = {\n name: \"FolderUploadIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$3 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$2 = { d: \"M20,6A2,2 0 0,1 22,8V18A2,2 0 0,1 20,20H4A2,2 0 0,1 2,18V6A2,2 0 0,1 4,4H10L12,6H20M10.75,13H14V17H16V13H19.25L15,8.75\" };\nconst _hoisted_4$2 = { key: 0 };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon folder-upload-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$2, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$2, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$2))\n ], 16, _hoisted_1$3);\n}\nconst IconFolderUpload = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$2]]);\nconst _sfc_main$2 = {\n name: \"PlusIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$2 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon plus-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$2);\n}\nconst IconPlus = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$1]]);\nconst _sfc_main$1 = {\n name: \"UploadIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3 = { d: \"M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z\" };\nconst _hoisted_4 = { key: 0 };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon upload-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2))\n ], 16, _hoisted_1$1);\n}\nconst IconUpload = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render]]);\n/*!\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst gtBuilder = getGettextBuilder().detectLanguage();\nconst gt = gtBuilder.build();\ngt.ngettext.bind(gt);\nconst t = gt.gettext.bind(gt);\nconst _hoisted_1 = [\"accept\", \"multiple\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcFilePicker\",\n props: {\n accept: { default: void 0 },\n actionCaption: { default: \"\" },\n actions: { default: () => [] },\n directory: { type: Boolean },\n directoryOnly: { type: Boolean },\n disabled: { type: Boolean },\n iconOnly: { type: Boolean },\n label: { default: void 0 },\n loading: { type: Boolean },\n multiple: { type: Boolean },\n variant: { default: \"primary\" }\n },\n emits: [\"pick\"],\n setup(__props, { expose: __expose, emit: __emit }) {\n const props = __props;\n const emit = __emit;\n __expose({\n reset\n });\n const formElement = useTemplateRef(\"form\");\n const inputElement = useTemplateRef(\"input\");\n const currentLabel = computed(() => {\n if (props.loading) {\n return t(\"Uploading …\");\n } else if (props.label) {\n return props.label;\n } else if (props.directoryOnly) {\n return t(\"Pick folder\");\n }\n return props.multiple ? t(\"Pick files\") : t(\"Pick file\");\n });\n const canUploadFolders = computed(() => {\n return (props.directory || props.directoryOnly) && \"webkitdirectory\" in HTMLInputElement.prototype;\n });\n function triggerPickFiles(uploadFolders) {\n reset();\n if (canUploadFolders.value) {\n inputElement.value.webkitdirectory = uploadFolders;\n }\n nextTick(() => inputElement.value.click());\n }\n function onPick() {\n const files = inputElement.value?.files ? Array.from(inputElement.value.files) : [];\n emit(\"pick\", files);\n }\n function reset() {\n formElement.value.reset();\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"form\", {\n ref: \"form\",\n class: normalizeClass(_ctx.$style.filePicker)\n }, [\n createVNode(NcActions, {\n \"aria-label\": currentLabel.value,\n disabled: __props.disabled || __props.loading,\n menuName: __props.iconOnly ? void 0 : currentLabel.value,\n forceName: !__props.iconOnly,\n variant: __props.variant\n }, {\n icon: withCtx(() => [\n !__props.loading ? renderSlot(_ctx.$slots, \"icon\", { key: 0 }, () => [\n createVNode(IconPlus, { size: 20 })\n ]) : (openBlock(), createBlock(NcLoadingIcon, { key: 1 }))\n ]),\n default: withCtx(() => [\n __props.actionCaption ? (openBlock(), createBlock(NcActionCaption, {\n key: 0,\n name: __props.actionCaption\n }, null, 8, [\"name\"])) : createCommentVNode(\"\", true),\n !__props.directoryOnly ? (openBlock(), createBlock(NcActionButton, {\n key: 1,\n closeAfterClick: \"\",\n onClick: _cache[0] || (_cache[0] = ($event) => triggerPickFiles(false))\n }, {\n icon: withCtx(() => [\n createVNode(IconUpload, { size: 20 })\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(canUploadFolders.value || _ctx.$slots.actions ? __props.multiple ? unref(t)(\"Upload files\") : unref(t)(\"Upload file\") : currentLabel.value), 1)\n ]),\n _: 1\n })) : createCommentVNode(\"\", true),\n canUploadFolders.value ? (openBlock(), createBlock(NcActionButton, {\n key: 2,\n closeAfterClick: \"\",\n onClick: _cache[1] || (_cache[1] = ($event) => triggerPickFiles(true))\n }, {\n icon: withCtx(() => [\n createVNode(IconFolderUpload, {\n style: { \"color\": \"var(--color-primary-element)\" },\n size: 20\n })\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(!__props.directoryOnly || _ctx.$slots.actions ? unref(t)(\"Upload folder\") : currentLabel.value), 1)\n ]),\n _: 1\n })) : createCommentVNode(\"\", true),\n (openBlock(true), createElementBlock(Fragment, null, renderList(__props.actions, (group) => {\n return openBlock(), createElementBlock(Fragment, null, [\n group.caption ? (openBlock(), createBlock(NcActionCaption, {\n key: group.caption,\n name: group.caption\n }, null, 8, [\"name\"])) : createCommentVNode(\"\", true),\n (openBlock(true), createElementBlock(Fragment, null, renderList(group.actions ?? [group], (action) => {\n return openBlock(), createBlock(NcActionButton, {\n key: action.label,\n closeAfterClick: \"\",\n onClick: action.onClick\n }, {\n icon: withCtx(() => [\n createVNode(NcIconSvgWrapper, {\n svg: action.iconSvg\n }, null, 8, [\"svg\"])\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(action.label), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"]);\n }), 128))\n ], 64);\n }), 256))\n ]),\n _: 3\n }, 8, [\"aria-label\", \"disabled\", \"menuName\", \"forceName\", \"variant\"]),\n createElementVNode(\"input\", {\n ref: \"input\",\n accept: __props.accept?.join(\", \"),\n \"aria-hidden\": \"true\",\n class: \"hidden-visually\",\n multiple: __props.multiple,\n type: \"file\",\n onChange: onPick\n }, null, 40, _hoisted_1),\n renderSlot(_ctx.$slots, \"default\")\n ], 2);\n };\n }\n});\nconst filePicker = \"_filePicker_fNHZd\";\nconst style0 = {\n filePicker\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcFilePicker = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcFilePicker as N\n};\n//# sourceMappingURL=NcFilePicker-C7Xs8E2Q.mjs.map\n","import { d as mdiCheck, e as mdiContentCopy } from \"./mdi-CpchYUUV.mjs\";\nimport { ref, computed, toValue } from \"vue\";\nimport { r as register, e as t22, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nregister(t22);\n/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst DELAY = 2e3;\nfunction useCopy(content) {\n const isCopied = ref(false);\n const icon = computed(() => isCopied.value ? mdiCheck : mdiContentCopy);\n const altText = computed(() => isCopied.value ? t(\"Copied\") : t(\"Copy to clipboard\"));\n async function copy() {\n if (isCopied.value) {\n return;\n }\n const value = toValue(content);\n try {\n await navigator.clipboard.writeText(value);\n } catch {\n prompt(\"\", value);\n }\n isCopied.value = true;\n setTimeout(() => {\n isCopied.value = false;\n }, DELAY);\n }\n return {\n isCopied,\n copy,\n icon,\n altText\n };\n}\nexport {\n useCopy as u\n};\n//# sourceMappingURL=useCopy-PckLYUAU.mjs.map\n","import '../assets/NcKbd-B2M-oGN9.css';\nimport { defineComponent, computed, openBlock, createElementBlock, normalizeClass, renderSlot, createTextVNode, toDisplayString } from \"vue\";\nimport { r as register, o as t7, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isMac } from \"./platform-CC2ecGvV.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t7);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcKbd\",\n props: {\n symbol: { default: () => void 0 },\n mac: { type: Boolean, default: () => isMac }\n },\n setup(__props) {\n const labels = computed(() => ({\n ArrowUp: \"↑\",\n ArrowDown: \"↓\",\n ArrowLeft: \"←\",\n ArrowRight: \"→\",\n Control: !__props.mac ? t(\"Ctrl\") : \"⌘\",\n Alt: !__props.mac ? t(\"Alt\") : \"⌥\",\n Shift: !__props.mac ? t(\"Shift\") : \"⇧\",\n Enter: !__props.mac ? t(\"Enter\") : \"⏎\",\n Tab: !__props.mac ? t(\"Tab\") : \"⇥\",\n Delete: !__props.mac ? t(\"Delete\") : \"⌫\",\n Escape: !__props.mac ? t(\"Escape\") : \"⎋\",\n Space: t(\"Space\")\n // TRANSLATORS: Space key on keyboard\n }));\n const label = computed(() => __props.symbol && labels.value[__props.symbol] || __props.symbol);\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"kbd\", {\n class: normalizeClass(_ctx.$style.kbd)\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n createTextVNode(toDisplayString(label.value), 1)\n ])\n ], 2);\n };\n }\n});\nconst kbd = \"_kbd_8H2Am\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_C-2an\",\n kbd\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcKbd = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcKbd as N\n};\n//# sourceMappingURL=NcKbd-DCsSL73F.mjs.map\n","import '../assets/NcHotkeyList-DqyUQBw6.css';\nimport { defineComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, unref, renderSlot } from \"vue\";\nimport { r as register, p as t31, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t31);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcHotkeyList\",\n props: {\n label: { default: () => void 0 }\n },\n setup(__props) {\n const labelId = `NcHotkeyList_${createElementId()}`;\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass(_ctx.$style.hotkeyList)\n }, [\n createElementVNode(\"div\", {\n id: labelId,\n class: normalizeClass([_ctx.$style.hotkeyList__heading, { \"hidden-visually\": !__props.label }])\n }, toDisplayString(__props.label || unref(t)(\"Keyboard shortcuts\")), 3),\n createElementVNode(\"ul\", { \"aria-labelledby\": labelId }, [\n renderSlot(_ctx.$slots, \"default\")\n ])\n ], 2);\n };\n }\n});\nconst hotkeyList = \"_hotkeyList_J7A42\";\nconst hotkeyList__heading = \"_hotkeyList__heading_4Q30H\";\nconst style0 = {\n hotkeyList,\n hotkeyList__heading\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcHotkeyList = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcHotkeyList as N\n};\n//# sourceMappingURL=NcHotkeyList-BWerT8qH.mjs.map\n","import '../assets/NcListItem-1uR7AJIf.css';\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { N as NcActions } from \"./NcActions-DY4GGONi.mjs\";\nimport { N as NcCounterBubble } from \"./NcCounterBubble-CV0YMrXW.mjs\";\nimport { _ as _sfc_main$1 } from \"./NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs\";\nimport { resolveComponent, openBlock, createBlock, resolveDynamicComponent, normalizeProps, guardReactiveProps, withCtx, createElementVNode, mergeProps, normalizeClass, withKeys, renderSlot, createTextVNode, toDisplayString, createElementBlock, createCommentVNode, withDirectives, vShow, createVNode, createSlots } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcListItem\",\n components: {\n NcActions,\n NcCounterBubble,\n NcVNodes: _sfc_main$1\n },\n inheritAttrs: false,\n setup() {\n return { isLegacy34 };\n },\n props: {\n /**\n * The details text displayed in the upper right part of the component\n */\n details: {\n type: String,\n default: \"\"\n },\n /**\n * Name (first line of text)\n */\n name: {\n type: String,\n default: void 0\n },\n /**\n * The route for the router link.\n */\n to: {\n type: [String, Object],\n default: null\n },\n /**\n * The value for the external link\n */\n href: {\n type: String,\n default: \"#\"\n },\n /**\n * The HTML target attribute used for the link\n */\n target: {\n type: String,\n default: \"\"\n },\n /**\n * Id for the `` element\n */\n anchorId: {\n type: String,\n default: \"\"\n },\n /**\n * Make subname bold\n */\n bold: {\n type: Boolean,\n default: false\n },\n /**\n * Show the NcListItem in compact design\n */\n compact: {\n type: Boolean,\n default: false\n },\n /**\n * Toggle the active state of the component\n */\n active: {\n type: Boolean,\n default: void 0\n },\n /**\n * Aria label for the wrapper element\n */\n linkAriaLabel: {\n type: String,\n default: \"\"\n },\n /**\n * Aria label for the actions toggle\n */\n actionsAriaLabel: {\n type: String,\n default: void 0\n },\n /**\n * If different from 0 this component will display the\n * NcCounterBubble component\n */\n counterNumber: {\n type: [Number, String],\n default: 0\n },\n /**\n * Outlined or highlighted state of the counter\n */\n counterType: {\n type: String,\n default: \"\",\n validator(value) {\n return [\"highlighted\", \"outlined\", \"\"].indexOf(value) !== -1;\n }\n },\n /**\n * To be used only when the elements in the actions menu are very important\n */\n forceDisplayActions: {\n type: Boolean,\n default: false\n },\n /**\n * Force the actions to display in a three dot menu\n */\n forceMenu: {\n type: Boolean,\n default: false\n },\n /**\n * Show the list component layout\n */\n oneLine: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"click\",\n \"dragstart\",\n \"update:menuOpen\"\n ],\n data() {\n return {\n hovered: false,\n hasActions: false,\n hasSubname: false,\n displayActionsOnHoverFocus: false,\n menuOpen: false,\n hasIndicator: false,\n hasDetails: false\n };\n },\n computed: {\n showAdditionalElements() {\n return !this.displayActionsOnHoverFocus || this.forceDisplayActions;\n },\n showDetails() {\n return (this.details !== \"\" || this.hasDetails) && (!this.displayActionsOnHoverFocus || this.forceDisplayActions);\n }\n },\n watch: {\n menuOpen(newValue) {\n if (!newValue && !this.hovered) {\n this.displayActionsOnHoverFocus = false;\n }\n }\n },\n mounted() {\n this.checkSlots();\n },\n updated() {\n this.checkSlots();\n },\n methods: {\n /**\n * Handle link click\n *\n * @param {MouseEvent|KeyboardEvent} event - Native click or keydown event\n * @param {Function} [navigate] - VueRouter link's navigate if any\n * @param {string} [routerLinkHref] - VueRouter link's href\n */\n onClick(event, navigate, routerLinkHref) {\n this.$emit(\"click\", event);\n if (event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) {\n return;\n }\n if (routerLinkHref) {\n navigate?.(event);\n event.preventDefault();\n }\n },\n showActions() {\n if (this.hasActions) {\n this.displayActionsOnHoverFocus = true;\n }\n this.hovered = false;\n },\n hideActions() {\n this.displayActionsOnHoverFocus = false;\n },\n /**\n * @param {FocusEvent} event UI event\n */\n handleBlur(event) {\n if (this.menuOpen) {\n return;\n }\n if (this.$refs[\"list-item\"]?.contains(event.relatedTarget)) {\n return;\n }\n this.hideActions();\n },\n /**\n * Hide the actions on mouseleave unless the menu is open\n */\n handleMouseleave() {\n if (!this.menuOpen) {\n this.displayActionsOnHoverFocus = false;\n }\n this.hovered = false;\n },\n handleMouseover() {\n this.showActions();\n this.hovered = true;\n },\n handleActionsUpdateOpen(e) {\n this.menuOpen = e;\n this.$emit(\"update:menuOpen\", e);\n },\n // Check if subname and actions slots are populated\n checkSlots() {\n if (this.hasActions !== !!this.$slots.actions) {\n this.hasActions = !!this.$slots.actions;\n }\n if (this.hasSubname !== !!this.$slots.subname) {\n this.hasSubname = !!this.$slots.subname;\n }\n if (this.hasIndicator !== !!this.$slots.indicator) {\n this.hasIndicator = !!this.$slots.indicator;\n }\n if (this.hasDetails !== !!this.$slots.details) {\n this.hasDetails = !!this.$slots.details;\n }\n }\n }\n};\nconst _hoisted_1 = [\"id\", \"aria-label\", \"href\", \"target\", \"rel\", \"onClick\"];\nconst _hoisted_2 = { class: \"list-item-content\" };\nconst _hoisted_3 = { class: \"list-item-content__main\" };\nconst _hoisted_4 = { class: \"list-item-content__name\" };\nconst _hoisted_5 = { class: \"list-item-content__details\" };\nconst _hoisted_6 = {\n key: 0,\n class: \"list-item-details__details\"\n};\nconst _hoisted_7 = {\n key: 1,\n class: \"list-item-details__extra\"\n};\nconst _hoisted_8 = {\n key: 1,\n class: \"list-item-details__indicator\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"list-item-content__extra-actions\"\n};\nconst _hoisted_10 = {\n key: 2,\n class: \"list-item__extra\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcCounterBubble = resolveComponent(\"NcCounterBubble\");\n const _component_NcActions = resolveComponent(\"NcActions\");\n return openBlock(), createBlock(resolveDynamicComponent($props.to ? \"router-link\" : \"NcVNodes\"), normalizeProps(guardReactiveProps({ ...$props.to && { custom: true, to: $props.to } })), {\n default: withCtx(({ href: routerLinkHref, navigate, isActive }) => [\n createElementVNode(\"li\", mergeProps({\n class: [\"list-item__wrapper\", {\n \"list-item__wrapper--active\": $props.active ?? isActive,\n \"list-item__wrapper--legacy\": $setup.isLegacy34\n }]\n }, _ctx.$attrs), [\n createElementVNode(\"div\", {\n ref: \"list-item\",\n class: normalizeClass([\"list-item\", {\n \"list-item--compact\": $props.compact,\n \"list-item--one-line\": $props.oneLine\n }]),\n onMouseover: _cache[5] || (_cache[5] = (...args) => $options.handleMouseover && $options.handleMouseover(...args)),\n onMouseleave: _cache[6] || (_cache[6] = (...args) => $options.handleMouseleave && $options.handleMouseleave(...args))\n }, [\n createElementVNode(\"a\", {\n id: $props.anchorId || void 0,\n \"aria-label\": $props.linkAriaLabel,\n class: \"list-item__anchor\",\n href: routerLinkHref || $props.href,\n target: $props.target || ($props.href === \"#\" ? void 0 : \"_blank\"),\n rel: $props.href === \"#\" ? void 0 : \"noopener noreferrer\",\n onFocus: _cache[0] || (_cache[0] = (...args) => $options.showActions && $options.showActions(...args)),\n onFocusout: _cache[1] || (_cache[1] = (...args) => $options.handleBlur && $options.handleBlur(...args)),\n onClick: ($event) => $options.onClick($event, navigate, routerLinkHref),\n onDragstart: _cache[2] || (_cache[2] = ($event) => _ctx.$emit(\"dragstart\", $event)),\n onKeydown: _cache[3] || (_cache[3] = withKeys((...args) => $options.hideActions && $options.hideActions(...args), [\"esc\"]))\n }, [\n renderSlot(_ctx.$slots, \"icon\", {}, void 0, true),\n createElementVNode(\"div\", _hoisted_2, [\n createElementVNode(\"div\", _hoisted_3, [\n createElementVNode(\"div\", _hoisted_4, [\n renderSlot(_ctx.$slots, \"name\", {}, () => [\n createTextVNode(toDisplayString($props.name), 1)\n ], true)\n ]),\n $data.hasSubname ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass([\"list-item-content__subname\", { \"list-item-content__subname--bold\": $props.bold }])\n }, [\n renderSlot(_ctx.$slots, \"subname\", {}, void 0, true)\n ], 2)) : createCommentVNode(\"\", true)\n ]),\n createElementVNode(\"div\", _hoisted_5, [\n $options.showDetails ? (openBlock(), createElementBlock(\"div\", _hoisted_6, [\n renderSlot(_ctx.$slots, \"details\", {}, () => [\n createTextVNode(toDisplayString($props.details), 1)\n ], true)\n ])) : createCommentVNode(\"\", true),\n $props.counterNumber !== 0 || $data.hasIndicator ? withDirectives((openBlock(), createElementBlock(\"div\", _hoisted_7, [\n $props.counterNumber !== 0 ? (openBlock(), createBlock(_component_NcCounterBubble, {\n key: 0,\n count: $props.counterNumber,\n active: $setup.isLegacy34 ? $props.active ?? isActive : false,\n class: \"list-item-details__counter\",\n type: $props.counterType\n }, null, 8, [\"count\", \"active\", \"type\"])) : createCommentVNode(\"\", true),\n $data.hasIndicator ? (openBlock(), createElementBlock(\"span\", _hoisted_8, [\n renderSlot(_ctx.$slots, \"indicator\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true)\n ], 512)), [\n [vShow, $options.showAdditionalElements]\n ]) : createCommentVNode(\"\", true)\n ])\n ])\n ], 40, _hoisted_1),\n _ctx.$slots[\"extra-actions\"] ? (openBlock(), createElementBlock(\"div\", _hoisted_9, [\n renderSlot(_ctx.$slots, \"extra-actions\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true),\n $props.forceDisplayActions || $data.displayActionsOnHoverFocus ? (openBlock(), createElementBlock(\"div\", {\n key: 1,\n class: \"list-item-content__actions\",\n onFocusout: _cache[4] || (_cache[4] = (...args) => $options.handleBlur && $options.handleBlur(...args))\n }, [\n createVNode(_component_NcActions, {\n ref: \"actions\",\n primary: $setup.isLegacy34 ? $props.active ?? isActive : false,\n forceMenu: $props.forceMenu,\n \"aria-label\": $props.actionsAriaLabel,\n \"onUpdate:open\": $options.handleActionsUpdateOpen\n }, createSlots({\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"actions\", {}, void 0, true)\n ]),\n _: 2\n }, [\n _ctx.$slots[\"actions-icon\"] ? {\n name: \"icon\",\n fn: withCtx(() => [\n renderSlot(_ctx.$slots, \"actions-icon\", {}, void 0, true)\n ]),\n key: \"0\"\n } : void 0\n ]), 1032, [\"primary\", \"forceMenu\", \"aria-label\", \"onUpdate:open\"])\n ], 32)) : createCommentVNode(\"\", true),\n _ctx.$slots.extra ? (openBlock(), createElementBlock(\"div\", _hoisted_10, [\n renderSlot(_ctx.$slots, \"extra\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true)\n ], 34)\n ], 16)\n ]),\n _: 3\n }, 16);\n}\nconst NcListItem = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-7e90555e\"]]);\nexport {\n NcListItem as N\n};\n//# sourceMappingURL=NcListItem-DItks2Sq.mjs.map\n","if (!Array.prototype.find) {\n Array.prototype.find = function(predicate) {\n if (this === null) {\n throw new TypeError('Array.prototype.find called on null or undefined')\n }\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function')\n }\n var list = Object(this);\n var length = list.length >>> 0;\n var thisArg = arguments[1];\n var value;\n\n for (var i = 0; i < length; i++) {\n value = list[i];\n if (predicate.call(thisArg, value, i, list)) {\n return value\n }\n }\n return undefined\n };\n}\n\nif (window && typeof window.CustomEvent !== \"function\") {\n function CustomEvent$1(event, params) {\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt\n }\n\n if (typeof window.Event !== 'undefined') {\n CustomEvent$1.prototype = window.Event.prototype;\n }\n\n window.CustomEvent = CustomEvent$1;\n}\n\nclass TributeEvents {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.events = this;\n }\n\n static keys() {\n return [\n {\n key: 9,\n value: \"TAB\"\n },\n {\n key: 8,\n value: \"DELETE\"\n },\n {\n key: 13,\n value: \"ENTER\"\n },\n {\n key: 27,\n value: \"ESCAPE\"\n },\n {\n key: 32,\n value: \"SPACE\"\n },\n {\n key: 38,\n value: \"UP\"\n },\n {\n key: 40,\n value: \"DOWN\"\n }\n ];\n }\n\n bind(element) {\n element.boundKeydown = this.keydown.bind(element, this);\n element.boundKeyup = this.keyup.bind(element, this);\n element.boundInput = this.input.bind(element, this);\n\n element.addEventListener(\"keydown\", element.boundKeydown, false);\n element.addEventListener(\"keyup\", element.boundKeyup, false);\n element.addEventListener(\"input\", element.boundInput, false);\n }\n\n unbind(element) {\n element.removeEventListener(\"keydown\", element.boundKeydown, false);\n element.removeEventListener(\"keyup\", element.boundKeyup, false);\n element.removeEventListener(\"input\", element.boundInput, false);\n\n delete element.boundKeydown;\n delete element.boundKeyup;\n delete element.boundInput;\n }\n\n keydown(instance, event) {\n if (instance.shouldDeactivate(event)) {\n instance.tribute.isActive = false;\n instance.tribute.hideMenu();\n }\n\n let element = this;\n instance.commandEvent = false;\n\n TributeEvents.keys().forEach(o => {\n if (o.key === event.keyCode) {\n instance.commandEvent = true;\n instance.callbacks()[o.value.toLowerCase()](event, element);\n }\n });\n }\n\n input(instance, event) {\n instance.inputEvent = true;\n instance.keyup.call(this, instance, event);\n }\n\n click(instance, event) {\n let tribute = instance.tribute;\n if (tribute.menu && tribute.menu.contains(event.target)) {\n let li = event.target;\n event.preventDefault();\n event.stopPropagation();\n while (li.nodeName.toLowerCase() !== \"li\") {\n li = li.parentNode;\n if (!li || li === tribute.menu) {\n throw new Error(\"cannot find the
  • container for the click\");\n }\n }\n tribute.selectItemAtIndex(li.getAttribute(\"data-index\"), event);\n tribute.hideMenu();\n\n // TODO: should fire with externalTrigger and target is outside of menu\n } else if (tribute.current.element && !tribute.current.externalTrigger) {\n tribute.current.externalTrigger = false;\n setTimeout(() => tribute.hideMenu());\n }\n }\n\n keyup(instance, event) {\n if (instance.inputEvent) {\n instance.inputEvent = false;\n }\n instance.updateSelection(this);\n\n if (event.keyCode === 27) return;\n\n if (!instance.tribute.allowSpaces && instance.tribute.hasTrailingSpace) {\n instance.tribute.hasTrailingSpace = false;\n instance.commandEvent = true;\n instance.callbacks()[\"space\"](event, this);\n return;\n }\n\n if (!instance.tribute.isActive) {\n if (instance.tribute.autocompleteMode) {\n instance.callbacks().triggerChar(event, this, \"\");\n } else {\n let keyCode = instance.getKeyCode(instance, this, event);\n\n if (isNaN(keyCode) || !keyCode) return;\n\n let trigger = instance.tribute.triggers().find(trigger => {\n return trigger.charCodeAt(0) === keyCode;\n });\n\n if (typeof trigger !== \"undefined\") {\n instance.callbacks().triggerChar(event, this, trigger);\n }\n }\n }\n\n if (\n instance.tribute.current.mentionText.length <\n instance.tribute.current.collection.menuShowMinLength\n ) {\n return;\n }\n\n if (\n ((instance.tribute.current.trigger ||\n instance.tribute.autocompleteMode) &&\n instance.commandEvent === false) ||\n (instance.tribute.isActive && event.keyCode === 8)\n ) {\n instance.tribute.showMenuFor(this, true);\n }\n }\n\n shouldDeactivate(event) {\n if (!this.tribute.isActive) return false;\n\n if (this.tribute.current.mentionText.length === 0) {\n let eventKeyPressed = false;\n TributeEvents.keys().forEach(o => {\n if (event.keyCode === o.key) eventKeyPressed = true;\n });\n\n return !eventKeyPressed;\n }\n\n return false;\n }\n\n getKeyCode(instance, el, event) {\n let tribute = instance.tribute;\n let info = tribute.range.getTriggerInfo(\n false,\n tribute.hasTrailingSpace,\n true,\n tribute.allowSpaces,\n tribute.autocompleteMode\n );\n\n if (info) {\n return info.mentionTriggerChar.charCodeAt(0);\n } else {\n return false;\n }\n }\n\n updateSelection(el) {\n this.tribute.current.element = el;\n let info = this.tribute.range.getTriggerInfo(\n false,\n this.tribute.hasTrailingSpace,\n true,\n this.tribute.allowSpaces,\n this.tribute.autocompleteMode\n );\n\n if (info) {\n this.tribute.current.selectedPath = info.mentionSelectedPath;\n this.tribute.current.mentionText = info.mentionText;\n this.tribute.current.selectedOffset = info.mentionSelectedOffset;\n }\n }\n\n callbacks() {\n return {\n triggerChar: (e, el, trigger) => {\n let tribute = this.tribute;\n tribute.current.trigger = trigger;\n\n let collectionItem = tribute.collection.find(item => {\n return item.trigger === trigger;\n });\n\n tribute.current.collection = collectionItem;\n\n if (\n tribute.current.mentionText.length >=\n tribute.current.collection.menuShowMinLength &&\n tribute.inputEvent\n ) {\n tribute.showMenuFor(el, true);\n }\n },\n enter: (e, el) => {\n // choose selection\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n setTimeout(() => {\n this.tribute.selectItemAtIndex(this.tribute.menuSelected, e);\n this.tribute.hideMenu();\n }, 0);\n }\n },\n escape: (e, el) => {\n if (this.tribute.isActive) {\n e.preventDefault();\n e.stopPropagation();\n this.tribute.isActive = false;\n this.tribute.hideMenu();\n }\n },\n tab: (e, el) => {\n // choose first match\n this.callbacks().enter(e, el);\n },\n space: (e, el) => {\n if (this.tribute.isActive) {\n if (this.tribute.spaceSelectsMatch) {\n this.callbacks().enter(e, el);\n } else if (!this.tribute.allowSpaces) {\n e.stopPropagation();\n setTimeout(() => {\n this.tribute.hideMenu();\n this.tribute.isActive = false;\n }, 0);\n }\n }\n },\n up: (e, el) => {\n // navigate up ul\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n let count = this.tribute.current.filteredItems.length,\n selected = this.tribute.menuSelected;\n\n if (count > selected && selected > 0) {\n this.tribute.menuSelected--;\n this.setActiveLi();\n } else if (selected === 0) {\n this.tribute.menuSelected = count - 1;\n this.setActiveLi();\n this.tribute.menu.scrollTop = this.tribute.menu.scrollHeight;\n }\n }\n },\n down: (e, el) => {\n // navigate down ul\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n let count = this.tribute.current.filteredItems.length - 1,\n selected = this.tribute.menuSelected;\n\n if (count > selected) {\n this.tribute.menuSelected++;\n this.setActiveLi();\n } else if (count === selected) {\n this.tribute.menuSelected = 0;\n this.setActiveLi();\n this.tribute.menu.scrollTop = 0;\n }\n }\n },\n delete: (e, el) => {\n if (\n this.tribute.isActive &&\n this.tribute.current.mentionText.length < 1\n ) {\n this.tribute.hideMenu();\n } else if (this.tribute.isActive) {\n this.tribute.showMenuFor(el);\n }\n }\n };\n }\n\n setActiveLi(index) {\n let lis = this.tribute.menu.querySelectorAll(\"li\"),\n length = lis.length >>> 0;\n\n if (index) this.tribute.menuSelected = parseInt(index);\n\n for (let i = 0; i < length; i++) {\n let li = lis[i];\n if (i === this.tribute.menuSelected) {\n li.classList.add(this.tribute.current.collection.selectClass);\n\n let liClientRect = li.getBoundingClientRect();\n let menuClientRect = this.tribute.menu.getBoundingClientRect();\n\n if (liClientRect.bottom > menuClientRect.bottom) {\n let scrollDistance = liClientRect.bottom - menuClientRect.bottom;\n this.tribute.menu.scrollTop += scrollDistance;\n } else if (liClientRect.top < menuClientRect.top) {\n let scrollDistance = menuClientRect.top - liClientRect.top;\n this.tribute.menu.scrollTop -= scrollDistance;\n }\n } else {\n li.classList.remove(this.tribute.current.collection.selectClass);\n }\n }\n }\n\n getFullHeight(elem, includeMargin) {\n let height = elem.getBoundingClientRect().height;\n\n if (includeMargin) {\n let style = elem.currentStyle || window.getComputedStyle(elem);\n return (\n height + parseFloat(style.marginTop) + parseFloat(style.marginBottom)\n );\n }\n\n return height;\n }\n}\n\nclass TributeMenuEvents {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.menuEvents = this;\n this.menu = this.tribute.menu;\n }\n\n bind(menu) {\n this.menuClickEvent = this.tribute.events.click.bind(null, this);\n this.menuContainerScrollEvent = this.debounce(\n () => {\n if (this.tribute.isActive) {\n this.tribute.showMenuFor(this.tribute.current.element, false);\n }\n },\n 300,\n false\n );\n this.windowResizeEvent = this.debounce(\n () => {\n if (this.tribute.isActive) {\n this.tribute.range.positionMenuAtCaret(true);\n }\n },\n 300,\n false\n );\n\n // fixes IE11 issues with mousedown\n this.tribute.range\n .getDocument()\n .addEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n this.tribute.range\n .getDocument()\n .addEventListener(\"mousedown\", this.menuClickEvent, false);\n window.addEventListener(\"resize\", this.windowResizeEvent);\n\n if (this.menuContainer) {\n this.menuContainer.addEventListener(\n \"scroll\",\n this.menuContainerScrollEvent,\n false\n );\n } else {\n window.addEventListener(\"scroll\", this.menuContainerScrollEvent);\n }\n }\n\n unbind(menu) {\n this.tribute.range\n .getDocument()\n .removeEventListener(\"mousedown\", this.menuClickEvent, false);\n this.tribute.range\n .getDocument()\n .removeEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n window.removeEventListener(\"resize\", this.windowResizeEvent);\n\n if (this.menuContainer) {\n this.menuContainer.removeEventListener(\n \"scroll\",\n this.menuContainerScrollEvent,\n false\n );\n } else {\n window.removeEventListener(\"scroll\", this.menuContainerScrollEvent);\n }\n }\n\n debounce(func, wait, immediate) {\n var timeout;\n return () => {\n var context = this,\n args = arguments;\n var later = () => {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n }\n}\n\n// Thanks to https://github.com/jeff-collins/ment.io\n\nclass TributeRange {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.range = this;\n }\n\n getDocument() {\n let iframe;\n if (this.tribute.current.collection) {\n iframe = this.tribute.current.collection.iframe;\n }\n\n if (!iframe) {\n return document\n }\n\n return iframe.contentWindow.document\n }\n\n positionMenuAtCaret(scrollTo) {\n let context = this.tribute.current,\n coordinates;\n\n let info = this.getTriggerInfo(false, this.tribute.hasTrailingSpace, true, this.tribute.allowSpaces, this.tribute.autocompleteMode);\n\n if (typeof info !== 'undefined') {\n\n if(!this.tribute.positionMenu){\n this.tribute.menu.style.cssText = `display: block;`;\n return\n }\n\n if (!this.isContentEditable(context.element)) {\n coordinates = this.getTextAreaOrInputUnderlinePosition(this.tribute.current.element,\n info.mentionPosition);\n }\n else {\n coordinates = this.getContentEditableCaretPosition(info.mentionPosition);\n }\n\n this.tribute.menu.style.cssText = `top: ${coordinates.top}px;\n left: ${coordinates.left}px;\n right: ${coordinates.right}px;\n bottom: ${coordinates.bottom}px;\n position: absolute;\n display: block;`;\n\n if (coordinates.left === 'auto') {\n this.tribute.menu.style.left = 'auto';\n }\n\n if (coordinates.top === 'auto') {\n this.tribute.menu.style.top = 'auto';\n }\n\n if (scrollTo) this.scrollIntoView();\n\n window.setTimeout(() => {\n let menuDimensions = {\n width: this.tribute.menu.offsetWidth,\n height: this.tribute.menu.offsetHeight\n };\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n let menuIsOffScreenHorizontally = window.innerWidth > menuDimensions.width && (menuIsOffScreen.left || menuIsOffScreen.right);\n let menuIsOffScreenVertically = window.innerHeight > menuDimensions.height && (menuIsOffScreen.top || menuIsOffScreen.bottom);\n if (menuIsOffScreenHorizontally || menuIsOffScreenVertically) {\n this.tribute.menu.style.cssText = 'display: none';\n this.positionMenuAtCaret(scrollTo);\n }\n }, 0);\n\n } else {\n this.tribute.menu.style.cssText = 'display: none';\n }\n }\n\n get menuContainerIsBody() {\n return this.tribute.menuContainer === document.body || !this.tribute.menuContainer;\n }\n\n\n selectElement(targetElement, path, offset) {\n let range;\n let elem = targetElement;\n\n if (path) {\n for (var i = 0; i < path.length; i++) {\n elem = elem.childNodes[path[i]];\n if (elem === undefined) {\n return\n }\n while (elem.length < offset) {\n offset -= elem.length;\n elem = elem.nextSibling;\n }\n if (elem.childNodes.length === 0 && !elem.length) {\n elem = elem.previousSibling;\n }\n }\n }\n let sel = this.getWindowSelection();\n\n range = this.getDocument().createRange();\n range.setStart(elem, offset);\n range.setEnd(elem, offset);\n range.collapse(true);\n\n try {\n sel.removeAllRanges();\n } catch (error) {}\n\n sel.addRange(range);\n targetElement.focus();\n }\n\n replaceTriggerText(text, requireLeadingSpace, hasTrailingSpace, originalEvent, item) {\n let info = this.getTriggerInfo(true, hasTrailingSpace, requireLeadingSpace, this.tribute.allowSpaces, this.tribute.autocompleteMode);\n\n if (info !== undefined) {\n let context = this.tribute.current;\n let replaceEvent = new CustomEvent('tribute-replaced', {\n detail: {\n item: item,\n instance: context,\n context: info,\n event: originalEvent,\n }\n });\n\n if (!this.isContentEditable(context.element)) {\n let myField = this.tribute.current.element;\n let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n ? this.tribute.replaceTextSuffix\n : ' ';\n text += textSuffix;\n let startPos = info.mentionPosition;\n let endPos = info.mentionPosition + info.mentionText.length + textSuffix.length;\n if (!this.tribute.autocompleteMode) {\n endPos += info.mentionTriggerChar.length - 1;\n }\n myField.value = myField.value.substring(0, startPos) + text +\n myField.value.substring(endPos, myField.value.length);\n myField.selectionStart = startPos + text.length;\n myField.selectionEnd = startPos + text.length;\n } else {\n // add a space to the end of the pasted text\n let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n ? this.tribute.replaceTextSuffix\n : '\\xA0';\n text += textSuffix;\n let endPos = info.mentionPosition + info.mentionText.length;\n if (!this.tribute.autocompleteMode) {\n endPos += info.mentionTriggerChar.length;\n }\n this.pasteHtml(text, info.mentionPosition, endPos);\n }\n\n context.element.dispatchEvent(new CustomEvent('input', { bubbles: true }));\n context.element.dispatchEvent(replaceEvent);\n }\n }\n\n pasteHtml(html, startPos, endPos) {\n let range, sel;\n sel = this.getWindowSelection();\n range = this.getDocument().createRange();\n range.setStart(sel.anchorNode, startPos);\n range.setEnd(sel.anchorNode, endPos);\n range.deleteContents();\n\n let el = this.getDocument().createElement('div');\n el.innerHTML = html;\n let frag = this.getDocument().createDocumentFragment(),\n node, lastNode;\n while ((node = el.firstChild)) {\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n\n // Preserve the selection\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n\n getWindowSelection() {\n if (this.tribute.collection.iframe) {\n return this.tribute.collection.iframe.contentWindow.getSelection()\n }\n\n return window.getSelection()\n }\n\n getNodePositionInParent(element) {\n if (element.parentNode === null) {\n return 0\n }\n\n for (var i = 0; i < element.parentNode.childNodes.length; i++) {\n let node = element.parentNode.childNodes[i];\n\n if (node === element) {\n return i\n }\n }\n }\n\n getContentEditableSelectedPath(ctx) {\n let sel = this.getWindowSelection();\n let selected = sel.anchorNode;\n let path = [];\n let offset;\n\n if (selected != null) {\n let i;\n let ce = selected.contentEditable;\n while (selected !== null && ce !== 'true') {\n i = this.getNodePositionInParent(selected);\n path.push(i);\n selected = selected.parentNode;\n if (selected !== null) {\n ce = selected.contentEditable;\n }\n }\n path.reverse();\n\n // getRangeAt may not exist, need alternative\n offset = sel.getRangeAt(0).startOffset;\n\n return {\n selected: selected,\n path: path,\n offset: offset\n }\n }\n }\n\n getTextPrecedingCurrentSelection() {\n let context = this.tribute.current,\n text = '';\n\n if (!this.isContentEditable(context.element)) {\n let textComponent = this.tribute.current.element;\n if (textComponent) {\n let startPos = textComponent.selectionStart;\n if (textComponent.value && startPos >= 0) {\n text = textComponent.value.substring(0, startPos);\n }\n }\n\n } else {\n let selectedElem = this.getWindowSelection().anchorNode;\n\n if (selectedElem != null) {\n let workingNodeContent = selectedElem.textContent;\n let selectStartOffset = this.getWindowSelection().getRangeAt(0).startOffset;\n\n if (workingNodeContent && selectStartOffset >= 0) {\n text = workingNodeContent.substring(0, selectStartOffset);\n }\n }\n }\n\n return text\n }\n\n getLastWordInText(text) {\n text = text.replace(/\\u00A0/g, ' '); // https://stackoverflow.com/questions/29850407/how-do-i-replace-unicode-character-u00a0-with-a-space-in-javascript\n let wordsArray = text.split(/\\s+/);\n let worldsCount = wordsArray.length - 1;\n return wordsArray[worldsCount].trim()\n }\n\n getTriggerInfo(menuAlreadyActive, hasTrailingSpace, requireLeadingSpace, allowSpaces, isAutocomplete) {\n let ctx = this.tribute.current;\n let selected, path, offset;\n\n if (!this.isContentEditable(ctx.element)) {\n selected = this.tribute.current.element;\n } else {\n let selectionInfo = this.getContentEditableSelectedPath(ctx);\n\n if (selectionInfo) {\n selected = selectionInfo.selected;\n path = selectionInfo.path;\n offset = selectionInfo.offset;\n }\n }\n\n let effectiveRange = this.getTextPrecedingCurrentSelection();\n let lastWordOfEffectiveRange = this.getLastWordInText(effectiveRange);\n\n if (isAutocomplete) {\n return {\n mentionPosition: effectiveRange.length - lastWordOfEffectiveRange.length,\n mentionText: lastWordOfEffectiveRange,\n mentionSelectedElement: selected,\n mentionSelectedPath: path,\n mentionSelectedOffset: offset\n }\n }\n\n if (effectiveRange !== undefined && effectiveRange !== null) {\n let mostRecentTriggerCharPos = -1;\n let triggerChar;\n\n this.tribute.collection.forEach(config => {\n let c = config.trigger;\n let idx = config.requireLeadingSpace ?\n this.lastIndexWithLeadingSpace(effectiveRange, c) :\n effectiveRange.lastIndexOf(c);\n\n if (idx > mostRecentTriggerCharPos) {\n mostRecentTriggerCharPos = idx;\n triggerChar = c;\n requireLeadingSpace = config.requireLeadingSpace;\n }\n });\n\n if (mostRecentTriggerCharPos >= 0 &&\n (\n mostRecentTriggerCharPos === 0 ||\n !requireLeadingSpace ||\n /[\\xA0\\s]/g.test(\n effectiveRange.substring(\n mostRecentTriggerCharPos - 1,\n mostRecentTriggerCharPos)\n )\n )\n ) {\n let currentTriggerSnippet = effectiveRange.substring(mostRecentTriggerCharPos + triggerChar.length,\n effectiveRange.length);\n\n triggerChar = effectiveRange.substring(mostRecentTriggerCharPos, mostRecentTriggerCharPos + triggerChar.length);\n let firstSnippetChar = currentTriggerSnippet.substring(0, 1);\n let leadingSpace = currentTriggerSnippet.length > 0 &&\n (\n firstSnippetChar === ' ' ||\n firstSnippetChar === '\\xA0'\n );\n if (hasTrailingSpace) {\n currentTriggerSnippet = currentTriggerSnippet.trim();\n }\n\n let regex = allowSpaces ? /[^\\S ]/g : /[\\xA0\\s]/g;\n\n this.tribute.hasTrailingSpace = regex.test(currentTriggerSnippet);\n\n if (!leadingSpace && (menuAlreadyActive || !(regex.test(currentTriggerSnippet)))) {\n return {\n mentionPosition: mostRecentTriggerCharPos,\n mentionText: currentTriggerSnippet,\n mentionSelectedElement: selected,\n mentionSelectedPath: path,\n mentionSelectedOffset: offset,\n mentionTriggerChar: triggerChar\n }\n }\n }\n }\n }\n\n lastIndexWithLeadingSpace (str, trigger) {\n let reversedStr = str.split('').reverse().join('');\n let index = -1;\n\n for (let cidx = 0, len = str.length; cidx < len; cidx++) {\n let firstChar = cidx === str.length - 1;\n let leadingSpace = /\\s/.test(reversedStr[cidx + 1]);\n\n let match = true;\n for (let triggerIdx = trigger.length - 1; triggerIdx >= 0; triggerIdx--) {\n if (trigger[triggerIdx] !== reversedStr[cidx-triggerIdx]) {\n match = false;\n break\n }\n }\n\n if (match && (firstChar || leadingSpace)) {\n index = str.length - 1 - cidx;\n break\n }\n }\n\n return index\n }\n\n isContentEditable(element) {\n return element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA'\n }\n\n isMenuOffScreen(coordinates, menuDimensions) {\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n let doc = document.documentElement;\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n let menuTop = typeof coordinates.top === 'number' ? coordinates.top : windowTop + windowHeight - coordinates.bottom - menuDimensions.height;\n let menuRight = typeof coordinates.right === 'number' ? coordinates.right : coordinates.left + menuDimensions.width;\n let menuBottom = typeof coordinates.bottom === 'number' ? coordinates.bottom : coordinates.top + menuDimensions.height;\n let menuLeft = typeof coordinates.left === 'number' ? coordinates.left : windowLeft + windowWidth - coordinates.right - menuDimensions.width;\n\n return {\n top: menuTop < Math.floor(windowTop),\n right: menuRight > Math.ceil(windowLeft + windowWidth),\n bottom: menuBottom > Math.ceil(windowTop + windowHeight),\n left: menuLeft < Math.floor(windowLeft)\n }\n }\n\n getMenuDimensions() {\n // Width of the menu depends of its contents and position\n // We must check what its width would be without any obstruction\n // This way, we can achieve good positioning for flipping the menu\n let dimensions = {\n width: null,\n height: null\n };\n\n this.tribute.menu.style.cssText = `top: 0px;\n left: 0px;\n position: fixed;\n display: block;\n visibility; hidden;`;\n dimensions.width = this.tribute.menu.offsetWidth;\n dimensions.height = this.tribute.menu.offsetHeight;\n\n this.tribute.menu.style.cssText = `display: none;`;\n\n return dimensions\n }\n\n getTextAreaOrInputUnderlinePosition(element, position, flipped) {\n let properties = ['direction', 'boxSizing', 'width', 'height', 'overflowX',\n 'overflowY', 'borderTopWidth', 'borderRightWidth',\n 'borderBottomWidth', 'borderLeftWidth', 'paddingTop',\n 'paddingRight', 'paddingBottom', 'paddingLeft',\n 'fontStyle', 'fontVariant', 'fontWeight', 'fontStretch',\n 'fontSize', 'fontSizeAdjust', 'lineHeight', 'fontFamily',\n 'textAlign', 'textTransform', 'textIndent',\n 'textDecoration', 'letterSpacing', 'wordSpacing'\n ];\n\n let isFirefox = (window.mozInnerScreenX !== null);\n\n let div = this.getDocument().createElement('div');\n div.id = 'input-textarea-caret-position-mirror-div';\n this.getDocument().body.appendChild(div);\n\n let style = div.style;\n let computed = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle;\n\n style.whiteSpace = 'pre-wrap';\n if (element.nodeName !== 'INPUT') {\n style.wordWrap = 'break-word';\n }\n\n // position off-screen\n style.position = 'absolute';\n style.visibility = 'hidden';\n\n // transfer the element's properties to the div\n properties.forEach(prop => {\n style[prop] = computed[prop];\n });\n\n if (isFirefox) {\n style.width = `${(parseInt(computed.width) - 2)}px`;\n if (element.scrollHeight > parseInt(computed.height))\n style.overflowY = 'scroll';\n } else {\n style.overflow = 'hidden';\n }\n\n div.textContent = element.value.substring(0, position);\n\n if (element.nodeName === 'INPUT') {\n div.textContent = div.textContent.replace(/\\s/g, ' ');\n }\n\n let span = this.getDocument().createElement('span');\n span.textContent = element.value.substring(position) || '.';\n div.appendChild(span);\n\n let rect = element.getBoundingClientRect();\n let doc = document.documentElement;\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n let top = 0;\n let left = 0;\n if (this.menuContainerIsBody) {\n top = rect.top;\n left = rect.left;\n }\n\n let coordinates = {\n top: top + windowTop + span.offsetTop + parseInt(computed.borderTopWidth) + parseInt(computed.fontSize) - element.scrollTop,\n left: left + windowLeft + span.offsetLeft + parseInt(computed.borderLeftWidth)\n };\n\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n\n let menuDimensions = this.getMenuDimensions();\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n if (menuIsOffScreen.right) {\n coordinates.right = windowWidth - coordinates.left;\n coordinates.left = 'auto';\n }\n\n let parentHeight = this.tribute.menuContainer\n ? this.tribute.menuContainer.offsetHeight\n : this.getDocument().body.offsetHeight;\n\n if (menuIsOffScreen.bottom) {\n let parentRect = this.tribute.menuContainer\n ? this.tribute.menuContainer.getBoundingClientRect()\n : this.getDocument().body.getBoundingClientRect();\n let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top);\n\n coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top - span.offsetTop);\n coordinates.top = 'auto';\n }\n\n menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n if (menuIsOffScreen.left) {\n coordinates.left = windowWidth > menuDimensions.width\n ? windowLeft + windowWidth - menuDimensions.width\n : windowLeft;\n delete coordinates.right;\n }\n if (menuIsOffScreen.top) {\n coordinates.top = windowHeight > menuDimensions.height\n ? windowTop + windowHeight - menuDimensions.height\n : windowTop;\n delete coordinates.bottom;\n }\n\n this.getDocument().body.removeChild(div);\n return coordinates\n }\n\n getContentEditableCaretPosition(selectedNodePosition) {\n let range;\n let sel = this.getWindowSelection();\n\n range = this.getDocument().createRange();\n range.setStart(sel.anchorNode, selectedNodePosition);\n range.setEnd(sel.anchorNode, selectedNodePosition);\n\n range.collapse(false);\n\n let rect = range.getBoundingClientRect();\n let doc = document.documentElement;\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n let left = rect.left;\n let top = rect.top;\n\n let coordinates = {\n left: left + windowLeft,\n top: top + rect.height + windowTop\n };\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n\n let menuDimensions = this.getMenuDimensions();\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n if (menuIsOffScreen.right) {\n coordinates.left = 'auto';\n coordinates.right = windowWidth - rect.left - windowLeft;\n }\n\n let parentHeight = this.tribute.menuContainer\n ? this.tribute.menuContainer.offsetHeight\n : this.getDocument().body.offsetHeight;\n\n if (menuIsOffScreen.bottom) {\n let parentRect = this.tribute.menuContainer\n ? this.tribute.menuContainer.getBoundingClientRect()\n : this.getDocument().body.getBoundingClientRect();\n let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top);\n\n coordinates.top = 'auto';\n coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top);\n }\n\n menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n if (menuIsOffScreen.left) {\n coordinates.left = windowWidth > menuDimensions.width\n ? windowLeft + windowWidth - menuDimensions.width\n : windowLeft;\n delete coordinates.right;\n }\n if (menuIsOffScreen.top) {\n coordinates.top = windowHeight > menuDimensions.height\n ? windowTop + windowHeight - menuDimensions.height\n : windowTop;\n delete coordinates.bottom;\n }\n\n if (!this.menuContainerIsBody) {\n coordinates.left = coordinates.left ? coordinates.left - this.tribute.menuContainer.offsetLeft : coordinates.left;\n coordinates.top = coordinates.top ? coordinates.top - this.tribute.menuContainer.offsetTop : coordinates.top;\n }\n\n return coordinates\n }\n\n scrollIntoView(elem) {\n let reasonableBuffer = 20,\n clientRect;\n let maxScrollDisplacement = 100;\n let e = this.menu;\n\n if (typeof e === 'undefined') return;\n\n while (clientRect === undefined || clientRect.height === 0) {\n clientRect = e.getBoundingClientRect();\n\n if (clientRect.height === 0) {\n e = e.childNodes[0];\n if (e === undefined || !e.getBoundingClientRect) {\n return\n }\n }\n }\n\n let elemTop = clientRect.top;\n let elemBottom = elemTop + clientRect.height;\n\n if (elemTop < 0) {\n window.scrollTo(0, window.pageYOffset + clientRect.top - reasonableBuffer);\n } else if (elemBottom > window.innerHeight) {\n let maxY = window.pageYOffset + clientRect.top - reasonableBuffer;\n\n if (maxY - window.pageYOffset > maxScrollDisplacement) {\n maxY = window.pageYOffset + maxScrollDisplacement;\n }\n\n let targetY = window.pageYOffset - (window.innerHeight - elemBottom);\n\n if (targetY > maxY) {\n targetY = maxY;\n }\n\n window.scrollTo(0, targetY);\n }\n }\n}\n\n// Thanks to https://github.com/mattyork/fuzzy\nclass TributeSearch {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.search = this;\n }\n\n simpleFilter(pattern, array) {\n return array.filter(string => {\n return this.test(pattern, string)\n })\n }\n\n test(pattern, string) {\n return this.match(pattern, string) !== null\n }\n\n match(pattern, string, opts) {\n opts = opts || {};\n let len = string.length,\n pre = opts.pre || '',\n post = opts.post || '',\n compareString = opts.caseSensitive && string || string.toLowerCase();\n\n if (opts.skip) {\n return {rendered: string, score: 0}\n }\n\n pattern = opts.caseSensitive && pattern || pattern.toLowerCase();\n\n let patternCache = this.traverse(compareString, pattern, 0, 0, []);\n if (!patternCache) {\n return null\n }\n return {\n rendered: this.render(string, patternCache.cache, pre, post),\n score: patternCache.score\n }\n }\n\n traverse(string, pattern, stringIndex, patternIndex, patternCache) {\n // if the pattern search at end\n if (pattern.length === patternIndex) {\n\n // calculate score and copy the cache containing the indices where it's found\n return {\n score: this.calculateScore(patternCache),\n cache: patternCache.slice()\n }\n }\n\n // if string at end or remaining pattern > remaining string\n if (string.length === stringIndex || pattern.length - patternIndex > string.length - stringIndex) {\n return undefined\n }\n\n let c = pattern[patternIndex];\n let index = string.indexOf(c, stringIndex);\n let best, temp;\n\n while (index > -1) {\n patternCache.push(index);\n temp = this.traverse(string, pattern, index + 1, patternIndex + 1, patternCache);\n patternCache.pop();\n\n // if downstream traversal failed, return best answer so far\n if (!temp) {\n return best\n }\n\n if (!best || best.score < temp.score) {\n best = temp;\n }\n\n index = string.indexOf(c, index + 1);\n }\n\n return best\n }\n\n calculateScore(patternCache) {\n let score = 0;\n let temp = 1;\n\n patternCache.forEach((index, i) => {\n if (i > 0) {\n if (patternCache[i - 1] + 1 === index) {\n temp += temp + 1;\n }\n else {\n temp = 1;\n }\n }\n\n score += temp;\n });\n\n return score\n }\n\n render(string, indices, pre, post) {\n var rendered = string.substring(0, indices[0]);\n\n indices.forEach((index, i) => {\n rendered += pre + string[index] + post +\n string.substring(index + 1, (indices[i + 1]) ? indices[i + 1] : string.length);\n });\n\n return rendered\n }\n\n filter(pattern, arr, opts) {\n opts = opts || {};\n return arr\n .reduce((prev, element, idx, arr) => {\n let str = element;\n\n if (opts.extract) {\n str = opts.extract(element);\n\n if (!str) { // take care of undefineds / nulls / etc.\n str = '';\n }\n }\n\n let rendered = this.match(pattern, str, opts);\n\n if (rendered != null) {\n prev[prev.length] = {\n string: rendered.rendered,\n score: rendered.score,\n index: idx,\n original: element\n };\n }\n\n return prev\n }, [])\n\n .sort((a, b) => {\n let compare = b.score - a.score;\n if (compare) return compare\n return a.index - b.index\n })\n }\n}\n\nclass Tribute {\n constructor({\n values = null,\n iframe = null,\n selectClass = \"highlight\",\n containerClass = \"tribute-container\",\n itemClass = \"\",\n trigger = \"@\",\n autocompleteMode = false,\n selectTemplate = null,\n menuItemTemplate = null,\n lookup = \"key\",\n fillAttr = \"value\",\n collection = null,\n menuContainer = null,\n noMatchTemplate = null,\n requireLeadingSpace = true,\n allowSpaces = false,\n replaceTextSuffix = null,\n positionMenu = true,\n spaceSelectsMatch = false,\n searchOpts = {},\n menuItemLimit = null,\n menuShowMinLength = 0\n }) {\n this.autocompleteMode = autocompleteMode;\n this.menuSelected = 0;\n this.current = {};\n this.inputEvent = false;\n this.isActive = false;\n this.menuContainer = menuContainer;\n this.allowSpaces = allowSpaces;\n this.replaceTextSuffix = replaceTextSuffix;\n this.positionMenu = positionMenu;\n this.hasTrailingSpace = false;\n this.spaceSelectsMatch = spaceSelectsMatch;\n\n if (this.autocompleteMode) {\n trigger = \"\";\n allowSpaces = false;\n }\n\n if (values) {\n this.collection = [\n {\n // symbol that starts the lookup\n trigger: trigger,\n\n // is it wrapped in an iframe\n iframe: iframe,\n\n // class applied to selected item\n selectClass: selectClass,\n\n // class applied to the Container\n containerClass: containerClass,\n\n // class applied to each item\n itemClass: itemClass,\n\n // function called on select that retuns the content to insert\n selectTemplate: (\n selectTemplate || Tribute.defaultSelectTemplate\n ).bind(this),\n\n // function called that returns content for an item\n menuItemTemplate: (\n menuItemTemplate || Tribute.defaultMenuItemTemplate\n ).bind(this),\n\n // function called when menu is empty, disables hiding of menu.\n noMatchTemplate: (t => {\n if (typeof t === \"string\") {\n if (t.trim() === \"\") return null;\n return t;\n }\n if (typeof t === \"function\") {\n return t.bind(this);\n }\n\n return (\n noMatchTemplate ||\n function() {\n return \"
  • No Match Found!
  • \";\n }.bind(this)\n );\n })(noMatchTemplate),\n\n // column to search against in the object\n lookup: lookup,\n\n // column that contains the content to insert by default\n fillAttr: fillAttr,\n\n // array of objects or a function returning an array of objects\n values: values,\n\n requireLeadingSpace: requireLeadingSpace,\n\n searchOpts: searchOpts,\n\n menuItemLimit: menuItemLimit,\n\n menuShowMinLength: menuShowMinLength\n }\n ];\n } else if (collection) {\n if (this.autocompleteMode)\n console.warn(\n \"Tribute in autocomplete mode does not work for collections\"\n );\n this.collection = collection.map(item => {\n return {\n trigger: item.trigger || trigger,\n iframe: item.iframe || iframe,\n selectClass: item.selectClass || selectClass,\n containerClass: item.containerClass || containerClass,\n itemClass: item.itemClass || itemClass,\n selectTemplate: (\n item.selectTemplate || Tribute.defaultSelectTemplate\n ).bind(this),\n menuItemTemplate: (\n item.menuItemTemplate || Tribute.defaultMenuItemTemplate\n ).bind(this),\n // function called when menu is empty, disables hiding of menu.\n noMatchTemplate: (t => {\n if (typeof t === \"string\") {\n if (t.trim() === \"\") return null;\n return t;\n }\n if (typeof t === \"function\") {\n return t.bind(this);\n }\n\n return (\n noMatchTemplate ||\n function() {\n return \"
  • No Match Found!
  • \";\n }.bind(this)\n );\n })(noMatchTemplate),\n lookup: item.lookup || lookup,\n fillAttr: item.fillAttr || fillAttr,\n values: item.values,\n requireLeadingSpace: item.requireLeadingSpace,\n searchOpts: item.searchOpts || searchOpts,\n menuItemLimit: item.menuItemLimit || menuItemLimit,\n menuShowMinLength: item.menuShowMinLength || menuShowMinLength\n };\n });\n } else {\n throw new Error(\"[Tribute] No collection specified.\");\n }\n\n new TributeRange(this);\n new TributeEvents(this);\n new TributeMenuEvents(this);\n new TributeSearch(this);\n }\n\n get isActive() {\n return this._isActive;\n }\n\n set isActive(val) {\n if (this._isActive != val) {\n this._isActive = val;\n if (this.current.element) {\n let noMatchEvent = new CustomEvent(`tribute-active-${val}`);\n this.current.element.dispatchEvent(noMatchEvent);\n }\n }\n }\n\n static defaultSelectTemplate(item) {\n if (typeof item === \"undefined\")\n return `${this.current.collection.trigger}${this.current.mentionText}`;\n if (this.range.isContentEditable(this.current.element)) {\n return (\n '' +\n (this.current.collection.trigger +\n item.original[this.current.collection.fillAttr]) +\n \"\"\n );\n }\n\n return (\n this.current.collection.trigger +\n item.original[this.current.collection.fillAttr]\n );\n }\n\n static defaultMenuItemTemplate(matchItem) {\n return matchItem.string;\n }\n\n static inputTypes() {\n return [\"TEXTAREA\", \"INPUT\"];\n }\n\n triggers() {\n return this.collection.map(config => {\n return config.trigger;\n });\n }\n\n attach(el) {\n if (!el) {\n throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n }\n\n // Check if it is a jQuery collection\n if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n el = el.get();\n }\n\n // Is el an Array/Array-like object?\n if (\n el.constructor === NodeList ||\n el.constructor === HTMLCollection ||\n el.constructor === Array\n ) {\n let length = el.length;\n for (var i = 0; i < length; ++i) {\n this._attach(el[i]);\n }\n } else {\n this._attach(el);\n }\n }\n\n _attach(el) {\n if (el.hasAttribute(\"data-tribute\")) {\n console.warn(\"Tribute was already bound to \" + el.nodeName);\n }\n\n this.ensureEditable(el);\n this.events.bind(el);\n el.setAttribute(\"data-tribute\", true);\n }\n\n ensureEditable(element) {\n if (Tribute.inputTypes().indexOf(element.nodeName) === -1) {\n if (element.contentEditable) {\n element.contentEditable = true;\n } else {\n throw new Error(\"[Tribute] Cannot bind to \" + element.nodeName);\n }\n }\n }\n\n createMenu(containerClass) {\n let wrapper = this.range.getDocument().createElement(\"div\"),\n ul = this.range.getDocument().createElement(\"ul\");\n wrapper.className = containerClass;\n wrapper.appendChild(ul);\n\n if (this.menuContainer) {\n return this.menuContainer.appendChild(wrapper);\n }\n\n return this.range.getDocument().body.appendChild(wrapper);\n }\n\n showMenuFor(element, scrollTo) {\n // Only proceed if menu isn't already shown for the current element & mentionText\n if (\n this.isActive &&\n this.current.element === element &&\n this.current.mentionText === this.currentMentionTextSnapshot\n ) {\n return;\n }\n this.currentMentionTextSnapshot = this.current.mentionText;\n\n // create the menu if it doesn't exist.\n if (!this.menu) {\n this.menu = this.createMenu(this.current.collection.containerClass);\n element.tributeMenu = this.menu;\n this.menuEvents.bind(this.menu);\n }\n\n this.isActive = true;\n this.menuSelected = 0;\n\n if (!this.current.mentionText) {\n this.current.mentionText = \"\";\n }\n\n const processValues = values => {\n // Tribute may not be active any more by the time the value callback returns\n if (!this.isActive) {\n return;\n }\n\n let items = this.search.filter(this.current.mentionText, values, {\n pre: this.current.collection.searchOpts.pre || \"\",\n post: this.current.collection.searchOpts.post || \"\",\n skip: this.current.collection.searchOpts.skip,\n extract: el => {\n if (typeof this.current.collection.lookup === \"string\") {\n return el[this.current.collection.lookup];\n } else if (typeof this.current.collection.lookup === \"function\") {\n return this.current.collection.lookup(el, this.current.mentionText);\n } else {\n throw new Error(\n \"Invalid lookup attribute, lookup must be string or function.\"\n );\n }\n }\n });\n\n if (this.current.collection.menuItemLimit) {\n items = items.slice(0, this.current.collection.menuItemLimit);\n }\n\n this.current.filteredItems = items;\n\n let ul = this.menu.querySelector(\"ul\");\n\n this.range.positionMenuAtCaret(scrollTo);\n\n if (!items.length) {\n let noMatchEvent = new CustomEvent(\"tribute-no-match\", {\n detail: this.menu\n });\n this.current.element.dispatchEvent(noMatchEvent);\n if (\n (typeof this.current.collection.noMatchTemplate === \"function\" &&\n !this.current.collection.noMatchTemplate()) ||\n !this.current.collection.noMatchTemplate\n ) {\n this.hideMenu();\n } else {\n typeof this.current.collection.noMatchTemplate === \"function\"\n ? (ul.innerHTML = this.current.collection.noMatchTemplate())\n : (ul.innerHTML = this.current.collection.noMatchTemplate);\n }\n\n return;\n }\n\n ul.innerHTML = \"\";\n let fragment = this.range.getDocument().createDocumentFragment();\n\n items.forEach((item, index) => {\n let li = this.range.getDocument().createElement(\"li\");\n li.setAttribute(\"data-index\", index);\n li.className = this.current.collection.itemClass;\n li.addEventListener(\"mousemove\", e => {\n let [li, index] = this._findLiTarget(e.target);\n if (e.movementY !== 0) {\n this.events.setActiveLi(index);\n }\n });\n if (this.menuSelected === index) {\n li.classList.add(this.current.collection.selectClass);\n }\n li.innerHTML = this.current.collection.menuItemTemplate(item);\n fragment.appendChild(li);\n });\n ul.appendChild(fragment);\n };\n\n if (typeof this.current.collection.values === \"function\") {\n this.current.collection.values(this.current.mentionText, processValues);\n } else {\n processValues(this.current.collection.values);\n }\n }\n\n _findLiTarget(el) {\n if (!el) return [];\n const index = el.getAttribute(\"data-index\");\n return !index ? this._findLiTarget(el.parentNode) : [el, index];\n }\n\n showMenuForCollection(element, collectionIndex) {\n if (element !== document.activeElement) {\n this.placeCaretAtEnd(element);\n }\n\n this.current.collection = this.collection[collectionIndex || 0];\n this.current.externalTrigger = true;\n this.current.element = element;\n\n if (element.isContentEditable)\n this.insertTextAtCursor(this.current.collection.trigger);\n else this.insertAtCaret(element, this.current.collection.trigger);\n\n this.showMenuFor(element);\n }\n\n // TODO: make sure this works for inputs/textareas\n placeCaretAtEnd(el) {\n el.focus();\n if (\n typeof window.getSelection != \"undefined\" &&\n typeof document.createRange != \"undefined\"\n ) {\n var range = document.createRange();\n range.selectNodeContents(el);\n range.collapse(false);\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (typeof document.body.createTextRange != \"undefined\") {\n var textRange = document.body.createTextRange();\n textRange.moveToElementText(el);\n textRange.collapse(false);\n textRange.select();\n }\n }\n\n // for contenteditable\n insertTextAtCursor(text) {\n var sel, range;\n sel = window.getSelection();\n range = sel.getRangeAt(0);\n range.deleteContents();\n var textNode = document.createTextNode(text);\n range.insertNode(textNode);\n range.selectNodeContents(textNode);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n\n // for regular inputs\n insertAtCaret(textarea, text) {\n var scrollPos = textarea.scrollTop;\n var caretPos = textarea.selectionStart;\n\n var front = textarea.value.substring(0, caretPos);\n var back = textarea.value.substring(\n textarea.selectionEnd,\n textarea.value.length\n );\n textarea.value = front + text + back;\n caretPos = caretPos + text.length;\n textarea.selectionStart = caretPos;\n textarea.selectionEnd = caretPos;\n textarea.focus();\n textarea.scrollTop = scrollPos;\n }\n\n hideMenu() {\n if (this.menu) {\n this.menu.style.cssText = \"display: none;\";\n this.isActive = false;\n this.menuSelected = 0;\n this.current = {};\n }\n }\n\n selectItemAtIndex(index, originalEvent) {\n index = parseInt(index);\n if (typeof index !== \"number\" || isNaN(index)) return;\n let item = this.current.filteredItems[index];\n let content = this.current.collection.selectTemplate(item);\n if (content !== null) this.replaceText(content, originalEvent, item);\n }\n\n replaceText(content, originalEvent, item) {\n this.range.replaceTriggerText(content, true, true, originalEvent, item);\n }\n\n _append(collection, newValues, replace) {\n if (typeof collection.values === \"function\") {\n throw new Error(\"Unable to append to values, as it is a function.\");\n } else if (!replace) {\n collection.values = collection.values.concat(newValues);\n } else {\n collection.values = newValues;\n }\n }\n\n append(collectionIndex, newValues, replace) {\n let index = parseInt(collectionIndex);\n if (typeof index !== \"number\")\n throw new Error(\"please provide an index for the collection to update.\");\n\n let collection = this.collection[index];\n\n this._append(collection, newValues, replace);\n }\n\n appendCurrent(newValues, replace) {\n if (this.isActive) {\n this._append(this.current.collection, newValues, replace);\n } else {\n throw new Error(\n \"No active state. Please use append instead and pass an index.\"\n );\n }\n }\n\n detach(el) {\n if (!el) {\n throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n }\n\n // Check if it is a jQuery collection\n if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n el = el.get();\n }\n\n // Is el an Array/Array-like object?\n if (\n el.constructor === NodeList ||\n el.constructor === HTMLCollection ||\n el.constructor === Array\n ) {\n let length = el.length;\n for (var i = 0; i < length; ++i) {\n this._detach(el[i]);\n }\n } else {\n this._detach(el);\n }\n }\n\n _detach(el) {\n this.events.unbind(el);\n if (el.tributeMenu) {\n this.menuEvents.unbind(el.tributeMenu);\n }\n\n setTimeout(() => {\n el.removeAttribute(\"data-tribute\");\n this.isActive = false;\n if (el.tributeMenu) {\n el.tributeMenu.remove();\n }\n });\n }\n}\n\n/**\n * Tribute.js\n * Native ES6 JavaScript @mention Plugin\n **/\n\nexport default Tribute;\n","import '../assets/NcProgressBar-B6wveIA1.css';\nimport { defineComponent, useCssVars, computed, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = [\"aria-valuenow\"];\nconst _hoisted_2 = [\"height\", \"width\"];\nconst _hoisted_3 = [\"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-width\", \"r\", \"cx\", \"cy\"];\nconst _hoisted_4 = [\"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-width\", \"r\", \"cx\", \"cy\"];\nconst _hoisted_5 = {\n key: 1,\n class: \"progress-bar-container\"\n};\nconst _hoisted_6 = [\"value\"];\nconst _hoisted_7 = {\n key: 0,\n class: \"progress-bar__value\"\n};\nconst gridBaseline = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-grid-baseline\"));\nconst clickableArea = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-clickable-area\"));\nconst clickableAreaSmall = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--clickable-area-small\"));\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcProgressBar\",\n props: {\n value: { default: 0 },\n size: { default: \"small\" },\n error: { type: Boolean },\n type: { default: \"linear\" },\n color: { default: \"var(--color-primary-element)\" },\n showValue: { type: Boolean, default: false }\n },\n setup(__props) {\n useCssVars((_ctx) => ({\n \"v3a86fec2\": _ctx.color,\n \"v57442460\": heightPx.value\n }));\n const props = __props;\n const normalizedProgress = computed(() => Math.max(0, Math.min(100, props.value)) / 100);\n const height = computed(() => {\n if (typeof props.size === \"number\") {\n return Math.round(props.size);\n }\n if (props.type === \"circular\") {\n if (props.size === \"medium\") {\n return clickableArea;\n } else {\n return clickableAreaSmall;\n }\n }\n if (props.size === \"medium\") {\n return 1.5 * gridBaseline;\n }\n return gridBaseline;\n });\n const heightPx = computed(() => `${height.value}px`);\n const strokeWidth = computed(() => Math.max(gridBaseline, height.value / clickableArea * gridBaseline));\n const circleCenterPosition = computed(() => height.value / 2);\n const circleRadius = computed(() => height.value / 2 - strokeWidth.value);\n const circumference = computed(() => circleRadius.value * 2 * Math.PI);\n return (_ctx, _cache) => {\n return __props.type === \"circular\" ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n role: \"progressbar\",\n \"aria-valuenow\": __props.value,\n class: normalizeClass([{ \"progress-bar--error\": __props.error }, \"progress-bar progress-bar--circular\"])\n }, [\n (openBlock(), createElementBlock(\"svg\", {\n height: height.value,\n width: height.value\n }, [\n createElementVNode(\"circle\", {\n stroke: \"currentColor\",\n fill: \"transparent\",\n \"stroke-dasharray\": `${normalizedProgress.value * circumference.value} ${(1 - normalizedProgress.value) * circumference.value}`,\n \"stroke-dashoffset\": 0.25 * circumference.value,\n \"stroke-width\": strokeWidth.value,\n r: circleRadius.value,\n cx: circleCenterPosition.value,\n cy: circleCenterPosition.value\n }, null, 8, _hoisted_3),\n createElementVNode(\"circle\", {\n stroke: \"var(--color-background-darker)\",\n fill: \"transparent\",\n \"stroke-dasharray\": `${(1 - normalizedProgress.value) * circumference.value} ${normalizedProgress.value * circumference.value}`,\n \"stroke-dashoffset\": (0.25 - normalizedProgress.value) * circumference.value,\n \"stroke-width\": strokeWidth.value,\n r: circleRadius.value,\n cx: circleCenterPosition.value,\n cy: circleCenterPosition.value\n }, null, 8, _hoisted_4)\n ], 8, _hoisted_2))\n ], 10, _hoisted_1)) : (openBlock(), createElementBlock(\"div\", _hoisted_5, [\n createElementVNode(\"progress\", {\n class: normalizeClass([\"progress-bar progress-bar--linear vue\", { \"progress-bar--error\": __props.error }]),\n value: __props.value,\n max: \"100\"\n }, null, 10, _hoisted_6),\n __props.showValue ? (openBlock(), createElementBlock(\"span\", _hoisted_7, toDisplayString(__props.value) + \"%\", 1)) : createCommentVNode(\"\", true)\n ]));\n };\n }\n});\nconst NcProgressBar = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-353fa414\"]]);\nexport {\n NcProgressBar as N\n};\n//# sourceMappingURL=NcProgressBar-C-ane-Ni.mjs.map\n","import '../assets/NcRelatedResourcesPanel-CiG_Ixb6.css';\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { r as register, S as t38, a as t, T as t42, U as t9 } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { g as getRoute } from \"./autolink-B2azbG18.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, createVNode, withCtx, createTextVNode, toDisplayString, createElementVNode, mergeProps, createCommentVNode, Fragment, renderList, createBlock } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { C as ChevronDown } from \"./ChevronDown-C6gc637b.mjs\";\nimport { C as ChevronUp } from \"./ChevronUp-ChH8oB7p.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nregister(t38);\nconst _sfc_main$4 = {\n name: \"NcResource\",\n components: {\n NcButton\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n icon: {\n type: String,\n required: true\n },\n name: {\n type: String,\n required: true\n },\n url: {\n type: String,\n required: true\n }\n },\n data() {\n return {\n labelTranslated: t('Open link to \"{resourceName}\"', { resourceName: this.name })\n };\n },\n computed: {\n route() {\n return getRoute(this.$router, this.url);\n }\n },\n methods: {\n t\n }\n};\nconst _hoisted_1$4 = { class: \"resource\" };\nconst _hoisted_2$4 = { class: \"resource__icon\" };\nconst _hoisted_3$3 = [\"src\"];\nfunction _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcButton = resolveComponent(\"NcButton\");\n return openBlock(), createElementBlock(\"li\", _hoisted_1$4, [\n createVNode(_component_NcButton, {\n class: \"resource__button\",\n \"aria-label\": $data.labelTranslated,\n to: $options.route,\n href: $options.route ? null : $props.url,\n variant: \"tertiary\"\n }, {\n icon: withCtx(() => [\n createElementVNode(\"div\", _hoisted_2$4, [\n createElementVNode(\"img\", { src: $props.icon }, null, 8, _hoisted_3$3)\n ])\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString($props.name), 1)\n ]),\n _: 1\n }, 8, [\"aria-label\", \"to\", \"href\"])\n ]);\n}\nconst NcResource = /* @__PURE__ */ _export_sfc(_sfc_main$4, [[\"render\", _sfc_render$4], [\"__scopeId\", \"data-v-77577e58\"]]);\nconst _sfc_main$3 = {\n name: \"AccountGroupIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$3 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$3 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$2 = { d: \"M12,5.5A3.5,3.5 0 0,1 15.5,9A3.5,3.5 0 0,1 12,12.5A3.5,3.5 0 0,1 8.5,9A3.5,3.5 0 0,1 12,5.5M5,8C5.56,8 6.08,8.15 6.53,8.42C6.38,9.85 6.8,11.27 7.66,12.38C7.16,13.34 6.16,14 5,14A3,3 0 0,1 2,11A3,3 0 0,1 5,8M19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14C17.84,14 16.84,13.34 16.34,12.38C17.2,11.27 17.62,9.85 17.47,8.42C17.92,8.15 18.44,8 19,8M5.5,18.25C5.5,16.18 8.41,14.5 12,14.5C15.59,14.5 18.5,16.18 18.5,18.25V20H5.5V18.25M0,20V18.5C0,17.11 1.89,15.94 4.45,15.6C3.86,16.28 3.5,17.22 3.5,18.25V20H0M24,20H20.5V18.25C20.5,17.22 20.14,16.28 19.55,15.6C22.11,15.94 24,17.11 24,18.5V20Z\" };\nconst _hoisted_4$2 = { key: 0 };\nfunction _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon account-group-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$2, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$2, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$3))\n ], 16, _hoisted_1$3);\n}\nconst AccountGroup = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$3]]);\nconst _sfc_main$2 = {\n name: \"OpenInNewIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$2 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon open-in-new-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$2))\n ], 16, _hoisted_1$2);\n}\nconst OpenInNew = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$2]]);\nregister(t42);\nconst teamResourceProviders = getCapabilities()?.circles?.teamResourceProviders ?? [];\nconst _sfc_main$1 = {\n name: \"NcTeamResources\",\n components: {\n AccountGroup,\n ChevronDown,\n ChevronUp,\n OpenInNew,\n NcButton,\n NcIconSvgWrapper\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n providerId: {\n type: String,\n default: null\n },\n itemId: {\n type: [String, Number],\n default: null\n }\n },\n data() {\n return {\n appEnabled: OC?.appswebroots?.circles !== void 0 && (OC.config.version.split(\".\")[0] ?? 0) >= 29,\n loading: false,\n teamResources: null,\n teamOpen: []\n };\n },\n computed: {\n isVisible() {\n return !this.loading && this.teamResources?.length > 0;\n },\n teamProviders() {\n return (teamId) => {\n const team = this.teamResources.find((t2) => t2.teamId === teamId);\n return team.resources?.reduce((acc, resource) => {\n if (resource.provider.id === this.providerId && resource.id === String(this.itemId)) {\n return acc;\n }\n if (!acc[resource.provider.id]) {\n acc[resource.provider.id] = resource.provider;\n acc[resource.provider.id].resources = [];\n }\n if (resource.provider.id === this.providerId && resource.id === String(this.itemId)) {\n return acc;\n }\n acc[resource.provider.id].resources.push(resource);\n return acc;\n }, {});\n };\n },\n open() {\n return (teamId) => {\n return this.teamOpen.indexOf(teamId) !== -1;\n };\n }\n },\n watch: {\n providerId() {\n this.fetchTeamResources();\n },\n itemId() {\n this.fetchTeamResources();\n }\n },\n created() {\n this.fetchTeamResources();\n },\n methods: {\n t,\n async fetchTeamResources() {\n if (!teamResourceProviders.includes(this.providerId)) {\n return;\n }\n try {\n this.loading = true;\n const response = await axios.get(generateOcsUrl(`/teams/resources/${this.providerId}/${this.itemId}`));\n this.teamResources = response.data.ocs.data.teams;\n this.teamOpen = [this.teamResources[0]?.teamId];\n } catch (error) {\n this.teamResources = null;\n logger.error(\"[NcTeamResources] Failed to fetch resources\", { error });\n } finally {\n this.loading = false;\n }\n },\n toggleOpen(teamId, open) {\n if (open) {\n this.teamOpen.push(teamId);\n } else {\n this.teamOpen.splice(this.teamOpen.indexOf(teamId), 1);\n }\n }\n }\n};\nconst _hoisted_1$1 = {\n key: 0,\n class: \"team-resources\"\n};\nconst _hoisted_2$1 = { class: \"team-resources__header\" };\nconst _hoisted_3 = [\"open\", \"onToggle\"];\nconst _hoisted_4 = { class: \"related-team__header\" };\nconst _hoisted_5 = { class: \"related-team__name\" };\nconst _hoisted_6 = { key: 0 };\nconst _hoisted_7 = [\"href\"];\nconst _hoisted_8 = {\n key: 0,\n class: \"resource__icon\"\n};\nconst _hoisted_9 = {\n key: 2,\n class: \"resource__icon\"\n};\nconst _hoisted_10 = [\"src\"];\nconst _hoisted_11 = { class: \"resource__name\" };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_AccountGroup = resolveComponent(\"AccountGroup\");\n const _component_OpenInNew = resolveComponent(\"OpenInNew\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n const _component_ChevronUp = resolveComponent(\"ChevronUp\");\n const _component_ChevronDown = resolveComponent(\"ChevronDown\");\n const _component_NcIconSvgWrapper = resolveComponent(\"NcIconSvgWrapper\");\n return $data.appEnabled && $options.isVisible ? (openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n createElementVNode(\"h5\", _hoisted_2$1, toDisplayString($options.t(\"Related team resources\")), 1),\n (openBlock(true), createElementBlock(Fragment, null, renderList($data.teamResources, (team) => {\n return openBlock(), createElementBlock(\"details\", {\n key: team.teamId,\n name: \"Team resources\",\n class: \"related-team\",\n open: $options.open(team.teamId),\n onToggle: (event) => $options.toggleOpen(team.teamId, event.target.open)\n }, [\n createElementVNode(\"summary\", _hoisted_4, [\n createElementVNode(\"h5\", _hoisted_5, [\n createVNode(_component_AccountGroup, { size: 20 }),\n createTextVNode(\" \" + toDisplayString(team.displayName), 1)\n ]),\n createVNode(_component_NcButton, {\n \"aria-label\": $options.t(\"View team\"),\n href: team.link,\n title: $options.t(\"View team\"),\n variant: \"tertiary\"\n }, {\n icon: withCtx(() => [\n createVNode(_component_OpenInNew, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"href\", \"title\"]),\n $options.open(team.teamId) ? (openBlock(), createBlock(_component_ChevronUp, {\n key: 0,\n size: 20\n })) : (openBlock(), createBlock(_component_ChevronDown, {\n key: 1,\n size: 20\n }))\n ]),\n createElementVNode(\"div\", null, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.teamProviders(team.teamId), (provider) => {\n return openBlock(), createElementBlock(\"div\", {\n key: provider.id,\n class: \"related-team-provider\"\n }, [\n provider.resources.length > 0 ? (openBlock(), createElementBlock(\"h6\", _hoisted_6, toDisplayString(provider.name), 1)) : createCommentVNode(\"\", true),\n createElementVNode(\"ul\", null, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(provider.resources, (resource) => {\n return openBlock(), createElementBlock(\"li\", {\n key: resource.url,\n class: \"related-team-resource\"\n }, [\n createElementVNode(\"a\", {\n href: resource.url,\n class: \"related-team-resource__link\"\n }, [\n resource.iconEmoji ? (openBlock(), createElementBlock(\"span\", _hoisted_8, toDisplayString(resource.iconEmoji), 1)) : resource.iconSvg ? (openBlock(), createBlock(_component_NcIconSvgWrapper, {\n key: 1,\n class: \"resource__icon\",\n svg: resource.iconSvg,\n size: 20\n }, null, 8, [\"svg\"])) : resource.iconURL ? (openBlock(), createElementBlock(\"span\", _hoisted_9, [\n createElementVNode(\"img\", {\n src: resource.iconURL,\n alt: \"\"\n }, null, 8, _hoisted_10)\n ])) : createCommentVNode(\"\", true),\n createElementVNode(\"span\", _hoisted_11, toDisplayString(resource.label), 1)\n ], 8, _hoisted_7)\n ]);\n }), 128))\n ])\n ]);\n }), 128))\n ])\n ], 40, _hoisted_3);\n }), 128))\n ])) : createCommentVNode(\"\", true);\n}\nconst NcTeamResources = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-10ef45ac\"]]);\nregister(t9);\nconst _sfc_main = {\n name: \"NcRelatedResourcesPanel\",\n components: {\n NcResource,\n NcTeamResources\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * The provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n */\n providerId: {\n type: String,\n default: null\n },\n /**\n * The item id which uniquely identities the e.g. Calendar event, Deck board, file, Talk room, etc.\n */\n itemId: {\n type: [String, Number],\n default: null\n },\n /**\n * Limits to specific resource type. i.e. any provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n */\n resourceType: {\n type: String,\n default: \"\"\n },\n /**\n * Set the maximum number of resources to load\n */\n limit: {\n type: Number,\n default: 0\n },\n /**\n * Only used by the files sidebar\n *\n * File info is passed when registered with `OCA.Sharing.ShareTabSections.registerSection()`\n */\n fileInfo: {\n type: Object,\n default: null\n },\n /**\n * Make the header name dynamic\n */\n header: {\n type: String,\n default: t(\"Related resources\")\n },\n description: {\n type: String,\n default: t(\"Anything shared with the same group of people will show up here\")\n },\n /**\n * If this element is used on a primary element set to true for primary styling.\n */\n primary: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"hasError\",\n \"hasResources\"\n ],\n data() {\n return {\n appEnabled: OC?.appswebroots?.related_resources !== void 0,\n loading: false,\n error: null,\n resources: []\n };\n },\n computed: {\n isVisible() {\n if (this.loading) {\n return false;\n }\n return this.error ?? this.resources.length > 0;\n },\n subline() {\n if (this.error) {\n return t(\"Error getting related resources. Please contact your system administrator if you have any questions.\");\n }\n return this.description;\n },\n hasResourceInfo() {\n if (this.providerId !== null && this.itemId !== null) {\n return true;\n }\n if (this.fileInfo !== null) {\n return true;\n }\n return false;\n },\n isFiles() {\n return this.fileInfo?.id !== void 0;\n },\n url() {\n let providerId;\n let itemId;\n if (this.isFiles) {\n providerId = \"files\";\n itemId = this.fileInfo.id;\n } else {\n providerId = this.providerId;\n itemId = this.itemId;\n }\n return generateOcsUrl(\"/apps/related_resources/related/{providerId}?itemId={itemId}&resourceType={resourceType}&limit={limit}&format=json\", {\n providerId,\n itemId,\n resourceType: this.resourceType,\n limit: this.limit\n });\n }\n },\n watch: {\n providerId() {\n this.fetchRelatedResources();\n },\n itemId() {\n this.fetchRelatedResources();\n },\n fileInfo() {\n this.fetchRelatedResources();\n },\n error(error) {\n this.$emit(\"hasError\", Boolean(error));\n },\n resources(resources) {\n this.$emit(\"hasResources\", resources.length > 0);\n }\n },\n created() {\n this.fetchRelatedResources();\n },\n methods: {\n t,\n async fetchRelatedResources() {\n if (!this.appEnabled || !this.hasResourceInfo) {\n return;\n }\n this.loading = true;\n this.error = null;\n this.resources = [];\n try {\n const response = await axios.get(this.url);\n this.resources = response.data.ocs?.data;\n } catch (error) {\n this.error = error;\n logger.error(\"[NcRelatedResourcesPanel] Failed to fetch resources\", { error });\n } finally {\n this.loading = false;\n }\n }\n }\n};\nconst _hoisted_1 = {\n key: 0,\n class: \"related-resources\"\n};\nconst _hoisted_2 = { class: \"related-resources__header\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcTeamResources = resolveComponent(\"NcTeamResources\");\n const _component_NcResource = resolveComponent(\"NcResource\");\n return openBlock(), createElementBlock(\"div\", null, [\n createVNode(_component_NcTeamResources, {\n providerId: $props.providerId,\n itemId: $props.itemId\n }, null, 8, [\"providerId\", \"itemId\"]),\n $data.appEnabled && $options.isVisible ? (openBlock(), createElementBlock(\"div\", _hoisted_1, [\n createElementVNode(\"div\", _hoisted_2, [\n createElementVNode(\"h5\", null, toDisplayString($props.header), 1),\n createElementVNode(\"p\", null, toDisplayString($options.subline), 1)\n ]),\n (openBlock(true), createElementBlock(Fragment, null, renderList($data.resources, (resource) => {\n return openBlock(), createBlock(_component_NcResource, {\n key: resource.itemId,\n class: \"related-resources__entry\",\n icon: resource.icon,\n name: resource.title,\n url: resource.url\n }, null, 8, [\"icon\", \"name\", \"url\"]);\n }), 128))\n ])) : createCommentVNode(\"\", true)\n ]);\n}\nconst NcRelatedResourcesPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-78029c82\"]]);\nexport {\n NcRelatedResourcesPanel as N\n};\n//# sourceMappingURL=NcRelatedResourcesPanel-Bk9l-BN3.mjs.map\n","import { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nwindow._vue_richtext_widgets ??= {};\nwindow._registerWidget ??= (id, callback, onDestroy, props) => {\n registerWidget(id, callback, onDestroy, props);\n};\nfunction registerWidget(id, callback, onDestroy = () => {\n}, props) {\n const propsWithDefaults = {\n hasInteractiveView: true,\n fullWidth: false,\n ...props\n };\n if (window._vue_richtext_widgets[id]) {\n logger.error(`[ReferencePicker]: Widget for id ${id} already registered`);\n return;\n }\n window._vue_richtext_widgets[id] = {\n id,\n callback,\n onDestroy,\n ...propsWithDefaults\n };\n}\nfunction renderWidget(el, options) {\n const { richObjectType, richObject, accessible, interactive } = options;\n if (richObjectType === \"open-graph\") {\n return;\n }\n if (!window._vue_richtext_widgets[richObjectType]) {\n logger.error(\"Widget for rich object type \" + richObjectType + \" not registered\");\n return;\n }\n window._vue_richtext_widgets[richObjectType].callback(el, { richObjectType, richObject, accessible, interactive });\n}\nfunction destroyWidget(richObjectType, el) {\n if (richObjectType === \"open-graph\") {\n return;\n }\n if (!window._vue_richtext_widgets[richObjectType]) {\n return;\n }\n window._vue_richtext_widgets[richObjectType].onDestroy(el);\n}\nfunction isWidgetRegistered(id) {\n return !!window._vue_richtext_widgets[id];\n}\nfunction hasInteractiveView(id) {\n return !!window._vue_richtext_widgets[id]?.hasInteractiveView;\n}\nfunction hasFullWidth(id) {\n return !!window._vue_richtext_widgets[id]?.fullWidth;\n}\nwindow._vue_richtext_custom_picker_elements ??= {};\nwindow._registerCustomPickerElement ??= registerCustomPickerElement;\nclass NcCustomPickerRenderResult {\n element;\n object;\n /**\n * @param element - The HTML element\n * @param object - The object\n */\n constructor(element, object) {\n this.element = element;\n this.object = object;\n }\n}\nfunction isCustomPickerElementRegistered(id) {\n return !!window._vue_richtext_custom_picker_elements[id];\n}\nfunction getCustomPickerElementSize(id) {\n const size = window._vue_richtext_custom_picker_elements[id]?.size;\n if (size && [\"small\", \"normal\", \"large\", \"full\"].includes(size)) {\n return size;\n }\n return null;\n}\nfunction registerCustomPickerElement(id, callback, onDestroy = () => {\n}, size = \"large\") {\n if (window._vue_richtext_custom_picker_elements[id]) {\n logger.error(`Custom reference picker element for id ${id} already registered`);\n return;\n }\n window._vue_richtext_custom_picker_elements[id] = {\n id,\n callback,\n onDestroy,\n size\n };\n}\nfunction renderCustomPickerElement(el, options) {\n const { providerId, accessible } = options;\n if (!window._vue_richtext_custom_picker_elements[providerId]) {\n logger.error(`Custom reference picker element for reference provider ID ${providerId} not registered`);\n return;\n }\n return window._vue_richtext_custom_picker_elements[providerId].callback(el, { providerId, accessible });\n}\nfunction destroyCustomPickerElement(providerId, el, renderResult) {\n if (!window._vue_richtext_custom_picker_elements[providerId]) {\n return;\n }\n window._vue_richtext_custom_picker_elements[providerId].onDestroy(el, renderResult);\n}\nexport {\n NcCustomPickerRenderResult as N,\n destroyWidget as a,\n isWidgetRegistered as b,\n registerWidget as c,\n destroyCustomPickerElement as d,\n renderCustomPickerElement as e,\n renderWidget as f,\n getCustomPickerElementSize as g,\n hasInteractiveView as h,\n isCustomPickerElementRegistered as i,\n hasFullWidth as j,\n registerCustomPickerElement as r\n};\n//# sourceMappingURL=customPickerElements-Cu7bLbap.mjs.map\n","import '../assets/referencePickerModal-Dod7nzta.css';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, resolveComponent, createVNode, withCtx, defineComponent, inject, ref, useTemplateRef, nextTick, computed, watch, onBeforeUnmount, normalizeClass, createBlock, resolveDynamicComponent, normalizeStyle, createTextVNode, unref, withKeys, withModifiers, createApp } from \"vue\";\nimport { emit } from \"@nextcloud/event-bus\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { I as IconClose } from \"./Close-CuhcJnX2.mjs\";\nimport { e as renderCustomPickerElement, d as destroyCustomPickerElement, i as isCustomPickerElementRegistered, j as hasFullWidth, b as isWidgetRegistered, h as hasInteractiveView, f as renderWidget, a as destroyWidget, g as getCustomPickerElementSize } from \"./customPickerElements-Cu7bLbap.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { loadState } from \"@nextcloud/initial-state\";\nimport { imagePath, generateOcsUrl } from \"@nextcloud/router\";\nimport { r as register, W as t8, a as t, X as t46, Y as t41, Z as t24, _ as t25, q as t43, $ as t32, A as t19, a0 as t12 } from \"./_l10n-CG4CuN3H.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { N as NcEmptyContent } from \"./NcEmptyContent-CGAPqk4S.mjs\";\nimport { _ as _sfc_main$a } from \"./NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs\";\nimport { N as NcSelect } from \"./NcSelect-BOFzoCwK.mjs\";\nimport debounce from \"debounce\";\nimport { useElementSize, useIntersectionObserver } from \"@vueuse/core\";\nimport { routerKey, RouterLink } from \"vue-router\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { g as getRoute } from \"./autolink-B2azbG18.mjs\";\nimport { N as NcLoadingIcon } from \"./NcLoadingIcon-BOVpFVQz.mjs\";\nimport { _ as _sfc_main$b } from \"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r.mjs\";\nimport { I as IconDotsHorizontal } from \"./NcActions-DY4GGONi.mjs\";\nimport { N as NcModal } from \"./NcModal-B-YLND3e.mjs\";\nconst _sfc_main$9 = {\n name: \"ArrowLeftIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$9 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$7 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$6 = { d: \"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z\" };\nconst _hoisted_4$5 = { key: 0 };\nfunction _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon arrow-left-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$6, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$5, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$7))\n ], 16, _hoisted_1$9);\n}\nconst ArrowLeftIcon = /* @__PURE__ */ _export_sfc(_sfc_main$9, [[\"render\", _sfc_render$8]]);\nconst _sfc_main$8 = {\n name: \"NcCustomPickerElement\",\n props: {\n /**\n * The reference provider\n */\n provider: {\n type: Object,\n required: true\n }\n },\n emits: [\n \"cancel\",\n \"submit\"\n ],\n data() {\n return {\n isRegistered: isCustomPickerElementRegistered(this.provider.id),\n renderResult: null\n };\n },\n mounted() {\n if (this.isRegistered) {\n this.renderElement();\n }\n },\n beforeUnmount() {\n if (this.isRegistered) {\n destroyCustomPickerElement(this.provider.id, this.$el, this.renderResult);\n }\n },\n methods: {\n renderElement() {\n if (this.$refs.domElement) {\n this.$refs.domElement.innerHTML = \"\";\n }\n const renderFunctionResult = renderCustomPickerElement(this.$refs.domElement, { providerId: this.provider.id, accessible: false });\n Promise.resolve(renderFunctionResult).then((result) => {\n this.renderResult = result;\n if (this.renderResult.object?._isVue && this.renderResult.object?.$on) {\n this.renderResult.object.$on(\"submit\", this.onSubmit);\n this.renderResult.object.$on(\"cancel\", this.onCancel);\n }\n this.renderResult.element.addEventListener(\"submit\", (e) => {\n this.onSubmit(e.detail);\n });\n this.renderResult.element.addEventListener(\"cancel\", this.onCancel);\n });\n },\n onSubmit(value) {\n this.$emit(\"submit\", value);\n },\n onCancel() {\n this.$emit(\"cancel\");\n }\n }\n};\nconst _hoisted_1$8 = { ref: \"domElement\" };\nfunction _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", _hoisted_1$8, null, 512);\n}\nconst NcCustomPickerElement = /* @__PURE__ */ _export_sfc(_sfc_main$8, [[\"render\", _sfc_render$7], [\"__scopeId\", \"data-v-e408867a\"]]);\nconst _sfc_main$7 = {\n name: \"LinkVariantIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$7 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$6 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$5 = { d: \"M10.59,13.41C11,13.8 11,14.44 10.59,14.83C10.2,15.22 9.56,15.22 9.17,14.83C7.22,12.88 7.22,9.71 9.17,7.76V7.76L12.71,4.22C14.66,2.27 17.83,2.27 19.78,4.22C21.73,6.17 21.73,9.34 19.78,11.29L18.29,12.78C18.3,11.96 18.17,11.14 17.89,10.36L18.36,9.88C19.54,8.71 19.54,6.81 18.36,5.64C17.19,4.46 15.29,4.46 14.12,5.64L10.59,9.17C9.41,10.34 9.41,12.24 10.59,13.41M13.41,9.17C13.8,8.78 14.44,8.78 14.83,9.17C16.78,11.12 16.78,14.29 14.83,16.24V16.24L11.29,19.78C9.34,21.73 6.17,21.73 4.22,19.78C2.27,17.83 2.27,14.66 4.22,12.71L5.71,11.22C5.7,12.04 5.83,12.86 6.11,13.65L5.64,14.12C4.46,15.29 4.46,17.19 5.64,18.36C6.81,19.54 8.71,19.54 9.88,18.36L13.41,14.83C14.59,13.66 14.59,11.76 13.41,10.59C13,10.2 13,9.56 13.41,9.17Z\" };\nconst _hoisted_4$4 = { key: 0 };\nfunction _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon link-variant-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$5, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$6))\n ], 16, _hoisted_1$7);\n}\nconst LinkVariantIcon = /* @__PURE__ */ _export_sfc(_sfc_main$7, [[\"render\", _sfc_render$6]]);\nregister(t8);\nconst anyLinkProviderId = \"any-link\";\nconst anyLinkProvider = {\n id: anyLinkProviderId,\n title: t(\"Any link\"),\n order: 0,\n icon_url: imagePath(\"core\", \"filetypes/link.svg\")\n};\nwindow._vue_richtext_reference_providers ??= loadState(\"core\", \"reference-provider-list\", []);\nwindow._vue_richtext_reference_provider_timestamps ??= loadState(\"core\", \"reference-provider-timestamps\", {});\nfunction getProvider(providerId) {\n if (providerId === anyLinkProviderId) {\n return anyLinkProvider;\n }\n return getProviders().find((p) => p.id === providerId);\n}\nfunction getProviders() {\n return window._vue_richtext_reference_providers.filter((p) => {\n const keep = !!p.search_providers_ids && p.search_providers_ids.length > 0 || isCustomPickerElementRegistered(p.id);\n if (!keep) {\n logger.debug(`[smart picker] ${p.id} reference provider is discoverable but does not have any related search provider or custom picker component registered`);\n }\n return keep;\n });\n}\nfunction sortProviders(providerList) {\n const timestamps = window._vue_richtext_reference_provider_timestamps;\n return providerList.sort((a, b) => {\n return a.order === b.order ? 0 : a.order > b.order ? 1 : -1;\n }).sort((a, b) => {\n const ta = timestamps[a.id];\n const tb = timestamps[b.id];\n return ta === tb ? 0 : tb === void 0 ? -1 : ta === void 0 ? 1 : ta > tb ? -1 : 1;\n });\n}\nfunction searchProvider(query, limit) {\n const providers = getProviders();\n const escapedQuery = query.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n const regexp = new RegExp(escapedQuery, \"i\");\n const sortedProviders = sortProviders(providers);\n const filteredSortedProviders = sortedProviders.filter((p) => {\n return p.title.match(regexp);\n });\n const searchResult = limit ? filteredSortedProviders.slice(0, limit) : filteredSortedProviders;\n if (query === \"\" || searchResult.length === 0) {\n searchResult.push(anyLinkProvider);\n }\n return searchResult;\n}\nasync function touchProvider(providerId) {\n const timestamp = Math.floor(Date.now() / 1e3);\n const url = generateOcsUrl(\"references/provider/{providerId}\", { providerId });\n await axios.put(url, { timestamp });\n window._vue_richtext_reference_provider_timestamps[providerId] = timestamp;\n}\nregister(t41, t46);\n/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction isUrl(str) {\n try {\n return Boolean(new URL(str));\n } catch {\n return false;\n }\n}\nconst _sfc_main$6 = {\n name: \"NcProviderList\",\n components: {\n NcSelect,\n NcHighlight: _sfc_main$a,\n NcEmptyContent,\n LinkVariantIcon\n },\n emits: [\n \"selectProvider\",\n \"submit\"\n ],\n data() {\n return {\n selectedProvider: null,\n query: \"\",\n multiselectPlaceholder: t(\"Select provider\"),\n providerIconAlt: t(\"Provider icon\")\n };\n },\n computed: {\n options() {\n const result = [];\n if (this.query !== \"\" && isUrl(this.query)) {\n result.push({\n id: this.query,\n title: this.query,\n isLink: true\n });\n }\n result.push(...searchProvider(this.query));\n return result;\n }\n },\n methods: {\n focus() {\n setTimeout(() => {\n this.$refs[\"provider-select\"]?.$el?.querySelector(\"#provider-select-input\")?.focus();\n }, 300);\n },\n onProviderSelected(p) {\n if (p !== null) {\n if (p.isLink) {\n this.$emit(\"submit\", p.title);\n } else {\n this.$emit(\"selectProvider\", p);\n }\n this.selectedProvider = null;\n }\n },\n onSearch(query) {\n this.query = query;\n }\n }\n};\nconst _hoisted_1$6 = { class: \"provider-list\" };\nconst _hoisted_2$5 = {\n key: 0,\n class: \"provider\"\n};\nconst _hoisted_3$4 = {\n key: 1,\n class: \"provider\"\n};\nconst _hoisted_4$3 = [\"src\", \"alt\"];\nfunction _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_LinkVariantIcon = resolveComponent(\"LinkVariantIcon\");\n const _component_NcHighlight = resolveComponent(\"NcHighlight\");\n const _component_NcSelect = resolveComponent(\"NcSelect\");\n const _component_NcEmptyContent = resolveComponent(\"NcEmptyContent\");\n return openBlock(), createElementBlock(\"div\", _hoisted_1$6, [\n createVNode(_component_NcSelect, {\n ref: \"provider-select\",\n modelValue: $data.selectedProvider,\n \"onUpdate:modelValue\": [\n _cache[0] || (_cache[0] = ($event) => $data.selectedProvider = $event),\n $options.onProviderSelected\n ],\n class: \"provider-list--select\",\n inputId: \"provider-select-input\",\n label: \"title\",\n placeholder: $data.multiselectPlaceholder,\n options: $options.options,\n appendToBody: false,\n clearSearchOnSelect: true,\n clearSearchOnBlur: () => false,\n filterable: false,\n onSearch: $options.onSearch\n }, {\n option: withCtx((option) => [\n option.isLink ? (openBlock(), createElementBlock(\"div\", _hoisted_2$5, [\n createVNode(_component_LinkVariantIcon, {\n class: \"link-icon\",\n size: 20\n }),\n createElementVNode(\"span\", null, toDisplayString(option.title), 1)\n ])) : (openBlock(), createElementBlock(\"div\", _hoisted_3$4, [\n createElementVNode(\"img\", {\n class: \"provider-icon\",\n src: option.icon_url,\n alt: $data.providerIconAlt\n }, null, 8, _hoisted_4$3),\n createVNode(_component_NcHighlight, {\n class: \"option-text\",\n search: $data.query,\n text: option.title\n }, null, 8, [\"search\", \"text\"])\n ]))\n ]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"options\", \"onSearch\", \"onUpdate:modelValue\"]),\n createVNode(_component_NcEmptyContent, { class: \"provider-list--empty-content\" }, {\n icon: withCtx(() => [\n createVNode(_component_LinkVariantIcon)\n ]),\n _: 1\n })\n ]);\n}\nconst NcProviderList = /* @__PURE__ */ _export_sfc(_sfc_main$6, [[\"render\", _sfc_render$5], [\"__scopeId\", \"data-v-ea81d3af\"]]);\nregister(t24);\nconst _hoisted_1$5 = [\"src\"];\nconst _hoisted_2$4 = { class: \"widget-default--details\" };\nconst _hoisted_3$3 = { class: \"widget-default--name\" };\nconst _hoisted_4$2 = { class: \"widget-default--link\" };\nconst IDLE_TIMEOUT = 3 * 60 * 1e3;\nconst _sfc_main$5 = /* @__PURE__ */ defineComponent({\n __name: \"NcReferenceWidget\",\n props: {\n reference: {},\n interactive: { type: Boolean, default: true },\n interactiveOptIn: { type: Boolean, default: false }\n },\n setup(__props) {\n const props = __props;\n const router = inject(routerKey, null);\n const isVisible = ref(false);\n const customWidget = useTemplateRef(\"customWidget\");\n const widgetRoot = useTemplateRef(\"widgetRoot\");\n const { width } = useElementSize(widgetRoot);\n useIntersectionObserver(widgetRoot, ([entry]) => {\n nextTick(() => {\n isVisible.value = entry.isIntersecting;\n });\n });\n const showInteractive = ref(false);\n const rendered = ref(false);\n let idleTimeout = null;\n const isInteractive = computed(() => {\n return !props.interactiveOptIn && props.interactive || showInteractive.value;\n });\n const referenceHasFullWidth = computed(() => {\n return hasFullWidth(props.reference.richObjectType);\n });\n const hasCustomWidget = computed(() => {\n return isWidgetRegistered(props.reference.richObjectType);\n });\n const referenceHasInteractiveView = computed(() => {\n return hasCustomWidget.value && hasInteractiveView(props.reference.richObjectType);\n });\n const noAccess = computed(() => {\n return !props.reference.accessible;\n });\n const numberOfLines = computed(() => {\n const lineCountOffsets = [450, 550, 650, Infinity];\n return lineCountOffsets.findIndex((max) => width.value < max);\n });\n const descriptionStyle = computed(() => {\n if (numberOfLines.value === 0) {\n return {\n display: \"none\"\n };\n }\n const lineClamp = numberOfLines.value;\n return {\n lineClamp,\n webkitLineClamp: lineClamp\n };\n });\n const compactLink = computed(() => {\n const link = props.reference.openGraphObject.link;\n if (!link) {\n return \"\";\n }\n if (link.startsWith(\"https://\")) {\n return link.substring(8);\n }\n if (link.startsWith(\"http://\")) {\n return link.substring(7);\n }\n return link;\n });\n const route = computed(() => {\n return getRoute(router, props.reference.openGraphObject.link);\n });\n const referenceWidgetLinkComponent = computed(() => {\n return route.value ? RouterLink : \"a\";\n });\n const referenceWidgetLinkProps = computed(() => {\n return route.value ? { to: route.value } : { href: props.reference.openGraphObject.link, target: \"_blank\" };\n });\n watch(isVisible, (val) => {\n if (!val) {\n idleTimeout = setTimeout(() => {\n if (!isVisible.value) {\n destroyReferenceWidget();\n }\n }, IDLE_TIMEOUT);\n return;\n }\n if (idleTimeout) {\n clearTimeout(idleTimeout);\n idleTimeout = null;\n }\n if (!rendered.value) {\n renderReferenceWidget();\n }\n }, { immediate: true });\n onBeforeUnmount(() => {\n destroyReferenceWidget();\n });\n function enableInteractive() {\n showInteractive.value = true;\n renderReferenceWidget();\n }\n function renderReferenceWidget() {\n if (!customWidget.value) {\n return;\n }\n if (props.reference.richObjectType === \"open-graph\") {\n return;\n }\n customWidget.value.innerHTML = \"\";\n const widget = document.createElement(\"div\");\n widget.style.width = \"100%\";\n customWidget.value.appendChild(widget);\n nextTick(() => {\n renderWidget(widget, {\n ...props.reference,\n interactive: isInteractive.value\n });\n rendered.value = true;\n });\n }\n function destroyReferenceWidget() {\n if (rendered.value && widgetRoot.value) {\n destroyWidget(props.reference.richObjectType, widgetRoot.value);\n rendered.value = false;\n }\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref_key: \"widgetRoot\",\n ref: widgetRoot,\n class: normalizeClass({ \"toggle-interactive\": referenceHasInteractiveView.value && !isInteractive.value })\n }, [\n __props.reference && hasCustomWidget.value ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n ref_key: \"customWidget\",\n ref: customWidget,\n class: normalizeClass([\"widget-custom\", { \"full-width\": referenceHasFullWidth.value }])\n }, null, 2)) : !noAccess.value && __props.reference && __props.reference.openGraphObject && !hasCustomWidget.value ? (openBlock(), createBlock(resolveDynamicComponent(referenceWidgetLinkComponent.value), mergeProps({ key: 1 }, referenceWidgetLinkProps.value, {\n rel: \"noopener noreferrer\",\n class: \"widget-default\"\n }), {\n default: withCtx(() => [\n __props.reference.openGraphObject.thumb ? (openBlock(), createElementBlock(\"img\", {\n key: 0,\n class: \"widget-default--image\",\n src: __props.reference.openGraphObject.thumb\n }, null, 8, _hoisted_1$5)) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", _hoisted_2$4, [\n createElementVNode(\"p\", _hoisted_3$3, toDisplayString(__props.reference.openGraphObject.name), 1),\n createElementVNode(\"p\", {\n class: \"widget-default--description\",\n style: normalizeStyle(descriptionStyle.value)\n }, toDisplayString(__props.reference.openGraphObject.description), 5),\n createElementVNode(\"p\", _hoisted_4$2, toDisplayString(compactLink.value), 1)\n ])\n ]),\n _: 1\n }, 16)) : createCommentVNode(\"\", true),\n __props.interactiveOptIn && referenceHasInteractiveView.value && !isInteractive.value ? (openBlock(), createBlock(NcButton, {\n key: 2,\n class: \"toggle-interactive--button\",\n onClick: enableInteractive\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString(unref(t)(\"Enable interactive view\")), 1)\n ]),\n _: 1\n })) : createCommentVNode(\"\", true)\n ], 2);\n };\n }\n});\nconst NcReferenceWidget = /* @__PURE__ */ _export_sfc(_sfc_main$5, [[\"__scopeId\", \"data-v-b0ec9f0b\"]]);\nregister(t25);\nconst _sfc_main$4 = {\n name: \"NcRawLinkInput\",\n components: {\n LinkVariantIcon,\n NcEmptyContent,\n NcLoadingIcon,\n NcReferenceWidget,\n NcTextField: _sfc_main$b\n },\n props: {\n /**\n * The reference provider\n */\n provider: {\n type: Object,\n required: true\n }\n },\n emits: [\n \"submit\"\n ],\n data() {\n return {\n inputValue: \"\",\n loading: false,\n reference: null,\n abortController: null,\n inputPlaceholder: t(\"Enter link\")\n };\n },\n computed: {\n isLinkValid() {\n return isUrl(this.inputValue);\n },\n debouncedUpdateReference() {\n return debounce(this.updateReference, 500);\n }\n },\n methods: {\n focus() {\n this.$refs[\"url-input\"].$el.getElementsByTagName(\"input\")[0]?.focus();\n },\n onSubmit(e) {\n const value = e.target.value;\n if (this.isLinkValid) {\n this.$emit(\"submit\", value);\n }\n },\n onClear() {\n this.inputValue = \"\";\n this.reference = null;\n },\n onInput() {\n this.reference = null;\n if (this.abortController) {\n this.abortController.abort();\n }\n if (this.isLinkValid) {\n this.debouncedUpdateReference();\n }\n },\n updateReference() {\n this.loading = true;\n this.abortController = new AbortController();\n axios.get(generateOcsUrl(\"references/resolve\", 2) + \"?reference=\" + encodeURIComponent(this.inputValue), {\n signal: this.abortController.signal\n }).then((response) => {\n this.reference = response.data.ocs.data.references[this.inputValue];\n }).catch((error) => {\n logger.error(\"[NcRawLinkInput] Failed to update reference\", { error });\n }).then(() => {\n this.loading = false;\n });\n }\n }\n};\nconst _hoisted_1$4 = { class: \"raw-link\" };\nconst _hoisted_2$3 = { class: \"input-wrapper\" };\nconst _hoisted_3$2 = [\"src\"];\nfunction _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcLoadingIcon = resolveComponent(\"NcLoadingIcon\");\n const _component_LinkVariantIcon = resolveComponent(\"LinkVariantIcon\");\n const _component_NcTextField = resolveComponent(\"NcTextField\");\n const _component_NcReferenceWidget = resolveComponent(\"NcReferenceWidget\");\n const _component_NcEmptyContent = resolveComponent(\"NcEmptyContent\");\n return openBlock(), createElementBlock(\"div\", _hoisted_1$4, [\n createElementVNode(\"div\", _hoisted_2$3, [\n createVNode(_component_NcTextField, {\n ref: \"url-input\",\n modelValue: $data.inputValue,\n \"onUpdate:modelValue\": [\n _cache[0] || (_cache[0] = ($event) => $data.inputValue = $event),\n $options.onInput\n ],\n showTrailingButton: $data.inputValue !== \"\",\n label: $data.inputPlaceholder,\n onTrailingButtonClick: $options.onClear,\n onKeyup: withKeys($options.onSubmit, [\"enter\"])\n }, {\n default: withCtx(() => [\n $data.loading ? (openBlock(), createBlock(_component_NcLoadingIcon, {\n key: 0,\n size: 16\n })) : (openBlock(), createBlock(_component_LinkVariantIcon, {\n key: 1,\n size: 16\n }))\n ]),\n _: 1\n }, 8, [\"modelValue\", \"showTrailingButton\", \"label\", \"onTrailingButtonClick\", \"onUpdate:modelValue\", \"onKeyup\"])\n ]),\n $data.reference !== null ? (openBlock(), createBlock(_component_NcReferenceWidget, {\n key: 0,\n class: \"reference-widget\",\n reference: $data.reference\n }, null, 8, [\"reference\"])) : (openBlock(), createBlock(_component_NcEmptyContent, {\n key: 1,\n class: \"raw-link--empty-content\"\n }, {\n icon: withCtx(() => [\n $props.provider.icon_url ? (openBlock(), createElementBlock(\"img\", {\n key: 0,\n class: \"provider-icon\",\n src: $props.provider.icon_url\n }, null, 8, _hoisted_3$2)) : (openBlock(), createBlock(_component_LinkVariantIcon, { key: 1 }))\n ]),\n _: 1\n }))\n ]);\n}\nconst NcRawLinkInput = /* @__PURE__ */ _export_sfc(_sfc_main$4, [[\"render\", _sfc_render$4], [\"__scopeId\", \"data-v-918730b9\"]]);\nconst _sfc_main$3 = {\n name: \"NcSearchResult\",\n components: {\n NcHighlight: _sfc_main$a\n },\n props: {\n /**\n * Unified search result entry\n */\n entry: {\n type: Object,\n required: true\n },\n /**\n * The query that led to getting this result\n * Used to highlight the entry text\n */\n query: {\n type: String,\n required: true\n }\n }\n};\nconst _hoisted_1$3 = { class: \"result\" };\nconst _hoisted_2$2 = [\"src\"];\nconst _hoisted_3$1 = { class: \"result--content\" };\nconst _hoisted_4$1 = { class: \"result--content--name\" };\nconst _hoisted_5$1 = { class: \"result--content--subline\" };\nfunction _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcHighlight = resolveComponent(\"NcHighlight\");\n return openBlock(), createElementBlock(\"div\", _hoisted_1$3, [\n $props.entry.icon ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass([{ [$props.entry.icon]: true, rounded: $props.entry.rounded }, \"result--icon-class\"])\n }, null, 2)) : (openBlock(), createElementBlock(\"img\", {\n key: 1,\n class: normalizeClass([\"result--image\", { rounded: $props.entry.rounded }]),\n src: $props.entry.thumbnailUrl\n }, null, 10, _hoisted_2$2)),\n createElementVNode(\"div\", _hoisted_3$1, [\n createElementVNode(\"span\", _hoisted_4$1, [\n createVNode(_component_NcHighlight, {\n search: $props.query,\n text: $props.entry.title\n }, null, 8, [\"search\", \"text\"])\n ]),\n createElementVNode(\"span\", _hoisted_5$1, [\n createVNode(_component_NcHighlight, {\n search: $props.query,\n text: $props.entry.subline\n }, null, 8, [\"search\", \"text\"])\n ])\n ])\n ]);\n}\nconst NcSearchResult = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$3], [\"__scopeId\", \"data-v-059edcfb\"]]);\nregister(t32, t41, t43);\nconst LIMIT = 5;\nconst _sfc_main$2 = {\n name: \"NcSearch\",\n components: {\n LinkVariantIcon,\n DotsHorizontalIcon: IconDotsHorizontal,\n NcEmptyContent,\n NcSelect,\n NcSearchResult\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * The selected reference provider\n */\n provider: {\n type: Object,\n required: true\n },\n showEmptyContent: {\n type: Boolean,\n default: true\n },\n /**\n * Placeholder of the search\n */\n searchPlaceholder: {\n type: String,\n default: null\n }\n },\n emits: [\n \"submit\"\n ],\n data() {\n return {\n searchQuery: \"\",\n selectedResult: null,\n resultsBySearchProvider: {},\n searching: false,\n searchingMoreOf: null,\n abortController: null,\n noOptionsText: t(\"Start typing to search\"),\n providerIconAlt: t(\"Provider icon\")\n };\n },\n computed: {\n mySearchPlaceholder() {\n return this.searchPlaceholder || t(\"Search\");\n },\n searchProviderIds() {\n return this.provider.search_providers_ids;\n },\n options() {\n if (this.searchQuery === \"\") {\n return [];\n }\n const options = [];\n if (isUrl(this.searchQuery)) {\n options.push(this.rawLinkEntry);\n }\n options.push(...this.formattedSearchResults);\n return options;\n },\n rawLinkEntry() {\n return {\n id: \"rawLinkEntry\",\n resourceUrl: this.searchQuery,\n isRawLink: true\n };\n },\n formattedSearchResults() {\n const results = [];\n this.searchProviderIds.forEach((pid) => {\n if (this.resultsBySearchProvider[pid].entries.length > 0) {\n if (this.searchProviderIds.length > 1 || this.resultsBySearchProvider[pid].entries.length > 1) {\n results.push({\n id: \"groupTitle-\" + pid,\n name: this.resultsBySearchProvider[pid].name,\n isCustomGroupTitle: true,\n providerId: pid\n });\n }\n const providerEntriesWithId = this.resultsBySearchProvider[pid].entries.map((entry, index) => {\n return {\n id: \"provider-\" + pid + \"-entry-\" + index,\n ...entry\n };\n });\n results.push(...providerEntriesWithId);\n if (this.resultsBySearchProvider[pid].isPaginated) {\n results.push({\n id: \"moreOf-\" + pid,\n name: this.resultsBySearchProvider[pid].name,\n isMore: true,\n providerId: pid,\n isLoading: this.searchingMoreOf === pid\n });\n }\n }\n });\n return results;\n },\n debouncedUpdateSearch() {\n return debounce(this.updateSearch, 500);\n }\n },\n mounted() {\n this.resetResults();\n },\n beforeUnmount() {\n this.cancelSearchRequests();\n },\n methods: {\n t,\n resetResults() {\n const resultsBySearchProvider = {};\n this.searchProviderIds.forEach((pid) => {\n resultsBySearchProvider[pid] = {\n entries: []\n };\n });\n this.resultsBySearchProvider = resultsBySearchProvider;\n },\n focus() {\n setTimeout(() => {\n this.$refs[\"search-select\"]?.$el?.querySelector(\"#search-select-input\")?.focus();\n }, 300);\n },\n cancelSearchRequests() {\n if (this.abortController) {\n this.abortController.abort();\n }\n },\n onSearchInput(query) {\n this.searchQuery = query;\n this.debouncedUpdateSearch();\n },\n onSelectResultSelected(item) {\n if (item !== null) {\n if (item.resourceUrl) {\n this.cancelSearchRequests();\n this.$emit(\"submit\", item.resourceUrl);\n } else if (item.isMore) {\n this.searchMoreOf(item.providerId).then(() => {\n this.selectedResult = null;\n });\n }\n }\n },\n searchMoreOf(searchProviderId) {\n this.searchingMoreOf = searchProviderId;\n this.cancelSearchRequests();\n return this.searchProviders(searchProviderId);\n },\n updateSearch() {\n this.cancelSearchRequests();\n this.resetResults();\n if (this.searchQuery === \"\") {\n this.searching = false;\n return;\n }\n return this.searchProviders();\n },\n searchProviders(searchProviderId = null) {\n this.abortController = new AbortController();\n this.searching = true;\n const searchPromises = searchProviderId === null ? [...this.searchProviderIds].map((pid) => {\n return this.searchOneProvider(pid);\n }) : [this.searchOneProvider(searchProviderId, this.resultsBySearchProvider[searchProviderId]?.cursor ?? null)];\n return Promise.allSettled(searchPromises).then((promises) => {\n const isOneCanceled = !!promises.find((p) => {\n return p.status === \"rejected\" && (p.reason.name === \"CanceledError\" || p.reason.code === \"ERR_CANCELED\");\n });\n if (!isOneCanceled) {\n this.searching = false;\n this.searchingMoreOf = null;\n }\n });\n },\n searchOneProvider(providerId, cursor = null) {\n const url = cursor === null ? generateOcsUrl(\"search/providers/{providerId}/search?term={term}&limit={limit}\", { providerId, term: this.searchQuery, limit: LIMIT }) : generateOcsUrl(\"search/providers/{providerId}/search?term={term}&limit={limit}&cursor={cursor}\", { providerId, term: this.searchQuery, limit: LIMIT, cursor });\n return axios.get(url, {\n signal: this.abortController.signal\n }).then((response) => {\n const data = response.data.ocs.data;\n this.resultsBySearchProvider[providerId].name = data.name;\n this.resultsBySearchProvider[providerId].cursor = data.cursor;\n this.resultsBySearchProvider[providerId].isPaginated = data.isPaginated;\n this.resultsBySearchProvider[providerId].entries.push(...data.entries);\n });\n }\n }\n};\nconst _hoisted_1$2 = {\n key: 0,\n class: \"custom-option\"\n};\nconst _hoisted_2$1 = { class: \"option-text\" };\nconst _hoisted_3 = {\n key: 2,\n class: \"custom-option group-name\"\n};\nconst _hoisted_4 = [\"src\"];\nconst _hoisted_5 = { class: \"option-text\" };\nconst _hoisted_6 = {\n key: 3,\n class: \"custom-option\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"option-simple-icon icon-loading-small\"\n};\nconst _hoisted_8 = { class: \"option-text\" };\nconst _hoisted_9 = [\"alt\", \"src\"];\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_LinkVariantIcon = resolveComponent(\"LinkVariantIcon\");\n const _component_NcSearchResult = resolveComponent(\"NcSearchResult\");\n const _component_DotsHorizontalIcon = resolveComponent(\"DotsHorizontalIcon\");\n const _component_NcSelect = resolveComponent(\"NcSelect\");\n const _component_NcEmptyContent = resolveComponent(\"NcEmptyContent\");\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"smart-picker-search\", { \"with-empty-content\": $props.showEmptyContent }])\n }, [\n createVNode(_component_NcSelect, {\n ref: \"search-select\",\n modelValue: $data.selectedResult,\n \"onUpdate:modelValue\": [\n _cache[0] || (_cache[0] = ($event) => $data.selectedResult = $event),\n $options.onSelectResultSelected\n ],\n class: \"smart-picker-search--select\",\n inputId: \"search-select-input\",\n label: \"name\",\n placeholder: $options.mySearchPlaceholder,\n options: $options.options,\n appendToBody: false,\n closeOnSelect: false,\n clearSearchOnSelect: false,\n clearSearchOnBlur: () => false,\n resetFocusOnOptionsChange: false,\n filterable: false,\n autoscroll: true,\n resetOnOptionsChange: false,\n loading: $data.searching,\n onSearch: $options.onSearchInput\n }, {\n option: withCtx((option) => [\n option.isRawLink ? (openBlock(), createElementBlock(\"div\", _hoisted_1$2, [\n createVNode(_component_LinkVariantIcon, {\n class: \"option-simple-icon\",\n size: 20\n }),\n createElementVNode(\"span\", _hoisted_2$1, toDisplayString($options.t(\"Raw link {options}\", { options: option.resourceUrl })), 1)\n ])) : option.resourceUrl ? (openBlock(), createBlock(_component_NcSearchResult, {\n key: 1,\n class: \"search-result\",\n entry: option,\n query: $data.searchQuery\n }, null, 8, [\"entry\", \"query\"])) : option.isCustomGroupTitle ? (openBlock(), createElementBlock(\"span\", _hoisted_3, [\n $props.provider.icon_url ? (openBlock(), createElementBlock(\"img\", {\n key: 0,\n class: \"provider-icon group-name-icon\",\n src: $props.provider.icon_url\n }, null, 8, _hoisted_4)) : createCommentVNode(\"\", true),\n createElementVNode(\"span\", _hoisted_5, [\n createElementVNode(\"strong\", null, toDisplayString(option.name), 1)\n ])\n ])) : option.isMore ? (openBlock(), createElementBlock(\"span\", _hoisted_6, [\n option.isLoading ? (openBlock(), createElementBlock(\"span\", _hoisted_7)) : (openBlock(), createBlock(_component_DotsHorizontalIcon, {\n key: 1,\n class: \"option-simple-icon\",\n size: 20\n })),\n createElementVNode(\"span\", _hoisted_8, toDisplayString($options.t('Load more \"{options}\"', { options: option.name })), 1)\n ])) : createCommentVNode(\"\", true)\n ]),\n \"no-options\": withCtx(() => [\n createTextVNode(toDisplayString($data.noOptionsText), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"options\", \"loading\", \"onSearch\", \"onUpdate:modelValue\"]),\n $props.showEmptyContent ? (openBlock(), createBlock(_component_NcEmptyContent, {\n key: 0,\n class: \"smart-picker-search--empty-content\"\n }, {\n icon: withCtx(() => [\n $props.provider.icon_url ? (openBlock(), createElementBlock(\"img\", {\n key: 0,\n class: \"provider-icon\",\n alt: $data.providerIconAlt,\n src: $props.provider.icon_url\n }, null, 8, _hoisted_9)) : (openBlock(), createBlock(_component_LinkVariantIcon, { key: 1 }))\n ]),\n _: 1\n })) : createCommentVNode(\"\", true)\n ], 2);\n}\nconst NcSearch = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$2], [\"__scopeId\", \"data-v-af9d145f\"]]);\nconst MODES = {\n providerList: 1,\n standardLinkInput: 2,\n searchInput: 3,\n customElement: 4\n};\nconst _sfc_main$1 = {\n name: \"NcReferencePicker\",\n components: {\n NcCustomPickerElement,\n NcProviderList,\n NcRawLinkInput,\n NcSearch\n },\n props: {\n /**\n * Provider to select on creation\n * Default: null. Show the provider list\n */\n initialProvider: {\n type: Object,\n default: () => null\n },\n /**\n * Optional width in pixels\n * Default: 100%\n */\n width: {\n type: Number,\n default: null\n },\n /**\n * Focus on the provider list select input on creation\n * Default: true\n */\n focusOnCreate: {\n type: Boolean,\n default: true\n }\n },\n emits: [\n \"cancel\",\n \"cancelRawLink\",\n \"cancelSearch\",\n \"providerSelected\",\n \"submit\"\n ],\n data() {\n return {\n MODES,\n selectedProvider: this.initialProvider\n };\n },\n computed: {\n mode() {\n return this.selectedProvider === null ? MODES.providerList : isCustomPickerElementRegistered(this.selectedProvider.id) ? MODES.customElement : this.selectedProvider.search_providers_ids ? MODES.searchInput : MODES.standardLinkInput;\n },\n pickerWrapperStyle() {\n return {\n width: this.width ? this.width + \"px\" : void 0\n };\n }\n },\n mounted() {\n if (this.focusOnCreate) {\n if (this.initialProvider) {\n setTimeout(() => {\n this.$refs[\"url-input\"]?.focus();\n }, 300);\n } else {\n this.$nextTick(() => {\n this.$refs[\"provider-list\"]?.focus();\n });\n }\n }\n },\n methods: {\n onEscapePressed() {\n if (this.selectedProvider !== null) {\n this.deselectProvider();\n } else {\n this.cancelProviderSelection();\n }\n },\n onProviderSelected(provider) {\n this.selectedProvider = provider;\n this.$emit(\"providerSelected\", provider);\n this.$nextTick(() => {\n this.$refs[\"url-input\"]?.focus();\n });\n },\n cancelCustomElement() {\n this.deselectProvider();\n },\n cancelSearch() {\n this.$emit(\"cancelSearch\", this.selectedProvider?.title);\n this.deselectProvider();\n },\n cancelRawLinkInput() {\n this.$emit(\"cancelRawLink\", this.selectedProvider?.title);\n this.deselectProvider();\n },\n cancelProviderSelection() {\n this.$emit(\"cancel\");\n },\n submitLink(link) {\n if (this.selectedProvider !== null) {\n touchProvider(this.selectedProvider.id);\n }\n this.$emit(\"submit\", link);\n this.deselectProvider();\n },\n deselectProvider() {\n this.selectedProvider = null;\n this.$emit(\"providerSelected\", null);\n setTimeout(() => {\n this.$refs[\"provider-list\"]?.focus();\n }, 300);\n }\n }\n};\nconst _hoisted_1$1 = {\n key: 3,\n class: \"custom-element-wrapper\"\n};\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcProviderList = resolveComponent(\"NcProviderList\");\n const _component_NcRawLinkInput = resolveComponent(\"NcRawLinkInput\");\n const _component_NcSearch = resolveComponent(\"NcSearch\");\n const _component_NcCustomPickerElement = resolveComponent(\"NcCustomPickerElement\");\n return openBlock(), createElementBlock(\"div\", {\n class: \"reference-picker\",\n style: normalizeStyle($options.pickerWrapperStyle),\n tabindex: \"-1\",\n onKeydown: _cache[0] || (_cache[0] = withKeys(withModifiers((...args) => $options.onEscapePressed && $options.onEscapePressed(...args), [\"stop\", \"prevent\"]), [\"esc\"]))\n }, [\n $options.mode === $data.MODES.providerList ? (openBlock(), createBlock(_component_NcProviderList, {\n key: 0,\n ref: \"provider-list\",\n onSelectProvider: $options.onProviderSelected,\n onSubmit: $options.submitLink,\n onCancel: $options.cancelProviderSelection\n }, null, 8, [\"onSelectProvider\", \"onSubmit\", \"onCancel\"])) : $options.mode === $data.MODES.standardLinkInput ? (openBlock(), createBlock(_component_NcRawLinkInput, {\n key: 1,\n ref: \"url-input\",\n provider: $data.selectedProvider,\n onSubmit: $options.submitLink,\n onCancel: $options.cancelRawLinkInput\n }, null, 8, [\"provider\", \"onSubmit\", \"onCancel\"])) : $options.mode === $data.MODES.searchInput ? (openBlock(), createBlock(_component_NcSearch, {\n key: 2,\n ref: \"url-input\",\n provider: $data.selectedProvider,\n onCancel: $options.cancelSearch,\n onSubmit: $options.submitLink\n }, null, 8, [\"provider\", \"onCancel\", \"onSubmit\"])) : $options.mode === $data.MODES.customElement ? (openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n createVNode(_component_NcCustomPickerElement, {\n provider: $data.selectedProvider,\n class: \"custom-element\",\n onSubmit: $options.submitLink,\n onCancel: $options.cancelCustomElement\n }, null, 8, [\"provider\", \"onSubmit\", \"onCancel\"])\n ])) : createCommentVNode(\"\", true)\n ], 36);\n}\nconst NcReferencePicker = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-5e2e9195\"]]);\nregister(t12, t19);\nconst _sfc_main = {\n name: \"NcReferencePickerModal\",\n components: {\n NcReferencePicker,\n NcModal,\n NcButton,\n ArrowLeftIcon,\n CloseIcon: IconClose\n },\n props: {\n /**\n * Provider to select on creation\n * Show the provider list if no initial one is provided\n */\n initialProvider: {\n type: Object,\n default: () => null\n },\n /**\n * Focus on the input item on create\n */\n focusOnCreate: {\n type: Boolean,\n default: true\n },\n /**\n * If true, add the modal content to the Viewer trap elements via the event-bus\n */\n isInsideViewer: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"cancel\",\n \"submit\"\n ],\n data() {\n return {\n show: true,\n selectedProvider: this.initialProvider,\n backButtonTitle: t(\"Back to provider selection\"),\n closeButtonTitle: t(\"Close\"),\n closeButtonLabel: t(\"Close Smart Picker\")\n };\n },\n computed: {\n isProviderSelected() {\n return this.selectedProvider !== null;\n },\n showBackButton() {\n return this.initialProvider === null && this.isProviderSelected;\n },\n modalSize() {\n return this.isProviderSelected && isCustomPickerElementRegistered(this.selectedProvider.id) ? getCustomPickerElementSize(this.selectedProvider.id) ?? \"large\" : \"normal\";\n },\n showModalName() {\n return !this.isProviderSelected || !isCustomPickerElementRegistered(this.selectedProvider.id);\n },\n modalName() {\n return this.isProviderSelected ? this.selectedProvider.title : t(\"Smart Picker\");\n }\n },\n mounted() {\n if (this.isInsideViewer) {\n const elem = this.$refs.modal_content;\n emit(\"viewer:trapElements:changed\", elem);\n }\n },\n methods: {\n onCancel() {\n this.show = false;\n this.$emit(\"cancel\");\n },\n onSubmit(value) {\n this.show = false;\n this.$emit(\"submit\", value);\n },\n onProviderSelect(provider) {\n this.selectedProvider = provider;\n if (provider === null && this.initialProvider !== null) {\n this.onCancel();\n }\n },\n onBackClicked() {\n this.$refs.referencePicker.deselectProvider();\n }\n }\n};\nconst _hoisted_1 = {\n ref: \"modal_content\",\n class: \"reference-picker-modal--content\"\n};\nconst _hoisted_2 = { key: 1 };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ArrowLeftIcon = resolveComponent(\"ArrowLeftIcon\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n const _component_CloseIcon = resolveComponent(\"CloseIcon\");\n const _component_NcReferencePicker = resolveComponent(\"NcReferencePicker\");\n const _component_NcModal = resolveComponent(\"NcModal\");\n return $data.show ? (openBlock(), createBlock(_component_NcModal, {\n key: 0,\n size: $options.modalSize,\n class: \"reference-picker-modal\",\n onClose: $options.onCancel\n }, {\n default: withCtx(() => [\n createElementVNode(\"div\", _hoisted_1, [\n $options.showBackButton ? (openBlock(), createBlock(_component_NcButton, {\n key: 0,\n \"aria-label\": $data.backButtonTitle,\n title: $data.backButtonTitle,\n class: \"back-button\",\n onClick: $options.onBackClicked\n }, {\n icon: withCtx(() => [\n createVNode(_component_ArrowLeftIcon)\n ]),\n _: 1\n }, 8, [\"aria-label\", \"title\", \"onClick\"])) : createCommentVNode(\"\", true),\n createVNode(_component_NcButton, {\n class: \"close-button\",\n \"aria-label\": $data.closeButtonLabel,\n title: $data.closeButtonTitle,\n variant: \"tertiary\",\n onClick: $options.onCancel\n }, {\n icon: withCtx(() => [\n createVNode(_component_CloseIcon)\n ]),\n _: 1\n }, 8, [\"aria-label\", \"title\", \"onClick\"]),\n $options.showModalName ? (openBlock(), createElementBlock(\"h2\", _hoisted_2, toDisplayString($options.modalName), 1)) : createCommentVNode(\"\", true),\n createVNode(_component_NcReferencePicker, {\n ref: \"referencePicker\",\n initialProvider: $props.initialProvider,\n focusOnCreate: $props.focusOnCreate,\n onProviderSelected: $options.onProviderSelect,\n onSubmit: $options.onSubmit,\n onCancel: $options.onCancel\n }, null, 8, [\"initialProvider\", \"focusOnCreate\", \"onProviderSelected\", \"onSubmit\", \"onCancel\"])\n ], 512)\n ]),\n _: 1\n }, 8, [\"size\", \"onClose\"])) : createCommentVNode(\"\", true);\n}\nconst NcReferencePickerModal = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-bf0a25ee\"]]);\nasync function getLinkWithPicker(providerId, isInsideViewer) {\n const modalId = \"referencePickerModal\";\n const modalElement = document.createElement(\"div\");\n modalElement.id = modalId;\n document.body.append(modalElement);\n const { promise, reject, resolve } = Promise.withResolvers();\n const initialProvider = providerId && getProvider(providerId) || null;\n const view = createApp(NcReferencePickerModal, {\n initialProvider,\n isInsideViewer,\n onCancel() {\n view.unmount();\n reject(new Error(\"User cancellation\"));\n },\n onSubmit(link) {\n view.unmount();\n resolve(link);\n }\n });\n view.mount(modalElement);\n return promise;\n}\nexport {\n NcReferencePicker as N,\n anyLinkProviderId as a,\n getProvider as b,\n getProviders as c,\n sortProviders as d,\n NcReferencePickerModal as e,\n NcReferenceWidget as f,\n getLinkWithPicker as g,\n NcSearch as h,\n searchProvider as s\n};\n//# sourceMappingURL=referencePickerModal-CD1BjLPe.mjs.map\n","import '../assets/NcRichText-BTu-LT3p.css';\nimport { toString } from \"mdast-util-to-string\";\nimport rehypeExternalLinks from \"rehype-external-links\";\nimport rehype2react from \"rehype-react\";\nimport breaks from \"remark-breaks\";\nimport remarkParse from \"remark-parse\";\nimport remark2rehype from \"remark-rehype\";\nimport remarkUnlinkProtocols from \"remark-unlink-protocols\";\nimport { unified } from \"unified\";\nimport { resolveComponent, openBlock, createElementBlock, normalizeClass, Fragment, renderList, createBlock, createCommentVNode, defineComponent, unref, withCtx, createVNode, ref, h } from \"vue\";\nimport { RouterLink } from \"vue-router\";\nimport { N as NcCheckboxRadioSwitch } from \"./NcCheckboxRadioSwitch-BVTMQSAg.mjs\";\nimport { getCurrentUser } from \"@nextcloud/auth\";\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { getSharingToken } from \"@nextcloud/sharing/public\";\nimport { f as NcReferenceWidget } from \"./referencePickerModal-CD1BjLPe.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { U as URL_PATTERN, g as getRoute, N as NcRichTextExternalLink, p as parseUrl, r as remarkAutolink } from \"./autolink-B2azbG18.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { u as useCopy } from \"./useCopy-PckLYUAU.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { u } from \"unist-builder\";\nimport { visitParents, EXIT, SKIP } from \"unist-util-visit-parents\";\nconst _sfc_main$2 = {\n name: \"NcReferenceList\",\n components: {\n NcReferenceWidget\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n text: {\n type: String,\n default: \"\"\n },\n referenceData: {\n type: Array,\n default: null\n },\n limit: {\n type: Number,\n default: 1\n },\n displayFallback: {\n type: Boolean,\n default: false\n },\n interactive: {\n type: Boolean,\n default: true\n },\n interactiveOptIn: {\n type: Boolean,\n default: false\n }\n },\n emits: [\"loaded\"],\n data() {\n return {\n references: null,\n loading: true\n };\n },\n computed: {\n isVisible() {\n return this.loading || this.displayedReferences.length !== 0;\n },\n values() {\n if (this.referenceData) {\n return this.referenceData;\n }\n if (this.displayFallback && !this.loading && !this.references) {\n return [this.fallbackReference];\n }\n return this.references ? Object.values(this.references) : [];\n },\n firstReference() {\n return this.values[0] ?? null;\n },\n displayedReferences() {\n return this.values.filter(Boolean).slice(0, this.limit);\n },\n fallbackReference() {\n return {\n accessible: true,\n openGraphObject: {\n id: this.text,\n link: this.text,\n name: this.text\n },\n richObjectType: \"open-graph\"\n };\n }\n },\n watch: {\n text: \"fetch\"\n },\n mounted() {\n this.fetch();\n },\n methods: {\n fetch() {\n this.loading = true;\n if (this.referenceData) {\n this.references = null;\n this.loading = false;\n return;\n }\n if (!new RegExp(URL_PATTERN).exec(this.text)) {\n this.references = null;\n this.loading = false;\n return;\n }\n this.resolve().then((response) => {\n this.references = response.data.ocs.data.references;\n this.loading = false;\n this.$emit(\"loaded\");\n }).catch((error) => {\n logger.error(\"[NcReferenceList] Failed to extract references\", { error });\n this.loading = false;\n this.$emit(\"loaded\");\n });\n },\n resolve() {\n const match = new RegExp(URL_PATTERN).exec(this.text.trim());\n const isPublic = getCurrentUser() === null;\n if (this.limit === 1 && match) {\n return isPublic ? axios.get(generateOcsUrl(\"references/resolvePublic\") + `?reference=${encodeURIComponent(match[0])}&sharingToken=${getSharingToken()}`) : axios.get(generateOcsUrl(\"references/resolve\") + `?reference=${encodeURIComponent(match[0])}`);\n }\n return isPublic ? axios.post(generateOcsUrl(\"references/extractPublic\"), {\n text: this.text,\n resolve: true,\n limit: this.limit,\n sharingToken: getSharingToken()\n }) : axios.post(generateOcsUrl(\"references/extract\"), {\n text: this.text,\n resolve: true,\n limit: this.limit\n });\n }\n }\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcReferenceWidget = resolveComponent(\"NcReferenceWidget\");\n return $options.isVisible ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass([\"widgets--list\", { \"icon-loading\": $data.loading }])\n }, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.displayedReferences, (reference) => {\n return openBlock(), createBlock(_component_NcReferenceWidget, {\n key: reference.openGraphObject?.id,\n reference,\n interactive: $props.interactive,\n interactiveOptIn: $props.interactiveOptIn\n }, null, 8, [\"reference\", \"interactive\", \"interactiveOptIn\"]);\n }), 128))\n ], 2)) : createCommentVNode(\"\", true);\n}\nconst NcReferenceList = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-9cde5a6a\"]]);\nfunction ccount(value, character) {\n const source = String(value);\n if (typeof character !== \"string\") {\n throw new TypeError(\"Expected character\");\n }\n let count = 0;\n let index = source.indexOf(character);\n while (index !== -1) {\n count++;\n index = source.indexOf(character, index + character.length);\n }\n return count;\n}\nfunction ok$1() {\n}\nconst asciiAlpha = regexCheck(/[A-Za-z]/);\nconst asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\nfunction asciiControl(code2) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code2 !== null && (code2 < 32 || code2 === 127)\n );\n}\nfunction markdownLineEnding(code2) {\n return code2 !== null && code2 < -2;\n}\nfunction markdownLineEndingOrSpace(code2) {\n return code2 !== null && (code2 < 0 || code2 === 32);\n}\nfunction markdownSpace(code2) {\n return code2 === -2 || code2 === -1 || code2 === 32;\n}\nconst unicodePunctuation = regexCheck(new RegExp(\"\\\\p{P}|\\\\p{S}\", \"u\"));\nconst unicodeWhitespace = regexCheck(/\\s/);\nfunction regexCheck(regex) {\n return check;\n function check(code2) {\n return code2 !== null && code2 > -1 && regex.test(String.fromCharCode(code2));\n }\n}\nfunction escapeStringRegexp(string) {\n if (typeof string !== \"string\") {\n throw new TypeError(\"Expected a string\");\n }\n return string.replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\").replace(/-/g, \"\\\\x2d\");\n}\nconst convert = (\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n (function(test) {\n if (test === null || test === void 0) {\n return ok;\n }\n if (typeof test === \"function\") {\n return castFactory(test);\n }\n if (typeof test === \"object\") {\n return Array.isArray(test) ? anyFactory(test) : (\n // Cast because `ReadonlyArray` goes into the above but `isArray`\n // narrows to `Array`.\n propertiesFactory(\n /** @type {Props} */\n test\n )\n );\n }\n if (typeof test === \"string\") {\n return typeFactory(test);\n }\n throw new Error(\"Expected function, string, or object as test\");\n })\n);\nfunction anyFactory(tests) {\n const checks = [];\n let index = -1;\n while (++index < tests.length) {\n checks[index] = convert(tests[index]);\n }\n return castFactory(any);\n function any(...parameters) {\n let index2 = -1;\n while (++index2 < checks.length) {\n if (checks[index2].apply(this, parameters)) return true;\n }\n return false;\n }\n}\nfunction propertiesFactory(check) {\n const checkAsRecord = (\n /** @type {Record} */\n check\n );\n return castFactory(all);\n function all(node) {\n const nodeAsRecord = (\n /** @type {Record} */\n /** @type {unknown} */\n node\n );\n let key;\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false;\n }\n return true;\n }\n}\nfunction typeFactory(check) {\n return castFactory(type);\n function type(node) {\n return node && node.type === check;\n }\n}\nfunction castFactory(testFunction) {\n return check;\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) && testFunction.call(\n this,\n value,\n typeof index === \"number\" ? index : void 0,\n parent || void 0\n )\n );\n }\n}\nfunction ok() {\n return true;\n}\nfunction looksLikeANode(value) {\n return value !== null && typeof value === \"object\" && \"type\" in value;\n}\nfunction findAndReplace(tree, list2, options) {\n const settings = options || {};\n const ignored = convert(settings.ignore || []);\n const pairs = toPairs(list2);\n let pairIndex = -1;\n while (++pairIndex < pairs.length) {\n visitParents(tree, \"text\", visitor);\n }\n function visitor(node, parents) {\n let index = -1;\n let grandparent;\n while (++index < parents.length) {\n const parent = parents[index];\n const siblings = grandparent ? grandparent.children : void 0;\n if (ignored(\n parent,\n siblings ? siblings.indexOf(parent) : void 0,\n grandparent\n )) {\n return;\n }\n grandparent = parent;\n }\n if (grandparent) {\n return handler(node, parents);\n }\n }\n function handler(node, parents) {\n const parent = parents[parents.length - 1];\n const find = pairs[pairIndex][0];\n const replace2 = pairs[pairIndex][1];\n let start = 0;\n const siblings = parent.children;\n const index = siblings.indexOf(node);\n let change = false;\n let nodes = [];\n find.lastIndex = 0;\n let match = find.exec(node.value);\n while (match) {\n const position = match.index;\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n };\n let value = replace2(...match, matchObject);\n if (typeof value === \"string\") {\n value = value.length > 0 ? { type: \"text\", value } : void 0;\n }\n if (value === false) {\n find.lastIndex = position + 1;\n } else {\n if (start !== position) {\n nodes.push({\n type: \"text\",\n value: node.value.slice(start, position)\n });\n }\n if (Array.isArray(value)) {\n nodes.push(...value);\n } else if (value) {\n nodes.push(value);\n }\n start = position + match[0].length;\n change = true;\n }\n if (!find.global) {\n break;\n }\n match = find.exec(node.value);\n }\n if (change) {\n if (start < node.value.length) {\n nodes.push({ type: \"text\", value: node.value.slice(start) });\n }\n parent.children.splice(index, 1, ...nodes);\n } else {\n nodes = [node];\n }\n return index + nodes.length;\n }\n}\nfunction toPairs(tupleOrList) {\n const result = [];\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError(\"Expected find and replace tuple or list of tuples\");\n }\n const list2 = !tupleOrList[0] || Array.isArray(tupleOrList[0]) ? tupleOrList : [tupleOrList];\n let index = -1;\n while (++index < list2.length) {\n const tuple = list2[index];\n result.push([toExpression(tuple[0]), toFunction(tuple[1])]);\n }\n return result;\n}\nfunction toExpression(find) {\n return typeof find === \"string\" ? new RegExp(escapeStringRegexp(find), \"g\") : find;\n}\nfunction toFunction(replace2) {\n return typeof replace2 === \"function\" ? replace2 : function() {\n return replace2;\n };\n}\nconst inConstruct = \"phrasing\";\nconst notInConstruct = [\"autolink\", \"link\", \"image\", \"label\"];\nfunction gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n };\n}\nfunction gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: \"@\",\n before: \"[+\\\\-.\\\\w]\",\n after: \"[\\\\-.\\\\w]\",\n inConstruct,\n notInConstruct\n },\n {\n character: \".\",\n before: \"[Ww]\",\n after: \"[\\\\-.\\\\w]\",\n inConstruct,\n notInConstruct\n },\n {\n character: \":\",\n before: \"[ps]\",\n after: \"\\\\/\",\n inConstruct,\n notInConstruct\n }\n ]\n };\n}\nfunction enterLiteralAutolink(token) {\n this.enter({ type: \"link\", title: null, url: \"\", children: [] }, token);\n}\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token);\n}\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token);\n}\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token);\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"link\");\n node.url = \"http://\" + this.sliceSerialize(token);\n}\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token);\n}\nfunction exitLiteralAutolink(token) {\n this.exit(token);\n}\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/g, findEmail]\n ],\n { ignore: [\"link\", \"linkReference\"] }\n );\n}\nfunction findUrl(_, protocol, domain2, path2, match) {\n let prefix = \"\";\n if (!previous(match)) {\n return false;\n }\n if (/^w/i.test(protocol)) {\n domain2 = protocol + domain2;\n protocol = \"\";\n prefix = \"http://\";\n }\n if (!isCorrectDomain(domain2)) {\n return false;\n }\n const parts = splitUrl(domain2 + path2);\n if (!parts[0]) return false;\n const result = {\n type: \"link\",\n title: null,\n url: prefix + protocol + parts[0],\n children: [{ type: \"text\", value: protocol + parts[0] }]\n };\n if (parts[1]) {\n return [result, { type: \"text\", value: parts[1] }];\n }\n return result;\n}\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) || // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false;\n }\n return {\n type: \"link\",\n title: null,\n url: \"mailto:\" + atext + \"@\" + label,\n children: [{ type: \"text\", value: atext + \"@\" + label }]\n };\n}\nfunction isCorrectDomain(domain2) {\n const parts = domain2.split(\".\");\n if (parts.length < 2 || parts[parts.length - 1] && (/_/.test(parts[parts.length - 1]) || !/[a-zA-Z\\d]/.test(parts[parts.length - 1])) || parts[parts.length - 2] && (/_/.test(parts[parts.length - 2]) || !/[a-zA-Z\\d]/.test(parts[parts.length - 2]))) {\n return false;\n }\n return true;\n}\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url);\n if (!trailExec) {\n return [url, void 0];\n }\n url = url.slice(0, trailExec.index);\n let trail2 = trailExec[0];\n let closingParenIndex = trail2.indexOf(\")\");\n const openingParens = ccount(url, \"(\");\n let closingParens = ccount(url, \")\");\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail2.slice(0, closingParenIndex + 1);\n trail2 = trail2.slice(closingParenIndex + 1);\n closingParenIndex = trail2.indexOf(\")\");\n closingParens++;\n }\n return [url, trail2];\n}\nfunction previous(match, email) {\n const code2 = match.input.charCodeAt(match.index - 1);\n return (match.index === 0 || unicodeWhitespace(code2) || unicodePunctuation(code2)) && (!email || code2 !== 47);\n}\nfunction normalizeIdentifier(value) {\n return value.replace(/[\\t\\n\\r ]+/g, \" \").replace(/^ | $/g, \"\").toLowerCase().toUpperCase();\n}\nfootnoteReference.peek = footnoteReferencePeek;\nfunction enterFootnoteCallString() {\n this.buffer();\n}\nfunction enterFootnoteCall(token) {\n this.enter({ type: \"footnoteReference\", identifier: \"\", label: \"\" }, token);\n}\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer();\n}\nfunction enterFootnoteDefinition(token) {\n this.enter(\n { type: \"footnoteDefinition\", identifier: \"\", label: \"\", children: [] },\n token\n );\n}\nfunction exitFootnoteCallString(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"footnoteReference\");\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase();\n node.label = label;\n}\nfunction exitFootnoteCall(token) {\n this.exit(token);\n}\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"footnoteDefinition\");\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase();\n node.label = label;\n}\nfunction exitFootnoteDefinition(token) {\n this.exit(token);\n}\nfunction footnoteReferencePeek() {\n return \"[\";\n}\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[^\");\n const exit2 = state.enter(\"footnoteReference\");\n const subexit = state.enter(\"reference\");\n value += tracker.move(\n state.safe(state.associationId(node), { after: \"]\", before: value })\n );\n subexit();\n exit2();\n value += tracker.move(\"]\");\n return value;\n}\nfunction gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteCallString: enterFootnoteCallString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: enterFootnoteDefinition\n },\n exit: {\n gfmFootnoteCallString: exitFootnoteCallString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: exitFootnoteDefinition\n }\n };\n}\nfunction gfmFootnoteToMarkdown(options) {\n let firstLineBlank = false;\n if (options && options.firstLineBlank) {\n firstLineBlank = true;\n }\n return {\n handlers: { footnoteDefinition, footnoteReference },\n // This is on by default already.\n unsafe: [{ character: \"[\", inConstruct: [\"label\", \"phrasing\", \"reference\"] }]\n };\n function footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[^\");\n const exit2 = state.enter(\"footnoteDefinition\");\n const subexit = state.enter(\"label\");\n value += tracker.move(\n state.safe(state.associationId(node), { before: value, after: \"]\" })\n );\n subexit();\n value += tracker.move(\"]:\");\n if (node.children && node.children.length > 0) {\n tracker.shift(4);\n value += tracker.move(\n (firstLineBlank ? \"\\n\" : \" \") + state.indentLines(\n state.containerFlow(node, tracker.current()),\n firstLineBlank ? mapAll : mapExceptFirst\n )\n );\n }\n exit2();\n return value;\n }\n}\nfunction mapExceptFirst(line, index, blank) {\n return index === 0 ? line : mapAll(line, index, blank);\n}\nfunction mapAll(line, index, blank) {\n return (blank ? \"\" : \" \") + line;\n}\nconst constructsWithoutStrikethrough = [\n \"autolink\",\n \"destinationLiteral\",\n \"destinationRaw\",\n \"reference\",\n \"titleQuote\",\n \"titleApostrophe\"\n];\nhandleDelete.peek = peekDelete;\nfunction gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: [\"delete\"],\n enter: { strikethrough: enterStrikethrough },\n exit: { strikethrough: exitStrikethrough }\n };\n}\nfunction gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: \"~\",\n inConstruct: \"phrasing\",\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: { delete: handleDelete }\n };\n}\nfunction enterStrikethrough(token) {\n this.enter({ type: \"delete\", children: [] }, token);\n}\nfunction exitStrikethrough(token) {\n this.exit(token);\n}\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info);\n const exit2 = state.enter(\"strikethrough\");\n let value = tracker.move(\"~~\");\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: \"~\"\n });\n value += tracker.move(\"~~\");\n exit2();\n return value;\n}\nfunction peekDelete() {\n return \"~\";\n}\nfunction defaultStringLength(value) {\n return value.length;\n}\nfunction markdownTable(table, options) {\n const settings = options || {};\n const align = (settings.align || []).concat();\n const stringLength = settings.stringLength || defaultStringLength;\n const alignments = [];\n const cellMatrix = [];\n const sizeMatrix = [];\n const longestCellByColumn = [];\n let mostCellsPerRow = 0;\n let rowIndex = -1;\n while (++rowIndex < table.length) {\n const row2 = [];\n const sizes2 = [];\n let columnIndex2 = -1;\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length;\n }\n while (++columnIndex2 < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex2]);\n if (settings.alignDelimiters !== false) {\n const size = stringLength(cell);\n sizes2[columnIndex2] = size;\n if (longestCellByColumn[columnIndex2] === void 0 || size > longestCellByColumn[columnIndex2]) {\n longestCellByColumn[columnIndex2] = size;\n }\n }\n row2.push(cell);\n }\n cellMatrix[rowIndex] = row2;\n sizeMatrix[rowIndex] = sizes2;\n }\n let columnIndex = -1;\n if (typeof align === \"object\" && \"length\" in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex]);\n }\n } else {\n const code2 = toAlignment(align);\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code2;\n }\n }\n columnIndex = -1;\n const row = [];\n const sizes = [];\n while (++columnIndex < mostCellsPerRow) {\n const code2 = alignments[columnIndex];\n let before = \"\";\n let after = \"\";\n if (code2 === 99) {\n before = \":\";\n after = \":\";\n } else if (code2 === 108) {\n before = \":\";\n } else if (code2 === 114) {\n after = \":\";\n }\n let size = settings.alignDelimiters === false ? 1 : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n );\n const cell = before + \"-\".repeat(size) + after;\n if (settings.alignDelimiters !== false) {\n size = before.length + size + after.length;\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size;\n }\n sizes[columnIndex] = size;\n }\n row[columnIndex] = cell;\n }\n cellMatrix.splice(1, 0, row);\n sizeMatrix.splice(1, 0, sizes);\n rowIndex = -1;\n const lines = [];\n while (++rowIndex < cellMatrix.length) {\n const row2 = cellMatrix[rowIndex];\n const sizes2 = sizeMatrix[rowIndex];\n columnIndex = -1;\n const line = [];\n while (++columnIndex < mostCellsPerRow) {\n const cell = row2[columnIndex] || \"\";\n let before = \"\";\n let after = \"\";\n if (settings.alignDelimiters !== false) {\n const size = longestCellByColumn[columnIndex] - (sizes2[columnIndex] || 0);\n const code2 = alignments[columnIndex];\n if (code2 === 114) {\n before = \" \".repeat(size);\n } else if (code2 === 99) {\n if (size % 2) {\n before = \" \".repeat(size / 2 + 0.5);\n after = \" \".repeat(size / 2 - 0.5);\n } else {\n before = \" \".repeat(size / 2);\n after = before;\n }\n } else {\n after = \" \".repeat(size);\n }\n }\n if (settings.delimiterStart !== false && !columnIndex) {\n line.push(\"|\");\n }\n if (settings.padding !== false && // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(settings.alignDelimiters === false && cell === \"\") && (settings.delimiterStart !== false || columnIndex)) {\n line.push(\" \");\n }\n if (settings.alignDelimiters !== false) {\n line.push(before);\n }\n line.push(cell);\n if (settings.alignDelimiters !== false) {\n line.push(after);\n }\n if (settings.padding !== false) {\n line.push(\" \");\n }\n if (settings.delimiterEnd !== false || columnIndex !== mostCellsPerRow - 1) {\n line.push(\"|\");\n }\n }\n lines.push(\n settings.delimiterEnd === false ? line.join(\"\").replace(/ +$/, \"\") : line.join(\"\")\n );\n }\n return lines.join(\"\\n\");\n}\nfunction serialize(value) {\n return value === null || value === void 0 ? \"\" : String(value);\n}\nfunction toAlignment(value) {\n const code2 = typeof value === \"string\" ? value.codePointAt(0) : 0;\n return code2 === 67 || code2 === 99 ? 99 : code2 === 76 || code2 === 108 ? 108 : code2 === 82 || code2 === 114 ? 114 : 0;\n}\nfunction blockquote(node, _, state, info) {\n const exit2 = state.enter(\"blockquote\");\n const tracker = state.createTracker(info);\n tracker.move(\"> \");\n tracker.shift(2);\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map$1\n );\n exit2();\n return value;\n}\nfunction map$1(line, _, blank) {\n return \">\" + (blank ? \"\" : \" \") + line;\n}\nfunction patternInScope(stack, pattern) {\n return listInScope(stack, pattern.inConstruct, true) && !listInScope(stack, pattern.notInConstruct, false);\n}\nfunction listInScope(stack, list2, none) {\n if (typeof list2 === \"string\") {\n list2 = [list2];\n }\n if (!list2 || list2.length === 0) {\n return none;\n }\n let index = -1;\n while (++index < list2.length) {\n if (stack.includes(list2[index])) {\n return true;\n }\n }\n return false;\n}\nfunction hardBreak(_, _1, state, info) {\n let index = -1;\n while (++index < state.unsafe.length) {\n if (state.unsafe[index].character === \"\\n\" && patternInScope(state.stack, state.unsafe[index])) {\n return /[ \\t]/.test(info.before) ? \"\" : \" \";\n }\n }\n return \"\\\\\\n\";\n}\nfunction longestStreak(value, substring) {\n const source = String(value);\n let index = source.indexOf(substring);\n let expected = index;\n let count = 0;\n let max = 0;\n if (typeof substring !== \"string\") {\n throw new TypeError(\"Expected substring\");\n }\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count;\n }\n } else {\n count = 1;\n }\n expected = index + substring.length;\n index = source.indexOf(substring, expected);\n }\n return max;\n}\nfunction formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false && node.value && // If there’s no info…\n !node.lang && // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) && // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n );\n}\nfunction checkFence(state) {\n const marker = state.options.fence || \"`\";\n if (marker !== \"`\" && marker !== \"~\") {\n throw new Error(\n \"Cannot serialize code with `\" + marker + \"` for `options.fence`, expected `` ` `` or `~`\"\n );\n }\n return marker;\n}\nfunction code$1(node, _, state, info) {\n const marker = checkFence(state);\n const raw = node.value || \"\";\n const suffix = marker === \"`\" ? \"GraveAccent\" : \"Tilde\";\n if (formatCodeAsIndented(node, state)) {\n const exit3 = state.enter(\"codeIndented\");\n const value2 = state.indentLines(raw, map);\n exit3();\n return value2;\n }\n const tracker = state.createTracker(info);\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3));\n const exit2 = state.enter(\"codeFenced\");\n let value = tracker.move(sequence);\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`);\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: \" \",\n encode: [\"`\"],\n ...tracker.current()\n })\n );\n subexit();\n }\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`);\n value += tracker.move(\" \");\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: \"\\n\",\n encode: [\"`\"],\n ...tracker.current()\n })\n );\n subexit();\n }\n value += tracker.move(\"\\n\");\n if (raw) {\n value += tracker.move(raw + \"\\n\");\n }\n value += tracker.move(sequence);\n exit2();\n return value;\n}\nfunction map(line, _, blank) {\n return (blank ? \"\" : \" \") + line;\n}\nfunction checkQuote(state) {\n const marker = state.options.quote || '\"';\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n \"Cannot serialize title with `\" + marker + \"` for `options.quote`, expected `\\\"`, or `'`\"\n );\n }\n return marker;\n}\nfunction definition(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const exit2 = state.enter(\"definition\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n })\n );\n value += tracker.move(\"]: \");\n subexit();\n if (\n // If there’s no url, or…\n !node.url || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \"\\n\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n exit2();\n return value;\n}\nfunction checkEmphasis(state) {\n const marker = state.options.emphasis || \"*\";\n if (marker !== \"*\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize emphasis with `\" + marker + \"` for `options.emphasis`, expected `*`, or `_`\"\n );\n }\n return marker;\n}\nfunction encodeCharacterReference(code2) {\n return \"&#x\" + code2.toString(16).toUpperCase() + \";\";\n}\nfunction classifyCharacter(code2) {\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return 1;\n }\n if (unicodePunctuation(code2)) {\n return 2;\n }\n}\nfunction encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside);\n const insideKind = classifyCharacter(inside);\n if (outsideKind === void 0) {\n return insideKind === void 0 ? (\n // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === \"_\" ? { inside: true, outside: true } : { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode both (letter, whitespace).\n { inside: true, outside: true }\n ) : (\n // Punctuation inside: encode outer (letter)\n { inside: false, outside: true }\n );\n }\n if (outsideKind === 1) {\n return insideKind === void 0 ? (\n // Letter inside: already forms.\n { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode both (whitespace).\n { inside: true, outside: true }\n ) : (\n // Punctuation inside: already forms.\n { inside: false, outside: false }\n );\n }\n return insideKind === void 0 ? (\n // Letter inside: already forms.\n { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode inner (whitespace).\n { inside: true, outside: false }\n ) : (\n // Punctuation inside: already forms.\n { inside: false, outside: false }\n );\n}\nemphasis.peek = emphasisPeek;\nfunction emphasis(node, _, state, info) {\n const marker = checkEmphasis(state);\n const exit2 = state.enter(\"emphasis\");\n const tracker = state.createTracker(info);\n const before = tracker.move(marker);\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n );\n const betweenHead = between.charCodeAt(0);\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n );\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1);\n }\n const betweenTail = between.charCodeAt(between.length - 1);\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker);\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail);\n }\n const after = tracker.move(marker);\n exit2();\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n };\n return before + between + after;\n}\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || \"*\";\n}\nfunction visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n let reverse;\n let test;\n let visitor;\n if (typeof testOrVisitor === \"function\" && typeof visitorOrReverse !== \"function\") {\n test = void 0;\n visitor = testOrVisitor;\n reverse = visitorOrReverse;\n } else {\n test = testOrVisitor;\n visitor = visitorOrReverse;\n reverse = maybeReverse;\n }\n visitParents(tree, test, overload, reverse);\n function overload(node, parents) {\n const parent = parents[parents.length - 1];\n const index = parent ? parent.children.indexOf(node) : void 0;\n return visitor(node, index, parent);\n }\n}\nfunction formatHeadingAsSetext(node, state) {\n let literalWithBreak = false;\n visit(node, function(node2) {\n if (\"value\" in node2 && /\\r?\\n|\\r/.test(node2.value) || node2.type === \"break\") {\n literalWithBreak = true;\n return EXIT;\n }\n });\n return Boolean(\n (!node.depth || node.depth < 3) && toString(node) && (state.options.setext || literalWithBreak)\n );\n}\nfunction heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1);\n const tracker = state.createTracker(info);\n if (formatHeadingAsSetext(node, state)) {\n const exit3 = state.enter(\"headingSetext\");\n const subexit2 = state.enter(\"phrasing\");\n const value2 = state.containerPhrasing(node, {\n ...tracker.current(),\n before: \"\\n\",\n after: \"\\n\"\n });\n subexit2();\n exit3();\n return value2 + \"\\n\" + (rank === 1 ? \"=\" : \"-\").repeat(\n // The whole size…\n value2.length - // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value2.lastIndexOf(\"\\r\"), value2.lastIndexOf(\"\\n\")) + 1)\n );\n }\n const sequence = \"#\".repeat(rank);\n const exit2 = state.enter(\"headingAtx\");\n const subexit = state.enter(\"phrasing\");\n tracker.move(sequence + \" \");\n let value = state.containerPhrasing(node, {\n before: \"# \",\n after: \"\\n\",\n ...tracker.current()\n });\n if (/^[\\t ]/.test(value)) {\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1);\n }\n value = value ? sequence + \" \" + value : sequence;\n if (state.options.closeAtx) {\n value += \" \" + sequence;\n }\n subexit();\n exit2();\n return value;\n}\nhtml.peek = htmlPeek;\nfunction html(node) {\n return node.value || \"\";\n}\nfunction htmlPeek() {\n return \"<\";\n}\nimage.peek = imagePeek;\nfunction image(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const exit2 = state.enter(\"image\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"![\");\n value += tracker.move(\n state.safe(node.alt, { before: value, after: \"]\", ...tracker.current() })\n );\n value += tracker.move(\"](\");\n subexit();\n if (\n // If there’s no url but there is a title…\n !node.url && node.title || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \")\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n value += tracker.move(\")\");\n exit2();\n return value;\n}\nfunction imagePeek() {\n return \"!\";\n}\nimageReference.peek = imageReferencePeek;\nfunction imageReference(node, _, state, info) {\n const type = node.referenceType;\n const exit2 = state.enter(\"imageReference\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"![\");\n const alt = state.safe(node.alt, {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n value += tracker.move(alt + \"][\");\n subexit();\n const stack = state.stack;\n state.stack = [];\n subexit = state.enter(\"reference\");\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n subexit();\n state.stack = stack;\n exit2();\n if (type === \"full\" || !alt || alt !== reference) {\n value += tracker.move(reference + \"]\");\n } else if (type === \"shortcut\") {\n value = value.slice(0, -1);\n } else {\n value += tracker.move(\"]\");\n }\n return value;\n}\nfunction imageReferencePeek() {\n return \"!\";\n}\ninlineCode.peek = inlineCodePeek;\nfunction inlineCode(node, _, state) {\n let value = node.value || \"\";\n let sequence = \"`\";\n let index = -1;\n while (new RegExp(\"(^|[^`])\" + sequence + \"([^`]|$)\").test(value)) {\n sequence += \"`\";\n }\n if (/[^ \\r\\n]/.test(value) && (/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value) || /^`|`$/.test(value))) {\n value = \" \" + value + \" \";\n }\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index];\n const expression = state.compilePattern(pattern);\n let match;\n if (!pattern.atBreak) continue;\n while (match = expression.exec(value)) {\n let position = match.index;\n if (value.charCodeAt(position) === 10 && value.charCodeAt(position - 1) === 13) {\n position--;\n }\n value = value.slice(0, position) + \" \" + value.slice(match.index + 1);\n }\n }\n return sequence + value + sequence;\n}\nfunction inlineCodePeek() {\n return \"`\";\n}\nfunction formatLinkAsAutolink(node, state) {\n const raw = toString(node);\n return Boolean(\n !state.options.resourceLink && // If there’s a url…\n node.url && // And there’s a no title…\n !node.title && // And the content of `node` is a single text node…\n node.children && node.children.length === 1 && node.children[0].type === \"text\" && // And if the url is the same as the content…\n (raw === node.url || \"mailto:\" + raw === node.url) && // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) && // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n );\n}\nlink.peek = linkPeek;\nfunction link(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const tracker = state.createTracker(info);\n let exit2;\n let subexit;\n if (formatLinkAsAutolink(node, state)) {\n const stack = state.stack;\n state.stack = [];\n exit2 = state.enter(\"autolink\");\n let value2 = tracker.move(\"<\");\n value2 += tracker.move(\n state.containerPhrasing(node, {\n before: value2,\n after: \">\",\n ...tracker.current()\n })\n );\n value2 += tracker.move(\">\");\n exit2();\n state.stack = stack;\n return value2;\n }\n exit2 = state.enter(\"link\");\n subexit = state.enter(\"label\");\n let value = tracker.move(\"[\");\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: \"](\",\n ...tracker.current()\n })\n );\n value += tracker.move(\"](\");\n subexit();\n if (\n // If there’s no url but there is a title…\n !node.url && node.title || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \")\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n value += tracker.move(\")\");\n exit2();\n return value;\n}\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? \"<\" : \"[\";\n}\nlinkReference.peek = linkReferencePeek;\nfunction linkReference(node, _, state, info) {\n const type = node.referenceType;\n const exit2 = state.enter(\"linkReference\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[\");\n const text2 = state.containerPhrasing(node, {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n value += tracker.move(text2 + \"][\");\n subexit();\n const stack = state.stack;\n state.stack = [];\n subexit = state.enter(\"reference\");\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n subexit();\n state.stack = stack;\n exit2();\n if (type === \"full\" || !text2 || text2 !== reference) {\n value += tracker.move(reference + \"]\");\n } else if (type === \"shortcut\") {\n value = value.slice(0, -1);\n } else {\n value += tracker.move(\"]\");\n }\n return value;\n}\nfunction linkReferencePeek() {\n return \"[\";\n}\nfunction checkBullet(state) {\n const marker = state.options.bullet || \"*\";\n if (marker !== \"*\" && marker !== \"+\" && marker !== \"-\") {\n throw new Error(\n \"Cannot serialize items with `\" + marker + \"` for `options.bullet`, expected `*`, `+`, or `-`\"\n );\n }\n return marker;\n}\nfunction checkBulletOther(state) {\n const bullet = checkBullet(state);\n const bulletOther = state.options.bulletOther;\n if (!bulletOther) {\n return bullet === \"*\" ? \"-\" : \"*\";\n }\n if (bulletOther !== \"*\" && bulletOther !== \"+\" && bulletOther !== \"-\") {\n throw new Error(\n \"Cannot serialize items with `\" + bulletOther + \"` for `options.bulletOther`, expected `*`, `+`, or `-`\"\n );\n }\n if (bulletOther === bullet) {\n throw new Error(\n \"Expected `bullet` (`\" + bullet + \"`) and `bulletOther` (`\" + bulletOther + \"`) to be different\"\n );\n }\n return bulletOther;\n}\nfunction checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || \".\";\n if (marker !== \".\" && marker !== \")\") {\n throw new Error(\n \"Cannot serialize items with `\" + marker + \"` for `options.bulletOrdered`, expected `.` or `)`\"\n );\n }\n return marker;\n}\nfunction checkRule(state) {\n const marker = state.options.rule || \"*\";\n if (marker !== \"*\" && marker !== \"-\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize rules with `\" + marker + \"` for `options.rule`, expected `*`, `-`, or `_`\"\n );\n }\n return marker;\n}\nfunction list(node, parent, state, info) {\n const exit2 = state.enter(\"list\");\n const bulletCurrent = state.bulletCurrent;\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state);\n const bulletOther = node.ordered ? bullet === \".\" ? \")\" : \".\" : checkBulletOther(state);\n let useDifferentMarker = parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false;\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : void 0;\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === \"*\" || bullet === \"-\") && // Empty first list item:\n firstListItem && (!firstListItem.children || !firstListItem.children[0]) && // Directly in two other list items:\n state.stack[state.stack.length - 1] === \"list\" && state.stack[state.stack.length - 2] === \"listItem\" && state.stack[state.stack.length - 3] === \"list\" && state.stack[state.stack.length - 4] === \"listItem\" && // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 && state.indexStack[state.indexStack.length - 2] === 0 && state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true;\n }\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1;\n while (++index < node.children.length) {\n const item = node.children[index];\n if (item && item.type === \"listItem\" && item.children && item.children[0] && item.children[0].type === \"thematicBreak\") {\n useDifferentMarker = true;\n break;\n }\n }\n }\n }\n if (useDifferentMarker) {\n bullet = bulletOther;\n }\n state.bulletCurrent = bullet;\n const value = state.containerFlow(node, info);\n state.bulletLastUsed = bullet;\n state.bulletCurrent = bulletCurrent;\n exit2();\n return value;\n}\nfunction checkListItemIndent(state) {\n const style = state.options.listItemIndent || \"one\";\n if (style !== \"tab\" && style !== \"one\" && style !== \"mixed\") {\n throw new Error(\n \"Cannot serialize items with `\" + style + \"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`\"\n );\n }\n return style;\n}\nfunction listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state);\n let bullet = state.bulletCurrent || checkBullet(state);\n if (parent && parent.type === \"list\" && parent.ordered) {\n bullet = (typeof parent.start === \"number\" && parent.start > -1 ? parent.start : 1) + (state.options.incrementListMarker === false ? 0 : parent.children.indexOf(node)) + bullet;\n }\n let size = bullet.length + 1;\n if (listItemIndent === \"tab\" || listItemIndent === \"mixed\" && (parent && parent.type === \"list\" && parent.spread || node.spread)) {\n size = Math.ceil(size / 4) * 4;\n }\n const tracker = state.createTracker(info);\n tracker.move(bullet + \" \".repeat(size - bullet.length));\n tracker.shift(size);\n const exit2 = state.enter(\"listItem\");\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map2\n );\n exit2();\n return value;\n function map2(line, index, blank) {\n if (index) {\n return (blank ? \"\" : \" \".repeat(size)) + line;\n }\n return (blank ? bullet : bullet + \" \".repeat(size - bullet.length)) + line;\n }\n}\nfunction paragraph(node, _, state, info) {\n const exit2 = state.enter(\"paragraph\");\n const subexit = state.enter(\"phrasing\");\n const value = state.containerPhrasing(node, info);\n subexit();\n exit2();\n return value;\n}\nconst phrasing = (\n /** @type {(node?: unknown) => node is Exclude} */\n convert([\n \"break\",\n \"delete\",\n \"emphasis\",\n // To do: next major: removed since footnotes were added to GFM.\n \"footnote\",\n \"footnoteReference\",\n \"image\",\n \"imageReference\",\n \"inlineCode\",\n // Enabled by `mdast-util-math`:\n \"inlineMath\",\n \"link\",\n \"linkReference\",\n // Enabled by `mdast-util-mdx`:\n \"mdxJsxTextElement\",\n // Enabled by `mdast-util-mdx`:\n \"mdxTextExpression\",\n \"strong\",\n \"text\",\n // Enabled by `mdast-util-directive`:\n \"textDirective\"\n ])\n);\nfunction root(node, _, state, info) {\n const hasPhrasing = node.children.some(function(d) {\n return phrasing(d);\n });\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow;\n return container.call(state, node, info);\n}\nfunction checkStrong(state) {\n const marker = state.options.strong || \"*\";\n if (marker !== \"*\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize strong with `\" + marker + \"` for `options.strong`, expected `*`, or `_`\"\n );\n }\n return marker;\n}\nstrong.peek = strongPeek;\nfunction strong(node, _, state, info) {\n const marker = checkStrong(state);\n const exit2 = state.enter(\"strong\");\n const tracker = state.createTracker(info);\n const before = tracker.move(marker + marker);\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n );\n const betweenHead = between.charCodeAt(0);\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n );\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1);\n }\n const betweenTail = between.charCodeAt(between.length - 1);\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker);\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail);\n }\n const after = tracker.move(marker + marker);\n exit2();\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n };\n return before + between + after;\n}\nfunction strongPeek(_, _1, state) {\n return state.options.strong || \"*\";\n}\nfunction text$1(node, _, state, info) {\n return state.safe(node.value, info);\n}\nfunction checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3;\n if (repetition < 3) {\n throw new Error(\n \"Cannot serialize rules with repetition `\" + repetition + \"` for `options.ruleRepetition`, expected `3` or more\"\n );\n }\n return repetition;\n}\nfunction thematicBreak(_, _1, state) {\n const value = (checkRule(state) + (state.options.ruleSpaces ? \" \" : \"\")).repeat(checkRuleRepetition(state));\n return state.options.ruleSpaces ? value.slice(0, -1) : value;\n}\nconst handle = {\n blockquote,\n break: hardBreak,\n code: code$1,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text: text$1,\n thematicBreak\n};\nfunction gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n };\n}\nfunction enterTable(token) {\n const align = token._align;\n this.enter(\n {\n type: \"table\",\n align: align.map(function(d) {\n return d === \"none\" ? null : d;\n }),\n children: []\n },\n token\n );\n this.data.inTable = true;\n}\nfunction exitTable(token) {\n this.exit(token);\n this.data.inTable = void 0;\n}\nfunction enterRow(token) {\n this.enter({ type: \"tableRow\", children: [] }, token);\n}\nfunction exit(token) {\n this.exit(token);\n}\nfunction enterCell(token) {\n this.enter({ type: \"tableCell\", children: [] }, token);\n}\nfunction exitCodeText(token) {\n let value = this.resume();\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace);\n }\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"inlineCode\");\n node.value = value;\n this.exit(token);\n}\nfunction replace($0, $1) {\n return $1 === \"|\" ? $1 : $0;\n}\nfunction gfmTableToMarkdown(options) {\n const settings = options || {};\n const padding = settings.tableCellPadding;\n const alignDelimiters = settings.tablePipeAlign;\n const stringLength = settings.stringLength;\n const around = padding ? \" \" : \"|\";\n return {\n unsafe: [\n { character: \"\\r\", inConstruct: \"tableCell\" },\n { character: \"\\n\", inConstruct: \"tableCell\" },\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n { atBreak: true, character: \"|\", after: \"[\t :-]\" },\n // A pipe in a cell must be encoded.\n { character: \"|\", inConstruct: \"tableCell\" },\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n { atBreak: true, character: \":\", after: \"-\" },\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // \n { atBreak: true, character: \"-\", after: \"[:|-]\" }\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n };\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align);\n }\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info);\n const value = serializeData([row]);\n return value.slice(0, value.indexOf(\"\\n\"));\n }\n function handleTableCell(node, _, state, info) {\n const exit2 = state.enter(\"tableCell\");\n const subexit = state.enter(\"phrasing\");\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n });\n subexit();\n exit2();\n return value;\n }\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n });\n }\n function handleTableAsData(node, state, info) {\n const children = node.children;\n let index = -1;\n const result = [];\n const subexit = state.enter(\"table\");\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info);\n }\n subexit();\n return result;\n }\n function handleTableRowAsData(node, state, info) {\n const children = node.children;\n let index = -1;\n const result = [];\n const subexit = state.enter(\"tableRow\");\n while (++index < children.length) {\n result[index] = handleTableCell(children[index], node, state, info);\n }\n subexit();\n return result;\n }\n function inlineCodeWithTable(node, parent, state) {\n let value = handle.inlineCode(node, parent, state);\n if (state.stack.includes(\"tableCell\")) {\n value = value.replace(/\\|/g, \"\\\\$&\");\n }\n return value;\n }\n}\nfunction gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n };\n}\nfunction gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{ atBreak: true, character: \"-\", after: \"[:|-]\" }],\n handlers: { listItem: listItemWithTaskListItem }\n };\n}\nfunction exitCheck(token) {\n const node = this.stack[this.stack.length - 2];\n ok$1(node.type === \"listItem\");\n node.checked = token.type === \"taskListCheckValueChecked\";\n}\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2];\n if (parent && parent.type === \"listItem\" && typeof parent.checked === \"boolean\") {\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"paragraph\");\n const head = node.children[0];\n if (head && head.type === \"text\") {\n const siblings = parent.children;\n let index = -1;\n let firstParaghraph;\n while (++index < siblings.length) {\n const sibling = siblings[index];\n if (sibling.type === \"paragraph\") {\n firstParaghraph = sibling;\n break;\n }\n }\n if (firstParaghraph === node) {\n head.value = head.value.slice(1);\n if (head.value.length === 0) {\n node.children.shift();\n } else if (node.position && head.position && typeof head.position.start.offset === \"number\") {\n head.position.start.column++;\n head.position.start.offset++;\n node.position.start = Object.assign({}, head.position.start);\n }\n }\n }\n }\n this.exit(token);\n}\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0];\n const checkable = typeof node.checked === \"boolean\" && head && head.type === \"paragraph\";\n const checkbox = \"[\" + (node.checked ? \"x\" : \" \") + \"] \";\n const tracker = state.createTracker(info);\n if (checkable) {\n tracker.move(checkbox);\n }\n let value = handle.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n });\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check);\n }\n return value;\n function check($0) {\n return $0 + checkbox;\n }\n}\nfunction gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ];\n}\nfunction gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(options),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n };\n}\nfunction splice(list2, start, remove, items) {\n const end = list2.length;\n let chunkStart = 0;\n let parameters;\n if (start < 0) {\n start = -start > end ? 0 : end + start;\n } else {\n start = start > end ? end : start;\n }\n remove = remove > 0 ? remove : 0;\n if (items.length < 1e4) {\n parameters = Array.from(items);\n parameters.unshift(start, remove);\n list2.splice(...parameters);\n } else {\n if (remove) list2.splice(start, remove);\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 1e4);\n parameters.unshift(start, 0);\n list2.splice(...parameters);\n chunkStart += 1e4;\n start += 1e4;\n }\n }\n}\nconst hasOwnProperty = {}.hasOwnProperty;\nfunction combineExtensions(extensions) {\n const all = {};\n let index = -1;\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index]);\n }\n return all;\n}\nfunction syntaxExtension(all, extension) {\n let hook;\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : void 0;\n const left = maybe || (all[hook] = {});\n const right = extension[hook];\n let code2;\n if (right) {\n for (code2 in right) {\n if (!hasOwnProperty.call(left, code2)) left[code2] = [];\n const value = right[code2];\n constructs(\n // @ts-expect-error Looks like a list.\n left[code2],\n Array.isArray(value) ? value : value ? [value] : []\n );\n }\n }\n }\n}\nfunction constructs(existing, list2) {\n let index = -1;\n const before = [];\n while (++index < list2.length) {\n (list2[index].add === \"after\" ? existing : before).push(list2[index]);\n }\n splice(existing, 0, 0, before);\n}\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n};\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nconst path = {\n tokenize: tokenizePath,\n partial: true\n};\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n};\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n};\nconst wwwAutolink = {\n name: \"wwwAutolink\",\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n name: \"protocolAutolink\",\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n name: \"emailAutolink\",\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\nconst text = {};\nfunction gfmAutolinkLiteral() {\n return {\n text\n };\n}\nlet code = 48;\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++;\n if (code === 58) code = 65;\n else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\nfunction tokenizeEmailAutolink(effects, ok2, nok) {\n const self = this;\n let dot;\n let data;\n return start;\n function start(code2) {\n if (!gfmAtext(code2) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code2);\n }\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkEmail\");\n return atext(code2);\n }\n function atext(code2) {\n if (gfmAtext(code2)) {\n effects.consume(code2);\n return atext;\n }\n if (code2 === 64) {\n effects.consume(code2);\n return emailDomain;\n }\n return nok(code2);\n }\n function emailDomain(code2) {\n if (code2 === 46) {\n return effects.check(emailDomainDotTrail, emailDomainAfter, emailDomainDot)(code2);\n }\n if (code2 === 45 || code2 === 95 || asciiAlphanumeric(code2)) {\n data = true;\n effects.consume(code2);\n return emailDomain;\n }\n return emailDomainAfter(code2);\n }\n function emailDomainDot(code2) {\n effects.consume(code2);\n dot = true;\n return emailDomain;\n }\n function emailDomainAfter(code2) {\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit(\"literalAutolinkEmail\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n return nok(code2);\n }\n}\nfunction tokenizeWwwAutolink(effects, ok2, nok) {\n const self = this;\n return wwwStart;\n function wwwStart(code2) {\n if (code2 !== 87 && code2 !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code2);\n }\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkWww\");\n return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok)(code2);\n }\n function wwwAfter(code2) {\n effects.exit(\"literalAutolinkWww\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n}\nfunction tokenizeProtocolAutolink(effects, ok2, nok) {\n const self = this;\n let buffer = \"\";\n let seen = false;\n return protocolStart;\n function protocolStart(code2) {\n if ((code2 === 72 || code2 === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkHttp\");\n buffer += String.fromCodePoint(code2);\n effects.consume(code2);\n return protocolPrefixInside;\n }\n return nok(code2);\n }\n function protocolPrefixInside(code2) {\n if (asciiAlpha(code2) && buffer.length < 5) {\n buffer += String.fromCodePoint(code2);\n effects.consume(code2);\n return protocolPrefixInside;\n }\n if (code2 === 58) {\n const protocol = buffer.toLowerCase();\n if (protocol === \"http\" || protocol === \"https\") {\n effects.consume(code2);\n return protocolSlashesInside;\n }\n }\n return nok(code2);\n }\n function protocolSlashesInside(code2) {\n if (code2 === 47) {\n effects.consume(code2);\n if (seen) {\n return afterProtocol;\n }\n seen = true;\n return protocolSlashesInside;\n }\n return nok(code2);\n }\n function afterProtocol(code2) {\n return code2 === null || asciiControl(code2) || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2) || unicodePunctuation(code2) ? nok(code2) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code2);\n }\n function protocolAfter(code2) {\n effects.exit(\"literalAutolinkHttp\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n}\nfunction tokenizeWwwPrefix(effects, ok2, nok) {\n let size = 0;\n return wwwPrefixInside;\n function wwwPrefixInside(code2) {\n if ((code2 === 87 || code2 === 119) && size < 3) {\n size++;\n effects.consume(code2);\n return wwwPrefixInside;\n }\n if (code2 === 46 && size === 3) {\n effects.consume(code2);\n return wwwPrefixAfter;\n }\n return nok(code2);\n }\n function wwwPrefixAfter(code2) {\n return code2 === null ? nok(code2) : ok2(code2);\n }\n}\nfunction tokenizeDomain(effects, ok2, nok) {\n let underscoreInLastSegment;\n let underscoreInLastLastSegment;\n let seen;\n return domainInside;\n function domainInside(code2) {\n if (code2 === 46 || code2 === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code2);\n }\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2) || code2 !== 45 && unicodePunctuation(code2)) {\n return domainAfter(code2);\n }\n seen = true;\n effects.consume(code2);\n return domainInside;\n }\n function domainAtPunctuation(code2) {\n if (code2 === 95) {\n underscoreInLastSegment = true;\n } else {\n underscoreInLastLastSegment = underscoreInLastSegment;\n underscoreInLastSegment = void 0;\n }\n effects.consume(code2);\n return domainInside;\n }\n function domainAfter(code2) {\n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code2);\n }\n return ok2(code2);\n }\n}\nfunction tokenizePath(effects, ok2) {\n let sizeOpen = 0;\n let sizeClose = 0;\n return pathInside;\n function pathInside(code2) {\n if (code2 === 40) {\n sizeOpen++;\n effects.consume(code2);\n return pathInside;\n }\n if (code2 === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code2);\n }\n if (code2 === 33 || code2 === 34 || code2 === 38 || code2 === 39 || code2 === 41 || code2 === 42 || code2 === 44 || code2 === 46 || code2 === 58 || code2 === 59 || code2 === 60 || code2 === 63 || code2 === 93 || code2 === 95 || code2 === 126) {\n return effects.check(trail, ok2, pathAtPunctuation)(code2);\n }\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return ok2(code2);\n }\n effects.consume(code2);\n return pathInside;\n }\n function pathAtPunctuation(code2) {\n if (code2 === 41) {\n sizeClose++;\n }\n effects.consume(code2);\n return pathInside;\n }\n}\nfunction tokenizeTrail(effects, ok2, nok) {\n return trail2;\n function trail2(code2) {\n if (code2 === 33 || code2 === 34 || code2 === 39 || code2 === 41 || code2 === 42 || code2 === 44 || code2 === 46 || code2 === 58 || code2 === 59 || code2 === 63 || code2 === 95 || code2 === 126) {\n effects.consume(code2);\n return trail2;\n }\n if (code2 === 38) {\n effects.consume(code2);\n return trailCharacterReferenceStart;\n }\n if (code2 === 93) {\n effects.consume(code2);\n return trailBracketAfter;\n }\n if (\n // `<` is an end.\n code2 === 60 || // So is whitespace.\n code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)\n ) {\n return ok2(code2);\n }\n return nok(code2);\n }\n function trailBracketAfter(code2) {\n if (code2 === null || code2 === 40 || code2 === 91 || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return ok2(code2);\n }\n return trail2(code2);\n }\n function trailCharacterReferenceStart(code2) {\n return asciiAlpha(code2) ? trailCharacterReferenceInside(code2) : nok(code2);\n }\n function trailCharacterReferenceInside(code2) {\n if (code2 === 59) {\n effects.consume(code2);\n return trail2;\n }\n if (asciiAlpha(code2)) {\n effects.consume(code2);\n return trailCharacterReferenceInside;\n }\n return nok(code2);\n }\n}\nfunction tokenizeEmailDomainDotTrail(effects, ok2, nok) {\n return start;\n function start(code2) {\n effects.consume(code2);\n return after;\n }\n function after(code2) {\n return asciiAlphanumeric(code2) ? nok(code2) : ok2(code2);\n }\n}\nfunction previousWww(code2) {\n return code2 === null || code2 === 40 || code2 === 42 || code2 === 95 || code2 === 91 || code2 === 93 || code2 === 126 || markdownLineEndingOrSpace(code2);\n}\nfunction previousProtocol(code2) {\n return !asciiAlpha(code2);\n}\nfunction previousEmail(code2) {\n return !(code2 === 47 || gfmAtext(code2));\n}\nfunction gfmAtext(code2) {\n return code2 === 43 || code2 === 45 || code2 === 46 || code2 === 95 || asciiAlphanumeric(code2);\n}\nfunction previousUnbalanced(events) {\n let index = events.length;\n let result = false;\n while (index--) {\n const token = events[index][1];\n if ((token.type === \"labelLink\" || token.type === \"labelImage\") && !token._balanced) {\n result = true;\n break;\n }\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false;\n break;\n }\n }\n if (events.length > 0 && !result) {\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}\nfunction resolveAll(constructs2, events, context) {\n const called = [];\n let index = -1;\n while (++index < constructs2.length) {\n const resolve = constructs2[index].resolveAll;\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context);\n called.push(resolve);\n }\n }\n return events;\n}\nfunction factorySpace(effects, ok2, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n let size = 0;\n return start;\n function start(code2) {\n if (markdownSpace(code2)) {\n effects.enter(type);\n return prefix(code2);\n }\n return ok2(code2);\n }\n function prefix(code2) {\n if (markdownSpace(code2) && size++ < limit) {\n effects.consume(code2);\n return prefix;\n }\n effects.exit(type);\n return ok2(code2);\n }\n}\nconst blankLine = {\n partial: true,\n tokenize: tokenizeBlankLine\n};\nfunction tokenizeBlankLine(effects, ok2, nok) {\n return start;\n function start(code2) {\n return markdownSpace(code2) ? factorySpace(effects, after, \"linePrefix\")(code2) : after(code2);\n }\n function after(code2) {\n return code2 === null || markdownLineEnding(code2) ? ok2(code2) : nok(code2);\n }\n}\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n};\nfunction gfmFootnote() {\n return {\n document: {\n [91]: {\n name: \"gfmFootnoteDefinition\",\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n name: \"gfmFootnoteCall\",\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n name: \"gfmPotentialFootnoteCall\",\n add: \"after\",\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n };\n}\nfunction tokenizePotentialGfmFootnoteCall(effects, ok2, nok) {\n const self = this;\n let index = self.events.length;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let labelStart;\n while (index--) {\n const token = self.events[index][1];\n if (token.type === \"labelImage\") {\n labelStart = token;\n break;\n }\n if (token.type === \"gfmFootnoteCall\" || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n break;\n }\n }\n return start;\n function start(code2) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code2);\n }\n const id = normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n }));\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code2);\n }\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n return ok2(code2);\n }\n}\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length;\n while (index--) {\n if (events[index][1].type === \"labelImage\" && events[index][0] === \"enter\") {\n events[index][1];\n break;\n }\n }\n events[index + 1][1].type = \"data\";\n events[index + 3][1].type = \"gfmFootnoteCallLabelMarker\";\n const call = {\n type: \"gfmFootnoteCall\",\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n const marker = {\n type: \"gfmFootnoteCallMarker\",\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n };\n marker.end.column++;\n marker.end.offset++;\n marker.end._bufferIndex++;\n const string = {\n type: \"gfmFootnoteCallString\",\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n };\n const chunk = {\n type: \"chunkString\",\n contentType: \"string\",\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n };\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1],\n events[index + 2],\n [\"enter\", call, context],\n // The `[`\n events[index + 3],\n events[index + 4],\n // The `^`.\n [\"enter\", marker, context],\n [\"exit\", marker, context],\n // Everything in between.\n [\"enter\", string, context],\n [\"enter\", chunk, context],\n [\"exit\", chunk, context],\n [\"exit\", string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2],\n events[events.length - 1],\n [\"exit\", call, context]\n ];\n events.splice(index, events.length - index + 1, ...replacement);\n return events;\n}\nfunction tokenizeGfmFootnoteCall(effects, ok2, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let size = 0;\n let data;\n return start;\n function start(code2) {\n effects.enter(\"gfmFootnoteCall\");\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n return callStart;\n }\n function callStart(code2) {\n if (code2 !== 94) return nok(code2);\n effects.enter(\"gfmFootnoteCallMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallMarker\");\n effects.enter(\"gfmFootnoteCallString\");\n effects.enter(\"chunkString\").contentType = \"string\";\n return callData;\n }\n function callData(code2) {\n if (\n // Too long.\n size > 999 || // Closing brace with nothing.\n code2 === 93 && !data || // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code2 === null || code2 === 91 || markdownLineEndingOrSpace(code2)\n ) {\n return nok(code2);\n }\n if (code2 === 93) {\n effects.exit(\"chunkString\");\n const token = effects.exit(\"gfmFootnoteCallString\");\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code2);\n }\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n effects.exit(\"gfmFootnoteCall\");\n return ok2;\n }\n if (!markdownLineEndingOrSpace(code2)) {\n data = true;\n }\n size++;\n effects.consume(code2);\n return code2 === 92 ? callEscape : callData;\n }\n function callEscape(code2) {\n if (code2 === 91 || code2 === 92 || code2 === 93) {\n effects.consume(code2);\n size++;\n return callData;\n }\n return callData(code2);\n }\n}\nfunction tokenizeDefinitionStart(effects, ok2, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let identifier;\n let size = 0;\n let data;\n return start;\n function start(code2) {\n effects.enter(\"gfmFootnoteDefinition\")._container = true;\n effects.enter(\"gfmFootnoteDefinitionLabel\");\n effects.enter(\"gfmFootnoteDefinitionLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionLabelMarker\");\n return labelAtMarker;\n }\n function labelAtMarker(code2) {\n if (code2 === 94) {\n effects.enter(\"gfmFootnoteDefinitionMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionMarker\");\n effects.enter(\"gfmFootnoteDefinitionLabelString\");\n effects.enter(\"chunkString\").contentType = \"string\";\n return labelInside;\n }\n return nok(code2);\n }\n function labelInside(code2) {\n if (\n // Too long.\n size > 999 || // Closing brace with nothing.\n code2 === 93 && !data || // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code2 === null || code2 === 91 || markdownLineEndingOrSpace(code2)\n ) {\n return nok(code2);\n }\n if (code2 === 93) {\n effects.exit(\"chunkString\");\n const token = effects.exit(\"gfmFootnoteDefinitionLabelString\");\n identifier = normalizeIdentifier(self.sliceSerialize(token));\n effects.enter(\"gfmFootnoteDefinitionLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionLabelMarker\");\n effects.exit(\"gfmFootnoteDefinitionLabel\");\n return labelAfter;\n }\n if (!markdownLineEndingOrSpace(code2)) {\n data = true;\n }\n size++;\n effects.consume(code2);\n return code2 === 92 ? labelEscape : labelInside;\n }\n function labelEscape(code2) {\n if (code2 === 91 || code2 === 92 || code2 === 93) {\n effects.consume(code2);\n size++;\n return labelInside;\n }\n return labelInside(code2);\n }\n function labelAfter(code2) {\n if (code2 === 58) {\n effects.enter(\"definitionMarker\");\n effects.consume(code2);\n effects.exit(\"definitionMarker\");\n if (!defined.includes(identifier)) {\n defined.push(identifier);\n }\n return factorySpace(effects, whitespaceAfter, \"gfmFootnoteDefinitionWhitespace\");\n }\n return nok(code2);\n }\n function whitespaceAfter(code2) {\n return ok2(code2);\n }\n}\nfunction tokenizeDefinitionContinuation(effects, ok2, nok) {\n return effects.check(blankLine, ok2, effects.attempt(indent, ok2, nok));\n}\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit(\"gfmFootnoteDefinition\");\n}\nfunction tokenizeIndent(effects, ok2, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, \"gfmFootnoteDefinitionIndent\", 4 + 1);\n function afterPrefix(code2) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"gfmFootnoteDefinitionIndent\" && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok2(code2) : nok(code2);\n }\n}\nfunction gfmStrikethrough(options) {\n const options_ = options || {};\n let single = options_.singleTilde;\n const tokenizer = {\n name: \"strikethrough\",\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n };\n if (single === null || single === void 0) {\n single = true;\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n };\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n while (++index < events.length) {\n if (events[index][0] === \"enter\" && events[index][1].type === \"strikethroughSequenceTemporary\" && events[index][1]._close) {\n let open = index;\n while (open--) {\n if (events[open][0] === \"exit\" && events[open][1].type === \"strikethroughSequenceTemporary\" && events[open][1]._open && // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n events[index][1].type = \"strikethroughSequence\";\n events[open][1].type = \"strikethroughSequence\";\n const strikethrough = {\n type: \"strikethrough\",\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n const text2 = {\n type: \"strikethroughText\",\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n const nextEvents = [[\"enter\", strikethrough, context], [\"enter\", events[open][1], context], [\"exit\", events[open][1], context], [\"enter\", text2, context]];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));\n }\n splice(nextEvents, nextEvents.length, 0, [[\"exit\", text2, context], [\"enter\", events[index][1], context], [\"exit\", events[index][1], context], [\"exit\", strikethrough, context]]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === \"strikethroughSequenceTemporary\") {\n events[index][1].type = \"data\";\n }\n }\n return events;\n }\n function tokenizeStrikethrough(effects, ok2, nok) {\n const previous2 = this.previous;\n const events = this.events;\n let size = 0;\n return start;\n function start(code2) {\n if (previous2 === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n return nok(code2);\n }\n effects.enter(\"strikethroughSequenceTemporary\");\n return more(code2);\n }\n function more(code2) {\n const before = classifyCharacter(previous2);\n if (code2 === 126) {\n if (size > 1) return nok(code2);\n effects.consume(code2);\n size++;\n return more;\n }\n if (size < 2 && !single) return nok(code2);\n const token = effects.exit(\"strikethroughSequenceTemporary\");\n const after = classifyCharacter(code2);\n token._open = !after || after === 2 && Boolean(before);\n token._close = !before || before === 2 && Boolean(after);\n return ok2(code2);\n }\n }\n}\nclass EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n this.map = [];\n }\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImplementation(this, index, remove, add);\n }\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImplementation(this, index, remove, add, true)\n // }\n /**\n * Done, change the events.\n *\n * @param {Array} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function(a, b) {\n return a[0] - b[0];\n });\n if (this.map.length === 0) {\n return;\n }\n let index = this.map.length;\n const vecs = [];\n while (index > 0) {\n index -= 1;\n vecs.push(events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2]);\n events.length = this.map[index][0];\n }\n vecs.push(events.slice());\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n for (const element of slice) {\n events.push(element);\n }\n slice = vecs.pop();\n }\n this.map.length = 0;\n }\n}\nfunction addImplementation(editMap, at, remove, add) {\n let index = 0;\n if (remove === 0 && add.length === 0) {\n return;\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove;\n editMap.map[index][2].push(...add);\n return;\n }\n index += 1;\n }\n editMap.map.push([at, remove, add]);\n}\nfunction gfmTableAlign(events, index) {\n let inDelimiterRow = false;\n const align = [];\n while (index < events.length) {\n const event = events[index];\n if (inDelimiterRow) {\n if (event[0] === \"enter\") {\n if (event[1].type === \"tableContent\") {\n align.push(events[index + 1][1].type === \"tableDelimiterMarker\" ? \"left\" : \"none\");\n }\n } else if (event[1].type === \"tableContent\") {\n if (events[index - 1][1].type === \"tableDelimiterMarker\") {\n const alignIndex = align.length - 1;\n align[alignIndex] = align[alignIndex] === \"left\" ? \"center\" : \"right\";\n }\n } else if (event[1].type === \"tableDelimiterRow\") {\n break;\n }\n } else if (event[0] === \"enter\" && event[1].type === \"tableDelimiterRow\") {\n inDelimiterRow = true;\n }\n index += 1;\n }\n return align;\n}\nfunction gfmTable() {\n return {\n flow: {\n null: {\n name: \"table\",\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n };\n}\nfunction tokenizeTable(effects, ok2, nok) {\n const self = this;\n let size = 0;\n let sizeB = 0;\n let seen;\n return start;\n function start(code2) {\n let index = self.events.length - 1;\n while (index > -1) {\n const type = self.events[index][1].type;\n if (type === \"lineEnding\" || // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\") index--;\n else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === \"tableHead\" || tail === \"tableRow\" ? bodyRowStart : headRowBefore;\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code2);\n }\n return next(code2);\n }\n function headRowBefore(code2) {\n effects.enter(\"tableHead\");\n effects.enter(\"tableRow\");\n return headRowStart(code2);\n }\n function headRowStart(code2) {\n if (code2 === 124) {\n return headRowBreak(code2);\n }\n seen = true;\n sizeB += 1;\n return headRowBreak(code2);\n }\n function headRowBreak(code2) {\n if (code2 === null) {\n return nok(code2);\n }\n if (markdownLineEnding(code2)) {\n if (sizeB > 1) {\n sizeB = 0;\n self.interrupt = true;\n effects.exit(\"tableRow\");\n effects.enter(\"lineEnding\");\n effects.consume(code2);\n effects.exit(\"lineEnding\");\n return headDelimiterStart;\n }\n return nok(code2);\n }\n if (markdownSpace(code2)) {\n return factorySpace(effects, headRowBreak, \"whitespace\")(code2);\n }\n sizeB += 1;\n if (seen) {\n seen = false;\n size += 1;\n }\n if (code2 === 124) {\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n seen = true;\n return headRowBreak;\n }\n effects.enter(\"data\");\n return headRowData(code2);\n }\n function headRowData(code2) {\n if (code2 === null || code2 === 124 || markdownLineEndingOrSpace(code2)) {\n effects.exit(\"data\");\n return headRowBreak(code2);\n }\n effects.consume(code2);\n return code2 === 92 ? headRowEscape : headRowData;\n }\n function headRowEscape(code2) {\n if (code2 === 92 || code2 === 124) {\n effects.consume(code2);\n return headRowData;\n }\n return headRowData(code2);\n }\n function headDelimiterStart(code2) {\n self.interrupt = false;\n if (self.parser.lazy[self.now().line]) {\n return nok(code2);\n }\n effects.enter(\"tableDelimiterRow\");\n seen = false;\n if (markdownSpace(code2)) {\n return factorySpace(effects, headDelimiterBefore, \"linePrefix\", self.parser.constructs.disable.null.includes(\"codeIndented\") ? void 0 : 4)(code2);\n }\n return headDelimiterBefore(code2);\n }\n function headDelimiterBefore(code2) {\n if (code2 === 45 || code2 === 58) {\n return headDelimiterValueBefore(code2);\n }\n if (code2 === 124) {\n seen = true;\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n return headDelimiterCellBefore;\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterCellBefore(code2) {\n if (markdownSpace(code2)) {\n return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code2);\n }\n return headDelimiterValueBefore(code2);\n }\n function headDelimiterValueBefore(code2) {\n if (code2 === 58) {\n sizeB += 1;\n seen = true;\n effects.enter(\"tableDelimiterMarker\");\n effects.consume(code2);\n effects.exit(\"tableDelimiterMarker\");\n return headDelimiterLeftAlignmentAfter;\n }\n if (code2 === 45) {\n sizeB += 1;\n return headDelimiterLeftAlignmentAfter(code2);\n }\n if (code2 === null || markdownLineEnding(code2)) {\n return headDelimiterCellAfter(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterLeftAlignmentAfter(code2) {\n if (code2 === 45) {\n effects.enter(\"tableDelimiterFiller\");\n return headDelimiterFiller(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterFiller(code2) {\n if (code2 === 45) {\n effects.consume(code2);\n return headDelimiterFiller;\n }\n if (code2 === 58) {\n seen = true;\n effects.exit(\"tableDelimiterFiller\");\n effects.enter(\"tableDelimiterMarker\");\n effects.consume(code2);\n effects.exit(\"tableDelimiterMarker\");\n return headDelimiterRightAlignmentAfter;\n }\n effects.exit(\"tableDelimiterFiller\");\n return headDelimiterRightAlignmentAfter(code2);\n }\n function headDelimiterRightAlignmentAfter(code2) {\n if (markdownSpace(code2)) {\n return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code2);\n }\n return headDelimiterCellAfter(code2);\n }\n function headDelimiterCellAfter(code2) {\n if (code2 === 124) {\n return headDelimiterBefore(code2);\n }\n if (code2 === null || markdownLineEnding(code2)) {\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code2);\n }\n effects.exit(\"tableDelimiterRow\");\n effects.exit(\"tableHead\");\n return ok2(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterNok(code2) {\n return nok(code2);\n }\n function bodyRowStart(code2) {\n effects.enter(\"tableRow\");\n return bodyRowBreak(code2);\n }\n function bodyRowBreak(code2) {\n if (code2 === 124) {\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n return bodyRowBreak;\n }\n if (code2 === null || markdownLineEnding(code2)) {\n effects.exit(\"tableRow\");\n return ok2(code2);\n }\n if (markdownSpace(code2)) {\n return factorySpace(effects, bodyRowBreak, \"whitespace\")(code2);\n }\n effects.enter(\"data\");\n return bodyRowData(code2);\n }\n function bodyRowData(code2) {\n if (code2 === null || code2 === 124 || markdownLineEndingOrSpace(code2)) {\n effects.exit(\"data\");\n return bodyRowBreak(code2);\n }\n effects.consume(code2);\n return code2 === 92 ? bodyRowEscape : bodyRowData;\n }\n function bodyRowEscape(code2) {\n if (code2 === 92 || code2 === 124) {\n effects.consume(code2);\n return bodyRowData;\n }\n return bodyRowData(code2);\n }\n}\nfunction resolveTable(events, context) {\n let index = -1;\n let inFirstCellAwaitingPipe = true;\n let rowKind = 0;\n let lastCell = [0, 0, 0, 0];\n let cell = [0, 0, 0, 0];\n let afterHeadAwaitingFirstBodyRow = false;\n let lastTableEnd = 0;\n let currentTable;\n let currentBody;\n let currentCell;\n const map2 = new EditMap();\n while (++index < events.length) {\n const event = events[index];\n const token = event[1];\n if (event[0] === \"enter\") {\n if (token.type === \"tableHead\") {\n afterHeadAwaitingFirstBodyRow = false;\n if (lastTableEnd !== 0) {\n flushTableEnd(map2, context, lastTableEnd, currentTable, currentBody);\n currentBody = void 0;\n lastTableEnd = 0;\n }\n currentTable = {\n type: \"table\",\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map2.add(index, 0, [[\"enter\", currentTable, context]]);\n } else if (token.type === \"tableRow\" || token.type === \"tableDelimiterRow\") {\n inFirstCellAwaitingPipe = true;\n currentCell = void 0;\n lastCell = [0, 0, 0, 0];\n cell = [0, index + 1, 0, 0];\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false;\n currentBody = {\n type: \"tableBody\",\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map2.add(index, 0, [[\"enter\", currentBody, context]]);\n }\n rowKind = token.type === \"tableDelimiterRow\" ? 2 : currentBody ? 3 : 1;\n } else if (rowKind && (token.type === \"data\" || token.type === \"tableDelimiterMarker\" || token.type === \"tableDelimiterFiller\")) {\n inFirstCellAwaitingPipe = false;\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map2, context, lastCell, rowKind, void 0, currentCell);\n lastCell = [0, 0, 0, 0];\n }\n cell[2] = index;\n }\n } else if (token.type === \"tableCellDivider\") {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false;\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map2, context, lastCell, rowKind, void 0, currentCell);\n }\n lastCell = cell;\n cell = [lastCell[1], index, 0, 0];\n }\n }\n } else if (token.type === \"tableHead\") {\n afterHeadAwaitingFirstBodyRow = true;\n lastTableEnd = index;\n } else if (token.type === \"tableRow\" || token.type === \"tableDelimiterRow\") {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map2, context, lastCell, rowKind, index, currentCell);\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map2, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === \"tableDelimiterMarker\" || token.type === \"tableDelimiterFiller\")) {\n cell[3] = index;\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map2, context, lastTableEnd, currentTable, currentBody);\n }\n map2.consume(context.events);\n index = -1;\n while (++index < context.events.length) {\n const event = context.events[index];\n if (event[0] === \"enter\" && event[1].type === \"table\") {\n event[1]._align = gfmTableAlign(context.events, index);\n }\n }\n return events;\n}\nfunction flushCell(map2, context, range, rowKind, rowEnd, previousCell) {\n const groupName = rowKind === 1 ? \"tableHeader\" : rowKind === 2 ? \"tableDelimiter\" : \"tableData\";\n const valueName = \"tableContent\";\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n map2.add(range[0], 0, [[\"exit\", previousCell, context]]);\n }\n const now = getPoint(context.events, range[1]);\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n };\n map2.add(range[1], 0, [[\"enter\", previousCell, context]]);\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2]);\n const relatedEnd = getPoint(context.events, range[3]);\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n };\n map2.add(range[2], 0, [[\"enter\", valueToken, context]]);\n if (rowKind !== 2) {\n const start = context.events[range[2]];\n const end = context.events[range[3]];\n start[1].end = Object.assign({}, end[1].end);\n start[1].type = \"chunkText\";\n start[1].contentType = \"text\";\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1;\n const b = range[3] - range[2] - 1;\n map2.add(a, b, []);\n }\n }\n map2.add(range[3] + 1, 0, [[\"exit\", valueToken, context]]);\n }\n if (rowEnd !== void 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n map2.add(rowEnd, 0, [[\"exit\", previousCell, context]]);\n previousCell = void 0;\n }\n return previousCell;\n}\nfunction flushTableEnd(map2, context, index, table, tableBody) {\n const exits = [];\n const related = getPoint(context.events, index);\n if (tableBody) {\n tableBody.end = Object.assign({}, related);\n exits.push([\"exit\", tableBody, context]);\n }\n table.end = Object.assign({}, related);\n exits.push([\"exit\", table, context]);\n map2.add(index + 1, 0, exits);\n}\nfunction getPoint(events, index) {\n const event = events[index];\n const side = event[0] === \"enter\" ? \"start\" : \"end\";\n return event[1][side];\n}\nconst tasklistCheck = {\n name: \"tasklistCheck\",\n tokenize: tokenizeTasklistCheck\n};\nfunction gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n };\n}\nfunction tokenizeTasklistCheck(effects, ok2, nok) {\n const self = this;\n return open;\n function open(code2) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null || // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem\n ) {\n return nok(code2);\n }\n effects.enter(\"taskListCheck\");\n effects.enter(\"taskListCheckMarker\");\n effects.consume(code2);\n effects.exit(\"taskListCheckMarker\");\n return inside;\n }\n function inside(code2) {\n if (markdownLineEndingOrSpace(code2)) {\n effects.enter(\"taskListCheckValueUnchecked\");\n effects.consume(code2);\n effects.exit(\"taskListCheckValueUnchecked\");\n return close;\n }\n if (code2 === 88 || code2 === 120) {\n effects.enter(\"taskListCheckValueChecked\");\n effects.consume(code2);\n effects.exit(\"taskListCheckValueChecked\");\n return close;\n }\n return nok(code2);\n }\n function close(code2) {\n if (code2 === 93) {\n effects.enter(\"taskListCheckMarker\");\n effects.consume(code2);\n effects.exit(\"taskListCheckMarker\");\n effects.exit(\"taskListCheck\");\n return after;\n }\n return nok(code2);\n }\n function after(code2) {\n if (markdownLineEnding(code2)) {\n return ok2(code2);\n }\n if (markdownSpace(code2)) {\n return effects.check({\n tokenize: spaceThenNonSpace\n }, ok2, nok)(code2);\n }\n return nok(code2);\n }\n}\nfunction spaceThenNonSpace(effects, ok2, nok) {\n return factorySpace(effects, after, \"whitespace\");\n function after(code2) {\n return code2 === null ? nok(code2) : ok2(code2);\n }\n}\nfunction gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ]);\n}\nconst emptyOptions = {};\nfunction remarkGfm(options) {\n const self = (\n /** @type {Processor} */\n this\n );\n const settings = options || emptyOptions;\n const data = self.data();\n const micromarkExtensions = data.micromarkExtensions || (data.micromarkExtensions = []);\n const fromMarkdownExtensions = data.fromMarkdownExtensions || (data.fromMarkdownExtensions = []);\n const toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []);\n micromarkExtensions.push(gfm(settings));\n fromMarkdownExtensions.push(gfmFromMarkdown());\n toMarkdownExtensions.push(gfmToMarkdown(settings));\n}\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n __name: \"NcRichTextCopyButton\",\n props: {\n contentId: {}\n },\n setup(__props) {\n const { copy, icon, altText } = useCopy(() => document.getElementById(__props.contentId).textContent);\n return (_ctx, _cache) => {\n return openBlock(), createBlock(NcButton, {\n variant: \"tertiary\",\n size: \"small\",\n \"aria-label\": unref(altText),\n title: unref(altText),\n onClick: unref(copy)\n }, {\n icon: withCtx(() => [\n createVNode(NcIconSvgWrapper, {\n path: unref(icon),\n inline: \"\"\n }, null, 8, [\"path\"])\n ]),\n _: 1\n }, 8, [\"aria-label\", \"title\", \"onClick\"]);\n };\n }\n});\n/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction isTextNode$1(node) {\n return node.type === \"text\";\n}\nconst transformPlaceholders = function(ast) {\n visitParents(ast, isTextNode$1, (node, ancestors) => {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n const placeholders = node.value.split(/(\\{[a-z\\-_.0-9]+\\})/ig).map((entry) => {\n const matches = entry.match(/^\\{([a-z\\-_.0-9]+)\\}$/i);\n if (!matches) {\n return u(\"text\", entry);\n }\n const [, component] = matches;\n return u(\"element\", {\n tagName: `#${component}`,\n children: []\n });\n });\n parent.children.splice(index, 1, ...placeholders);\n });\n};\nconst remarkPlaceholder = () => transformPlaceholders;\n/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction isCodeNode(node) {\n return [\"code\", \"inlineCode\"].includes(node.type);\n}\nconst remarkStripCode = function() {\n return function(tree) {\n visitParents(tree, isCodeNode, (node, ancestors) => {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n parent.children.splice(index, 1, {\n ...node,\n value: \"\"\n });\n return [SKIP, index + 1];\n });\n };\n};\n/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction isTextNode(node) {\n return [\"text\", \"code\", \"inlineCode\"].includes(node.type);\n}\nconst remarkUnescape = function() {\n return function(tree) {\n visitParents(tree, isTextNode, (node, ancestors) => {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n parent.children.splice(index, 1, {\n ...node,\n value: node.value.replace(/</gmi, \"<\").replace(/>/gmi, \">\")\n });\n return [SKIP, index + 1];\n });\n };\n};\nconst LINK_PROTOCOLS = [\"http\", \"https\", \"mailto\", \"tel\"];\nconst rehypeHighlight = ref(null);\nasync function importRehypeHighlightLibrary() {\n const module = await import(\"rehype-highlight\");\n rehypeHighlight.value = module.default;\n}\nconst _sfc_main = {\n name: \"NcRichText\",\n components: {\n NcReferenceList\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * The main text\n */\n text: {\n type: String,\n default: \"\"\n },\n arguments: {\n type: Object,\n default: () => {\n return {};\n }\n },\n referenceLimit: {\n type: Number,\n default: 0\n },\n referenceInteractive: {\n type: Boolean,\n default: true\n },\n referenceInteractiveOptIn: {\n type: Boolean,\n default: false\n },\n /** Provide data upfront to avoid extra http request */\n references: {\n type: Array,\n default: null\n },\n /** Provide basic Markdown syntax */\n useMarkdown: {\n type: Boolean,\n default: false\n },\n /** Provide GitHub Flavored Markdown syntax */\n useExtendedMarkdown: {\n type: Boolean,\n default: false\n },\n /** Provide event from rendered markdown inputs */\n interactive: {\n type: Boolean,\n default: false\n },\n /**\n * Automatically convert link-like text to markdown links\n */\n autolink: {\n type: Boolean,\n default: true\n }\n },\n emits: [\n \"interactTodo\"\n ],\n data() {\n return {\n parentId: createElementId()\n };\n },\n methods: {\n renderPlaintext() {\n const placeholders = this.text.split(/(\\{[a-z\\-_.0-9]+\\})/ig).map((entry) => {\n const matches = entry.match(/^\\{([a-z\\-_.0-9]+)\\}$/i);\n if (!matches) {\n return this.prepareTextNode(entry);\n }\n const argumentId = matches[1];\n const argument = this.arguments[argumentId];\n if (typeof argument === \"object\") {\n const { component, props } = argument;\n return h(typeof component === \"string\" ? resolveComponent(component) : component, {\n ...props,\n class: \"rich-text--component\"\n });\n }\n if (argument) {\n return h(\"span\", { class: \"rich-text--fallback\" }, argument);\n }\n return entry;\n });\n return h(\"div\", { class: \"rich-text--wrapper\" }, [\n h(\"div\", {}, placeholders.flat()),\n this.referenceLimit > 0 ? h(\"div\", { class: \"rich-text--reference-widget\" }, [\n h(NcReferenceList, {\n text: this.text,\n referenceData: this.references,\n interactive: this.referenceInteractive,\n interactiveOptIn: this.referenceInteractiveOptIn\n })\n ]) : null\n ]);\n },\n renderMarkdown() {\n const renderedMarkdown = unified().use(remarkParse).use(remarkAutolink, {\n autolink: this.autolink,\n useMarkdown: this.useMarkdown,\n useExtendedMarkdown: this.useExtendedMarkdown\n }).use(remarkUnescape).use(this.useExtendedMarkdown ? remarkGfm : void 0).use(breaks).use(remarkUnlinkProtocols, { except: LINK_PROTOCOLS }).use(remark2rehype, {\n handlers: {\n component(toHast, node) {\n return toHast(node, node.component, { value: node.value });\n }\n }\n }).use(this.useExtendedMarkdown ? rehypeHighlight.value : void 0).use(remarkPlaceholder).use(rehypeExternalLinks, {\n target: \"_blank\",\n rel: [\"noopener noreferrer\"]\n }).use(rehype2react, {\n Fragment,\n jsx: this.createElement,\n jsxs: this.createElement,\n elementAttributeNameCase: \"html\",\n prefix: false\n }).processSync(this.text.replace(/<[^>]+>/g, (match) => match.replace(/\")).result;\n return h(\"div\", { class: \"rich-text--wrapper rich-text--wrapper-markdown\" }, [\n renderedMarkdown,\n this.referenceLimit > 0 ? h(\"div\", { class: \"rich-text--reference-widget\" }, [\n h(NcReferenceList, {\n text: this.prepareReferenceSource(this.text),\n referenceData: this.references,\n interactive: this.referenceInteractive,\n interactiveOptIn: this.referenceInteractiveOptIn\n })\n ]) : null\n ]);\n },\n /**\n * Render plain text nodes\n *\n * @param {string} text - Content of the node\n */\n prepareTextNode(text2) {\n if (this.autolink) {\n text2 = parseUrl(text2);\n }\n if (Array.isArray(text2)) {\n return text2.map((entry) => {\n if (typeof entry === \"string\") {\n return entry;\n }\n const { component, props } = entry;\n return h(component, {\n ...props,\n class: \"rich-text--component\"\n });\n });\n }\n return text2;\n },\n /**\n * Strip content of inline code and code blocks for reference widgets\n * (e.g. ignore fenced links from being added as reference)\n *\n * @param {string} text - Content of the node\n */\n prepareReferenceSource(text2) {\n if (!this.useMarkdown && !this.useExtendedMarkdown) {\n return text2;\n }\n const processor = unified();\n processor.compiler = (tree) => toString(tree);\n return processor.use(remarkParse).use(remarkStripCode).processSync(text2.replace(/\\s/g, \" \")).value;\n },\n createElement(type, props, key) {\n if (key) {\n props.key = key;\n }\n const children = props.children ?? [];\n delete props.children;\n if (!String(type).startsWith(\"#\")) {\n if ([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes(String(type))) {\n type = `h${Math.min(+String(type)[1] + 3, 6)}`;\n }\n let nestedNode = null;\n if (this.useExtendedMarkdown) {\n if (String(type) === \"code\" && !rehypeHighlight.value && props?.class?.includes(\"language\")) {\n importRehypeHighlightLibrary();\n }\n if (String(type) === \"pre\" && children && String(children.type) === \"code\") {\n const id = this.parentId + \"-code-block-\" + createElementId();\n return h(\"p\", { class: \"rich-text__code-block\" }, [\n h(type, { ...props, id }, children),\n h(_sfc_main$1, { class: \"rich-text__code-block-button\", contentId: id })\n ]);\n }\n if (String(type) === \"li\" && Array.isArray(children) && children.length !== 0 && children[0].type === \"input\" && children[0].props.type === \"checkbox\") {\n const [inputNode, , ...labelParts] = children;\n const nestedNodeIndex = labelParts.findIndex((child) => [\"ul\", \"ol\", \"li\", \"blockquote\", \"pre\"].includes(child.type));\n if (nestedNodeIndex !== -1) {\n nestedNode = labelParts[nestedNodeIndex];\n labelParts.splice(nestedNodeIndex);\n }\n const id = this.parentId + \"-markdown-input-\" + createElementId();\n const propsToForward = { ...inputNode.props };\n delete propsToForward.checked;\n const inputComponent = h(NcCheckboxRadioSwitch, {\n ...propsToForward,\n modelValue: inputNode.props.checked,\n id,\n disabled: !this.interactive,\n \"onUpdate:modelValue\": () => {\n this.$emit(\"interactTodo\", id);\n }\n }, { default: () => labelParts });\n return h(type, props, [inputComponent, nestedNode]);\n }\n }\n if (String(type) === \"a\") {\n const route = getRoute(this.$router, props.href);\n if (route) {\n delete props.href;\n delete props.target;\n return h(RouterLink, {\n ...props,\n to: route\n }, { default: () => children });\n }\n const isAllowedScheme = /^(https?:\\/\\/|tel:|mailto:)/.test(props.href);\n if (isAllowedScheme) {\n props.href = props.href.trim();\n return h(NcRichTextExternalLink, props, children);\n } else {\n delete props.href;\n delete props.target;\n return h(\"span\", props, children);\n }\n }\n return h(type, props, children);\n }\n const placeholder = this.arguments[type.slice(1)];\n if (!placeholder) {\n return h(\"span\", { ...props, class: \"rich-text--fallback\" }, [`{${type.slice(1)}}`]);\n }\n if (!placeholder.component) {\n return h(\"span\", { ...props }, [placeholder]);\n }\n return h(\n typeof placeholder.component === \"string\" ? resolveComponent(placeholder.component) : placeholder.component,\n {\n ...props,\n ...placeholder.props,\n class: \"rich-text--component\"\n },\n { default: () => children }\n );\n }\n },\n render() {\n return this.useMarkdown || this.useExtendedMarkdown ? this.renderMarkdown() : this.renderPlaintext();\n }\n};\nconst NcRichText = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-76a4a548\"]]);\nexport {\n NcRichText as N,\n NcReferenceList as a\n};\n//# sourceMappingURL=NcRichText-Dkk6iX8F.mjs.map\n","import '../assets/NcRichContenteditable-BggdwT5n.css';\nimport debounce from \"debounce\";\nimport Tribute from \"tributejs/dist/tribute.esm.js\";\nimport { useIsDarkTheme } from \"../composables/useIsDarkTheme/index.mjs\";\nimport { g as getAvatarUrl } from \"./NcMentionBubble.vue_vue_type_style_index_0_scoped_45238efd_lang-BX_KxRP-.mjs\";\nimport { N as NcUserStatusIcon } from \"./NcUserStatusIcon-DsviB2Cr.mjs\";\nimport { openBlock, createElementBlock, normalizeClass, createElementVNode, normalizeStyle, toDisplayString, createApp, resolveComponent, createBlock, createCommentVNode, mergeProps, withModifiers, withKeys } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { a as emojiSearch, e as emojiAddRecent } from \"./emoji-C8k9NUlo.mjs\";\nimport { r as register, s as t37, J as t34, a as t, K as n } from \"./_l10n-CG4CuN3H.mjs\";\nimport escapeHTML from \"escape-html\";\nimport stripTags from \"striptags\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport \"@nextcloud/auth\";\nimport \"@nextcloud/axios\";\nimport \"@nextcloud/router\";\nimport \"@nextcloud/sharing/public\";\nimport \"@vueuse/core\";\nimport \"vue-router\";\nimport \"./legacy-BoqDmOCa.mjs\";\nimport \"./NcButton-QbPBynlU.mjs\";\nimport { g as getLinkWithPicker, s as searchProvider } from \"./referencePickerModal-CD1BjLPe.mjs\";\nimport \"./customPickerElements-Cu7bLbap.mjs\";\nimport \"unist-builder\";\nimport \"unist-util-visit-parents\";\nimport \"./NcRichText-Dkk6iX8F.mjs\";\nimport \"./NcEmptyContent-CGAPqk4S.mjs\";\nimport \"./NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs\";\nimport \"./NcSelect-BOFzoCwK.mjs\";\nimport \"./NcLoadingIcon-BOVpFVQz.mjs\";\nimport \"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r.mjs\";\nimport \"dompurify\";\nimport \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport \"./NcInputField-B1bGxYHt.mjs\";\nimport \"@nextcloud/event-bus\";\nimport \"focus-trap\";\nimport \"./NcActions-DY4GGONi.mjs\";\nimport \"../composables/useFormatDateTime/index.mjs\";\nimport \"../composables/useHotKey/index.mjs\";\nimport \"../composables/useIsFullscreen/index.mjs\";\nimport \"../composables/useIsMobile/index.mjs\";\nimport \"./NcModal-B-YLND3e.mjs\";\nimport \"./rtl-v0UOPAM7.mjs\";\nconst _sfc_main$2 = {\n name: \"NcMentionBubble\",\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * Id of the bubble\n */\n id: {\n type: String,\n required: true\n },\n /**\n * The main text\n */\n label: {\n type: String,\n required: false,\n default: null\n },\n /**\n * Icon to be applied\n */\n icon: {\n type: String,\n required: true\n },\n /**\n * URL of the icon\n */\n iconUrl: {\n type: [String, null],\n default: null\n },\n source: {\n type: String,\n required: true\n },\n /**\n * Is the bubble shown as primary\n */\n primary: {\n type: Boolean,\n default: false\n }\n },\n setup() {\n const isDarkTheme = useIsDarkTheme();\n return {\n isDarkTheme\n };\n },\n computed: {\n avatarUrl() {\n if (this.iconUrl) {\n return this.iconUrl;\n }\n return this.id && this.source === \"users\" ? getAvatarUrl(this.id, { isDarkTheme: this.isDarkTheme }) : null;\n },\n mentionText() {\n return !this.id.includes(\" \") && !this.id.includes(\"/\") ? `@${this.id}` : `@\"${this.id}\"`;\n }\n }\n};\nconst _hoisted_1$2 = { class: \"mention-bubble__wrapper\" };\nconst _hoisted_2$2 = { class: \"mention-bubble__content\" };\nconst _hoisted_3$1 = [\"title\"];\nconst _hoisted_4$1 = {\n role: \"none\",\n class: \"mention-bubble__select\"\n};\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", {\n class: normalizeClass([\"mention-bubble\", { \"mention-bubble--primary\": $props.primary }]),\n contenteditable: \"false\"\n }, [\n createElementVNode(\"span\", _hoisted_1$2, [\n createElementVNode(\"span\", _hoisted_2$2, [\n createElementVNode(\"span\", {\n class: normalizeClass([[$props.icon, `mention-bubble__icon--${$options.avatarUrl ? \"with-avatar\" : \"\"}`], \"mention-bubble__icon\"]),\n style: normalizeStyle($options.avatarUrl ? { backgroundImage: `url(${$options.avatarUrl})` } : null)\n }, null, 6),\n createElementVNode(\"span\", {\n role: \"heading\",\n class: \"mention-bubble__title\",\n title: $props.label\n }, null, 8, _hoisted_3$1)\n ]),\n createElementVNode(\"span\", _hoisted_4$1, toDisplayString($options.mentionText), 1)\n ])\n ], 2);\n}\nconst NcMentionBubble = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$2], [\"__scopeId\", \"data-v-45238efd\"]]);\nconst MENTION_START = /(?=[a-z0-9_\\-@.'])\\B/.source;\nconst MENTION_SIMPLE = /(@[a-z0-9_\\-@.']+)/.source;\nconst MENTION_GUEST = /@"(?:guest|email){1}\\/[a-f0-9]+"/.source;\nconst MENTION_PREFIXED = /@"(?:federated_)?(?:group|team|user){1}\\/[a-z0-9_\\-@.' /:]+"/.source;\nconst MENTION_WITH_SPACE = /@"[a-z0-9_\\-@.' ]+"/.source;\nconst MENTION_COMPLEX = `(${MENTION_GUEST}|${MENTION_PREFIXED}|${MENTION_WITH_SPACE})`;\nconst USERID_REGEX = new RegExp(`${MENTION_START}${MENTION_SIMPLE}`, \"gi\");\nconst USERID_REGEX_WITH_SPACE = new RegExp(`${MENTION_START}${MENTION_COMPLEX}`, \"gi\");\nconst richEditor = {\n props: {\n userData: {\n type: Object,\n default: () => ({})\n }\n },\n methods: {\n /**\n * Convert the value string to html for the inner content\n *\n * @param {string} value the content without html\n * @return {string} rendered html\n */\n renderContent(value) {\n const sanitizedValue = escapeHTML(value);\n const splitValue = sanitizedValue.split(USERID_REGEX).map((part) => part.split(USERID_REGEX_WITH_SPACE)).flat();\n return splitValue.map((part) => {\n if (!part.startsWith(\"@\")) {\n return part;\n }\n const id = part.slice(1).replace(/"/gi, \"\");\n return this.genSelectTemplate(id);\n }).join(\"\").replace(/\\n/gmi, \"
    \").replace(/&/gmi, \"&\");\n },\n /**\n * Convert the innerHtml content to a string with mentions as text\n *\n * @param {string} content the content without html\n * @return {string}\n */\n parseContent(content) {\n let text = content;\n text = text.replace(/
    /gmi, \"\\n\");\n text = text.replace(/ /gmi, \" \");\n text = text.replace(/&/gmi, \"&\");\n text = text.replace(/<\\/div>/gmi, \"\\n\");\n text = stripTags(text, \"
    \");\n text = stripTags(text);\n return text;\n },\n /**\n * Generate an autocompletion popup entry template\n *\n * @param {string} value the value to match against the userData\n * @return {string}\n */\n genSelectTemplate(value) {\n if (typeof value === \"undefined\") {\n return `${this.autocompleteTribute.current.collection.trigger}${this.autocompleteTribute.current.mentionText}`;\n }\n const data = this.userData[value];\n if (!data) {\n return [\" \", \"/\", \":\"].every((char) => !value.includes(char)) ? `@${value}` : `@\"${value}\"`;\n }\n return this.renderComponentHtml(data, NcMentionBubble).replace(/[\\n\\t]/gmi, \"\").replace(/>\\s+<\");\n },\n /**\n * Render a component and return its html content\n *\n * @param {object} props the props to pass to the component\n * @param {object} component the component to render\n * @return {string} the rendered html\n */\n renderComponentHtml(props, component) {\n const Item = createApp(component, {\n ...props\n });\n const mount = document.createElement(\"div\");\n mount.style.display = \"none\";\n document.body.appendChild(mount);\n Item.mount(mount);\n const renderedHtml = mount.innerHTML;\n Item.unmount();\n mount.remove();\n return renderedHtml;\n }\n }\n};\nconst _sfc_main$1 = {\n name: \"NcAutoCompleteResult\",\n components: {\n NcUserStatusIcon\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * The label text\n */\n label: {\n type: String,\n required: false,\n default: null\n },\n /**\n * The secondary line of text if any\n */\n subline: {\n type: String,\n default: null\n },\n /**\n * Unique id\n */\n id: {\n type: String,\n default: null\n },\n /**\n * The icon class\n */\n icon: {\n type: String,\n required: true\n },\n /**\n * Icon as external URL\n */\n iconUrl: {\n type: String,\n default: null\n },\n source: {\n type: String,\n required: true\n },\n status: {\n type: [Object, Array],\n default: () => ({})\n }\n },\n setup() {\n const isDarkTheme = useIsDarkTheme();\n return {\n isDarkTheme\n };\n },\n computed: {\n avatarUrl() {\n if (this.iconUrl) {\n return this.iconUrl;\n }\n return this.id && this.source === \"users\" ? getAvatarUrl(this.id, { isDarkTheme: this.isDarkTheme }) : null;\n }\n }\n};\nconst _hoisted_1$1 = { class: \"autocomplete-result\" };\nconst _hoisted_2$1 = {\n key: 0,\n class: \"autocomplete-result__status autocomplete-result__status--icon\"\n};\nconst _hoisted_3 = { class: \"autocomplete-result__content\" };\nconst _hoisted_4 = [\"title\"];\nconst _hoisted_5 = {\n key: 0,\n class: \"autocomplete-result__subline\"\n};\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcUserStatusIcon = resolveComponent(\"NcUserStatusIcon\");\n return openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n createElementVNode(\"div\", {\n class: normalizeClass([[$props.icon, `autocomplete-result__icon--${$options.avatarUrl ? \"with-avatar\" : \"\"}`], \"autocomplete-result__icon\"]),\n style: normalizeStyle($options.avatarUrl ? { backgroundImage: `url(${$options.avatarUrl})` } : null)\n }, [\n $props.status.icon ? (openBlock(), createElementBlock(\"span\", _hoisted_2$1, toDisplayString($props.status && $props.status.icon || \"\"), 1)) : $props.status.status && $props.status.status !== \"offline\" ? (openBlock(), createBlock(_component_NcUserStatusIcon, {\n key: 1,\n class: \"autocomplete-result__status\",\n status: $props.status.status\n }, null, 8, [\"status\"])) : createCommentVNode(\"\", true)\n ], 6),\n createElementVNode(\"span\", _hoisted_3, [\n createElementVNode(\"span\", {\n class: \"autocomplete-result__title\",\n title: $props.label\n }, toDisplayString($props.label), 9, _hoisted_4),\n $props.subline ? (openBlock(), createElementBlock(\"span\", _hoisted_5, toDisplayString($props.subline), 1)) : createCommentVNode(\"\", true)\n ])\n ]);\n}\nconst NcAutoCompleteResult = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-ca83b679\"]]);\nregister(t34, t37);\nconst style1 = {\n \"material-design-icon\": \"_material-design-icon_XwapU\",\n \"tribute-container\": \"_tribute-container_wIdql\",\n \"tribute-container__item\": \"_tribute-container__item_X-0u0\",\n \"tribute-container--focus-visible\": \"_tribute-container--focus-visible_2P6NG\",\n \"tribute-container-autocomplete\": \"_tribute-container-autocomplete_fzZqA\",\n \"tribute-container-emoji\": \"_tribute-container-emoji_kYB5G\",\n \"tribute-container-link\": \"_tribute-container-link_rjkxE\",\n \"tribute-item\": \"_tribute-item_Ku38e\",\n \"tribute-item__title\": \"_tribute-item__title_KOn1B\",\n \"tribute-item__icon\": \"_tribute-item__icon_dM2jk\"\n};\nconst smilesCharacters = [\"d\", \"D\", \"p\", \"P\", \"s\", \"S\", \"x\", \"X\", \")\", \"(\", \"|\", \"/\"];\nconst textSmiles = [];\nsmilesCharacters.forEach((char) => {\n textSmiles.push(\":\" + char);\n textSmiles.push(\":-\" + char);\n});\nlet isPlaintextOnlySupported = null;\nconst _sfc_main = {\n name: \"NcRichContenteditable\",\n mixins: [richEditor],\n inheritAttrs: false,\n props: {\n /**\n * The ID attribute of the content editable\n */\n id: {\n type: String,\n default: () => createElementId()\n },\n /**\n * Visual label of the contenteditable\n */\n label: {\n type: String,\n default: \"\"\n },\n /**\n * The text content\n */\n modelValue: {\n type: String,\n required: true\n },\n /**\n * Placeholder to be shown if empty\n */\n placeholder: {\n type: String,\n default: t(\"Write a message …\")\n },\n /**\n * Auto complete function\n */\n autoComplete: {\n type: Function,\n default: () => []\n },\n /**\n * The containing element or selector for the tribute (menu popover)\n * Defaults to `body` element\n */\n menuContainer: {\n type: [String, Element, null],\n default: null\n },\n /**\n * Make the contenteditable looks like a textarea or not.\n * Default looks like a single-line input.\n * This also handle the default enter/shift+enter behaviour.\n * if multiline, enter = newline; otherwise enter = submit\n * shift+enter always add a new line. ctrl+enter always submits\n */\n multiline: {\n type: Boolean,\n default: false\n },\n /**\n * Is the content editable ?\n */\n contenteditable: {\n type: Boolean,\n default: true\n },\n /**\n * Disable the editing and show specific disabled design\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Max allowed length\n */\n maxlength: {\n type: Number,\n default: null\n },\n /**\n * Enable or disable emoji autocompletion\n */\n emojiAutocomplete: {\n type: Boolean,\n default: true\n },\n /**\n * Enable or disable link autocompletion\n */\n linkAutocomplete: {\n type: Boolean,\n default: true\n },\n /**\n * CSS class to apply to the root element.\n */\n class: {\n type: [String, Array, Object],\n default: \"\"\n }\n },\n emits: [\n \"paste\",\n \"update:modelValue\",\n \"smartPickerSubmit\",\n \"submit\"\n ],\n setup() {\n const segmenter = new Intl.Segmenter();\n if (isPlaintextOnlySupported === null) {\n try {\n document.createElement(\"div\").contentEditable = \"plaintext-only\";\n isPlaintextOnlySupported = true;\n } catch (error) {\n logger.debug(\"[NcRichContenteditable] Unsupported attribute value:\", { error });\n isPlaintextOnlySupported = false;\n }\n }\n return {\n // Constants\n labelId: createElementId(),\n tributeId: createElementId(),\n segmenter,\n /**\n * Non-reactive property to store Tribute instance\n *\n * @type {import('tributejs').default | null}\n */\n tribute: null,\n tributeStyleMutationObserver: null\n };\n },\n data() {\n return {\n // Represent the raw untrimmed text of the contenteditable\n // serves no other purpose than to check whether the\n // content is empty or not\n localValue: this.modelValue,\n // Is in text composition session in IME\n isComposing: false,\n // Tribute autocomplete\n isAutocompleteOpen: false,\n autocompleteActiveId: void 0,\n isTributeIntegrationDone: false\n };\n },\n computed: {\n /**\n * Is the current trimmed value empty?\n *\n * @return {boolean}\n */\n isEmptyValue() {\n return !this.localValue || this.localValue.trim() === \"\";\n },\n /**\n * Is the current value over maxlength?\n *\n * @return {boolean}\n */\n isOverMaxlength() {\n if (this.isEmptyValue || !this.maxlength) {\n return false;\n }\n const length = [...this.segmenter.segment(this.localValue)].length;\n return length > this.maxlength;\n },\n /**\n * Tooltip to show if characters count is over limit\n *\n * @return {string}\n */\n tooltipString() {\n if (!this.isOverMaxlength) {\n return null;\n }\n return n(\"Message limit of %n character reached\", \"Message limit of %n characters reached\", this.maxlength);\n },\n /**\n * Edit is only allowed when contenteditable is:\n * 'true' (all browsers since 2015)\n * 'plaintext-only' (most browsers since 2015, Firefox since 136+)\n *\n * @return {string}\n */\n contenteditableAttributeValue() {\n if (this.contenteditable && !this.disabled) {\n return isPlaintextOnlySupported ? \"plaintext-only\" : \"true\";\n }\n return \"false\";\n },\n /**\n * Compute debounce function for the autocomplete function\n */\n debouncedAutoComplete() {\n return debounce(async (search, callback) => {\n this.autoComplete(search, callback);\n }, 100);\n }\n },\n watch: {\n /**\n * If the parent value change, we compare the plain text rendering\n * If it's different, we render everything and update the main content\n */\n modelValue() {\n const html = this.$refs.contenteditable.innerHTML;\n if (this.modelValue.trim() !== this.parseContent(html).trim()) {\n this.updateContent(this.modelValue);\n }\n }\n },\n mounted() {\n this.initializeTribute();\n this.updateContent(this.modelValue);\n },\n beforeUnmount() {\n if (this.tribute) {\n this.tribute.detach(this.$refs.contenteditable);\n }\n if (this.tributeStyleMutationObserver) {\n this.tributeStyleMutationObserver.disconnect();\n }\n },\n methods: {\n /**\n * Focus the richContenteditable\n *\n * @public\n */\n focus() {\n this.$refs.contenteditable.focus();\n },\n initializeTribute() {\n const renderMenuItem = (content) => `
    ${content}
    `;\n const tributesCollection = [];\n tributesCollection.push({\n fillAttr: \"id\",\n // Search against id and label (display name) (fallback to title for v8.0.0..8.6.1 compatibility)\n lookup: (result) => `${result.id} ${result.label ?? result.title}`,\n requireLeadingSpace: true,\n // Popup mention autocompletion templates\n menuItemTemplate: (item) => renderMenuItem(this.renderComponentHtml(item.original, NcAutoCompleteResult)),\n // Hide if no results\n noMatchTemplate: () => '',\n // Inner display of mentions\n selectTemplate: (item) => this.genSelectTemplate(item?.original?.id),\n // Autocompletion results\n values: this.debouncedAutoComplete,\n // Class added to the menu container\n containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-autocomplete\"]}`,\n // Class added to each list item\n itemClass: this.$style[\"tribute-container__item\"]\n });\n if (this.emojiAutocomplete) {\n tributesCollection.push({\n trigger: \":\",\n // Don't use the tribute search function at all\n // We pass search results as values (see below)\n lookup: (result, query) => query,\n requireLeadingSpace: true,\n // Popup mention autocompletion templates\n menuItemTemplate: (item) => {\n if (textSmiles.includes(item.original)) {\n return item.original;\n }\n return renderMenuItem(`${item.original.native} :${item.original.short_name}`);\n },\n // Hide if no results\n noMatchTemplate: () => t(\"No emoji found\"),\n // Display raw emoji along with its name\n selectTemplate: (item) => {\n if (textSmiles.includes(item.original)) {\n return item.original;\n }\n emojiAddRecent(item.original);\n return item.original.native;\n },\n // Pass the search results as values\n values: (text, cb) => {\n const emojiResults = emojiSearch(text);\n if (textSmiles.includes(\":\" + text)) {\n emojiResults.unshift(\":\" + text);\n }\n cb(emojiResults);\n },\n // Class added to the menu container\n containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-emoji\"]}`,\n // Class added to each list item\n itemClass: this.$style[\"tribute-container__item\"]\n });\n }\n if (this.linkAutocomplete) {\n tributesCollection.push({\n trigger: \"/\",\n // Don't use the tribute search function at all\n // We pass search results as values (see below)\n lookup: (result, query) => query,\n requireLeadingSpace: true,\n // Popup mention autocompletion templates\n menuItemTemplate: (item) => renderMenuItem(` ${item.original.title}`),\n // Hide if no results\n noMatchTemplate: () => t(\"No link provider found\"),\n selectTemplate: this.getLink,\n // Pass the search results as values\n values: (text, cb) => cb(searchProvider(text)),\n // Class added to the menu container\n containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-link\"]}`,\n // Class added to each list item\n itemClass: this.$style[\"tribute-container__item\"]\n });\n }\n const menuContainer = typeof this.menuContainer === \"string\" ? document.querySelector(this.menuContainer) : this.menuContainer;\n this.tribute = new Tribute({\n collection: tributesCollection,\n // FIXME: tributejs doesn't support allowSpaces as a collection option, only as a global one\n // Requires to fork a library to allow spaces only in the middle of mentions ('@' trigger)\n allowSpaces: false,\n // Where to inject the menu popup\n menuContainer\n });\n this.tribute.attach(this.$refs.contenteditable);\n this.$refs.contenteditable.contentEditable = this.contenteditableAttributeValue;\n },\n getLink(item) {\n getLinkWithPicker(item.original.id).then((result) => {\n const tmpElem = document.getElementById(\"tmp-smart-picker-result-node\");\n const eventData = {\n result,\n insertText: true\n };\n this.$emit(\"smartPickerSubmit\", eventData);\n if (eventData.insertText) {\n const newElem = document.createTextNode(result);\n tmpElem.replaceWith(newElem);\n this.setCursorAfter(newElem);\n this.updateValue(this.$refs.contenteditable.innerHTML);\n } else {\n tmpElem.remove();\n }\n }).catch((error) => {\n logger.debug(\"[NcRichContenteditable] Smart picker promise rejected:\", { error });\n const tmpElem = document.getElementById(\"tmp-smart-picker-result-node\");\n this.setCursorAfter(tmpElem);\n tmpElem.remove();\n });\n return '';\n },\n setCursorAfter(element) {\n const range = document.createRange();\n range.setEndAfter(element);\n range.collapse();\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n },\n moveCursorToEnd() {\n if (!document.createRange) {\n return;\n }\n if (window.getSelection().rangeCount > 0 && this.$refs.contenteditable.contains(window.getSelection().getRangeAt(0).commonAncestorContainer)) {\n return;\n }\n const range = document.createRange();\n range.selectNodeContents(this.$refs.contenteditable);\n range.collapse(false);\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n },\n /**\n * Re-emit the input event to the parent\n *\n * @param {Event} event the input event\n */\n onInput(event) {\n this.updateValue(event.target.innerHTML);\n },\n /**\n * When pasting, sanitize the content, extract text\n * and render it again\n *\n * @param {Event} event the paste event\n * @fires Event paste the original paste event\n */\n onPaste(event) {\n if (!this.contenteditable || this.disabled) {\n return;\n }\n if (isPlaintextOnlySupported) {\n this.$emit(\"paste\", event);\n } else {\n event.preventDefault();\n const clipboardData = event.clipboardData;\n this.$emit(\"paste\", event);\n if (clipboardData.files.length !== 0 || !Object.values(clipboardData.items).find((item) => item?.type.startsWith(\"text\"))) {\n return;\n }\n const text = clipboardData.getData(\"text\");\n const selection = window.getSelection();\n const range = selection.getRangeAt(0);\n range.deleteContents();\n range.insertNode(document.createTextNode(text));\n range.collapse(false);\n }\n this.updateValue(this.$refs.contenteditable.innerHTML);\n },\n /**\n * Update the value text from the provided html\n *\n * @param {string} htmlOrText the html content (or raw text with @mentions)\n */\n updateValue(htmlOrText) {\n const text = this.parseContent(htmlOrText).replace(/^\\n$/, \"\");\n this.localValue = text;\n this.$emit(\"update:modelValue\", text);\n },\n /**\n * Update content and local value\n *\n * @param {string} value the message value\n */\n updateContent(value) {\n const renderedContent = this.renderContent(value);\n this.$refs.contenteditable.innerHTML = renderedContent;\n this.localValue = value;\n },\n /**\n * Enter key pressed. Submits if not multiline\n *\n * @param {Event} event the keydown event\n */\n onEnter(event) {\n if (this.multiline || this.isOverMaxlength || this.tribute.isActive || this.isComposing) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.$emit(\"submit\", event);\n },\n /**\n * Ctrl + Enter key pressed is used to submit\n *\n * @param {Event} event the keydown event\n */\n onCtrlEnter(event) {\n if (this.isOverMaxlength) {\n return;\n }\n this.$emit(\"submit\", event);\n },\n onKeyUp(event) {\n event.stopImmediatePropagation();\n },\n onKeyEsc(event) {\n if (this.tribute && this.isAutocompleteOpen) {\n event.stopImmediatePropagation();\n this.tribute.hideMenu();\n }\n },\n /**\n * Get HTML element with Tribute.js container\n *\n * @return {HTMLElement}\n */\n getTributeContainer() {\n return this.tribute.menu;\n },\n /**\n * Get the currently selected item element id in Tribute.js container\n *\n * @return {HTMLElement}\n */\n getTributeSelectedItem() {\n return this.getTributeContainer().querySelector('.highlight [id^=\"nc-rich-contenteditable-tribute-item-\"]');\n },\n /**\n * Handle Tribute activation\n *\n * @param {boolean} isActive - is active\n */\n onTributeActive(isActive) {\n this.isAutocompleteOpen = isActive;\n if (isActive) {\n this.getTributeContainer().setAttribute(\"class\", this.tribute.current.collection.containerClass || this.$style[\"tribute-container\"]);\n this.setupTributeIntegration();\n document.removeEventListener(\"click\", this.hideTribute, true);\n } else {\n this.debouncedAutoComplete.clear();\n this.autocompleteActiveId = void 0;\n this.setTributeFocusVisible(false);\n }\n },\n onTributeArrowKeyDown() {\n if (!this.isAutocompleteOpen) {\n return;\n }\n this.setTributeFocusVisible(true);\n this.onTributeSelectedItemWillChange();\n },\n onTributeSelectedItemWillChange() {\n requestAnimationFrame(() => {\n this.autocompleteActiveId = this.getTributeSelectedItem()?.id;\n });\n },\n setupTributeIntegration() {\n if (this.isTributeIntegrationDone) {\n return;\n }\n this.isTributeIntegrationDone = true;\n const tributeContainer = this.getTributeContainer();\n tributeContainer.id = this.tributeId;\n tributeContainer.setAttribute(\"role\", \"listbox\");\n const ul = tributeContainer.children[0];\n ul.setAttribute(\"role\", \"presentation\");\n this.tributeStyleMutationObserver = new MutationObserver(([{ target }]) => {\n if (target.style.display !== \"none\") {\n this.onTributeSelectedItemWillChange();\n }\n }).observe(tributeContainer, {\n attributes: true,\n attributeFilter: [\"style\"]\n });\n tributeContainer.addEventListener(\"mousemove\", () => {\n this.setTributeFocusVisible(false);\n this.onTributeSelectedItemWillChange();\n }, { passive: true });\n },\n /**\n * Set tribute-container--focus-visible class on the Tribute container when the user navigates the listbox via keyboard.\n *\n * Because the real focus is kept on the textbox, we cannot use the :focus-visible pseudo-class\n * to style selected options in the autocomplete listbox.\n *\n * @param {boolean} withFocusVisible - should the focus-visible class be added\n */\n setTributeFocusVisible(withFocusVisible) {\n if (withFocusVisible) {\n this.getTributeContainer().classList.add(this.$style[\"tribute-container--focus-visible\"]);\n } else {\n this.getTributeContainer().classList.remove(this.$style[\"tribute-container--focus-visible\"]);\n }\n },\n /**\n * Show tribute menu programmatically.\n *\n * @param {string} trigger - trigger character, can be '/', '@', or ':'\n *\n * @public\n */\n showTribute(trigger) {\n this.focus();\n const index = this.tribute.collection.findIndex((collection) => collection.trigger === trigger);\n this.tribute.showMenuForCollection(this.$refs.contenteditable, index);\n this.updateValue(this.$refs.contenteditable.innerHTML);\n document.addEventListener(\"click\", this.hideTribute, true);\n },\n /**\n * Hide tribute menu programmatically\n *\n */\n hideTribute() {\n this.tribute.hideMenu();\n document.removeEventListener(\"click\", this.hideTribute, true);\n }\n }\n};\nconst _hoisted_1 = [\"id\", \"contenteditable\", \"aria-labelledby\", \"aria-placeholder\", \"aria-controls\", \"aria-expanded\", \"aria-activedescendant\", \"title\"];\nconst _hoisted_2 = [\"id\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"rich-contenteditable\", _ctx.$props.class])\n }, [\n createElementVNode(\"div\", mergeProps({\n id: $props.id,\n ref: \"contenteditable\",\n class: [{\n \"rich-contenteditable__input--empty\": $options.isEmptyValue,\n \"rich-contenteditable__input--multiline\": $props.multiline,\n \"rich-contenteditable__input--has-label\": $props.label,\n \"rich-contenteditable__input--overflow\": $options.isOverMaxlength,\n \"rich-contenteditable__input--disabled\": $props.disabled\n }, \"rich-contenteditable__input\"],\n contenteditable: $options.contenteditableAttributeValue,\n \"aria-labelledby\": $props.label ? $setup.labelId : void 0,\n \"aria-placeholder\": $props.placeholder,\n \"aria-multiline\": \"true\",\n role: \"textbox\",\n \"aria-haspopup\": \"listbox\",\n \"aria-autocomplete\": \"inline\",\n \"aria-controls\": $setup.tributeId,\n \"aria-expanded\": $data.isAutocompleteOpen ? \"true\" : \"false\",\n \"aria-activedescendant\": $data.autocompleteActiveId,\n title: $options.tooltipString\n }, _ctx.$attrs, {\n onFocus: _cache[0] || (_cache[0] = (...args) => $options.moveCursorToEnd && $options.moveCursorToEnd(...args)),\n onInput: _cache[1] || (_cache[1] = (...args) => $options.onInput && $options.onInput(...args)),\n onCompositionstart: _cache[2] || (_cache[2] = ($event) => $data.isComposing = true),\n onCompositionend: _cache[3] || (_cache[3] = ($event) => $data.isComposing = false),\n onKeydownCapture: _cache[4] || (_cache[4] = withKeys((...args) => $options.onKeyEsc && $options.onKeyEsc(...args), [\"esc\"])),\n onKeydown: [\n _cache[5] || (_cache[5] = withKeys(withModifiers((...args) => $options.onEnter && $options.onEnter(...args), [\"exact\"]), [\"enter\"])),\n _cache[6] || (_cache[6] = withKeys(withModifiers((...args) => $options.onCtrlEnter && $options.onCtrlEnter(...args), [\"ctrl\", \"exact\", \"stop\", \"prevent\"]), [\"enter\"])),\n _cache[9] || (_cache[9] = withKeys(withModifiers((...args) => $options.onTributeArrowKeyDown && $options.onTributeArrowKeyDown(...args), [\"exact\", \"stop\"]), [\"up\"])),\n _cache[10] || (_cache[10] = withKeys(withModifiers((...args) => $options.onTributeArrowKeyDown && $options.onTributeArrowKeyDown(...args), [\"exact\", \"stop\"]), [\"down\"]))\n ],\n onPaste: _cache[7] || (_cache[7] = (...args) => $options.onPaste && $options.onPaste(...args)),\n onKeyupCapture: _cache[8] || (_cache[8] = withModifiers((...args) => $options.onKeyUp && $options.onKeyUp(...args), [\"stop\", \"prevent\"])),\n onTributeActiveTrue: _cache[11] || (_cache[11] = ($event) => $options.onTributeActive(true)),\n onTributeActiveFalse: _cache[12] || (_cache[12] = ($event) => $options.onTributeActive(false))\n }), null, 16, _hoisted_1),\n $props.label ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n id: $setup.labelId,\n class: \"rich-contenteditable__label\"\n }, toDisplayString($props.label), 9, _hoisted_2)) : createCommentVNode(\"\", true)\n ], 2);\n}\nconst cssModules = {\n \"$style\": style1\n};\nconst NcRichContenteditable = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__cssModules\", cssModules], [\"__scopeId\", \"data-v-9234d45e\"]]);\nexport {\n NcAutoCompleteResult as N,\n NcMentionBubble as a,\n NcRichContenteditable as b\n};\n//# sourceMappingURL=NcRichContenteditable-BwGkxhDF.mjs.map\n","import { r as register, j as t0, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { N as NcEllipsisedOption } from \"./NcEllipsisedOption-D6Amb91K.mjs\";\nimport { N as NcSelect } from \"./NcSelect-BOFzoCwK.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { generateRemoteUrl } from \"@nextcloud/router\";\nimport { resolveComponent, openBlock, createBlock, mergeProps, createSlots, withCtx, createVNode, renderList, renderSlot, normalizeProps, guardReactiveProps } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t0);\nfunction xmlToJson(xml) {\n let obj = {};\n if (xml.nodeType === 1) {\n if (xml.attributes.length > 0) {\n obj[\"@attributes\"] = {};\n for (let j = 0; j < xml.attributes.length; j++) {\n const attribute = xml.attributes.item(j);\n obj[\"@attributes\"][attribute.nodeName] = attribute.nodeValue;\n }\n }\n } else if (xml.nodeType === 3) {\n obj = xml.nodeValue;\n }\n if (xml.hasChildNodes()) {\n for (let i = 0; i < xml.childNodes.length; i++) {\n const item = xml.childNodes.item(i);\n const nodeName = item.nodeName;\n if (typeof obj[nodeName] === \"undefined\") {\n obj[nodeName] = xmlToJson(item);\n } else {\n if (typeof obj[nodeName].push === \"undefined\") {\n const old = obj[nodeName];\n obj[nodeName] = [];\n obj[nodeName].push(old);\n }\n obj[nodeName].push(xmlToJson(item));\n }\n }\n }\n return obj;\n}\nfunction parseXml(xml) {\n let dom = null;\n try {\n dom = new DOMParser().parseFromString(xml, \"text/xml\");\n } catch (error) {\n logger.error(\"[NcSelectTags] Failed to parse xml document\", { error });\n }\n return dom;\n}\nfunction xmlToTagList(xml) {\n const json = xmlToJson(parseXml(xml));\n const list = json[\"d:multistatus\"][\"d:response\"];\n const result = [];\n for (const index in list) {\n const tag = list[index][\"d:propstat\"];\n if (tag[\"d:status\"][\"#text\"] !== \"HTTP/1.1 200 OK\") {\n continue;\n }\n result.push({\n id: parseInt(tag[\"d:prop\"][\"oc:id\"][\"#text\"]),\n displayName: tag[\"d:prop\"][\"oc:display-name\"][\"#text\"],\n canAssign: tag[\"d:prop\"][\"oc:can-assign\"][\"#text\"] === \"true\",\n userAssignable: tag[\"d:prop\"][\"oc:user-assignable\"][\"#text\"] === \"true\",\n userVisible: tag[\"d:prop\"][\"oc:user-visible\"][\"#text\"] === \"true\"\n });\n }\n return result;\n}\nasync function searchTags() {\n if (window.NextcloudVueDocs) {\n return Promise.resolve(xmlToTagList(window.NextcloudVueDocs.tags));\n }\n const result = await axios({\n method: \"PROPFIND\",\n url: generateRemoteUrl(\"dav\") + \"/systemtags/\",\n data: `\n\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t\t`\n });\n return xmlToTagList(result.data);\n}\nconst _sfc_main = {\n name: \"NcSelectTags\",\n components: {\n NcEllipsisedOption,\n NcSelect\n },\n props: {\n // Add NcSelect prop defaults and populate $props\n ...NcSelect.props,\n /**\n * Enable automatic fetching of tags\n *\n * If `false`, available tags must be passed using the `options` prop\n */\n fetchTags: {\n type: Boolean,\n default: true\n },\n /**\n * Callback to generate the label text\n *\n * @see https://vue-select.org/api/props.html#getoptionlabel\n */\n getOptionLabel: {\n type: Function,\n default: (option) => {\n const { displayName, userVisible, userAssignable } = option;\n if (userVisible === false) {\n return t(\"{tag} (invisible)\", { tag: displayName });\n }\n if (userAssignable === false) {\n return t(\"{tag} (restricted)\", { tag: displayName });\n }\n return displayName;\n }\n },\n /**\n * Sets the maximum number of tags to display in the dropdown list\n *\n * Because of compatibility reasons only 5 tag entries are shown by\n * default\n */\n limit: {\n type: Number,\n default: 5\n },\n /**\n * Allow selection of multiple options\n *\n * This prop automatically sets the internal `closeOnSelect` prop to\n * its boolean opposite\n *\n * @see https://vue-select.org/api/props.html#multiple\n */\n multiple: {\n type: Boolean,\n default: true\n },\n /**\n * Callback to filter available options\n */\n optionsFilter: {\n type: Function,\n default: null\n },\n /**\n * Enable passing of `value` prop and emitted `input` events as-is\n * i.e. for usage with `v-model`\n *\n * If `true`, custom internal `value` and `input` handling is disabled\n */\n passthru: {\n type: Boolean,\n default: false\n },\n /**\n * Placeholder text\n *\n * @see https://vue-select.org/api/props.html#placeholder\n */\n placeholder: {\n type: String,\n default: t(\"Select a tag\")\n },\n /**\n * Currently selected value\n */\n modelValue: {\n type: [Number, Array, Object],\n default: null\n },\n /**\n * Any available prop\n *\n * @see https://vue-select.org/api/props.html\n */\n // Not an actual prop but needed to show in vue-styleguidist docs\n // eslint-disable-next-line\n \" \": {}\n },\n emits: [\n \"update:modelValue\",\n /**\n * All events from https://vue-select.org/api/events.html\n */\n // Not an actual event but needed to show in vue-styleguidist docs\n \" \"\n ],\n data() {\n return {\n search: \"\",\n availableTags: []\n };\n },\n computed: {\n availableOptions() {\n if (this.optionsFilter) {\n return this.tags.filter(this.optionsFilter);\n }\n return this.tags;\n },\n localValue() {\n if (this.passthru) {\n return this.modelValue;\n }\n if (this.tags.length === 0) {\n return [];\n }\n if (this.multiple) {\n return this.modelValue.filter((tag) => tag !== \"\").map((id) => this.tags.find((tag2) => tag2.id === id));\n } else {\n return this.tags.find((tag) => tag.id === this.modelValue);\n }\n },\n propsToForward() {\n const propsToForward = { ...this.$props };\n delete propsToForward.fetchTags;\n delete propsToForward.optionsFilter;\n delete propsToForward.passthru;\n return propsToForward;\n },\n tags() {\n if (!this.fetchTags) {\n return this.options;\n }\n return this.availableTags;\n }\n },\n async created() {\n if (!this.fetchTags) {\n return;\n }\n try {\n const result = await searchTags();\n this.availableTags = result;\n } catch (error) {\n logger.error(\"[NcSelectTags] Loading systemtags failed\", error);\n }\n },\n methods: {\n handleInput(value) {\n if (this.passthru) {\n this.$emit(\"update:modelValue\", value);\n return;\n }\n if (this.multiple) {\n this.$emit(\"update:modelValue\", value.map((element) => element.id));\n } else {\n if (value === null) {\n this.$emit(\"update:modelValue\", null);\n } else {\n this.$emit(\"update:modelValue\", value.id);\n }\n }\n }\n }\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcEllipsisedOption = resolveComponent(\"NcEllipsisedOption\");\n const _component_NcSelect = resolveComponent(\"NcSelect\");\n return openBlock(), createBlock(_component_NcSelect, mergeProps($options.propsToForward, {\n options: $options.availableOptions,\n closeOnSelect: !$props.multiple,\n modelValue: $options.localValue,\n onSearch: _cache[0] || (_cache[0] = ($event) => $data.search = $event),\n \"onUpdate:modelValue\": $options.handleInput\n }), createSlots({\n option: withCtx((option) => [\n createVNode(_component_NcEllipsisedOption, {\n name: $props.getOptionLabel(option),\n search: $data.search\n }, null, 8, [\"name\", \"search\"])\n ]),\n \"selected-option\": withCtx((selectedOption) => [\n createVNode(_component_NcEllipsisedOption, {\n name: $props.getOptionLabel(selectedOption),\n search: $data.search\n }, null, 8, [\"name\", \"search\"])\n ]),\n _: 2\n }, [\n renderList(_ctx.$slots, (_, name) => {\n return {\n name,\n fn: withCtx((data) => [\n renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(data)))\n ])\n };\n })\n ]), 1040, [\"options\", \"closeOnSelect\", \"modelValue\", \"onUpdate:modelValue\"]);\n}\nconst NcSelectTags = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport {\n NcSelectTags as N\n};\n//# sourceMappingURL=NcSelectTags-D7qWNjXa.mjs.map\n","import '../assets/NcSettingsSelectGroup-D_fSrafm.css';\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport debounce from \"debounce\";\nimport { N as NcSelect } from \"./NcSelect-BOFzoCwK.mjs\";\nimport { r as register, i as t50, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, toDisplayString, createCommentVNode, createVNode, withDirectives, createElementVNode, vShow } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t50);\nconst _sfc_main = {\n name: \"NcSettingsSelectGroup\",\n components: {\n NcSelect\n },\n props: {\n /**\n * The text of the label element of the select group input\n */\n label: {\n type: String,\n required: true\n },\n /**\n * Placeholder for the input element\n * For backwards compatibility it falls back to the `label` value\n */\n placeholder: {\n type: String,\n default: \"\"\n },\n /**\n * id attribute of the select group element\n */\n id: {\n type: String,\n default: () => \"action-\" + createElementId(),\n validator: (id) => id.trim() !== \"\"\n },\n /**\n * value of the select group input\n * A list of group IDs can be provided\n */\n modelValue: {\n type: Array,\n default: () => []\n },\n /**\n * disabled state of the settings select group input\n */\n disabled: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"error\",\n \"input\",\n \"update:modelValue\"\n ],\n data() {\n return {\n /** Temporary store to cache groups */\n groups: {},\n randId: createElementId(),\n errorMessage: \"\"\n };\n },\n computed: {\n /**\n * If the error message should be shown\n */\n hasError() {\n return this.errorMessage !== \"\";\n },\n /**\n * Validate input value and only return valid strings (group IDs)\n *\n * @return {string[]}\n */\n filteredValue() {\n return this.modelValue.filter((group) => group !== \"\" && typeof group === \"string\");\n },\n /**\n * value property converted to an array of group objects used as input for the NcSelect\n */\n inputValue() {\n return this.filteredValue.map((id) => {\n if (typeof this.groups[id] === \"undefined\") {\n return {\n id,\n displayname: id\n };\n }\n return this.groups[id];\n });\n },\n /**\n * Convert groups object to array of groups required for NcSelect.options\n * Filter out currently selected values\n *\n * @return {object[]}\n */\n groupsArray() {\n return Object.values(this.groups).filter((g) => !this.modelValue.includes(g.id));\n }\n },\n watch: {\n /**\n * If the value is changed, check that all groups are loaded so we show the correct display name\n */\n modelValue: {\n handler() {\n const loadedGroupIds = Object.keys(this.groups);\n const missing = this.filteredValue.filter((group) => !loadedGroupIds.includes(group));\n missing.forEach((groupId) => {\n this.loadGroup(groupId);\n });\n },\n // Run the watch handler also when the component is initially mounted\n immediate: true\n }\n },\n /**\n * Load groups matching the empty query to reduce API calls\n */\n async mounted() {\n const storageName = `${appName}:${appVersion}/initialGroups`;\n let savedGroups = window.sessionStorage.getItem(storageName);\n if (savedGroups) {\n savedGroups = Object.fromEntries(JSON.parse(savedGroups).map((group) => [group.id, group]));\n this.groups = { ...this.groups, ...savedGroups };\n } else {\n await this.loadGroup(\"\");\n window.sessionStorage.setItem(storageName, JSON.stringify(Object.values(this.groups)));\n }\n },\n methods: {\n t,\n /**\n * Called when a new group is selected or previous group is deselected to emit the update event\n *\n * @param {object[]} updatedValue Array of selected groups\n */\n update(updatedValue) {\n const value = updatedValue.map((element) => element.id);\n this.$emit(\"update:modelValue\", value);\n },\n /**\n * Use provisioning API to search for given group and save it in the groups object\n *\n * @param {string} query The query like parts of the id oder display name\n * @return {boolean}\n */\n async loadGroup(query) {\n try {\n query = typeof query === \"string\" ? encodeURI(query) : \"\";\n const response = await axios.get(generateOcsUrl(`cloud/groups/details?search=${query}&limit=10`, 2));\n if (this.errorMessage !== \"\") {\n window.setTimeout(() => {\n this.errorMessage = \"\";\n }, 5e3);\n }\n if (Object.keys(response.data.ocs.data.groups).length > 0) {\n const newGroups = Object.fromEntries(response.data.ocs.data.groups.map((element) => [element.id, element]));\n this.groups = { ...this.groups, ...newGroups };\n return true;\n }\n } catch (error) {\n this.$emit(\"error\", error);\n this.errorMessage = t(\"Unable to search the group\");\n }\n return false;\n },\n /**\n * Custom filter function for `NcSelect` to filter by ID *and* display name\n *\n * @param {object} option One of the groups\n * @param {string} label The label property of the group\n * @param {string} search The current search string\n */\n filterGroups(option, label, search) {\n return `${label || \"\"} ${option.id}`.toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) > -1;\n },\n /**\n * Debounce the group search (reduce API calls)\n */\n onSearch: debounce(function(query) {\n this.loadGroup(query);\n }, 200)\n }\n};\nconst _hoisted_1 = [\"for\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcSelect = resolveComponent(\"NcSelect\");\n return openBlock(), createElementBlock(\"div\", null, [\n $props.label ? (openBlock(), createElementBlock(\"label\", {\n key: 0,\n for: $props.id,\n class: \"hidden-visually\"\n }, toDisplayString($props.label), 9, _hoisted_1)) : createCommentVNode(\"\", true),\n createVNode(_component_NcSelect, {\n modelValue: $options.inputValue,\n options: $options.groupsArray,\n placeholder: $props.placeholder || $props.label,\n filterBy: $options.filterGroups,\n inputId: $props.id,\n limit: 5,\n label: \"displayname\",\n multiple: true,\n closeOnSelect: false,\n disabled: $props.disabled,\n \"onUpdate:modelValue\": $options.update,\n onSearch: $options.onSearch\n }, null, 8, [\"modelValue\", \"options\", \"placeholder\", \"filterBy\", \"inputId\", \"disabled\", \"onUpdate:modelValue\", \"onSearch\"]),\n withDirectives(createElementVNode(\"div\", { class: \"select-group-error\" }, toDisplayString($data.errorMessage), 513), [\n [vShow, $options.hasError]\n ])\n ]);\n}\nconst NcSettingsSelectGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-f2b71592\"]]);\nexport {\n NcSettingsSelectGroup as N\n};\n//# sourceMappingURL=NcSettingsSelectGroup-TN64yH4k.mjs.map\n","import '../assets/NcTextArea-BxGe3Lqn.css';\nimport { defineComponent, useModel, useAttrs, useTemplateRef, computed, watch, openBlock, createElementBlock, normalizeClass, unref, createElementVNode, mergeProps, toDisplayString, createCommentVNode, createBlock, createTextVNode, mergeModels } from \"vue\";\nimport { d as mdiCheck, j as mdiAlertCircleOutline } from \"./mdi-CpchYUUV.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as isLegacy } from \"./legacy-BoqDmOCa.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = { class: \"textarea__main-wrapper\" };\nconst _hoisted_2 = [\"id\", \"aria-describedby\", \"disabled\", \"placeholder\", \"value\"];\nconst _hoisted_3 = [\"for\"];\nconst _hoisted_4 = [\"id\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...{ inheritAttrs: false },\n __name: \"NcTextArea\",\n props: /* @__PURE__ */ mergeModels({\n disabled: { type: Boolean },\n error: { type: Boolean },\n helperText: { default: void 0 },\n id: { default: () => createElementId() },\n inputClass: { default: \"\" },\n label: { default: void 0 },\n labelOutside: { type: Boolean },\n placeholder: { default: void 0 },\n resize: { default: \"both\" },\n success: { type: Boolean }\n }, {\n \"modelValue\": { required: true },\n \"modelModifiers\": {}\n }),\n emits: [\"update:modelValue\"],\n setup(__props, { expose: __expose }) {\n const modelValue = useModel(__props, \"modelValue\");\n const props = __props;\n __expose({\n focus,\n select\n });\n const attrs = useAttrs();\n const textAreaElement = useTemplateRef(\"input\");\n const internalPlaceholder = computed(() => props.placeholder || (isLegacy ? props.label : void 0));\n watch(() => props.labelOutside, () => {\n if (!props.labelOutside && !props.label) {\n logger.warn(\"[NcTextArea] 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.\");\n }\n });\n const ariaDescribedby = computed(() => {\n const ariaDescribedby2 = [];\n if (props.helperText) {\n ariaDescribedby2.push(`${props.id}-helper-text`);\n }\n if (typeof attrs[\"aria-describedby\"] === \"string\") {\n ariaDescribedby2.push(attrs[\"aria-describedby\"]);\n }\n return ariaDescribedby2.join(\" \") || void 0;\n });\n function handleInput(event) {\n const { value } = event.target;\n modelValue.value = value;\n }\n function focus(options) {\n textAreaElement.value.focus(options);\n }\n function select() {\n textAreaElement.value.select();\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"textarea\", [\n _ctx.$attrs.class,\n {\n \"textarea--disabled\": __props.disabled,\n \"textarea--legacy\": unref(isLegacy)\n }\n ]])\n }, [\n createElementVNode(\"div\", _hoisted_1, [\n createElementVNode(\"textarea\", mergeProps({ ..._ctx.$attrs, class: void 0 }, {\n id: __props.id,\n ref: \"input\",\n \"aria-describedby\": ariaDescribedby.value,\n \"aria-live\": \"polite\",\n class: [\"textarea__input\", [\n __props.inputClass,\n {\n \"textarea__input--label-outside\": __props.labelOutside,\n \"textarea__input--legacy\": unref(isLegacy),\n \"textarea__input--success\": __props.success,\n \"textarea__input--error\": __props.error\n }\n ]],\n disabled: __props.disabled,\n placeholder: internalPlaceholder.value,\n style: { resize: __props.resize },\n value: modelValue.value,\n onInput: handleInput\n }), null, 16, _hoisted_2),\n !__props.labelOutside ? (openBlock(), createElementBlock(\"label\", {\n key: 0,\n class: \"textarea__label\",\n for: __props.id\n }, toDisplayString(__props.label), 9, _hoisted_3)) : createCommentVNode(\"\", true)\n ]),\n __props.helperText ? (openBlock(), createElementBlock(\"p\", {\n key: 0,\n id: `${__props.id}-helper-text`,\n class: normalizeClass([\"textarea__helper-text-message\", {\n \"textarea__helper-text-message--error\": __props.error,\n \"textarea__helper-text-message--success\": __props.success\n }])\n }, [\n __props.success ? (openBlock(), createBlock(NcIconSvgWrapper, {\n key: 0,\n class: \"textarea__helper-text-message__icon\",\n path: unref(mdiCheck),\n inline: \"\"\n }, null, 8, [\"path\"])) : __props.error ? (openBlock(), createBlock(NcIconSvgWrapper, {\n key: 1,\n class: \"textarea__helper-text-message__icon\",\n path: unref(mdiAlertCircleOutline),\n inline: \"\"\n }, null, 8, [\"path\"])) : createCommentVNode(\"\", true),\n createTextVNode(\" \" + toDisplayString(__props.helperText), 1)\n ], 10, _hoisted_4)) : createCommentVNode(\"\", true)\n ], 2);\n };\n }\n});\nconst NcTextArea = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-d327fb49\"]]);\nexport {\n NcTextArea as N\n};\n//# sourceMappingURL=NcTextArea-Dxzj4zdb.mjs.map\n","/**\n* @vue/compiler-core v3.5.22\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { isString, NOOP, isObject, extend, NO, isSymbol, PatchFlagNames, isArray, capitalize, camelize, EMPTY_OBJ, slotFlagsText, isOn, isBuiltInDirective, isReservedProp, toHandlerKey } from '@vue/shared';\nexport { generateCodeFrame } from '@vue/shared';\n\nconst FRAGMENT = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `Fragment` : ``);\nconst TELEPORT = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `Teleport` : ``);\nconst SUSPENSE = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `Suspense` : ``);\nconst KEEP_ALIVE = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `KeepAlive` : ``);\nconst BASE_TRANSITION = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `BaseTransition` : ``\n);\nconst OPEN_BLOCK = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `openBlock` : ``);\nconst CREATE_BLOCK = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `createBlock` : ``);\nconst CREATE_ELEMENT_BLOCK = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createElementBlock` : ``\n);\nconst CREATE_VNODE = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `createVNode` : ``);\nconst CREATE_ELEMENT_VNODE = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createElementVNode` : ``\n);\nconst CREATE_COMMENT = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createCommentVNode` : ``\n);\nconst CREATE_TEXT = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createTextVNode` : ``\n);\nconst CREATE_STATIC = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `createStaticVNode` : ``\n);\nconst RESOLVE_COMPONENT = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `resolveComponent` : ``\n);\nconst RESOLVE_DYNAMIC_COMPONENT = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `resolveDynamicComponent` : ``\n);\nconst RESOLVE_DIRECTIVE = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `resolveDirective` : ``\n);\nconst RESOLVE_FILTER = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `resolveFilter` : ``\n);\nconst WITH_DIRECTIVES = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `withDirectives` : ``\n);\nconst RENDER_LIST = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `renderList` : ``);\nconst RENDER_SLOT = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `renderSlot` : ``);\nconst CREATE_SLOTS = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `createSlots` : ``);\nconst TO_DISPLAY_STRING = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `toDisplayString` : ``\n);\nconst MERGE_PROPS = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `mergeProps` : ``);\nconst NORMALIZE_CLASS = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `normalizeClass` : ``\n);\nconst NORMALIZE_STYLE = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `normalizeStyle` : ``\n);\nconst NORMALIZE_PROPS = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `normalizeProps` : ``\n);\nconst GUARD_REACTIVE_PROPS = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `guardReactiveProps` : ``\n);\nconst TO_HANDLERS = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `toHandlers` : ``);\nconst CAMELIZE = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `camelize` : ``);\nconst CAPITALIZE = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `capitalize` : ``);\nconst TO_HANDLER_KEY = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `toHandlerKey` : ``\n);\nconst SET_BLOCK_TRACKING = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `setBlockTracking` : ``\n);\nconst PUSH_SCOPE_ID = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `pushScopeId` : ``);\nconst POP_SCOPE_ID = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `popScopeId` : ``);\nconst WITH_CTX = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `withCtx` : ``);\nconst UNREF = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `unref` : ``);\nconst IS_REF = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `isRef` : ``);\nconst WITH_MEMO = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `withMemo` : ``);\nconst IS_MEMO_SAME = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `isMemoSame` : ``);\nconst helperNameMap = {\n [FRAGMENT]: `Fragment`,\n [TELEPORT]: `Teleport`,\n [SUSPENSE]: `Suspense`,\n [KEEP_ALIVE]: `KeepAlive`,\n [BASE_TRANSITION]: `BaseTransition`,\n [OPEN_BLOCK]: `openBlock`,\n [CREATE_BLOCK]: `createBlock`,\n [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\n [CREATE_VNODE]: `createVNode`,\n [CREATE_ELEMENT_VNODE]: `createElementVNode`,\n [CREATE_COMMENT]: `createCommentVNode`,\n [CREATE_TEXT]: `createTextVNode`,\n [CREATE_STATIC]: `createStaticVNode`,\n [RESOLVE_COMPONENT]: `resolveComponent`,\n [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\n [RESOLVE_DIRECTIVE]: `resolveDirective`,\n [RESOLVE_FILTER]: `resolveFilter`,\n [WITH_DIRECTIVES]: `withDirectives`,\n [RENDER_LIST]: `renderList`,\n [RENDER_SLOT]: `renderSlot`,\n [CREATE_SLOTS]: `createSlots`,\n [TO_DISPLAY_STRING]: `toDisplayString`,\n [MERGE_PROPS]: `mergeProps`,\n [NORMALIZE_CLASS]: `normalizeClass`,\n [NORMALIZE_STYLE]: `normalizeStyle`,\n [NORMALIZE_PROPS]: `normalizeProps`,\n [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\n [TO_HANDLERS]: `toHandlers`,\n [CAMELIZE]: `camelize`,\n [CAPITALIZE]: `capitalize`,\n [TO_HANDLER_KEY]: `toHandlerKey`,\n [SET_BLOCK_TRACKING]: `setBlockTracking`,\n [PUSH_SCOPE_ID]: `pushScopeId`,\n [POP_SCOPE_ID]: `popScopeId`,\n [WITH_CTX]: `withCtx`,\n [UNREF]: `unref`,\n [IS_REF]: `isRef`,\n [WITH_MEMO]: `withMemo`,\n [IS_MEMO_SAME]: `isMemoSame`\n};\nfunction registerRuntimeHelpers(helpers) {\n Object.getOwnPropertySymbols(helpers).forEach((s) => {\n helperNameMap[s] = helpers[s];\n });\n}\n\nconst Namespaces = {\n \"HTML\": 0,\n \"0\": \"HTML\",\n \"SVG\": 1,\n \"1\": \"SVG\",\n \"MATH_ML\": 2,\n \"2\": \"MATH_ML\"\n};\nconst NodeTypes = {\n \"ROOT\": 0,\n \"0\": \"ROOT\",\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"TEXT\": 2,\n \"2\": \"TEXT\",\n \"COMMENT\": 3,\n \"3\": \"COMMENT\",\n \"SIMPLE_EXPRESSION\": 4,\n \"4\": \"SIMPLE_EXPRESSION\",\n \"INTERPOLATION\": 5,\n \"5\": \"INTERPOLATION\",\n \"ATTRIBUTE\": 6,\n \"6\": \"ATTRIBUTE\",\n \"DIRECTIVE\": 7,\n \"7\": \"DIRECTIVE\",\n \"COMPOUND_EXPRESSION\": 8,\n \"8\": \"COMPOUND_EXPRESSION\",\n \"IF\": 9,\n \"9\": \"IF\",\n \"IF_BRANCH\": 10,\n \"10\": \"IF_BRANCH\",\n \"FOR\": 11,\n \"11\": \"FOR\",\n \"TEXT_CALL\": 12,\n \"12\": \"TEXT_CALL\",\n \"VNODE_CALL\": 13,\n \"13\": \"VNODE_CALL\",\n \"JS_CALL_EXPRESSION\": 14,\n \"14\": \"JS_CALL_EXPRESSION\",\n \"JS_OBJECT_EXPRESSION\": 15,\n \"15\": \"JS_OBJECT_EXPRESSION\",\n \"JS_PROPERTY\": 16,\n \"16\": \"JS_PROPERTY\",\n \"JS_ARRAY_EXPRESSION\": 17,\n \"17\": \"JS_ARRAY_EXPRESSION\",\n \"JS_FUNCTION_EXPRESSION\": 18,\n \"18\": \"JS_FUNCTION_EXPRESSION\",\n \"JS_CONDITIONAL_EXPRESSION\": 19,\n \"19\": \"JS_CONDITIONAL_EXPRESSION\",\n \"JS_CACHE_EXPRESSION\": 20,\n \"20\": \"JS_CACHE_EXPRESSION\",\n \"JS_BLOCK_STATEMENT\": 21,\n \"21\": \"JS_BLOCK_STATEMENT\",\n \"JS_TEMPLATE_LITERAL\": 22,\n \"22\": \"JS_TEMPLATE_LITERAL\",\n \"JS_IF_STATEMENT\": 23,\n \"23\": \"JS_IF_STATEMENT\",\n \"JS_ASSIGNMENT_EXPRESSION\": 24,\n \"24\": \"JS_ASSIGNMENT_EXPRESSION\",\n \"JS_SEQUENCE_EXPRESSION\": 25,\n \"25\": \"JS_SEQUENCE_EXPRESSION\",\n \"JS_RETURN_STATEMENT\": 26,\n \"26\": \"JS_RETURN_STATEMENT\"\n};\nconst ElementTypes = {\n \"ELEMENT\": 0,\n \"0\": \"ELEMENT\",\n \"COMPONENT\": 1,\n \"1\": \"COMPONENT\",\n \"SLOT\": 2,\n \"2\": \"SLOT\",\n \"TEMPLATE\": 3,\n \"3\": \"TEMPLATE\"\n};\nconst ConstantTypes = {\n \"NOT_CONSTANT\": 0,\n \"0\": \"NOT_CONSTANT\",\n \"CAN_SKIP_PATCH\": 1,\n \"1\": \"CAN_SKIP_PATCH\",\n \"CAN_CACHE\": 2,\n \"2\": \"CAN_CACHE\",\n \"CAN_STRINGIFY\": 3,\n \"3\": \"CAN_STRINGIFY\"\n};\nconst locStub = {\n start: { line: 1, column: 1, offset: 0 },\n end: { line: 1, column: 1, offset: 0 },\n source: \"\"\n};\nfunction createRoot(children, source = \"\") {\n return {\n type: 0,\n source,\n children,\n helpers: /* @__PURE__ */ new Set(),\n components: [],\n directives: [],\n hoists: [],\n imports: [],\n cached: [],\n temps: 0,\n codegenNode: void 0,\n loc: locStub\n };\n}\nfunction createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\n if (context) {\n if (isBlock) {\n context.helper(OPEN_BLOCK);\n context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\n } else {\n context.helper(getVNodeHelper(context.inSSR, isComponent));\n }\n if (directives) {\n context.helper(WITH_DIRECTIVES);\n }\n }\n return {\n type: 13,\n tag,\n props,\n children,\n patchFlag,\n dynamicProps,\n directives,\n isBlock,\n disableTracking,\n isComponent,\n loc\n };\n}\nfunction createArrayExpression(elements, loc = locStub) {\n return {\n type: 17,\n loc,\n elements\n };\n}\nfunction createObjectExpression(properties, loc = locStub) {\n return {\n type: 15,\n loc,\n properties\n };\n}\nfunction createObjectProperty(key, value) {\n return {\n type: 16,\n loc: locStub,\n key: isString(key) ? createSimpleExpression(key, true) : key,\n value\n };\n}\nfunction createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0) {\n return {\n type: 4,\n loc,\n content,\n isStatic,\n constType: isStatic ? 3 : constType\n };\n}\nfunction createInterpolation(content, loc) {\n return {\n type: 5,\n loc,\n content: isString(content) ? createSimpleExpression(content, false, loc) : content\n };\n}\nfunction createCompoundExpression(children, loc = locStub) {\n return {\n type: 8,\n loc,\n children\n };\n}\nfunction createCallExpression(callee, args = [], loc = locStub) {\n return {\n type: 14,\n loc,\n callee,\n arguments: args\n };\n}\nfunction createFunctionExpression(params, returns = void 0, newline = false, isSlot = false, loc = locStub) {\n return {\n type: 18,\n params,\n returns,\n newline,\n isSlot,\n loc\n };\n}\nfunction createConditionalExpression(test, consequent, alternate, newline = true) {\n return {\n type: 19,\n test,\n consequent,\n alternate,\n newline,\n loc: locStub\n };\n}\nfunction createCacheExpression(index, value, needPauseTracking = false, inVOnce = false) {\n return {\n type: 20,\n index,\n value,\n needPauseTracking,\n inVOnce,\n needArraySpread: false,\n loc: locStub\n };\n}\nfunction createBlockStatement(body) {\n return {\n type: 21,\n body,\n loc: locStub\n };\n}\nfunction createTemplateLiteral(elements) {\n return {\n type: 22,\n elements,\n loc: locStub\n };\n}\nfunction createIfStatement(test, consequent, alternate) {\n return {\n type: 23,\n test,\n consequent,\n alternate,\n loc: locStub\n };\n}\nfunction createAssignmentExpression(left, right) {\n return {\n type: 24,\n left,\n right,\n loc: locStub\n };\n}\nfunction createSequenceExpression(expressions) {\n return {\n type: 25,\n expressions,\n loc: locStub\n };\n}\nfunction createReturnStatement(returns) {\n return {\n type: 26,\n returns,\n loc: locStub\n };\n}\nfunction getVNodeHelper(ssr, isComponent) {\n return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\n}\nfunction getVNodeBlockHelper(ssr, isComponent) {\n return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\n}\nfunction convertToBlock(node, { helper, removeHelper, inSSR }) {\n if (!node.isBlock) {\n node.isBlock = true;\n removeHelper(getVNodeHelper(inSSR, node.isComponent));\n helper(OPEN_BLOCK);\n helper(getVNodeBlockHelper(inSSR, node.isComponent));\n }\n}\n\nconst defaultDelimitersOpen = new Uint8Array([123, 123]);\nconst defaultDelimitersClose = new Uint8Array([125, 125]);\nfunction isTagStartChar(c) {\n return c >= 97 && c <= 122 || c >= 65 && c <= 90;\n}\nfunction isWhitespace(c) {\n return c === 32 || c === 10 || c === 9 || c === 12 || c === 13;\n}\nfunction isEndOfTagSection(c) {\n return c === 47 || c === 62 || isWhitespace(c);\n}\nfunction toCharCodes(str) {\n const ret = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n ret[i] = str.charCodeAt(i);\n }\n return ret;\n}\nconst Sequences = {\n Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),\n // CDATA[\n CdataEnd: new Uint8Array([93, 93, 62]),\n // ]]>\n CommentEnd: new Uint8Array([45, 45, 62]),\n // `-->`\n ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),\n // `<\\/script`\n StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),\n // `= 0; i--) {\n const newlineIndex = this.newlines[i];\n if (index > newlineIndex) {\n line = i + 2;\n column = index - newlineIndex;\n break;\n }\n }\n return {\n column,\n line,\n offset: index\n };\n }\n peek() {\n return this.buffer.charCodeAt(this.index + 1);\n }\n stateText(c) {\n if (c === 60) {\n if (this.index > this.sectionStart) {\n this.cbs.ontext(this.sectionStart, this.index);\n }\n this.state = 5;\n this.sectionStart = this.index;\n } else if (!this.inVPre && c === this.delimiterOpen[0]) {\n this.state = 2;\n this.delimiterIndex = 0;\n this.stateInterpolationOpen(c);\n }\n }\n stateInterpolationOpen(c) {\n if (c === this.delimiterOpen[this.delimiterIndex]) {\n if (this.delimiterIndex === this.delimiterOpen.length - 1) {\n const start = this.index + 1 - this.delimiterOpen.length;\n if (start > this.sectionStart) {\n this.cbs.ontext(this.sectionStart, start);\n }\n this.state = 3;\n this.sectionStart = start;\n } else {\n this.delimiterIndex++;\n }\n } else if (this.inRCDATA) {\n this.state = 32;\n this.stateInRCDATA(c);\n } else {\n this.state = 1;\n this.stateText(c);\n }\n }\n stateInterpolation(c) {\n if (c === this.delimiterClose[0]) {\n this.state = 4;\n this.delimiterIndex = 0;\n this.stateInterpolationClose(c);\n }\n }\n stateInterpolationClose(c) {\n if (c === this.delimiterClose[this.delimiterIndex]) {\n if (this.delimiterIndex === this.delimiterClose.length - 1) {\n this.cbs.oninterpolation(this.sectionStart, this.index + 1);\n if (this.inRCDATA) {\n this.state = 32;\n } else {\n this.state = 1;\n }\n this.sectionStart = this.index + 1;\n } else {\n this.delimiterIndex++;\n }\n } else {\n this.state = 3;\n this.stateInterpolation(c);\n }\n }\n stateSpecialStartSequence(c) {\n const isEnd = this.sequenceIndex === this.currentSequence.length;\n const isMatch = isEnd ? (\n // If we are at the end of the sequence, make sure the tag name has ended\n isEndOfTagSection(c)\n ) : (\n // Otherwise, do a case-insensitive comparison\n (c | 32) === this.currentSequence[this.sequenceIndex]\n );\n if (!isMatch) {\n this.inRCDATA = false;\n } else if (!isEnd) {\n this.sequenceIndex++;\n return;\n }\n this.sequenceIndex = 0;\n this.state = 6;\n this.stateInTagName(c);\n }\n /** Look for an end tag. For and <textarea>, also decode entities. */\n stateInRCDATA(c) {\n if (this.sequenceIndex === this.currentSequence.length) {\n if (c === 62 || isWhitespace(c)) {\n const endOfText = this.index - this.currentSequence.length;\n if (this.sectionStart < endOfText) {\n const actualIndex = this.index;\n this.index = endOfText;\n this.cbs.ontext(this.sectionStart, endOfText);\n this.index = actualIndex;\n }\n this.sectionStart = endOfText + 2;\n this.stateInClosingTagName(c);\n this.inRCDATA = false;\n return;\n }\n this.sequenceIndex = 0;\n }\n if ((c | 32) === this.currentSequence[this.sequenceIndex]) {\n this.sequenceIndex += 1;\n } else if (this.sequenceIndex === 0) {\n if (this.currentSequence === Sequences.TitleEnd || this.currentSequence === Sequences.TextareaEnd && !this.inSFCRoot) {\n if (!this.inVPre && c === this.delimiterOpen[0]) {\n this.state = 2;\n this.delimiterIndex = 0;\n this.stateInterpolationOpen(c);\n }\n } else if (this.fastForwardTo(60)) {\n this.sequenceIndex = 1;\n }\n } else {\n this.sequenceIndex = Number(c === 60);\n }\n }\n stateCDATASequence(c) {\n if (c === Sequences.Cdata[this.sequenceIndex]) {\n if (++this.sequenceIndex === Sequences.Cdata.length) {\n this.state = 28;\n this.currentSequence = Sequences.CdataEnd;\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n }\n } else {\n this.sequenceIndex = 0;\n this.state = 23;\n this.stateInDeclaration(c);\n }\n }\n /**\n * When we wait for one specific character, we can speed things up\n * by skipping through the buffer until we find it.\n *\n * @returns Whether the character was found.\n */\n fastForwardTo(c) {\n while (++this.index < this.buffer.length) {\n const cc = this.buffer.charCodeAt(this.index);\n if (cc === 10) {\n this.newlines.push(this.index);\n }\n if (cc === c) {\n return true;\n }\n }\n this.index = this.buffer.length - 1;\n return false;\n }\n /**\n * Comments and CDATA end with `-->` and `]]>`.\n *\n * Their common qualities are:\n * - Their end sequences have a distinct character they start with.\n * - That character is then repeated, so we have to check multiple repeats.\n * - All characters but the start character of the sequence can be skipped.\n */\n stateInCommentLike(c) {\n if (c === this.currentSequence[this.sequenceIndex]) {\n if (++this.sequenceIndex === this.currentSequence.length) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, this.index - 2);\n } else {\n this.cbs.oncomment(this.sectionStart, this.index - 2);\n }\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n this.state = 1;\n }\n } else if (this.sequenceIndex === 0) {\n if (this.fastForwardTo(this.currentSequence[0])) {\n this.sequenceIndex = 1;\n }\n } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n this.sequenceIndex = 0;\n }\n }\n startSpecial(sequence, offset) {\n this.enterRCDATA(sequence, offset);\n this.state = 31;\n }\n enterRCDATA(sequence, offset) {\n this.inRCDATA = true;\n this.currentSequence = sequence;\n this.sequenceIndex = offset;\n }\n stateBeforeTagName(c) {\n if (c === 33) {\n this.state = 22;\n this.sectionStart = this.index + 1;\n } else if (c === 63) {\n this.state = 24;\n this.sectionStart = this.index + 1;\n } else if (isTagStartChar(c)) {\n this.sectionStart = this.index;\n if (this.mode === 0) {\n this.state = 6;\n } else if (this.inSFCRoot) {\n this.state = 34;\n } else if (!this.inXML) {\n if (c === 116) {\n this.state = 30;\n } else {\n this.state = c === 115 ? 29 : 6;\n }\n } else {\n this.state = 6;\n }\n } else if (c === 47) {\n this.state = 8;\n } else {\n this.state = 1;\n this.stateText(c);\n }\n }\n stateInTagName(c) {\n if (isEndOfTagSection(c)) {\n this.handleTagName(c);\n }\n }\n stateInSFCRootTagName(c) {\n if (isEndOfTagSection(c)) {\n const tag = this.buffer.slice(this.sectionStart, this.index);\n if (tag !== \"template\") {\n this.enterRCDATA(toCharCodes(`</` + tag), 0);\n }\n this.handleTagName(c);\n }\n }\n handleTagName(c) {\n this.cbs.onopentagname(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = 11;\n this.stateBeforeAttrName(c);\n }\n stateBeforeClosingTagName(c) {\n if (isWhitespace(c)) ; else if (c === 62) {\n if (!!(process.env.NODE_ENV !== \"production\") || false) {\n this.cbs.onerr(14, this.index);\n }\n this.state = 1;\n this.sectionStart = this.index + 1;\n } else {\n this.state = isTagStartChar(c) ? 9 : 27;\n this.sectionStart = this.index;\n }\n }\n stateInClosingTagName(c) {\n if (c === 62 || isWhitespace(c)) {\n this.cbs.onclosetag(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = 10;\n this.stateAfterClosingTagName(c);\n }\n }\n stateAfterClosingTagName(c) {\n if (c === 62) {\n this.state = 1;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeAttrName(c) {\n if (c === 62) {\n this.cbs.onopentagend(this.index);\n if (this.inRCDATA) {\n this.state = 32;\n } else {\n this.state = 1;\n }\n this.sectionStart = this.index + 1;\n } else if (c === 47) {\n this.state = 7;\n if ((!!(process.env.NODE_ENV !== \"production\") || false) && this.peek() !== 62) {\n this.cbs.onerr(22, this.index);\n }\n } else if (c === 60 && this.peek() === 47) {\n this.cbs.onopentagend(this.index);\n this.state = 5;\n this.sectionStart = this.index;\n } else if (!isWhitespace(c)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || false) && c === 61) {\n this.cbs.onerr(\n 19,\n this.index\n );\n }\n this.handleAttrStart(c);\n }\n }\n handleAttrStart(c) {\n if (c === 118 && this.peek() === 45) {\n this.state = 13;\n this.sectionStart = this.index;\n } else if (c === 46 || c === 58 || c === 64 || c === 35) {\n this.cbs.ondirname(this.index, this.index + 1);\n this.state = 14;\n this.sectionStart = this.index + 1;\n } else {\n this.state = 12;\n this.sectionStart = this.index;\n }\n }\n stateInSelfClosingTag(c) {\n if (c === 62) {\n this.cbs.onselfclosingtag(this.index);\n this.state = 1;\n this.sectionStart = this.index + 1;\n this.inRCDATA = false;\n } else if (!isWhitespace(c)) {\n this.state = 11;\n this.stateBeforeAttrName(c);\n }\n }\n stateInAttrName(c) {\n if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.onattribname(this.sectionStart, this.index);\n this.handleAttrNameEnd(c);\n } else if ((!!(process.env.NODE_ENV !== \"production\") || false) && (c === 34 || c === 39 || c === 60)) {\n this.cbs.onerr(\n 17,\n this.index\n );\n }\n }\n stateInDirName(c) {\n if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.ondirname(this.sectionStart, this.index);\n this.handleAttrNameEnd(c);\n } else if (c === 58) {\n this.cbs.ondirname(this.sectionStart, this.index);\n this.state = 14;\n this.sectionStart = this.index + 1;\n } else if (c === 46) {\n this.cbs.ondirname(this.sectionStart, this.index);\n this.state = 16;\n this.sectionStart = this.index + 1;\n }\n }\n stateInDirArg(c) {\n if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.ondirarg(this.sectionStart, this.index);\n this.handleAttrNameEnd(c);\n } else if (c === 91) {\n this.state = 15;\n } else if (c === 46) {\n this.cbs.ondirarg(this.sectionStart, this.index);\n this.state = 16;\n this.sectionStart = this.index + 1;\n }\n }\n stateInDynamicDirArg(c) {\n if (c === 93) {\n this.state = 14;\n } else if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.ondirarg(this.sectionStart, this.index + 1);\n this.handleAttrNameEnd(c);\n if (!!(process.env.NODE_ENV !== \"production\") || false) {\n this.cbs.onerr(\n 27,\n this.index\n );\n }\n }\n }\n stateInDirModifier(c) {\n if (c === 61 || isEndOfTagSection(c)) {\n this.cbs.ondirmodifier(this.sectionStart, this.index);\n this.handleAttrNameEnd(c);\n } else if (c === 46) {\n this.cbs.ondirmodifier(this.sectionStart, this.index);\n this.sectionStart = this.index + 1;\n }\n }\n handleAttrNameEnd(c) {\n this.sectionStart = this.index;\n this.state = 17;\n this.cbs.onattribnameend(this.index);\n this.stateAfterAttrName(c);\n }\n stateAfterAttrName(c) {\n if (c === 61) {\n this.state = 18;\n } else if (c === 47 || c === 62) {\n this.cbs.onattribend(0, this.sectionStart);\n this.sectionStart = -1;\n this.state = 11;\n this.stateBeforeAttrName(c);\n } else if (!isWhitespace(c)) {\n this.cbs.onattribend(0, this.sectionStart);\n this.handleAttrStart(c);\n }\n }\n stateBeforeAttrValue(c) {\n if (c === 34) {\n this.state = 19;\n this.sectionStart = this.index + 1;\n } else if (c === 39) {\n this.state = 20;\n this.sectionStart = this.index + 1;\n } else if (!isWhitespace(c)) {\n this.sectionStart = this.index;\n this.state = 21;\n this.stateInAttrValueNoQuotes(c);\n }\n }\n handleInAttrValue(c, quote) {\n if (c === quote || this.fastForwardTo(quote)) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(\n quote === 34 ? 3 : 2,\n this.index + 1\n );\n this.state = 11;\n }\n }\n stateInAttrValueDoubleQuotes(c) {\n this.handleInAttrValue(c, 34);\n }\n stateInAttrValueSingleQuotes(c) {\n this.handleInAttrValue(c, 39);\n }\n stateInAttrValueNoQuotes(c) {\n if (isWhitespace(c) || c === 62) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(1, this.index);\n this.state = 11;\n this.stateBeforeAttrName(c);\n } else if ((!!(process.env.NODE_ENV !== \"production\") || false) && c === 34 || c === 39 || c === 60 || c === 61 || c === 96) {\n this.cbs.onerr(\n 18,\n this.index\n );\n } else ;\n }\n stateBeforeDeclaration(c) {\n if (c === 91) {\n this.state = 26;\n this.sequenceIndex = 0;\n } else {\n this.state = c === 45 ? 25 : 23;\n }\n }\n stateInDeclaration(c) {\n if (c === 62 || this.fastForwardTo(62)) {\n this.state = 1;\n this.sectionStart = this.index + 1;\n }\n }\n stateInProcessingInstruction(c) {\n if (c === 62 || this.fastForwardTo(62)) {\n this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n this.state = 1;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeComment(c) {\n if (c === 45) {\n this.state = 28;\n this.currentSequence = Sequences.CommentEnd;\n this.sequenceIndex = 2;\n this.sectionStart = this.index + 1;\n } else {\n this.state = 23;\n }\n }\n stateInSpecialComment(c) {\n if (c === 62 || this.fastForwardTo(62)) {\n this.cbs.oncomment(this.sectionStart, this.index);\n this.state = 1;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeSpecialS(c) {\n if (c === Sequences.ScriptEnd[3]) {\n this.startSpecial(Sequences.ScriptEnd, 4);\n } else if (c === Sequences.StyleEnd[3]) {\n this.startSpecial(Sequences.StyleEnd, 4);\n } else {\n this.state = 6;\n this.stateInTagName(c);\n }\n }\n stateBeforeSpecialT(c) {\n if (c === Sequences.TitleEnd[3]) {\n this.startSpecial(Sequences.TitleEnd, 4);\n } else if (c === Sequences.TextareaEnd[3]) {\n this.startSpecial(Sequences.TextareaEnd, 4);\n } else {\n this.state = 6;\n this.stateInTagName(c);\n }\n }\n startEntity() {\n }\n stateInEntity() {\n }\n /**\n * Iterates through the buffer, calling the function corresponding to the current state.\n *\n * States that are more likely to be hit are higher up, as a performance improvement.\n */\n parse(input) {\n this.buffer = input;\n while (this.index < this.buffer.length) {\n const c = this.buffer.charCodeAt(this.index);\n if (c === 10 && this.state !== 33) {\n this.newlines.push(this.index);\n }\n switch (this.state) {\n case 1: {\n this.stateText(c);\n break;\n }\n case 2: {\n this.stateInterpolationOpen(c);\n break;\n }\n case 3: {\n this.stateInterpolation(c);\n break;\n }\n case 4: {\n this.stateInterpolationClose(c);\n break;\n }\n case 31: {\n this.stateSpecialStartSequence(c);\n break;\n }\n case 32: {\n this.stateInRCDATA(c);\n break;\n }\n case 26: {\n this.stateCDATASequence(c);\n break;\n }\n case 19: {\n this.stateInAttrValueDoubleQuotes(c);\n break;\n }\n case 12: {\n this.stateInAttrName(c);\n break;\n }\n case 13: {\n this.stateInDirName(c);\n break;\n }\n case 14: {\n this.stateInDirArg(c);\n break;\n }\n case 15: {\n this.stateInDynamicDirArg(c);\n break;\n }\n case 16: {\n this.stateInDirModifier(c);\n break;\n }\n case 28: {\n this.stateInCommentLike(c);\n break;\n }\n case 27: {\n this.stateInSpecialComment(c);\n break;\n }\n case 11: {\n this.stateBeforeAttrName(c);\n break;\n }\n case 6: {\n this.stateInTagName(c);\n break;\n }\n case 34: {\n this.stateInSFCRootTagName(c);\n break;\n }\n case 9: {\n this.stateInClosingTagName(c);\n break;\n }\n case 5: {\n this.stateBeforeTagName(c);\n break;\n }\n case 17: {\n this.stateAfterAttrName(c);\n break;\n }\n case 20: {\n this.stateInAttrValueSingleQuotes(c);\n break;\n }\n case 18: {\n this.stateBeforeAttrValue(c);\n break;\n }\n case 8: {\n this.stateBeforeClosingTagName(c);\n break;\n }\n case 10: {\n this.stateAfterClosingTagName(c);\n break;\n }\n case 29: {\n this.stateBeforeSpecialS(c);\n break;\n }\n case 30: {\n this.stateBeforeSpecialT(c);\n break;\n }\n case 21: {\n this.stateInAttrValueNoQuotes(c);\n break;\n }\n case 7: {\n this.stateInSelfClosingTag(c);\n break;\n }\n case 23: {\n this.stateInDeclaration(c);\n break;\n }\n case 22: {\n this.stateBeforeDeclaration(c);\n break;\n }\n case 25: {\n this.stateBeforeComment(c);\n break;\n }\n case 24: {\n this.stateInProcessingInstruction(c);\n break;\n }\n case 33: {\n this.stateInEntity();\n break;\n }\n }\n this.index++;\n }\n this.cleanup();\n this.finish();\n }\n /**\n * Remove data that has already been consumed from the buffer.\n */\n cleanup() {\n if (this.sectionStart !== this.index) {\n if (this.state === 1 || this.state === 32 && this.sequenceIndex === 0) {\n this.cbs.ontext(this.sectionStart, this.index);\n this.sectionStart = this.index;\n } else if (this.state === 19 || this.state === 20 || this.state === 21) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n }\n }\n finish() {\n this.handleTrailingData();\n this.cbs.onend();\n }\n /** Handle any trailing data. */\n handleTrailingData() {\n const endIndex = this.buffer.length;\n if (this.sectionStart >= endIndex) {\n return;\n }\n if (this.state === 28) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, endIndex);\n } else {\n this.cbs.oncomment(this.sectionStart, endIndex);\n }\n } else if (this.state === 6 || this.state === 11 || this.state === 18 || this.state === 17 || this.state === 12 || this.state === 13 || this.state === 14 || this.state === 15 || this.state === 16 || this.state === 20 || this.state === 19 || this.state === 21 || this.state === 9) ; else {\n this.cbs.ontext(this.sectionStart, endIndex);\n }\n }\n emitCodePoint(cp, consumed) {\n }\n}\n\nconst CompilerDeprecationTypes = {\n \"COMPILER_IS_ON_ELEMENT\": \"COMPILER_IS_ON_ELEMENT\",\n \"COMPILER_V_BIND_SYNC\": \"COMPILER_V_BIND_SYNC\",\n \"COMPILER_V_BIND_OBJECT_ORDER\": \"COMPILER_V_BIND_OBJECT_ORDER\",\n \"COMPILER_V_ON_NATIVE\": \"COMPILER_V_ON_NATIVE\",\n \"COMPILER_V_IF_V_FOR_PRECEDENCE\": \"COMPILER_V_IF_V_FOR_PRECEDENCE\",\n \"COMPILER_NATIVE_TEMPLATE\": \"COMPILER_NATIVE_TEMPLATE\",\n \"COMPILER_INLINE_TEMPLATE\": \"COMPILER_INLINE_TEMPLATE\",\n \"COMPILER_FILTERS\": \"COMPILER_FILTERS\"\n};\nconst deprecationData = {\n [\"COMPILER_IS_ON_ELEMENT\"]: {\n message: `Platform-native elements with \"is\" prop will no longer be treated as components in Vue 3 unless the \"is\" value is explicitly prefixed with \"vue:\".`,\n link: `https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html`\n },\n [\"COMPILER_V_BIND_SYNC\"]: {\n message: (key) => `.sync modifier for v-bind has been removed. Use v-model with argument instead. \\`v-bind:${key}.sync\\` should be changed to \\`v-model:${key}\\`.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`\n },\n [\"COMPILER_V_BIND_OBJECT_ORDER\"]: {\n message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript object spread: it will now overwrite an existing non-mergeable attribute that appears before v-bind in the case of conflict. To retain 2.x behavior, move v-bind to make it the first attribute. You can also suppress this warning if the usage is intended.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/v-bind.html`\n },\n [\"COMPILER_V_ON_NATIVE\"]: {\n message: `.native modifier for v-on has been removed as is no longer necessary.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html`\n },\n [\"COMPILER_V_IF_V_FOR_PRECEDENCE\"]: {\n message: `v-if / v-for precedence when used on the same element has changed in Vue 3: v-if now takes higher precedence and will no longer have access to v-for scope variables. It is best to avoid the ambiguity with <template> tags or use a computed property that filters v-for data source.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html`\n },\n [\"COMPILER_NATIVE_TEMPLATE\"]: {\n message: `<template> with no special directives will render as a native template element instead of its inner content in Vue 3.`\n },\n [\"COMPILER_INLINE_TEMPLATE\"]: {\n message: `\"inline-template\" has been removed in Vue 3.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html`\n },\n [\"COMPILER_FILTERS\"]: {\n message: `filters have been removed in Vue 3. The \"|\" symbol will be treated as native JavaScript bitwise OR operator. Use method calls or computed properties instead.`,\n link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`\n }\n};\nfunction getCompatValue(key, { compatConfig }) {\n const value = compatConfig && compatConfig[key];\n if (key === \"MODE\") {\n return value || 3;\n } else {\n return value;\n }\n}\nfunction isCompatEnabled(key, context) {\n const mode = getCompatValue(\"MODE\", context);\n const value = getCompatValue(key, context);\n return mode === 3 ? value === true : value !== false;\n}\nfunction checkCompatEnabled(key, context, loc, ...args) {\n const enabled = isCompatEnabled(key, context);\n if (!!(process.env.NODE_ENV !== \"production\") && enabled) {\n warnDeprecation(key, context, loc, ...args);\n }\n return enabled;\n}\nfunction warnDeprecation(key, context, loc, ...args) {\n const val = getCompatValue(key, context);\n if (val === \"suppress-warning\") {\n return;\n }\n const { message, link } = deprecationData[key];\n const msg = `(deprecation ${key}) ${typeof message === \"function\" ? message(...args) : message}${link ? `\n Details: ${link}` : ``}`;\n const err = new SyntaxError(msg);\n err.code = key;\n if (loc) err.loc = loc;\n context.onWarn(err);\n}\n\nfunction defaultOnError(error) {\n throw error;\n}\nfunction defaultOnWarn(msg) {\n !!(process.env.NODE_ENV !== \"production\") && console.warn(`[Vue warn] ${msg.message}`);\n}\nfunction createCompilerError(code, loc, messages, additionalMessage) {\n const msg = !!(process.env.NODE_ENV !== \"production\") || false ? (messages || errorMessages)[code] + (additionalMessage || ``) : `https://vuejs.org/error-reference/#compiler-${code}`;\n const error = new SyntaxError(String(msg));\n error.code = code;\n error.loc = loc;\n return error;\n}\nconst ErrorCodes = {\n \"ABRUPT_CLOSING_OF_EMPTY_COMMENT\": 0,\n \"0\": \"ABRUPT_CLOSING_OF_EMPTY_COMMENT\",\n \"CDATA_IN_HTML_CONTENT\": 1,\n \"1\": \"CDATA_IN_HTML_CONTENT\",\n \"DUPLICATE_ATTRIBUTE\": 2,\n \"2\": \"DUPLICATE_ATTRIBUTE\",\n \"END_TAG_WITH_ATTRIBUTES\": 3,\n \"3\": \"END_TAG_WITH_ATTRIBUTES\",\n \"END_TAG_WITH_TRAILING_SOLIDUS\": 4,\n \"4\": \"END_TAG_WITH_TRAILING_SOLIDUS\",\n \"EOF_BEFORE_TAG_NAME\": 5,\n \"5\": \"EOF_BEFORE_TAG_NAME\",\n \"EOF_IN_CDATA\": 6,\n \"6\": \"EOF_IN_CDATA\",\n \"EOF_IN_COMMENT\": 7,\n \"7\": \"EOF_IN_COMMENT\",\n \"EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT\": 8,\n \"8\": \"EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT\",\n \"EOF_IN_TAG\": 9,\n \"9\": \"EOF_IN_TAG\",\n \"INCORRECTLY_CLOSED_COMMENT\": 10,\n \"10\": \"INCORRECTLY_CLOSED_COMMENT\",\n \"INCORRECTLY_OPENED_COMMENT\": 11,\n \"11\": \"INCORRECTLY_OPENED_COMMENT\",\n \"INVALID_FIRST_CHARACTER_OF_TAG_NAME\": 12,\n \"12\": \"INVALID_FIRST_CHARACTER_OF_TAG_NAME\",\n \"MISSING_ATTRIBUTE_VALUE\": 13,\n \"13\": \"MISSING_ATTRIBUTE_VALUE\",\n \"MISSING_END_TAG_NAME\": 14,\n \"14\": \"MISSING_END_TAG_NAME\",\n \"MISSING_WHITESPACE_BETWEEN_ATTRIBUTES\": 15,\n \"15\": \"MISSING_WHITESPACE_BETWEEN_ATTRIBUTES\",\n \"NESTED_COMMENT\": 16,\n \"16\": \"NESTED_COMMENT\",\n \"UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME\": 17,\n \"17\": \"UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME\",\n \"UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE\": 18,\n \"18\": \"UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE\",\n \"UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME\": 19,\n \"19\": \"UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME\",\n \"UNEXPECTED_NULL_CHARACTER\": 20,\n \"20\": \"UNEXPECTED_NULL_CHARACTER\",\n \"UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME\": 21,\n \"21\": \"UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME\",\n \"UNEXPECTED_SOLIDUS_IN_TAG\": 22,\n \"22\": \"UNEXPECTED_SOLIDUS_IN_TAG\",\n \"X_INVALID_END_TAG\": 23,\n \"23\": \"X_INVALID_END_TAG\",\n \"X_MISSING_END_TAG\": 24,\n \"24\": \"X_MISSING_END_TAG\",\n \"X_MISSING_INTERPOLATION_END\": 25,\n \"25\": \"X_MISSING_INTERPOLATION_END\",\n \"X_MISSING_DIRECTIVE_NAME\": 26,\n \"26\": \"X_MISSING_DIRECTIVE_NAME\",\n \"X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END\": 27,\n \"27\": \"X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END\",\n \"X_V_IF_NO_EXPRESSION\": 28,\n \"28\": \"X_V_IF_NO_EXPRESSION\",\n \"X_V_IF_SAME_KEY\": 29,\n \"29\": \"X_V_IF_SAME_KEY\",\n \"X_V_ELSE_NO_ADJACENT_IF\": 30,\n \"30\": \"X_V_ELSE_NO_ADJACENT_IF\",\n \"X_V_FOR_NO_EXPRESSION\": 31,\n \"31\": \"X_V_FOR_NO_EXPRESSION\",\n \"X_V_FOR_MALFORMED_EXPRESSION\": 32,\n \"32\": \"X_V_FOR_MALFORMED_EXPRESSION\",\n \"X_V_FOR_TEMPLATE_KEY_PLACEMENT\": 33,\n \"33\": \"X_V_FOR_TEMPLATE_KEY_PLACEMENT\",\n \"X_V_BIND_NO_EXPRESSION\": 34,\n \"34\": \"X_V_BIND_NO_EXPRESSION\",\n \"X_V_ON_NO_EXPRESSION\": 35,\n \"35\": \"X_V_ON_NO_EXPRESSION\",\n \"X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET\": 36,\n \"36\": \"X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET\",\n \"X_V_SLOT_MIXED_SLOT_USAGE\": 37,\n \"37\": \"X_V_SLOT_MIXED_SLOT_USAGE\",\n \"X_V_SLOT_DUPLICATE_SLOT_NAMES\": 38,\n \"38\": \"X_V_SLOT_DUPLICATE_SLOT_NAMES\",\n \"X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN\": 39,\n \"39\": \"X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN\",\n \"X_V_SLOT_MISPLACED\": 40,\n \"40\": \"X_V_SLOT_MISPLACED\",\n \"X_V_MODEL_NO_EXPRESSION\": 41,\n \"41\": \"X_V_MODEL_NO_EXPRESSION\",\n \"X_V_MODEL_MALFORMED_EXPRESSION\": 42,\n \"42\": \"X_V_MODEL_MALFORMED_EXPRESSION\",\n \"X_V_MODEL_ON_SCOPE_VARIABLE\": 43,\n \"43\": \"X_V_MODEL_ON_SCOPE_VARIABLE\",\n \"X_V_MODEL_ON_PROPS\": 44,\n \"44\": \"X_V_MODEL_ON_PROPS\",\n \"X_INVALID_EXPRESSION\": 45,\n \"45\": \"X_INVALID_EXPRESSION\",\n \"X_KEEP_ALIVE_INVALID_CHILDREN\": 46,\n \"46\": \"X_KEEP_ALIVE_INVALID_CHILDREN\",\n \"X_PREFIX_ID_NOT_SUPPORTED\": 47,\n \"47\": \"X_PREFIX_ID_NOT_SUPPORTED\",\n \"X_MODULE_MODE_NOT_SUPPORTED\": 48,\n \"48\": \"X_MODULE_MODE_NOT_SUPPORTED\",\n \"X_CACHE_HANDLER_NOT_SUPPORTED\": 49,\n \"49\": \"X_CACHE_HANDLER_NOT_SUPPORTED\",\n \"X_SCOPE_ID_NOT_SUPPORTED\": 50,\n \"50\": \"X_SCOPE_ID_NOT_SUPPORTED\",\n \"X_VNODE_HOOKS\": 51,\n \"51\": \"X_VNODE_HOOKS\",\n \"X_V_BIND_INVALID_SAME_NAME_ARGUMENT\": 52,\n \"52\": \"X_V_BIND_INVALID_SAME_NAME_ARGUMENT\",\n \"__EXTEND_POINT__\": 53,\n \"53\": \"__EXTEND_POINT__\"\n};\nconst errorMessages = {\n // parse errors\n [0]: \"Illegal comment.\",\n [1]: \"CDATA section is allowed only in XML context.\",\n [2]: \"Duplicate attribute.\",\n [3]: \"End tag cannot have attributes.\",\n [4]: \"Illegal '/' in tags.\",\n [5]: \"Unexpected EOF in tag.\",\n [6]: \"Unexpected EOF in CDATA section.\",\n [7]: \"Unexpected EOF in comment.\",\n [8]: \"Unexpected EOF in script.\",\n [9]: \"Unexpected EOF in tag.\",\n [10]: \"Incorrectly closed comment.\",\n [11]: \"Incorrectly opened comment.\",\n [12]: \"Illegal tag name. Use '<' to print '<'.\",\n [13]: \"Attribute value was expected.\",\n [14]: \"End tag name was expected.\",\n [15]: \"Whitespace was expected.\",\n [16]: \"Unexpected '<!--' in comment.\",\n [17]: `Attribute name cannot contain U+0022 (\"), U+0027 ('), and U+003C (<).`,\n [18]: \"Unquoted attribute value cannot contain U+0022 (\\\"), U+0027 ('), U+003C (<), U+003D (=), and U+0060 (`).\",\n [19]: \"Attribute name cannot start with '='.\",\n [21]: \"'<?' is allowed only in XML context.\",\n [20]: `Unexpected null character.`,\n [22]: \"Illegal '/' in tags.\",\n // Vue-specific parse errors\n [23]: \"Invalid end tag.\",\n [24]: \"Element is missing end tag.\",\n [25]: \"Interpolation end sign was not found.\",\n [27]: \"End bracket for dynamic directive argument was not found. Note that dynamic directive argument cannot contain spaces.\",\n [26]: \"Legal directive name was expected.\",\n // transform errors\n [28]: `v-if/v-else-if is missing expression.`,\n [29]: `v-if/else branches must use unique keys.`,\n [30]: `v-else/v-else-if has no adjacent v-if or v-else-if.`,\n [31]: `v-for is missing expression.`,\n [32]: `v-for has invalid expression.`,\n [33]: `<template v-for> key should be placed on the <template> tag.`,\n [34]: `v-bind is missing expression.`,\n [52]: `v-bind with same-name shorthand only allows static argument.`,\n [35]: `v-on is missing expression.`,\n [36]: `Unexpected custom directive on <slot> outlet.`,\n [37]: `Mixed v-slot usage on both the component and nested <template>. When there are multiple named slots, all slots should use <template> syntax to avoid scope ambiguity.`,\n [38]: `Duplicate slot names found. `,\n [39]: `Extraneous children found when component already has explicitly named default slot. These children will be ignored.`,\n [40]: `v-slot can only be used on components or <template> tags.`,\n [41]: `v-model is missing expression.`,\n [42]: `v-model value must be a valid JavaScript member expression.`,\n [43]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\n [44]: `v-model cannot be used on a prop, because local prop bindings are not writable.\nUse a v-bind binding combined with a v-on listener that emits update:x event instead.`,\n [45]: `Error parsing JavaScript expression: `,\n [46]: `<KeepAlive> expects exactly one child component.`,\n [51]: `@vnode-* hooks in templates are no longer supported. Use the vue: prefix instead. For example, @vnode-mounted should be changed to @vue:mounted. @vnode-* hooks support has been removed in 3.4.`,\n // generic errors\n [47]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\n [48]: `ES module mode is not supported in this build of compiler.`,\n [49]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\n [50]: `\"scopeId\" option is only supported in module mode.`,\n // just to fulfill types\n [53]: ``\n};\n\nfunction walkIdentifiers(root, onIdentifier, includeAll = false, parentStack = [], knownIds = /* @__PURE__ */ Object.create(null)) {\n {\n return;\n }\n}\nfunction isReferencedIdentifier(id, parent, parentStack) {\n {\n return false;\n }\n}\nfunction isInDestructureAssignment(parent, parentStack) {\n if (parent && (parent.type === \"ObjectProperty\" || parent.type === \"ArrayPattern\")) {\n let i = parentStack.length;\n while (i--) {\n const p = parentStack[i];\n if (p.type === \"AssignmentExpression\") {\n return true;\n } else if (p.type !== \"ObjectProperty\" && !p.type.endsWith(\"Pattern\")) {\n break;\n }\n }\n }\n return false;\n}\nfunction isInNewExpression(parentStack) {\n let i = parentStack.length;\n while (i--) {\n const p = parentStack[i];\n if (p.type === \"NewExpression\") {\n return true;\n } else if (p.type !== \"MemberExpression\") {\n break;\n }\n }\n return false;\n}\nfunction walkFunctionParams(node, onIdent) {\n for (const p of node.params) {\n for (const id of extractIdentifiers(p)) {\n onIdent(id);\n }\n }\n}\nfunction walkBlockDeclarations(block, onIdent) {\n const body = block.type === \"SwitchCase\" ? block.consequent : block.body;\n for (const stmt of body) {\n if (stmt.type === \"VariableDeclaration\") {\n if (stmt.declare) continue;\n for (const decl of stmt.declarations) {\n for (const id of extractIdentifiers(decl.id)) {\n onIdent(id);\n }\n }\n } else if (stmt.type === \"FunctionDeclaration\" || stmt.type === \"ClassDeclaration\") {\n if (stmt.declare || !stmt.id) continue;\n onIdent(stmt.id);\n } else if (isForStatement(stmt)) {\n walkForStatement(stmt, true, onIdent);\n } else if (stmt.type === \"SwitchStatement\") {\n walkSwitchStatement(stmt, true, onIdent);\n }\n }\n}\nfunction isForStatement(stmt) {\n return stmt.type === \"ForOfStatement\" || stmt.type === \"ForInStatement\" || stmt.type === \"ForStatement\";\n}\nfunction walkForStatement(stmt, isVar, onIdent) {\n const variable = stmt.type === \"ForStatement\" ? stmt.init : stmt.left;\n if (variable && variable.type === \"VariableDeclaration\" && (variable.kind === \"var\" ? isVar : !isVar)) {\n for (const decl of variable.declarations) {\n for (const id of extractIdentifiers(decl.id)) {\n onIdent(id);\n }\n }\n }\n}\nfunction walkSwitchStatement(stmt, isVar, onIdent) {\n for (const cs of stmt.cases) {\n for (const stmt2 of cs.consequent) {\n if (stmt2.type === \"VariableDeclaration\" && (stmt2.kind === \"var\" ? isVar : !isVar)) {\n for (const decl of stmt2.declarations) {\n for (const id of extractIdentifiers(decl.id)) {\n onIdent(id);\n }\n }\n }\n }\n walkBlockDeclarations(cs, onIdent);\n }\n}\nfunction extractIdentifiers(param, nodes = []) {\n switch (param.type) {\n case \"Identifier\":\n nodes.push(param);\n break;\n case \"MemberExpression\":\n let object = param;\n while (object.type === \"MemberExpression\") {\n object = object.object;\n }\n nodes.push(object);\n break;\n case \"ObjectPattern\":\n for (const prop of param.properties) {\n if (prop.type === \"RestElement\") {\n extractIdentifiers(prop.argument, nodes);\n } else {\n extractIdentifiers(prop.value, nodes);\n }\n }\n break;\n case \"ArrayPattern\":\n param.elements.forEach((element) => {\n if (element) extractIdentifiers(element, nodes);\n });\n break;\n case \"RestElement\":\n extractIdentifiers(param.argument, nodes);\n break;\n case \"AssignmentPattern\":\n extractIdentifiers(param.left, nodes);\n break;\n }\n return nodes;\n}\nconst isFunctionType = (node) => {\n return /Function(?:Expression|Declaration)$|Method$/.test(node.type);\n};\nconst isStaticProperty = (node) => node && (node.type === \"ObjectProperty\" || node.type === \"ObjectMethod\") && !node.computed;\nconst isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;\nconst TS_NODE_TYPES = [\n \"TSAsExpression\",\n // foo as number\n \"TSTypeAssertion\",\n // (<number>foo)\n \"TSNonNullExpression\",\n // foo!\n \"TSInstantiationExpression\",\n // foo<string>\n \"TSSatisfiesExpression\"\n // foo satisfies T\n];\nfunction unwrapTSNode(node) {\n if (TS_NODE_TYPES.includes(node.type)) {\n return unwrapTSNode(node.expression);\n } else {\n return node;\n }\n}\n\nconst isStaticExp = (p) => p.type === 4 && p.isStatic;\nfunction isCoreComponent(tag) {\n switch (tag) {\n case \"Teleport\":\n case \"teleport\":\n return TELEPORT;\n case \"Suspense\":\n case \"suspense\":\n return SUSPENSE;\n case \"KeepAlive\":\n case \"keep-alive\":\n return KEEP_ALIVE;\n case \"BaseTransition\":\n case \"base-transition\":\n return BASE_TRANSITION;\n }\n}\nconst nonIdentifierRE = /^$|^\\d|[^\\$\\w\\xA0-\\uFFFF]/;\nconst isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\nconst validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\nconst validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\nconst whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\nconst getExpSource = (exp) => exp.type === 4 ? exp.content : exp.loc.source;\nconst isMemberExpressionBrowser = (exp) => {\n const path = getExpSource(exp).trim().replace(whitespaceRE, (s) => s.trim());\n let state = 0 /* inMemberExp */;\n let stateStack = [];\n let currentOpenBracketCount = 0;\n let currentOpenParensCount = 0;\n let currentStringType = null;\n for (let i = 0; i < path.length; i++) {\n const char = path.charAt(i);\n switch (state) {\n case 0 /* inMemberExp */:\n if (char === \"[\") {\n stateStack.push(state);\n state = 1 /* inBrackets */;\n currentOpenBracketCount++;\n } else if (char === \"(\") {\n stateStack.push(state);\n state = 2 /* inParens */;\n currentOpenParensCount++;\n } else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\n return false;\n }\n break;\n case 1 /* inBrackets */:\n if (char === `'` || char === `\"` || char === \"`\") {\n stateStack.push(state);\n state = 3 /* inString */;\n currentStringType = char;\n } else if (char === `[`) {\n currentOpenBracketCount++;\n } else if (char === `]`) {\n if (!--currentOpenBracketCount) {\n state = stateStack.pop();\n }\n }\n break;\n case 2 /* inParens */:\n if (char === `'` || char === `\"` || char === \"`\") {\n stateStack.push(state);\n state = 3 /* inString */;\n currentStringType = char;\n } else if (char === `(`) {\n currentOpenParensCount++;\n } else if (char === `)`) {\n if (i === path.length - 1) {\n return false;\n }\n if (!--currentOpenParensCount) {\n state = stateStack.pop();\n }\n }\n break;\n case 3 /* inString */:\n if (char === currentStringType) {\n state = stateStack.pop();\n currentStringType = null;\n }\n break;\n }\n }\n return !currentOpenBracketCount && !currentOpenParensCount;\n};\nconst isMemberExpressionNode = NOOP ;\nconst isMemberExpression = isMemberExpressionBrowser ;\nconst fnExpRE = /^\\s*(?:async\\s*)?(?:\\([^)]*?\\)|[\\w$_]+)\\s*(?::[^=]+)?=>|^\\s*(?:async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/;\nconst isFnExpressionBrowser = (exp) => fnExpRE.test(getExpSource(exp));\nconst isFnExpressionNode = NOOP ;\nconst isFnExpression = isFnExpressionBrowser ;\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\n return advancePositionWithMutation(\n {\n offset: pos.offset,\n line: pos.line,\n column: pos.column\n },\n source,\n numberOfCharacters\n );\n}\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\n let linesCount = 0;\n let lastNewLinePos = -1;\n for (let i = 0; i < numberOfCharacters; i++) {\n if (source.charCodeAt(i) === 10) {\n linesCount++;\n lastNewLinePos = i;\n }\n }\n pos.offset += numberOfCharacters;\n pos.line += linesCount;\n pos.column = lastNewLinePos === -1 ? pos.column + numberOfCharacters : numberOfCharacters - lastNewLinePos;\n return pos;\n}\nfunction assert(condition, msg) {\n if (!condition) {\n throw new Error(msg || `unexpected compiler condition`);\n }\n}\nfunction findDir(node, name, allowEmpty = false) {\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 7 && (allowEmpty || p.exp) && (isString(name) ? p.name === name : name.test(p.name))) {\n return p;\n }\n }\n}\nfunction findProp(node, name, dynamicOnly = false, allowEmpty = false) {\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 6) {\n if (dynamicOnly) continue;\n if (p.name === name && (p.value || allowEmpty)) {\n return p;\n }\n } else if (p.name === \"bind\" && (p.exp || allowEmpty) && isStaticArgOf(p.arg, name)) {\n return p;\n }\n }\n}\nfunction isStaticArgOf(arg, name) {\n return !!(arg && isStaticExp(arg) && arg.content === name);\n}\nfunction hasDynamicKeyVBind(node) {\n return node.props.some(\n (p) => p.type === 7 && p.name === \"bind\" && (!p.arg || // v-bind=\"obj\"\n p.arg.type !== 4 || // v-bind:[_ctx.foo]\n !p.arg.isStatic)\n // v-bind:[foo]\n );\n}\nfunction isText$1(node) {\n return node.type === 5 || node.type === 2;\n}\nfunction isVPre(p) {\n return p.type === 7 && p.name === \"pre\";\n}\nfunction isVSlot(p) {\n return p.type === 7 && p.name === \"slot\";\n}\nfunction isTemplateNode(node) {\n return node.type === 1 && node.tagType === 3;\n}\nfunction isSlotOutlet(node) {\n return node.type === 1 && node.tagType === 2;\n}\nconst propsHelperSet = /* @__PURE__ */ new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\nfunction getUnnormalizedProps(props, callPath = []) {\n if (props && !isString(props) && props.type === 14) {\n const callee = props.callee;\n if (!isString(callee) && propsHelperSet.has(callee)) {\n return getUnnormalizedProps(\n props.arguments[0],\n callPath.concat(props)\n );\n }\n }\n return [props, callPath];\n}\nfunction injectProp(node, prop, context) {\n let propsWithInjection;\n let props = node.type === 13 ? node.props : node.arguments[2];\n let callPath = [];\n let parentCall;\n if (props && !isString(props) && props.type === 14) {\n const ret = getUnnormalizedProps(props);\n props = ret[0];\n callPath = ret[1];\n parentCall = callPath[callPath.length - 1];\n }\n if (props == null || isString(props)) {\n propsWithInjection = createObjectExpression([prop]);\n } else if (props.type === 14) {\n const first = props.arguments[0];\n if (!isString(first) && first.type === 15) {\n if (!hasProp(prop, first)) {\n first.properties.unshift(prop);\n }\n } else {\n if (props.callee === TO_HANDLERS) {\n propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n createObjectExpression([prop]),\n props\n ]);\n } else {\n props.arguments.unshift(createObjectExpression([prop]));\n }\n }\n !propsWithInjection && (propsWithInjection = props);\n } else if (props.type === 15) {\n if (!hasProp(prop, props)) {\n props.properties.unshift(prop);\n }\n propsWithInjection = props;\n } else {\n propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n createObjectExpression([prop]),\n props\n ]);\n if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\n parentCall = callPath[callPath.length - 2];\n }\n }\n if (node.type === 13) {\n if (parentCall) {\n parentCall.arguments[0] = propsWithInjection;\n } else {\n node.props = propsWithInjection;\n }\n } else {\n if (parentCall) {\n parentCall.arguments[0] = propsWithInjection;\n } else {\n node.arguments[2] = propsWithInjection;\n }\n }\n}\nfunction hasProp(prop, props) {\n let result = false;\n if (prop.key.type === 4) {\n const propKeyName = prop.key.content;\n result = props.properties.some(\n (p) => p.key.type === 4 && p.key.content === propKeyName\n );\n }\n return result;\n}\nfunction toValidAssetId(name, type) {\n return `_${type}_${name.replace(/[^\\w]/g, (searchValue, replaceValue) => {\n return searchValue === \"-\" ? \"_\" : name.charCodeAt(replaceValue).toString();\n })}`;\n}\nfunction hasScopeRef(node, ids) {\n if (!node || Object.keys(ids).length === 0) {\n return false;\n }\n switch (node.type) {\n case 1:\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 7 && (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\n return true;\n }\n }\n return node.children.some((c) => hasScopeRef(c, ids));\n case 11:\n if (hasScopeRef(node.source, ids)) {\n return true;\n }\n return node.children.some((c) => hasScopeRef(c, ids));\n case 9:\n return node.branches.some((b) => hasScopeRef(b, ids));\n case 10:\n if (hasScopeRef(node.condition, ids)) {\n return true;\n }\n return node.children.some((c) => hasScopeRef(c, ids));\n case 4:\n return !node.isStatic && isSimpleIdentifier(node.content) && !!ids[node.content];\n case 8:\n return node.children.some((c) => isObject(c) && hasScopeRef(c, ids));\n case 5:\n case 12:\n return hasScopeRef(node.content, ids);\n case 2:\n case 3:\n case 20:\n return false;\n default:\n if (!!(process.env.NODE_ENV !== \"production\")) ;\n return false;\n }\n}\nfunction getMemoedVNodeCall(node) {\n if (node.type === 14 && node.callee === WITH_MEMO) {\n return node.arguments[1].returns;\n } else {\n return node;\n }\n}\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+(\\S[\\s\\S]*)/;\n\nconst defaultParserOptions = {\n parseMode: \"base\",\n ns: 0,\n delimiters: [`{{`, `}}`],\n getNamespace: () => 0,\n isVoidTag: NO,\n isPreTag: NO,\n isIgnoreNewlineTag: NO,\n isCustomElement: NO,\n onError: defaultOnError,\n onWarn: defaultOnWarn,\n comments: !!(process.env.NODE_ENV !== \"production\"),\n prefixIdentifiers: false\n};\nlet currentOptions = defaultParserOptions;\nlet currentRoot = null;\nlet currentInput = \"\";\nlet currentOpenTag = null;\nlet currentProp = null;\nlet currentAttrValue = \"\";\nlet currentAttrStartIndex = -1;\nlet currentAttrEndIndex = -1;\nlet inPre = 0;\nlet inVPre = false;\nlet currentVPreBoundary = null;\nconst stack = [];\nconst tokenizer = new Tokenizer(stack, {\n onerr: emitError,\n ontext(start, end) {\n onText(getSlice(start, end), start, end);\n },\n ontextentity(char, start, end) {\n onText(char, start, end);\n },\n oninterpolation(start, end) {\n if (inVPre) {\n return onText(getSlice(start, end), start, end);\n }\n let innerStart = start + tokenizer.delimiterOpen.length;\n let innerEnd = end - tokenizer.delimiterClose.length;\n while (isWhitespace(currentInput.charCodeAt(innerStart))) {\n innerStart++;\n }\n while (isWhitespace(currentInput.charCodeAt(innerEnd - 1))) {\n innerEnd--;\n }\n let exp = getSlice(innerStart, innerEnd);\n if (exp.includes(\"&\")) {\n {\n exp = currentOptions.decodeEntities(exp, false);\n }\n }\n addNode({\n type: 5,\n content: createExp(exp, false, getLoc(innerStart, innerEnd)),\n loc: getLoc(start, end)\n });\n },\n onopentagname(start, end) {\n const name = getSlice(start, end);\n currentOpenTag = {\n type: 1,\n tag: name,\n ns: currentOptions.getNamespace(name, stack[0], currentOptions.ns),\n tagType: 0,\n // will be refined on tag close\n props: [],\n children: [],\n loc: getLoc(start - 1, end),\n codegenNode: void 0\n };\n },\n onopentagend(end) {\n endOpenTag(end);\n },\n onclosetag(start, end) {\n const name = getSlice(start, end);\n if (!currentOptions.isVoidTag(name)) {\n let found = false;\n for (let i = 0; i < stack.length; i++) {\n const e = stack[i];\n if (e.tag.toLowerCase() === name.toLowerCase()) {\n found = true;\n if (i > 0) {\n emitError(24, stack[0].loc.start.offset);\n }\n for (let j = 0; j <= i; j++) {\n const el = stack.shift();\n onCloseTag(el, end, j < i);\n }\n break;\n }\n }\n if (!found) {\n emitError(23, backTrack(start, 60));\n }\n }\n },\n onselfclosingtag(end) {\n const name = currentOpenTag.tag;\n currentOpenTag.isSelfClosing = true;\n endOpenTag(end);\n if (stack[0] && stack[0].tag === name) {\n onCloseTag(stack.shift(), end);\n }\n },\n onattribname(start, end) {\n currentProp = {\n type: 6,\n name: getSlice(start, end),\n nameLoc: getLoc(start, end),\n value: void 0,\n loc: getLoc(start)\n };\n },\n ondirname(start, end) {\n const raw = getSlice(start, end);\n const name = raw === \".\" || raw === \":\" ? \"bind\" : raw === \"@\" ? \"on\" : raw === \"#\" ? \"slot\" : raw.slice(2);\n if (!inVPre && name === \"\") {\n emitError(26, start);\n }\n if (inVPre || name === \"\") {\n currentProp = {\n type: 6,\n name: raw,\n nameLoc: getLoc(start, end),\n value: void 0,\n loc: getLoc(start)\n };\n } else {\n currentProp = {\n type: 7,\n name,\n rawName: raw,\n exp: void 0,\n arg: void 0,\n modifiers: raw === \".\" ? [createSimpleExpression(\"prop\")] : [],\n loc: getLoc(start)\n };\n if (name === \"pre\") {\n inVPre = tokenizer.inVPre = true;\n currentVPreBoundary = currentOpenTag;\n const props = currentOpenTag.props;\n for (let i = 0; i < props.length; i++) {\n if (props[i].type === 7) {\n props[i] = dirToAttr(props[i]);\n }\n }\n }\n }\n },\n ondirarg(start, end) {\n if (start === end) return;\n const arg = getSlice(start, end);\n if (inVPre && !isVPre(currentProp)) {\n currentProp.name += arg;\n setLocEnd(currentProp.nameLoc, end);\n } else {\n const isStatic = arg[0] !== `[`;\n currentProp.arg = createExp(\n isStatic ? arg : arg.slice(1, -1),\n isStatic,\n getLoc(start, end),\n isStatic ? 3 : 0\n );\n }\n },\n ondirmodifier(start, end) {\n const mod = getSlice(start, end);\n if (inVPre && !isVPre(currentProp)) {\n currentProp.name += \".\" + mod;\n setLocEnd(currentProp.nameLoc, end);\n } else if (currentProp.name === \"slot\") {\n const arg = currentProp.arg;\n if (arg) {\n arg.content += \".\" + mod;\n setLocEnd(arg.loc, end);\n }\n } else {\n const exp = createSimpleExpression(mod, true, getLoc(start, end));\n currentProp.modifiers.push(exp);\n }\n },\n onattribdata(start, end) {\n currentAttrValue += getSlice(start, end);\n if (currentAttrStartIndex < 0) currentAttrStartIndex = start;\n currentAttrEndIndex = end;\n },\n onattribentity(char, start, end) {\n currentAttrValue += char;\n if (currentAttrStartIndex < 0) currentAttrStartIndex = start;\n currentAttrEndIndex = end;\n },\n onattribnameend(end) {\n const start = currentProp.loc.start.offset;\n const name = getSlice(start, end);\n if (currentProp.type === 7) {\n currentProp.rawName = name;\n }\n if (currentOpenTag.props.some(\n (p) => (p.type === 7 ? p.rawName : p.name) === name\n )) {\n emitError(2, start);\n }\n },\n onattribend(quote, end) {\n if (currentOpenTag && currentProp) {\n setLocEnd(currentProp.loc, end);\n if (quote !== 0) {\n if (currentAttrValue.includes(\"&\")) {\n currentAttrValue = currentOptions.decodeEntities(\n currentAttrValue,\n true\n );\n }\n if (currentProp.type === 6) {\n if (currentProp.name === \"class\") {\n currentAttrValue = condense(currentAttrValue).trim();\n }\n if (quote === 1 && !currentAttrValue) {\n emitError(13, end);\n }\n currentProp.value = {\n type: 2,\n content: currentAttrValue,\n loc: quote === 1 ? getLoc(currentAttrStartIndex, currentAttrEndIndex) : getLoc(currentAttrStartIndex - 1, currentAttrEndIndex + 1)\n };\n if (tokenizer.inSFCRoot && currentOpenTag.tag === \"template\" && currentProp.name === \"lang\" && currentAttrValue && currentAttrValue !== \"html\") {\n tokenizer.enterRCDATA(toCharCodes(`</template`), 0);\n }\n } else {\n let expParseMode = 0 /* Normal */;\n currentProp.exp = createExp(\n currentAttrValue,\n false,\n getLoc(currentAttrStartIndex, currentAttrEndIndex),\n 0,\n expParseMode\n );\n if (currentProp.name === \"for\") {\n currentProp.forParseResult = parseForExpression(currentProp.exp);\n }\n let syncIndex = -1;\n if (currentProp.name === \"bind\" && (syncIndex = currentProp.modifiers.findIndex(\n (mod) => mod.content === \"sync\"\n )) > -1 && checkCompatEnabled(\n \"COMPILER_V_BIND_SYNC\",\n currentOptions,\n currentProp.loc,\n currentProp.arg.loc.source\n )) {\n currentProp.name = \"model\";\n currentProp.modifiers.splice(syncIndex, 1);\n }\n }\n }\n if (currentProp.type !== 7 || currentProp.name !== \"pre\") {\n currentOpenTag.props.push(currentProp);\n }\n }\n currentAttrValue = \"\";\n currentAttrStartIndex = currentAttrEndIndex = -1;\n },\n oncomment(start, end) {\n if (currentOptions.comments) {\n addNode({\n type: 3,\n content: getSlice(start, end),\n loc: getLoc(start - 4, end + 3)\n });\n }\n },\n onend() {\n const end = currentInput.length;\n if ((!!(process.env.NODE_ENV !== \"production\") || false) && tokenizer.state !== 1) {\n switch (tokenizer.state) {\n case 5:\n case 8:\n emitError(5, end);\n break;\n case 3:\n case 4:\n emitError(\n 25,\n tokenizer.sectionStart\n );\n break;\n case 28:\n if (tokenizer.currentSequence === Sequences.CdataEnd) {\n emitError(6, end);\n } else {\n emitError(7, end);\n }\n break;\n case 6:\n case 7:\n case 9:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n case 16:\n case 17:\n case 18:\n case 19:\n // \"\n case 20:\n // '\n case 21:\n emitError(9, end);\n break;\n }\n }\n for (let index = 0; index < stack.length; index++) {\n onCloseTag(stack[index], end - 1);\n emitError(24, stack[index].loc.start.offset);\n }\n },\n oncdata(start, end) {\n if (stack[0].ns !== 0) {\n onText(getSlice(start, end), start, end);\n } else {\n emitError(1, start - 9);\n }\n },\n onprocessinginstruction(start) {\n if ((stack[0] ? stack[0].ns : currentOptions.ns) === 0) {\n emitError(\n 21,\n start - 1\n );\n }\n }\n});\nconst forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nconst stripParensRE = /^\\(|\\)$/g;\nfunction parseForExpression(input) {\n const loc = input.loc;\n const exp = input.content;\n const inMatch = exp.match(forAliasRE);\n if (!inMatch) return;\n const [, LHS, RHS] = inMatch;\n const createAliasExpression = (content, offset, asParam = false) => {\n const start = loc.start.offset + offset;\n const end = start + content.length;\n return createExp(\n content,\n false,\n getLoc(start, end),\n 0,\n asParam ? 1 /* Params */ : 0 /* Normal */\n );\n };\n const result = {\n source: createAliasExpression(RHS.trim(), exp.indexOf(RHS, LHS.length)),\n value: void 0,\n key: void 0,\n index: void 0,\n finalized: false\n };\n let valueContent = LHS.trim().replace(stripParensRE, \"\").trim();\n const trimmedOffset = LHS.indexOf(valueContent);\n const iteratorMatch = valueContent.match(forIteratorRE);\n if (iteratorMatch) {\n valueContent = valueContent.replace(forIteratorRE, \"\").trim();\n const keyContent = iteratorMatch[1].trim();\n let keyOffset;\n if (keyContent) {\n keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\n result.key = createAliasExpression(keyContent, keyOffset, true);\n }\n if (iteratorMatch[2]) {\n const indexContent = iteratorMatch[2].trim();\n if (indexContent) {\n result.index = createAliasExpression(\n indexContent,\n exp.indexOf(\n indexContent,\n result.key ? keyOffset + keyContent.length : trimmedOffset + valueContent.length\n ),\n true\n );\n }\n }\n }\n if (valueContent) {\n result.value = createAliasExpression(valueContent, trimmedOffset, true);\n }\n return result;\n}\nfunction getSlice(start, end) {\n return currentInput.slice(start, end);\n}\nfunction endOpenTag(end) {\n if (tokenizer.inSFCRoot) {\n currentOpenTag.innerLoc = getLoc(end + 1, end + 1);\n }\n addNode(currentOpenTag);\n const { tag, ns } = currentOpenTag;\n if (ns === 0 && currentOptions.isPreTag(tag)) {\n inPre++;\n }\n if (currentOptions.isVoidTag(tag)) {\n onCloseTag(currentOpenTag, end);\n } else {\n stack.unshift(currentOpenTag);\n if (ns === 1 || ns === 2) {\n tokenizer.inXML = true;\n }\n }\n currentOpenTag = null;\n}\nfunction onText(content, start, end) {\n {\n const tag = stack[0] && stack[0].tag;\n if (tag !== \"script\" && tag !== \"style\" && content.includes(\"&\")) {\n content = currentOptions.decodeEntities(content, false);\n }\n }\n const parent = stack[0] || currentRoot;\n const lastNode = parent.children[parent.children.length - 1];\n if (lastNode && lastNode.type === 2) {\n lastNode.content += content;\n setLocEnd(lastNode.loc, end);\n } else {\n parent.children.push({\n type: 2,\n content,\n loc: getLoc(start, end)\n });\n }\n}\nfunction onCloseTag(el, end, isImplied = false) {\n if (isImplied) {\n setLocEnd(el.loc, backTrack(end, 60));\n } else {\n setLocEnd(el.loc, lookAhead(end, 62) + 1);\n }\n if (tokenizer.inSFCRoot) {\n if (el.children.length) {\n el.innerLoc.end = extend({}, el.children[el.children.length - 1].loc.end);\n } else {\n el.innerLoc.end = extend({}, el.innerLoc.start);\n }\n el.innerLoc.source = getSlice(\n el.innerLoc.start.offset,\n el.innerLoc.end.offset\n );\n }\n const { tag, ns, children } = el;\n if (!inVPre) {\n if (tag === \"slot\") {\n el.tagType = 2;\n } else if (isFragmentTemplate(el)) {\n el.tagType = 3;\n } else if (isComponent(el)) {\n el.tagType = 1;\n }\n }\n if (!tokenizer.inRCDATA) {\n el.children = condenseWhitespace(children);\n }\n if (ns === 0 && currentOptions.isIgnoreNewlineTag(tag)) {\n const first = children[0];\n if (first && first.type === 2) {\n first.content = first.content.replace(/^\\r?\\n/, \"\");\n }\n }\n if (ns === 0 && currentOptions.isPreTag(tag)) {\n inPre--;\n }\n if (currentVPreBoundary === el) {\n inVPre = tokenizer.inVPre = false;\n currentVPreBoundary = null;\n }\n if (tokenizer.inXML && (stack[0] ? stack[0].ns : currentOptions.ns) === 0) {\n tokenizer.inXML = false;\n }\n {\n const props = el.props;\n if (!!(process.env.NODE_ENV !== \"production\") && isCompatEnabled(\n \"COMPILER_V_IF_V_FOR_PRECEDENCE\",\n currentOptions\n )) {\n let hasIf = false;\n let hasFor = false;\n for (let i = 0; i < props.length; i++) {\n const p = props[i];\n if (p.type === 7) {\n if (p.name === \"if\") {\n hasIf = true;\n } else if (p.name === \"for\") {\n hasFor = true;\n }\n }\n if (hasIf && hasFor) {\n warnDeprecation(\n \"COMPILER_V_IF_V_FOR_PRECEDENCE\",\n currentOptions,\n el.loc\n );\n break;\n }\n }\n }\n if (!tokenizer.inSFCRoot && isCompatEnabled(\n \"COMPILER_NATIVE_TEMPLATE\",\n currentOptions\n ) && el.tag === \"template\" && !isFragmentTemplate(el)) {\n !!(process.env.NODE_ENV !== \"production\") && warnDeprecation(\n \"COMPILER_NATIVE_TEMPLATE\",\n currentOptions,\n el.loc\n );\n const parent = stack[0] || currentRoot;\n const index = parent.children.indexOf(el);\n parent.children.splice(index, 1, ...el.children);\n }\n const inlineTemplateProp = props.find(\n (p) => p.type === 6 && p.name === \"inline-template\"\n );\n if (inlineTemplateProp && checkCompatEnabled(\n \"COMPILER_INLINE_TEMPLATE\",\n currentOptions,\n inlineTemplateProp.loc\n ) && el.children.length) {\n inlineTemplateProp.value = {\n type: 2,\n content: getSlice(\n el.children[0].loc.start.offset,\n el.children[el.children.length - 1].loc.end.offset\n ),\n loc: inlineTemplateProp.loc\n };\n }\n }\n}\nfunction lookAhead(index, c) {\n let i = index;\n while (currentInput.charCodeAt(i) !== c && i < currentInput.length - 1) i++;\n return i;\n}\nfunction backTrack(index, c) {\n let i = index;\n while (currentInput.charCodeAt(i) !== c && i >= 0) i--;\n return i;\n}\nconst specialTemplateDir = /* @__PURE__ */ new Set([\"if\", \"else\", \"else-if\", \"for\", \"slot\"]);\nfunction isFragmentTemplate({ tag, props }) {\n if (tag === \"template\") {\n for (let i = 0; i < props.length; i++) {\n if (props[i].type === 7 && specialTemplateDir.has(props[i].name)) {\n return true;\n }\n }\n }\n return false;\n}\nfunction isComponent({ tag, props }) {\n if (currentOptions.isCustomElement(tag)) {\n return false;\n }\n if (tag === \"component\" || isUpperCase(tag.charCodeAt(0)) || isCoreComponent(tag) || currentOptions.isBuiltInComponent && currentOptions.isBuiltInComponent(tag) || currentOptions.isNativeTag && !currentOptions.isNativeTag(tag)) {\n return true;\n }\n for (let i = 0; i < props.length; i++) {\n const p = props[i];\n if (p.type === 6) {\n if (p.name === \"is\" && p.value) {\n if (p.value.content.startsWith(\"vue:\")) {\n return true;\n } else if (checkCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n currentOptions,\n p.loc\n )) {\n return true;\n }\n }\n } else if (// :is on plain element - only treat as component in compat mode\n p.name === \"bind\" && isStaticArgOf(p.arg, \"is\") && checkCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n currentOptions,\n p.loc\n )) {\n return true;\n }\n }\n return false;\n}\nfunction isUpperCase(c) {\n return c > 64 && c < 91;\n}\nconst windowsNewlineRE = /\\r\\n/g;\nfunction condenseWhitespace(nodes) {\n const shouldCondense = currentOptions.whitespace !== \"preserve\";\n let removedWhitespace = false;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.type === 2) {\n if (!inPre) {\n if (isAllWhitespace(node.content)) {\n const prev = nodes[i - 1] && nodes[i - 1].type;\n const next = nodes[i + 1] && nodes[i + 1].type;\n if (!prev || !next || shouldCondense && (prev === 3 && (next === 3 || next === 1) || prev === 1 && (next === 3 || next === 1 && hasNewlineChar(node.content)))) {\n removedWhitespace = true;\n nodes[i] = null;\n } else {\n node.content = \" \";\n }\n } else if (shouldCondense) {\n node.content = condense(node.content);\n }\n } else {\n node.content = node.content.replace(windowsNewlineRE, \"\\n\");\n }\n }\n }\n return removedWhitespace ? nodes.filter(Boolean) : nodes;\n}\nfunction isAllWhitespace(str) {\n for (let i = 0; i < str.length; i++) {\n if (!isWhitespace(str.charCodeAt(i))) {\n return false;\n }\n }\n return true;\n}\nfunction hasNewlineChar(str) {\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c === 10 || c === 13) {\n return true;\n }\n }\n return false;\n}\nfunction condense(str) {\n let ret = \"\";\n let prevCharIsWhitespace = false;\n for (let i = 0; i < str.length; i++) {\n if (isWhitespace(str.charCodeAt(i))) {\n if (!prevCharIsWhitespace) {\n ret += \" \";\n prevCharIsWhitespace = true;\n }\n } else {\n ret += str[i];\n prevCharIsWhitespace = false;\n }\n }\n return ret;\n}\nfunction addNode(node) {\n (stack[0] || currentRoot).children.push(node);\n}\nfunction getLoc(start, end) {\n return {\n start: tokenizer.getPos(start),\n // @ts-expect-error allow late attachment\n end: end == null ? end : tokenizer.getPos(end),\n // @ts-expect-error allow late attachment\n source: end == null ? end : getSlice(start, end)\n };\n}\nfunction cloneLoc(loc) {\n return getLoc(loc.start.offset, loc.end.offset);\n}\nfunction setLocEnd(loc, end) {\n loc.end = tokenizer.getPos(end);\n loc.source = getSlice(loc.start.offset, end);\n}\nfunction dirToAttr(dir) {\n const attr = {\n type: 6,\n name: dir.rawName,\n nameLoc: getLoc(\n dir.loc.start.offset,\n dir.loc.start.offset + dir.rawName.length\n ),\n value: void 0,\n loc: dir.loc\n };\n if (dir.exp) {\n const loc = dir.exp.loc;\n if (loc.end.offset < dir.loc.end.offset) {\n loc.start.offset--;\n loc.start.column--;\n loc.end.offset++;\n loc.end.column++;\n }\n attr.value = {\n type: 2,\n content: dir.exp.content,\n loc\n };\n }\n return attr;\n}\nfunction createExp(content, isStatic = false, loc, constType = 0, parseMode = 0 /* Normal */) {\n const exp = createSimpleExpression(content, isStatic, loc, constType);\n return exp;\n}\nfunction emitError(code, index, message) {\n currentOptions.onError(\n createCompilerError(code, getLoc(index, index), void 0, message)\n );\n}\nfunction reset() {\n tokenizer.reset();\n currentOpenTag = null;\n currentProp = null;\n currentAttrValue = \"\";\n currentAttrStartIndex = -1;\n currentAttrEndIndex = -1;\n stack.length = 0;\n}\nfunction baseParse(input, options) {\n reset();\n currentInput = input;\n currentOptions = extend({}, defaultParserOptions);\n if (options) {\n let key;\n for (key in options) {\n if (options[key] != null) {\n currentOptions[key] = options[key];\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!currentOptions.decodeEntities) {\n throw new Error(\n `[@vue/compiler-core] decodeEntities option is required in browser builds.`\n );\n }\n }\n tokenizer.mode = currentOptions.parseMode === \"html\" ? 1 : currentOptions.parseMode === \"sfc\" ? 2 : 0;\n tokenizer.inXML = currentOptions.ns === 1 || currentOptions.ns === 2;\n const delimiters = options && options.delimiters;\n if (delimiters) {\n tokenizer.delimiterOpen = toCharCodes(delimiters[0]);\n tokenizer.delimiterClose = toCharCodes(delimiters[1]);\n }\n const root = currentRoot = createRoot([], input);\n tokenizer.parse(currentInput);\n root.loc = getLoc(0, input.length);\n root.children = condenseWhitespace(root.children);\n currentRoot = null;\n return root;\n}\n\nfunction cacheStatic(root, context) {\n walk(\n root,\n void 0,\n context,\n // Root node is unfortunately non-hoistable due to potential parent\n // fallthrough attributes.\n !!getSingleElementRoot(root)\n );\n}\nfunction getSingleElementRoot(root) {\n const children = root.children.filter((x) => x.type !== 3);\n return children.length === 1 && children[0].type === 1 && !isSlotOutlet(children[0]) ? children[0] : null;\n}\nfunction walk(node, parent, context, doNotHoistNode = false, inFor = false) {\n const { children } = node;\n const toCache = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.type === 1 && child.tagType === 0) {\n const constantType = doNotHoistNode ? 0 : getConstantType(child, context);\n if (constantType > 0) {\n if (constantType >= 2) {\n child.codegenNode.patchFlag = -1;\n toCache.push(child);\n continue;\n }\n } else {\n const codegenNode = child.codegenNode;\n if (codegenNode.type === 13) {\n const flag = codegenNode.patchFlag;\n if ((flag === void 0 || flag === 512 || flag === 1) && getGeneratedPropsConstantType(child, context) >= 2) {\n const props = getNodeProps(child);\n if (props) {\n codegenNode.props = context.hoist(props);\n }\n }\n if (codegenNode.dynamicProps) {\n codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\n }\n }\n }\n } else if (child.type === 12) {\n const constantType = doNotHoistNode ? 0 : getConstantType(child, context);\n if (constantType >= 2) {\n if (child.codegenNode.type === 14 && child.codegenNode.arguments.length > 0) {\n child.codegenNode.arguments.push(\n -1 + (!!(process.env.NODE_ENV !== \"production\") ? ` /* ${PatchFlagNames[-1]} */` : ``)\n );\n }\n toCache.push(child);\n continue;\n }\n }\n if (child.type === 1) {\n const isComponent = child.tagType === 1;\n if (isComponent) {\n context.scopes.vSlot++;\n }\n walk(child, node, context, false, inFor);\n if (isComponent) {\n context.scopes.vSlot--;\n }\n } else if (child.type === 11) {\n walk(child, node, context, child.children.length === 1, true);\n } else if (child.type === 9) {\n for (let i2 = 0; i2 < child.branches.length; i2++) {\n walk(\n child.branches[i2],\n node,\n context,\n child.branches[i2].children.length === 1,\n inFor\n );\n }\n }\n }\n let cachedAsArray = false;\n if (toCache.length === children.length && node.type === 1) {\n if (node.tagType === 0 && node.codegenNode && node.codegenNode.type === 13 && isArray(node.codegenNode.children)) {\n node.codegenNode.children = getCacheExpression(\n createArrayExpression(node.codegenNode.children)\n );\n cachedAsArray = true;\n } else if (node.tagType === 1 && node.codegenNode && node.codegenNode.type === 13 && node.codegenNode.children && !isArray(node.codegenNode.children) && node.codegenNode.children.type === 15) {\n const slot = getSlotNode(node.codegenNode, \"default\");\n if (slot) {\n slot.returns = getCacheExpression(\n createArrayExpression(slot.returns)\n );\n cachedAsArray = true;\n }\n } else if (node.tagType === 3 && parent && parent.type === 1 && parent.tagType === 1 && parent.codegenNode && parent.codegenNode.type === 13 && parent.codegenNode.children && !isArray(parent.codegenNode.children) && parent.codegenNode.children.type === 15) {\n const slotName = findDir(node, \"slot\", true);\n const slot = slotName && slotName.arg && getSlotNode(parent.codegenNode, slotName.arg);\n if (slot) {\n slot.returns = getCacheExpression(\n createArrayExpression(slot.returns)\n );\n cachedAsArray = true;\n }\n }\n }\n if (!cachedAsArray) {\n for (const child of toCache) {\n child.codegenNode = context.cache(child.codegenNode);\n }\n }\n function getCacheExpression(value) {\n const exp = context.cache(value);\n exp.needArraySpread = true;\n return exp;\n }\n function getSlotNode(node2, name) {\n if (node2.children && !isArray(node2.children) && node2.children.type === 15) {\n const slot = node2.children.properties.find(\n (p) => p.key === name || p.key.content === name\n );\n return slot && slot.value;\n }\n }\n if (toCache.length && context.transformHoist) {\n context.transformHoist(children, context, node);\n }\n}\nfunction getConstantType(node, context) {\n const { constantCache } = context;\n switch (node.type) {\n case 1:\n if (node.tagType !== 0) {\n return 0;\n }\n const cached = constantCache.get(node);\n if (cached !== void 0) {\n return cached;\n }\n const codegenNode = node.codegenNode;\n if (codegenNode.type !== 13) {\n return 0;\n }\n if (codegenNode.isBlock && node.tag !== \"svg\" && node.tag !== \"foreignObject\" && node.tag !== \"math\") {\n return 0;\n }\n if (codegenNode.patchFlag === void 0) {\n let returnType2 = 3;\n const generatedPropsType = getGeneratedPropsConstantType(node, context);\n if (generatedPropsType === 0) {\n constantCache.set(node, 0);\n return 0;\n }\n if (generatedPropsType < returnType2) {\n returnType2 = generatedPropsType;\n }\n for (let i = 0; i < node.children.length; i++) {\n const childType = getConstantType(node.children[i], context);\n if (childType === 0) {\n constantCache.set(node, 0);\n return 0;\n }\n if (childType < returnType2) {\n returnType2 = childType;\n }\n }\n if (returnType2 > 1) {\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 7 && p.name === \"bind\" && p.exp) {\n const expType = getConstantType(p.exp, context);\n if (expType === 0) {\n constantCache.set(node, 0);\n return 0;\n }\n if (expType < returnType2) {\n returnType2 = expType;\n }\n }\n }\n }\n if (codegenNode.isBlock) {\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 7) {\n constantCache.set(node, 0);\n return 0;\n }\n }\n context.removeHelper(OPEN_BLOCK);\n context.removeHelper(\n getVNodeBlockHelper(context.inSSR, codegenNode.isComponent)\n );\n codegenNode.isBlock = false;\n context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\n }\n constantCache.set(node, returnType2);\n return returnType2;\n } else {\n constantCache.set(node, 0);\n return 0;\n }\n case 2:\n case 3:\n return 3;\n case 9:\n case 11:\n case 10:\n return 0;\n case 5:\n case 12:\n return getConstantType(node.content, context);\n case 4:\n return node.constType;\n case 8:\n let returnType = 3;\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n if (isString(child) || isSymbol(child)) {\n continue;\n }\n const childType = getConstantType(child, context);\n if (childType === 0) {\n return 0;\n } else if (childType < returnType) {\n returnType = childType;\n }\n }\n return returnType;\n case 20:\n return 2;\n default:\n if (!!(process.env.NODE_ENV !== \"production\")) ;\n return 0;\n }\n}\nconst allowHoistedHelperSet = /* @__PURE__ */ new Set([\n NORMALIZE_CLASS,\n NORMALIZE_STYLE,\n NORMALIZE_PROPS,\n GUARD_REACTIVE_PROPS\n]);\nfunction getConstantTypeOfHelperCall(value, context) {\n if (value.type === 14 && !isString(value.callee) && allowHoistedHelperSet.has(value.callee)) {\n const arg = value.arguments[0];\n if (arg.type === 4) {\n return getConstantType(arg, context);\n } else if (arg.type === 14) {\n return getConstantTypeOfHelperCall(arg, context);\n }\n }\n return 0;\n}\nfunction getGeneratedPropsConstantType(node, context) {\n let returnType = 3;\n const props = getNodeProps(node);\n if (props && props.type === 15) {\n const { properties } = props;\n for (let i = 0; i < properties.length; i++) {\n const { key, value } = properties[i];\n const keyType = getConstantType(key, context);\n if (keyType === 0) {\n return keyType;\n }\n if (keyType < returnType) {\n returnType = keyType;\n }\n let valueType;\n if (value.type === 4) {\n valueType = getConstantType(value, context);\n } else if (value.type === 14) {\n valueType = getConstantTypeOfHelperCall(value, context);\n } else {\n valueType = 0;\n }\n if (valueType === 0) {\n return valueType;\n }\n if (valueType < returnType) {\n returnType = valueType;\n }\n }\n }\n return returnType;\n}\nfunction getNodeProps(node) {\n const codegenNode = node.codegenNode;\n if (codegenNode.type === 13) {\n return codegenNode.props;\n }\n}\n\nfunction createTransformContext(root, {\n filename = \"\",\n prefixIdentifiers = false,\n hoistStatic = false,\n hmr = false,\n cacheHandlers = false,\n nodeTransforms = [],\n directiveTransforms = {},\n transformHoist = null,\n isBuiltInComponent = NOOP,\n isCustomElement = NOOP,\n expressionPlugins = [],\n scopeId = null,\n slotted = true,\n ssr = false,\n inSSR = false,\n ssrCssVars = ``,\n bindingMetadata = EMPTY_OBJ,\n inline = false,\n isTS = false,\n onError = defaultOnError,\n onWarn = defaultOnWarn,\n compatConfig\n}) {\n const nameMatch = filename.replace(/\\?.*$/, \"\").match(/([^/\\\\]+)\\.\\w+$/);\n const context = {\n // options\n filename,\n selfName: nameMatch && capitalize(camelize(nameMatch[1])),\n prefixIdentifiers,\n hoistStatic,\n hmr,\n cacheHandlers,\n nodeTransforms,\n directiveTransforms,\n transformHoist,\n isBuiltInComponent,\n isCustomElement,\n expressionPlugins,\n scopeId,\n slotted,\n ssr,\n inSSR,\n ssrCssVars,\n bindingMetadata,\n inline,\n isTS,\n onError,\n onWarn,\n compatConfig,\n // state\n root,\n helpers: /* @__PURE__ */ new Map(),\n components: /* @__PURE__ */ new Set(),\n directives: /* @__PURE__ */ new Set(),\n hoists: [],\n imports: [],\n cached: [],\n constantCache: /* @__PURE__ */ new WeakMap(),\n temps: 0,\n identifiers: /* @__PURE__ */ Object.create(null),\n scopes: {\n vFor: 0,\n vSlot: 0,\n vPre: 0,\n vOnce: 0\n },\n parent: null,\n grandParent: null,\n currentNode: root,\n childIndex: 0,\n inVOnce: false,\n // methods\n helper(name) {\n const count = context.helpers.get(name) || 0;\n context.helpers.set(name, count + 1);\n return name;\n },\n removeHelper(name) {\n const count = context.helpers.get(name);\n if (count) {\n const currentCount = count - 1;\n if (!currentCount) {\n context.helpers.delete(name);\n } else {\n context.helpers.set(name, currentCount);\n }\n }\n },\n helperString(name) {\n return `_${helperNameMap[context.helper(name)]}`;\n },\n replaceNode(node) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!context.currentNode) {\n throw new Error(`Node being replaced is already removed.`);\n }\n if (!context.parent) {\n throw new Error(`Cannot replace root node.`);\n }\n }\n context.parent.children[context.childIndex] = context.currentNode = node;\n },\n removeNode(node) {\n if (!!(process.env.NODE_ENV !== \"production\") && !context.parent) {\n throw new Error(`Cannot remove root node.`);\n }\n const list = context.parent.children;\n const removalIndex = node ? list.indexOf(node) : context.currentNode ? context.childIndex : -1;\n if (!!(process.env.NODE_ENV !== \"production\") && removalIndex < 0) {\n throw new Error(`node being removed is not a child of current parent`);\n }\n if (!node || node === context.currentNode) {\n context.currentNode = null;\n context.onNodeRemoved();\n } else {\n if (context.childIndex > removalIndex) {\n context.childIndex--;\n context.onNodeRemoved();\n }\n }\n context.parent.children.splice(removalIndex, 1);\n },\n onNodeRemoved: NOOP,\n addIdentifiers(exp) {\n },\n removeIdentifiers(exp) {\n },\n hoist(exp) {\n if (isString(exp)) exp = createSimpleExpression(exp);\n context.hoists.push(exp);\n const identifier = createSimpleExpression(\n `_hoisted_${context.hoists.length}`,\n false,\n exp.loc,\n 2\n );\n identifier.hoisted = exp;\n return identifier;\n },\n cache(exp, isVNode = false, inVOnce = false) {\n const cacheExp = createCacheExpression(\n context.cached.length,\n exp,\n isVNode,\n inVOnce\n );\n context.cached.push(cacheExp);\n return cacheExp;\n }\n };\n {\n context.filters = /* @__PURE__ */ new Set();\n }\n return context;\n}\nfunction transform(root, options) {\n const context = createTransformContext(root, options);\n traverseNode(root, context);\n if (options.hoistStatic) {\n cacheStatic(root, context);\n }\n if (!options.ssr) {\n createRootCodegen(root, context);\n }\n root.helpers = /* @__PURE__ */ new Set([...context.helpers.keys()]);\n root.components = [...context.components];\n root.directives = [...context.directives];\n root.imports = context.imports;\n root.hoists = context.hoists;\n root.temps = context.temps;\n root.cached = context.cached;\n root.transformed = true;\n {\n root.filters = [...context.filters];\n }\n}\nfunction createRootCodegen(root, context) {\n const { helper } = context;\n const { children } = root;\n if (children.length === 1) {\n const singleElementRootChild = getSingleElementRoot(root);\n if (singleElementRootChild && singleElementRootChild.codegenNode) {\n const codegenNode = singleElementRootChild.codegenNode;\n if (codegenNode.type === 13) {\n convertToBlock(codegenNode, context);\n }\n root.codegenNode = codegenNode;\n } else {\n root.codegenNode = children[0];\n }\n } else if (children.length > 1) {\n let patchFlag = 64;\n if (!!(process.env.NODE_ENV !== \"production\") && children.filter((c) => c.type !== 3).length === 1) {\n patchFlag |= 2048;\n }\n root.codegenNode = createVNodeCall(\n context,\n helper(FRAGMENT),\n void 0,\n root.children,\n patchFlag,\n void 0,\n void 0,\n true,\n void 0,\n false\n );\n } else ;\n}\nfunction traverseChildren(parent, context) {\n let i = 0;\n const nodeRemoved = () => {\n i--;\n };\n for (; i < parent.children.length; i++) {\n const child = parent.children[i];\n if (isString(child)) continue;\n context.grandParent = context.parent;\n context.parent = parent;\n context.childIndex = i;\n context.onNodeRemoved = nodeRemoved;\n traverseNode(child, context);\n }\n}\nfunction traverseNode(node, context) {\n context.currentNode = node;\n const { nodeTransforms } = context;\n const exitFns = [];\n for (let i2 = 0; i2 < nodeTransforms.length; i2++) {\n const onExit = nodeTransforms[i2](node, context);\n if (onExit) {\n if (isArray(onExit)) {\n exitFns.push(...onExit);\n } else {\n exitFns.push(onExit);\n }\n }\n if (!context.currentNode) {\n return;\n } else {\n node = context.currentNode;\n }\n }\n switch (node.type) {\n case 3:\n if (!context.ssr) {\n context.helper(CREATE_COMMENT);\n }\n break;\n case 5:\n if (!context.ssr) {\n context.helper(TO_DISPLAY_STRING);\n }\n break;\n // for container types, further traverse downwards\n case 9:\n for (let i2 = 0; i2 < node.branches.length; i2++) {\n traverseNode(node.branches[i2], context);\n }\n break;\n case 10:\n case 11:\n case 1:\n case 0:\n traverseChildren(node, context);\n break;\n }\n context.currentNode = node;\n let i = exitFns.length;\n while (i--) {\n exitFns[i]();\n }\n}\nfunction createStructuralDirectiveTransform(name, fn) {\n const matches = isString(name) ? (n) => n === name : (n) => name.test(n);\n return (node, context) => {\n if (node.type === 1) {\n const { props } = node;\n if (node.tagType === 3 && props.some(isVSlot)) {\n return;\n }\n const exitFns = [];\n for (let i = 0; i < props.length; i++) {\n const prop = props[i];\n if (prop.type === 7 && matches(prop.name)) {\n props.splice(i, 1);\n i--;\n const onExit = fn(node, prop, context);\n if (onExit) exitFns.push(onExit);\n }\n }\n return exitFns;\n }\n };\n}\n\nconst PURE_ANNOTATION = `/*@__PURE__*/`;\nconst aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\nfunction createCodegenContext(ast, {\n mode = \"function\",\n prefixIdentifiers = mode === \"module\",\n sourceMap = false,\n filename = `template.vue.html`,\n scopeId = null,\n optimizeImports = false,\n runtimeGlobalName = `Vue`,\n runtimeModuleName = `vue`,\n ssrRuntimeModuleName = \"vue/server-renderer\",\n ssr = false,\n isTS = false,\n inSSR = false\n}) {\n const context = {\n mode,\n prefixIdentifiers,\n sourceMap,\n filename,\n scopeId,\n optimizeImports,\n runtimeGlobalName,\n runtimeModuleName,\n ssrRuntimeModuleName,\n ssr,\n isTS,\n inSSR,\n source: ast.source,\n code: ``,\n column: 1,\n line: 1,\n offset: 0,\n indentLevel: 0,\n pure: false,\n map: void 0,\n helper(key) {\n return `_${helperNameMap[key]}`;\n },\n push(code, newlineIndex = -2 /* None */, node) {\n context.code += code;\n },\n indent() {\n newline(++context.indentLevel);\n },\n deindent(withoutNewLine = false) {\n if (withoutNewLine) {\n --context.indentLevel;\n } else {\n newline(--context.indentLevel);\n }\n },\n newline() {\n newline(context.indentLevel);\n }\n };\n function newline(n) {\n context.push(\"\\n\" + ` `.repeat(n), 0 /* Start */);\n }\n return context;\n}\nfunction generate(ast, options = {}) {\n const context = createCodegenContext(ast, options);\n if (options.onContextCreated) options.onContextCreated(context);\n const {\n mode,\n push,\n prefixIdentifiers,\n indent,\n deindent,\n newline,\n scopeId,\n ssr\n } = context;\n const helpers = Array.from(ast.helpers);\n const hasHelpers = helpers.length > 0;\n const useWithBlock = !prefixIdentifiers && mode !== \"module\";\n const preambleContext = context;\n {\n genFunctionPreamble(ast, preambleContext);\n }\n const functionName = ssr ? `ssrRender` : `render`;\n const args = ssr ? [\"_ctx\", \"_push\", \"_parent\", \"_attrs\"] : [\"_ctx\", \"_cache\"];\n const signature = args.join(\", \");\n {\n push(`function ${functionName}(${signature}) {`);\n }\n indent();\n if (useWithBlock) {\n push(`with (_ctx) {`);\n indent();\n if (hasHelpers) {\n push(\n `const { ${helpers.map(aliasHelper).join(\", \")} } = _Vue\n`,\n -1 /* End */\n );\n newline();\n }\n }\n if (ast.components.length) {\n genAssets(ast.components, \"component\", context);\n if (ast.directives.length || ast.temps > 0) {\n newline();\n }\n }\n if (ast.directives.length) {\n genAssets(ast.directives, \"directive\", context);\n if (ast.temps > 0) {\n newline();\n }\n }\n if (ast.filters && ast.filters.length) {\n newline();\n genAssets(ast.filters, \"filter\", context);\n newline();\n }\n if (ast.temps > 0) {\n push(`let `);\n for (let i = 0; i < ast.temps; i++) {\n push(`${i > 0 ? `, ` : ``}_temp${i}`);\n }\n }\n if (ast.components.length || ast.directives.length || ast.temps) {\n push(`\n`, 0 /* Start */);\n newline();\n }\n if (!ssr) {\n push(`return `);\n }\n if (ast.codegenNode) {\n genNode(ast.codegenNode, context);\n } else {\n push(`null`);\n }\n if (useWithBlock) {\n deindent();\n push(`}`);\n }\n deindent();\n push(`}`);\n return {\n ast,\n code: context.code,\n preamble: ``,\n map: context.map ? context.map.toJSON() : void 0\n };\n}\nfunction genFunctionPreamble(ast, context) {\n const {\n ssr,\n prefixIdentifiers,\n push,\n newline,\n runtimeModuleName,\n runtimeGlobalName,\n ssrRuntimeModuleName\n } = context;\n const VueBinding = runtimeGlobalName;\n const helpers = Array.from(ast.helpers);\n if (helpers.length > 0) {\n {\n push(`const _Vue = ${VueBinding}\n`, -1 /* End */);\n if (ast.hoists.length) {\n const staticHelpers = [\n CREATE_VNODE,\n CREATE_ELEMENT_VNODE,\n CREATE_COMMENT,\n CREATE_TEXT,\n CREATE_STATIC\n ].filter((helper) => helpers.includes(helper)).map(aliasHelper).join(\", \");\n push(`const { ${staticHelpers} } = _Vue\n`, -1 /* End */);\n }\n }\n }\n genHoists(ast.hoists, context);\n newline();\n push(`return `);\n}\nfunction genAssets(assets, type, { helper, push, newline, isTS }) {\n const resolver = helper(\n type === \"filter\" ? RESOLVE_FILTER : type === \"component\" ? RESOLVE_COMPONENT : RESOLVE_DIRECTIVE\n );\n for (let i = 0; i < assets.length; i++) {\n let id = assets[i];\n const maybeSelfReference = id.endsWith(\"__self\");\n if (maybeSelfReference) {\n id = id.slice(0, -6);\n }\n push(\n `const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`\n );\n if (i < assets.length - 1) {\n newline();\n }\n }\n}\nfunction genHoists(hoists, context) {\n if (!hoists.length) {\n return;\n }\n context.pure = true;\n const { push, newline } = context;\n newline();\n for (let i = 0; i < hoists.length; i++) {\n const exp = hoists[i];\n if (exp) {\n push(`const _hoisted_${i + 1} = `);\n genNode(exp, context);\n newline();\n }\n }\n context.pure = false;\n}\nfunction isText(n) {\n return isString(n) || n.type === 4 || n.type === 2 || n.type === 5 || n.type === 8;\n}\nfunction genNodeListAsArray(nodes, context) {\n const multilines = nodes.length > 3 || !!(process.env.NODE_ENV !== \"production\") && nodes.some((n) => isArray(n) || !isText(n));\n context.push(`[`);\n multilines && context.indent();\n genNodeList(nodes, context, multilines);\n multilines && context.deindent();\n context.push(`]`);\n}\nfunction genNodeList(nodes, context, multilines = false, comma = true) {\n const { push, newline } = context;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (isString(node)) {\n push(node, -3 /* Unknown */);\n } else if (isArray(node)) {\n genNodeListAsArray(node, context);\n } else {\n genNode(node, context);\n }\n if (i < nodes.length - 1) {\n if (multilines) {\n comma && push(\",\");\n newline();\n } else {\n comma && push(\", \");\n }\n }\n }\n}\nfunction genNode(node, context) {\n if (isString(node)) {\n context.push(node, -3 /* Unknown */);\n return;\n }\n if (isSymbol(node)) {\n context.push(context.helper(node));\n return;\n }\n switch (node.type) {\n case 1:\n case 9:\n case 11:\n !!(process.env.NODE_ENV !== \"production\") && assert(\n node.codegenNode != null,\n `Codegen node is missing for element/if/for node. Apply appropriate transforms first.`\n );\n genNode(node.codegenNode, context);\n break;\n case 2:\n genText(node, context);\n break;\n case 4:\n genExpression(node, context);\n break;\n case 5:\n genInterpolation(node, context);\n break;\n case 12:\n genNode(node.codegenNode, context);\n break;\n case 8:\n genCompoundExpression(node, context);\n break;\n case 3:\n genComment(node, context);\n break;\n case 13:\n genVNodeCall(node, context);\n break;\n case 14:\n genCallExpression(node, context);\n break;\n case 15:\n genObjectExpression(node, context);\n break;\n case 17:\n genArrayExpression(node, context);\n break;\n case 18:\n genFunctionExpression(node, context);\n break;\n case 19:\n genConditionalExpression(node, context);\n break;\n case 20:\n genCacheExpression(node, context);\n break;\n case 21:\n genNodeList(node.body, context, true, false);\n break;\n // SSR only types\n case 22:\n break;\n case 23:\n break;\n case 24:\n break;\n case 25:\n break;\n case 26:\n break;\n /* v8 ignore start */\n case 10:\n break;\n default:\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assert(false, `unhandled codegen node type: ${node.type}`);\n const exhaustiveCheck = node;\n return exhaustiveCheck;\n }\n }\n}\nfunction genText(node, context) {\n context.push(JSON.stringify(node.content), -3 /* Unknown */, node);\n}\nfunction genExpression(node, context) {\n const { content, isStatic } = node;\n context.push(\n isStatic ? JSON.stringify(content) : content,\n -3 /* Unknown */,\n node\n );\n}\nfunction genInterpolation(node, context) {\n const { push, helper, pure } = context;\n if (pure) push(PURE_ANNOTATION);\n push(`${helper(TO_DISPLAY_STRING)}(`);\n genNode(node.content, context);\n push(`)`);\n}\nfunction genCompoundExpression(node, context) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n if (isString(child)) {\n context.push(child, -3 /* Unknown */);\n } else {\n genNode(child, context);\n }\n }\n}\nfunction genExpressionAsPropertyKey(node, context) {\n const { push } = context;\n if (node.type === 8) {\n push(`[`);\n genCompoundExpression(node, context);\n push(`]`);\n } else if (node.isStatic) {\n const text = isSimpleIdentifier(node.content) ? node.content : JSON.stringify(node.content);\n push(text, -2 /* None */, node);\n } else {\n push(`[${node.content}]`, -3 /* Unknown */, node);\n }\n}\nfunction genComment(node, context) {\n const { push, helper, pure } = context;\n if (pure) {\n push(PURE_ANNOTATION);\n }\n push(\n `${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`,\n -3 /* Unknown */,\n node\n );\n}\nfunction genVNodeCall(node, context) {\n const { push, helper, pure } = context;\n const {\n tag,\n props,\n children,\n patchFlag,\n dynamicProps,\n directives,\n isBlock,\n disableTracking,\n isComponent\n } = node;\n let patchFlagString;\n if (patchFlag) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (patchFlag < 0) {\n patchFlagString = patchFlag + ` /* ${PatchFlagNames[patchFlag]} */`;\n } else {\n const flagNames = Object.keys(PatchFlagNames).map(Number).filter((n) => n > 0 && patchFlag & n).map((n) => PatchFlagNames[n]).join(`, `);\n patchFlagString = patchFlag + ` /* ${flagNames} */`;\n }\n } else {\n patchFlagString = String(patchFlag);\n }\n }\n if (directives) {\n push(helper(WITH_DIRECTIVES) + `(`);\n }\n if (isBlock) {\n push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\n }\n if (pure) {\n push(PURE_ANNOTATION);\n }\n const callHelper = isBlock ? getVNodeBlockHelper(context.inSSR, isComponent) : getVNodeHelper(context.inSSR, isComponent);\n push(helper(callHelper) + `(`, -2 /* None */, node);\n genNodeList(\n genNullableArgs([tag, props, children, patchFlagString, dynamicProps]),\n context\n );\n push(`)`);\n if (isBlock) {\n push(`)`);\n }\n if (directives) {\n push(`, `);\n genNode(directives, context);\n push(`)`);\n }\n}\nfunction genNullableArgs(args) {\n let i = args.length;\n while (i--) {\n if (args[i] != null) break;\n }\n return args.slice(0, i + 1).map((arg) => arg || `null`);\n}\nfunction genCallExpression(node, context) {\n const { push, helper, pure } = context;\n const callee = isString(node.callee) ? node.callee : helper(node.callee);\n if (pure) {\n push(PURE_ANNOTATION);\n }\n push(callee + `(`, -2 /* None */, node);\n genNodeList(node.arguments, context);\n push(`)`);\n}\nfunction genObjectExpression(node, context) {\n const { push, indent, deindent, newline } = context;\n const { properties } = node;\n if (!properties.length) {\n push(`{}`, -2 /* None */, node);\n return;\n }\n const multilines = properties.length > 1 || !!(process.env.NODE_ENV !== \"production\") && properties.some((p) => p.value.type !== 4);\n push(multilines ? `{` : `{ `);\n multilines && indent();\n for (let i = 0; i < properties.length; i++) {\n const { key, value } = properties[i];\n genExpressionAsPropertyKey(key, context);\n push(`: `);\n genNode(value, context);\n if (i < properties.length - 1) {\n push(`,`);\n newline();\n }\n }\n multilines && deindent();\n push(multilines ? `}` : ` }`);\n}\nfunction genArrayExpression(node, context) {\n genNodeListAsArray(node.elements, context);\n}\nfunction genFunctionExpression(node, context) {\n const { push, indent, deindent } = context;\n const { params, returns, body, newline, isSlot } = node;\n if (isSlot) {\n push(`_${helperNameMap[WITH_CTX]}(`);\n }\n push(`(`, -2 /* None */, node);\n if (isArray(params)) {\n genNodeList(params, context);\n } else if (params) {\n genNode(params, context);\n }\n push(`) => `);\n if (newline || body) {\n push(`{`);\n indent();\n }\n if (returns) {\n if (newline) {\n push(`return `);\n }\n if (isArray(returns)) {\n genNodeListAsArray(returns, context);\n } else {\n genNode(returns, context);\n }\n } else if (body) {\n genNode(body, context);\n }\n if (newline || body) {\n deindent();\n push(`}`);\n }\n if (isSlot) {\n if (node.isNonScopedSlot) {\n push(`, undefined, true`);\n }\n push(`)`);\n }\n}\nfunction genConditionalExpression(node, context) {\n const { test, consequent, alternate, newline: needNewline } = node;\n const { push, indent, deindent, newline } = context;\n if (test.type === 4) {\n const needsParens = !isSimpleIdentifier(test.content);\n needsParens && push(`(`);\n genExpression(test, context);\n needsParens && push(`)`);\n } else {\n push(`(`);\n genNode(test, context);\n push(`)`);\n }\n needNewline && indent();\n context.indentLevel++;\n needNewline || push(` `);\n push(`? `);\n genNode(consequent, context);\n context.indentLevel--;\n needNewline && newline();\n needNewline || push(` `);\n push(`: `);\n const isNested = alternate.type === 19;\n if (!isNested) {\n context.indentLevel++;\n }\n genNode(alternate, context);\n if (!isNested) {\n context.indentLevel--;\n }\n needNewline && deindent(\n true\n /* without newline */\n );\n}\nfunction genCacheExpression(node, context) {\n const { push, helper, indent, deindent, newline } = context;\n const { needPauseTracking, needArraySpread } = node;\n if (needArraySpread) {\n push(`[...(`);\n }\n push(`_cache[${node.index}] || (`);\n if (needPauseTracking) {\n indent();\n push(`${helper(SET_BLOCK_TRACKING)}(-1`);\n if (node.inVOnce) push(`, true`);\n push(`),`);\n newline();\n push(`(`);\n }\n push(`_cache[${node.index}] = `);\n genNode(node.value, context);\n if (needPauseTracking) {\n push(`).cacheIndex = ${node.index},`);\n newline();\n push(`${helper(SET_BLOCK_TRACKING)}(1),`);\n newline();\n push(`_cache[${node.index}]`);\n deindent();\n }\n push(`)`);\n if (needArraySpread) {\n push(`)]`);\n }\n}\n\nconst prohibitedKeywordRE = new RegExp(\n \"\\\\b\" + \"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield\".split(\",\").join(\"\\\\b|\\\\b\") + \"\\\\b\"\n);\nconst stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\nfunction validateBrowserExpression(node, context, asParams = false, asRawStatements = false) {\n const exp = node.content;\n if (!exp.trim()) {\n return;\n }\n try {\n new Function(\n asRawStatements ? ` ${exp} ` : `return ${asParams ? `(${exp}) => {}` : `(${exp})`}`\n );\n } catch (e) {\n let message = e.message;\n const keywordMatch = exp.replace(stripStringRE, \"\").match(prohibitedKeywordRE);\n if (keywordMatch) {\n message = `avoid using JavaScript keyword as property name: \"${keywordMatch[0]}\"`;\n }\n context.onError(\n createCompilerError(\n 45,\n node.loc,\n void 0,\n message\n )\n );\n }\n}\n\nconst transformExpression = (node, context) => {\n if (node.type === 5) {\n node.content = processExpression(\n node.content,\n context\n );\n } else if (node.type === 1) {\n const memo = findDir(node, \"memo\");\n for (let i = 0; i < node.props.length; i++) {\n const dir = node.props[i];\n if (dir.type === 7 && dir.name !== \"for\") {\n const exp = dir.exp;\n const arg = dir.arg;\n if (exp && exp.type === 4 && !(dir.name === \"on\" && arg) && // key has been processed in transformFor(vMemo + vFor)\n !(memo && arg && arg.type === 4 && arg.content === \"key\")) {\n dir.exp = processExpression(\n exp,\n context,\n // slot args must be processed as function params\n dir.name === \"slot\"\n );\n }\n if (arg && arg.type === 4 && !arg.isStatic) {\n dir.arg = processExpression(arg, context);\n }\n }\n }\n }\n};\nfunction processExpression(node, context, asParams = false, asRawStatements = false, localVars = Object.create(context.identifiers)) {\n {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateBrowserExpression(node, context, asParams, asRawStatements);\n }\n return node;\n }\n}\nfunction stringifyExpression(exp) {\n if (isString(exp)) {\n return exp;\n } else if (exp.type === 4) {\n return exp.content;\n } else {\n return exp.children.map(stringifyExpression).join(\"\");\n }\n}\n\nconst transformIf = createStructuralDirectiveTransform(\n /^(?:if|else|else-if)$/,\n (node, dir, context) => {\n return processIf(node, dir, context, (ifNode, branch, isRoot) => {\n const siblings = context.parent.children;\n let i = siblings.indexOf(ifNode);\n let key = 0;\n while (i-- >= 0) {\n const sibling = siblings[i];\n if (sibling && sibling.type === 9) {\n key += sibling.branches.length;\n }\n }\n return () => {\n if (isRoot) {\n ifNode.codegenNode = createCodegenNodeForBranch(\n branch,\n key,\n context\n );\n } else {\n const parentCondition = getParentCondition(ifNode.codegenNode);\n parentCondition.alternate = createCodegenNodeForBranch(\n branch,\n key + ifNode.branches.length - 1,\n context\n );\n }\n };\n });\n }\n);\nfunction processIf(node, dir, context, processCodegen) {\n if (dir.name !== \"else\" && (!dir.exp || !dir.exp.content.trim())) {\n const loc = dir.exp ? dir.exp.loc : node.loc;\n context.onError(\n createCompilerError(28, dir.loc)\n );\n dir.exp = createSimpleExpression(`true`, false, loc);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && true && dir.exp) {\n validateBrowserExpression(dir.exp, context);\n }\n if (dir.name === \"if\") {\n const branch = createIfBranch(node, dir);\n const ifNode = {\n type: 9,\n loc: cloneLoc(node.loc),\n branches: [branch]\n };\n context.replaceNode(ifNode);\n if (processCodegen) {\n return processCodegen(ifNode, branch, true);\n }\n } else {\n const siblings = context.parent.children;\n const comments = [];\n let i = siblings.indexOf(node);\n while (i-- >= -1) {\n const sibling = siblings[i];\n if (sibling && sibling.type === 3) {\n context.removeNode(sibling);\n !!(process.env.NODE_ENV !== \"production\") && comments.unshift(sibling);\n continue;\n }\n if (sibling && sibling.type === 2 && !sibling.content.trim().length) {\n context.removeNode(sibling);\n continue;\n }\n if (sibling && sibling.type === 9) {\n if ((dir.name === \"else-if\" || dir.name === \"else\") && sibling.branches[sibling.branches.length - 1].condition === void 0) {\n context.onError(\n createCompilerError(30, node.loc)\n );\n }\n context.removeNode();\n const branch = createIfBranch(node, dir);\n if (!!(process.env.NODE_ENV !== \"production\") && comments.length && // #3619 ignore comments if the v-if is direct child of <transition>\n !(context.parent && context.parent.type === 1 && (context.parent.tag === \"transition\" || context.parent.tag === \"Transition\"))) {\n branch.children = [...comments, ...branch.children];\n }\n if (!!(process.env.NODE_ENV !== \"production\") || false) {\n const key = branch.userKey;\n if (key) {\n sibling.branches.forEach(({ userKey }) => {\n if (isSameKey(userKey, key)) {\n context.onError(\n createCompilerError(\n 29,\n branch.userKey.loc\n )\n );\n }\n });\n }\n }\n sibling.branches.push(branch);\n const onExit = processCodegen && processCodegen(sibling, branch, false);\n traverseNode(branch, context);\n if (onExit) onExit();\n context.currentNode = null;\n } else {\n context.onError(\n createCompilerError(30, node.loc)\n );\n }\n break;\n }\n }\n}\nfunction createIfBranch(node, dir) {\n const isTemplateIf = node.tagType === 3;\n return {\n type: 10,\n loc: node.loc,\n condition: dir.name === \"else\" ? void 0 : dir.exp,\n children: isTemplateIf && !findDir(node, \"for\") ? node.children : [node],\n userKey: findProp(node, `key`),\n isTemplateIf\n };\n}\nfunction createCodegenNodeForBranch(branch, keyIndex, context) {\n if (branch.condition) {\n return createConditionalExpression(\n branch.condition,\n createChildrenCodegenNode(branch, keyIndex, context),\n // make sure to pass in asBlock: true so that the comment node call\n // closes the current block.\n createCallExpression(context.helper(CREATE_COMMENT), [\n !!(process.env.NODE_ENV !== \"production\") ? '\"v-if\"' : '\"\"',\n \"true\"\n ])\n );\n } else {\n return createChildrenCodegenNode(branch, keyIndex, context);\n }\n}\nfunction createChildrenCodegenNode(branch, keyIndex, context) {\n const { helper } = context;\n const keyProperty = createObjectProperty(\n `key`,\n createSimpleExpression(\n `${keyIndex}`,\n false,\n locStub,\n 2\n )\n );\n const { children } = branch;\n const firstChild = children[0];\n const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1;\n if (needFragmentWrapper) {\n if (children.length === 1 && firstChild.type === 11) {\n const vnodeCall = firstChild.codegenNode;\n injectProp(vnodeCall, keyProperty, context);\n return vnodeCall;\n } else {\n let patchFlag = 64;\n if (!!(process.env.NODE_ENV !== \"production\") && !branch.isTemplateIf && children.filter((c) => c.type !== 3).length === 1) {\n patchFlag |= 2048;\n }\n return createVNodeCall(\n context,\n helper(FRAGMENT),\n createObjectExpression([keyProperty]),\n children,\n patchFlag,\n void 0,\n void 0,\n true,\n false,\n false,\n branch.loc\n );\n }\n } else {\n const ret = firstChild.codegenNode;\n const vnodeCall = getMemoedVNodeCall(ret);\n if (vnodeCall.type === 13) {\n convertToBlock(vnodeCall, context);\n }\n injectProp(vnodeCall, keyProperty, context);\n return ret;\n }\n}\nfunction isSameKey(a, b) {\n if (!a || a.type !== b.type) {\n return false;\n }\n if (a.type === 6) {\n if (a.value.content !== b.value.content) {\n return false;\n }\n } else {\n const exp = a.exp;\n const branchExp = b.exp;\n if (exp.type !== branchExp.type) {\n return false;\n }\n if (exp.type !== 4 || exp.isStatic !== branchExp.isStatic || exp.content !== branchExp.content) {\n return false;\n }\n }\n return true;\n}\nfunction getParentCondition(node) {\n while (true) {\n if (node.type === 19) {\n if (node.alternate.type === 19) {\n node = node.alternate;\n } else {\n return node;\n }\n } else if (node.type === 20) {\n node = node.value;\n }\n }\n}\n\nconst transformFor = createStructuralDirectiveTransform(\n \"for\",\n (node, dir, context) => {\n const { helper, removeHelper } = context;\n return processFor(node, dir, context, (forNode) => {\n const renderExp = createCallExpression(helper(RENDER_LIST), [\n forNode.source\n ]);\n const isTemplate = isTemplateNode(node);\n const memo = findDir(node, \"memo\");\n const keyProp = findProp(node, `key`, false, true);\n keyProp && keyProp.type === 7;\n let keyExp = keyProp && (keyProp.type === 6 ? keyProp.value ? createSimpleExpression(keyProp.value.content, true) : void 0 : keyProp.exp);\n const keyProperty = keyProp && keyExp ? createObjectProperty(`key`, keyExp) : null;\n const isStableFragment = forNode.source.type === 4 && forNode.source.constType > 0;\n const fragmentFlag = isStableFragment ? 64 : keyProp ? 128 : 256;\n forNode.codegenNode = createVNodeCall(\n context,\n helper(FRAGMENT),\n void 0,\n renderExp,\n fragmentFlag,\n void 0,\n void 0,\n true,\n !isStableFragment,\n false,\n node.loc\n );\n return () => {\n let childBlock;\n const { children } = forNode;\n if ((!!(process.env.NODE_ENV !== \"production\") || false) && isTemplate) {\n node.children.some((c) => {\n if (c.type === 1) {\n const key = findProp(c, \"key\");\n if (key) {\n context.onError(\n createCompilerError(\n 33,\n key.loc\n )\n );\n return true;\n }\n }\n });\n }\n const needFragmentWrapper = children.length !== 1 || children[0].type !== 1;\n const slotOutlet = isSlotOutlet(node) ? node : isTemplate && node.children.length === 1 && isSlotOutlet(node.children[0]) ? node.children[0] : null;\n if (slotOutlet) {\n childBlock = slotOutlet.codegenNode;\n if (isTemplate && keyProperty) {\n injectProp(childBlock, keyProperty, context);\n }\n } else if (needFragmentWrapper) {\n childBlock = createVNodeCall(\n context,\n helper(FRAGMENT),\n keyProperty ? createObjectExpression([keyProperty]) : void 0,\n node.children,\n 64,\n void 0,\n void 0,\n true,\n void 0,\n false\n );\n } else {\n childBlock = children[0].codegenNode;\n if (isTemplate && keyProperty) {\n injectProp(childBlock, keyProperty, context);\n }\n if (childBlock.isBlock !== !isStableFragment) {\n if (childBlock.isBlock) {\n removeHelper(OPEN_BLOCK);\n removeHelper(\n getVNodeBlockHelper(context.inSSR, childBlock.isComponent)\n );\n } else {\n removeHelper(\n getVNodeHelper(context.inSSR, childBlock.isComponent)\n );\n }\n }\n childBlock.isBlock = !isStableFragment;\n if (childBlock.isBlock) {\n helper(OPEN_BLOCK);\n helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\n } else {\n helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\n }\n }\n if (memo) {\n const loop = createFunctionExpression(\n createForLoopParams(forNode.parseResult, [\n createSimpleExpression(`_cached`)\n ])\n );\n loop.body = createBlockStatement([\n createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\n createCompoundExpression([\n `if (_cached`,\n ...keyExp ? [` && _cached.key === `, keyExp] : [],\n ` && ${context.helperString(\n IS_MEMO_SAME\n )}(_cached, _memo)) return _cached`\n ]),\n createCompoundExpression([`const _item = `, childBlock]),\n createSimpleExpression(`_item.memo = _memo`),\n createSimpleExpression(`return _item`)\n ]);\n renderExp.arguments.push(\n loop,\n createSimpleExpression(`_cache`),\n createSimpleExpression(String(context.cached.length))\n );\n context.cached.push(null);\n } else {\n renderExp.arguments.push(\n createFunctionExpression(\n createForLoopParams(forNode.parseResult),\n childBlock,\n true\n )\n );\n }\n };\n });\n }\n);\nfunction processFor(node, dir, context, processCodegen) {\n if (!dir.exp) {\n context.onError(\n createCompilerError(31, dir.loc)\n );\n return;\n }\n const parseResult = dir.forParseResult;\n if (!parseResult) {\n context.onError(\n createCompilerError(32, dir.loc)\n );\n return;\n }\n finalizeForParseResult(parseResult, context);\n const { addIdentifiers, removeIdentifiers, scopes } = context;\n const { source, value, key, index } = parseResult;\n const forNode = {\n type: 11,\n loc: dir.loc,\n source,\n valueAlias: value,\n keyAlias: key,\n objectIndexAlias: index,\n parseResult,\n children: isTemplateNode(node) ? node.children : [node]\n };\n context.replaceNode(forNode);\n scopes.vFor++;\n const onExit = processCodegen && processCodegen(forNode);\n return () => {\n scopes.vFor--;\n if (onExit) onExit();\n };\n}\nfunction finalizeForParseResult(result, context) {\n if (result.finalized) return;\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n validateBrowserExpression(result.source, context);\n if (result.key) {\n validateBrowserExpression(\n result.key,\n context,\n true\n );\n }\n if (result.index) {\n validateBrowserExpression(\n result.index,\n context,\n true\n );\n }\n if (result.value) {\n validateBrowserExpression(\n result.value,\n context,\n true\n );\n }\n }\n result.finalized = true;\n}\nfunction createForLoopParams({ value, key, index }, memoArgs = []) {\n return createParamsList([value, key, index, ...memoArgs]);\n}\nfunction createParamsList(args) {\n let i = args.length;\n while (i--) {\n if (args[i]) break;\n }\n return args.slice(0, i + 1).map((arg, i2) => arg || createSimpleExpression(`_`.repeat(i2 + 1), false));\n}\n\nconst defaultFallback = createSimpleExpression(`undefined`, false);\nconst trackSlotScopes = (node, context) => {\n if (node.type === 1 && (node.tagType === 1 || node.tagType === 3)) {\n const vSlot = findDir(node, \"slot\");\n if (vSlot) {\n vSlot.exp;\n context.scopes.vSlot++;\n return () => {\n context.scopes.vSlot--;\n };\n }\n }\n};\nconst trackVForSlotScopes = (node, context) => {\n let vFor;\n if (isTemplateNode(node) && node.props.some(isVSlot) && (vFor = findDir(node, \"for\"))) {\n const result = vFor.forParseResult;\n if (result) {\n finalizeForParseResult(result, context);\n const { value, key, index } = result;\n const { addIdentifiers, removeIdentifiers } = context;\n value && addIdentifiers(value);\n key && addIdentifiers(key);\n index && addIdentifiers(index);\n return () => {\n value && removeIdentifiers(value);\n key && removeIdentifiers(key);\n index && removeIdentifiers(index);\n };\n }\n }\n};\nconst buildClientSlotFn = (props, _vForExp, children, loc) => createFunctionExpression(\n props,\n children,\n false,\n true,\n children.length ? children[0].loc : loc\n);\nfunction buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\n context.helper(WITH_CTX);\n const { children, loc } = node;\n const slotsProperties = [];\n const dynamicSlots = [];\n let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\n const onComponentSlot = findDir(node, \"slot\", true);\n if (onComponentSlot) {\n const { arg, exp } = onComponentSlot;\n if (arg && !isStaticExp(arg)) {\n hasDynamicSlots = true;\n }\n slotsProperties.push(\n createObjectProperty(\n arg || createSimpleExpression(\"default\", true),\n buildSlotFn(exp, void 0, children, loc)\n )\n );\n }\n let hasTemplateSlots = false;\n let hasNamedDefaultSlot = false;\n const implicitDefaultChildren = [];\n const seenSlotNames = /* @__PURE__ */ new Set();\n let conditionalBranchIndex = 0;\n for (let i = 0; i < children.length; i++) {\n const slotElement = children[i];\n let slotDir;\n if (!isTemplateNode(slotElement) || !(slotDir = findDir(slotElement, \"slot\", true))) {\n if (slotElement.type !== 3) {\n implicitDefaultChildren.push(slotElement);\n }\n continue;\n }\n if (onComponentSlot) {\n context.onError(\n createCompilerError(37, slotDir.loc)\n );\n break;\n }\n hasTemplateSlots = true;\n const { children: slotChildren, loc: slotLoc } = slotElement;\n const {\n arg: slotName = createSimpleExpression(`default`, true),\n exp: slotProps,\n loc: dirLoc\n } = slotDir;\n let staticSlotName;\n if (isStaticExp(slotName)) {\n staticSlotName = slotName ? slotName.content : `default`;\n } else {\n hasDynamicSlots = true;\n }\n const vFor = findDir(slotElement, \"for\");\n const slotFunction = buildSlotFn(slotProps, vFor, slotChildren, slotLoc);\n let vIf;\n let vElse;\n if (vIf = findDir(slotElement, \"if\")) {\n hasDynamicSlots = true;\n dynamicSlots.push(\n createConditionalExpression(\n vIf.exp,\n buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++),\n defaultFallback\n )\n );\n } else if (vElse = findDir(\n slotElement,\n /^else(?:-if)?$/,\n true\n /* allowEmpty */\n )) {\n let j = i;\n let prev;\n while (j--) {\n prev = children[j];\n if (prev.type !== 3 && isNonWhitespaceContent(prev)) {\n break;\n }\n }\n if (prev && isTemplateNode(prev) && findDir(prev, /^(?:else-)?if$/)) {\n let conditional = dynamicSlots[dynamicSlots.length - 1];\n while (conditional.alternate.type === 19) {\n conditional = conditional.alternate;\n }\n conditional.alternate = vElse.exp ? createConditionalExpression(\n vElse.exp,\n buildDynamicSlot(\n slotName,\n slotFunction,\n conditionalBranchIndex++\n ),\n defaultFallback\n ) : buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++);\n } else {\n context.onError(\n createCompilerError(30, vElse.loc)\n );\n }\n } else if (vFor) {\n hasDynamicSlots = true;\n const parseResult = vFor.forParseResult;\n if (parseResult) {\n finalizeForParseResult(parseResult, context);\n dynamicSlots.push(\n createCallExpression(context.helper(RENDER_LIST), [\n parseResult.source,\n createFunctionExpression(\n createForLoopParams(parseResult),\n buildDynamicSlot(slotName, slotFunction),\n true\n )\n ])\n );\n } else {\n context.onError(\n createCompilerError(\n 32,\n vFor.loc\n )\n );\n }\n } else {\n if (staticSlotName) {\n if (seenSlotNames.has(staticSlotName)) {\n context.onError(\n createCompilerError(\n 38,\n dirLoc\n )\n );\n continue;\n }\n seenSlotNames.add(staticSlotName);\n if (staticSlotName === \"default\") {\n hasNamedDefaultSlot = true;\n }\n }\n slotsProperties.push(createObjectProperty(slotName, slotFunction));\n }\n }\n if (!onComponentSlot) {\n const buildDefaultSlotProperty = (props, children2) => {\n const fn = buildSlotFn(props, void 0, children2, loc);\n if (context.compatConfig) {\n fn.isNonScopedSlot = true;\n }\n return createObjectProperty(`default`, fn);\n };\n if (!hasTemplateSlots) {\n slotsProperties.push(buildDefaultSlotProperty(void 0, children));\n } else if (implicitDefaultChildren.length && // #3766\n // with whitespace: 'preserve', whitespaces between slots will end up in\n // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\n implicitDefaultChildren.some((node2) => isNonWhitespaceContent(node2))) {\n if (hasNamedDefaultSlot) {\n context.onError(\n createCompilerError(\n 39,\n implicitDefaultChildren[0].loc\n )\n );\n } else {\n slotsProperties.push(\n buildDefaultSlotProperty(void 0, implicitDefaultChildren)\n );\n }\n }\n }\n const slotFlag = hasDynamicSlots ? 2 : hasForwardedSlots(node.children) ? 3 : 1;\n let slots = createObjectExpression(\n slotsProperties.concat(\n createObjectProperty(\n `_`,\n // 2 = compiled but dynamic = can skip normalization, but must run diff\n // 1 = compiled and static = can skip normalization AND diff as optimized\n createSimpleExpression(\n slotFlag + (!!(process.env.NODE_ENV !== \"production\") ? ` /* ${slotFlagsText[slotFlag]} */` : ``),\n false\n )\n )\n ),\n loc\n );\n if (dynamicSlots.length) {\n slots = createCallExpression(context.helper(CREATE_SLOTS), [\n slots,\n createArrayExpression(dynamicSlots)\n ]);\n }\n return {\n slots,\n hasDynamicSlots\n };\n}\nfunction buildDynamicSlot(name, fn, index) {\n const props = [\n createObjectProperty(`name`, name),\n createObjectProperty(`fn`, fn)\n ];\n if (index != null) {\n props.push(\n createObjectProperty(`key`, createSimpleExpression(String(index), true))\n );\n }\n return createObjectExpression(props);\n}\nfunction hasForwardedSlots(children) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n switch (child.type) {\n case 1:\n if (child.tagType === 2 || hasForwardedSlots(child.children)) {\n return true;\n }\n break;\n case 9:\n if (hasForwardedSlots(child.branches)) return true;\n break;\n case 10:\n case 11:\n if (hasForwardedSlots(child.children)) return true;\n break;\n }\n }\n return false;\n}\nfunction isNonWhitespaceContent(node) {\n if (node.type !== 2 && node.type !== 12)\n return true;\n return node.type === 2 ? !!node.content.trim() : isNonWhitespaceContent(node.content);\n}\n\nconst directiveImportMap = /* @__PURE__ */ new WeakMap();\nconst transformElement = (node, context) => {\n return function postTransformElement() {\n node = context.currentNode;\n if (!(node.type === 1 && (node.tagType === 0 || node.tagType === 1))) {\n return;\n }\n const { tag, props } = node;\n const isComponent = node.tagType === 1;\n let vnodeTag = isComponent ? resolveComponentType(node, context) : `\"${tag}\"`;\n const isDynamicComponent = isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\n let vnodeProps;\n let vnodeChildren;\n let patchFlag = 0;\n let vnodeDynamicProps;\n let dynamicPropNames;\n let vnodeDirectives;\n let shouldUseBlock = (\n // dynamic component may resolve to plain elements\n isDynamicComponent || vnodeTag === TELEPORT || vnodeTag === SUSPENSE || !isComponent && // <svg> and <foreignObject> must be forced into blocks so that block\n // updates inside get proper isSVG flag at runtime. (#639, #643)\n // This is technically web-specific, but splitting the logic out of core\n // leads to too much unnecessary complexity.\n (tag === \"svg\" || tag === \"foreignObject\" || tag === \"math\")\n );\n if (props.length > 0) {\n const propsBuildResult = buildProps(\n node,\n context,\n void 0,\n isComponent,\n isDynamicComponent\n );\n vnodeProps = propsBuildResult.props;\n patchFlag = propsBuildResult.patchFlag;\n dynamicPropNames = propsBuildResult.dynamicPropNames;\n const directives = propsBuildResult.directives;\n vnodeDirectives = directives && directives.length ? createArrayExpression(\n directives.map((dir) => buildDirectiveArgs(dir, context))\n ) : void 0;\n if (propsBuildResult.shouldUseBlock) {\n shouldUseBlock = true;\n }\n }\n if (node.children.length > 0) {\n if (vnodeTag === KEEP_ALIVE) {\n shouldUseBlock = true;\n patchFlag |= 1024;\n if (!!(process.env.NODE_ENV !== \"production\") && node.children.length > 1) {\n context.onError(\n createCompilerError(46, {\n start: node.children[0].loc.start,\n end: node.children[node.children.length - 1].loc.end,\n source: \"\"\n })\n );\n }\n }\n const shouldBuildAsSlots = isComponent && // Teleport is not a real component and has dedicated runtime handling\n vnodeTag !== TELEPORT && // explained above.\n vnodeTag !== KEEP_ALIVE;\n if (shouldBuildAsSlots) {\n const { slots, hasDynamicSlots } = buildSlots(node, context);\n vnodeChildren = slots;\n if (hasDynamicSlots) {\n patchFlag |= 1024;\n }\n } else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\n const child = node.children[0];\n const type = child.type;\n const hasDynamicTextChild = type === 5 || type === 8;\n if (hasDynamicTextChild && getConstantType(child, context) === 0) {\n patchFlag |= 1;\n }\n if (hasDynamicTextChild || type === 2) {\n vnodeChildren = child;\n } else {\n vnodeChildren = node.children;\n }\n } else {\n vnodeChildren = node.children;\n }\n }\n if (dynamicPropNames && dynamicPropNames.length) {\n vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\n }\n node.codegenNode = createVNodeCall(\n context,\n vnodeTag,\n vnodeProps,\n vnodeChildren,\n patchFlag === 0 ? void 0 : patchFlag,\n vnodeDynamicProps,\n vnodeDirectives,\n !!shouldUseBlock,\n false,\n isComponent,\n node.loc\n );\n };\n};\nfunction resolveComponentType(node, context, ssr = false) {\n let { tag } = node;\n const isExplicitDynamic = isComponentTag(tag);\n const isProp = findProp(\n node,\n \"is\",\n false,\n true\n /* allow empty */\n );\n if (isProp) {\n if (isExplicitDynamic || isCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n context\n )) {\n let exp;\n if (isProp.type === 6) {\n exp = isProp.value && createSimpleExpression(isProp.value.content, true);\n } else {\n exp = isProp.exp;\n if (!exp) {\n exp = createSimpleExpression(`is`, false, isProp.arg.loc);\n }\n }\n if (exp) {\n return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\n exp\n ]);\n }\n } else if (isProp.type === 6 && isProp.value.content.startsWith(\"vue:\")) {\n tag = isProp.value.content.slice(4);\n }\n }\n const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\n if (builtIn) {\n if (!ssr) context.helper(builtIn);\n return builtIn;\n }\n context.helper(RESOLVE_COMPONENT);\n context.components.add(tag);\n return toValidAssetId(tag, `component`);\n}\nfunction buildProps(node, context, props = node.props, isComponent, isDynamicComponent, ssr = false) {\n const { tag, loc: elementLoc, children } = node;\n let properties = [];\n const mergeArgs = [];\n const runtimeDirectives = [];\n const hasChildren = children.length > 0;\n let shouldUseBlock = false;\n let patchFlag = 0;\n let hasRef = false;\n let hasClassBinding = false;\n let hasStyleBinding = false;\n let hasHydrationEventBinding = false;\n let hasDynamicKeys = false;\n let hasVnodeHook = false;\n const dynamicPropNames = [];\n const pushMergeArg = (arg) => {\n if (properties.length) {\n mergeArgs.push(\n createObjectExpression(dedupeProperties(properties), elementLoc)\n );\n properties = [];\n }\n if (arg) mergeArgs.push(arg);\n };\n const pushRefVForMarker = () => {\n if (context.scopes.vFor > 0) {\n properties.push(\n createObjectProperty(\n createSimpleExpression(\"ref_for\", true),\n createSimpleExpression(\"true\")\n )\n );\n }\n };\n const analyzePatchFlag = ({ key, value }) => {\n if (isStaticExp(key)) {\n const name = key.content;\n const isEventHandler = isOn(name);\n if (isEventHandler && (!isComponent || isDynamicComponent) && // omit the flag for click handlers because hydration gives click\n // dedicated fast path.\n name.toLowerCase() !== \"onclick\" && // omit v-model handlers\n name !== \"onUpdate:modelValue\" && // omit onVnodeXXX hooks\n !isReservedProp(name)) {\n hasHydrationEventBinding = true;\n }\n if (isEventHandler && isReservedProp(name)) {\n hasVnodeHook = true;\n }\n if (isEventHandler && value.type === 14) {\n value = value.arguments[0];\n }\n if (value.type === 20 || (value.type === 4 || value.type === 8) && getConstantType(value, context) > 0) {\n return;\n }\n if (name === \"ref\") {\n hasRef = true;\n } else if (name === \"class\") {\n hasClassBinding = true;\n } else if (name === \"style\") {\n hasStyleBinding = true;\n } else if (name !== \"key\" && !dynamicPropNames.includes(name)) {\n dynamicPropNames.push(name);\n }\n if (isComponent && (name === \"class\" || name === \"style\") && !dynamicPropNames.includes(name)) {\n dynamicPropNames.push(name);\n }\n } else {\n hasDynamicKeys = true;\n }\n };\n for (let i = 0; i < props.length; i++) {\n const prop = props[i];\n if (prop.type === 6) {\n const { loc, name, nameLoc, value } = prop;\n let isStatic = true;\n if (name === \"ref\") {\n hasRef = true;\n pushRefVForMarker();\n }\n if (name === \"is\" && (isComponentTag(tag) || value && value.content.startsWith(\"vue:\") || isCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n context\n ))) {\n continue;\n }\n properties.push(\n createObjectProperty(\n createSimpleExpression(name, true, nameLoc),\n createSimpleExpression(\n value ? value.content : \"\",\n isStatic,\n value ? value.loc : loc\n )\n )\n );\n } else {\n const { name, arg, exp, loc, modifiers } = prop;\n const isVBind = name === \"bind\";\n const isVOn = name === \"on\";\n if (name === \"slot\") {\n if (!isComponent) {\n context.onError(\n createCompilerError(40, loc)\n );\n }\n continue;\n }\n if (name === \"once\" || name === \"memo\") {\n continue;\n }\n if (name === \"is\" || isVBind && isStaticArgOf(arg, \"is\") && (isComponentTag(tag) || isCompatEnabled(\n \"COMPILER_IS_ON_ELEMENT\",\n context\n ))) {\n continue;\n }\n if (isVOn && ssr) {\n continue;\n }\n if (\n // #938: elements with dynamic keys should be forced into blocks\n isVBind && isStaticArgOf(arg, \"key\") || // inline before-update hooks need to force block so that it is invoked\n // before children\n isVOn && hasChildren && isStaticArgOf(arg, \"vue:before-update\")\n ) {\n shouldUseBlock = true;\n }\n if (isVBind && isStaticArgOf(arg, \"ref\")) {\n pushRefVForMarker();\n }\n if (!arg && (isVBind || isVOn)) {\n hasDynamicKeys = true;\n if (exp) {\n if (isVBind) {\n {\n pushMergeArg();\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const hasOverridableKeys = mergeArgs.some((arg2) => {\n if (arg2.type === 15) {\n return arg2.properties.some(({ key }) => {\n if (key.type !== 4 || !key.isStatic) {\n return true;\n }\n return key.content !== \"class\" && key.content !== \"style\" && !isOn(key.content);\n });\n } else {\n return true;\n }\n });\n if (hasOverridableKeys) {\n checkCompatEnabled(\n \"COMPILER_V_BIND_OBJECT_ORDER\",\n context,\n loc\n );\n }\n }\n if (isCompatEnabled(\n \"COMPILER_V_BIND_OBJECT_ORDER\",\n context\n )) {\n mergeArgs.unshift(exp);\n continue;\n }\n }\n pushRefVForMarker();\n pushMergeArg();\n mergeArgs.push(exp);\n } else {\n pushMergeArg({\n type: 14,\n loc,\n callee: context.helper(TO_HANDLERS),\n arguments: isComponent ? [exp] : [exp, `true`]\n });\n }\n } else {\n context.onError(\n createCompilerError(\n isVBind ? 34 : 35,\n loc\n )\n );\n }\n continue;\n }\n if (isVBind && modifiers.some((mod) => mod.content === \"prop\")) {\n patchFlag |= 32;\n }\n const directiveTransform = context.directiveTransforms[name];\n if (directiveTransform) {\n const { props: props2, needRuntime } = directiveTransform(prop, node, context);\n !ssr && props2.forEach(analyzePatchFlag);\n if (isVOn && arg && !isStaticExp(arg)) {\n pushMergeArg(createObjectExpression(props2, elementLoc));\n } else {\n properties.push(...props2);\n }\n if (needRuntime) {\n runtimeDirectives.push(prop);\n if (isSymbol(needRuntime)) {\n directiveImportMap.set(prop, needRuntime);\n }\n }\n } else if (!isBuiltInDirective(name)) {\n runtimeDirectives.push(prop);\n if (hasChildren) {\n shouldUseBlock = true;\n }\n }\n }\n }\n let propsExpression = void 0;\n if (mergeArgs.length) {\n pushMergeArg();\n if (mergeArgs.length > 1) {\n propsExpression = createCallExpression(\n context.helper(MERGE_PROPS),\n mergeArgs,\n elementLoc\n );\n } else {\n propsExpression = mergeArgs[0];\n }\n } else if (properties.length) {\n propsExpression = createObjectExpression(\n dedupeProperties(properties),\n elementLoc\n );\n }\n if (hasDynamicKeys) {\n patchFlag |= 16;\n } else {\n if (hasClassBinding && !isComponent) {\n patchFlag |= 2;\n }\n if (hasStyleBinding && !isComponent) {\n patchFlag |= 4;\n }\n if (dynamicPropNames.length) {\n patchFlag |= 8;\n }\n if (hasHydrationEventBinding) {\n patchFlag |= 32;\n }\n }\n if (!shouldUseBlock && (patchFlag === 0 || patchFlag === 32) && (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\n patchFlag |= 512;\n }\n if (!context.inSSR && propsExpression) {\n switch (propsExpression.type) {\n case 15:\n let classKeyIndex = -1;\n let styleKeyIndex = -1;\n let hasDynamicKey = false;\n for (let i = 0; i < propsExpression.properties.length; i++) {\n const key = propsExpression.properties[i].key;\n if (isStaticExp(key)) {\n if (key.content === \"class\") {\n classKeyIndex = i;\n } else if (key.content === \"style\") {\n styleKeyIndex = i;\n }\n } else if (!key.isHandlerKey) {\n hasDynamicKey = true;\n }\n }\n const classProp = propsExpression.properties[classKeyIndex];\n const styleProp = propsExpression.properties[styleKeyIndex];\n if (!hasDynamicKey) {\n if (classProp && !isStaticExp(classProp.value)) {\n classProp.value = createCallExpression(\n context.helper(NORMALIZE_CLASS),\n [classProp.value]\n );\n }\n if (styleProp && // the static style is compiled into an object,\n // so use `hasStyleBinding` to ensure that it is a dynamic style binding\n (hasStyleBinding || styleProp.value.type === 4 && styleProp.value.content.trim()[0] === `[` || // v-bind:style and style both exist,\n // v-bind:style with static literal object\n styleProp.value.type === 17)) {\n styleProp.value = createCallExpression(\n context.helper(NORMALIZE_STYLE),\n [styleProp.value]\n );\n }\n } else {\n propsExpression = createCallExpression(\n context.helper(NORMALIZE_PROPS),\n [propsExpression]\n );\n }\n break;\n case 14:\n break;\n default:\n propsExpression = createCallExpression(\n context.helper(NORMALIZE_PROPS),\n [\n createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\n propsExpression\n ])\n ]\n );\n break;\n }\n }\n return {\n props: propsExpression,\n directives: runtimeDirectives,\n patchFlag,\n dynamicPropNames,\n shouldUseBlock\n };\n}\nfunction dedupeProperties(properties) {\n const knownProps = /* @__PURE__ */ new Map();\n const deduped = [];\n for (let i = 0; i < properties.length; i++) {\n const prop = properties[i];\n if (prop.key.type === 8 || !prop.key.isStatic) {\n deduped.push(prop);\n continue;\n }\n const name = prop.key.content;\n const existing = knownProps.get(name);\n if (existing) {\n if (name === \"style\" || name === \"class\" || isOn(name)) {\n mergeAsArray(existing, prop);\n }\n } else {\n knownProps.set(name, prop);\n deduped.push(prop);\n }\n }\n return deduped;\n}\nfunction mergeAsArray(existing, incoming) {\n if (existing.value.type === 17) {\n existing.value.elements.push(incoming.value);\n } else {\n existing.value = createArrayExpression(\n [existing.value, incoming.value],\n existing.loc\n );\n }\n}\nfunction buildDirectiveArgs(dir, context) {\n const dirArgs = [];\n const runtime = directiveImportMap.get(dir);\n if (runtime) {\n dirArgs.push(context.helperString(runtime));\n } else {\n {\n context.helper(RESOLVE_DIRECTIVE);\n context.directives.add(dir.name);\n dirArgs.push(toValidAssetId(dir.name, `directive`));\n }\n }\n const { loc } = dir;\n if (dir.exp) dirArgs.push(dir.exp);\n if (dir.arg) {\n if (!dir.exp) {\n dirArgs.push(`void 0`);\n }\n dirArgs.push(dir.arg);\n }\n if (Object.keys(dir.modifiers).length) {\n if (!dir.arg) {\n if (!dir.exp) {\n dirArgs.push(`void 0`);\n }\n dirArgs.push(`void 0`);\n }\n const trueExpression = createSimpleExpression(`true`, false, loc);\n dirArgs.push(\n createObjectExpression(\n dir.modifiers.map(\n (modifier) => createObjectProperty(modifier, trueExpression)\n ),\n loc\n )\n );\n }\n return createArrayExpression(dirArgs, dir.loc);\n}\nfunction stringifyDynamicPropNames(props) {\n let propsNamesString = `[`;\n for (let i = 0, l = props.length; i < l; i++) {\n propsNamesString += JSON.stringify(props[i]);\n if (i < l - 1) propsNamesString += \", \";\n }\n return propsNamesString + `]`;\n}\nfunction isComponentTag(tag) {\n return tag === \"component\" || tag === \"Component\";\n}\n\nconst transformSlotOutlet = (node, context) => {\n if (isSlotOutlet(node)) {\n const { children, loc } = node;\n const { slotName, slotProps } = processSlotOutlet(node, context);\n const slotArgs = [\n context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\n slotName,\n \"{}\",\n \"undefined\",\n \"true\"\n ];\n let expectedLen = 2;\n if (slotProps) {\n slotArgs[2] = slotProps;\n expectedLen = 3;\n }\n if (children.length) {\n slotArgs[3] = createFunctionExpression([], children, false, false, loc);\n expectedLen = 4;\n }\n if (context.scopeId && !context.slotted) {\n expectedLen = 5;\n }\n slotArgs.splice(expectedLen);\n node.codegenNode = createCallExpression(\n context.helper(RENDER_SLOT),\n slotArgs,\n loc\n );\n }\n};\nfunction processSlotOutlet(node, context) {\n let slotName = `\"default\"`;\n let slotProps = void 0;\n const nonNameProps = [];\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i];\n if (p.type === 6) {\n if (p.value) {\n if (p.name === \"name\") {\n slotName = JSON.stringify(p.value.content);\n } else {\n p.name = camelize(p.name);\n nonNameProps.push(p);\n }\n }\n } else {\n if (p.name === \"bind\" && isStaticArgOf(p.arg, \"name\")) {\n if (p.exp) {\n slotName = p.exp;\n } else if (p.arg && p.arg.type === 4) {\n const name = camelize(p.arg.content);\n slotName = p.exp = createSimpleExpression(name, false, p.arg.loc);\n }\n } else {\n if (p.name === \"bind\" && p.arg && isStaticExp(p.arg)) {\n p.arg.content = camelize(p.arg.content);\n }\n nonNameProps.push(p);\n }\n }\n }\n if (nonNameProps.length > 0) {\n const { props, directives } = buildProps(\n node,\n context,\n nonNameProps,\n false,\n false\n );\n slotProps = props;\n if (directives.length) {\n context.onError(\n createCompilerError(\n 36,\n directives[0].loc\n )\n );\n }\n }\n return {\n slotName,\n slotProps\n };\n}\n\nconst transformOn = (dir, node, context, augmentor) => {\n const { loc, modifiers, arg } = dir;\n if (!dir.exp && !modifiers.length) {\n context.onError(createCompilerError(35, loc));\n }\n let eventName;\n if (arg.type === 4) {\n if (arg.isStatic) {\n let rawName = arg.content;\n if (!!(process.env.NODE_ENV !== \"production\") && rawName.startsWith(\"vnode\")) {\n context.onError(createCompilerError(51, arg.loc));\n }\n if (rawName.startsWith(\"vue:\")) {\n rawName = `vnode-${rawName.slice(4)}`;\n }\n const eventString = node.tagType !== 0 || rawName.startsWith(\"vnode\") || !/[A-Z]/.test(rawName) ? (\n // for non-element and vnode lifecycle event listeners, auto convert\n // it to camelCase. See issue #2249\n toHandlerKey(camelize(rawName))\n ) : (\n // preserve case for plain element listeners that have uppercase\n // letters, as these may be custom elements' custom events\n `on:${rawName}`\n );\n eventName = createSimpleExpression(eventString, true, arg.loc);\n } else {\n eventName = createCompoundExpression([\n `${context.helperString(TO_HANDLER_KEY)}(`,\n arg,\n `)`\n ]);\n }\n } else {\n eventName = arg;\n eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\n eventName.children.push(`)`);\n }\n let exp = dir.exp;\n if (exp && !exp.content.trim()) {\n exp = void 0;\n }\n let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\n if (exp) {\n const isMemberExp = isMemberExpression(exp);\n const isInlineStatement = !(isMemberExp || isFnExpression(exp));\n const hasMultipleStatements = exp.content.includes(`;`);\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n validateBrowserExpression(\n exp,\n context,\n false,\n hasMultipleStatements\n );\n }\n if (isInlineStatement || shouldCache && isMemberExp) {\n exp = createCompoundExpression([\n `${isInlineStatement ? `$event` : `${``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\n exp,\n hasMultipleStatements ? `}` : `)`\n ]);\n }\n }\n let ret = {\n props: [\n createObjectProperty(\n eventName,\n exp || createSimpleExpression(`() => {}`, false, loc)\n )\n ]\n };\n if (augmentor) {\n ret = augmentor(ret);\n }\n if (shouldCache) {\n ret.props[0].value = context.cache(ret.props[0].value);\n }\n ret.props.forEach((p) => p.key.isHandlerKey = true);\n return ret;\n};\n\nconst transformBind = (dir, _node, context) => {\n const { modifiers, loc } = dir;\n const arg = dir.arg;\n let { exp } = dir;\n if (exp && exp.type === 4 && !exp.content.trim()) {\n {\n exp = void 0;\n }\n }\n if (arg.type !== 4) {\n arg.children.unshift(`(`);\n arg.children.push(`) || \"\"`);\n } else if (!arg.isStatic) {\n arg.content = arg.content ? `${arg.content} || \"\"` : `\"\"`;\n }\n if (modifiers.some((mod) => mod.content === \"camel\")) {\n if (arg.type === 4) {\n if (arg.isStatic) {\n arg.content = camelize(arg.content);\n } else {\n arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\n }\n } else {\n arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\n arg.children.push(`)`);\n }\n }\n if (!context.inSSR) {\n if (modifiers.some((mod) => mod.content === \"prop\")) {\n injectPrefix(arg, \".\");\n }\n if (modifiers.some((mod) => mod.content === \"attr\")) {\n injectPrefix(arg, \"^\");\n }\n }\n return {\n props: [createObjectProperty(arg, exp)]\n };\n};\nconst injectPrefix = (arg, prefix) => {\n if (arg.type === 4) {\n if (arg.isStatic) {\n arg.content = prefix + arg.content;\n } else {\n arg.content = `\\`${prefix}\\${${arg.content}}\\``;\n }\n } else {\n arg.children.unshift(`'${prefix}' + (`);\n arg.children.push(`)`);\n }\n};\n\nconst transformText = (node, context) => {\n if (node.type === 0 || node.type === 1 || node.type === 11 || node.type === 10) {\n return () => {\n const children = node.children;\n let currentContainer = void 0;\n let hasText = false;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isText$1(child)) {\n hasText = true;\n for (let j = i + 1; j < children.length; j++) {\n const next = children[j];\n if (isText$1(next)) {\n if (!currentContainer) {\n currentContainer = children[i] = createCompoundExpression(\n [child],\n child.loc\n );\n }\n currentContainer.children.push(` + `, next);\n children.splice(j, 1);\n j--;\n } else {\n currentContainer = void 0;\n break;\n }\n }\n }\n }\n if (!hasText || // if this is a plain element with a single text child, leave it\n // as-is since the runtime has dedicated fast path for this by directly\n // setting textContent of the element.\n // for component root it's always normalized anyway.\n children.length === 1 && (node.type === 0 || node.type === 1 && node.tagType === 0 && // #3756\n // custom directives can potentially add DOM elements arbitrarily,\n // we need to avoid setting textContent of the element at runtime\n // to avoid accidentally overwriting the DOM elements added\n // by the user through custom directives.\n !node.props.find(\n (p) => p.type === 7 && !context.directiveTransforms[p.name]\n ) && // in compat mode, <template> tags with no special directives\n // will be rendered as a fragment so its children must be\n // converted into vnodes.\n !(node.tag === \"template\"))) {\n return;\n }\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isText$1(child) || child.type === 8) {\n const callArgs = [];\n if (child.type !== 2 || child.content !== \" \") {\n callArgs.push(child);\n }\n if (!context.ssr && getConstantType(child, context) === 0) {\n callArgs.push(\n 1 + (!!(process.env.NODE_ENV !== \"production\") ? ` /* ${PatchFlagNames[1]} */` : ``)\n );\n }\n children[i] = {\n type: 12,\n content: child,\n loc: child.loc,\n codegenNode: createCallExpression(\n context.helper(CREATE_TEXT),\n callArgs\n )\n };\n }\n }\n };\n }\n};\n\nconst seen$1 = /* @__PURE__ */ new WeakSet();\nconst transformOnce = (node, context) => {\n if (node.type === 1 && findDir(node, \"once\", true)) {\n if (seen$1.has(node) || context.inVOnce || context.inSSR) {\n return;\n }\n seen$1.add(node);\n context.inVOnce = true;\n context.helper(SET_BLOCK_TRACKING);\n return () => {\n context.inVOnce = false;\n const cur = context.currentNode;\n if (cur.codegenNode) {\n cur.codegenNode = context.cache(\n cur.codegenNode,\n true,\n true\n );\n }\n };\n }\n};\n\nconst transformModel = (dir, node, context) => {\n const { exp, arg } = dir;\n if (!exp) {\n context.onError(\n createCompilerError(41, dir.loc)\n );\n return createTransformProps();\n }\n const rawExp = exp.loc.source.trim();\n const expString = exp.type === 4 ? exp.content : rawExp;\n const bindingType = context.bindingMetadata[rawExp];\n if (bindingType === \"props\" || bindingType === \"props-aliased\") {\n context.onError(createCompilerError(44, exp.loc));\n return createTransformProps();\n }\n if (!expString.trim() || !isMemberExpression(exp) && true) {\n context.onError(\n createCompilerError(42, exp.loc)\n );\n return createTransformProps();\n }\n const propName = arg ? arg : createSimpleExpression(\"modelValue\", true);\n const eventName = arg ? isStaticExp(arg) ? `onUpdate:${camelize(arg.content)}` : createCompoundExpression(['\"onUpdate:\" + ', arg]) : `onUpdate:modelValue`;\n let assignmentExp;\n const eventArg = context.isTS ? `($event: any)` : `$event`;\n {\n assignmentExp = createCompoundExpression([\n `${eventArg} => ((`,\n exp,\n `) = $event)`\n ]);\n }\n const props = [\n // modelValue: foo\n createObjectProperty(propName, dir.exp),\n // \"onUpdate:modelValue\": $event => (foo = $event)\n createObjectProperty(eventName, assignmentExp)\n ];\n if (dir.modifiers.length && node.tagType === 1) {\n const modifiers = dir.modifiers.map((m) => m.content).map((m) => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`).join(`, `);\n const modifiersKey = arg ? isStaticExp(arg) ? `${arg.content}Modifiers` : createCompoundExpression([arg, ' + \"Modifiers\"']) : `modelModifiers`;\n props.push(\n createObjectProperty(\n modifiersKey,\n createSimpleExpression(\n `{ ${modifiers} }`,\n false,\n dir.loc,\n 2\n )\n )\n );\n }\n return createTransformProps(props);\n};\nfunction createTransformProps(props = []) {\n return { props };\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/;\nconst transformFilter = (node, context) => {\n if (!isCompatEnabled(\"COMPILER_FILTERS\", context)) {\n return;\n }\n if (node.type === 5) {\n rewriteFilter(node.content, context);\n } else if (node.type === 1) {\n node.props.forEach((prop) => {\n if (prop.type === 7 && prop.name !== \"for\" && prop.exp) {\n rewriteFilter(prop.exp, context);\n }\n });\n }\n};\nfunction rewriteFilter(node, context) {\n if (node.type === 4) {\n parseFilter(node, context);\n } else {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n if (typeof child !== \"object\") continue;\n if (child.type === 4) {\n parseFilter(child, context);\n } else if (child.type === 8) {\n rewriteFilter(node, context);\n } else if (child.type === 5) {\n rewriteFilter(child.content, context);\n }\n }\n }\n}\nfunction parseFilter(node, context) {\n const exp = node.content;\n let inSingle = false;\n let inDouble = false;\n let inTemplateString = false;\n let inRegex = false;\n let curly = 0;\n let square = 0;\n let paren = 0;\n let lastFilterIndex = 0;\n let c, prev, i, expression, filters = [];\n for (i = 0; i < exp.length; i++) {\n prev = c;\n c = exp.charCodeAt(i);\n if (inSingle) {\n if (c === 39 && prev !== 92) inSingle = false;\n } else if (inDouble) {\n if (c === 34 && prev !== 92) inDouble = false;\n } else if (inTemplateString) {\n if (c === 96 && prev !== 92) inTemplateString = false;\n } else if (inRegex) {\n if (c === 47 && prev !== 92) inRegex = false;\n } else if (c === 124 && // pipe\n exp.charCodeAt(i + 1) !== 124 && exp.charCodeAt(i - 1) !== 124 && !curly && !square && !paren) {\n if (expression === void 0) {\n lastFilterIndex = i + 1;\n expression = exp.slice(0, i).trim();\n } else {\n pushFilter();\n }\n } else {\n switch (c) {\n case 34:\n inDouble = true;\n break;\n // \"\n case 39:\n inSingle = true;\n break;\n // '\n case 96:\n inTemplateString = true;\n break;\n // `\n case 40:\n paren++;\n break;\n // (\n case 41:\n paren--;\n break;\n // )\n case 91:\n square++;\n break;\n // [\n case 93:\n square--;\n break;\n // ]\n case 123:\n curly++;\n break;\n // {\n case 125:\n curly--;\n break;\n }\n if (c === 47) {\n let j = i - 1;\n let p;\n for (; j >= 0; j--) {\n p = exp.charAt(j);\n if (p !== \" \") break;\n }\n if (!p || !validDivisionCharRE.test(p)) {\n inRegex = true;\n }\n }\n }\n }\n if (expression === void 0) {\n expression = exp.slice(0, i).trim();\n } else if (lastFilterIndex !== 0) {\n pushFilter();\n }\n function pushFilter() {\n filters.push(exp.slice(lastFilterIndex, i).trim());\n lastFilterIndex = i + 1;\n }\n if (filters.length) {\n !!(process.env.NODE_ENV !== \"production\") && warnDeprecation(\n \"COMPILER_FILTERS\",\n context,\n node.loc\n );\n for (i = 0; i < filters.length; i++) {\n expression = wrapFilter(expression, filters[i], context);\n }\n node.content = expression;\n node.ast = void 0;\n }\n}\nfunction wrapFilter(exp, filter, context) {\n context.helper(RESOLVE_FILTER);\n const i = filter.indexOf(\"(\");\n if (i < 0) {\n context.filters.add(filter);\n return `${toValidAssetId(filter, \"filter\")}(${exp})`;\n } else {\n const name = filter.slice(0, i);\n const args = filter.slice(i + 1);\n context.filters.add(name);\n return `${toValidAssetId(name, \"filter\")}(${exp}${args !== \")\" ? \",\" + args : args}`;\n }\n}\n\nconst seen = /* @__PURE__ */ new WeakSet();\nconst transformMemo = (node, context) => {\n if (node.type === 1) {\n const dir = findDir(node, \"memo\");\n if (!dir || seen.has(node) || context.inSSR) {\n return;\n }\n seen.add(node);\n return () => {\n const codegenNode = node.codegenNode || context.currentNode.codegenNode;\n if (codegenNode && codegenNode.type === 13) {\n if (node.tagType !== 1) {\n convertToBlock(codegenNode, context);\n }\n node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\n dir.exp,\n createFunctionExpression(void 0, codegenNode),\n `_cache`,\n String(context.cached.length)\n ]);\n context.cached.push(null);\n }\n };\n }\n};\n\nconst transformVBindShorthand = (node, context) => {\n if (node.type === 1) {\n for (const prop of node.props) {\n if (prop.type === 7 && prop.name === \"bind\" && !prop.exp) {\n const arg = prop.arg;\n if (arg.type !== 4 || !arg.isStatic) {\n context.onError(\n createCompilerError(\n 52,\n arg.loc\n )\n );\n prop.exp = createSimpleExpression(\"\", true, arg.loc);\n } else {\n const propName = camelize(arg.content);\n if (validFirstIdentCharRE.test(propName[0]) || // allow hyphen first char for https://github.com/vuejs/language-tools/pull/3424\n propName[0] === \"-\") {\n prop.exp = createSimpleExpression(propName, false, arg.loc);\n }\n }\n }\n }\n }\n};\n\nfunction getBaseTransformPreset(prefixIdentifiers) {\n return [\n [\n transformVBindShorthand,\n transformOnce,\n transformIf,\n transformMemo,\n transformFor,\n ...[transformFilter] ,\n ...!!(process.env.NODE_ENV !== \"production\") ? [transformExpression] : [],\n transformSlotOutlet,\n transformElement,\n trackSlotScopes,\n transformText\n ],\n {\n on: transformOn,\n bind: transformBind,\n model: transformModel\n }\n ];\n}\nfunction baseCompile(source, options = {}) {\n const onError = options.onError || defaultOnError;\n const isModuleMode = options.mode === \"module\";\n {\n if (options.prefixIdentifiers === true) {\n onError(createCompilerError(47));\n } else if (isModuleMode) {\n onError(createCompilerError(48));\n }\n }\n const prefixIdentifiers = false;\n if (options.cacheHandlers) {\n onError(createCompilerError(49));\n }\n if (options.scopeId && !isModuleMode) {\n onError(createCompilerError(50));\n }\n const resolvedOptions = extend({}, options, {\n prefixIdentifiers\n });\n const ast = isString(source) ? baseParse(source, resolvedOptions) : source;\n const [nodeTransforms, directiveTransforms] = getBaseTransformPreset();\n transform(\n ast,\n extend({}, resolvedOptions, {\n nodeTransforms: [\n ...nodeTransforms,\n ...options.nodeTransforms || []\n // user transforms\n ],\n directiveTransforms: extend(\n {},\n directiveTransforms,\n options.directiveTransforms || {}\n // user transforms\n )\n })\n );\n return generate(ast, resolvedOptions);\n}\n\nconst BindingTypes = {\n \"DATA\": \"data\",\n \"PROPS\": \"props\",\n \"PROPS_ALIASED\": \"props-aliased\",\n \"SETUP_LET\": \"setup-let\",\n \"SETUP_CONST\": \"setup-const\",\n \"SETUP_REACTIVE_CONST\": \"setup-reactive-const\",\n \"SETUP_MAYBE_REF\": \"setup-maybe-ref\",\n \"SETUP_REF\": \"setup-ref\",\n \"OPTIONS\": \"options\",\n \"LITERAL_CONST\": \"literal-const\"\n};\n\nconst noopDirectiveTransform = () => ({ props: [] });\n\nexport { BASE_TRANSITION, BindingTypes, CAMELIZE, CAPITALIZE, CREATE_BLOCK, CREATE_COMMENT, CREATE_ELEMENT_BLOCK, CREATE_ELEMENT_VNODE, CREATE_SLOTS, CREATE_STATIC, CREATE_TEXT, CREATE_VNODE, CompilerDeprecationTypes, ConstantTypes, ElementTypes, ErrorCodes, FRAGMENT, GUARD_REACTIVE_PROPS, IS_MEMO_SAME, IS_REF, KEEP_ALIVE, MERGE_PROPS, NORMALIZE_CLASS, NORMALIZE_PROPS, NORMALIZE_STYLE, Namespaces, NodeTypes, OPEN_BLOCK, POP_SCOPE_ID, PUSH_SCOPE_ID, RENDER_LIST, RENDER_SLOT, RESOLVE_COMPONENT, RESOLVE_DIRECTIVE, RESOLVE_DYNAMIC_COMPONENT, RESOLVE_FILTER, SET_BLOCK_TRACKING, SUSPENSE, TELEPORT, TO_DISPLAY_STRING, TO_HANDLERS, TO_HANDLER_KEY, TS_NODE_TYPES, UNREF, WITH_CTX, WITH_DIRECTIVES, WITH_MEMO, advancePositionWithClone, advancePositionWithMutation, assert, baseCompile, baseParse, buildDirectiveArgs, buildProps, buildSlots, checkCompatEnabled, convertToBlock, createArrayExpression, createAssignmentExpression, createBlockStatement, createCacheExpression, createCallExpression, createCompilerError, createCompoundExpression, createConditionalExpression, createForLoopParams, createFunctionExpression, createIfStatement, createInterpolation, createObjectExpression, createObjectProperty, createReturnStatement, createRoot, createSequenceExpression, createSimpleExpression, createStructuralDirectiveTransform, createTemplateLiteral, createTransformContext, createVNodeCall, errorMessages, extractIdentifiers, findDir, findProp, forAliasRE, generate, getBaseTransformPreset, getConstantType, getMemoedVNodeCall, getVNodeBlockHelper, getVNodeHelper, hasDynamicKeyVBind, hasScopeRef, helperNameMap, injectProp, isCoreComponent, isFnExpression, isFnExpressionBrowser, isFnExpressionNode, isFunctionType, isInDestructureAssignment, isInNewExpression, isMemberExpression, isMemberExpressionBrowser, isMemberExpressionNode, isReferencedIdentifier, isSimpleIdentifier, isSlotOutlet, isStaticArgOf, isStaticExp, isStaticProperty, isStaticPropertyKey, isTemplateNode, isText$1 as isText, isVPre, isVSlot, locStub, noopDirectiveTransform, processExpression, processFor, processIf, processSlotOutlet, registerRuntimeHelpers, resolveComponentType, stringifyExpression, toValidAssetId, trackSlotScopes, trackVForSlotScopes, transform, transformBind, transformElement, transformExpression, transformModel, transformOn, transformVBindShorthand, traverseNode, unwrapTSNode, validFirstIdentCharRE, walkBlockDeclarations, walkFunctionParams, walkIdentifiers, warnDeprecation };\n","/**\n* @vue/compiler-dom v3.5.22\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { registerRuntimeHelpers, createSimpleExpression, createCompilerError, createObjectProperty, createCallExpression, getConstantType, TO_DISPLAY_STRING, transformModel as transformModel$1, findProp, hasDynamicKeyVBind, findDir, isStaticArgOf, transformOn as transformOn$1, isStaticExp, createCompoundExpression, checkCompatEnabled, noopDirectiveTransform, baseCompile, baseParse } from '@vue/compiler-core';\nexport * from '@vue/compiler-core';\nimport { isHTMLTag, isSVGTag, isMathMLTag, isVoidTag, parseStringStyle, makeMap, capitalize, extend } from '@vue/shared';\n\nconst V_MODEL_RADIO = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `vModelRadio` : ``);\nconst V_MODEL_CHECKBOX = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vModelCheckbox` : ``\n);\nconst V_MODEL_TEXT = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `vModelText` : ``);\nconst V_MODEL_SELECT = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vModelSelect` : ``\n);\nconst V_MODEL_DYNAMIC = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vModelDynamic` : ``\n);\nconst V_ON_WITH_MODIFIERS = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vOnModifiersGuard` : ``\n);\nconst V_ON_WITH_KEYS = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `vOnKeysGuard` : ``\n);\nconst V_SHOW = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `vShow` : ``);\nconst TRANSITION = Symbol(!!(process.env.NODE_ENV !== \"production\") ? `Transition` : ``);\nconst TRANSITION_GROUP = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? `TransitionGroup` : ``\n);\nregisterRuntimeHelpers({\n [V_MODEL_RADIO]: `vModelRadio`,\n [V_MODEL_CHECKBOX]: `vModelCheckbox`,\n [V_MODEL_TEXT]: `vModelText`,\n [V_MODEL_SELECT]: `vModelSelect`,\n [V_MODEL_DYNAMIC]: `vModelDynamic`,\n [V_ON_WITH_MODIFIERS]: `withModifiers`,\n [V_ON_WITH_KEYS]: `withKeys`,\n [V_SHOW]: `vShow`,\n [TRANSITION]: `Transition`,\n [TRANSITION_GROUP]: `TransitionGroup`\n});\n\nlet decoder;\nfunction decodeHtmlBrowser(raw, asAttr = false) {\n if (!decoder) {\n decoder = document.createElement(\"div\");\n }\n if (asAttr) {\n decoder.innerHTML = `<div foo=\"${raw.replace(/\"/g, \""\")}\">`;\n return decoder.children[0].getAttribute(\"foo\");\n } else {\n decoder.innerHTML = raw;\n return decoder.textContent;\n }\n}\n\nconst parserOptions = {\n parseMode: \"html\",\n isVoidTag,\n isNativeTag: (tag) => isHTMLTag(tag) || isSVGTag(tag) || isMathMLTag(tag),\n isPreTag: (tag) => tag === \"pre\",\n isIgnoreNewlineTag: (tag) => tag === \"pre\" || tag === \"textarea\",\n decodeEntities: decodeHtmlBrowser ,\n isBuiltInComponent: (tag) => {\n if (tag === \"Transition\" || tag === \"transition\") {\n return TRANSITION;\n } else if (tag === \"TransitionGroup\" || tag === \"transition-group\") {\n return TRANSITION_GROUP;\n }\n },\n // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n getNamespace(tag, parent, rootNamespace) {\n let ns = parent ? parent.ns : rootNamespace;\n if (parent && ns === 2) {\n if (parent.tag === \"annotation-xml\") {\n if (tag === \"svg\") {\n return 1;\n }\n if (parent.props.some(\n (a) => a.type === 6 && a.name === \"encoding\" && a.value != null && (a.value.content === \"text/html\" || a.value.content === \"application/xhtml+xml\")\n )) {\n ns = 0;\n }\n } else if (/^m(?:[ions]|text)$/.test(parent.tag) && tag !== \"mglyph\" && tag !== \"malignmark\") {\n ns = 0;\n }\n } else if (parent && ns === 1) {\n if (parent.tag === \"foreignObject\" || parent.tag === \"desc\" || parent.tag === \"title\") {\n ns = 0;\n }\n }\n if (ns === 0) {\n if (tag === \"svg\") {\n return 1;\n }\n if (tag === \"math\") {\n return 2;\n }\n }\n return ns;\n }\n};\n\nconst transformStyle = (node) => {\n if (node.type === 1) {\n node.props.forEach((p, i) => {\n if (p.type === 6 && p.name === \"style\" && p.value) {\n node.props[i] = {\n type: 7,\n name: `bind`,\n arg: createSimpleExpression(`style`, true, p.loc),\n exp: parseInlineCSS(p.value.content, p.loc),\n modifiers: [],\n loc: p.loc\n };\n }\n });\n }\n};\nconst parseInlineCSS = (cssText, loc) => {\n const normalized = parseStringStyle(cssText);\n return createSimpleExpression(\n JSON.stringify(normalized),\n false,\n loc,\n 3\n );\n};\n\nfunction createDOMCompilerError(code, loc) {\n return createCompilerError(\n code,\n loc,\n !!(process.env.NODE_ENV !== \"production\") || false ? DOMErrorMessages : void 0\n );\n}\nconst DOMErrorCodes = {\n \"X_V_HTML_NO_EXPRESSION\": 53,\n \"53\": \"X_V_HTML_NO_EXPRESSION\",\n \"X_V_HTML_WITH_CHILDREN\": 54,\n \"54\": \"X_V_HTML_WITH_CHILDREN\",\n \"X_V_TEXT_NO_EXPRESSION\": 55,\n \"55\": \"X_V_TEXT_NO_EXPRESSION\",\n \"X_V_TEXT_WITH_CHILDREN\": 56,\n \"56\": \"X_V_TEXT_WITH_CHILDREN\",\n \"X_V_MODEL_ON_INVALID_ELEMENT\": 57,\n \"57\": \"X_V_MODEL_ON_INVALID_ELEMENT\",\n \"X_V_MODEL_ARG_ON_ELEMENT\": 58,\n \"58\": \"X_V_MODEL_ARG_ON_ELEMENT\",\n \"X_V_MODEL_ON_FILE_INPUT_ELEMENT\": 59,\n \"59\": \"X_V_MODEL_ON_FILE_INPUT_ELEMENT\",\n \"X_V_MODEL_UNNECESSARY_VALUE\": 60,\n \"60\": \"X_V_MODEL_UNNECESSARY_VALUE\",\n \"X_V_SHOW_NO_EXPRESSION\": 61,\n \"61\": \"X_V_SHOW_NO_EXPRESSION\",\n \"X_TRANSITION_INVALID_CHILDREN\": 62,\n \"62\": \"X_TRANSITION_INVALID_CHILDREN\",\n \"X_IGNORED_SIDE_EFFECT_TAG\": 63,\n \"63\": \"X_IGNORED_SIDE_EFFECT_TAG\",\n \"__EXTEND_POINT__\": 64,\n \"64\": \"__EXTEND_POINT__\"\n};\nconst DOMErrorMessages = {\n [53]: `v-html is missing expression.`,\n [54]: `v-html will override element children.`,\n [55]: `v-text is missing expression.`,\n [56]: `v-text will override element children.`,\n [57]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\n [58]: `v-model argument is not supported on plain elements.`,\n [59]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\n [60]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\n [61]: `v-show is missing expression.`,\n [62]: `<Transition> expects exactly one child element or component.`,\n [63]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\n};\n\nconst transformVHtml = (dir, node, context) => {\n const { exp, loc } = dir;\n if (!exp) {\n context.onError(\n createDOMCompilerError(53, loc)\n );\n }\n if (node.children.length) {\n context.onError(\n createDOMCompilerError(54, loc)\n );\n node.children.length = 0;\n }\n return {\n props: [\n createObjectProperty(\n createSimpleExpression(`innerHTML`, true, loc),\n exp || createSimpleExpression(\"\", true)\n )\n ]\n };\n};\n\nconst transformVText = (dir, node, context) => {\n const { exp, loc } = dir;\n if (!exp) {\n context.onError(\n createDOMCompilerError(55, loc)\n );\n }\n if (node.children.length) {\n context.onError(\n createDOMCompilerError(56, loc)\n );\n node.children.length = 0;\n }\n return {\n props: [\n createObjectProperty(\n createSimpleExpression(`textContent`, true),\n exp ? getConstantType(exp, context) > 0 ? exp : createCallExpression(\n context.helperString(TO_DISPLAY_STRING),\n [exp],\n loc\n ) : createSimpleExpression(\"\", true)\n )\n ]\n };\n};\n\nconst transformModel = (dir, node, context) => {\n const baseResult = transformModel$1(dir, node, context);\n if (!baseResult.props.length || node.tagType === 1) {\n return baseResult;\n }\n if (dir.arg) {\n context.onError(\n createDOMCompilerError(\n 58,\n dir.arg.loc\n )\n );\n }\n function checkDuplicatedValue() {\n const value = findDir(node, \"bind\");\n if (value && isStaticArgOf(value.arg, \"value\")) {\n context.onError(\n createDOMCompilerError(\n 60,\n value.loc\n )\n );\n }\n }\n const { tag } = node;\n const isCustomElement = context.isCustomElement(tag);\n if (tag === \"input\" || tag === \"textarea\" || tag === \"select\" || isCustomElement) {\n let directiveToUse = V_MODEL_TEXT;\n let isInvalidType = false;\n if (tag === \"input\" || isCustomElement) {\n const type = findProp(node, `type`);\n if (type) {\n if (type.type === 7) {\n directiveToUse = V_MODEL_DYNAMIC;\n } else if (type.value) {\n switch (type.value.content) {\n case \"radio\":\n directiveToUse = V_MODEL_RADIO;\n break;\n case \"checkbox\":\n directiveToUse = V_MODEL_CHECKBOX;\n break;\n case \"file\":\n isInvalidType = true;\n context.onError(\n createDOMCompilerError(\n 59,\n dir.loc\n )\n );\n break;\n default:\n !!(process.env.NODE_ENV !== \"production\") && checkDuplicatedValue();\n break;\n }\n }\n } else if (hasDynamicKeyVBind(node)) {\n directiveToUse = V_MODEL_DYNAMIC;\n } else {\n !!(process.env.NODE_ENV !== \"production\") && checkDuplicatedValue();\n }\n } else if (tag === \"select\") {\n directiveToUse = V_MODEL_SELECT;\n } else {\n !!(process.env.NODE_ENV !== \"production\") && checkDuplicatedValue();\n }\n if (!isInvalidType) {\n baseResult.needRuntime = context.helper(directiveToUse);\n }\n } else {\n context.onError(\n createDOMCompilerError(\n 57,\n dir.loc\n )\n );\n }\n baseResult.props = baseResult.props.filter(\n (p) => !(p.key.type === 4 && p.key.content === \"modelValue\")\n );\n return baseResult;\n};\n\nconst isEventOptionModifier = /* @__PURE__ */ makeMap(`passive,once,capture`);\nconst isNonKeyModifier = /* @__PURE__ */ makeMap(\n // event propagation management\n `stop,prevent,self,ctrl,shift,alt,meta,exact,middle`\n);\nconst maybeKeyModifier = /* @__PURE__ */ makeMap(\"left,right\");\nconst isKeyboardEvent = /* @__PURE__ */ makeMap(`onkeyup,onkeydown,onkeypress`);\nconst resolveModifiers = (key, modifiers, context, loc) => {\n const keyModifiers = [];\n const nonKeyModifiers = [];\n const eventOptionModifiers = [];\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i].content;\n if (modifier === \"native\" && checkCompatEnabled(\n \"COMPILER_V_ON_NATIVE\",\n context,\n loc\n )) {\n eventOptionModifiers.push(modifier);\n } else if (isEventOptionModifier(modifier)) {\n eventOptionModifiers.push(modifier);\n } else {\n if (maybeKeyModifier(modifier)) {\n if (isStaticExp(key)) {\n if (isKeyboardEvent(key.content.toLowerCase())) {\n keyModifiers.push(modifier);\n } else {\n nonKeyModifiers.push(modifier);\n }\n } else {\n keyModifiers.push(modifier);\n nonKeyModifiers.push(modifier);\n }\n } else {\n if (isNonKeyModifier(modifier)) {\n nonKeyModifiers.push(modifier);\n } else {\n keyModifiers.push(modifier);\n }\n }\n }\n }\n return {\n keyModifiers,\n nonKeyModifiers,\n eventOptionModifiers\n };\n};\nconst transformClick = (key, event) => {\n const isStaticClick = isStaticExp(key) && key.content.toLowerCase() === \"onclick\";\n return isStaticClick ? createSimpleExpression(event, true) : key.type !== 4 ? createCompoundExpression([\n `(`,\n key,\n `) === \"onClick\" ? \"${event}\" : (`,\n key,\n `)`\n ]) : key;\n};\nconst transformOn = (dir, node, context) => {\n return transformOn$1(dir, node, context, (baseResult) => {\n const { modifiers } = dir;\n if (!modifiers.length) return baseResult;\n let { key, value: handlerExp } = baseResult.props[0];\n const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\n if (nonKeyModifiers.includes(\"right\")) {\n key = transformClick(key, `onContextmenu`);\n }\n if (nonKeyModifiers.includes(\"middle\")) {\n key = transformClick(key, `onMouseup`);\n }\n if (nonKeyModifiers.length) {\n handlerExp = createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\n handlerExp,\n JSON.stringify(nonKeyModifiers)\n ]);\n }\n if (keyModifiers.length && // if event name is dynamic, always wrap with keys guard\n (!isStaticExp(key) || isKeyboardEvent(key.content.toLowerCase()))) {\n handlerExp = createCallExpression(context.helper(V_ON_WITH_KEYS), [\n handlerExp,\n JSON.stringify(keyModifiers)\n ]);\n }\n if (eventOptionModifiers.length) {\n const modifierPostfix = eventOptionModifiers.map(capitalize).join(\"\");\n key = isStaticExp(key) ? createSimpleExpression(`${key.content}${modifierPostfix}`, true) : createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\n }\n return {\n props: [createObjectProperty(key, handlerExp)]\n };\n });\n};\n\nconst transformShow = (dir, node, context) => {\n const { exp, loc } = dir;\n if (!exp) {\n context.onError(\n createDOMCompilerError(61, loc)\n );\n }\n return {\n props: [],\n needRuntime: context.helper(V_SHOW)\n };\n};\n\nconst transformTransition = (node, context) => {\n if (node.type === 1 && node.tagType === 1) {\n const component = context.isBuiltInComponent(node.tag);\n if (component === TRANSITION) {\n return () => {\n if (!node.children.length) {\n return;\n }\n if (hasMultipleChildren(node)) {\n context.onError(\n createDOMCompilerError(\n 62,\n {\n start: node.children[0].loc.start,\n end: node.children[node.children.length - 1].loc.end,\n source: \"\"\n }\n )\n );\n }\n const child = node.children[0];\n if (child.type === 1) {\n for (const p of child.props) {\n if (p.type === 7 && p.name === \"show\") {\n node.props.push({\n type: 6,\n name: \"persisted\",\n nameLoc: node.loc,\n value: void 0,\n loc: node.loc\n });\n }\n }\n }\n };\n }\n }\n};\nfunction hasMultipleChildren(node) {\n const children = node.children = node.children.filter(\n (c) => c.type !== 3 && !(c.type === 2 && !c.content.trim())\n );\n const child = children[0];\n return children.length !== 1 || child.type === 11 || child.type === 9 && child.branches.some(hasMultipleChildren);\n}\n\nconst ignoreSideEffectTags = (node, context) => {\n if (node.type === 1 && node.tagType === 0 && (node.tag === \"script\" || node.tag === \"style\")) {\n !!(process.env.NODE_ENV !== \"production\") && context.onError(\n createDOMCompilerError(\n 63,\n node.loc\n )\n );\n context.removeNode();\n }\n};\n\nfunction isValidHTMLNesting(parent, child) {\n if (parent === \"template\") {\n return true;\n }\n if (parent in onlyValidChildren) {\n return onlyValidChildren[parent].has(child);\n }\n if (child in onlyValidParents) {\n return onlyValidParents[child].has(parent);\n }\n if (parent in knownInvalidChildren) {\n if (knownInvalidChildren[parent].has(child)) return false;\n }\n if (child in knownInvalidParents) {\n if (knownInvalidParents[child].has(parent)) return false;\n }\n return true;\n}\nconst headings = /* @__PURE__ */ new Set([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]);\nconst emptySet = /* @__PURE__ */ new Set([]);\nconst onlyValidChildren = {\n head: /* @__PURE__ */ new Set([\n \"base\",\n \"basefront\",\n \"bgsound\",\n \"link\",\n \"meta\",\n \"title\",\n \"noscript\",\n \"noframes\",\n \"style\",\n \"script\",\n \"template\"\n ]),\n optgroup: /* @__PURE__ */ new Set([\"option\"]),\n select: /* @__PURE__ */ new Set([\"optgroup\", \"option\", \"hr\"]),\n // table\n table: /* @__PURE__ */ new Set([\"caption\", \"colgroup\", \"tbody\", \"tfoot\", \"thead\"]),\n tr: /* @__PURE__ */ new Set([\"td\", \"th\"]),\n colgroup: /* @__PURE__ */ new Set([\"col\"]),\n tbody: /* @__PURE__ */ new Set([\"tr\"]),\n thead: /* @__PURE__ */ new Set([\"tr\"]),\n tfoot: /* @__PURE__ */ new Set([\"tr\"]),\n // these elements can not have any children elements\n script: emptySet,\n iframe: emptySet,\n option: emptySet,\n textarea: emptySet,\n style: emptySet,\n title: emptySet\n};\nconst onlyValidParents = {\n // sections\n html: emptySet,\n body: /* @__PURE__ */ new Set([\"html\"]),\n head: /* @__PURE__ */ new Set([\"html\"]),\n // table\n td: /* @__PURE__ */ new Set([\"tr\"]),\n colgroup: /* @__PURE__ */ new Set([\"table\"]),\n caption: /* @__PURE__ */ new Set([\"table\"]),\n tbody: /* @__PURE__ */ new Set([\"table\"]),\n tfoot: /* @__PURE__ */ new Set([\"table\"]),\n col: /* @__PURE__ */ new Set([\"colgroup\"]),\n th: /* @__PURE__ */ new Set([\"tr\"]),\n thead: /* @__PURE__ */ new Set([\"table\"]),\n tr: /* @__PURE__ */ new Set([\"tbody\", \"thead\", \"tfoot\"]),\n // data list\n dd: /* @__PURE__ */ new Set([\"dl\", \"div\"]),\n dt: /* @__PURE__ */ new Set([\"dl\", \"div\"]),\n // other\n figcaption: /* @__PURE__ */ new Set([\"figure\"]),\n // li: new Set([\"ul\", \"ol\"]),\n summary: /* @__PURE__ */ new Set([\"details\"]),\n area: /* @__PURE__ */ new Set([\"map\"])\n};\nconst knownInvalidChildren = {\n p: /* @__PURE__ */ new Set([\n \"address\",\n \"article\",\n \"aside\",\n \"blockquote\",\n \"center\",\n \"details\",\n \"dialog\",\n \"dir\",\n \"div\",\n \"dl\",\n \"fieldset\",\n \"figure\",\n \"footer\",\n \"form\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"header\",\n \"hgroup\",\n \"hr\",\n \"li\",\n \"main\",\n \"nav\",\n \"menu\",\n \"ol\",\n \"p\",\n \"pre\",\n \"section\",\n \"table\",\n \"ul\"\n ]),\n svg: /* @__PURE__ */ new Set([\n \"b\",\n \"blockquote\",\n \"br\",\n \"code\",\n \"dd\",\n \"div\",\n \"dl\",\n \"dt\",\n \"em\",\n \"embed\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"hr\",\n \"i\",\n \"img\",\n \"li\",\n \"menu\",\n \"meta\",\n \"ol\",\n \"p\",\n \"pre\",\n \"ruby\",\n \"s\",\n \"small\",\n \"span\",\n \"strong\",\n \"sub\",\n \"sup\",\n \"table\",\n \"u\",\n \"ul\",\n \"var\"\n ])\n};\nconst knownInvalidParents = {\n a: /* @__PURE__ */ new Set([\"a\"]),\n button: /* @__PURE__ */ new Set([\"button\"]),\n dd: /* @__PURE__ */ new Set([\"dd\", \"dt\"]),\n dt: /* @__PURE__ */ new Set([\"dd\", \"dt\"]),\n form: /* @__PURE__ */ new Set([\"form\"]),\n li: /* @__PURE__ */ new Set([\"li\"]),\n h1: headings,\n h2: headings,\n h3: headings,\n h4: headings,\n h5: headings,\n h6: headings\n};\n\nconst validateHtmlNesting = (node, context) => {\n if (node.type === 1 && node.tagType === 0 && context.parent && context.parent.type === 1 && context.parent.tagType === 0 && !isValidHTMLNesting(context.parent.tag, node.tag)) {\n const error = new SyntaxError(\n `<${node.tag}> cannot be child of <${context.parent.tag}>, according to HTML specifications. This can cause hydration errors or potentially disrupt future functionality.`\n );\n error.loc = node.loc;\n context.onWarn(error);\n }\n};\n\nconst DOMNodeTransforms = [\n transformStyle,\n ...!!(process.env.NODE_ENV !== \"production\") ? [transformTransition, validateHtmlNesting] : []\n];\nconst DOMDirectiveTransforms = {\n cloak: noopDirectiveTransform,\n html: transformVHtml,\n text: transformVText,\n model: transformModel,\n // override compiler-core\n on: transformOn,\n // override compiler-core\n show: transformShow\n};\nfunction compile(src, options = {}) {\n return baseCompile(\n src,\n extend({}, parserOptions, options, {\n nodeTransforms: [\n // ignore <script> and <tag>\n // this is not put inside DOMNodeTransforms because that list is used\n // by compiler-ssr to generate vnode fallback branches\n ignoreSideEffectTags,\n ...DOMNodeTransforms,\n ...options.nodeTransforms || []\n ],\n directiveTransforms: extend(\n {},\n DOMDirectiveTransforms,\n options.directiveTransforms || {}\n ),\n transformHoist: null \n })\n );\n}\nfunction parse(template, options = {}) {\n return baseParse(template, extend({}, parserOptions, options));\n}\n\nexport { DOMDirectiveTransforms, DOMErrorCodes, DOMErrorMessages, DOMNodeTransforms, TRANSITION, TRANSITION_GROUP, V_MODEL_CHECKBOX, V_MODEL_DYNAMIC, V_MODEL_RADIO, V_MODEL_SELECT, V_MODEL_TEXT, V_ON_WITH_KEYS, V_ON_WITH_MODIFIERS, V_SHOW, compile, createDOMCompilerError, parse, parserOptions, transformStyle };\n","/**\n* vue v3.5.22\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar compilerDom = require('@vue/compiler-dom');\nvar runtimeDom = require('@vue/runtime-dom');\nvar shared = require('@vue/shared');\n\nfunction _interopNamespaceDefault(e) {\n var n = Object.create(null);\n if (e) {\n for (var k in e) {\n n[k] = e[k];\n }\n }\n n.default = e;\n return Object.freeze(n);\n}\n\nvar runtimeDom__namespace = /*#__PURE__*/_interopNamespaceDefault(runtimeDom);\n\nconst compileCache = /* @__PURE__ */ Object.create(null);\nfunction compileToFunction(template, options) {\n if (!shared.isString(template)) {\n if (template.nodeType) {\n template = template.innerHTML;\n } else {\n return shared.NOOP;\n }\n }\n const key = shared.genCacheKey(template, options);\n const cached = compileCache[key];\n if (cached) {\n return cached;\n }\n if (template[0] === \"#\") {\n const el = document.querySelector(template);\n template = el ? el.innerHTML : ``;\n }\n const opts = shared.extend(\n {\n hoistStatic: true,\n onError: void 0,\n onWarn: shared.NOOP\n },\n options\n );\n if (!opts.isCustomElement && typeof customElements !== \"undefined\") {\n opts.isCustomElement = (tag) => !!customElements.get(tag);\n }\n const { code } = compilerDom.compile(template, opts);\n const render = new Function(\"Vue\", code)(runtimeDom__namespace);\n render._rc = true;\n return compileCache[key] = render;\n}\nruntimeDom.registerRuntimeCompiler(compileToFunction);\n\nexports.compile = compileToFunction;\nObject.keys(runtimeDom).forEach(function (k) {\n if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = runtimeDom[k];\n});\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./dist/vue.cjs.prod.js')\n} else {\n module.exports = require('./dist/vue.cjs.js')\n}\n","/*!\n * Cropper.js v1.6.2\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2024-04-21T07:43:05.335Z\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\n})(this, (function () { 'use strict';\n\n function ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n }\n function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n }\n function _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n }\n function _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n }\n function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n function _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'cropper';\n\n // Actions\n var ACTION_ALL = 'all';\n var ACTION_CROP = 'crop';\n var ACTION_MOVE = 'move';\n var ACTION_ZOOM = 'zoom';\n var ACTION_EAST = 'e';\n var ACTION_WEST = 'w';\n var ACTION_SOUTH = 's';\n var ACTION_NORTH = 'n';\n var ACTION_NORTH_EAST = 'ne';\n var ACTION_NORTH_WEST = 'nw';\n var ACTION_SOUTH_EAST = 'se';\n var ACTION_SOUTH_WEST = 'sw';\n\n // Classes\n var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n // Data keys\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n // Drag modes\n var DRAG_MODE_CROP = 'crop';\n var DRAG_MODE_MOVE = 'move';\n var DRAG_MODE_NONE = 'none';\n\n // Events\n var EVENT_CROP = 'crop';\n var EVENT_CROP_END = 'cropend';\n var EVENT_CROP_MOVE = 'cropmove';\n var EVENT_CROP_START = 'cropstart';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom';\n\n // Mime types\n var MIME_TYPE_JPEG = 'image/jpeg';\n\n // RegExps\n var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n var REGEXP_DATA_URL = /^data:/;\n var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n var REGEXP_TAG_NAME = /^img|canvas$/i;\n\n // Misc\n // Inspired by the default width and height of a canvas element.\n var MIN_CONTAINER_WIDTH = 200;\n var MIN_CONTAINER_HEIGHT = 100;\n\n var DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n };\n\n var TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\n\n /**\n * Check if the given value is not a number.\n */\n var isNaN = Number.isNaN || WINDOW.isNaN;\n\n /**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n\n /**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\n var isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n };\n\n /**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n\n /**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n /**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n function isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n function isFunction(value) {\n return typeof value === 'function';\n }\n var slice = Array.prototype.slice;\n\n /**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\n function toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n }\n\n /**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n function forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n }\n\n /**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\n var assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n return target;\n };\n var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n /**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\n function normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n }\n var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n /**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n function setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n style[property] = value;\n });\n }\n\n /**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n function hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n }\n\n /**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n function addClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n }\n\n /**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n function removeClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n }\n\n /**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n function toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n }\n var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n /**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n function toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n }\n\n /**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n function getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n }\n\n /**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n function setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n }\n\n /**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\n function removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n }\n var REGEXP_SPACES = /\\s\\s*/;\n var onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n }();\n\n /**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n }\n\n /**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n }\n\n /**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n function dispatchEvent(element, type, data) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n }\n\n /**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n function getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n }\n var location = WINDOW.location;\n var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n /**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\n function isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n }\n\n /**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\n function addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n }\n\n /**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n function getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n }\n\n /**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n function getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n }\n\n /**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n function getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n }\n\n /**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n function getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n }\n\n /**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\n function getAdjustedSizes(_ref4) {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n }\n\n /**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\n function getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n }\n\n /**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\n function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n }\n var fromCharCode = String.fromCharCode;\n\n /**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\n function getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n }\n var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n /**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\n function dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n }\n\n /**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\n function arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n\n // Chunk Typed Array for better performance (#435)\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n }\n\n /**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\n function resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n return orientation;\n }\n\n /**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\n function parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n }\n\n var render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true);\n\n // Initialize auto crop area\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n // The width/height of auto crop area must large than \"minWidth/Height\"\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n // The min/maxCropBoxWidth/Height must be less than container's width/height\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n }\n\n // The minWidth/Height must be less than maxWidth/Height\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n };\n\n var preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n if (!preview) {\n return;\n }\n var previews = preview;\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img');\n\n // Save the original size for recover\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.src = url;\n img.alt = alt;\n\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n if (!this.cropped || this.disabled) {\n return;\n }\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n };\n\n var events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n };\n\n var handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n // Resize when width changed or height changed\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n this.render();\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n if (this.disabled\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n var options = this.options,\n pointers = this.pointers;\n var action;\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n // This line is required for preventing page zooming in iOS browsers\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n if (this.disabled || !action) {\n return;\n }\n var pointers = this.pointers;\n event.preventDefault();\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n var action = this.action,\n pointers = this.pointers;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n };\n\n var change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset;\n\n // Locking aspect ratio in \"free mode\" by holding shift key\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n break;\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n break;\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n break;\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n break;\n }\n };\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n\n // Resize crop box\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_SOUTH);\n height += range.y;\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n\n // Move canvas\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n\n // Zoom canvas\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n\n // Create crop box\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n if (range.y < 0) {\n top -= height;\n }\n\n // Show the crop box if is hidden\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n break;\n }\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n };\n\n var methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true);\n\n // Render canvas after crop box rendered\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n return this;\n },\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n if (!element[NAMESPACE]) {\n return this;\n }\n element[NAMESPACE] = undefined;\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n this.uncreate();\n return this;\n },\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n if (changed) {\n this.renderCanvas(true);\n }\n }\n return this;\n },\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n return this;\n },\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n return data;\n },\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n var ratio = imageData.width / imageData.naturalWidth;\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n this.setCropBoxData(cropBoxData);\n }\n return this;\n },\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n return data;\n },\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n return data || {};\n },\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.renderCropBox();\n }\n return this;\n },\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n // Returns the source canvas if it is not cropped.\n if (!this.cropped) {\n return source;\n }\n var _this$getData = this.getData(options.rounded),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n var sourceWidth = source.width;\n var sourceHeight = source.height;\n\n // Source canvas parameters\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight;\n\n // Destination canvas parameters\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n var params = [srcX, srcY, srcWidth, srcHeight];\n\n // Avoid \"IndexSizeError\"\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n }\n\n // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n if (this.ready) {\n this.initCropBox();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n return this;\n },\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n return this;\n }\n };\n\n var AnotherCropper = WINDOW.Cropper;\n var Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cropper);\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n return _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n if (tagName === 'img') {\n this.isImg = true;\n\n // e.g.: \"img/picture.jpg\"\n url = element.getAttribute('src') || '';\n this.originalUrl = url;\n\n // Stop when it's a blank image\n if (!url) {\n return;\n }\n\n // e.g.: \"https://example.com/img/picture.jpg\"\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n if (!url) {\n return;\n }\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n }\n\n // Only IE10+ supports Typed Arrays\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n }\n\n // Detect the mime type of the image directly if it is a Data URL\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n return;\n }\n\n // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n\n // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n };\n\n // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n // The third parameter is required for avoiding side-effect (#682)\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n var _parseOrientation = parseOrientation(orientation);\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n }\n\n // Bust cache when there is not a \"crossOrigin\" property (#519)\n crossOriginUrl = addTimestamp(url);\n }\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n _this2.build();\n };\n\n // Most modern browsers (excepts iOS WebKit)\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n sizingImage.src = image.src;\n\n // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n var element = this.element,\n options = this.options,\n image = this.image;\n\n // Create cropper elements\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image);\n\n // Hide the original image\n addClass(element, CLASS_HIDDEN);\n\n // Inserts the cropper after to the current image\n container.insertBefore(cropper, element.nextSibling);\n\n // Show the hidden image\n removeClass(image, CLASS_HIDE);\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n if (options.autoCrop) {\n this.crop();\n }\n this.setData(options.data);\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n this.ready = false;\n this.unbind();\n this.resetPreview();\n var parentNode = this.cropper.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.cropper);\n }\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n }();\n assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n return Cropper;\n\n}));\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _vue = require('vue');\n\nvar _cropperjs = require('cropperjs');\n\nvar _cropperjs2 = _interopRequireDefault(_cropperjs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar previewPropType = typeof window === 'undefined' ? [String, Array] : [String, Array, Element, NodeList];\n\nexports.default = {\n render: function render() {\n var crossorigin = this.crossorigin || undefined;\n\n return (0, _vue.h)('div', { style: this.containerStyle }, [(0, _vue.h)('img', {\n ref: 'img',\n src: this.src,\n alt: this.alt || 'image',\n style: [{ 'max-width': '100%' }, this.imgStyle],\n crossorigin: crossorigin\n })]);\n },\n\n props: {\n containerStyle: Object,\n src: {\n type: String,\n default: ''\n },\n alt: String,\n imgStyle: Object,\n\n viewMode: Number,\n dragMode: String,\n initialAspectRatio: Number,\n aspectRatio: Number,\n data: Object,\n preview: previewPropType,\n responsive: {\n type: Boolean,\n default: true\n },\n restore: {\n type: Boolean,\n default: true\n },\n checkCrossOrigin: {\n type: Boolean,\n default: true\n },\n checkOrientation: {\n type: Boolean,\n default: true\n },\n crossorigin: {\n type: String\n },\n modal: {\n type: Boolean,\n default: true\n },\n guides: {\n type: Boolean,\n default: true\n },\n center: {\n type: Boolean,\n default: true\n },\n highlight: {\n type: Boolean,\n default: true\n },\n background: {\n type: Boolean,\n default: true\n },\n autoCrop: {\n type: Boolean,\n default: true\n },\n autoCropArea: Number,\n movable: {\n type: Boolean,\n default: true\n },\n rotatable: {\n type: Boolean,\n default: true\n },\n scalable: {\n type: Boolean,\n default: true\n },\n zoomable: {\n type: Boolean,\n default: true\n },\n zoomOnTouch: {\n type: Boolean,\n default: true\n },\n zoomOnWheel: {\n type: Boolean,\n default: true\n },\n wheelZoomRatio: Number,\n cropBoxMovable: {\n type: Boolean,\n default: true\n },\n cropBoxResizable: {\n type: Boolean,\n default: true\n },\n toggleDragModeOnDblclick: {\n type: Boolean,\n default: true\n },\n\n minCanvasWidth: Number,\n minCanvasHeight: Number,\n minCropBoxWidth: Number,\n minCropBoxHeight: Number,\n minContainerWidth: Number,\n minContainerHeight: Number,\n\n ready: Function,\n cropstart: Function,\n cropmove: Function,\n cropend: Function,\n crop: Function,\n zoom: Function\n },\n mounted: function mounted() {\n var _$options$props = this.$options.props,\n containerStyle = _$options$props.containerStyle,\n src = _$options$props.src,\n alt = _$options$props.alt,\n imgStyle = _$options$props.imgStyle,\n data = _objectWithoutProperties(_$options$props, ['containerStyle', 'src', 'alt', 'imgStyle']);\n\n var props = {};\n\n for (var key in data) {\n if (this[key] !== undefined) {\n props[key] = this[key];\n }\n }\n\n this.cropper = new _cropperjs2.default(this.$refs.img, props);\n },\n\n methods: {\n reset: function reset() {\n return this.cropper.reset();\n },\n clear: function clear() {\n return this.cropper.clear();\n },\n initCrop: function initCrop() {\n return this.cropper.crop();\n },\n replace: function replace(url) {\n var onlyColorChanged = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n return this.cropper.replace(url, onlyColorChanged);\n },\n enable: function enable() {\n return this.cropper.enable();\n },\n disable: function disable() {\n return this.cropper.disable();\n },\n destroy: function destroy() {\n return this.cropper.destroy();\n },\n move: function move(offsetX, offsetY) {\n return this.cropper.move(offsetX, offsetY);\n },\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n\n return this.cropper.moveTo(x, y);\n },\n relativeZoom: function relativeZoom(ratio, _originalEvent) {\n return this.cropper.zoom(ratio, _originalEvent);\n },\n zoomTo: function zoomTo(ratio, _originalEvent) {\n return this.cropper.zoomTo(ratio, _originalEvent);\n },\n rotate: function rotate(degree) {\n return this.cropper.rotate(degree);\n },\n rotateTo: function rotateTo(degree) {\n return this.cropper.rotateTo(degree);\n },\n scaleX: function scaleX(_scaleX) {\n return this.cropper.scaleX(_scaleX);\n },\n scaleY: function scaleY(_scaleY) {\n return this.cropper.scaleY(_scaleY);\n },\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n\n return this.cropper.scale(scaleX, scaleY);\n },\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n return this.cropper.getData(rounded);\n },\n setData: function setData(data) {\n return this.cropper.setData(data);\n },\n getContainerData: function getContainerData() {\n return this.cropper.getContainerData();\n },\n getImageData: function getImageData() {\n return this.cropper.getImageData();\n },\n getCanvasData: function getCanvasData() {\n return this.cropper.getCanvasData();\n },\n setCanvasData: function setCanvasData(data) {\n return this.cropper.setCanvasData(data);\n },\n getCropBoxData: function getCropBoxData() {\n return this.cropper.getCropBoxData();\n },\n setCropBoxData: function setCropBoxData(data) {\n return this.cropper.setCropBoxData(data);\n },\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return this.cropper.getCroppedCanvas(options);\n },\n setAspectRatio: function setAspectRatio(aspectRatio) {\n return this.cropper.setAspectRatio(aspectRatio);\n },\n setDragMode: function setDragMode(mode) {\n return this.cropper.setDragMode(mode);\n }\n }\n};","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon account-group-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,5A3.5,3.5 0 0,0 8.5,8.5A3.5,3.5 0 0,0 12,12A3.5,3.5 0 0,0 15.5,8.5A3.5,3.5 0 0,0 12,5M12,7A1.5,1.5 0 0,1 13.5,8.5A1.5,1.5 0 0,1 12,10A1.5,1.5 0 0,1 10.5,8.5A1.5,1.5 0 0,1 12,7M5.5,8A2.5,2.5 0 0,0 3,10.5C3,11.44 3.53,12.25 4.29,12.68C4.65,12.88 5.06,13 5.5,13C5.94,13 6.35,12.88 6.71,12.68C7.08,12.47 7.39,12.17 7.62,11.81C6.89,10.86 6.5,9.7 6.5,8.5C6.5,8.41 6.5,8.31 6.5,8.22C6.2,8.08 5.86,8 5.5,8M18.5,8C18.14,8 17.8,8.08 17.5,8.22C17.5,8.31 17.5,8.41 17.5,8.5C17.5,9.7 17.11,10.86 16.38,11.81C16.5,12 16.63,12.15 16.78,12.3C16.94,12.45 17.1,12.58 17.29,12.68C17.65,12.88 18.06,13 18.5,13C18.94,13 19.35,12.88 19.71,12.68C20.47,12.25 21,11.44 21,10.5A2.5,2.5 0 0,0 18.5,8M12,14C9.66,14 5,15.17 5,17.5V19H19V17.5C19,15.17 14.34,14 12,14M4.71,14.55C2.78,14.78 0,15.76 0,17.5V19H3V17.07C3,16.06 3.69,15.22 4.71,14.55M19.29,14.55C20.31,15.22 21,16.06 21,17.07V19H24V17.5C24,15.76 21.22,14.78 19.29,14.55M12,16C13.53,16 15.24,16.5 16.23,17H7.77C8.76,16.5 10.47,16 12,16Z\">\n <title v-if=\"title\">{{ title }}\n \n \n \n\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n","\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n","\n\n\n\n\n\n\n\n\n\n","import { defineComponent as e, ref as t, computed as r, watch as o, createVNode as n, mergeProps as s, isVNode as i, onMounted as l, onUnmounted as c } from \"vue\";\n\nconst a = null, {min: u, max: f, abs: d, floor: p} = Math, m = (e, t, r) => u(r, f(t, e)), h = e => [ ...e ].sort((e, t) => e - t), _ = \"function\" == typeof queueMicrotask ? queueMicrotask : e => {\n Promise.resolve().then(e);\n}, b = () => {\n let e;\n return [ new Promise(t => {\n e = t;\n }), e ];\n}, g = e => {\n let t;\n return () => (e && (t = e(), e = void 0), t);\n}, v = (e, t, r) => {\n const o = r ? \"unshift\" : \"push\";\n for (let r = 0; r < t; r++) e[o](-1);\n return e;\n}, y = (e, t) => {\n const r = e.t[t];\n return -1 === r ? e.o : r;\n}, S = (e, t, r) => {\n const o = -1 === e.t[t];\n return e.t[t] = r, e.i = u(t, e.i), o;\n}, z = (e, t) => {\n if (!e.l) return 0;\n if (e.i >= t) return e.u[t];\n e.i < 0 && (e.u[0] = 0, e.i = 0);\n let r = e.i, o = e.u[r];\n for (;r < t; ) o += y(e, r), e.u[++r] = o;\n return e.i = t, o;\n}, x = (e, t, r = 0, o = e.l - 1) => {\n let n = r;\n for (;r <= o; ) {\n const s = p((r + o) / 2);\n z(e, s) <= t ? (n = s, r = s + 1) : o = s - 1;\n }\n return m(n, 0, e.l - 1);\n}, $ = (e, t, r) => {\n const o = t - e.l;\n return e.i = r ? -1 : u(t - 1, e.i), e.l = t, o > 0 ? (v(e.u, o), v(e.t, o, r), \n e.o * o) : (e.u.splice(o), (r ? e.t.splice(0, -o) : e.t.splice(o)).reduce((t, r) => t - (-1 === r ? e.o : r), 0));\n}, w = e => e.documentElement, I = e => e.ownerDocument, O = e => e.defaultView, k = /*#__PURE__*/ g(() => !!/iP(hone|od|ad)/.test(navigator.userAgent) || \"MacIntel\" === navigator.platform && navigator.maxTouchPoints > 0), j = /*#__PURE__*/ g(() => \"scrollBehavior\" in w(document).style), N = (e, t = 40, r = 0, o, n = !1) => {\n let s = !!r, i = 1, l = 0, c = 0, p = 0, m = 0, _ = 0, b = 0, g = 0, w = 0, I = a, O = [ 0, s ? f(r - 1, 0) : -1 ], j = 0, N = !1;\n const B = ((e, t, r) => ({\n o: t,\n t: r ? v(r.slice(0, u(e, r.length)), f(0, e - r.length)) : v([], e),\n l: e,\n i: -1,\n u: v([], e + 1)\n }))(e, o ? o[1] : t, o && o[0]), T = new Set, q = () => p - c, M = () => q() + _ + m, E = (e, t) => ((e, t, r, o) => {\n if (o = u(o, e.l - 1), z(e, o) <= t) {\n const n = x(e, r, o);\n return [ x(e, t, o, n), n ];\n }\n {\n const n = x(e, t, void 0, o);\n return [ n, x(e, r, n) ];\n }\n })(B, e, t, O[0]), P = () => z(B, B.l), R = (e, t) => {\n const r = z(B, e) - _;\n return t ? P() - r - A(e) : r;\n }, A = e => y(B, e), C = (e, t = -1) => B.t[e] === t, H = e => {\n e && (k() && 0 !== g || I && 1 === w ? _ += e : m += e);\n };\n return {\n p: () => {\n T.clear();\n },\n m: () => i,\n h: () => (e => [ e.t.slice(), e.o ])(B),\n v: (e = 200) => {\n if (!N || s) return O;\n let t, r;\n if (b) [t, r] = O; else {\n let o = f(0, M()), s = o + l;\n n || (e = f(0, e), 1 !== g && (o -= e), 2 !== g && (s += e)), [t, r] = O = E(f(0, o), f(0, s)), \n I && (t = u(t, I[0]), r = f(r, I[1]));\n }\n return [ f(t, 0), u(r, B.l - 1) ];\n },\n S: e => x(B, e - c),\n I: C,\n O: R,\n k: A,\n j: () => B.l,\n N: () => p,\n B: () => 0 !== g,\n T: () => l,\n q: () => c,\n M: P,\n P: () => (b = m, m = 0, [ b, 2 === w ]),\n R: (e, t) => {\n const r = [ e, t ];\n return T.add(r), () => {\n T.delete(r);\n };\n },\n A: (e, t) => {\n let r, o, u = 0;\n switch (e) {\n case 1:\n {\n if (t === p && 0 === w) break;\n const e = b;\n b = 0;\n const r = t - p, n = d(r);\n e && n < d(e) + 1 || 0 !== w || (g = r < 0 ? 2 : 1), s && (s = !1), p = t, u = 4;\n const i = q();\n i >= -l && i <= P() && (u += 1, o = n > l);\n break;\n }\n\n case 2:\n u = 8, 0 !== g && (r = !0, u += 1), g = 0, w = 0, I = a;\n break;\n\n case 3:\n {\n const e = t.filter(([e, t]) => !C(e, t));\n if (!e.length) break;\n H(e.reduce((e, [t, r]) => {\n let o;\n if (2 === w) o = !0; else if (I && 1 === w) o = t < I[0]; else {\n const e = q(), r = R(t), n = A(t);\n o = 1 !== g && 0 === w ? r + n <= e : r < e && r + n < e + l;\n }\n return o && (e += r - A(t)), e;\n }, 0));\n for (const [t, r] of e) {\n const e = A(t), o = S(B, t, r);\n n && (j += o ? r : r - e);\n }\n n && l && j > l && (H(((e, t) => {\n let r = 0;\n const o = [];\n e.t.forEach((e, n) => {\n -1 !== e && (o.push(e), n < t && r++);\n }), e.i = -1;\n const n = h(o), s = n.length, i = s / 2 | 0, l = s % 2 == 0 ? (n[i - 1] + n[i]) / 2 : n[i], c = e.o;\n return ((e.o = l) - c) * f(t - r, 0);\n })(B, x(B, M()))), n = !1), u = 3, o = !0;\n break;\n }\n\n case 4:\n l !== t && (l || (N = o = !0), l = t, u = 3);\n break;\n\n case 5:\n t[1] ? (H($(B, t[0], !0)), w = 2, u = 1) : ($(B, t[0]), u = 1);\n break;\n\n case 6:\n c = t;\n break;\n\n case 7:\n w = 1;\n break;\n\n case 8:\n I = E(t, t + l), u = 1;\n }\n u && (i = 1 + (2147483647 & i), r && _ && (m += _, _ = 0), T.forEach(([e, t]) => {\n u & e && t(o);\n }));\n }\n };\n}, B = setTimeout, T = (e, t) => t ? -e : e, q = (e, t, r, o, n, s) => {\n const i = Date.now;\n let l = 0, c = !1, u = !1, f = !1, d = !1;\n const p = (() => {\n let t;\n const r = () => {\n t != a && clearTimeout(t);\n }, o = () => {\n r(), t = B(() => {\n t = a, (() => {\n if (c || u) return c = !1, void p();\n f = !1, e.A(2);\n })();\n }, 150);\n };\n return o.C = r, o;\n })(), m = () => {\n l = i(), f && (d = !0), s && e.A(6, s()), e.A(1, o()), p();\n }, h = t => {\n if (c || !e.B() || t.ctrlKey) return;\n const o = i() - l;\n 150 > o && 50 < o && (r ? t.deltaX : t.deltaY) && (c = !0);\n }, _ = () => {\n u = !0, f = d = !1;\n }, b = () => {\n u = !1, k() && (f = !0);\n };\n return t.addEventListener(\"scroll\", m), t.addEventListener(\"wheel\", h, {\n passive: !0\n }), t.addEventListener(\"touchstart\", _, {\n passive: !0\n }), t.addEventListener(\"touchend\", b, {\n passive: !0\n }), {\n H: () => {\n t.removeEventListener(\"scroll\", m), t.removeEventListener(\"wheel\", h), t.removeEventListener(\"touchstart\", _), \n t.removeEventListener(\"touchend\", b), p.C();\n },\n V: () => {\n const [t, r] = e.P();\n t && (n(t, r, d), d = !1, r && e.T() > e.M() && e.A(1, o()));\n }\n };\n}, M = (e, t, r) => {\n let o;\n return [ async (n, s) => {\n if (!await t()) return;\n o && o();\n const i = () => {\n const [t, r] = b();\n return o = () => {\n r(!1);\n }, e.T() && B(o, 150), [ t, e.R(2, () => {\n r(!0);\n }) ];\n };\n if (s && j()) e.A(8, n()), _(async () => {\n for (;;) {\n let t = !0;\n for (let [r, o] = e.v(); r <= o; r++) if (e.I(r)) {\n t = !1;\n break;\n }\n if (t) break;\n const [r, o] = i();\n try {\n if (!await r) return;\n } finally {\n o();\n }\n }\n e.A(7), r(n(), s);\n }); else for (;;) {\n const [t, o] = i();\n try {\n if (e.A(7), r(n()), !await t) return;\n } finally {\n o();\n }\n }\n }, () => {\n o && o();\n } ];\n}, E = e => {\n let t;\n return {\n F(r) {\n (t || (t = new (O(I(r)).ResizeObserver)(e))).observe(r);\n },\n J(e) {\n t.unobserve(e);\n },\n H() {\n t && t.disconnect();\n }\n };\n}, P = /*#__PURE__*/ e({\n props: {\n L: {\n type: Object,\n required: !0\n },\n W: {\n type: Object,\n required: !0\n },\n X: {\n type: Object,\n required: !0\n },\n Y: {\n type: Function,\n required: !0\n },\n D: {\n type: Number,\n required: !0\n },\n U: {\n type: Boolean\n },\n G: {\n type: Boolean\n },\n K: {\n type: Boolean\n },\n Z: {\n type: String,\n required: !0\n },\n ee: Object\n },\n setup(e) {\n const l = t(), c = r(() => e.L.value && e.W.O(e.D, e.K)), a = r(() => e.L.value && e.W.I(e.D));\n return o(() => l.value && e.D, (t, r, o) => {\n o(e.Y(l.value, e.D));\n }, {\n flush: \"post\"\n }), () => {\n const {X: t, U: r, G: o, Z: u} = e, f = a.value, {style: d, ...p} = e.ee ?? {}, m = {\n contain: \"layout style\",\n position: f && o ? void 0 : \"absolute\",\n [r ? \"height\" : \"width\"]: \"100%\",\n [r ? \"top\" : \"left\"]: \"0px\",\n [r ? \"left\" : \"top\"]: c.value + \"px\",\n visibility: !f || o ? void 0 : \"hidden\",\n ...d\n };\n return r && (m.display = \"inline-flex\"), n(u, s({\n ref: l,\n style: m\n }, p), \"function\" == typeof (h = t) || \"[object Object]\" === Object.prototype.toString.call(h) && !i(h) ? t : {\n default: () => [ t ],\n _: 2\n }, 16, [ \"style\" ]);\n var h;\n };\n }\n}), R = (e, t) => {\n if (1 === e.length) {\n const t = e[0].key;\n if (null != t) return t;\n }\n return \"_\" + t;\n}, A = (e, t) => e[0] === t[0] && e[1] === t[1], C = /*#__PURE__*/ e({\n props: {\n data: {\n type: Array,\n required: !0\n },\n bufferSize: Number,\n itemSize: Number,\n shift: Boolean,\n horizontal: Boolean,\n startMargin: {\n type: Number,\n default: 0\n },\n ssrCount: Number,\n scrollRef: Object,\n as: {\n type: String,\n default: \"div\"\n },\n item: {\n type: String,\n default: \"div\"\n },\n itemProps: Function,\n keepMounted: Array,\n cache: Object\n },\n emits: [ \"scroll\", \"scrollEnd\" ],\n setup(e, {emit: s, expose: u, slots: d}) {\n let p = !!e.ssrCount;\n const _ = e.horizontal, g = t(), v = N(e.data.length, e.itemSize, e.ssrCount, e.cache, !e.itemSize), y = ((e, t) => {\n let r;\n const o = t ? \"width\" : \"height\", n = new WeakMap, s = E(t => {\n const s = [];\n for (const {target: i, contentRect: l} of t) if (i.offsetParent) if (i === r) e.A(4, l[o]); else {\n const e = n.get(i);\n e != a && s.push([ e, l[o] ]);\n }\n s.length && e.A(3, s);\n });\n return {\n te(e) {\n s.F(r = e);\n },\n re: (e, t) => (n.set(e, t), s.F(e), () => {\n n.delete(e), s.J(e);\n }),\n p: s.H\n };\n })(v, _), S = ((e, t) => {\n let r, o, n = b(), s = !1;\n const i = t ? \"scrollLeft\" : \"scrollTop\", l = t ? \"overflowX\" : \"overflowY\", [c, a] = M(e, () => n[0], (e, o) => {\n e = T(e, s), o ? r.scrollTo({\n [t ? \"left\" : \"top\"]: e,\n behavior: \"smooth\"\n }) : r[i] = e;\n });\n return {\n oe(c, u) {\n r = u, t && (s = \"rtl\" === getComputedStyle(u).direction), o = q(e, u, t, () => T(u[i], s), (t, r, o) => {\n if (o) {\n const e = u.style, t = e[l];\n e[l] = \"hidden\", B(() => {\n e[l] = t;\n });\n }\n u[i] = T(e.N() + t, s), r && a();\n }), n[1](!0);\n },\n p() {\n o && o.H(), n[1](!1), n = b();\n },\n ne: () => s,\n se(e) {\n c(() => e);\n },\n ie(t) {\n t += e.N(), c(() => t);\n },\n le(t, {align: r, smooth: o, offset: n = 0} = {}) {\n if (t = m(t, 0, e.j() - 1), \"nearest\" === r) {\n const o = e.O(t), n = e.N();\n if (o < n) r = \"start\"; else {\n if (!(o + e.k(t) > n + e.T())) return;\n r = \"end\";\n }\n }\n c(() => n + e.q() + e.O(t) + (\"end\" === r ? e.k(t) - e.T() : \"center\" === r ? (e.k(t) - e.T()) / 2 : 0), o);\n },\n ce: () => {\n o && o.V();\n }\n };\n })(v, _), z = t(v.m());\n v.R(1, () => {\n z.value = v.m();\n }), v.R(4, () => {\n s(\"scroll\", v.N());\n }), v.R(8, () => {\n s(\"scrollEnd\");\n });\n const x = r(t => {\n z.value;\n const r = v.v(e.bufferSize);\n return t && A(t, r) ? t : r;\n }), $ = r(() => z.value && v.B()), w = r(() => z.value && v.M());\n return l(() => {\n p = !1;\n const t = g.value, r = requestAnimationFrame(() => {\n const r = e => {\n y.te(e), S.oe(t, e);\n };\n e.scrollRef ? r(e.scrollRef) : r(t.parentElement);\n });\n c(() => {\n cancelAnimationFrame(r);\n });\n }), c(() => {\n v.p(), y.p(), S.p();\n }), o(() => e.data.length, t => {\n v.A(5, [ t, e.shift ]);\n }), o(() => e.startMargin, e => {\n v.A(6, e);\n }, {\n immediate: !0\n }), o([ z ], () => {\n S.ce();\n }, {\n flush: \"post\"\n }), u({\n get cache() {\n return v.h();\n },\n get scrollOffset() {\n return v.N();\n },\n get scrollSize() {\n return (e => f(e.M(), e.T()))(v);\n },\n get viewportSize() {\n return v.T();\n },\n findItemIndex: v.S,\n getItemOffset: v.O,\n getItemSize: v.k,\n scrollToIndex: S.le,\n scrollTo: S.se,\n scrollBy: S.ie\n }), () => {\n const t = e.as, r = e.item, o = w.value, s = S.ne(), l = [], c = t => {\n const o = d.default({\n item: e.data[t],\n index: t\n });\n return n(P, {\n key: R(o, t),\n L: z,\n W: v,\n Y: y.re,\n D: t,\n X: o,\n U: _,\n K: s,\n G: p,\n Z: r,\n ee: e.itemProps?.({\n item: e.data[t],\n index: t\n })\n }, null, 8, [ \"L\", \"W\", \"Y\", \"D\", \"X\", \"U\", \"K\", \"G\", \"Z\", \"ee\" ]);\n };\n if (e.keepMounted) {\n const t = new Set(e.keepMounted);\n for (let [e, r] = x.value; e <= r; e++) t.add(e);\n h([ ...t ]).forEach(e => {\n l.push(c(e));\n });\n } else for (let [e, t] = x.value; e <= t; e++) l.push(c(e));\n return n(t, {\n ref: g,\n style: {\n contain: \"size style\",\n overflowAnchor: \"none\",\n flex: \"none\",\n position: \"relative\",\n width: _ ? o + \"px\" : \"100%\",\n height: _ ? \"100%\" : o + \"px\",\n pointerEvents: $.value ? \"none\" : void 0\n }\n }, \"function\" == typeof (a = l) || \"[object Object]\" === Object.prototype.toString.call(a) && !i(a) ? l : {\n default: () => [ l ],\n _: 2\n }, 8, [ \"style\" ]);\n var a;\n };\n }\n}), H = /*#__PURE__*/ e({\n props: {\n data: {\n type: Array,\n required: !0\n },\n bufferSize: Number,\n itemSize: Number,\n shift: Boolean,\n horizontal: Boolean,\n ssrCount: Number,\n itemProps: Function,\n keepMounted: Array,\n cache: Object\n },\n emits: [ \"scroll\", \"scrollEnd\" ],\n setup(e, {emit: r, expose: o, slots: s}) {\n const l = e.horizontal, c = e => {\n r(\"scroll\", e);\n }, a = () => {\n r(\"scrollEnd\");\n }, u = t();\n return o({\n get cache() {\n return u.value.cache;\n },\n get scrollOffset() {\n return u.value.scrollOffset;\n },\n get scrollSize() {\n return u.value.scrollSize;\n },\n get viewportSize() {\n return u.value.viewportSize;\n },\n findItemIndex: (...e) => u.value.findItemIndex(...e),\n getItemOffset: (...e) => u.value.getItemOffset(...e),\n getItemSize: (...e) => u.value.getItemSize(...e),\n scrollToIndex: (...e) => u.value.scrollToIndex(...e),\n scrollTo: (...e) => u.value.scrollTo(...e),\n scrollBy: (...e) => u.value.scrollBy(...e)\n }), () => {\n return n(\"div\", {\n style: {\n display: l ? \"inline-block\" : \"block\",\n [l ? \"overflowX\" : \"overflowY\"]: \"auto\",\n contain: \"strict\",\n width: \"100%\",\n height: \"100%\"\n }\n }, [ n(C, {\n ref: u,\n data: e.data,\n bufferSize: e.bufferSize,\n itemSize: e.itemSize,\n itemProps: e.itemProps,\n shift: e.shift,\n ssrCount: e.ssrCount,\n horizontal: l,\n keepMounted: e.keepMounted,\n cache: e.cache,\n onScroll: c,\n onScrollEnd: a\n }, (t = s, \"function\" == typeof t || \"[object Object]\" === Object.prototype.toString.call(t) && !i(t) ? s : {\n default: () => [ s ],\n _: 2\n }), 8, [ \"data\", \"bufferSize\", \"itemSize\", \"itemProps\", \"shift\", \"ssrCount\", \"horizontal\", \"keepMounted\", \"cache\", \"onScroll\", \"onScrollEnd\" ]) ], 4);\n var t;\n };\n }\n}), V = /*#__PURE__*/ e({\n props: {\n data: {\n type: Array,\n required: !0\n },\n bufferSize: Number,\n itemSize: Number,\n shift: Boolean,\n horizontal: Boolean,\n as: {\n type: String,\n default: \"div\"\n },\n item: {\n type: String,\n default: \"div\"\n },\n cache: Object\n },\n emits: [ \"scroll\", \"scrollEnd\" ],\n setup(e, {emit: s, slots: u, expose: f}) {\n const d = e.horizontal, p = t(), h = N(e.data.length, e.itemSize, void 0, e.cache, !e.itemSize), g = ((e, t) => {\n const r = t ? \"width\" : \"height\", o = t ? \"innerWidth\" : \"innerHeight\", n = new WeakMap, s = E(t => {\n const o = [];\n for (const {target: e, contentRect: s} of t) {\n if (!e.offsetParent) continue;\n const t = n.get(e);\n t != a && o.push([ t, s[r] ]);\n }\n o.length && e.A(3, o);\n });\n let i;\n return {\n te(t) {\n const r = O(I(t)), n = () => {\n e.A(4, r[o]);\n };\n r.addEventListener(\"resize\", n), _(n), i = () => {\n r.removeEventListener(\"resize\", n);\n };\n },\n re: (e, t) => (n.set(e, t), s.F(e), () => {\n n.delete(e), s.J(e);\n }),\n p() {\n i && i(), s.H();\n }\n };\n })(h, d), v = ((e, t) => {\n let r, o, n = b(), s = !1;\n const i = t ? \"left\" : \"top\", [l] = M(e, () => n[0], (e, t) => {\n e = T(e, s);\n const o = O(I(r));\n t ? o.scroll({\n [i]: e,\n behavior: \"smooth\"\n }) : o.scroll({\n [i]: e\n });\n }), c = (e, t, r, o, n = 0) => {\n const i = o ? \"offsetLeft\" : \"offsetTop\", l = n + (o && s ? r.innerWidth - e[i] - e.offsetWidth : e[i]), a = e.offsetParent;\n return e !== t && a ? c(a, t, r, o, l) : l;\n };\n return {\n oe(l) {\n r = l;\n const a = t ? \"scrollX\" : \"scrollY\", u = I(l), f = O(u);\n t && (s = \"rtl\" === getComputedStyle(w(u)).direction), o = q(e, f, t, () => T(f[a], s), (t, r) => {\n r ? f.scroll({\n [i]: T(e.N() + t, s)\n }) : f.scrollBy({\n [i]: T(t, s)\n });\n }, () => c(l, u.body, f, t)), n[1](!0);\n },\n p() {\n o && o.H(), r = void 0, n[1](!1), n = b();\n },\n ne: () => s,\n ce: () => {\n o && o.V();\n },\n le(o, {align: n, smooth: s, offset: i = 0} = {}) {\n if (!r) return;\n if (o = m(o, 0, e.j() - 1), \"nearest\" === n) {\n const t = e.O(o), r = e.N();\n if (t < r) n = \"start\"; else {\n if (!(t + e.k(o) > r + e.T())) return;\n n = \"end\";\n }\n }\n const a = I(r), u = O(a), f = w(a), d = () => e.T() - (t ? f.clientWidth : f.clientHeight);\n l(() => i + c(r, a.body, u, t) + e.O(o) + (\"end\" === n ? e.k(o) - (e.T() - d()) : \"center\" === n ? (e.k(o) - (e.T() - d())) / 2 : 0), s);\n }\n };\n })(h, d), y = t(h.m());\n h.R(1, () => {\n y.value = h.m();\n }), h.R(4, () => {\n s(\"scroll\");\n }), h.R(8, () => {\n s(\"scrollEnd\");\n });\n const S = r(t => {\n y.value;\n const r = h.v(e.bufferSize);\n return t && A(t, r) ? t : r;\n }), z = r(() => y.value && h.B()), x = r(() => y.value && h.M());\n return l(() => {\n const e = p.value;\n e && (g.te(e), v.oe(e));\n }), c(() => {\n h.p(), g.p(), v.p();\n }), o(() => e.data.length, t => {\n h.A(5, [ t, e.shift ]);\n }), o([ y ], () => {\n v.ce();\n }, {\n flush: \"post\"\n }), f({\n get cache() {\n return h.h();\n },\n get scrollOffset() {\n return h.N();\n },\n get viewportSize() {\n return h.T();\n },\n findItemIndex: h.S,\n getItemOffset: h.O,\n getItemSize: h.k,\n scrollToIndex: v.le\n }), () => {\n const t = e.as, r = e.item, o = x.value, s = v.ne(), l = [];\n for (let [t, o] = S.value; t <= o; t++) {\n const o = u.default({\n item: e.data[t],\n index: t\n });\n l.push(n(P, {\n key: R(o, t),\n L: y,\n W: h,\n Y: g.re,\n D: t,\n X: o,\n U: d,\n K: s,\n Z: r\n }, null, 8, [ \"L\", \"W\", \"Y\", \"D\", \"X\", \"U\", \"K\", \"Z\" ]));\n }\n return n(t, {\n ref: p,\n style: {\n contain: \"size style\",\n overflowAnchor: \"none\",\n flex: \"none\",\n position: \"relative\",\n width: d ? o + \"px\" : \"100%\",\n height: d ? \"100%\" : o + \"px\",\n pointerEvents: z.value ? \"none\" : void 0\n }\n }, \"function\" == typeof (c = l) || \"[object Object]\" === Object.prototype.toString.call(c) && !i(c) ? l : {\n default: () => [ l ],\n _: 2\n }, 8, [ \"style\" ]);\n var c;\n };\n }\n});\n\nexport { H as VList, C as Virtualizer, V as WindowVirtualizer };\n//# sourceMappingURL=index.js.map\n","\n\n","\n\n","\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n\n\n","\n\n","\n\n","\n\n","\n\n","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nexport default {\n\tcomputed: {\n\t\t// router variables\n\t\tselectedContact() {\n\t\t\treturn this.$route.params.selectedContact\n\t\t},\n\t\tselectedGroup() {\n\t\t\treturn this.$route.params.selectedGroup\n\t\t},\n\t\tselectedCircle() {\n\t\t\t// Teams app uses `teamId` as the route param; fall back to it.\n\t\t\treturn this.$route.params.selectedCircle ?? this.$route.params.teamId\n\t\t},\n\t\tselectedUserGroup() {\n\t\t\treturn this.$route.params.selectedUserGroup\n\t\t},\n\t\tselectedChart() {\n\t\t\treturn this.$route.params.selectedChart\n\t\t},\n\t},\n}\n","\n\n\n\n\n\n\n","// @ts-nocheck\n/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { useIsMobile } from '@nextcloud/vue'\n\nexport default {\n\tcomputed: {\n\t\tisMobile() {\n\t\t\treturn useIsMobile().value\n\t\t},\n\t},\n}\n","\n\n\n\n\n\n\n\n\n\n","import { showError, showSuccess } from '@nextcloud/dialogs'\n/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { emit } from '@nextcloud/event-bus'\nimport Circle from '../models/circle.ts'\nimport Member from '../models/member.ts'\nimport { joinCircle } from '../services/circles.ts'\nimport CopyToClipboardMixin from './CopyToClipboardMixin.js'\n\nexport default {\n\n\tprops: {\n\t\tcircle: {\n\t\t\ttype: Circle,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tmixins: [CopyToClipboardMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingAction: false,\n\t\t\tloadingJoin: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcopyButtonText() {\n\t\t\tif (this.copied) {\n\t\t\t\treturn this.copySuccess\n\t\t\t\t\t? t('circles', 'Copied')\n\t\t\t\t\t: t('circles', 'Could not copy')\n\t\t\t}\n\t\t\treturn t('circles', 'Copy link')\n\t\t},\n\n\t\tcircleUrl() {\n\t\t\tconst route = this.$router.resolve(this.circle.router)\n\t\t\treturn window.location.origin + route.href\n\t\t},\n\n\t\tjoinButtonTitle() {\n\t\t\tif (this.circle.requireJoinAccept) {\n\t\t\t\treturn t('circles', 'Request to join')\n\t\t\t}\n\t\t\treturn t('circles', 'Join team')\n\t\t},\n\t},\n\n\tmethods: {\n\t\tconfirmLeaveCircle() {\n\t\t\twindow.OC.dialogs.confirmDestructive(\n\t\t\t\tt('circles', 'You are about to leave {circle}.\\nAre you sure?', {\n\t\t\t\t\tcircle: this.circle.displayName,\n\t\t\t\t}),\n\t\t\t\tt('circles', 'Please confirm team leave'),\n\t\t\t\twindow.OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\tthis.leaveCircle,\n\t\t\t\ttrue,\n\t\t\t)\n\t\t},\n\t\tasync leaveCircle(confirm) {\n\t\t\tif (!confirm) {\n\t\t\t\tthis.logger.debug('Circle leave cancelled')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingAction = true\n\t\t\tconst member = this.circle.initiator\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('deleteMemberFromCircle', {\n\t\t\t\t\tmember,\n\t\t\t\t\tleave: true,\n\t\t\t\t})\n\n\t\t\t\t// Reset initiator\n\t\t\t\tthis.circle.initiator = null\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Could not leave the circle', member, error)\n\t\t\t\tshowError(t('circles', 'Could not leave the team {displayName}', this.circle))\n\t\t\t} finally {\n\t\t\t\tthis.loadingAction = false\n\t\t\t}\n\t\t},\n\n\t\tasync joinCircle() {\n\t\t\tthis.loadingJoin = true\n\t\t\ttry {\n\t\t\t\tconst initiator = await joinCircle(this.circle.id)\n\t\t\t\tconst member = new Member(initiator, this.circle)\n\n\t\t\t\t// Update initiator with newest membership values\n\t\t\t\tthis.circle.initiator = member\n\n\t\t\t\t// Append new member\n\t\t\t\tmember.circle.addMember(member)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('circles', 'Unable to join the team'))\n\t\t\t\tconsole.error('Unable to join the circle', error)\n\t\t\t} finally {\n\t\t\t\tthis.loadingJoin = false\n\t\t\t}\n\t\t},\n\n\t\tconfirmDeleteCircle() {\n\t\t\twindow.OC.dialogs.confirmDestructive(\n\t\t\t\tt('circles', 'You are about to delete {circle}.\\nAre you sure?', {\n\t\t\t\t\tcircle: this.circle.displayName,\n\t\t\t\t}),\n\t\t\t\tt('circles', 'Please confirm team deletion'),\n\t\t\t\twindow.OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\tthis.deleteCircle,\n\t\t\t\ttrue,\n\t\t\t)\n\t\t},\n\t\tasync deleteCircle(confirm) {\n\t\t\tif (!confirm) {\n\t\t\t\tthis.logger.debug('Circle deletion cancelled')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingAction = true\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('deleteCircle', this.circle.id)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('circles', 'Unable to delete the team'))\n\t\t\t} finally {\n\t\t\t\tthis.loadingAction = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Trigger the entity picker view\n\t\t */\n\t\tasync addMemberToCircle() {\n\t\t\ttry {\n\t\t\t\t// Avoid VueRouter NavigationDuplicated\n\t\t\t\tawait this.$router.push(this.circle.router)\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Could not open circle member picker', error)\n\t\t\t}\n\t\t\temit('contacts:circles:append', this.circle.id)\n\t\t},\n\t},\n}\n","\n\n\n\n\n\n\n\n\n","\n\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { RouteRecordRaw } from 'vue-router'\n\nimport { generateUrl } from '@nextcloud/router'\nimport { createRouter, createWebHistory } from 'vue-router'\nimport HomeView from './views/HomeView.vue'\nimport JoinInvitation from './views/JoinInvitation.vue'\nimport TeamDashboardView from './views/TeamDashboardView.vue'\nimport TeamPage from './views/TeamPage.vue'\nimport TeamSettingsView from './views/TeamSettingsView.vue'\n\nconst routes: RouteRecordRaw[] = [\n\t{\n\t\tname: 'home',\n\t\tpath: '/',\n\t\tcomponent: HomeView,\n\t},\n\t{\n\t\tname: 'join-invitation',\n\t\tpath: '/join/:invitationCode',\n\t\tcomponent: JoinInvitation,\n\t},\n\t{\n\t\tname: 'team',\n\t\tpath: '/team/:teamId',\n\t\tcomponent: TeamPage,\n\t\tprops: true,\n\t\tchildren: [\n\t\t\t{\n\t\t\t\tname: 'team',\n\t\t\t\tpath: '',\n\t\t\t\tcomponent: TeamDashboardView,\n\t\t\t\tprops: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'team-settings',\n\t\t\t\tpath: 'settings',\n\t\t\t\tcomponent: TeamSettingsView,\n\t\t\t\tprops: true,\n\t\t\t},\n\t\t],\n\t},\n]\n\nexport const router = createRouter({\n\t// HTML5 history mode for clean, hash-free URLs. The server registers a\n\t// catch-all route (Page#indexPath) so deep-link reloads still serve the shell.\n\thistory: createWebHistory(generateUrl('/apps/circles/teams')),\n\troutes,\n})\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { n, t } from '@nextcloud/l10n'\nimport logger from '../services/logger.js'\n\n/**\n * Mixin for translations and legacy stuff.\n */\nexport default {\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n\n\tcomputed: {\n\t\tappName: () => appName,\n\t\tappVersion: () => appVersion,\n\t\tlogger: () => logger,\n\t\tOC: () => window.OC,\n\t\tOCA: () => window.OCA,\n\t},\n}\n","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { showError } from '@nextcloud/dialogs'\nimport Circle from '../models/circle.ts'\nimport Member from '../models/member.ts'\nimport {\n\tacceptMember,\n\taddMembers,\n\tcreateCircle,\n\tcreateInvitationLink,\n\tdeleteCircle,\n\tdeleteMember,\n\teditCircleSetting,\n\tgetCircle,\n\tgetCircleMembers,\n\tgetCircles,\n\tleaveCircle,\n\trevokeInvitationLink,\n} from '../services/circles.ts'\nimport logger from '../services/logger.js'\n\nconst state = {\n\t/** @type {Object} Circle */\n\tcircles: {},\n\n\t/** Whether the circle member list is currently being fetched */\n\tloadingCircleMembers: false,\n}\n\nconst mutations = {\n\n\t/**\n\t * Add a circle into state\n\t *\n\t * @param {object} state the store data\n\t * @param {Circle} circle the circle to add\n\t */\n\taddCircle(state, circle) {\n\t\tif (circle.constructor.name !== Circle.name) {\n\t\t\tthrow new Error('circle must be a Circle type')\n\t\t}\n\t\tstate.circles[circle.id] = circle\n\t},\n\n\t/**\n\t * Set the circle members loading state\n\t *\n\t * @param {object} state the store data\n\t * @param {boolean} value the loading state\n\t */\n\tsetLoadingCircleMembers(state, value) {\n\t\tstate.loadingCircleMembers = value\n\t},\n\n\t/**\n\t * Delete circle\n\t *\n\t * @param {object} state the store data\n\t * @param {Circle} circle the circle to delete\n\t */\n\tdeleteCircle(state, circle) {\n\t\tif (!(circle.id in state.circles)) {\n\t\t\tlogger.warn('Skipping deletion of unknown circle', { circle })\n\t\t}\n\t\tdelete state.circles[circle.id]\n\t},\n\n\t/**\n\t * Reset circle members\n\t *\n\t * @param {object} state the store data\n\t * @param {string} circleId the circle id\n\t */\n\tresetCircleMembers(state, circleId) {\n\t\tstate.circles[circleId].members = {}\n\t},\n\n\t/**\n\t * Append a list of members to a circle\n\t * and remove duplicates\n\t *\n\t * @param {object} state the store data\n\t * @param {Members[]} members array of members to append\n\t */\n\tappendMembersToCircle(state, members) {\n\t\tmembers.forEach((member) => member.circle.addMember(member))\n\t},\n\n\t/**\n\t * Add a member to a circle and overwrite if duplicate uid\n\t *\n\t * @param {object} state the store data\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle to add the members to\n\t * @param {Member} data.member array of contacts to append\n\t */\n\taddMemberToCircle(state, { circleId, member }) {\n\t\tconst circle = state.circles[circleId]\n\t\tcircle.addMember(member)\n\t},\n\n\t/**\n\t * Delete a contact in a specified circle\n\t *\n\t * @param {object} state the store data\n\t * @param {Member} member the member to add\n\t */\n\tdeleteMemberFromCircle(state, member) {\n\t\t// Circles dependencies are managed directly from the model\n\t\tmember.delete()\n\t},\n\n\tsetCircleSettings(state, { circleId, settings }) {\n\t\tstate.circles[circleId]._data.settings = settings\n\t},\n\n\t/**\n\t * Update the invitation code of a circle\n\t *\n\t * @param {object} state the store data\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle to update\n\t * @param {string} data.invitationCode the new invitation code\n\t */\n\tsetInvitationCode(state, { circleId, invitationCode }) {\n\t\tstate.circles[circleId]._data.invitationCode = invitationCode\n\t},\n\n\t/**\n\t * Update circle population count\n\t *\n\t * @param {object} state the store data\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle to update the population\n\t * @param {number} data.populationInherited the inherited population count\n\t */\n\tupdateCirclePopulationCount(state, { circleId, populationInherited }) {\n\t\tstate.circles[circleId]._data.populationInherited = populationInherited\n\t},\n}\n\nconst getters = {\n\tgetCircles: (state) => Object.values(state.circles),\n\tgetCircle: (state) => (id) => state.circles[id],\n\tisLoadingCircleMembers: (state) => state.loadingCircleMembers,\n}\n\nconst actions = {\n\t/**\n\t * Retrieve and commit circles\n\t *\n\t * @param {object} context the store mutations\n\t * @return {object[]} the circles\n\t */\n\tasync getCircles(context) {\n\t\tconst circles = await getCircles()\n\t\tlogger.debug(`Retrieved ${circles.length} circle(s)`, { circles })\n\n\t\tlet failure = false\n\t\tcircles.forEach((circle) => {\n\t\t\ttry {\n\t\t\t\tconst newCircle = new Circle(circle)\n\t\t\t\tcontext.commit('addCircle', newCircle)\n\t\t\t} catch (error) {\n\t\t\t\tfailure = true\n\t\t\t\tlogger.error('This circle failed to be processed', { circle, error })\n\t\t\t}\n\t\t})\n\n\t\tif (failure) {\n\t\t\tshowError(t('circles', 'An error has occurred in team(s). Check the console for more details.'))\n\t\t}\n\n\t\treturn circles\n\t},\n\n\t/**\n\t * Retrieve and commit circles\n\t *\n\t * @param {object} context the store mutations\n\t * @param {string} circleId the circle id\n\t * @return {object[]} the circles\n\t */\n\tasync getCircle(context, circleId) {\n\t\tconst circle = await getCircle(circleId)\n\t\tlogger.debug('Retrieved 1 circle', { circle })\n\n\t\ttry {\n\t\t\tconst newCircle = new Circle(circle)\n\t\t\tcontext.commit('addCircle', newCircle)\n\t\t} catch (error) {\n\t\t\tlogger.error('This circle failed to be processed', { circle, error })\n\t\t}\n\n\t\treturn circle\n\t},\n\n\t/**\n\t * Retrieve and commit circle members\n\t *\n\t * @param {object} context the store mutations\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle id\n\t * @param {string} data.search the search query\n\t * @param {string} data.role the role\n\t * @param {number} data.limit the limit\n\t */\n\tasync getCircleMembers(context, { circleId, search, role, limit }) {\n\t\tconst circle = context.getters.getCircle(circleId)\n\t\t// skip if current user is not a member (e.g. visible circle)\n\t\tif (!circle.isMember) {\n\t\t\treturn\n\t\t}\n\n\t\tcontext.commit('setLoadingCircleMembers', true)\n\t\ttry {\n\t\t\tconst members = await getCircleMembers(circleId, search, role, limit)\n\n\t\t\tlogger.debug(`${circleId} have ${members.length} member(s)`, { members })\n\t\t\tcontext.commit('resetCircleMembers', circle.id)\n\t\t\tcontext.commit('appendMembersToCircle', members.map((member) => new Member(member, circle)))\n\t\t} finally {\n\t\t\tcontext.commit('setLoadingCircleMembers', false)\n\t\t}\n\t},\n\n\t/**\n\t * Create circle\n\t *\n\t * @param {object} context the store mutations Current context\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleName the circle name\n\t * @param {boolean} data.isPersonal the circle is a personal one\n\t * @param {boolean} data.isLocal the circle is not distributed to the GlobalScale\n\t * @return {Circle} the new circle\n\t */\n\tasync createCircle(context, { circleName, isPersonal, isLocal }) {\n\t\ttry {\n\t\t\tconst response = await createCircle(circleName, isPersonal, isLocal)\n\t\t\tconst circle = new Circle(response)\n\t\t\tcontext.commit('addCircle', circle)\n\t\t\tlogger.debug('Created circle', { circleName, circle })\n\t\t\tcontext.dispatch('updateCirclesPopulationCount')\n\t\t\treturn circle\n\t\t} catch (error) {\n\t\t\tconsole.error(error)\n\t\t\tshowError(t('circles', 'Unable to create team {circleName}', { circleName }))\n\t\t}\n\t},\n\n\t/**\n\t * Delete circle\n\t *\n\t * @param {object} context the store mutations Current context\n\t * @param {Circle} circleId the circle to delete\n\t */\n\tasync deleteCircle(context, circleId) {\n\t\tconst circle = context.getters.getCircle(circleId)\n\t\ttry {\n\t\t\tawait deleteCircle(circleId)\n\t\t\tcontext.commit('deleteCircle', circle)\n\t\t\tlogger.debug('Deleted circle', { circleId })\n\t\t\tcontext.dispatch('updateCirclesPopulationCount')\n\t\t} catch (error) {\n\t\t\tconsole.error(error)\n\t\t\tshowError(t('circles', 'Unable to delete team {circleId}', { circleId }))\n\t\t}\n\t},\n\n\t/**\n\t * Update population count for all circles\n\t *\n\t * @param {object} context the store mutations Current context\n\t */\n\tasync updateCirclesPopulationCount(context) {\n\t\tconst circles = await getCircles()\n\t\tcircles.forEach((circle) => {\n\t\t\tcontext.commit('updateCirclePopulationCount', {\n\t\t\t\tcircleId: circle.id,\n\t\t\t\tpopulationInherited: circle.populationInherited,\n\t\t\t})\n\t\t})\n\t\tlogger.debug('Updated population count for all circles')\n\t},\n\n\t/**\n\t * Add members to a circle\n\t *\n\t * @param {object} context the store mutations Current context\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle to manage\n\t * @param {Array} data.selection the members to add, see addMembers service\n\t * @return {Member[]}\n\t */\n\tasync addMembersToCircle(context, { circleId, selection }) {\n\t\tconst circle = context.getters.getCircle(circleId)\n\t\tconst results = await addMembers(circleId, selection)\n\t\tconst members = results.map((member) => new Member(member, circle))\n\n\t\tcontext.commit('appendMembersToCircle', members)\n\t\tlogger.debug('Added members to circle', { circle, members })\n\t\tcontext.dispatch('updateCirclesPopulationCount')\n\n\t\treturn members\n\t},\n\n\t/**\n\t * Delete a member from a circle\n\t *\n\t * @param {object} context the store mutations Current context\n\t * @param {Member} member the member to remove\n\t * @param {boolean} [leave] leave the circle instead of removing the member\n\t */\n\tasync deleteMemberFromCircle(context, { member, leave = false }) {\n\t\tconst circleId = member.circle.id\n\t\tconst memberId = member.id\n\n\t\tif (leave) {\n\t\t\tconst circle = await leaveCircle(circleId)\n\t\t\tmember.circle.updateData(circle)\n\n\t\t\t// If the circle is not visible, we remove it from the list\n\t\t\tif (!member.circle.isVisible && !member.circle.isMember) {\n\t\t\t\tawait context.commit('deleteCircle', circle)\n\t\t\t\tlogger.debug('Deleted circle', { circleId, memberId })\n\t\t\t}\n\t\t} else {\n\t\t\tawait deleteMember(circleId, memberId)\n\t\t}\n\n\t\t// success, let's remove from store\n\t\tcontext.commit('deleteMemberFromCircle', member)\n\t\tlogger.debug('Deleted member', { circleId, memberId })\n\t\tcontext.dispatch('updateCirclesPopulationCount')\n\t},\n\n\t/**\n\t * Accept a circle member request\n\t *\n\t * @param {object} context the store mutations Current context\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle id\n\t * @param {string} data.memberId the member id\n\t */\n\tasync acceptCircleMember(context, { circleId, memberId }) {\n\t\tconst circle = context.getters.getCircle(circleId)\n\n\t\tconst result = await acceptMember(circleId, memberId)\n\t\tconst member = new Member(result, circle)\n\n\t\tawait context.commit('addMemberToCircle', { circleId, member })\n\t\tcontext.dispatch('updateCirclesPopulationCount')\n\t},\n\n\tasync editCircleSetting(context, { circleId, setting }) {\n\t\tconst { settings } = await editCircleSetting(circleId, setting)\n\t\tawait context.commit('setCircleSettings', {\n\t\t\tcircleId,\n\t\t\tsettings,\n\t\t})\n\t},\n\n\t/**\n\t * Create an invitation link for a circle\n\t *\n\t * @param {object} context the store mutations\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle to create an invitation for\n\t */\n\tasync createInvitationLink(context, { circleId }) {\n\t\tconst { invitationCode } = await createInvitationLink(circleId)\n\t\tawait context.commit('setInvitationCode', {\n\t\t\tcircleId,\n\t\t\tinvitationCode,\n\t\t})\n\t},\n\n\t/**\n\t * Revoke the invitation link of a circle\n\t *\n\t * @param {object} context the store mutations\n\t * @param {object} data destructuring object\n\t * @param {string} data.circleId the circle to revoke the invitation for\n\t */\n\tasync revokeInvitationLink(context, { circleId }) {\n\t\tconst { invitationCode } = await revokeInvitationLink(circleId)\n\t\tawait context.commit('setInvitationCode', {\n\t\t\tcircleId,\n\t\t\tinvitationCode,\n\t\t})\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","// @ts-nocheck\n/**\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createStore } from 'vuex'\nimport circles from './circles.js'\n\n// Register the (non-namespaced) circles module from Contacts so the ported\n// team page components can use this.$store.getters.getCircle etc.\nexport default createStore({\n\tmodules: { circles },\n})\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { createPinia } from 'pinia'\nimport { createApp } from 'vue'\nimport App from './teams/App.vue'\nimport { logger } from './logger.ts'\nimport { router } from './teams/router.ts'\nimport LegacyGlobalMixin from './teams/team-page/mixins/LegacyGlobalMixin.js'\nimport store from './teams/team-page/store/index.ts'\n\n// OCS endpoints require this header; the ported Contacts services rely on a\n// global default rather than setting it per request.\naxios.defaults.headers.common['OCS-APIRequest'] = 'true'\n\nlogger.debug('Mounting Teams app')\n\nconst app = createApp(App)\napp.use(createPinia())\n// Vuex store from the ported Contacts team page; coexists with Pinia during\n// the migration (the new Teams code uses the Pinia `teams` store).\napp.use(store)\napp.use(router)\n// Provides t/n/logger/OC/OCA to the ported (Options API) Contacts components.\napp.mixin(LegacyGlobalMixin)\napp.mount('#circles-teams')\n"],"file":"teams-main.mjs"} \ No newline at end of file diff --git a/js/teams-settings-admin.mjs b/js/teams-settings-admin.mjs index 65a3a4f7c..a8c1b8d6e 100644 --- a/js/teams-settings-admin.mjs +++ b/js/teams-settings-admin.mjs @@ -1,2 +1,2 @@ -import{d as U,z as m,L as p,M as g,o as I,f as L,w as f,D as h,i as l,J as R,C as v,O as s,P as V,B as _,Q as E,R as T,p as k,S as n,T as b,U as F,V as C,W as P}from"./logger-bSwHn5Oe.chunk.mjs";import{c as S}from"./modulepreload-polyfill-VXKMJdlv.chunk.mjs";import{b as $}from"./NcCheckboxRadioSwitch-BVTMQSAg-D9C2YtoB.chunk.mjs";import{N as z}from"./NcSettingsSection-DmfxX2se-D4Zcymoc.chunk.mjs";import{_ as A}from"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-DjVErfvu.chunk.mjs";const B={class:"federated-teams__sub-section"},D={class:"federated-teams__hint"},J=U({__name:"AdminSettings",setup(O){const c=m(!!p("circles","federatedTeamsEnabled",!1)),d=m(p("circles","federatedTeamsFrontal",""));function w(r){try{const e=new URL(r),a=e.protocol.replace(":","");let t=e.hostname;const u=e.port;let o=e.pathname;return!a||!t?{scheme:null,cloudId:null,path:""}:(!o||o==="/"?o="":o=o.replace(/^\//,"").replace(/\/$/,""),u&&(t+=":"+u),{scheme:a,cloudId:t,path:o})}catch{return{scheme:null,cloudId:null,path:""}}}async function i(r,e){await S();const a=T("/apps/circles/settings/{key}",{appId:"circles",key:r});try{const{data:t}=await k.post(a,{value:e});if(t.ocs.meta.status!=="ok")if(t.ocs.meta.message)n(s("circles","Unable to update federated teams config")),b.error("Error while updating federated teams config",{error:t.ocs});else throw new Error(`${t.ocs.meta.statuscode}`)}catch(t){n(s("circles","Unable to update federated teams config")),b.error("Error while updating federated teams config",{error:t})}}function y(){const r=c.value?"yes":"no";i("federated_teams_enabled",r)}return g(d,async r=>{const{scheme:e,cloudId:a}=w(r);if(e===null||a===null){n(s("circles","Invalid URL format. Please provide a valid URL."));return}await i("federated_teams_frontal",r),F(s("circles","Changed frontal cloud URL"))},{debounce:500}),(r,e)=>(I(),L(l(z),{name:l(s)("circles","Federated Teams"),description:l(s)("circles","Federation allows you to share teams with other trusted servers and make them discoverable across instances.")},{default:f(()=>[h(l($),{modelValue:c.value,"onUpdate:modelValue":[e[0]||(e[0]=a=>c.value=a),y],type:"switch"},{default:f(()=>[R(v(l(s)("circles","Enable federated teams")),1)]),_:1},8,["modelValue"]),V(_("div",B,[h(l(A),{modelValue:d.value,"onUpdate:modelValue":e[1]||(e[1]=a=>d.value=a),label:l(s)("circles","Frontal URL"),placeholder:l(s)("circles","https://…"),type:"url",class:"federated-teams__input"},null,8,["modelValue","label","placeholder"]),_("p",D,v(l(s)("circles","The public URL used by other instances to discover and connect to your teams.")),1)],512),[[E,c.value]])]),_:1},8,["name","description"]))}}),M=C(J,[["__scopeId","data-v-49ffb6c1"]]),N=P(M);N.mount("#vue-admin-federated-teams"); +import{d as U,z as m,L as p,M as g,o as I,f as L,w as f,D as h,i as l,J as R,C as v,O as s,P as V,B as _,Q as E,R as T,p as k,S as n,T as b,U as F,V as C,W as P}from"./logger-Dz7sWQG9.chunk.mjs";import{c as S}from"./modulepreload-polyfill-BnmeGmEh.chunk.mjs";import{b as $}from"./NcPasswordField-Be5_qcfm-zsfal1Pv.chunk.mjs";import{N as z}from"./NcSettingsSection-DmfxX2se-B13WJ1VT.chunk.mjs";import{_ as A}from"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BVK1Qped.chunk.mjs";const B={class:"federated-teams__sub-section"},D={class:"federated-teams__hint"},J=U({__name:"AdminSettings",setup(O){const c=m(!!p("circles","federatedTeamsEnabled",!1)),d=m(p("circles","federatedTeamsFrontal",""));function w(r){try{const e=new URL(r),a=e.protocol.replace(":","");let t=e.hostname;const u=e.port;let o=e.pathname;return!a||!t?{scheme:null,cloudId:null,path:""}:(!o||o==="/"?o="":o=o.replace(/^\//,"").replace(/\/$/,""),u&&(t+=":"+u),{scheme:a,cloudId:t,path:o})}catch{return{scheme:null,cloudId:null,path:""}}}async function i(r,e){await S();const a=T("/apps/circles/settings/{key}",{appId:"circles",key:r});try{const{data:t}=await k.post(a,{value:e});if(t.ocs.meta.status!=="ok")if(t.ocs.meta.message)n(s("circles","Unable to update federated teams config")),b.error("Error while updating federated teams config",{error:t.ocs});else throw new Error(`${t.ocs.meta.statuscode}`)}catch(t){n(s("circles","Unable to update federated teams config")),b.error("Error while updating federated teams config",{error:t})}}function y(){const r=c.value?"yes":"no";i("federated_teams_enabled",r)}return g(d,async r=>{const{scheme:e,cloudId:a}=w(r);if(e===null||a===null){n(s("circles","Invalid URL format. Please provide a valid URL."));return}await i("federated_teams_frontal",r),F(s("circles","Changed frontal cloud URL"))},{debounce:500}),(r,e)=>(I(),L(l(z),{name:l(s)("circles","Federated Teams"),description:l(s)("circles","Federation allows you to share teams with other trusted servers and make them discoverable across instances.")},{default:f(()=>[h(l($),{modelValue:c.value,"onUpdate:modelValue":[e[0]||(e[0]=a=>c.value=a),y],type:"switch"},{default:f(()=>[R(v(l(s)("circles","Enable federated teams")),1)]),_:1},8,["modelValue"]),V(_("div",B,[h(l(A),{modelValue:d.value,"onUpdate:modelValue":e[1]||(e[1]=a=>d.value=a),label:l(s)("circles","Frontal URL"),placeholder:l(s)("circles","https://…"),type:"url",class:"federated-teams__input"},null,8,["modelValue","label","placeholder"]),_("p",D,v(l(s)("circles","The public URL used by other instances to discover and connect to your teams.")),1)],512),[[E,c.value]])]),_:1},8,["name","description"]))}}),M=C(J,[["__scopeId","data-v-49ffb6c1"]]),N=P(M);N.mount("#vue-admin-federated-teams"); //# sourceMappingURL=teams-settings-admin.mjs.map diff --git a/js/teams-settings-admin.mjs.map b/js/teams-settings-admin.mjs.map index 3aca10633..02349afa0 100644 --- a/js/teams-settings-admin.mjs.map +++ b/js/teams-settings-admin.mjs.map @@ -1 +1 @@ -{"version":3,"file":"teams-settings-admin.mjs","sources":["../src/components/AdminSettings.vue","../src/settings-admin.ts"],"sourcesContent":["\n\n\n\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createApp } from 'vue'\nimport AdminSettings from './components/AdminSettings.vue'\n\nimport 'vite/modulepreload-polyfill'\n\nconst app = createApp(AdminSettings)\napp.mount('#vue-admin-federated-teams')\n"],"names":["federatedTeamsEnabled","ref","loadState","federatedTeamsFrontal","parseFederatedTeamsFrontal","url","parsed","scheme","cloudId","port","path","updateAppConfig","key","value","confirmPassword","generateOcsUrl","data","axios","showError","t","logger","error","onToggleFederatedTeams","watchDebounced","showSuccess","_createBlock","_unref","NcSettingsSection","_createVNode","NcCheckboxRadioSwitch","$event","_withDirectives","_createElementVNode","_hoisted_1","NcTextField","_hoisted_2","_toDisplayString","app","createApp","AdminSettings"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"teams-settings-admin.mjs","sources":["../src/components/AdminSettings.vue","../src/settings-admin.ts"],"sourcesContent":["\n\n\n\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createApp } from 'vue'\nimport AdminSettings from './components/AdminSettings.vue'\n\nimport 'vite/modulepreload-polyfill'\n\nconst app = createApp(AdminSettings)\napp.mount('#vue-admin-federated-teams')\n"],"names":["federatedTeamsEnabled","ref","loadState","federatedTeamsFrontal","parseFederatedTeamsFrontal","url","parsed","scheme","cloudId","port","path","updateAppConfig","key","value","confirmPassword","generateOcsUrl","data","axios","showError","t","logger","error","onToggleFederatedTeams","watchDebounced","showSuccess","_createBlock","_unref","NcSettingsSection","_createVNode","NcCheckboxRadioSwitch","$event","_withDirectives","_createElementVNode","_hoisted_1","NcTextField","_hoisted_2","_toDisplayString","app","createApp","AdminSettings"],"mappings":"imBAqBA,MAAMA,EAAwBC,EAAI,CAAA,CAAQC,EAAU,UAAW,wBAAyB,EAAK,CAAE,EACzFC,EAAwBF,EAAIC,EAAkB,UAAW,wBAAyB,EAAE,CAAC,EAO3F,SAASE,EAA2BC,EAAa,CAChD,GAAI,CACH,MAAMC,EAAS,IAAI,IAAID,CAAG,EACpBE,EAASD,EAAO,SAAS,QAAQ,IAAK,EAAE,EAC9C,IAAIE,EAAUF,EAAO,SACrB,MAAMG,EAAOH,EAAO,KACpB,IAAII,EAAOJ,EAAO,SAElB,MAAI,CAACC,GAAU,CAACC,EACR,CAAE,OAAQ,KAAM,QAAS,KAAM,KAAM,EAAA,GAEzC,CAACE,GAAQA,IAAS,IACrBA,EAAO,GAEPA,EAAOA,EAAK,QAAQ,MAAO,EAAE,EAAE,QAAQ,MAAO,EAAE,EAE7CD,IACHD,GAAW,IAAMC,GAGX,CAAE,OAAAF,EAAQ,QAAAC,EAAS,KAAAE,CAAA,EAC3B,MAAQ,CACP,MAAO,CAAE,OAAQ,KAAM,QAAS,KAAM,KAAM,EAAA,CAC7C,CACD,CAQA,eAAeC,EAAgBC,EAAaC,EAAe,CAC1D,MAAMC,EAAA,EAEN,MAAMT,EAAMU,EAAe,+BAAgC,CAC1D,MAAO,UACP,IAAAH,CAAA,CACA,EAED,GAAI,CACH,KAAM,CAAE,KAAAI,CAAA,EAAS,MAAMC,EAAM,KAAkBZ,EAAK,CACnD,MAAAQ,CAAA,CACA,EACD,GAAIG,EAAK,IAAI,KAAK,SAAW,KAC5B,GAAIA,EAAK,IAAI,KAAK,QACjBE,EAAUC,EAAE,UAAW,yCAAyC,CAAC,EACjEC,EAAO,MAAM,8CAA+C,CAAE,MAAOJ,EAAK,IAAK,MAE/E,OAAM,IAAI,MAAM,GAAGA,EAAK,IAAI,KAAK,UAAU,EAAE,CAGhD,OAASK,EAAO,CACfH,EAAUC,EAAE,UAAW,yCAAyC,CAAC,EACjEC,EAAO,MAAM,8CAA+C,CAAE,MAAAC,CAAA,CAAO,CACtE,CACD,CAKA,SAASC,GAAyB,CACjC,MAAMT,EAAQb,EAAsB,MAAQ,MAAQ,KACpDW,EAAgB,0BAA2BE,CAAK,CACjD,CAEA,OAAAU,EAAepB,EAAuB,MAAOU,GAAU,CAEtD,KAAM,CAAE,OAAAN,EAAQ,QAAAC,GAAYJ,EAA2BS,CAAK,EAC5D,GAAIN,IAAW,MAAQC,IAAY,KAAM,CACxCU,EAAUC,EAAE,UAAW,iDAAiD,CAAC,EACzE,MACD,CAEA,MAAMR,EAAgB,0BAA2BE,CAAK,EACtDW,EAAYL,EAAE,UAAW,2BAA2B,CAAC,CACtD,EAAG,CAAE,SAAU,IAAK,cAKnBM,EAwBoBC,EAAAC,CAAA,EAAA,CAvBlB,KAAMD,EAAAP,CAAA,EAAC,UAAA,iBAAA,EACP,YAAaO,EAAAP,CAAA,EAAC,UAAA,8GAAA,CAAA,aACf,IAKwB,CALxBS,EAKwBF,EAAAG,CAAA,EAAA,YAJd7B,EAAA,4CAAAA,EAAqB,MAAA8B,GAEVR,CAAA,EADpB,KAAK,QAAA,aAEL,IAA4C,KAAzCI,EAAAP,CAAA,EAAC,UAAA,wBAAA,CAAA,EAAA,CAAA,CAAA,0BAGLY,EAAAC,EAaM,MAbNC,EAaM,CAVLL,EAKkCF,EAAAQ,CAAA,EAAA,YAJxB/B,EAAA,2CAAAA,EAAqB,MAAA2B,GAC7B,MAAOJ,EAAAP,CAAA,EAAC,UAAA,aAAA,EACR,YAAaO,EAAAP,CAAA,EAAC,UAAA,WAAA,EACf,KAAK,MACL,MAAM,wBAAA,+CAEPa,EAEI,IAFJG,EAEIC,EADAV,EAAAP,CAAA,EAAC,UAAA,+EAAA,CAAA,EAAA,CAAA,CAAA,WAVGnB,EAAA,KAAqB,CAAA,iFC/G1BqC,EAAMC,EAAUC,CAAa,EACnCF,EAAI,MAAM,4BAA4B"} \ No newline at end of file diff --git a/js/teams-settings-team-folders.mjs b/js/teams-settings-team-folders.mjs index 73578c9a7..834e484fa 100644 --- a/js/teams-settings-team-folders.mjs +++ b/js/teams-settings-team-folders.mjs @@ -1,2 +1,2 @@ -import{d as k,O as t,z as h,L as v,e as A,o as D,f as F,w as m,D as f,i as l,J as g,C as p,P as S,B as _,X as T,Q as E,U as w,S as b,R as L,p as N,T as y,V as Q,W as I}from"./logger-bSwHn5Oe.chunk.mjs";import{f as u,p as q}from"./index-KEMyt5AZ.chunk.mjs";import{c as O}from"./modulepreload-polyfill-VXKMJdlv.chunk.mjs";import{b as R}from"./NcCheckboxRadioSwitch-BVTMQSAg-D9C2YtoB.chunk.mjs";import{N as z}from"./index-CbT-ib2g.chunk.mjs";import{N as J}from"./NcSettingsSection-DmfxX2se-D4Zcymoc.chunk.mjs";const M={class:"team-folders__sub-section"},P={class:"team-folders__input-row"},W={class:"team-folders__hint"},X=k({__name:"AdminTeamFolders",setup(x){const r={id:"0",label:t("circles","Unlimited")},B=[{id:"1 GB",label:"1 GB"},{id:"5 GB",label:"5 GB"},{id:"10 GB",label:"10 GB"}],i=h(!!v("circles","teamFolderAutoCreate",!0)),c=Number(v("circles","teamFolderDefaultQuota",0)),U=A(()=>{const e=[...B];if(c<=0)return e.unshift(r),e;const a=u(c),s={id:a,label:a};return e.some(o=>o.id===a)?e.unshift(r):e.unshift(s),e}),n=h(c<=0?r:{id:u(c),label:u(c)});function V(e){const a=q(e,!0);if(a!==null&&a>=0){const s=u(a);return{id:s,label:s}}return r}async function d(e,a){try{await O();const s=L("/apps/circles/settings/{key}",{appId:"circles",key:e}),{data:o}=await N.post(s,{value:a});if(o.ocs.meta.status!=="ok"){if(o.ocs.meta.message)return b(t("circles","Unable to update team space config")),y.error("Error while updating team folder config",{error:o.ocs}),!1;throw new Error(`${o.ocs.meta.statuscode}`)}return!0}catch(s){return b(t("circles","Unable to update team space config")),y.error("Error while updating team folder config",{error:s}),!1}}function G(){const e=i.value?"yes":"no";d("team_folder_auto_create",e)}async function C(){if(n.value.id===r.id){await d("team_folder_default_quota","0")&&w(t("circles","Changed default team space quota"));return}const e=q(n.value.id,!0);if(e===null||e<0){b(t("circles","Quota must be a non-negative number."));return}await d("team_folder_default_quota",String(Math.round(e)))&&w(t("circles","Changed default team space quota"))}return(e,a)=>(D(),F(l(J),{name:l(t)("circles","Team spaces"),description:l(t)("circles","Automatically create a shared team space when a new team is created. Requires the Team Folders app to be installed and enabled.")},{default:m(()=>[f(l(R),{modelValue:i.value,"onUpdate:modelValue":[a[0]||(a[0]=s=>i.value=s),G],type:"switch"},{default:m(()=>[g(p(l(t)("circles","Automatically create a team space")),1)]),_:1},8,["modelValue"]),S(_("div",M,[_("div",P,[f(l(z),{modelValue:n.value,"onUpdate:modelValue":a[1]||(a[1]=s=>n.value=s),clearable:!1,createOption:V,inputLabel:l(t)("circles","Default quota"),options:U.value,placeholder:l(t)("circles","Select default quota"),taggable:"",class:"team-folders__input"},null,8,["modelValue","inputLabel","options","placeholder"]),f(l(T),{variant:"primary",onClick:C},{default:m(()=>[g(p(l(t)("circles","Save")),1)]),_:1})]),_("p",W,p(l(t)("circles","Default storage quota applied to each auto-created team space. Use 0 for unlimited storage.")),1)],512),[[E,i.value]])]),_:1},8,["name","description"]))}}),$=Q(X,[["__scopeId","data-v-c5fb79d2"]]),j=I($);j.mount("#vue-admin-team-folders"); +import{d as k,O as t,z as h,L as v,e as A,o as D,f as F,w as m,D as f,i as l,J as g,C as p,P as S,B as _,X as T,Q as E,U as w,S as b,R as L,p as N,T as y,V as Q,W as I}from"./logger-Dz7sWQG9.chunk.mjs";import{f as u,p as q}from"./index-BRfgOXGi.chunk.mjs";import{c as O}from"./modulepreload-polyfill-BnmeGmEh.chunk.mjs";import{b as R}from"./NcPasswordField-Be5_qcfm-zsfal1Pv.chunk.mjs";import{N as z}from"./index-Bn2rKQQq.chunk.mjs";import{N as J}from"./NcSettingsSection-DmfxX2se-B13WJ1VT.chunk.mjs";const M={class:"team-folders__sub-section"},P={class:"team-folders__input-row"},W={class:"team-folders__hint"},X=k({__name:"AdminTeamFolders",setup(x){const r={id:"0",label:t("circles","Unlimited")},B=[{id:"1 GB",label:"1 GB"},{id:"5 GB",label:"5 GB"},{id:"10 GB",label:"10 GB"}],i=h(!!v("circles","teamFolderAutoCreate",!0)),c=Number(v("circles","teamFolderDefaultQuota",0)),U=A(()=>{const e=[...B];if(c<=0)return e.unshift(r),e;const a=u(c),s={id:a,label:a};return e.some(o=>o.id===a)?e.unshift(r):e.unshift(s),e}),n=h(c<=0?r:{id:u(c),label:u(c)});function V(e){const a=q(e,!0);if(a!==null&&a>=0){const s=u(a);return{id:s,label:s}}return r}async function d(e,a){try{await O();const s=L("/apps/circles/settings/{key}",{appId:"circles",key:e}),{data:o}=await N.post(s,{value:a});if(o.ocs.meta.status!=="ok"){if(o.ocs.meta.message)return b(t("circles","Unable to update team space config")),y.error("Error while updating team folder config",{error:o.ocs}),!1;throw new Error(`${o.ocs.meta.statuscode}`)}return!0}catch(s){return b(t("circles","Unable to update team space config")),y.error("Error while updating team folder config",{error:s}),!1}}function G(){const e=i.value?"yes":"no";d("team_folder_auto_create",e)}async function C(){if(n.value.id===r.id){await d("team_folder_default_quota","0")&&w(t("circles","Changed default team space quota"));return}const e=q(n.value.id,!0);if(e===null||e<0){b(t("circles","Quota must be a non-negative number."));return}await d("team_folder_default_quota",String(Math.round(e)))&&w(t("circles","Changed default team space quota"))}return(e,a)=>(D(),F(l(J),{name:l(t)("circles","Team spaces"),description:l(t)("circles","Automatically create a shared team space when a new team is created. Requires the Team Folders app to be installed and enabled.")},{default:m(()=>[f(l(R),{modelValue:i.value,"onUpdate:modelValue":[a[0]||(a[0]=s=>i.value=s),G],type:"switch"},{default:m(()=>[g(p(l(t)("circles","Automatically create a team space")),1)]),_:1},8,["modelValue"]),S(_("div",M,[_("div",P,[f(l(z),{modelValue:n.value,"onUpdate:modelValue":a[1]||(a[1]=s=>n.value=s),clearable:!1,createOption:V,inputLabel:l(t)("circles","Default quota"),options:U.value,placeholder:l(t)("circles","Select default quota"),taggable:"",class:"team-folders__input"},null,8,["modelValue","inputLabel","options","placeholder"]),f(l(T),{variant:"primary",onClick:C},{default:m(()=>[g(p(l(t)("circles","Save")),1)]),_:1})]),_("p",W,p(l(t)("circles","Default storage quota applied to each auto-created team space. Use 0 for unlimited storage.")),1)],512),[[E,i.value]])]),_:1},8,["name","description"]))}}),$=Q(X,[["__scopeId","data-v-c5fb79d2"]]),j=I($);j.mount("#vue-admin-team-folders"); //# sourceMappingURL=teams-settings-team-folders.mjs.map diff --git a/js/teams-settings-team-folders.mjs.map b/js/teams-settings-team-folders.mjs.map index 47b7752df..8c45d87e0 100644 --- a/js/teams-settings-team-folders.mjs.map +++ b/js/teams-settings-team-folders.mjs.map @@ -1 +1 @@ -{"version":3,"file":"teams-settings-team-folders.mjs","sources":["../src/components/AdminTeamFolders.vue","../src/settings-team-folders.ts"],"sourcesContent":["\n\n\n\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createApp } from 'vue'\nimport AdminTeamFolders from './components/AdminTeamFolders.vue'\n\nimport 'vite/modulepreload-polyfill'\n\nconst app = createApp(AdminTeamFolders)\napp.mount('#vue-admin-team-folders')\n"],"names":["unlimitedQuota","t","quotaPreset","teamFolderAutoCreate","ref","loadState","teamFolderDefaultQuotaBytes","quotaOptions","computed","options","label","formatFileSize","option","q","selectedQuota","validateQuota","quota","parsed","parseFileSize","updateAppConfig","key","value","confirmPassword","url","generateOcsUrl","data","axios","showError","logger","error","onToggleTeamFolderAutoCreate","onSaveQuota","showSuccess","bytes","_createBlock","_unref","NcSettingsSection","_createVNode","NcCheckboxRadioSwitch","$event","_withDirectives","_createElementVNode","_hoisted_1","_hoisted_2","NcSelect","NcButton","_hoisted_3","_toDisplayString","app","createApp","AdminTeamFolders"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"teams-settings-team-folders.mjs","sources":["../src/components/AdminTeamFolders.vue","../src/settings-team-folders.ts"],"sourcesContent":["\n\n\n\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createApp } from 'vue'\nimport AdminTeamFolders from './components/AdminTeamFolders.vue'\n\nimport 'vite/modulepreload-polyfill'\n\nconst app = createApp(AdminTeamFolders)\napp.mount('#vue-admin-team-folders')\n"],"names":["unlimitedQuota","t","quotaPreset","teamFolderAutoCreate","ref","loadState","teamFolderDefaultQuotaBytes","quotaOptions","computed","options","label","formatFileSize","option","q","selectedQuota","validateQuota","quota","parsed","parseFileSize","updateAppConfig","key","value","confirmPassword","url","generateOcsUrl","data","axios","showError","logger","error","onToggleTeamFolderAutoCreate","onSaveQuota","showSuccess","bytes","_createBlock","_unref","NcSettingsSection","_createVNode","NcCheckboxRadioSwitch","$event","_withDirectives","_createElementVNode","_hoisted_1","_hoisted_2","NcSelect","NcButton","_hoisted_3","_toDisplayString","app","createApp","AdminTeamFolders"],"mappings":"4oBA2BA,MAAMA,EAA8B,CACnC,GAAI,IACJ,MAAOC,EAAE,UAAW,WAAW,CAAA,EAG1BC,EAA6B,CAClC,CAAE,GAAI,OAAQ,MAAO,MAAA,EACrB,CAAE,GAAI,OAAQ,MAAO,MAAA,EACrB,CAAE,GAAI,QAAS,MAAO,OAAA,CAAQ,EAGzBC,EAAuBC,EAAI,CAAA,CAAQC,EAAU,UAAW,uBAAwB,EAAI,CAAE,EAEtFC,EAA8B,OAAOD,EAAU,UAAW,yBAA0B,CAAC,CAAC,EAEtFE,EAAeC,EAAwB,IAAM,CAClD,MAAMC,EAAU,CAAC,GAAGP,CAAW,EAC/B,GAAII,GAA+B,EAClC,OAAAG,EAAQ,QAAQT,CAAc,EACvBS,EAER,MAAMC,EAAQC,EAAeL,CAA2B,EAClDM,EAAS,CAAE,GAAIF,EAAO,MAAAA,CAAA,EAC5B,OAAKD,EAAQ,KAAMI,GAAMA,EAAE,KAAOH,CAAK,EAGtCD,EAAQ,QAAQT,CAAc,EAF9BS,EAAQ,QAAQG,CAAM,EAIhBH,CACR,CAAC,EAEKK,EAAgBV,EAAiBE,GAA+B,EACnEN,EACA,CAAE,GAAIW,EAAeL,CAA2B,EAAG,MAAOK,EAAeL,CAA2B,EAAG,EAQ1G,SAASS,EAAcC,EAA4B,CAClD,MAAMC,EAASC,EAAcF,EAAO,EAAI,EACxC,GAAIC,IAAW,MAAQA,GAAU,EAAG,CACnC,MAAMP,EAAQC,EAAeM,CAAM,EACnC,MAAO,CAAE,GAAIP,EAAO,MAAAA,CAAA,CACrB,CACA,OAAOV,CACR,CAQA,eAAemB,EAAgBC,EAAaC,EAAiC,CAC5E,GAAI,CACH,MAAMC,EAAA,EAEN,MAAMC,EAAMC,EAAe,+BAAgC,CAC1D,MAAO,UACP,IAAAJ,CAAA,CACA,EACK,CAAE,KAAAK,CAAA,EAAS,MAAMC,EAAM,KAAkBH,EAAK,CACnD,MAAAF,CAAA,CACA,EACD,GAAII,EAAK,IAAI,KAAK,SAAW,KAAM,CAClC,GAAIA,EAAK,IAAI,KAAK,QACjB,OAAAE,EAAU1B,EAAE,UAAW,oCAAoC,CAAC,EAC5D2B,EAAO,MAAM,0CAA2C,CAAE,MAAOH,EAAK,IAAK,EACpE,GAEP,MAAM,IAAI,MAAM,GAAGA,EAAK,IAAI,KAAK,UAAU,EAAE,CAE/C,CACA,MAAO,EACR,OAASI,EAAO,CACf,OAAAF,EAAU1B,EAAE,UAAW,oCAAoC,CAAC,EAC5D2B,EAAO,MAAM,0CAA2C,CAAE,MAAAC,CAAA,CAAO,EAC1D,EACR,CACD,CAKA,SAASC,GAA+B,CACvC,MAAMT,EAAQlB,EAAqB,MAAQ,MAAQ,KACnDgB,EAAgB,0BAA2BE,CAAK,CACjD,CAQA,eAAeU,GAAc,CAC5B,GAAIjB,EAAc,MAAM,KAAOd,EAAe,GAAI,CAC7C,MAAMmB,EAAgB,4BAA6B,GAAG,GACzDa,EAAY/B,EAAE,UAAW,kCAAkC,CAAC,EAE7D,MACD,CAEA,MAAMgC,EAAQf,EAAcJ,EAAc,MAAM,GAAI,EAAI,EACxD,GAAImB,IAAU,MAAQA,EAAQ,EAAG,CAChCN,EAAU1B,EAAE,UAAW,sCAAsC,CAAC,EAC9D,MACD,CAEI,MAAMkB,EAAgB,4BAA6B,OAAO,KAAK,MAAMc,CAAK,CAAC,CAAC,GAC/ED,EAAY/B,EAAE,UAAW,kCAAkC,CAAC,CAE9D,mBAICiC,EAkCoBC,EAAAC,CAAA,EAAA,CAjClB,KAAMD,EAAAlC,CAAA,EAAC,UAAA,aAAA,EACP,YAAakC,EAAAlC,CAAA,EAAC,UAAA,iIAAA,CAAA,aACf,IAKwB,CALxBoC,EAKwBF,EAAAG,CAAA,EAAA,YAJdnC,EAAA,4CAAAA,EAAoB,MAAAoC,GAETT,CAAA,EADpB,KAAK,QAAA,aAEL,IAAuD,KAApDK,EAAAlC,CAAA,EAAC,UAAA,mCAAA,CAAA,EAAA,CAAA,CAAA,0BAGLuC,EAAAC,EAuBM,MAvBNC,EAuBM,CApBLD,EAeM,MAfNE,EAeM,CAdLN,EAQ+BF,EAAAS,CAAA,EAAA,YAPrB9B,EAAA,2CAAAA,EAAa,MAAAyB,GACrB,UAAW,GACX,aAAcxB,EACd,WAAYoB,EAAAlC,CAAA,EAAC,UAAA,eAAA,EACb,QAASM,EAAA,MACT,YAAa4B,EAAAlC,CAAA,EAAC,UAAA,sBAAA,EACf,SAAA,GACA,MAAM,qBAAA,8DACPoC,EAIWF,EAAAU,CAAA,EAAA,CAHV,QAAQ,UACP,QAAOd,CAAA,aACR,IAA0B,KAAvBI,EAAAlC,CAAA,EAAC,UAAA,MAAA,CAAA,EAAA,CAAA,CAAA,WAINwC,EAEI,IAFJK,EAEIC,EADAZ,EAAAlC,CAAA,EAAC,UAAA,6FAAA,CAAA,EAAA,CAAA,CAAA,WApBGE,EAAA,KAAoB,CAAA,iFCnJzB6C,EAAMC,EAAUC,CAAgB,EACtCF,EAAI,MAAM,yBAAyB"} \ No newline at end of file