From dd8b23f3a3fdef0773e2d460683b31f69a13d0f0 Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Fri, 24 Jul 2026 10:56:46 +0200 Subject: [PATCH 1/3] refactor(files-sharing): inject IManager into LoadAdditionalListener Resolve the share manager through constructor injection instead of Server::get() so the listener follows the app's dependency-injection conventions. Signed-off-by: Misha M.-Kupriyanov --- .../lib/Listener/LoadAdditionalListener.php | 10 +++++++--- .../tests/Listener/LoadAdditionalListenerTest.php | 8 +++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/files_sharing/lib/Listener/LoadAdditionalListener.php b/apps/files_sharing/lib/Listener/LoadAdditionalListener.php index ca5bc6e999b20..99a8bf392eabb 100644 --- a/apps/files_sharing/lib/Listener/LoadAdditionalListener.php +++ b/apps/files_sharing/lib/Listener/LoadAdditionalListener.php @@ -13,12 +13,17 @@ use OCA\Files_Sharing\AppInfo\Application; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; -use OCP\Server; use OCP\Share\IManager; use OCP\Util; /** @template-implements IEventListener */ class LoadAdditionalListener implements IEventListener { + + public function __construct( + private IManager $shareManager, + ) { + } + #[\Override] public function handle(Event $event): void { if (!($event instanceof LoadAdditionalScriptsEvent)) { @@ -29,8 +34,7 @@ public function handle(Event $event): void { Util::addScript(Application::APP_ID, 'additionalScripts', 'files'); Util::addStyle(Application::APP_ID, 'icons'); - $shareManager = Server::get(IManager::class); - if ($shareManager->shareApiEnabled()) { + if ($this->shareManager->shareApiEnabled()) { Util::addInitScript(Application::APP_ID, 'init'); } } diff --git a/apps/files_sharing/tests/Listener/LoadAdditionalListenerTest.php b/apps/files_sharing/tests/Listener/LoadAdditionalListenerTest.php index 75bee35d58a24..7f106e306e829 100644 --- a/apps/files_sharing/tests/Listener/LoadAdditionalListenerTest.php +++ b/apps/files_sharing/tests/Listener/LoadAdditionalListenerTest.php @@ -56,7 +56,7 @@ protected function tearDown(): void { } public function testHandleIgnoresNonMatchingEvent(): void { - $listener = new LoadAdditionalListener(); + $listener = new LoadAdditionalListener($this->shareManager); $event = $this->createMock(Event::class); // Should not throw or call anything @@ -66,13 +66,12 @@ public function testHandleIgnoresNonMatchingEvent(): void { } public function testHandleWithLoadAdditionalScriptsEvent(): void { - $listener = new LoadAdditionalListener(); + $listener = new LoadAdditionalListener($this->shareManager); $this->shareManager->method('shareApiEnabled')->willReturn(false); $this->factory->method('findLanguage')->willReturn('language_mock'); $this->config->method('getSystemValueBool')->willReturn(true); - $this->overwriteService(IManager::class, $this->shareManager); $this->overwriteService(IFactory::class, $this->factory); $this->overwriteService(InitialStateService::class, $this->initialStateService); $this->overwriteService(IConfig::class, $this->config); @@ -96,12 +95,11 @@ public function testHandleWithLoadAdditionalScriptsEvent(): void { } public function testHandleWithLoadAdditionalScriptsEventWithShareApiEnabled(): void { - $listener = new LoadAdditionalListener(); + $listener = new LoadAdditionalListener($this->shareManager); $this->shareManager->method('shareApiEnabled')->willReturn(true); $this->config->method('getSystemValueBool')->willReturn(true); - $this->overwriteService(IManager::class, $this->shareManager); $this->overwriteService(InitialStateService::class, $this->initialStateService); $this->overwriteService(IConfig::class, $this->config); $this->overwriteService(IFactory::class, $this->factory); From c93206b34bdeb95481160492674ed14cb62c382b Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Fri, 24 Jul 2026 11:00:15 +0200 Subject: [PATCH 2/3] feat(files-sharing): show pending shares menu only if feature enabled # menu is removed on ./occ config:system:set --value true --type boolean -- sharing.enable_share_accept # menu is shown on ./occ config:system:set --value false --type boolean -- sharing.enable_share_accept Signed-off-by: Misha M.-Kupriyanov --- .../lib/Listener/LoadAdditionalListener.php | 37 ++++ .../src/files_views/shares.spec.ts | 46 ++++- apps/files_sharing/src/files_views/shares.ts | 22 +++ .../Listener/LoadAdditionalListenerTest.php | 178 ++++++++++++++++-- 4 files changed, 269 insertions(+), 14 deletions(-) diff --git a/apps/files_sharing/lib/Listener/LoadAdditionalListener.php b/apps/files_sharing/lib/Listener/LoadAdditionalListener.php index 99a8bf392eabb..e20283a6bdfd8 100644 --- a/apps/files_sharing/lib/Listener/LoadAdditionalListener.php +++ b/apps/files_sharing/lib/Listener/LoadAdditionalListener.php @@ -11,16 +11,25 @@ use OCA\Files\Event\LoadAdditionalScriptsEvent; use OCA\Files_Sharing\AppInfo\Application; +use OCA\Files_Sharing\External\Manager as ExternalManager; +use OCP\AppFramework\Services\IInitialState; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; +use OCP\IConfig; +use OCP\IUserSession; use OCP\Share\IManager; +use OCP\Share\IShare; use OCP\Util; /** @template-implements IEventListener */ class LoadAdditionalListener implements IEventListener { public function __construct( + private IInitialState $initialState, + private IConfig $config, private IManager $shareManager, + private IUserSession $userSession, + private ExternalManager $externalManager, ) { } @@ -37,5 +46,33 @@ public function handle(Event $event): void { if ($this->shareManager->shareApiEnabled()) { Util::addInitScript(Application::APP_ID, 'init'); } + + $this->provideInitialStates(); + } + + private function provideInitialStates(): void { + $user = $this->userSession->getUser(); + if ($user === null) { + return; + } + + $acceptDefault = $this->config->getSystemValueBool('sharing.enable_share_accept'); + $this->initialState->provideInitialState('sharing.enable_share_accept', $acceptDefault); + + $hasPendingShares = $this->hasPendingShares($user->getUID()); + $this->initialState->provideInitialState('has_pending_shares', $hasPendingShares); + } + + private function hasPendingShares(string $userId): bool { + foreach ([IShare::TYPE_USER, IShare::TYPE_GROUP] as $shareType) { + $shares = $this->shareManager->getSharedWith($userId, $shareType, null, -1, 0); + foreach ($shares as $share) { + if ($share->getStatus() === IShare::STATUS_PENDING || $share->getStatus() === IShare::STATUS_REJECTED) { + return true; + } + } + } + + return !empty($this->externalManager->getOpenShares()); } } diff --git a/apps/files_sharing/src/files_views/shares.spec.ts b/apps/files_sharing/src/files_views/shares.spec.ts index 43c9fdf589851..50ed64be1e98c 100644 --- a/apps/files_sharing/src/files_views/shares.spec.ts +++ b/apps/files_sharing/src/files_views/shares.spec.ts @@ -25,9 +25,26 @@ beforeEach(() => { expect(navigation.views).toHaveLength(0) }) +/** Helper to mock loadState with sharing.enable_share_accept and has_pending_shares defaults */ +function mockLoadState({ acceptDefault = true, hasPendingShares = true, storageQuota = -1 } = {}) { + return vi.spyOn(ncInitialState, 'loadState').mockImplementation((app, key, defaultValue) => { + if (app === 'files_sharing' && key === 'sharing.enable_share_accept') { + return acceptDefault + } + if (app === 'files_sharing' && key === 'has_pending_shares') { + return hasPendingShares + } + if (app === 'files' && key === 'storageStats') { + return { quota: storageQuota } + } + return defaultValue + }) +} + describe('Sharing views definition', () => { - test('Default values', () => { + test('Default values with pending shares and accept enabled', () => { vi.spyOn(navigation, 'register') + mockLoadState({ acceptDefault: true, hasPendingShares: true }) registerSharingViews() const shareOverviewView = navigation.views.find((view) => view.id === 'shareoverview') as View @@ -71,9 +88,33 @@ describe('Sharing views definition', () => { }) }) + test('Pending shares view is not registered when accept is disabled', () => { + vi.spyOn(navigation, 'register') + mockLoadState({ acceptDefault: false, hasPendingShares: true }) + + registerSharingViews() + expect(navigation.register).toHaveBeenCalledTimes(6) + expect(navigation.views.length).toBe(6) + + const pendingSharesView = navigation.views.find((view) => view.id === 'pendingshares') + expect(pendingSharesView).toBeUndefined() + }) + + test('Pending shares view is not registered when there are no pending shares', () => { + vi.spyOn(navigation, 'register') + mockLoadState({ acceptDefault: true, hasPendingShares: false }) + + registerSharingViews() + expect(navigation.register).toHaveBeenCalledTimes(6) + expect(navigation.views.length).toBe(6) + + const pendingSharesView = navigation.views.find((view) => view.id === 'pendingshares') + expect(pendingSharesView).toBeUndefined() + }) + test('Shared with others view is not registered if user has no storage quota', () => { vi.spyOn(navigation, 'register') - const spy = vi.spyOn(ncInitialState, 'loadState').mockImplementationOnce(() => ({ quota: 0 })) + const spy = mockLoadState({ acceptDefault: true, hasPendingShares: true, storageQuota: 0 }) expect(navigation.views.length).toBe(0) registerSharingViews() @@ -95,6 +136,7 @@ describe('Sharing views definition', () => { describe('Sharing views contents', () => { test('Sharing overview get contents', async () => { + mockLoadState({ acceptDefault: true, hasPendingShares: true }) vi.spyOn(axios, 'get').mockImplementation(async (): Promise => { return { data: { diff --git a/apps/files_sharing/src/files_views/shares.ts b/apps/files_sharing/src/files_views/shares.ts index 112bc2909988b..f7fc6c48e6b42 100644 --- a/apps/files_sharing/src/files_views/shares.ts +++ b/apps/files_sharing/src/files_views/shares.ts @@ -24,6 +24,24 @@ export const deletedSharesViewId = 'deletedshares' export const pendingSharesViewId = 'pendingshares' export const fileRequestViewId = 'filerequest' +/** + * Checks if share accept approval is required by Nextcloud configuration. + * + * @return True if share accept approval is required, otherwise false. + */ +function isShareAcceptApprovalRequired(): boolean { + return loadState('files_sharing', 'sharing.enable_share_accept', false) +} + +/** + * Checks if the current user has any pending shares. + * + * @return True if the user has pending shares, otherwise false. + */ +function hasPendingShares(): boolean { + return loadState('files_sharing', 'has_pending_shares', false) +} + export default () => { const Navigation = getNavigation() Navigation.register(new View({ @@ -137,6 +155,10 @@ export default () => { getContents: () => getContents(false, false, false, true), })) + if (!isShareAcceptApprovalRequired() || !hasPendingShares()) { + return + } + Navigation.register(new View({ id: pendingSharesViewId, name: t('files_sharing', 'Pending shares'), diff --git a/apps/files_sharing/tests/Listener/LoadAdditionalListenerTest.php b/apps/files_sharing/tests/Listener/LoadAdditionalListenerTest.php index 7f106e306e829..56eee65ca2132 100644 --- a/apps/files_sharing/tests/Listener/LoadAdditionalListenerTest.php +++ b/apps/files_sharing/tests/Listener/LoadAdditionalListenerTest.php @@ -9,13 +9,17 @@ namespace OCA\Files_Sharing\Tests\Listener; -use OC\InitialStateService; use OCA\Files\Event\LoadAdditionalScriptsEvent; +use OCA\Files_Sharing\External\Manager as ExternalManager; use OCA\Files_Sharing\Listener\LoadAdditionalListener; +use OCP\AppFramework\Services\IInitialState; use OCP\EventDispatcher\Event; use OCP\IConfig; +use OCP\IUser; +use OCP\IUserSession; use OCP\L10N\IFactory; use OCP\Share\IManager; +use OCP\Share\IShare; use OCP\Util; use PHPUnit\Framework\MockObject\MockObject; use Psr\Log\LoggerInterface; @@ -26,7 +30,9 @@ class LoadAdditionalListenerTest extends TestCase { protected LoadAdditionalScriptsEvent&MockObject $event; protected IManager&MockObject $shareManager; protected IFactory&MockObject $factory; - protected InitialStateService&MockObject $initialStateService; + protected IInitialState&MockObject $initialState; + protected IUserSession&MockObject $userSession; + protected ExternalManager&MockObject $externalManager; protected IConfig&MockObject $config; protected function setUp(): void { @@ -36,7 +42,9 @@ protected function setUp(): void { $this->event = $this->createMock(LoadAdditionalScriptsEvent::class); $this->shareManager = $this->createMock(IManager::class); $this->factory = $this->createMock(IFactory::class); - $this->initialStateService = $this->createMock(InitialStateService::class); + $this->initialState = $this->createMock(IInitialState::class); + $this->userSession = $this->createMock(IUserSession::class); + $this->externalManager = $this->createMock(ExternalManager::class); $this->config = $this->createMock(IConfig::class); /* Empty static array to avoid inter-test conflicts */ @@ -56,7 +64,13 @@ protected function tearDown(): void { } public function testHandleIgnoresNonMatchingEvent(): void { - $listener = new LoadAdditionalListener($this->shareManager); + $listener = new LoadAdditionalListener( + $this->initialState, + $this->config, + $this->shareManager, + $this->userSession, + $this->externalManager, + ); $event = $this->createMock(Event::class); // Should not throw or call anything @@ -66,15 +80,19 @@ public function testHandleIgnoresNonMatchingEvent(): void { } public function testHandleWithLoadAdditionalScriptsEvent(): void { - $listener = new LoadAdditionalListener($this->shareManager); + $listener = new LoadAdditionalListener( + $this->initialState, + $this->config, + $this->shareManager, + $this->userSession, + $this->externalManager, + ); $this->shareManager->method('shareApiEnabled')->willReturn(false); $this->factory->method('findLanguage')->willReturn('language_mock'); - $this->config->method('getSystemValueBool')->willReturn(true); + $this->userSession->method('getUser')->willReturn(null); $this->overwriteService(IFactory::class, $this->factory); - $this->overwriteService(InitialStateService::class, $this->initialStateService); - $this->overwriteService(IConfig::class, $this->config); $scriptsBefore = Util::getScripts(); $this->assertNotContains('files_sharing/l10n/language_mock', $scriptsBefore); @@ -95,13 +113,17 @@ public function testHandleWithLoadAdditionalScriptsEvent(): void { } public function testHandleWithLoadAdditionalScriptsEventWithShareApiEnabled(): void { - $listener = new LoadAdditionalListener($this->shareManager); + $listener = new LoadAdditionalListener( + $this->initialState, + $this->config, + $this->shareManager, + $this->userSession, + $this->externalManager, + ); $this->shareManager->method('shareApiEnabled')->willReturn(true); - $this->config->method('getSystemValueBool')->willReturn(true); + $this->userSession->method('getUser')->willReturn(null); - $this->overwriteService(InitialStateService::class, $this->initialStateService); - $this->overwriteService(IConfig::class, $this->config); $this->overwriteService(IFactory::class, $this->factory); $scriptsBefore = Util::getScripts(); @@ -115,4 +137,136 @@ public function testHandleWithLoadAdditionalScriptsEventWithShareApiEnabled(): v // assert array $scripts contains the expected scripts $this->assertContains('files_sharing/js/init', $scriptsAfter); } + + public function testProvideInitialStatesWithPendingInternalShares(): void { + $listener = new LoadAdditionalListener( + $this->initialState, + $this->config, + $this->shareManager, + $this->userSession, + $this->externalManager, + ); + + $user = $this->createMock(IUser::class); + $user->method('getUID')->willReturn('testuser'); + $this->userSession->method('getUser')->willReturn($user); + + $share = $this->createMock(IShare::class); + $share->method('getStatus')->willReturn(IShare::STATUS_PENDING); + + $this->shareManager->method('shareApiEnabled')->willReturn(true); + $this->shareManager->method('getSharedWith') + ->willReturnCallback(function (string $userId, int $shareType) use ($share) { + if ($shareType === IShare::TYPE_USER) { + return [$share]; + } + return []; + }); + + $this->externalManager->method('getOpenShares')->willReturn([]); + $this->config->method('getSystemValueBool')->with('sharing.enable_share_accept')->willReturn(true); + + $expectedCalls = [ + ['sharing.enable_share_accept', true], + ['has_pending_shares', true], + ]; + $this->initialState->expects($this->exactly(2)) + ->method('provideInitialState') + ->willReturnCallback(function (string $key, $data) use (&$expectedCalls): void { + $this->assertSame(array_shift($expectedCalls), [$key, $data]); + }); + + $this->overwriteService(IFactory::class, $this->factory); + + $listener->handle($this->event); + } + + public function testProvideInitialStatesWithPendingRemoteShares(): void { + $listener = new LoadAdditionalListener( + $this->initialState, + $this->config, + $this->shareManager, + $this->userSession, + $this->externalManager, + ); + + $user = $this->createMock(IUser::class); + $user->method('getUID')->willReturn('testuser'); + $this->userSession->method('getUser')->willReturn($user); + + $this->shareManager->method('shareApiEnabled')->willReturn(true); + $this->shareManager->method('getSharedWith')->willReturn([]); + + $this->externalManager->method('getOpenShares')->willReturn([['id' => 1, 'remote' => 'example.com']]); + $this->config->method('getSystemValueBool')->with('sharing.enable_share_accept')->willReturn(true); + + $expectedCalls = [ + ['sharing.enable_share_accept', true], + ['has_pending_shares', true], + ]; + $this->initialState->expects($this->exactly(2)) + ->method('provideInitialState') + ->willReturnCallback(function (string $key, $data) use (&$expectedCalls): void { + $this->assertSame(array_shift($expectedCalls), [$key, $data]); + }); + + $this->overwriteService(IFactory::class, $this->factory); + + $listener->handle($this->event); + } + + public function testProvideInitialStatesWithNoPendingShares(): void { + $listener = new LoadAdditionalListener( + $this->initialState, + $this->config, + $this->shareManager, + $this->userSession, + $this->externalManager, + ); + + $user = $this->createMock(IUser::class); + $user->method('getUID')->willReturn('testuser'); + $this->userSession->method('getUser')->willReturn($user); + + $this->shareManager->method('shareApiEnabled')->willReturn(true); + $this->shareManager->method('getSharedWith')->willReturn([]); + + $this->externalManager->method('getOpenShares')->willReturn([]); + $this->config->method('getSystemValueBool')->with('sharing.enable_share_accept')->willReturn(false); + + $expectedCalls = [ + ['sharing.enable_share_accept', false], + ['has_pending_shares', false], + ]; + $this->initialState->expects($this->exactly(2)) + ->method('provideInitialState') + ->willReturnCallback(function (string $key, $data) use (&$expectedCalls): void { + $this->assertSame(array_shift($expectedCalls), [$key, $data]); + }); + + $this->overwriteService(IFactory::class, $this->factory); + + $listener->handle($this->event); + } + + public function testProvideInitialStatesWithNoUser(): void { + $listener = new LoadAdditionalListener( + $this->initialState, + $this->config, + $this->shareManager, + $this->userSession, + $this->externalManager, + ); + + $this->userSession->method('getUser')->willReturn(null); + + $this->initialState->expects($this->never()) + ->method('provideInitialState'); + + $this->shareManager->method('shareApiEnabled')->willReturn(true); + + $this->overwriteService(IFactory::class, $this->factory); + + $listener->handle($this->event); + } } From a366b5ffa8beb0c9ee6931633722b9753c355a16 Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Fri, 24 Jul 2026 11:00:36 +0200 Subject: [PATCH 3/3] chore(files-sharing): rebuild assets Signed-off-by: Misha M.-Kupriyanov --- dist/files_sharing-init.js | 4 ++-- dist/files_sharing-init.js.map | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/files_sharing-init.js b/dist/files_sharing-init.js index 87005e7ee4a12..10c4d928de6ab 100644 --- a/dist/files_sharing-init.js +++ b/dist/files_sharing-init.js @@ -1,2 +1,2 @@ -(()=>{var e,t,n,r={99770(e,t,n){"use strict";var r=n(35810),i=n(77815),s=n(44368),a=n(61338),o=n(53334),l=n(63814);const c='',d='',u='',p='';var h=n(81222),f=n(40715),m=n(87543);const g="shareoverview",v="sharingin",w="sharingout",A="sharinglinks",b="deletedshares",y="pendingshares",_=()=>{const e=(0,r.bh)();e.register(new r.Ss({id:g,name:(0,o.t)("files_sharing","Shares"),caption:(0,o.t)("files_sharing","Overview of shared files."),emptyTitle:(0,o.t)("files_sharing","No shares"),emptyCaption:(0,o.t)("files_sharing","Files and folders you shared or have been shared with you will show up here"),icon:d,order:20,columns:[],getContents:()=>(0,m.h)()})),e.register(new r.Ss({id:v,name:(0,o.t)("files_sharing","Shared with you"),caption:(0,o.t)("files_sharing","List of files that are shared with you."),emptyTitle:(0,o.t)("files_sharing","Nothing shared with you yet"),emptyCaption:(0,o.t)("files_sharing","Files and folders others shared with you will show up here"),icon:'',order:1,parent:g,columns:[],getContents:()=>(0,m.h)(!0,!1,!1,!1)})),0!==(0,h.C)("files","storageStats",{quota:-1}).quota&&e.register(new r.Ss({id:w,name:(0,o.t)("files_sharing","Shared with others"),caption:(0,o.t)("files_sharing","List of files that you shared with others."),emptyTitle:(0,o.t)("files_sharing","Nothing shared yet"),emptyCaption:(0,o.t)("files_sharing","Files and folders you shared will show up here"),icon:c,order:2,parent:g,columns:[],getContents:()=>(0,m.h)(!1,!0,!1,!1)})),e.register(new r.Ss({id:A,name:(0,o.t)("files_sharing","Shared by link"),caption:(0,o.t)("files_sharing","List of files that are shared by link."),emptyTitle:(0,o.t)("files_sharing","No shared links"),emptyCaption:(0,o.t)("files_sharing","Files and folders you shared by link will show up here"),icon:p,order:3,parent:g,columns:[],getContents:()=>(0,m.h)(!1,!0,!1,!1,[f.I.Link])})),e.register(new r.Ss({id:"filerequest",name:(0,o.t)("files_sharing","File requests"),caption:(0,o.t)("files_sharing","List of file requests."),emptyTitle:(0,o.t)("files_sharing","No file requests"),emptyCaption:(0,o.t)("files_sharing","File requests you have created will show up here"),icon:u,order:4,parent:g,columns:[],getContents:()=>(0,m.h)(!1,!0,!1,!1,[f.I.Link,f.I.Email]).then(({folder:e,contents:t})=>({folder:e,contents:t.filter(e=>(0,m.C)(e.attributes?.["share-attributes"]||[]))}))})),e.register(new r.Ss({id:b,name:(0,o.t)("files_sharing","Deleted shares"),caption:(0,o.t)("files_sharing","List of shares you left."),emptyTitle:(0,o.t)("files_sharing","No deleted shares"),emptyCaption:(0,o.t)("files_sharing","Shares you have left will show up here"),icon:'',order:5,parent:g,columns:[],getContents:()=>(0,m.h)(!1,!1,!1,!0)})),e.register(new r.Ss({id:y,name:(0,o.t)("files_sharing","Pending shares"),caption:(0,o.t)("files_sharing","List of unapproved shares."),emptyTitle:(0,o.t)("files_sharing","No pending shares"),emptyCaption:(0,o.t)("files_sharing","Shares you have received but not approved will show up here"),icon:'',order:6,parent:g,columns:[],getContents:()=>(0,m.h)(!1,!1,!0,!1)}))};(Object.getOwnPropertyDescriptor(_,"name")||{}).writable||Object.defineProperty(_,"name",{value:"default",configurable:!0});const C={id:"accept-share",displayName:({nodes:e})=>(0,o.zw)("files_sharing","Accept share","Accept shares",e.length),iconSvgInline:()=>'',enabled:({nodes:e,view:t})=>e.length>0&&t.id===y,async exec({nodes:e}){try{const t=e[0],n=!!t.attributes.remote,r=(0,l.KT)("apps/files_sharing/api/v1/{shareBase}/pending/{id}",{shareBase:n?"remote_shares":"shares",id:t.attributes["share-id"]});return await s.Ay.post(r),(0,a.Ic)("files:node:deleted",t),!0}catch{return!1}},async execBatch({nodes:e,view:t,folder:n,contents:r}){return Promise.all(e.map(e=>this.exec({nodes:[e],view:t,folder:n,contents:r})))},order:1,inline:()=>!0},x={id:"files_sharing:open-in-files",displayName:()=>(0,o.Tl)("files_sharing","Open in Files"),iconSvgInline:()=>"",enabled:({view:e})=>[g,v,w,A].includes(e.id),async exec({nodes:e}){const t=e[0].type===r.pt.Folder;return window.OCP.Files.Router.goToRoute(null,{view:"files",fileid:String(e[0].fileid)},{dir:t?e[0].path:e[0].dirname,openfile:t?void 0:"true"}),null},order:-1e3,default:r.m9.HIDDEN},E={id:"reject-share",displayName:({nodes:e})=>(0,o.zw)("files_sharing","Reject share","Reject shares",e.length),iconSvgInline:()=>'',enabled:({nodes:e,view:t})=>t.id===y&&0!==e.length&&!e.some(e=>e.attributes.remote_id&&e.attributes.share_type===f.I.RemoteGroup),async exec({nodes:e}){try{const t=e[0],n=t.attributes.remote?"remote_shares":"shares",r=t.attributes["share-id"];let i;return i=0===t.attributes.accepted?(0,l.KT)("apps/files_sharing/api/v1/{shareBase}/pending/{id}",{shareBase:n,id:r}):(0,l.KT)("apps/files_sharing/api/v1/{shareBase}/{id}",{shareBase:n,id:r}),await s.Ay.delete(i),(0,a.Ic)("files:node:deleted",t),!0}catch{return!1}},async execBatch({nodes:e,view:t,folder:n,contents:r}){return Promise.all(e.map(e=>this.exec({nodes:[e],view:t,folder:n,contents:r})))},order:2,inline:()=>!0},D={id:"restore-share",displayName:({nodes:e})=>(0,o.zw)("files_sharing","Restore share","Restore shares",e.length),iconSvgInline:()=>'',enabled:({nodes:e,view:t})=>e.length>0&&t.id===b,async exec({nodes:e}){try{const t=e[0],n=(0,l.KT)("apps/files_sharing/api/v1/deletedshares/{id}",{id:t.attributes["share-id"]});return await s.Ay.post(n),(0,a.Ic)("files:node:deleted",t),!0}catch{return!1}},async execBatch({nodes:e,view:t,folder:n,contents:r}){return Promise.all(e.map(e=>this.exec({nodes:[e],view:t,folder:n,contents:r})))},order:1,inline:()=>!0};var L=n(21777),S=n(85168),N=n(32505);var T=n(85072),F=n.n(T),P=n(97825),I=n.n(P),H=n(77659),V=n.n(H),M=n(55056),O=n.n(M),k=n(10540),R=n.n(k),$=n(41113),B=n.n($),U=n(53168),j={};function q(e){return e.attributes?.["is-federated"]??!1}j.styleTagTransform=B(),j.setAttributes=O(),j.insert=V().bind(null,"head"),j.domAPI=I(),j.insertStyleElement=R(),F()(U.A,j),U.A&&U.A.locals&&U.A.locals;const z={id:"sharing-status",displayName({nodes:e}){const t=e[0];return Object.values(t?.attributes?.["share-types"]||{}).flat().length>0||t.owner!==(0,L.HW)()?.uid||q(t)?(0,o.Tl)("files_sharing","Shared"):""},title({nodes:e}){const t=e[0];if(t.owner&&(t.owner!==(0,L.HW)()?.uid||q(t))){const e=t?.attributes?.["owner-display-name"];return(0,o.Tl)("files_sharing","Shared by {ownerDisplayName}",{ownerDisplayName:e})}if(Object.values(t?.attributes?.["share-types"]||{}).flat().length>1)return(0,o.Tl)("files_sharing","Shared multiple times with different people");const n=t.attributes.sharees?.sharee;if(!n)return(0,o.Tl)("files_sharing","Sharing options");const r=[n].flat()[0];switch(r?.type){case f.I.User:return(0,o.Tl)("files_sharing","Shared with {user}",{user:r["display-name"]});case f.I.Group:return(0,o.Tl)("files_sharing","Shared with group {group}",{group:r["display-name"]??r.id});default:return(0,o.Tl)("files_sharing","Shared with others")}},iconSvgInline({nodes:e}){const t=e[0],n=Object.values(t?.attributes?.["share-types"]||{}).flat();return Array.isArray(t.attributes?.["share-types"])&&t.attributes?.["share-types"].length>1?d:n.includes(f.I.Link)||n.includes(f.I.Email)?p:n.includes(f.I.Group)||n.includes(f.I.RemoteGroup)?c:n.includes(f.I.Team)?'':t.owner&&(t.owner!==(0,L.HW)()?.uid||q(t))?function(e,t=!1){const n=`${t?`/avatar/guest/${e}`:`/avatar/${e}`}/32${!0===window?.matchMedia?.("(prefers-color-scheme: dark)")?.matches||null!==document.querySelector("[data-themes*=dark]")?"/dark":""}${t?"":"?guestFallback=true"}`;return``}(t.owner,q(t)):d},enabled({nodes:e}){if(1!==e.length)return!1;if((0,N.f)())return!1;const t=e[0],n=t.attributes?.["share-types"];return!!(Array.isArray(n)&&n.length>0)||!(t.owner===(0,L.HW)()?.uid&&!q(t))||0!==(t.permissions&r.aX.SHARE)&&0!==(t.permissions&r.aX.READ)},async exec({nodes:e}){const t=e[0];return 0!==(t.permissions&r.aX.READ)?((0,r.dC)().open(t,"sharing"),null):((0,S.Qg)((0,o.Tl)("files_sharing","You do not have enough permissions to share this file.")),null)},inline:()=>!0};var G=n(26422),W=n(85471),Z=n(41944),K=n(74095),Y=n(82182);const X=document.getElementsByTagName("head")[0].getAttribute("data-user"),J=(document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),void 0!==X&&X),Q=(0,W.pM)({__name:"FileListFilterAccount",props:{filter:null},setup(e){const t=e,n=J,r=(0,W.KR)(""),i=(0,W.KR)([]),s=(0,W.KR)([]);(0,W.wB)(s,()=>{const e=s.value.map(({id:e,displayName:t})=>({uid:e,displayName:t}));t.filter.setAccounts(e.length>0?e:void 0)}),(0,W.sV)(()=>{u(t.filter.availableAccounts),s.value=i.value.filter(({id:e})=>t.filter.filterAccounts?.some(({uid:t})=>t===e))??[],t.filter.addEventListener("accounts-updated",u),t.filter.addEventListener("reset",d),t.filter.addEventListener("deselect",c)}),(0,W.hi)(()=>{t.filter.removeEventListener("accounts-updated",u),t.filter.removeEventListener("reset",d),t.filter.removeEventListener("deselect",c)});const a=(0,W.EW)(()=>{if(!r.value)return[...i.value].sort(l);const e=r.value.toLocaleLowerCase().trim().split(" ");return i.value.filter(t=>e.every(e=>t.user.toLocaleLowerCase().includes(e)||t.displayName.toLocaleLowerCase().includes(e))).sort(l)});function l(e,t){return e.id===n?-1:t.id===n?1:e.displayName.localeCompare(t.displayName)}function c(e){const t=e.detail;s.value=s.value.filter(({id:e})=>e!==t)}function d(){s.value=[],r.value=""}function u(e){e instanceof CustomEvent&&(e=e.detail),i.value=e.map(({uid:e,displayName:t})=>({displayName:t,id:e,user:e}))}return{__sfc:!0,props:t,currentUserId:n,accountFilter:r,availableAccounts:i,selectedAccounts:s,shownAccounts:a,sortAccounts:l,toggleAccount:function(e,t){if(s.value=s.value.filter(({id:t})=>t!==e),t){const t=i.value.find(({id:t})=>t===e);t&&(s.value=[...s.value,t])}},deselect:c,resetFilter:d,setAvailableAccounts:u,t:o.t,NcAvatar:Z.A,NcButton:K.A,NcTextField:Y.A}}});var ee=n(15914),te={};te.styleTagTransform=B(),te.setAttributes=O(),te.insert=V().bind(null,"head"),te.domAPI=I(),te.insertStyleElement=R(),F()(ee.A,te);const ne=ee.A&&ee.A.locals?ee.A.locals:void 0,re=(0,n(14486).A)(Q,function(){var e=this,t=e._self._c,n=e._self._setupProxy;return t("div",{class:e.$style.fileListFilterAccount},[n.availableAccounts.length>1?t(n.NcTextField,{attrs:{type:"search",label:n.t("files_sharing","Filter accounts")},model:{value:n.accountFilter,callback:function(e){n.accountFilter=e},expression:"accountFilter"}}):e._e(),e._v(" "),e._l(n.shownAccounts,function(r){return t(n.NcButton,{key:r.id,attrs:{alignment:"start",pressed:n.selectedAccounts.includes(r),variant:"tertiary",wide:""},on:{"update:pressed":function(e){return n.toggleAccount(r.id,e)}},scopedSlots:e._u([{key:"icon",fn:function(){return[t(n.NcAvatar,e._b({class:e.$style.fileListFilterAccount__avatar,attrs:{size:24,"disable-menu":"","hide-status":""}},"NcAvatar",r,!1))]},proxy:!0}],null,!0)},[e._v("\n\t\t"+e._s(r.displayName)+"\n\t\t"),r.id===n.currentUserId?t("span",{class:e.$style.fileListFilterAccount__currentUser},[e._v("\n\t\t\t("+e._s(n.t("files","you"))+")\n\t\t")]):e._e()])})],2)},[],!1,function(e){this.$style=ne.locals||ne},null,null).exports;function ie(e,t,n){return(t=function(e){var t=function(e){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function se(e,t,n){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,n)}function ae(e,t){return e.get(le(e,t))}function oe(e,t,n){return e.set(le(e,t),n),n}function le(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}const ce="files_sharing-file-list-filter-account";var de=new WeakMap,ue=new WeakMap;class pe extends r.L3{constructor(){super("files_sharing:account",100),se(this,de,void 0),se(this,ue,void 0),ie(this,"displayName",(0,o.t)("files_sharing","People")),ie(this,"iconSvgInline",''),ie(this,"tagName",ce),oe(de,this,[]),(0,a.B1)("files:list:updated",({contents:e})=>{this.updateAvailableAccounts(e)})}get availableAccounts(){return ae(de,this)}get filterAccounts(){return ae(ue,this)}filter(e){if(!ae(ue,this)||0===ae(ue,this).length)return e;const t=ae(ue,this).map(({uid:e})=>e);return e.filter(e=>{if("trashbin"===window.OCP.Files.Router.params.view){const n=e.attributes?.["trashbin-deleted-by-id"];return!(!n||!t.includes(n))}if(e.owner&&t.includes(e.owner))return!0;const n=e.attributes.sharees?.sharee;return!(!n||![n].flat().some(({id:e})=>t.includes(e)))||!e.owner&&!n})}reset(){this.dispatchEvent(new CustomEvent("reset"))}setAccounts(e){oe(ue,this,e);let t=[];ae(ue,this)&&ae(ue,this).length>0&&(t=ae(ue,this).map(({displayName:e,uid:t})=>({text:e,user:t,onclick:()=>this.dispatchEvent(new CustomEvent("deselect",{detail:t}))}))),this.updateChips(t),this.filterUpdated()}updateAvailableAccounts(e){const t=new Map;for(const n of e){const e=n.owner;e&&!t.has(e)&&t.set(e,{uid:e,displayName:n.attributes["owner-display-name"]??n.owner});const r=[n.attributes.sharees?.sharee].flat().filter(Boolean);for(const e of[r].flat())""!==e.id&&(e.type!==f.I.User&&e.type!==f.I.Remote||t.has(e.id)||t.set(e.id,{uid:e.id,displayName:e["display-name"]}));const i=n.attributes?.["trashbin-deleted-by-id"];i&&t.set(i,{uid:i,displayName:n.attributes?.["trashbin-deleted-by-display-name"]||i})}oe(de,this,[...t.values()]),this.dispatchEvent(new CustomEvent("accounts-updated"))}}var he=n(98469);const fe=new(n(87771).A),me=(0,W.$V)(()=>Promise.all([n.e(4208),n.e(1598)]).then(n.bind(n,11598))),ge={id:"file-request",displayName:(0,o.t)("files_sharing","Create file request"),iconSvgInline:u,order:10,enabled:()=>!(0,N.f)()&&!!fe.isPublicUploadEnabled&&fe.isPublicShareAllowed,async handler(e,t){(0,he.S)(me,{context:e,content:t})}};_(),(0,r.zj)(ge),(0,i.Yc)("nc:note",{nc:"http://nextcloud.org/ns"}),(0,i.Yc)("nc:sharees",{nc:"http://nextcloud.org/ns"}),(0,i.Yc)("nc:hide-download",{nc:"http://nextcloud.org/ns"}),(0,i.Yc)("nc:share-attributes",{nc:"http://nextcloud.org/ns"}),(0,i.Yc)("oc:share-types",{oc:"http://owncloud.org/ns"}),(0,i.Yc)("ocs:share-permissions",{ocs:"http://open-collaboration-services.org/ns"}),(0,r.Gg)(C),(0,r.Gg)(x),(0,r.Gg)(E),(0,r.Gg)(D),(0,r.Gg)(z),function(){if((0,N.f)())return;const e=(0,G.A)(W.Ay,re);Object.defineProperty(e.prototype,"attachShadow",{value(){return this}}),Object.defineProperty(e.prototype,"shadowRoot",{get(){return this}}),customElements.define(ce,e),(0,r.cZ)(new pe)}(),function(){let e,t;(0,r.pJ)({id:"note-to-recipient",order:0,enabled:e=>Boolean(e.attributes.note),updated:e=>{t&&t.updateFolder(e)},render:async(r,i)=>{if(void 0===e){const{default:t}=await Promise.all([n.e(4208),n.e(1930)]).then(n.bind(n,81930));e=W.Ay.extend(t)}t=(new e).$mount(r),t.updateFolder(i)}})}()},87771(e,t,n){"use strict";n.d(t,{A:()=>s});var r=n(87485),i=n(81222);class s{constructor(){var e,t,n;e=this,n=void 0,(t=function(e){var t=function(e){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:t+""}(t="_capabilities"))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,this._capabilities=(0,r.F)()}get defaultPermissions(){return this._capabilities.files_sharing?.default_permissions}get excludeReshareFromEdit(){return!0===this._capabilities.files_sharing?.exclude_reshare_from_edit}get isPublicUploadEnabled(){return!0===this._capabilities.files_sharing?.public?.upload}get federatedShareDocLink(){return window.OC.appConfig.core.federatedCloudShareDoc}get defaultExpirationDate(){return this.isDefaultExpireDateEnabled&&null!==this.defaultExpireDate?new Date((new Date).setDate((new Date).getDate()+this.defaultExpireDate)):null}get defaultInternalExpirationDate(){return this.isDefaultInternalExpireDateEnabled&&null!==this.defaultInternalExpireDate?new Date((new Date).setDate((new Date).getDate()+this.defaultInternalExpireDate)):null}get defaultRemoteExpirationDateString(){return this.isDefaultRemoteExpireDateEnabled&&null!==this.defaultRemoteExpireDate?new Date((new Date).setDate((new Date).getDate()+this.defaultRemoteExpireDate)):null}get enforcePasswordForPublicLink(){return!0===window.OC.appConfig.core.enforcePasswordForPublicLink}get enableLinkPasswordByDefault(){return!0===window.OC.appConfig.core.enableLinkPasswordByDefault}get isDefaultExpireDateEnforced(){return!0===window.OC.appConfig.core.defaultExpireDateEnforced}get isDefaultExpireDateEnabled(){return!0===window.OC.appConfig.core.defaultExpireDateEnabled}get isDefaultInternalExpireDateEnforced(){return!0===window.OC.appConfig.core.defaultInternalExpireDateEnforced}get isDefaultInternalExpireDateEnabled(){return!0===window.OC.appConfig.core.defaultInternalExpireDateEnabled}get isDefaultRemoteExpireDateEnforced(){return!0===window.OC.appConfig.core.defaultRemoteExpireDateEnforced}get isDefaultRemoteExpireDateEnabled(){return!0===window.OC.appConfig.core.defaultRemoteExpireDateEnabled}get isRemoteShareAllowed(){return!0===window.OC.appConfig.core.remoteShareAllowed}get isFederationEnabled(){return!0===this._capabilities?.files_sharing?.federation?.outgoing}get isPublicShareAllowed(){return!0===this._capabilities?.files_sharing?.public?.enabled}get isMailShareAllowed(){return!0===this._capabilities?.files_sharing?.sharebymail?.enabled&&!0===this.isPublicShareAllowed}get defaultExpireDate(){return window.OC.appConfig.core.defaultExpireDate}get defaultInternalExpireDate(){return window.OC.appConfig.core.defaultInternalExpireDate}get defaultRemoteExpireDate(){return window.OC.appConfig.core.defaultRemoteExpireDate}get isResharingAllowed(){return!0===window.OC.appConfig.core.resharingAllowed}get isPasswordForMailSharesRequired(){return!0===this._capabilities.files_sharing?.sharebymail?.password?.enforced}get shouldAlwaysShowUnique(){return!0===this._capabilities.files_sharing?.sharee?.always_show_unique}get allowGroupSharing(){return!0===window.OC.appConfig.core.allowGroupSharing}get maxAutocompleteResults(){return parseInt(window.OC.config["sharing.maxAutocompleteResults"],10)||25}get minSearchStringLength(){return parseInt(window.OC.config["sharing.minSearchStringLength"],10)||0}get passwordPolicy(){return this._capabilities?.password_policy||{}}get allowCustomTokens(){return this._capabilities?.files_sharing?.public?.custom_tokens}get showFederatedSharesAsInternal(){return(0,i.C)("files_sharing","showFederatedSharesAsInternal",!1)}get showFederatedSharesToTrustedServersAsInternal(){return(0,i.C)("files_sharing","showFederatedSharesToTrustedServersAsInternal",!1)}get showExternalSharing(){return(0,i.C)("files_sharing","showExternalSharing",!0)}}},87543(e,t,n){"use strict";n.d(t,{C:()=>m,h:()=>g});var r=n(21777),i=n(44368),s=n(35810),a=n(77815),o=n(63814),l=n(48564);const c={"Content-Type":"application/json"};function d(e=!1){const t=(0,o.KT)("apps/files_sharing/api/v1/shares");return i.Ay.get(t,{headers:c,params:{shared_with_me:e,include_tags:!0}})}function u(){const e=(0,o.KT)("apps/files_sharing/api/v1/remote_shares");return i.Ay.get(e,{headers:c,params:{include_tags:!0}})}function p(){const e=(0,o.KT)("apps/files_sharing/api/v1/shares/pending");return i.Ay.get(e,{headers:c,params:{include_tags:!0}})}function h(){const e=(0,o.KT)("apps/files_sharing/api/v1/remote_shares/pending");return i.Ay.get(e,{headers:c,params:{include_tags:!0}})}function f(){const e=(0,o.KT)("apps/files_sharing/api/v1/deletedshares");return i.Ay.get(e,{headers:c,params:{include_tags:!0}})}function m(e="[]"){const t=e=>"fileRequest"===e.scope&&"enabled"===e.key&&!0===e.value;try{return JSON.parse(e).some(t)}catch(e){return l.A.error("Error while parsing share attributes",{error:e}),!1}}async function g(e=!0,t=!0,i=!1,o=!1,c=[]){const m=[];e&&m.push({promise:d(!0),unmounted:!1},{promise:u(),unmounted:!1}),t&&m.push({promise:d(),unmounted:!1}),i&&m.push({promise:p(),unmounted:!0},{promise:h(),unmounted:!0}),o&&m.push({promise:f(),unmounted:!0});const g=(await Promise.all(m.map(({promise:e})=>e))).flatMap((e,t)=>e.data.ocs.data.map(e=>({entry:e,unmounted:m[t].unmounted})));let v=(await Promise.all(g.map(({entry:e,unmounted:t})=>async function(e,t=!1){try{if(void 0!==e?.remote_id){if(!e.mimetype){const t=(await n.e(857).then(n.bind(n,10857))).default;e.mimetype=t.getType(e.name)}const t="dir"===e.type?"folder":e.type;e.item_type=t||(e.mimetype?"file":"folder"),e.item_mtime=e.mtime,e.file_target=e.file_target||e.mountpoint,e.file_target.includes("TemporaryMountPointName")&&(e.file_target=e.name),e.accepted||(e.item_permissions=s.aX.NONE,e.permissions=s.aX.NONE),e.uid_owner=e.owner,e.displayname_owner=e.owner}t&&(e.item_permissions=s.aX.NONE,e.permissions=s.aX.NONE);const r="folder"===e?.item_type,i=!0===e?.has_preview,o=r?s.vd:s.ZH,l=e.file_source||e.file_id||e.id,c=e.path||e.file_target||e.name,d=`${(0,a.EY)()}${(0,a.ei)()}/${c.replace(/^\/+/,"")}`;let u,p=e.item_mtime?new Date(1e3*e.item_mtime):void 0;return e?.stime>(e?.item_mtime||0)&&(p=new Date(1e3*e.stime)),"share_with"in e&&(u={sharee:{id:e.share_with,"display-name":e.share_with_displayname||e.share_with,type:e.share_type}}),new o({id:l,source:d,owner:e?.uid_owner,mime:e?.mimetype||"application/octet-stream",mtime:p,size:e?.item_size??void 0,permissions:e?.item_permissions||e?.permissions,root:(0,a.ei)(),attributes:{...e,"share-id":e.id,"has-preview":i,"hide-download":1===e?.hide_download,"owner-id":e?.uid_owner,"owner-display-name":e?.displayname_owner,"share-types":e?.share_type,"share-attributes":e?.attributes||"[]",sharees:u,favorite:e?.tags?.includes(window.OC.TAG_FAVORITE)?1:0}})}catch(e){return l.A.error("Error while parsing OCS entry",{error:e}),null}}(e,t)))).filter(e=>null!==e);var w,A;return c.length>0&&(v=v.filter(e=>c.includes(e.attributes?.share_type))),v=(w=v,A="source",Object.values(w.reduce(function(e,t){return(e[t[A]]=e[t[A]]||[]).push(t),e},{}))).map(e=>{const t=e[0];return t.attributes["share-types"]=e.map(e=>e.attributes["share-types"]),t}),{folder:new s.vd({id:0,source:`${(0,a.EY)()}${(0,a.ei)()}`,owner:(0,r.HW)()?.uid||null,root:(0,a.ei)()}),contents:v}}},48564(e,t,n){"use strict";n.d(t,{A:()=>r});const r=(0,n(35947).YK)().setApp("files_sharing").detectUser().build()},53168(e,t,n){"use strict";n.d(t,{A:()=>o});var r=n(71354),i=n.n(r),s=n(76314),a=n.n(s)()(i());a.push([e.id,".action-items>.files-list__row-action-sharing-status{padding-inline:0 !important}.action-items>.files-list__row-action-sharing-status .button-vue__wrapper{flex-direction:row-reverse;gap:var(--default-grid-baseline)}svg.sharing-status__avatar{height:var(--button-inner-size, 32px) !important;width:var(--button-inner-size, 32px) !important;max-height:var(--button-inner-size, 32px) !important;max-width:var(--button-inner-size, 32px) !important;border-radius:var(--button-inner-size, 32px);overflow:hidden}.files-list__row-action-sharing-status .button-vue__text{color:var(--color-primary-element)}.files-list__row-action-sharing-status .button-vue__icon{color:var(--color-primary-element)}","",{version:3,sources:["webpack://./apps/files_sharing/src/files_actions/sharingStatusAction.scss"],names:[],mappings:"AAMA,qDAEC,2BAAA,CAEA,0EAEC,0BAAA,CACA,gCAAA,CAIF,2BACC,gDAAA,CACA,+CAAA,CACA,oDAAA,CACA,mDAAA,CACA,4CAAA,CACA,eAAA,CAIA,yDACC,kCAAA,CAED,yDACC,kCAAA",sourcesContent:["/*\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n // Only when rendered inline, when not enough space, this is put in the menu\n.action-items > .files-list__row-action-sharing-status {\n\t// align icons with text-less inline actions\n\tpadding-inline: 0 !important;\n\n\t.button-vue__wrapper {\n\t\t// put icon at the end of the button\n\t\tflex-direction: row-reverse;\n\t\tgap: var(--default-grid-baseline);\n\t}\n}\n\nsvg.sharing-status__avatar {\n\theight: var(--button-inner-size, 32px) !important;\n\twidth: var(--button-inner-size, 32px) !important;\n\tmax-height: var(--button-inner-size, 32px) !important;\n\tmax-width: var(--button-inner-size, 32px) !important;\n\tborder-radius: var(--button-inner-size, 32px);\n\toverflow: hidden;\n}\n\n.files-list__row-action-sharing-status {\n\t.button-vue__text {\n\t\tcolor: var(--color-primary-element);\n\t}\n\t.button-vue__icon {\n\t\tcolor: var(--color-primary-element);\n\t}\n}\n"],sourceRoot:""}]);const o=a},15914(e,t,n){"use strict";n.d(t,{A:()=>o});var r=n(71354),i=n.n(r),s=n(76314),a=n.n(s)()(i());a.push([e.id,"\n._fileListFilterAccount_ZW91g {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-grid-baseline);\n}\n._fileListFilterAccount__avatar_V0YuN {\n\t/* 24px is the avatar size */\n\tmargin: calc((var(--default-clickable-area) - 24px) / 2);\n}\n._fileListFilterAccount__currentUser_PqQfx {\n\tfont-weight: normal !important;\n}\n","",{version:3,sources:["webpack://./apps/files_sharing/src/components/FileListFilterAccount.vue"],names:[],mappings:";AA4JA;CACA,aAAA;CACA,sBAAA;CACA,iCAAA;AACA;AAEA;CACA,4BAAA;CACA,wDAAA;AACA;AAEA;CACA,8BAAA;AACA",sourcesContent:["\x3c!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n--\x3e\n\n\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"fileListFilterAccount\": `_fileListFilterAccount_ZW91g`,\n\t\"fileListFilterAccount__avatar\": `_fileListFilterAccount__avatar_V0YuN`,\n\t\"fileListFilterAccount__currentUser\": `_fileListFilterAccount__currentUser_PqQfx`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { getCurrentUser, onRequestTokenUpdate, getRequestToken } from \"@nextcloud/auth\";\nimport { generateRemoteUrl } from \"@nextcloud/router\";\nimport { isPublicShare, getSharingToken } from \"@nextcloud/sharing/public\";\nimport { createClient, getPatcher } from \"webdav\";\nimport { P as Permission, s as scopedGlobals, l as logger, c as NodeStatus, a as File, b as Folder } from \"./chunks/folder-29HuacU_.mjs\";\nimport \"@nextcloud/paths\";\n/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction parsePermissions(permString = \"\") {\n let permissions = Permission.NONE;\n if (!permString) {\n return permissions;\n }\n if (permString.includes(\"G\")) {\n permissions |= Permission.READ;\n }\n if (permString.includes(\"W\")) {\n permissions |= Permission.WRITE;\n }\n if (permString.includes(\"CK\")) {\n permissions |= Permission.CREATE;\n }\n if (permString.includes(\"NV\")) {\n permissions |= Permission.UPDATE;\n }\n if (permString.includes(\"D\")) {\n permissions |= Permission.DELETE;\n }\n if (permString.includes(\"R\")) {\n permissions |= Permission.SHARE;\n }\n return permissions;\n}\nconst defaultDavProperties = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:creationdate\",\n \"d:displayname\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:size\"\n];\nconst defaultDavNamespaces = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n};\nfunction registerDavProperty(prop, namespace = { nc: \"http://nextcloud.org/ns\" }) {\n scopedGlobals.davNamespaces ??= { ...defaultDavNamespaces };\n scopedGlobals.davProperties ??= [...defaultDavProperties];\n const namespaces = { ...scopedGlobals.davNamespaces, ...namespace };\n if (scopedGlobals.davProperties.find((search) => search === prop)) {\n logger.warn(`${prop} already registered`, { prop });\n return false;\n }\n if (prop.startsWith(\"<\") || prop.split(\":\").length !== 2) {\n logger.error(`${prop} is not valid. See example: 'oc:fileid'`, { prop });\n return false;\n }\n const ns = prop.split(\":\")[0];\n if (!namespaces[ns]) {\n logger.error(`${prop} namespace unknown`, { prop, namespaces });\n return false;\n }\n scopedGlobals.davProperties.push(prop);\n scopedGlobals.davNamespaces = namespaces;\n return true;\n}\nfunction getDavProperties() {\n scopedGlobals.davProperties ??= [...defaultDavProperties];\n return scopedGlobals.davProperties.map((prop) => `<${prop} />`).join(\" \");\n}\nfunction getDavNameSpaces() {\n scopedGlobals.davNamespaces ??= { ...defaultDavNamespaces };\n return Object.keys(scopedGlobals.davNamespaces).map((ns) => `xmlns:${ns}=\"${scopedGlobals.davNamespaces?.[ns]}\"`).join(\" \");\n}\nfunction getDefaultPropfind() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t`;\n}\nfunction getFavoritesReport() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\t\n\t\t\t\t1\n\t\t\t\n\t\t`;\n}\nfunction getRecentSearch(lastModified) {\n return `\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t/files/${getCurrentUser()?.uid}/\n\t\t\t\tinfinity\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\thttpd/unix-directory\n\t\t\t\t\t\t\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\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t0\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${lastModified}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t100\n\t\t\t0\n\t\t\n\t\n`;\n}\nfunction getRootPath() {\n if (isPublicShare()) {\n return `/files/${getSharingToken()}`;\n }\n return `/files/${getCurrentUser()?.uid}`;\n}\nconst defaultRootPath = getRootPath();\nfunction getRemoteURL() {\n const url = generateRemoteUrl(\"dav\");\n if (isPublicShare()) {\n return url.replace(\"remote.php\", \"public.php\");\n }\n return url;\n}\nconst defaultRemoteURL = getRemoteURL();\nfunction getClient(remoteURL = defaultRemoteURL, headers = {}) {\n const client = createClient(remoteURL, { headers });\n function setHeaders(token) {\n client.setHeaders({\n ...headers,\n // Add this so the server knows it is an request from the browser\n \"X-Requested-With\": \"XMLHttpRequest\",\n // Inject user auth\n requesttoken: token ?? \"\"\n });\n }\n onRequestTokenUpdate(setHeaders);\n setHeaders(getRequestToken());\n const patcher = getPatcher();\n patcher.patch(\"fetch\", (url, options) => {\n const headers2 = options.headers;\n if (headers2?.method) {\n options.method = headers2.method;\n delete headers2.method;\n }\n return fetch(url, options);\n });\n return client;\n}\nasync function getFavoriteNodes(options = {}) {\n const client = options.client ?? getClient();\n const path = options.path ?? \"/\";\n const davRoot = options.davRoot ?? defaultRootPath;\n const contentsResponse = await client.getDirectoryContents(`${davRoot}${path}`, {\n signal: options.signal,\n details: true,\n data: getFavoritesReport(),\n headers: {\n // see getClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: true\n });\n return contentsResponse.data.filter((node) => node.filename !== path).map((result) => resultToNode(result, davRoot));\n}\nfunction resultToNode(node, filesRoot = defaultRootPath, remoteURL = defaultRemoteURL) {\n let userId = getCurrentUser()?.uid;\n if (isPublicShare()) {\n userId = userId ?? \"anonymous\";\n } else if (!userId) {\n throw new Error(\"No user id found\");\n }\n const props = node.props;\n const permissions = parsePermissions(props?.permissions);\n const owner = String(props?.[\"owner-id\"] || userId);\n const id = props.fileid || 0;\n const mtime = new Date(Date.parse(node.lastmod));\n const crtime = new Date(Date.parse(props.creationdate));\n const nodeData = {\n id,\n source: `${remoteURL}${node.filename}`,\n mtime: !isNaN(mtime.getTime()) && mtime.getTime() !== 0 ? mtime : void 0,\n crtime: !isNaN(crtime.getTime()) && crtime.getTime() !== 0 ? crtime : void 0,\n mime: node.mime || \"application/octet-stream\",\n // Manually cast to work around for https://github.com/perry-mitchell/webdav-client/pull/380\n displayname: props.displayname !== void 0 ? String(props.displayname) : void 0,\n size: props?.size || Number.parseInt(props.getcontentlength || \"0\"),\n // The fileid is set to -1 for failed requests\n status: id < 0 ? NodeStatus.FAILED : void 0,\n permissions,\n owner,\n root: filesRoot,\n attributes: {\n ...node,\n ...props,\n hasPreview: props?.[\"has-preview\"]\n }\n };\n delete nodeData.attributes?.props;\n return node.type === \"file\" ? new File(nodeData) : new Folder(nodeData);\n}\nexport {\n defaultDavNamespaces,\n defaultDavProperties,\n defaultRemoteURL,\n defaultRootPath,\n getClient,\n getDavNameSpaces,\n getDavProperties,\n getDefaultPropfind,\n getFavoriteNodes,\n getFavoritesReport,\n getRecentSearch,\n getRemoteURL,\n getRootPath,\n parsePermissions,\n registerDavProperty,\n resultToNode\n};\n//# sourceMappingURL=dav.mjs.map\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-\" + chunkId + \".js?v=\" + {\"857\":\"3d28157955f39376ab2c\",\"1598\":\"8074dc55656814435604\",\"1930\":\"903b341a6fe4c516f8fb\",\"4005\":\"ea0438a7997fd9e715c6\",\"4017\":\"dec6f3d66ff15c8062d0\",\"5236\":\"311a02bae05374304a11\",\"7859\":\"374481dd0197cd96efe4\",\"8374\":\"a1555d19d2bb52436702\",\"8436\":\"e9ae15ec61caab34615a\",\"8689\":\"81e9b831f82f55de32df\"}[chunkId] + \"\";\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 5928;","var scriptUrl;\nif (globalThis.importScripts) scriptUrl = globalThis.location + \"\";\nvar document = globalThis.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = (typeof document !== 'undefined' && document.baseURI) || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t5928: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\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__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunknextcloud_ui_legacy\"] = globalThis[\"webpackChunknextcloud_ui_legacy\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(99770)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","sharesViewId","sharedWithYouViewId","sharedWithOthersViewId","sharingByLinksViewId","deletedSharesViewId","pendingSharesViewId","shares","Navigation","getNavigation","register","View","id","name","t","caption","emptyTitle","emptyCaption","icon","AccountPlusSvg","order","columns","getContents","parent","loadState","quota","AccountGroupSvg","LinkSvg","ShareType","Link","FileUploadSvg","Email","then","folder","contents","filter","node","isFileRequest","attributes","Object","getOwnPropertyDescriptor","writable","defineProperty","value","configurable","action","displayName","nodes","n","length","iconSvgInline","enabled","view","exec","isRemote","remote","url","generateOcsUrl","shareBase","axios","post","emit","execBatch","Promise","all","map","this","inline","includes","isFolder","type","FileType","Folder","window","OCP","Files","Router","goToRoute","fileid","String","dir","path","dirname","openfile","undefined","default","DefaultType","HIDDEN","some","remote_id","share_type","RemoteGroup","accepted","delete","options","isExternal","styleTagTransform","styleTagTransform_default","setAttributes","setAttributesWithoutAttributes_default","insert","insertBySelector_default","bind","domAPI","styleDomAPI_default","insertStyleElement","insertStyleElement_default","injectStylesIntoStyleTag_default","sharingStatusAction","A","locals","values","flat","owner","getCurrentUser","uid","title","ownerDisplayName","sharees","sharee","User","user","Group","group","shareTypes","Array","isArray","Team","userId","isGuest","matchMedia","matches","document","querySelector","generateUrl","generateAvatarSvg","isPublicShare","permissions","Permission","SHARE","READ","getSidebar","open","showError","rawUid","getElementsByTagName","getAttribute","currentUser","components_FileListFilterAccountvue_type_script_setup_true_lang_ts","_defineComponent","__name","props","setup","__props","currentUserId","accountFilter","ref","availableAccounts","selectedAccounts","watch","accounts","setAccounts","onMounted","setAvailableAccounts","filterAccounts","addEventListener","resetFilter","deselect","onUnmounted","removeEventListener","shownAccounts","computed","sort","sortAccounts","queryParts","toLocaleLowerCase","trim","split","account","every","part","a","b","localeCompare","event","accountId","detail","CustomEvent","__sfc","toggleAccount","selected","find","l10n_dist","NcAvatar","NcButton","NcTextField","FileListFilterAccountvue_type_style_index_0_id_ec2dd1f8_prod_module_true_lang_css_options","FileListFilterAccountvue_type_style_index_0_id_ec2dd1f8_prod_module_true_lang_css","components_FileListFilterAccountvue_type_style_index_0_id_ec2dd1f8_prod_module_true_lang_css","FileListFilterAccount","_vm","_c","_self","_setup","_setupProxy","class","$style","fileListFilterAccount","attrs","label","model","callback","$$v","expression","_e","_v","_l","key","alignment","pressed","variant","wide","on","$event","scopedSlots","_u","fn","_b","fileListFilterAccount__avatar","size","proxy","_s","fileListFilterAccount__currentUser","context","tagName","_availableAccounts","WeakMap","_filterAccounts","AccountFilter","FileListFilter","constructor","super","_classPrivateFieldInitSpec","_defineProperty","_classPrivateFieldSet","subscribe","updateAvailableAccounts","_classPrivateFieldGet","userIds","params","deletedBy","reset","dispatchEvent","chips","text","onclick","updateChips","filterUpdated","available","Map","has","set","Boolean","Remote","sharingConfig","Config","NewFileRequestDialogVue","defineAsyncComponent","__webpack_require__","e","entry","isPublicUploadEnabled","isPublicShareAllowed","handler","content","spawnDialog","registerSharingViews","addNewFileMenuEntry","newFileRequest","registerDavProperty","nc","oc","ocs","registerFileAction","acceptShareAction","openInFilesAction","rejectShareAction","restoreShareAction","WrappedComponent","wrap","Vue","prototype","get","customElements","define","registerFileListFilter","registerAccountFilter","FilesHeaderNoteToRecipient","instance","registerFileListHeader","note","updated","updateFolder","render","async","el","component","extend","$mount","registerNoteToRecipient","_capabilities","getCapabilities","defaultPermissions","files_sharing","default_permissions","excludeReshareFromEdit","exclude_reshare_from_edit","public","upload","federatedShareDocLink","OC","appConfig","core","federatedCloudShareDoc","defaultExpirationDate","isDefaultExpireDateEnabled","defaultExpireDate","Date","setDate","getDate","defaultInternalExpirationDate","isDefaultInternalExpireDateEnabled","defaultInternalExpireDate","defaultRemoteExpirationDateString","isDefaultRemoteExpireDateEnabled","defaultRemoteExpireDate","enforcePasswordForPublicLink","enableLinkPasswordByDefault","isDefaultExpireDateEnforced","defaultExpireDateEnforced","defaultExpireDateEnabled","isDefaultInternalExpireDateEnforced","defaultInternalExpireDateEnforced","defaultInternalExpireDateEnabled","isDefaultRemoteExpireDateEnforced","defaultRemoteExpireDateEnforced","defaultRemoteExpireDateEnabled","isRemoteShareAllowed","remoteShareAllowed","isFederationEnabled","federation","outgoing","isMailShareAllowed","sharebymail","isResharingAllowed","resharingAllowed","isPasswordForMailSharesRequired","password","enforced","shouldAlwaysShowUnique","always_show_unique","allowGroupSharing","maxAutocompleteResults","parseInt","config","minSearchStringLength","passwordPolicy","password_policy","allowCustomTokens","custom_tokens","showFederatedSharesAsInternal","showFederatedSharesToTrustedServersAsInternal","showExternalSharing","headers","getShares","shareWithMe","shared_with_me","include_tags","getRemoteShares","getPendingShares","getRemotePendingShares","getDeletedShares","attribute","scope","JSON","parse","error","logger","sharedWithYou","sharedWithOthers","pendingShares","deletedshares","filterTypes","requests","push","promise","unmounted","data","flatMap","response","index","ocsEntry","mimetype","mime","getType","item_type","item_mtime","mtime","file_target","mountpoint","item_permissions","NONE","uid_owner","displayname_owner","hasPreview","has_preview","Node","File","file_source","file_id","source","getRemoteURL","getRootPath","replace","stime","share_with","share_with_displayname","item_size","root","hide_download","favorite","tags","TAG_FAVORITE","ocsEntryToNode","reduce","acc","curr","__WEBPACK_DEFAULT_EXPORT__","getLoggerBuilder","setApp","detectUser","build","___CSS_LOADER_EXPORT___","_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default","_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default","module","version","sources","names","mappings","sourcesContent","sourceRoot","defaultDavProperties","defaultDavNamespaces","d","prop","namespace","_chunks_folder_29HuacU_mjs__WEBPACK_IMPORTED_MODULE_4__","s","davNamespaces","davProperties","namespaces","search","l","warn","startsWith","getDavProperties","join","getDavNameSpaces","keys","ns","getDefaultPropfind","getRecentSearch","lastModified","_nextcloud_auth__WEBPACK_IMPORTED_MODULE_0__","HW","_nextcloud_sharing_public__WEBPACK_IMPORTED_MODULE_2__","f","G","defaultRootPath","_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__","dC","defaultRemoteURL","getClient","remoteURL","client","webdav__WEBPACK_IMPORTED_MODULE_3__","UU","setHeaders","token","requesttoken","zo","Gu","patch","headers2","method","fetch","getFavoriteNodes","davRoot","getDirectoryContents","signal","details","includeSelf","filename","result","resultToNode","filesRoot","Error","permString","P","WRITE","CREATE","UPDATE","DELETE","parsePermissions","lastmod","crtime","creationdate","nodeData","isNaN","getTime","displayname","Number","getcontentlength","status","c","FAILED","__webpack_module_cache__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","splice","r","getter","__esModule","definition","o","enumerable","chunkId","promises","u","obj","hasOwnProperty","done","script","needAttach","scripts","createElement","charset","setAttribute","src","onScriptComplete","prev","onerror","onload","clearTimeout","timeout","doneFns","parentNode","removeChild","forEach","setTimeout","target","head","appendChild","Symbol","toStringTag","nmd","paths","children","scriptUrl","globalThis","importScripts","location","currentScript","toUpperCase","test","p","baseURI","self","href","installedChunks","installedChunkData","resolve","reject","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"files_sharing-init.js?v=2b660d01f3c585ba8fb5","mappings":"UAAAA,ECAAC,EACAC,gtECeO,MAAMC,EAAe,gBACfC,EAAsB,YACtBC,EAAyB,aACzBC,EAAuB,eACvBC,EAAsB,gBACtBC,EAAsB,gBAkBnCC,EAAA,KACI,MAAMC,GAAaC,EAAAA,EAAAA,MACnBD,EAAWE,SAAS,IAAIC,EAAAA,GAAK,CACzBC,GAAIX,EACJY,MAAMC,EAAAA,EAAAA,GAAE,gBAAiB,UACzBC,SAASD,EAAAA,EAAAA,GAAE,gBAAiB,6BAC5BE,YAAYF,EAAAA,EAAAA,GAAE,gBAAiB,aAC/BG,cAAcH,EAAAA,EAAAA,GAAE,gBAAiB,+EACjCI,KAAMC,EACNC,MAAO,GACPC,QAAS,GACTC,YAAaA,KAAMA,EAAAA,EAAAA,QAEvBd,EAAWE,SAAS,IAAIC,EAAAA,GAAK,CACzBC,GAAIV,EACJW,MAAMC,EAAAA,EAAAA,GAAE,gBAAiB,mBACzBC,SAASD,EAAAA,EAAAA,GAAE,gBAAiB,2CAC5BE,YAAYF,EAAAA,EAAAA,GAAE,gBAAiB,+BAC/BG,cAAcH,EAAAA,EAAAA,GAAE,gBAAiB,8DACjCI,8XACAE,MAAO,EACPG,OAAQtB,EACRoB,QAAS,GACTC,YAAaA,KAAMA,EAAAA,EAAAA,IAAY,GAAM,GAAO,GAAO,MAI5B,KADNE,EAAAA,EAAAA,GAAU,QAAS,eAAgB,CAAEC,OAAQ,IACjDA,OACbjB,EAAWE,SAAS,IAAIC,EAAAA,GAAK,CACzBC,GAAIT,EACJU,MAAMC,EAAAA,EAAAA,GAAE,gBAAiB,sBACzBC,SAASD,EAAAA,EAAAA,GAAE,gBAAiB,8CAC5BE,YAAYF,EAAAA,EAAAA,GAAE,gBAAiB,sBAC/BG,cAAcH,EAAAA,EAAAA,GAAE,gBAAiB,kDACjCI,KAAMQ,EACNN,MAAO,EACPG,OAAQtB,EACRoB,QAAS,GACTC,YAAaA,KAAMA,EAAAA,EAAAA,IAAY,GAAO,GAAM,GAAO,MAG3Dd,EAAWE,SAAS,IAAIC,EAAAA,GAAK,CACzBC,GAAIR,EACJS,MAAMC,EAAAA,EAAAA,GAAE,gBAAiB,kBACzBC,SAASD,EAAAA,EAAAA,GAAE,gBAAiB,0CAC5BE,YAAYF,EAAAA,EAAAA,GAAE,gBAAiB,mBAC/BG,cAAcH,EAAAA,EAAAA,GAAE,gBAAiB,0DACjCI,KAAMS,EACNP,MAAO,EACPG,OAAQtB,EACRoB,QAAS,GACTC,YAAaA,KAAMA,EAAAA,EAAAA,IAAY,GAAO,GAAM,GAAO,EAAO,CAACM,EAAAA,EAAUC,UAEzErB,EAAWE,SAAS,IAAIC,EAAAA,GAAK,CACzBC,GAvEyB,cAwEzBC,MAAMC,EAAAA,EAAAA,GAAE,gBAAiB,iBACzBC,SAASD,EAAAA,EAAAA,GAAE,gBAAiB,0BAC5BE,YAAYF,EAAAA,EAAAA,GAAE,gBAAiB,oBAC/BG,cAAcH,EAAAA,EAAAA,GAAE,gBAAiB,oDACjCI,KAAMY,EACNV,MAAO,EACPG,OAAQtB,EACRoB,QAAS,GACTC,YAAaA,KAAMA,EAAAA,EAAAA,IAAY,GAAO,GAAM,GAAO,EAAO,CAACM,EAAAA,EAAUC,KAAMD,EAAAA,EAAUG,QAChFC,KAAKC,IAA0B,IAAzBC,OAAEA,EAAMC,SAAEA,GAAUF,EAC3B,MAAO,CACHC,SACAC,SAAUA,EAASC,OAAQC,IAASC,EAAAA,EAAAA,GAAcD,EAAKE,aAAa,qBAAuB,WAIvG/B,EAAWE,SAAS,IAAIC,EAAAA,GAAK,CACzBC,GAAIP,EACJQ,MAAMC,EAAAA,EAAAA,GAAE,gBAAiB,kBACzBC,SAASD,EAAAA,EAAAA,GAAE,gBAAiB,4BAC5BE,YAAYF,EAAAA,EAAAA,GAAE,gBAAiB,qBAC/BG,cAAcH,EAAAA,EAAAA,GAAE,gBAAiB,0CACjCI,8NACAE,MAAO,EACPG,OAAQtB,EACRoB,QAAS,GACTC,YAAaA,KAAMA,EAAAA,EAAAA,IAAY,GAAO,GAAO,GAAO,OA3FjDE,EAAAA,EAAAA,GAAU,gBAAiB,+BAA+B,KAQ1DA,EAAAA,EAAAA,GAAU,gBAAiB,sBAAsB,IAwFxDhB,EAAWE,SAAS,IAAIC,EAAAA,GAAK,CACzBC,GAAIN,EACJO,MAAMC,EAAAA,EAAAA,GAAE,gBAAiB,kBACzBC,SAASD,EAAAA,EAAAA,GAAE,gBAAiB,8BAC5BE,YAAYF,EAAAA,EAAAA,GAAE,gBAAiB,qBAC/BG,cAAcH,EAAAA,EAAAA,GAAE,gBAAiB,+DACjCI,6pBACAE,MAAO,EACPG,OAAQtB,EACRoB,QAAS,GACTC,YAAaA,KAAMA,EAAAA,EAAAA,IAAY,GAAO,GAAO,GAAM,KAE1D,GAAAkB,OAAAC,yBAAAlC,EAAA,aAAAmC,UAAAF,OAAAG,eAAApC,EAAA,QAAAqC,MAAA,UAAAC,cAAA,IC/HM,MAAMC,EAAS,CAClBlC,GAAI,eACJmC,YAAad,IAAA,IAACe,MAAEA,GAAOf,EAAA,OAAKgB,EAAAA,EAAAA,IAAE,gBAAiB,eAAgB,gBAAiBD,EAAME,SACtFC,cAAeA,4JACfC,QAASC,IAAA,IAACL,MAAEA,EAAKM,KAAEA,GAAMD,EAAA,OAAKL,EAAME,OAAS,GAAKI,EAAK1C,KAAON,GAC9D,UAAMiD,CAAIC,GAAY,IAAXR,MAAEA,GAAOQ,EAChB,IACI,MAAMnB,EAAOW,EAAM,GACbS,IAAapB,EAAKE,WAAWmB,OAC7BC,GAAMC,EAAAA,EAAAA,IAAe,qDAAsD,CAC7EC,UAAWJ,EAAW,gBAAkB,SACxC7C,GAAIyB,EAAKE,WAAW,cAKxB,aAHMuB,EAAAA,GAAMC,KAAKJ,IAEjBK,EAAAA,EAAAA,IAAK,qBAAsB3B,IACpB,CACX,CACA,MACI,OAAO,CACX,CACJ,EACA,eAAM4B,CAASC,GAAoC,IAAnClB,MAAEA,EAAKM,KAAEA,EAAIpB,OAAEA,EAAMC,SAAEA,GAAU+B,EAC7C,OAAOC,QAAQC,IAAIpB,EAAMqB,IAAKhC,GAASiC,KAAKf,KAAK,CAC7CP,MAAO,CAACX,GACRiB,OACApB,SACAC,cAER,EACAf,MAAO,EACPmD,OAAQA,KAAM,GClCLzB,EAAS,CAClBlC,GAAI,8BACJmC,YAAaA,KAAMjC,EAAAA,EAAAA,IAAE,gBAAiB,iBACtCqC,cAAeA,IAAM,GACrBC,QAASnB,IAAA,IAACqB,KAAEA,GAAMrB,EAAA,MAAK,CACnBhC,EACAC,EACAC,EACAC,GAGFoE,SAASlB,EAAK1C,KAChB,UAAM2C,CAAIF,GAAY,IAAXL,MAAEA,GAAOK,EAChB,MAAMoB,EAAWzB,EAAM,GAAG0B,OAASC,EAAAA,GAASC,OAW5C,OAVAC,OAAOC,IAAIC,MAAMC,OAAOC,UAAU,KAClC,CACI3B,KAAM,QACN4B,OAAQC,OAAOnC,EAAM,GAAGkC,SACzB,CAECE,IAAKX,EAAWzB,EAAM,GAAGqC,KAAOrC,EAAM,GAAGsC,QAEzCC,SAAUd,OAAWe,EAAY,SAE9B,IACX,EAEApE,OAAQ,IACRqE,QAASC,EAAAA,GAAYC,QCxBZ7C,EAAS,CAClBlC,GAAI,eACJmC,YAAad,IAAA,IAACe,MAAEA,GAAOf,EAAA,OAAKgB,EAAAA,EAAAA,IAAE,gBAAiB,eAAgB,gBAAiBD,EAAME,SACtFC,cAAeA,kNACfC,QAASC,IAAqB,IAApBL,MAAEA,EAAKM,KAAEA,GAAMD,EACrB,OAAIC,EAAK1C,KAAON,GAGK,IAAjB0C,EAAME,SAKNF,EAAM4C,KAAMvD,GAASA,EAAKE,WAAWsD,WAClCxD,EAAKE,WAAWuD,aAAelE,EAAAA,EAAUmE,cAKpD,UAAMxC,CAAIC,GAAY,IAAXR,MAAEA,GAAOQ,EAChB,IACI,MAAMnB,EAAOW,EAAM,GAEba,EADaxB,EAAKE,WAAWmB,OACN,gBAAkB,SACzC9C,EAAKyB,EAAKE,WAAW,YAC3B,IAAIoB,EAgBJ,OAdIA,EAD6B,IAA7BtB,EAAKE,WAAWyD,UACVpC,EAAAA,EAAAA,IAAe,qDAAsD,CACvEC,YACAjD,QAIEgD,EAAAA,EAAAA,IAAe,6CAA8C,CAC/DC,YACAjD,aAGFkD,EAAAA,GAAMmC,OAAOtC,IAEnBK,EAAAA,EAAAA,IAAK,qBAAsB3B,IACpB,CACX,CACA,MACI,OAAO,CACX,CACJ,EACA,eAAM4B,CAASC,GAAoC,IAAnClB,MAAEA,EAAKM,KAAEA,EAAIpB,OAAEA,EAAMC,SAAEA,GAAU+B,EAC7C,OAAOC,QAAQC,IAAIpB,EAAMqB,IAAKhC,GAASiC,KAAKf,KAAK,CAAEP,MAAO,CAACX,GAAOiB,OAAMpB,SAAQC,cACpF,EACAf,MAAO,EACPmD,OAAQA,KAAM,GCpDLzB,EAAS,CAClBlC,GAAI,gBACJmC,YAAad,IAAA,IAACe,MAAEA,GAAOf,EAAA,OAAKgB,EAAAA,EAAAA,IAAE,gBAAiB,gBAAiB,iBAAkBD,EAAME,SACxFC,cAAeA,kRACfC,QAASC,IAAA,IAACL,MAAEA,EAAKM,KAAEA,GAAMD,EAAA,OAAKL,EAAME,OAAS,GAAKI,EAAK1C,KAAOP,GAC9D,UAAMkD,CAAIC,GAAY,IAAXR,MAAEA,GAAOQ,EAChB,IACI,MAAMnB,EAAOW,EAAM,GACbW,GAAMC,EAAAA,EAAAA,IAAe,+CAAgD,CACvEhD,GAAIyB,EAAKE,WAAW,cAKxB,aAHMuB,EAAAA,GAAMC,KAAKJ,IAEjBK,EAAAA,EAAAA,IAAK,qBAAsB3B,IACpB,CACX,CACA,MACI,OAAO,CACX,CACJ,EACA,eAAM4B,CAASC,GAAoC,IAAnClB,MAAEA,EAAKM,KAAEA,EAAIpB,OAAEA,EAAMC,SAAEA,GAAU+B,EAC7C,OAAOC,QAAQC,IAAIpB,EAAMqB,IAAKhC,GAASiC,KAAKf,KAAK,CAAEP,MAAO,CAACX,GAAOiB,OAAMpB,SAAQC,cACpF,EACAf,MAAO,EACPmD,OAAQA,KAAM,+KCvBlB2B,EAAA,GCUA,SAASC,EAAW9D,GAChB,OAAOA,EAAKE,aAAa,kBAAmB,CAChD,CDVA2D,EAAAE,kBAA4BC,IAC5BH,EAAAI,cAAwBC,IACxBL,EAAAM,OAAiBC,IAAAC,KAAa,aAC9BR,EAAAS,OAAiBC,IACjBV,EAAAW,mBAA6BC,IAEhBC,IAAIC,EAAAC,EAAOf,GAKFc,EAAAC,GAAWD,EAAAC,EAAOC,QAAUF,EAAAC,EAAOC,OCAlD,MACMpE,EAAS,CAClBlC,GAFiC,iBAGjCmC,WAAAA,CAAWd,GAAY,IAAXe,MAAEA,GAAOf,EACjB,MAAMI,EAAOW,EAAM,GAEnB,OADmBR,OAAO2E,OAAO9E,GAAME,aAAa,gBAAkB,CAAC,GAAG6E,OAC3DlE,OAAS,GAChBb,EAAKgF,SAAUC,EAAAA,EAAAA,OAAkBC,KAAOpB,EAAW9D,IAChDvB,EAAAA,EAAAA,IAAE,gBAAiB,UAEvB,EACX,EACA0G,KAAAA,CAAKnE,GAAY,IAAXL,MAAEA,GAAOK,EACX,MAAMhB,EAAOW,EAAM,GACnB,GAAIX,EAAKgF,QAAUhF,EAAKgF,SAAUC,EAAAA,EAAAA,OAAkBC,KAAOpB,EAAW9D,IAAQ,CAC1E,MAAMoF,EAAmBpF,GAAME,aAAa,sBAC5C,OAAOzB,EAAAA,EAAAA,IAAE,gBAAiB,+BAAgC,CAAE2G,oBAChE,CAEA,GADmBjF,OAAO2E,OAAO9E,GAAME,aAAa,gBAAkB,CAAC,GAAG6E,OAC3DlE,OAAS,EACpB,OAAOpC,EAAAA,EAAAA,IAAE,gBAAiB,+CAE9B,MAAM4G,EAAUrF,EAAKE,WAAWmF,SAASC,OACzC,IAAKD,EAED,OAAO5G,EAAAA,EAAAA,IAAE,gBAAiB,mBAE9B,MAAM6G,EAAS,CAACD,GAASN,OAAO,GAChC,OAAQO,GAAQjD,MACZ,KAAK9C,EAAAA,EAAUgG,KACX,OAAO9G,EAAAA,EAAAA,IAAE,gBAAiB,qBAAsB,CAAE+G,KAAMF,EAAO,kBACnE,KAAK/F,EAAAA,EAAUkG,MACX,OAAOhH,EAAAA,EAAAA,IAAE,gBAAiB,4BAA6B,CAAEiH,MAAOJ,EAAO,iBAAmBA,EAAO/G,KACrG,QACI,OAAOE,EAAAA,EAAAA,IAAE,gBAAiB,sBAEtC,EACAqC,aAAAA,CAAaK,GAAY,IAAXR,MAAEA,GAAOQ,EACnB,MAAMnB,EAAOW,EAAM,GACbgF,EAAaxF,OAAO2E,OAAO9E,GAAME,aAAa,gBAAkB,CAAC,GAAG6E,OAE1E,OAAIa,MAAMC,QAAQ7F,EAAKE,aAAa,iBAAmBF,EAAKE,aAAa,eAAeW,OAAS,EACtF/B,EAGP6G,EAAWxD,SAAS5C,EAAAA,EAAUC,OAC3BmG,EAAWxD,SAAS5C,EAAAA,EAAUG,OAC1BJ,EAGPqG,EAAWxD,SAAS5C,EAAAA,EAAUkG,QAC3BE,EAAWxD,SAAS5C,EAAAA,EAAUmE,aAC1BrE,EAGPsG,EAAWxD,SAAS5C,EAAAA,EAAUuG,wpBAG9B9F,EAAKgF,QAAUhF,EAAKgF,SAAUC,EAAAA,EAAAA,OAAkBC,KAAOpB,EAAW9D,ICjEvE,SAA2B+F,GAAyB,IAAjBC,EAAOC,UAAApF,OAAA,QAAAsC,IAAA8C,UAAA,IAAAA,UAAA,GAK7C,MAGM3E,EAAM,GAHK0E,EAAU,iBAAiBD,IAAW,WAAWA,UAbO,IAAlEvD,QAAQ0D,aAAa,iCAAiCC,SACJ,OAAlDC,SAASC,cAAc,uBAaM,QAAU,KACxBL,EAAU,GAAK,wBAGrC,MAAO,8IADWM,EAAAA,EAAAA,IAAYhF,EAAK,CAAEyE,iDAKzC,CDoDmBQ,CAAkBvG,EAAKgF,MAAOlB,EAAW9D,IAE7ClB,CACX,EACAiC,OAAAA,CAAOc,GAAY,IAAXlB,MAAEA,GAAOkB,EACb,GAAqB,IAAjBlB,EAAME,OACN,OAAO,EAGX,IAAI2F,EAAAA,EAAAA,KACA,OAAO,EAEX,MAAMxG,EAAOW,EAAM,GACbgF,EAAa3F,EAAKE,aAAa,eAIrC,SAHgB0F,MAAMC,QAAQF,IAAeA,EAAW9E,OAAS,MAO7Db,EAAKgF,SAAUC,EAAAA,EAAAA,OAAkBC,MAAOpB,EAAW9D,KAKN,KAAzCA,EAAKyG,YAAcC,EAAAA,GAAWC,QACU,KAAxC3G,EAAKyG,YAAcC,EAAAA,GAAWE,KAC1C,EACA,UAAM1F,CAAI2F,GAAY,IAAXlG,MAAEA,GAAOkG,EAEhB,MAAM7G,EAAOW,EAAM,GACnB,OAA6C,KAAxCX,EAAKyG,YAAcC,EAAAA,GAAWE,QACfE,EAAAA,EAAAA,MACRC,KAAK/G,EAAM,WACZ,QAIXgH,EAAAA,EAAAA,KAAUvI,EAAAA,EAAAA,IAAE,gBAAiB,2DACtB,KACX,EACAyD,OAAQA,KAAM,8DExHlB,MAAM+E,EAASb,SACbc,qBAAqB,QAAQ,GAC7BC,aAAa,aAKFC,GAJOhB,SAClBc,qBAAqB,QAAQ,GAC7BC,aAAa,8BAEuBhE,IAAX8D,GAAuBA,GCZ8NI,GCOnPC,EAAAA,EAAAA,IAAiB,CAC1CC,OAAQ,wBACRC,MAAO,CACHzH,OAAQ,MAEZ0H,KAAAA,CAAMC,GACF,MAAMF,EAAQE,EACRC,EFKPP,EEJOQ,GAAgBC,EAAAA,EAAAA,IAAI,IACpBC,GAAoBD,EAAAA,EAAAA,IAAI,IACxBE,GAAmBF,EAAAA,EAAAA,IAAI,KAC7BG,EAAAA,EAAAA,IAAMD,EAAkB,KACpB,MAAME,EAAWF,EAAiBxH,MAAMyB,IAAIpC,IAAA,IAAGrB,GAAI2G,EAAGxE,YAAEA,GAAad,EAAA,MAAM,CAAEsF,MAAKxE,iBAClF8G,EAAMzH,OAAOmI,YAAYD,EAASpH,OAAS,EAAIoH,OAAW9E,MAE9DgF,EAAAA,EAAAA,IAAU,KACNC,EAAqBZ,EAAMzH,OAAO+H,mBAClCC,EAAiBxH,MAAQuH,EAAkBvH,MAAMR,OAAOiB,IAAA,IAACzC,GAAEA,GAAIyC,EAAA,OAAKwG,EAAMzH,OAAOsI,gBAAgB9E,KAAKpC,IAAA,IAAC+D,IAAEA,GAAK/D,EAAA,OAAK+D,IAAQ3G,OAAQ,GACnIiJ,EAAMzH,OAAOuI,iBAAiB,mBAAoBF,GAClDZ,EAAMzH,OAAOuI,iBAAiB,QAASC,GACvCf,EAAMzH,OAAOuI,iBAAiB,WAAYE,MAE9CC,EAAAA,EAAAA,IAAY,KACRjB,EAAMzH,OAAO2I,oBAAoB,mBAAoBN,GACrDZ,EAAMzH,OAAO2I,oBAAoB,QAASH,GAC1Cf,EAAMzH,OAAO2I,oBAAoB,WAAYF,KAKjD,MAAMG,GAAgBC,EAAAA,EAAAA,IAAS,KAC3B,IAAKhB,EAAcrH,MACf,MAAO,IAAIuH,EAAkBvH,OAAOsI,KAAKC,GAE7C,MAAMC,EAAanB,EAAcrH,MAAMyI,oBAAoBC,OAAOC,MAAM,KAGxE,OAFiBpB,EAAkBvH,MAAMR,OAAQoJ,GAAYJ,EAAWK,MAAOC,GAASF,EAAQ3D,KAAKwD,oBAAoB7G,SAASkH,IAC3HF,EAAQzI,YAAYsI,oBAAoB7G,SAASkH,KACxCR,KAAKC,KAQzB,SAASA,EAAaQ,EAAGC,GACrB,OAAID,EAAE/K,KAAOoJ,GACD,EAER4B,EAAEhL,KAAOoJ,EACF,EAEJ2B,EAAE5I,YAAY8I,cAAcD,EAAE7I,YACzC,CAqBA,SAAS8H,EAASiB,GACd,MAAMC,EAAYD,EAAME,OACxB5B,EAAiBxH,MAAQwH,EAAiBxH,MAAMR,OAAO6J,IAAA,IAACrL,GAAEA,GAAIqL,EAAA,OAAKrL,IAAOmL,GAC9E,CAIA,SAASnB,IACLR,EAAiBxH,MAAQ,GACzBqH,EAAcrH,MAAQ,EAC1B,CAMA,SAAS6H,EAAqBH,GACtBA,aAAoB4B,cACpB5B,EAAWA,EAAS0B,QAExB7B,EAAkBvH,MAAQ0H,EAASjG,IAAI8H,IAAA,IAAC5E,IAAEA,EAAGxE,YAAEA,GAAaoJ,EAAA,MAAM,CAAEpJ,cAAanC,GAAI2G,EAAKM,KAAMN,IACpG,CACA,MAAO,CAAE6E,OAAO,EAAMvC,QAAOG,gBAAeC,gBAAeE,oBAAmBC,mBAAkBY,gBAAeG,eAAckB,cApC7H,SAAuBN,EAAWO,GAE9B,GADAlC,EAAiBxH,MAAQwH,EAAiBxH,MAAMR,OAAO8B,IAAA,IAACtD,GAAEA,GAAIsD,EAAA,OAAKtD,IAAOmL,IACtEO,EAAU,CACV,MAAMd,EAAUrB,EAAkBvH,MAAM2J,KAAKrD,IAAA,IAACtI,GAAEA,GAAIsI,EAAA,OAAKtI,IAAOmL,IAC5DP,IACApB,EAAiBxH,MAAQ,IAAIwH,EAAiBxH,MAAO4I,GAE7D,CACJ,EA4B4IX,WAAUD,cAAaH,uBAAsB3J,EAAC0L,EAAA1L,EAAE2L,SAAQA,EAAAxF,EAAEyF,SAAQA,EAAAzF,EAAE0F,YAAWA,EAAAA,EAC/N,oBC7FAC,GAAO,GAEXA,GAAOxG,kBAAqBC,IAC5BuG,GAAOtG,cAAiBC,IACxBqG,GAAOpG,OAAUC,IAAAC,KAAa,aAC9BkG,GAAOjG,OAAUC,IACjBgG,GAAO/F,mBAAsBC,IAEhBC,IAAI8F,GAAA5F,EAAS2F,IAKnB,MAAAE,GAAeD,GAAA5F,GAAW4F,GAAA5F,EAAOC,OAAU2F,GAAA5F,EAAOC,YAAA1B,ECGzDuH,IAXgB,WAAA9F,GACdyC,EFjBW,WAAkB,IAAIsD,EAAI1I,KAAK2I,EAAGD,EAAIE,MAAMD,GAAGE,EAAOH,EAAIE,MAAME,YAAY,OAAOH,EAAG,MAAM,CAACI,MAAML,EAAIM,OAAOC,uBAAuB,CAAEJ,EAAOhD,kBAAkBjH,OAAS,EAAG+J,EAAGE,EAAOR,YAAY,CAACa,MAAM,CAAC9I,KAAO,SAAS+I,MAAQN,EAAOrM,EAAE,gBAAiB,oBAAoB4M,MAAM,CAAC9K,MAAOuK,EAAOlD,cAAe0D,SAAS,SAAUC,GAAMT,EAAOlD,cAAc2D,CAAG,EAAEC,WAAW,mBAAmBb,EAAIc,KAAKd,EAAIe,GAAG,KAAKf,EAAIgB,GAAIb,EAAOnC,cAAe,SAASQ,GAAS,OAAOyB,EAAGE,EAAOT,SAAS,CAACuB,IAAIzC,EAAQ5K,GAAG4M,MAAM,CAACU,UAAY,QAAQC,QAAUhB,EAAO/C,iBAAiB5F,SAASgH,GAAS4C,QAAU,WAAWC,KAAO,IAAIC,GAAG,CAAC,iBAAiB,SAASC,GAAQ,OAAOpB,EAAOd,cAAcb,EAAQ5K,GAAI2N,EAAO,GAAGC,YAAYxB,EAAIyB,GAAG,CAAC,CAACR,IAAI,OAAOS,GAAG,WAAW,MAAO,CAACzB,EAAGE,EAAOV,SAASO,EAAI2B,GAAG,CAACtB,MAAML,EAAIM,OAAOsB,8BAA8BpB,MAAM,CAACqB,KAAO,GAAG,eAAe,GAAG,cAAc,KAAK,WAAWrD,GAAQ,IAAQ,EAAEsD,OAAM,IAAO,MAAK,IAAO,CAAC9B,EAAIe,GAAG,SAASf,EAAI+B,GAAGvD,EAAQzI,aAAa,UAAWyI,EAAQ5K,KAAOuM,EAAOnD,cAAeiD,EAAG,OAAO,CAACI,MAAML,EAAIM,OAAO0B,oCAAoC,CAAChC,EAAIe,GAAG,YAAYf,EAAI+B,GAAG5B,EAAOrM,EAAE,QAAS,QAAQ,aAAakM,EAAIc,MAAM,IAAI,EACjqC,EACsB,IEkBtB,EAZA,SAAAmB,GAEA3K,KAAA,OAAoBwI,GAAM5F,QAAW4F,EAErC,EAUA,KACA,+yBCRA,MACMoC,GAAU,yCAChB,IAAAC,GAAA,IAAAC,QAAAC,GAAA,IAAAD,QAGA,MAAME,WAAsBC,EAAAA,GAMxBC,WAAAA,GACIC,MAAM,wBAAyB,KANnCC,GAAApL,KAAA6K,QAAkB,GAClBO,GAAApL,KAAA+K,QAAe,GAACM,GAAArL,KAAA,eACFxD,EAAAA,EAAAA,GAAE,gBAAiB,WAAS6O,GAAArL,KAAA,2dACDqL,GAAArL,KAAA,UAC/B4K,IAGNU,GAAKT,GAAL7K,KAA0B,KAC1BuL,EAAAA,EAAAA,IAAU,qBAAsB5N,IAAkB,IAAjBE,SAAEA,GAAUF,EACzCqC,KAAKwL,wBAAwB3N,IAErC,CACA,qBAAIgI,GACA,OAAO4F,GAAKZ,GAAL7K,KACX,CACA,kBAAIoG,GACA,OAAOqF,GAAKV,GAAL/K,KACX,CACAlC,MAAAA,CAAOY,GACH,IAAK+M,GAAKV,GAAL/K,OAAwD,IAAhCyL,GAAKV,GAAL/K,MAAqBpB,OAC9C,OAAOF,EAEX,MAAMgN,EAAUD,GAAKV,GAAL/K,MAAqBD,IAAIhB,IAAA,IAACkE,IAAEA,GAAKlE,EAAA,OAAKkE,IAEtD,OAAOvE,EAAMZ,OAAQC,IACjB,GA/Ba,aA+BTwC,OAAOC,IAAIC,MAAMC,OAAOiL,OAAO3M,KAA2B,CAC1D,MAAM4M,EAAY7N,EAAKE,aAAa,0BACpC,SAAI2N,IAAaF,EAAQxL,SAAS0L,GAItC,CAEA,GAAI7N,EAAKgF,OAAS2I,EAAQxL,SAASnC,EAAKgF,OACpC,OAAO,EAGX,MAAMK,EAAUrF,EAAKE,WAAWmF,SAASC,OACzC,SAAID,IAAW,CAACA,GAASN,OAAOxB,KAAKpC,IAAA,IAAC5C,GAAEA,GAAI4C,EAAA,OAAKwM,EAAQxL,SAAS5D,QAI7DyB,EAAKgF,QAAUK,GAM5B,CACAyI,KAAAA,GACI7L,KAAK8L,cAAc,IAAIlE,YAAY,SACvC,CAMA3B,WAAAA,CAAYD,GACRsF,GAAKP,GAAL/K,KAAuBgG,GACvB,IAAI+F,EAAQ,GACRN,GAAKV,GAAL/K,OAAwByL,GAAKV,GAAL/K,MAAqBpB,OAAS,IACtDmN,EAAQN,GAAKV,GAAL/K,MAAqBD,IAAIH,IAAA,IAACnB,YAAEA,EAAWwE,IAAEA,GAAKrD,EAAA,MAAM,CACxDoM,KAAMvN,EACN8E,KAAMN,EACNgJ,QAASA,IAAMjM,KAAK8L,cAAc,IAAIlE,YAAY,WAAY,CAAEF,OAAQzE,SAGhFjD,KAAKkM,YAAYH,GACjB/L,KAAKmM,eACT,CAMAX,uBAAAA,CAAwB9M,GACpB,MAAM0N,EAAY,IAAIC,IACtB,IAAK,MAAMtO,KAAQW,EAAO,CACtB,MAAMqE,EAAQhF,EAAKgF,MACfA,IAAUqJ,EAAUE,IAAIvJ,IACxBqJ,EAAUG,IAAIxJ,EAAO,CACjBE,IAAKF,EACLtE,YAAaV,EAAKE,WAAW,uBAAyBF,EAAKgF,QAInE,MAAMK,EAAU,CAACrF,EAAKE,WAAWmF,SAASC,QAAQP,OAAOhF,OAAO0O,SAChE,IAAK,MAAMnJ,IAAU,CAACD,GAASN,OAET,KAAdO,EAAO/G,KAGP+G,EAAOjD,OAAS9C,EAAAA,EAAUgG,MAAQD,EAAOjD,OAAS9C,EAAAA,EAAUmP,QAI3DL,EAAUE,IAAIjJ,EAAO/G,KACtB8P,EAAUG,IAAIlJ,EAAO/G,GAAI,CACrB2G,IAAKI,EAAO/G,GACZmC,YAAa4E,EAAO,mBAKhC,MAAMuI,EAAY7N,EAAKE,aAAa,0BAChC2N,GACAQ,EAAUG,IAAIX,EAAW,CACrB3I,IAAK2I,EACLnN,YAAaV,EAAKE,aAAa,qCAAuC2N,GAGlF,CACAN,GAAKT,GAAL7K,KAA0B,IAAIoM,EAAUvJ,WACxC7C,KAAK8L,cAAc,IAAIlE,YAAY,oBACvC,kBC7HJ,MAAM8E,GAAgB,aAAIC,GACpBC,IAA0BC,EAAAA,EAAAA,IAAqB,IAAMhN,QAAAC,IAAA,CAAAgN,EAAAC,EAAA,MAAAD,EAAAC,EAAA,QAAArP,KAAAoP,EAAA1K,KAAA0K,EAAA,SAE9CE,GAAQ,CACjB1Q,GAFmB,eAGnBmC,aAAajC,EAAAA,EAAAA,GAAE,gBAAiB,uBAChCqC,cAAerB,EACfV,MAAO,GACPgC,QAAOA,MAECyF,EAAAA,EAAAA,QAGCmI,GAAcO,uBAIZP,GAAcQ,qBAEzB,aAAMC,CAAQxC,EAASyC,IACnBC,EAAAA,GAAAA,GAAYT,GAAyB,CACjCjC,UACAyC,WAER,GCnBJE,KACAC,EAAAA,EAAAA,IAAoBC,KACpBC,EAAAA,EAAAA,IAAoB,UAAW,CAAEC,GAAI,6BACrCD,EAAAA,EAAAA,IAAoB,aAAc,CAAEC,GAAI,6BACxCD,EAAAA,EAAAA,IAAoB,mBAAoB,CAAEC,GAAI,6BAC9CD,EAAAA,EAAAA,IAAoB,sBAAuB,CAAEC,GAAI,6BACjDD,EAAAA,EAAAA,IAAoB,iBAAkB,CAAEE,GAAI,4BAC5CF,EAAAA,EAAAA,IAAoB,wBAAyB,CAAEG,IAAK,+CACpDC,EAAAA,EAAAA,IAAmBC,IACnBD,EAAAA,EAAAA,IAAmBE,IACnBF,EAAAA,EAAAA,IAAmBG,IACnBH,EAAAA,EAAAA,IAAmBI,IACnBJ,EAAAA,EAAAA,IAAmBnL,GFiHZ,WACH,IAAI6B,EAAAA,EAAAA,KAEA,OAEJ,MAAM2J,GAAmBC,EAAAA,EAAAA,GAAKC,EAAAA,GAAK3F,IAGnCvK,OAAOG,eAAe6P,EAAiBG,UAAW,eAAgB,CAC9D/P,KAAAA,GACI,OAAO0B,IACX,IAEJ9B,OAAOG,eAAe6P,EAAiBG,UAAW,aAAc,CAC5DC,GAAAA,GACI,OAAOtO,IACX,IAEJuO,eAAeC,OAAO5D,GAASsD,IAC/BO,EAAAA,EAAAA,IAAuB,IAAIzD,GAC/B,CEpIA0D,GCnBe,WACX,IAAIC,EACAC,GACJC,EAAAA,EAAAA,IAAuB,CACnBvS,GAAI,oBACJQ,MAAO,EAEPgC,QAAUlB,GAAW4O,QAAQ5O,EAAOK,WAAW6Q,MAE/CC,QAAUnR,IACFgR,GACAA,EAASI,aAAapR,IAI9BqR,OAAQC,MAAOC,EAAIvR,KACf,QAAmCsD,IAA/ByN,EAA0C,CAC1C,MAAQxN,QAASiO,SAAoBvP,QAAAC,IAAA,CAAAgN,EAAAC,EAAA,MAAAD,EAAAC,EAAA,QAAArP,KAAAoP,EAAA1K,KAAA0K,EAAA,QACrC6B,EAA6BP,EAAAA,GAAIiB,OAAOD,EAC5C,CACAR,GAAW,IAAID,GAA6BW,OAAOH,GACnDP,EAASI,aAAapR,KAGlC,CDHA2R,yEExBe,MAAM5C,EAEjBzB,WAAAA,eAAclL,YAAA,iZACVA,KAAKwP,eAAgBC,EAAAA,EAAAA,IACzB,CAIA,sBAAIC,GACA,OAAO1P,KAAKwP,cAAcG,eAAeC,mBAC7C,CAIA,0BAAIC,GACA,OAAuE,IAAhE7P,KAAKwP,cAAcG,eAAeG,yBAC7C,CAKA,yBAAI7C,GACA,OAA4D,IAArDjN,KAAKwP,cAAcG,eAAeI,QAAQC,MACrD,CAIA,yBAAIC,GACA,OAAO1P,OAAO2P,GAAGC,UAAUC,KAAKC,sBACpC,CAIA,yBAAIC,GACA,OAAItQ,KAAKuQ,4BAAyD,OAA3BvQ,KAAKwQ,kBACjC,IAAIC,MAAK,IAAIA,MAAOC,SAAQ,IAAID,MAAOE,UAAY3Q,KAAKwQ,oBAE5D,IACX,CAIA,iCAAII,GACA,OAAI5Q,KAAK6Q,oCAAyE,OAAnC7Q,KAAK8Q,0BACzC,IAAIL,MAAK,IAAIA,MAAOC,SAAQ,IAAID,MAAOE,UAAY3Q,KAAK8Q,4BAE5D,IACX,CAIA,qCAAIC,GACA,OAAI/Q,KAAKgR,kCAAqE,OAAjChR,KAAKiR,wBACvC,IAAIR,MAAK,IAAIA,MAAOC,SAAQ,IAAID,MAAOE,UAAY3Q,KAAKiR,0BAE5D,IACX,CAIA,gCAAIC,GACA,OAAiE,IAA1D3Q,OAAO2P,GAAGC,UAAUC,KAAKc,4BACpC,CAIA,+BAAIC,GACA,OAAgE,IAAzD5Q,OAAO2P,GAAGC,UAAUC,KAAKe,2BACpC,CAIA,+BAAIC,GACA,OAA8D,IAAvD7Q,OAAO2P,GAAGC,UAAUC,KAAKiB,yBACpC,CAIA,8BAAId,GACA,OAA6D,IAAtDhQ,OAAO2P,GAAGC,UAAUC,KAAKkB,wBACpC,CAIA,uCAAIC,GACA,OAAsE,IAA/DhR,OAAO2P,GAAGC,UAAUC,KAAKoB,iCACpC,CAIA,sCAAIX,GACA,OAAqE,IAA9DtQ,OAAO2P,GAAGC,UAAUC,KAAKqB,gCACpC,CAIA,qCAAIC,GACA,OAAoE,IAA7DnR,OAAO2P,GAAGC,UAAUC,KAAKuB,+BACpC,CAIA,oCAAIX,GACA,OAAmE,IAA5DzQ,OAAO2P,GAAGC,UAAUC,KAAKwB,8BACpC,CAIA,wBAAIC,GACA,OAAuD,IAAhDtR,OAAO2P,GAAGC,UAAUC,KAAK0B,kBACpC,CAIA,uBAAIC,GACA,OAAmE,IAA5D/R,KAAKwP,eAAeG,eAAeqC,YAAYC,QAC1D,CAIA,wBAAI/E,GACA,OAA8D,IAAvDlN,KAAKwP,eAAeG,eAAeI,QAAQjR,OACtD,CAIA,sBAAIoT,GACA,OAAmE,IAA5DlS,KAAKwP,eAAeG,eAAewC,aAAarT,UAClB,IAA9BkB,KAAKkN,oBAChB,CAIA,qBAAIsD,GACA,OAAOjQ,OAAO2P,GAAGC,UAAUC,KAAKI,iBACpC,CAIA,6BAAIM,GACA,OAAOvQ,OAAO2P,GAAGC,UAAUC,KAAKU,yBACpC,CAIA,2BAAIG,GACA,OAAO1Q,OAAO2P,GAAGC,UAAUC,KAAKa,uBACpC,CAIA,sBAAImB,GACA,OAAqD,IAA9C7R,OAAO2P,GAAGC,UAAUC,KAAKiC,gBACpC,CAIA,mCAAIC,GACA,OAA6E,IAAtEtS,KAAKwP,cAAcG,eAAewC,aAAaI,UAAUC,QACpE,CAIA,0BAAIC,GACA,OAAwE,IAAjEzS,KAAKwP,cAAcG,eAAetM,QAAQqP,kBACrD,CAIA,qBAAIC,GACA,OAAsD,IAA/CpS,OAAO2P,GAAGC,UAAUC,KAAKuC,iBACpC,CAIA,0BAAIC,GACA,OAAOC,SAAStS,OAAO2P,GAAG4C,OAAO,kCAAmC,KAAO,EAC/E,CAKA,yBAAIC,GACA,OAAOF,SAAStS,OAAO2P,GAAG4C,OAAO,iCAAkC,KAAO,CAC9E,CAIA,kBAAIE,GACA,OAAOhT,KAAKwP,eAAeyD,iBAAmB,CAAC,CACnD,CAIA,qBAAIC,GACA,OAAOlT,KAAKwP,eAAeG,eAAeI,QAAQoD,aACtD,CAMA,iCAAIC,GACA,OAAOlW,EAAAA,EAAAA,GAAU,gBAAiB,iCAAiC,EACvE,CAMA,iDAAImW,GACA,OAAOnW,EAAAA,EAAAA,GAAU,gBAAiB,iDAAiD,EACvF,CAIA,uBAAIoW,GACA,OAAOpW,EAAAA,EAAAA,GAAU,gBAAiB,uBAAuB,EAC7D,6HCpNJ,MAAMqW,EAAU,CACZ,eAAgB,oBAmGpB,SAASC,IAA+B,IAArBC,EAAWzP,UAAApF,OAAA,QAAAsC,IAAA8C,UAAA,IAAAA,UAAA,GAC1B,MAAM3E,GAAMC,EAAAA,EAAAA,IAAe,oCAC3B,OAAOE,EAAAA,GAAM8O,IAAIjP,EAAK,CAClBkU,UACA5H,OAAQ,CACJ+H,eAAgBD,EAChBE,cAAc,IAG1B,CAgBA,SAASC,IACL,MAAMvU,GAAMC,EAAAA,EAAAA,IAAe,2CAC3B,OAAOE,EAAAA,GAAM8O,IAAIjP,EAAK,CAClBkU,UACA5H,OAAQ,CACJgI,cAAc,IAG1B,CAIA,SAASE,IACL,MAAMxU,GAAMC,EAAAA,EAAAA,IAAe,4CAC3B,OAAOE,EAAAA,GAAM8O,IAAIjP,EAAK,CAClBkU,UACA5H,OAAQ,CACJgI,cAAc,IAG1B,CAIA,SAASG,IACL,MAAMzU,GAAMC,EAAAA,EAAAA,IAAe,mDAC3B,OAAOE,EAAAA,GAAM8O,IAAIjP,EAAK,CAClBkU,UACA5H,OAAQ,CACJgI,cAAc,IAG1B,CAIA,SAASI,IACL,MAAM1U,GAAMC,EAAAA,EAAAA,IAAe,2CAC3B,OAAOE,EAAAA,GAAM8O,IAAIjP,EAAK,CAClBkU,UACA5H,OAAQ,CACJgI,cAAc,IAG1B,CAMO,SAAS3V,IAAiC,IAAnBC,EAAU+F,UAAApF,OAAA,QAAAsC,IAAA8C,UAAA,GAAAA,UAAA,GAAG,KACvC,MAAMhG,EAAiBgW,GACQ,gBAApBA,EAAUC,OAA6C,YAAlBD,EAAUrK,MAAyC,IAApBqK,EAAU1V,MAEzF,IAEI,OADwB4V,KAAKC,MAAMlW,GACZqD,KAAKtD,EAChC,CACA,MAAOoW,GAEH,OADAC,EAAAA,EAAOD,MAAM,uCAAwC,CAAEA,WAChD,CACX,CACJ,CAsBOlF,eAAelS,IAA2H,IAAzFsX,IAAgBtQ,UAAApF,OAAA,QAAAsC,IAAA8C,UAAA,KAAAA,UAAA,GAASuQ,EAAavQ,UAAApF,OAAA,QAAAsC,IAAA8C,UAAA,IAAAA,UAAA,GAAUwQ,EAAaxQ,UAAApF,OAAA,QAAAsC,IAAA8C,UAAA,IAAAA,UAAA,GAAUyQ,EAAWzQ,UAAApF,OAAA,QAAAsC,IAAA8C,UAAA,GAAAA,UAAA,GAAG,GACzI,MAAM0Q,EAAW,MAD0B1Q,UAAApF,OAAA,QAAAsC,IAAA8C,UAAA,KAAAA,UAAA,KAGvC0Q,EAASC,KAAK,CAAEC,QAlGbpB,GAAU,GAkGgCqB,WAAW,GAAS,CAAED,QAAShB,IAAmBiB,WAAW,IAE1GP,GACAI,EAASC,KAAK,CAAEC,QA/FbpB,IA+F6CqB,WAAW,IAE3DN,GACAG,EAASC,KAAK,CAAEC,QAASf,IAAoBgB,WAAW,GAAQ,CAAED,QAASd,IAA0Be,WAAW,IAEhHL,GACAE,EAASC,KAAK,CAAEC,QAASb,IAAoBc,WAAW,IAE5D,MACMC,SADkBjV,QAAQC,IAAI4U,EAAS3U,IAAIpC,IAAA,IAACiX,QAAEA,GAASjX,EAAA,OAAKiX,MAC3CG,QAAQ,CAACC,EAAUC,IAAUD,EAASF,KAAKlH,IAAIkH,KACjE/U,IAAKiN,IAAK,CAAQA,QAAO6H,UAAWH,EAASO,GAAOJ,cACzD,IAAIhX,SAAkBgC,QAAQC,IAAIgV,EAAK/U,IAAIhB,IAAA,IAACiO,MAAEA,EAAK6H,UAAEA,GAAW9V,EAAA,OA1NpEmQ,eAA8BgG,GAA6B,IAAnBL,EAAS7Q,UAAApF,OAAA,QAAAsC,IAAA8C,UAAA,IAAAA,UAAA,GAC7C,IAEI,QAA4B9C,IAAxBgU,GAAU3T,UAAyB,CACnC,IAAK2T,EAASC,SAAU,CACpB,MAAMC,SAActI,EAAAC,EAAA,KAAArP,KAAAoP,EAAA1K,KAAA0K,EAAA,SAAgB3L,QAEpC+T,EAASC,SAAWC,EAAKC,QAAQH,EAAS3Y,KAC9C,CACA,MAAM6D,EAAyB,QAAlB8U,EAAS9U,KAAiB,SAAW8U,EAAS9U,KAC3D8U,EAASI,UAAYlV,IAAS8U,EAASC,SAAW,OAAS,UAE3DD,EAASK,WAAaL,EAASM,MAC/BN,EAASO,YAAcP,EAASO,aAAeP,EAASQ,WACpDR,EAASO,YAAYvV,SAAS,6BAC9BgV,EAASO,YAAcP,EAAS3Y,MAG/B2Y,EAASxT,WAEVwT,EAASS,iBAAmBlR,EAAAA,GAAWmR,KACvCV,EAAS1Q,YAAcC,EAAAA,GAAWmR,MAEtCV,EAASW,UAAYX,EAASnS,MAE9BmS,EAASY,kBAAoBZ,EAASnS,KAC1C,CAGI8R,IACAK,EAASS,iBAAmBlR,EAAAA,GAAWmR,KACvCV,EAAS1Q,YAAcC,EAAAA,GAAWmR,MAEtC,MAAMzV,EAAmC,WAAxB+U,GAAUI,UACrBS,GAAuC,IAA1Bb,GAAUc,YACvBC,EAAO9V,EAAWG,EAAAA,GAAS4V,EAAAA,GAI3BtV,EAASsU,EAASiB,aAAejB,EAASkB,SAAWlB,EAAS5Y,GAE9DyE,EAAOmU,EAASnU,MAAQmU,EAASO,aAAeP,EAAS3Y,KACzD8Z,EAAS,IAAGC,EAAAA,EAAAA,SAAiBC,EAAAA,EAAAA,SAAiBxV,EAAKyV,QAAQ,OAAQ,MACzE,IAKIpT,EALAoS,EAAQN,EAASK,WAAa,IAAI9E,KAA6B,IAAvByE,EAASK,iBAAsBrU,EAe3E,OAbIgU,GAAUuB,OAASvB,GAAUK,YAAc,KAC3CC,EAAQ,IAAI/E,KAAwB,IAAlByE,EAASuB,QAG3B,eAAgBvB,IAChB9R,EAAU,CACNC,OAAQ,CACJ/G,GAAI4Y,EAASwB,WACb,eAAgBxB,EAASyB,wBAA0BzB,EAASwB,WAC5DtW,KAAM8U,EAAS1T,cAIpB,IAAIyU,EAAK,CACZ3Z,GAAIsE,EACJyV,SACAtT,MAAOmS,GAAUW,UACjBT,KAAMF,GAAUC,UAAY,2BAC5BK,QACAjL,KAAM2K,GAAU0B,gBAAa1V,EAC7BsD,YAAa0Q,GAAUS,kBAAoBT,GAAU1Q,YACrDqS,MAAMN,EAAAA,EAAAA,MACNtY,WAAY,IACLiX,EAEH,WAAYA,EAAS5Y,GACrB,cAAeyZ,EACf,gBAA6C,IAA5Bb,GAAU4B,cAE3B,WAAY5B,GAAUW,UACtB,qBAAsBX,GAAUY,kBAChC,cAAeZ,GAAU1T,WACzB,mBAAoB0T,GAAUjX,YAAc,KAC5CmF,UACA2T,SAAU7B,GAAU8B,MAAM9W,SAASK,OAAO2P,GAAG+G,cAAgB,EAAI,IAG7E,CACA,MAAO7C,GAEH,OADAC,EAAAA,EAAOD,MAAM,gCAAiC,CAAEA,UACzC,IACX,CACJ,CAmIyE8C,CAAelK,EAAO6H,OACtF/W,OAAQC,GAAkB,OAATA,GAhC1B,IAAiBW,EAAOiL,EA2CpB,OAVI8K,EAAY7V,OAAS,IACrBf,EAAWA,EAASC,OAAQC,GAAS0W,EAAYvU,SAASnC,EAAKE,YAAYuD,cAI/E3D,GAtCaa,EAsCMb,EAtCC8L,EAsCS,SArCtBzL,OAAO2E,OAAOnE,EAAMyY,OAAO,SAAUC,EAAKC,GAE7C,OADCD,EAAIC,EAAK1N,IAAQyN,EAAIC,EAAK1N,KAAS,IAAIgL,KAAK0C,GACtCD,CACX,EAAG,CAAC,KAkCmCrX,IAAKrB,IACxC,MAAMX,EAAOW,EAAM,GAEnB,OADAX,EAAKE,WAAW,eAAiBS,EAAMqB,IAAKhC,GAASA,EAAKE,WAAW,gBAC9DF,IAEJ,CACHH,OAAQ,IAAI0C,EAAAA,GAAO,CACfhE,GAAI,EACJ+Z,OAAQ,IAAGC,EAAAA,EAAAA,SAAiBC,EAAAA,EAAAA,QAC5BxT,OAAOC,EAAAA,EAAAA,OAAkBC,KAAO,KAChC4T,MAAMN,EAAAA,EAAAA,QAEV1Y,WAER,8CC9PA,MAAAyZ,GAAeC,WAAAA,MACVC,OAAO,iBACPC,aACAC,uFCLLC,QAA8BC,GAA4BC,KAE1DF,EAAAhD,KAAA,CAAAmD,EAAAxb,GAAA,orBAA2tB,IAAOyb,QAAA,EAAAC,QAAA,8EAAAC,MAAA,GAAAC,SAAA,wJAAAC,eAAA,+/BAA6xCC,WAAA,MAE//D,MAAAd,EAAA,iFCJAK,QAA8BC,GAA4BC,KAE1DF,EAAAhD,KAAA,CAAAmD,EAAAxb,GAAA,0VAaA,IAAOyb,QAAA,EAAAC,QAAA,4EAAAC,MAAA,GAAAC,SAAA,mGAAqNC,eAAA,spKAAupKC,WAAA,MAEn3KT,EAAA/U,OAAA,CACAqG,sBAAA,+BACAqB,8BAAA,uCACAI,mCAAA,6CAEA,MAAA4M,EAAA,qMCUA,MAAAe,EAAA,CACA,qBACA,mBACA,YACA,oBACA,iBACA,gBACA,0BACA,iBACA,iBACA,kBACA,gBACA,qBACA,cACA,YACA,wBACA,cACA,iBACA,WAEAC,EAAA,CACAC,EAAA,OACA7K,GAAA,0BACAC,GAAA,yBACAC,IAAA,6CAEA,SAAAH,EAAA+K,EAAAC,EAAA,CAAiD/K,GAAA,4BAC/CgL,EAAAC,EAAaC,gBAAA,IAAqBN,GAClCI,EAAAC,EAAaE,gBAAA,IAAAR,GACf,MAAAS,EAAA,IAA0BJ,EAAAC,EAAaC,iBAAAH,GACvC,OAAMC,EAAAC,EAAaE,cAAA5Q,KAAA8Q,GAAAA,IAAAP,IACfE,EAAAM,EAAMC,KAAA,GAAST,uBAAM,CAAuBA,UAChD,GAEAA,EAAAU,WAAA,UAAAV,EAAAvR,MAAA,KAAArI,QACI8Z,EAAAM,EAAM5E,MAAA,GAAUoE,2CAAM,CAA2CA,UACrE,GAGAM,EADAN,EAAAvR,MAAA,UAKEyR,EAAAC,EAAaE,cAAAlE,KAAA6D,GACbE,EAAAC,EAAaC,cAAAE,GACf,IALIJ,EAAAM,EAAM5E,MAAA,GAAUoE,sBAAM,CAAsBA,OAAAM,gBAChD,EAKA,CACA,SAAAK,IAEA,OADET,EAAAC,EAAaE,gBAAA,IAAAR,GACNK,EAAAC,EAAaE,cAAA9Y,IAAAyY,GAAA,IAAiCA,QAAMY,KAAA,IAC7D,CACA,SAAAC,IAEA,OADEX,EAAAC,EAAaC,gBAAA,IAAqBN,GACpCpa,OAAAob,KAAqBZ,EAAAC,EAAaC,eAAA7Y,IAAAwZ,GAAA,SAAqCA,MAAOb,EAAAC,EAAaC,gBAAAW,OAAqBH,KAAA,IAChH,CACA,SAAAI,IACA,gDACgBH,iCAEVF,yCAGN,CAYA,SAAAM,EAAAC,GACA,kEACmBL,8HAKbF,iGAKe,EAAAQ,EAAAC,OAAc3W,0nBA0BjByW,yXAkBlB,CACA,SAAAnD,IACA,OAAM,EAAAsD,EAAAC,KACN,WAAqB,EAAAD,EAAAE,OAErB,WAAmB,EAAAJ,EAAAC,OAAc3W,KACjC,CACA,MAAA+W,EAAAzD,IACA,SAAAD,IACA,MAAAjX,GAAc,EAAA4a,EAAAC,IAAiB,OAC/B,OAAM,EAAAL,EAAAC,KACNza,EAAAmX,QAAA,2BAEAnX,CACA,CACA,MAAA8a,EAAA7D,IACA,SAAA8D,EAAAC,EAAAF,EAAA5G,EAAA,IACA,MAAA+G,GAAiB,EAAAC,EAAAC,IAAYH,EAAA,CAAc9G,YAC3C,SAAAkH,EAAAC,GACAJ,EAAAG,WAAA,IACAlH,EAEA,oCAEAoH,aAAAD,GAAA,IAEA,CAYA,OAXE,EAAAf,EAAAiB,IAAoBH,GACtBA,GAAa,EAAAd,EAAA,QACK,EAAAY,EAAAM,MAClBC,MAAA,SAAAzb,EAAAuC,KACA,MAAAmZ,EAAAnZ,EAAA2R,QAKA,OAJAwH,GAAAC,SACApZ,EAAAoZ,OAAAD,EAAAC,cACAD,EAAAC,QAEAC,MAAA5b,EAAAuC,KAEA0Y,CACA,CACApL,eAAAgM,EAAAtZ,EAAA,IACA,MAAA0Y,EAAA1Y,EAAA0Y,QAAAF,IACArZ,EAAAa,EAAAb,MAAA,IACAoa,EAAAvZ,EAAAuZ,SAAAnB,EAWA,aAVAM,EAAAc,qBAAA,GAAgED,IAAUpa,IAAK,CAC/Esa,OAAAzZ,EAAAyZ,OACAC,SAAA,EACAxG,KAjHA,+CACqBuE,iCAEfF,wIA+GN5F,QAAA,CAEAyH,OAAA,UAEAO,aAAA,KAEAzG,KAAAhX,OAAAC,GAAAA,EAAAyd,WAAAza,GAAAhB,IAAA0b,GAAAC,EAAAD,EAAAN,GACA,CACA,SAAAO,EAAA3d,EAAA4d,EAAA3B,EAAAK,EAAAF,GACA,IAAArW,GAAe,EAAA6V,EAAAC,OAAc3W,IAC7B,IAAM,EAAA4W,EAAAC,KACNhW,EAAAA,GAAA,iBACI,IAAAA,EACJ,UAAA8X,MAAA,oBAEA,MAAArW,EAAAxH,EAAAwH,MACAf,EA3NA,SAAAqX,EAAA,IACA,IAAArX,EAAoBkU,EAAAoD,EAAUlG,KAC9B,OAAAiG,GAGAA,EAAA3b,SAAA,OACAsE,GAAmBkU,EAAAoD,EAAUnX,MAE7BkX,EAAA3b,SAAA,OACAsE,GAAmBkU,EAAAoD,EAAUC,OAE7BF,EAAA3b,SAAA,QACAsE,GAAmBkU,EAAAoD,EAAUE,QAE7BH,EAAA3b,SAAA,QACAsE,GAAmBkU,EAAAoD,EAAUG,QAE7BJ,EAAA3b,SAAA,OACAsE,GAAmBkU,EAAAoD,EAAUI,QAE7BL,EAAA3b,SAAA,OACAsE,GAAmBkU,EAAAoD,EAAUpX,OAE7BF,GApBAA,CAqBA,CAmMA2X,CAAA5W,GAAAf,aACAzB,EAAAlC,OAAA0E,IAAA,aAAAzB,GACAxH,EAAAiJ,EAAA3E,QAAA,EACA4U,EAAA,IAAA/E,KAAAA,KAAA0D,MAAApW,EAAAqe,UACAC,EAAA,IAAA5L,KAAAA,KAAA0D,MAAA5O,EAAA+W,eACAC,EAAA,CACAjgB,KACA+Z,OAAA,GAAegE,IAAYtc,EAAAyd,WAC3BhG,MAAAgH,MAAAhH,EAAAiH,YAAA,IAAAjH,EAAAiH,eAAA,EAAAjH,EACA6G,OAAAG,MAAAH,EAAAI,YAAA,IAAAJ,EAAAI,eAAA,EAAAJ,EACAjH,KAAArX,EAAAqX,MAAA,2BAEAsH,iBAAA,IAAAnX,EAAAmX,YAAA7b,OAAA0E,EAAAmX,kBAAA,EACAnS,KAAAhF,GAAAgF,MAAAoS,OAAA9J,SAAAtN,EAAAqX,kBAAA,KAEAC,OAAAvgB,EAAA,EAAqBoc,EAAAoE,EAAUC,YAAA,EAC/BvY,cACAzB,QACA8T,KAAA8E,EACA1d,WAAA,IACAF,KACAwH,EACAwQ,WAAAxQ,IAAA,iBAIA,cADAgX,EAAAte,YAAAsH,MACA,SAAAxH,EAAAqC,KAAA,IAAoCsY,EAAArR,EAAIkV,GAAA,IAAiB7D,EAAApR,EAAMiV,EAC/D,IC/PAS,EAAA,GAGA,SAAAlQ,EAAAmQ,GAEA,IAAAC,EAAAF,EAAAC,GACA,QAAA/b,IAAAgc,EACA,OAAAA,EAAAC,QAGA,IAAArF,EAAAkF,EAAAC,GAAA,CACA3gB,GAAA2gB,EACAG,QAAA,EACAD,QAAA,IAUA,OANAE,EAAAJ,GAAAK,KAAAxF,EAAAqF,QAAArF,EAAAA,EAAAqF,QAAArQ,GAGAgL,EAAAsF,QAAA,EAGAtF,EAAAqF,OACA,CAGArQ,EAAAyQ,EAAAF,EzB5BA7hB,EAAA,GACAsR,EAAA0Q,EAAA,CAAA/B,EAAAgC,EAAArT,EAAAsT,KACA,IAAAD,EAAA,CAMA,IAAAE,EAAAC,IACA,IAAAC,EAAA,EAAiBA,EAAAriB,EAAAoD,OAAqBif,IAAA,CAGtC,IAFA,IAAAJ,EAAArT,EAAAsT,GAAAliB,EAAAqiB,GACAC,GAAA,EACAC,EAAA,EAAkBA,EAAAN,EAAA7e,OAAqBmf,MACvC,EAAAL,GAAAC,GAAAD,IAAAxf,OAAAob,KAAAxM,EAAA0Q,GAAArW,MAAAwC,GAAAmD,EAAA0Q,EAAA7T,GAAA8T,EAAAM,KACAN,EAAAO,OAAAD,IAAA,IAEAD,GAAA,EACAJ,EAAAC,IAAAA,EAAAD,IAGA,GAAAI,EAAA,CACAtiB,EAAAwiB,OAAAH,IAAA,GACA,IAAAI,EAAA7T,SACAlJ,IAAA+c,IAAAxC,EAAAwC,EACA,CACA,CACA,OAAAxC,CAnBA,CAJAiC,EAAAA,GAAA,EACA,QAAAG,EAAAriB,EAAAoD,OAA+Bif,EAAA,GAAAriB,EAAAqiB,EAAA,MAAAH,EAAwCG,IAAAriB,EAAAqiB,GAAAriB,EAAAqiB,EAAA,GACvEriB,EAAAqiB,GAAA,CAAAJ,EAAArT,EAAAsT,I0BJA5Q,EAAAnO,EAAAmZ,IACA,IAAAoG,EAAApG,GAAAA,EAAAqG,WACA,IAAArG,EAAA,QACA,MAEA,OADAhL,EAAAyL,EAAA2F,EAAA,CAAiC7W,EAAA6W,IACjCA,GCLApR,EAAAyL,EAAA,CAAA4E,EAAAiB,KACA,QAAAzU,KAAAyU,EACAtR,EAAAuR,EAAAD,EAAAzU,KAAAmD,EAAAuR,EAAAlB,EAAAxT,IACAzL,OAAAG,eAAA8e,EAAAxT,EAAA,CAAyC2U,YAAA,EAAAhQ,IAAA8P,EAAAzU,MCJzCmD,EAAAgN,EAAA,GAGAhN,EAAAC,EAAAwR,GACA1e,QAAAC,IAAA5B,OAAAob,KAAAxM,EAAAgN,GAAA3C,OAAA,CAAAqH,EAAA7U,KACAmD,EAAAgN,EAAAnQ,GAAA4U,EAAAC,GACAA,GACE,KCNF1R,EAAA2R,EAAAF,GAEAA,EAAA,IAAAA,EAAA,UAAmD,uRAA0SA,GCH7VzR,EAAAuR,EAAA,CAAAK,EAAAlG,IAAAta,OAAAmQ,UAAAsQ,eAAArB,KAAAoB,EAAAlG,G7BAA/c,EAAA,GACAC,EAAA,uBAEAoR,EAAAkM,EAAA,CAAA3Z,EAAAuf,EAAAjV,EAAA4U,KACA,GAAA9iB,EAAA4D,GAAuB5D,EAAA4D,GAAAsV,KAAAiK,OAAvB,CACA,IAAAC,EAAAC,EACA,QAAA5d,IAAAyI,EAEA,IADA,IAAAoV,EAAA5a,SAAAc,qBAAA,UACA4Y,EAAA,EAAiBA,EAAAkB,EAAAngB,OAAoBif,IAAA,CACrC,IAAAlF,EAAAoG,EAAAlB,GACA,GAAAlF,EAAAzT,aAAA,QAAA7F,GAAAsZ,EAAAzT,aAAA,iBAAAxJ,EAAAiO,EAAA,CAAmGkV,EAAAlG,EAAY,MAC/G,CAEAkG,IACAC,GAAA,GACAD,EAAA1a,SAAA6a,cAAA,WAEAC,QAAA,QACAnS,EAAAY,IACAmR,EAAAK,aAAA,QAAApS,EAAAY,IAEAmR,EAAAK,aAAA,eAAAxjB,EAAAiO,GAEAkV,EAAAM,IAAA9f,GAEA5D,EAAA4D,GAAA,CAAAuf,GACA,IAAAQ,EAAA,CAAAC,EAAA7X,KAEAqX,EAAAS,QAAAT,EAAAU,OAAA,KACAC,aAAAC,GACA,IAAAC,EAAAjkB,EAAA4D,GAIA,UAHA5D,EAAA4D,GACAwf,EAAAc,YAAAd,EAAAc,WAAAC,YAAAf,GACAa,GAAAA,EAAAG,QAAAzV,GAAAA,EAAA5C,IACA6X,EAAA,OAAAA,EAAA7X,IAEAiY,EAAAK,WAAAV,EAAAhd,KAAA,UAAAlB,EAAA,CAAmEd,KAAA,UAAA2f,OAAAlB,IAAiC,MACpGA,EAAAS,QAAAF,EAAAhd,KAAA,KAAAyc,EAAAS,SACAT,EAAAU,OAAAH,EAAAhd,KAAA,KAAAyc,EAAAU,QACAT,GAAA3a,SAAA6b,KAAAC,YAAApB,EAnCmD,G8BHnD/R,EAAAmR,EAAAd,IACA,oBAAA+C,QAAAA,OAAAC,aACAjiB,OAAAG,eAAA8e,EAAA+C,OAAAC,YAAA,CAAuD7hB,MAAA,WAEvDJ,OAAAG,eAAA8e,EAAA,cAAgD7e,OAAA,KCLhDwO,EAAAsT,IAAAtI,IACAA,EAAAuI,MAAA,GACAvI,EAAAwI,WAAAxI,EAAAwI,SAAA,IACAxI,GCHAhL,EAAAiR,EAAA,WCAA,IAAAwC,EACAC,WAAAC,gBAAAF,EAAAC,WAAAE,SAAA,IACA,IAAAvc,EAAAqc,WAAArc,SACA,IAAAoc,GAAApc,IACAA,EAAAwc,eAAA,WAAAxc,EAAAwc,cAAA/V,QAAAgW,gBACAL,EAAApc,EAAAwc,cAAAxB,MACAoB,GAAA,CACA,IAAAxB,EAAA5a,EAAAc,qBAAA,UACA,GAAA8Z,EAAAngB,OAEA,IADA,IAAAif,EAAAkB,EAAAngB,OAAA,EACAif,GAAA,KAAA0C,IAAA,aAAAM,KAAAN,KAAAA,EAAAxB,EAAAlB,KAAAsB,GAEA,CAIA,IAAAoB,EAAA,UAAA3E,MAAA,yDACA2E,EAAAA,EAAA/J,QAAA,aAAAA,QAAA,WAAAA,QAAA,YAAAA,QAAA,iBACA1J,EAAAgU,EAAAP,YClBAzT,EAAAxF,EAAA,oBAAAnD,UAAAA,SAAA4c,SAAAC,KAAAN,SAAAO,KAKA,IAAAC,EAAA,CACA,QAGApU,EAAAgN,EAAAiE,EAAA,CAAAQ,EAAAC,KAEA,IAAA2C,EAAArU,EAAAuR,EAAA6C,EAAA3C,GAAA2C,EAAA3C,QAAArd,EACA,OAAAigB,EAGA,GAAAA,EACA3C,EAAA7J,KAAAwM,EAAA,QACK,CAGL,IAAAvM,EAAA,IAAA/U,QAAA,CAAAuhB,EAAAC,IAAAF,EAAAD,EAAA3C,GAAA,CAAA6C,EAAAC,IACA7C,EAAA7J,KAAAwM,EAAA,GAAAvM,GAGA,IAAAvV,EAAAyN,EAAAgU,EAAAhU,EAAA2R,EAAAF,GAEAnK,EAAA,IAAAwH,MAgBA9O,EAAAkM,EAAA3Z,EAfAmI,IACA,GAAAsF,EAAAuR,EAAA6C,EAAA3C,KAEA,KADA4C,EAAAD,EAAA3C,MACA2C,EAAA3C,QAAArd,GACAigB,GAAA,CACA,IAAAG,EAAA9Z,IAAA,SAAAA,EAAApH,KAAA,UAAAoH,EAAApH,MACAmhB,EAAA/Z,GAAAA,EAAAuY,QAAAvY,EAAAuY,OAAAZ,IACA/K,EAAAoN,QAAA,iBAAAjD,EAAA,cAAA+C,EAAA,KAAAC,EAAA,IACAnN,EAAA7X,KAAA,iBACA6X,EAAAhU,KAAAkhB,EACAlN,EAAAqN,QAAAF,EACAJ,EAAA,GAAA/M,EACA,GAGA,SAAAmK,EAAAA,EAEA,GAYAzR,EAAA0Q,EAAAO,EAAAQ,GAAA,IAAA2C,EAAA3C,GAGA,IAAAmD,EAAA,CAAAC,EAAA7M,KACA,IAGAmI,EAAAsB,GAHAd,EAAAmE,EAAAC,GAAA/M,EAGA+I,EAAA,EACA,GAAAJ,EAAAnc,KAAAhF,GAAA,IAAA4kB,EAAA5kB,IAAA,CACA,IAAA2gB,KAAA2E,EACA9U,EAAAuR,EAAAuD,EAAA3E,KACAnQ,EAAAyQ,EAAAN,GAAA2E,EAAA3E,IAGA,GAAA4E,EAAA,IAAApG,EAAAoG,EAAA/U,EACA,CAEA,IADA6U,GAAAA,EAAA7M,GACM+I,EAAAJ,EAAA7e,OAAqBif,IAC3BU,EAAAd,EAAAI,GACA/Q,EAAAuR,EAAA6C,EAAA3C,IAAA2C,EAAA3C,IACA2C,EAAA3C,GAAA,KAEA2C,EAAA3C,GAAA,EAEA,OAAAzR,EAAA0Q,EAAA/B,IAGAqG,EAAAtB,WAAA,gCAAAA,WAAA,oCACAsB,EAAAjC,QAAA6B,EAAAtf,KAAA,SACA0f,EAAAnN,KAAA+M,EAAAtf,KAAA,KAAA0f,EAAAnN,KAAAvS,KAAA0f,QCrFAhV,EAAAY,QAAAxM,ECGA,IAAA6gB,EAAAjV,EAAA0Q,OAAAtc,EAAA,WAAA4L,EAAA,QACAiV,EAAAjV,EAAA0Q,EAAAuE","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/files_sharing/src/files_views/shares.ts","webpack:///nextcloud/apps/files_sharing/src/files_actions/acceptShareAction.ts","webpack:///nextcloud/apps/files_sharing/src/files_actions/openInFilesAction.ts","webpack:///nextcloud/apps/files_sharing/src/files_actions/rejectShareAction.ts","webpack:///nextcloud/apps/files_sharing/src/files_actions/restoreShareAction.ts","webpack://nextcloud/./apps/files_sharing/src/files_actions/sharingStatusAction.scss?6b51","webpack:///nextcloud/apps/files_sharing/src/files_actions/sharingStatusAction.ts","webpack:///nextcloud/apps/files_sharing/src/utils/AccountIcon.ts","webpack:///nextcloud/core/src/OC/currentuser.js","webpack:///nextcloud/apps/files_sharing/src/components/FileListFilterAccount.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/files_sharing/src/components/FileListFilterAccount.vue","webpack://nextcloud/./apps/files_sharing/src/components/FileListFilterAccount.vue?f338","webpack://nextcloud/./apps/files_sharing/src/components/FileListFilterAccount.vue?64e4","webpack:///nextcloud/apps/files_sharing/src/files_filters/AccountFilter.ts","webpack:///nextcloud/apps/files_sharing/src/files_newMenu/newFileRequest.ts","webpack:///nextcloud/apps/files_sharing/src/init.ts","webpack:///nextcloud/apps/files_sharing/src/files_headers/noteToRecipient.ts","webpack:///nextcloud/apps/files_sharing/src/services/ConfigService.ts","webpack:///nextcloud/apps/files_sharing/src/services/SharingService.ts","webpack:///nextcloud/apps/files_sharing/src/services/logger.ts","webpack:///nextcloud/apps/files_sharing/src/files_actions/sharingStatusAction.scss","webpack:///nextcloud/apps/files_sharing/src/components/FileListFilterAccount.vue?vue&type=style&index=0&id=ec2dd1f8&prod&module=true&lang=css","webpack:///nextcloud/node_modules/@nextcloud/files/dist/dav.mjs","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud-ui-legacy:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport AccountClockSvg from '@mdi/svg/svg/account-clock-outline.svg?raw';\nimport AccountGroupSvg from '@mdi/svg/svg/account-group-outline.svg?raw';\nimport AccountSvg from '@mdi/svg/svg/account-outline.svg?raw';\nimport AccountPlusSvg from '@mdi/svg/svg/account-plus-outline.svg?raw';\nimport FileUploadSvg from '@mdi/svg/svg/file-upload-outline.svg?raw';\nimport LinkSvg from '@mdi/svg/svg/link.svg?raw';\nimport DeleteSvg from '@mdi/svg/svg/trash-can-outline.svg?raw';\nimport { getNavigation, View } from '@nextcloud/files';\nimport { loadState } from '@nextcloud/initial-state';\nimport { t } from '@nextcloud/l10n';\nimport { ShareType } from '@nextcloud/sharing';\nimport { getContents, isFileRequest } from '../services/SharingService.ts';\nexport const sharesViewId = 'shareoverview';\nexport const sharedWithYouViewId = 'sharingin';\nexport const sharedWithOthersViewId = 'sharingout';\nexport const sharingByLinksViewId = 'sharinglinks';\nexport const deletedSharesViewId = 'deletedshares';\nexport const pendingSharesViewId = 'pendingshares';\nexport const fileRequestViewId = 'filerequest';\n/**\n * Checks if share accept approval is required by Nextcloud configuration.\n *\n * @return True if share accept approval is required, otherwise false.\n */\nfunction isShareAcceptApprovalRequired() {\n return loadState('files_sharing', 'sharing.enable_share_accept', false);\n}\n/**\n * Checks if the current user has any pending shares.\n *\n * @return True if the user has pending shares, otherwise false.\n */\nfunction hasPendingShares() {\n return loadState('files_sharing', 'has_pending_shares', false);\n}\nexport default () => {\n const Navigation = getNavigation();\n Navigation.register(new View({\n id: sharesViewId,\n name: t('files_sharing', 'Shares'),\n caption: t('files_sharing', 'Overview of shared files.'),\n emptyTitle: t('files_sharing', 'No shares'),\n emptyCaption: t('files_sharing', 'Files and folders you shared or have been shared with you will show up here'),\n icon: AccountPlusSvg,\n order: 20,\n columns: [],\n getContents: () => getContents(),\n }));\n Navigation.register(new View({\n id: sharedWithYouViewId,\n name: t('files_sharing', 'Shared with you'),\n caption: t('files_sharing', 'List of files that are shared with you.'),\n emptyTitle: t('files_sharing', 'Nothing shared with you yet'),\n emptyCaption: t('files_sharing', 'Files and folders others shared with you will show up here'),\n icon: AccountSvg,\n order: 1,\n parent: sharesViewId,\n columns: [],\n getContents: () => getContents(true, false, false, false),\n }));\n // Don't show this view if the user has no storage quota\n const storageStats = loadState('files', 'storageStats', { quota: -1 });\n if (storageStats.quota !== 0) {\n Navigation.register(new View({\n id: sharedWithOthersViewId,\n name: t('files_sharing', 'Shared with others'),\n caption: t('files_sharing', 'List of files that you shared with others.'),\n emptyTitle: t('files_sharing', 'Nothing shared yet'),\n emptyCaption: t('files_sharing', 'Files and folders you shared will show up here'),\n icon: AccountGroupSvg,\n order: 2,\n parent: sharesViewId,\n columns: [],\n getContents: () => getContents(false, true, false, false),\n }));\n }\n Navigation.register(new View({\n id: sharingByLinksViewId,\n name: t('files_sharing', 'Shared by link'),\n caption: t('files_sharing', 'List of files that are shared by link.'),\n emptyTitle: t('files_sharing', 'No shared links'),\n emptyCaption: t('files_sharing', 'Files and folders you shared by link will show up here'),\n icon: LinkSvg,\n order: 3,\n parent: sharesViewId,\n columns: [],\n getContents: () => getContents(false, true, false, false, [ShareType.Link]),\n }));\n Navigation.register(new View({\n id: fileRequestViewId,\n name: t('files_sharing', 'File requests'),\n caption: t('files_sharing', 'List of file requests.'),\n emptyTitle: t('files_sharing', 'No file requests'),\n emptyCaption: t('files_sharing', 'File requests you have created will show up here'),\n icon: FileUploadSvg,\n order: 4,\n parent: sharesViewId,\n columns: [],\n getContents: () => getContents(false, true, false, false, [ShareType.Link, ShareType.Email])\n .then(({ folder, contents }) => {\n return {\n folder,\n contents: contents.filter((node) => isFileRequest(node.attributes?.['share-attributes'] || [])),\n };\n }),\n }));\n Navigation.register(new View({\n id: deletedSharesViewId,\n name: t('files_sharing', 'Deleted shares'),\n caption: t('files_sharing', 'List of shares you left.'),\n emptyTitle: t('files_sharing', 'No deleted shares'),\n emptyCaption: t('files_sharing', 'Shares you have left will show up here'),\n icon: DeleteSvg,\n order: 5,\n parent: sharesViewId,\n columns: [],\n getContents: () => getContents(false, false, false, true),\n }));\n if (!isShareAcceptApprovalRequired() || !hasPendingShares()) {\n return;\n }\n Navigation.register(new View({\n id: pendingSharesViewId,\n name: t('files_sharing', 'Pending shares'),\n caption: t('files_sharing', 'List of unapproved shares.'),\n emptyTitle: t('files_sharing', 'No pending shares'),\n emptyCaption: t('files_sharing', 'Shares you have received but not approved will show up here'),\n icon: AccountClockSvg,\n order: 6,\n parent: sharesViewId,\n columns: [],\n getContents: () => getContents(false, false, true, false),\n }));\n};\n","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport CheckSvg from '@mdi/svg/svg/check.svg?raw';\nimport axios from '@nextcloud/axios';\nimport { emit } from '@nextcloud/event-bus';\nimport { translatePlural as n } from '@nextcloud/l10n';\nimport { generateOcsUrl } from '@nextcloud/router';\nimport { pendingSharesViewId } from '../files_views/shares.ts';\nexport const action = {\n id: 'accept-share',\n displayName: ({ nodes }) => n('files_sharing', 'Accept share', 'Accept shares', nodes.length),\n iconSvgInline: () => CheckSvg,\n enabled: ({ nodes, view }) => nodes.length > 0 && view.id === pendingSharesViewId,\n async exec({ nodes }) {\n try {\n const node = nodes[0];\n const isRemote = !!node.attributes.remote;\n const url = generateOcsUrl('apps/files_sharing/api/v1/{shareBase}/pending/{id}', {\n shareBase: isRemote ? 'remote_shares' : 'shares',\n id: node.attributes['share-id'],\n });\n await axios.post(url);\n // Remove from current view\n emit('files:node:deleted', node);\n return true;\n }\n catch {\n return false;\n }\n },\n async execBatch({ nodes, view, folder, contents }) {\n return Promise.all(nodes.map((node) => this.exec({\n nodes: [node],\n view,\n folder,\n contents,\n })));\n },\n order: 1,\n inline: () => true,\n};\n","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { DefaultType, FileType } from '@nextcloud/files';\nimport { translate as t } from '@nextcloud/l10n';\nimport { sharedWithOthersViewId, sharedWithYouViewId, sharesViewId, sharingByLinksViewId } from '../files_views/shares.ts';\nexport const action = {\n id: 'files_sharing:open-in-files',\n displayName: () => t('files_sharing', 'Open in Files'),\n iconSvgInline: () => '',\n enabled: ({ view }) => [\n sharesViewId,\n sharedWithYouViewId,\n sharedWithOthersViewId,\n sharingByLinksViewId,\n // Deleted and pending shares are not\n // accessible in the files app.\n ].includes(view.id),\n async exec({ nodes }) {\n const isFolder = nodes[0].type === FileType.Folder;\n window.OCP.Files.Router.goToRoute(null, // use default route\n {\n view: 'files',\n fileid: String(nodes[0].fileid),\n }, {\n // If this node is a folder open the folder in files\n dir: isFolder ? nodes[0].path : nodes[0].dirname,\n // otherwise if this is a file, we should open it\n openfile: isFolder ? undefined : 'true',\n });\n return null;\n },\n // Before openFolderAction\n order: -1000,\n default: DefaultType.HIDDEN,\n};\n","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport CloseSvg from '@mdi/svg/svg/close.svg?raw';\nimport axios from '@nextcloud/axios';\nimport { emit } from '@nextcloud/event-bus';\nimport { translatePlural as n } from '@nextcloud/l10n';\nimport { generateOcsUrl } from '@nextcloud/router';\nimport { ShareType } from '@nextcloud/sharing';\nimport { pendingSharesViewId } from '../files_views/shares.ts';\nexport const action = {\n id: 'reject-share',\n displayName: ({ nodes }) => n('files_sharing', 'Reject share', 'Reject shares', nodes.length),\n iconSvgInline: () => CloseSvg,\n enabled: ({ nodes, view }) => {\n if (view.id !== pendingSharesViewId) {\n return false;\n }\n if (nodes.length === 0) {\n return false;\n }\n // disable rejecting group shares from the pending list because they anyway\n // land back into that same list after rejecting them\n if (nodes.some((node) => node.attributes.remote_id\n && node.attributes.share_type === ShareType.RemoteGroup)) {\n return false;\n }\n return true;\n },\n async exec({ nodes }) {\n try {\n const node = nodes[0];\n const isRemote = !!node.attributes.remote;\n const shareBase = isRemote ? 'remote_shares' : 'shares';\n const id = node.attributes['share-id'];\n let url;\n if (node.attributes.accepted === 0) {\n url = generateOcsUrl('apps/files_sharing/api/v1/{shareBase}/pending/{id}', {\n shareBase,\n id,\n });\n }\n else {\n url = generateOcsUrl('apps/files_sharing/api/v1/{shareBase}/{id}', {\n shareBase,\n id,\n });\n }\n await axios.delete(url);\n // Remove from current view\n emit('files:node:deleted', node);\n return true;\n }\n catch {\n return false;\n }\n },\n async execBatch({ nodes, view, folder, contents }) {\n return Promise.all(nodes.map((node) => this.exec({ nodes: [node], view, folder, contents })));\n },\n order: 2,\n inline: () => true,\n};\n","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport ArrowULeftTopSvg from '@mdi/svg/svg/arrow-u-left-top.svg?raw';\nimport axios from '@nextcloud/axios';\nimport { emit } from '@nextcloud/event-bus';\nimport { translatePlural as n } from '@nextcloud/l10n';\nimport { generateOcsUrl } from '@nextcloud/router';\nimport { deletedSharesViewId } from '../files_views/shares.ts';\nexport const action = {\n id: 'restore-share',\n displayName: ({ nodes }) => n('files_sharing', 'Restore share', 'Restore shares', nodes.length),\n iconSvgInline: () => ArrowULeftTopSvg,\n enabled: ({ nodes, view }) => nodes.length > 0 && view.id === deletedSharesViewId,\n async exec({ nodes }) {\n try {\n const node = nodes[0];\n const url = generateOcsUrl('apps/files_sharing/api/v1/deletedshares/{id}', {\n id: node.attributes['share-id'],\n });\n await axios.post(url);\n // Remove from current view\n emit('files:node:deleted', node);\n return true;\n }\n catch {\n return false;\n }\n },\n async execBatch({ nodes, view, folder, contents }) {\n return Promise.all(nodes.map((node) => this.exec({ nodes: [node], view, folder, contents })));\n },\n order: 1,\n inline: () => true,\n};\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./sharingStatusAction.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./sharingStatusAction.scss\";\n export default content && content.locals ? content.locals : undefined;\n","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport AccountGroupSvg from '@mdi/svg/svg/account-group-outline.svg?raw';\nimport AccountPlusSvg from '@mdi/svg/svg/account-plus-outline.svg?raw';\nimport LinkSvg from '@mdi/svg/svg/link.svg?raw';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { showError } from '@nextcloud/dialogs';\nimport { getSidebar, Permission } from '@nextcloud/files';\nimport { translate as t } from '@nextcloud/l10n';\nimport { ShareType } from '@nextcloud/sharing';\nimport { isPublicShare } from '@nextcloud/sharing/public';\nimport CircleSvg from '../../../../core/img/apps/circles.svg?raw';\nimport { generateAvatarSvg } from '../utils/AccountIcon.ts';\nimport './sharingStatusAction.scss';\n/**\n * Check if the node is external (federated)\n *\n * @param node - The node to check\n */\nfunction isExternal(node) {\n return node.attributes?.['is-federated'] ?? false;\n}\nexport const ACTION_SHARING_STATUS = 'sharing-status';\nexport const action = {\n id: ACTION_SHARING_STATUS,\n displayName({ nodes }) {\n const node = nodes[0];\n const shareTypes = Object.values(node?.attributes?.['share-types'] || {}).flat();\n if (shareTypes.length > 0\n || (node.owner !== getCurrentUser()?.uid || isExternal(node))) {\n return t('files_sharing', 'Shared');\n }\n return '';\n },\n title({ nodes }) {\n const node = nodes[0];\n if (node.owner && (node.owner !== getCurrentUser()?.uid || isExternal(node))) {\n const ownerDisplayName = node?.attributes?.['owner-display-name'];\n return t('files_sharing', 'Shared by {ownerDisplayName}', { ownerDisplayName });\n }\n const shareTypes = Object.values(node?.attributes?.['share-types'] || {}).flat();\n if (shareTypes.length > 1) {\n return t('files_sharing', 'Shared multiple times with different people');\n }\n const sharees = node.attributes.sharees?.sharee;\n if (!sharees) {\n // No sharees so just show the default message to create a new share\n return t('files_sharing', 'Sharing options');\n }\n const sharee = [sharees].flat()[0]; // the property is sometimes weirdly normalized, so we need to compensate\n switch (sharee?.type) {\n case ShareType.User:\n return t('files_sharing', 'Shared with {user}', { user: sharee['display-name'] });\n case ShareType.Group:\n return t('files_sharing', 'Shared with group {group}', { group: sharee['display-name'] ?? sharee.id });\n default:\n return t('files_sharing', 'Shared with others');\n }\n },\n iconSvgInline({ nodes }) {\n const node = nodes[0];\n const shareTypes = Object.values(node?.attributes?.['share-types'] || {}).flat();\n // Mixed share types\n if (Array.isArray(node.attributes?.['share-types']) && node.attributes?.['share-types'].length > 1) {\n return AccountPlusSvg;\n }\n // Link shares\n if (shareTypes.includes(ShareType.Link)\n || shareTypes.includes(ShareType.Email)) {\n return LinkSvg;\n }\n // Group shares\n if (shareTypes.includes(ShareType.Group)\n || shareTypes.includes(ShareType.RemoteGroup)) {\n return AccountGroupSvg;\n }\n // Circle shares\n if (shareTypes.includes(ShareType.Team)) {\n return CircleSvg;\n }\n if (node.owner && (node.owner !== getCurrentUser()?.uid || isExternal(node))) {\n return generateAvatarSvg(node.owner, isExternal(node));\n }\n return AccountPlusSvg;\n },\n enabled({ nodes }) {\n if (nodes.length !== 1) {\n return false;\n }\n // Do not leak information about users to public shares\n if (isPublicShare()) {\n return false;\n }\n const node = nodes[0];\n const shareTypes = node.attributes?.['share-types'];\n const isMixed = Array.isArray(shareTypes) && shareTypes.length > 0;\n // If the node is shared multiple times with\n // different share types to the current user\n if (isMixed) {\n return true;\n }\n // If the node is shared by someone else\n if (node.owner !== getCurrentUser()?.uid || isExternal(node)) {\n return true;\n }\n // You need share permissions to share this file\n // and read permissions to see the sidebar\n return (node.permissions & Permission.SHARE) !== 0\n && (node.permissions & Permission.READ) !== 0;\n },\n async exec({ nodes }) {\n // You need read permissions to see the sidebar\n const node = nodes[0];\n if ((node.permissions & Permission.READ) !== 0) {\n const sidebar = getSidebar();\n sidebar.open(node, 'sharing');\n return null;\n }\n // Should not happen as the enabled check should prevent this\n // leaving it here for safety or in case someone calls this action directly\n showError(t('files_sharing', 'You do not have enough permissions to share this file.'));\n return null;\n },\n inline: () => true,\n};\n","/*!\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { generateUrl } from '@nextcloud/router';\n/**\n *\n */\nfunction isDarkMode() {\n return window?.matchMedia?.('(prefers-color-scheme: dark)')?.matches === true\n || document.querySelector('[data-themes*=dark]') !== null;\n}\n/**\n *\n * @param userId\n * @param isGuest\n */\nexport function generateAvatarSvg(userId, isGuest = false) {\n // normal avatar url: /avatar/{userId}/32?guestFallback=true\n // dark avatar url: /avatar/{userId}/32/dark?guestFallback=true\n // guest avatar url: /avatar/guest/{userId}/32\n // guest dark avatar url: /avatar/guest/{userId}/32/dark\n const basePath = isGuest ? `/avatar/guest/${userId}` : `/avatar/${userId}`;\n const darkModePath = isDarkMode() ? '/dark' : '';\n const guestFallback = isGuest ? '' : '?guestFallback=true';\n const url = `${basePath}/32${darkModePath}${guestFallback}`;\n const avatarUrl = generateUrl(url, { userId });\n return `\n\t\t\n\t`;\n}\n","/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nconst rawUid = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user')\nconst displayName = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user-displayname')\n\nexport const currentUser = rawUid !== undefined ? rawUid : false\n\n/**\n *\n */\nexport function getCurrentUser() {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-6.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileListFilterAccount.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-6.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileListFilterAccount.vue?vue&type=script&setup=true&lang=ts\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{class:_vm.$style.fileListFilterAccount},[(_setup.availableAccounts.length > 1)?_c(_setup.NcTextField,{attrs:{\"type\":\"search\",\"label\":_setup.t('files_sharing', 'Filter accounts')},model:{value:(_setup.accountFilter),callback:function ($$v) {_setup.accountFilter=$$v},expression:\"accountFilter\"}}):_vm._e(),_vm._v(\" \"),_vm._l((_setup.shownAccounts),function(account){return _c(_setup.NcButton,{key:account.id,attrs:{\"alignment\":\"start\",\"pressed\":_setup.selectedAccounts.includes(account),\"variant\":\"tertiary\",\"wide\":\"\"},on:{\"update:pressed\":function($event){return _setup.toggleAccount(account.id, $event)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcAvatar,_vm._b({class:_vm.$style.fileListFilterAccount__avatar,attrs:{\"size\":24,\"disable-menu\":\"\",\"hide-status\":\"\"}},'NcAvatar',account,false))]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\"+_vm._s(account.displayName)+\"\\n\\t\\t\"),(account.id === _setup.currentUserId)?_c('span',{class:_vm.$style.fileListFilterAccount__currentUser},[_vm._v(\"\\n\\t\\t\\t(\"+_vm._s(_setup.t('files', 'you'))+\")\\n\\t\\t\")]):_vm._e()])})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileListFilterAccount.vue?vue&type=style&index=0&id=ec2dd1f8&prod&module=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileListFilterAccount.vue?vue&type=style&index=0&id=ec2dd1f8&prod&module=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileListFilterAccount.vue?vue&type=template&id=ec2dd1f8\"\nimport script from \"./FileListFilterAccount.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./FileListFilterAccount.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./FileListFilterAccount.vue?vue&type=style&index=0&id=ec2dd1f8&prod&module=true&lang=css\"\n\n\n\n\nfunction injectStyles (context) {\n \n this[\"$style\"] = (style0.locals || style0)\n\n}\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n injectStyles,\n null,\n null\n \n)\n\nexport default component.exports","/*!\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport svgAccountMultipleOutline from '@mdi/svg/svg/account-multiple-outline.svg?raw';\nimport { subscribe } from '@nextcloud/event-bus';\nimport { FileListFilter, registerFileListFilter } from '@nextcloud/files';\nimport { t } from '@nextcloud/l10n';\nimport { ShareType } from '@nextcloud/sharing';\nimport { isPublicShare } from '@nextcloud/sharing/public';\nimport wrap from '@vue/web-component-wrapper';\nimport Vue from 'vue';\nimport FileListFilterAccount from '../components/FileListFilterAccount.vue';\n// once files_sharing is migrated to the new frontend use the import instead:\n// import { TRASHBIN_VIEW_ID } from '../../../files_trashbin/src/files_views/trashbinView.ts'\nconst TRASHBIN_VIEW_ID = 'trashbin';\nconst tagName = 'files_sharing-file-list-filter-account';\n/**\n * File list filter to filter by owner / sharee\n */\nclass AccountFilter extends FileListFilter {\n #availableAccounts;\n #filterAccounts;\n displayName = t('files_sharing', 'People');\n iconSvgInline = svgAccountMultipleOutline;\n tagName = tagName;\n constructor() {\n super('files_sharing:account', 100);\n this.#availableAccounts = [];\n subscribe('files:list:updated', ({ contents }) => {\n this.updateAvailableAccounts(contents);\n });\n }\n get availableAccounts() {\n return this.#availableAccounts;\n }\n get filterAccounts() {\n return this.#filterAccounts;\n }\n filter(nodes) {\n if (!this.#filterAccounts || this.#filterAccounts.length === 0) {\n return nodes;\n }\n const userIds = this.#filterAccounts.map(({ uid }) => uid);\n // Filter if the owner of the node is in the list of filtered accounts\n return nodes.filter((node) => {\n if (window.OCP.Files.Router.params.view === TRASHBIN_VIEW_ID) {\n const deletedBy = node.attributes?.['trashbin-deleted-by-id'];\n if (deletedBy && userIds.includes(deletedBy)) {\n return true;\n }\n return false;\n }\n // if the owner matches\n if (node.owner && userIds.includes(node.owner)) {\n return true;\n }\n // Or any of the sharees (if only one share this will be an object, otherwise an array. So using `.flat()` to make it always an array)\n const sharees = node.attributes.sharees?.sharee;\n if (sharees && [sharees].flat().some(({ id }) => userIds.includes(id))) {\n return true;\n }\n // If the node provides no information lets keep it\n if (!node.owner && !sharees) {\n return true;\n }\n // Not a valid node for the current filter\n return false;\n });\n }\n reset() {\n this.dispatchEvent(new CustomEvent('reset'));\n }\n /**\n * Set accounts that should be filtered.\n *\n * @param accounts - Account to filter or undefined if inactive.\n */\n setAccounts(accounts) {\n this.#filterAccounts = accounts;\n let chips = [];\n if (this.#filterAccounts && this.#filterAccounts.length > 0) {\n chips = this.#filterAccounts.map(({ displayName, uid }) => ({\n text: displayName,\n user: uid,\n onclick: () => this.dispatchEvent(new CustomEvent('deselect', { detail: uid })),\n }));\n }\n this.updateChips(chips);\n this.filterUpdated();\n }\n /**\n * Update the accounts owning nodes or have nodes shared to them.\n *\n * @param nodes - The current content of the file list.\n */\n updateAvailableAccounts(nodes) {\n const available = new Map();\n for (const node of nodes) {\n const owner = node.owner;\n if (owner && !available.has(owner)) {\n available.set(owner, {\n uid: owner,\n displayName: node.attributes['owner-display-name'] ?? node.owner,\n });\n }\n // ensure sharees is an array (if only one share then it is just an object)\n const sharees = [node.attributes.sharees?.sharee].flat().filter(Boolean);\n for (const sharee of [sharees].flat()) {\n // Skip link shares and other without user\n if (sharee.id === '') {\n continue;\n }\n if (sharee.type !== ShareType.User && sharee.type !== ShareType.Remote) {\n continue;\n }\n // Add if not already added\n if (!available.has(sharee.id)) {\n available.set(sharee.id, {\n uid: sharee.id,\n displayName: sharee['display-name'],\n });\n }\n }\n // lets also handle trashbin\n const deletedBy = node.attributes?.['trashbin-deleted-by-id'];\n if (deletedBy) {\n available.set(deletedBy, {\n uid: deletedBy,\n displayName: node.attributes?.['trashbin-deleted-by-display-name'] || deletedBy,\n });\n }\n }\n this.#availableAccounts = [...available.values()];\n this.dispatchEvent(new CustomEvent('accounts-updated'));\n }\n}\n/**\n * Register the file list filter by owner or sharees\n */\nexport function registerAccountFilter() {\n if (isPublicShare()) {\n // We do not show the filter on public pages - it makes no sense\n return;\n }\n const WrappedComponent = wrap(Vue, FileListFilterAccount);\n // In Vue 2, wrap doesn't support disabling shadow :(\n // Disable with a hack\n Object.defineProperty(WrappedComponent.prototype, 'attachShadow', {\n value() {\n return this;\n },\n });\n Object.defineProperty(WrappedComponent.prototype, 'shadowRoot', {\n get() {\n return this;\n },\n });\n customElements.define(tagName, WrappedComponent);\n registerFileListFilter(new AccountFilter());\n}\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport FileUploadSvg from '@mdi/svg/svg/file-upload-outline.svg?raw';\nimport { t } from '@nextcloud/l10n';\nimport { isPublicShare } from '@nextcloud/sharing/public';\nimport { spawnDialog } from '@nextcloud/vue/functions/dialog';\nimport { defineAsyncComponent } from 'vue';\nimport Config from '../services/ConfigService.ts';\nconst sharingConfig = new Config();\nconst NewFileRequestDialogVue = defineAsyncComponent(() => import('../components/NewFileRequestDialog.vue'));\nexport const EntryId = 'file-request';\nexport const entry = {\n id: EntryId,\n displayName: t('files_sharing', 'Create file request'),\n iconSvgInline: FileUploadSvg,\n order: 10,\n enabled() {\n // not on public shares\n if (isPublicShare()) {\n return false;\n }\n if (!sharingConfig.isPublicUploadEnabled) {\n return false;\n }\n // We will check for the folder permission on the dialog\n return sharingConfig.isPublicShareAllowed;\n },\n async handler(context, content) {\n spawnDialog(NewFileRequestDialogVue, {\n context,\n content,\n });\n },\n};\n","/*!\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { addNewFileMenuEntry, registerFileAction } from '@nextcloud/files';\nimport { registerDavProperty } from '@nextcloud/files/dav';\nimport { action as acceptShareAction } from './files_actions/acceptShareAction.ts';\nimport { action as openInFilesAction } from './files_actions/openInFilesAction.ts';\nimport { action as rejectShareAction } from './files_actions/rejectShareAction.ts';\nimport { action as restoreShareAction } from './files_actions/restoreShareAction.ts';\nimport { action as sharingStatusAction } from './files_actions/sharingStatusAction.ts';\nimport { registerAccountFilter } from './files_filters/AccountFilter.ts';\nimport registerNoteToRecipient from './files_headers/noteToRecipient.ts';\nimport { entry as newFileRequest } from './files_newMenu/newFileRequest.ts';\nimport registerSharingViews from './files_views/shares.ts';\nregisterSharingViews();\naddNewFileMenuEntry(newFileRequest);\nregisterDavProperty('nc:note', { nc: 'http://nextcloud.org/ns' });\nregisterDavProperty('nc:sharees', { nc: 'http://nextcloud.org/ns' });\nregisterDavProperty('nc:hide-download', { nc: 'http://nextcloud.org/ns' });\nregisterDavProperty('nc:share-attributes', { nc: 'http://nextcloud.org/ns' });\nregisterDavProperty('oc:share-types', { oc: 'http://owncloud.org/ns' });\nregisterDavProperty('ocs:share-permissions', { ocs: 'http://open-collaboration-services.org/ns' });\nregisterFileAction(acceptShareAction);\nregisterFileAction(openInFilesAction);\nregisterFileAction(rejectShareAction);\nregisterFileAction(restoreShareAction);\nregisterFileAction(sharingStatusAction);\nregisterAccountFilter();\n// Add \"note to recipient\" message\nregisterNoteToRecipient();\n","/*!\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { registerFileListHeader } from '@nextcloud/files';\nimport Vue from 'vue';\n/**\n * Register the \"note to recipient\" as a files list header\n */\nexport default function registerNoteToRecipient() {\n let FilesHeaderNoteToRecipient;\n let instance;\n registerFileListHeader({\n id: 'note-to-recipient',\n order: 0,\n // Always if there is a note\n enabled: (folder) => Boolean(folder.attributes.note),\n // Update the root folder if needed\n updated: (folder) => {\n if (instance) {\n instance.updateFolder(folder);\n }\n },\n // render simply spawns the component\n render: async (el, folder) => {\n if (FilesHeaderNoteToRecipient === undefined) {\n const { default: component } = await import('../views/FilesHeaderNoteToRecipient.vue');\n FilesHeaderNoteToRecipient = Vue.extend(component);\n }\n instance = new FilesHeaderNoteToRecipient().$mount(el);\n instance.updateFolder(folder);\n },\n });\n}\n","/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { getCapabilities } from '@nextcloud/capabilities';\nimport { loadState } from '@nextcloud/initial-state';\nexport default class Config {\n _capabilities;\n constructor() {\n this._capabilities = getCapabilities();\n }\n /**\n * Get default share permissions, if any\n */\n get defaultPermissions() {\n return this._capabilities.files_sharing?.default_permissions;\n }\n /**\n * Should SHARE permission be excluded from \"Allow editing\" bundled permissions\n */\n get excludeReshareFromEdit() {\n return this._capabilities.files_sharing?.exclude_reshare_from_edit === true;\n }\n /**\n * Is public upload allowed on link shares ?\n * This covers File request and Full upload/edit option.\n */\n get isPublicUploadEnabled() {\n return this._capabilities.files_sharing?.public?.upload === true;\n }\n /**\n * Get the federated sharing documentation link\n */\n get federatedShareDocLink() {\n return window.OC.appConfig.core.federatedCloudShareDoc;\n }\n /**\n * Get the default link share expiration date\n */\n get defaultExpirationDate() {\n if (this.isDefaultExpireDateEnabled && this.defaultExpireDate !== null) {\n return new Date(new Date().setDate(new Date().getDate() + this.defaultExpireDate));\n }\n return null;\n }\n /**\n * Get the default internal expiration date\n */\n get defaultInternalExpirationDate() {\n if (this.isDefaultInternalExpireDateEnabled && this.defaultInternalExpireDate !== null) {\n return new Date(new Date().setDate(new Date().getDate() + this.defaultInternalExpireDate));\n }\n return null;\n }\n /**\n * Get the default remote expiration date\n */\n get defaultRemoteExpirationDateString() {\n if (this.isDefaultRemoteExpireDateEnabled && this.defaultRemoteExpireDate !== null) {\n return new Date(new Date().setDate(new Date().getDate() + this.defaultRemoteExpireDate));\n }\n return null;\n }\n /**\n * Are link shares password-enforced ?\n */\n get enforcePasswordForPublicLink() {\n return window.OC.appConfig.core.enforcePasswordForPublicLink === true;\n }\n /**\n * Is password asked by default on link shares ?\n */\n get enableLinkPasswordByDefault() {\n return window.OC.appConfig.core.enableLinkPasswordByDefault === true;\n }\n /**\n * Is link shares expiration enforced ?\n */\n get isDefaultExpireDateEnforced() {\n return window.OC.appConfig.core.defaultExpireDateEnforced === true;\n }\n /**\n * Is there a default expiration date for new link shares ?\n */\n get isDefaultExpireDateEnabled() {\n return window.OC.appConfig.core.defaultExpireDateEnabled === true;\n }\n /**\n * Is internal shares expiration enforced ?\n */\n get isDefaultInternalExpireDateEnforced() {\n return window.OC.appConfig.core.defaultInternalExpireDateEnforced === true;\n }\n /**\n * Is there a default expiration date for new internal shares ?\n */\n get isDefaultInternalExpireDateEnabled() {\n return window.OC.appConfig.core.defaultInternalExpireDateEnabled === true;\n }\n /**\n * Is remote shares expiration enforced ?\n */\n get isDefaultRemoteExpireDateEnforced() {\n return window.OC.appConfig.core.defaultRemoteExpireDateEnforced === true;\n }\n /**\n * Is there a default expiration date for new remote shares ?\n */\n get isDefaultRemoteExpireDateEnabled() {\n return window.OC.appConfig.core.defaultRemoteExpireDateEnabled === true;\n }\n /**\n * Are users on this server allowed to send shares to other servers ?\n */\n get isRemoteShareAllowed() {\n return window.OC.appConfig.core.remoteShareAllowed === true;\n }\n /**\n * Is federation enabled ?\n */\n get isFederationEnabled() {\n return this._capabilities?.files_sharing?.federation?.outgoing === true;\n }\n /**\n * Is public sharing enabled ?\n */\n get isPublicShareAllowed() {\n return this._capabilities?.files_sharing?.public?.enabled === true;\n }\n /**\n * Is sharing my mail (link share) enabled ?\n */\n get isMailShareAllowed() {\n return this._capabilities?.files_sharing?.sharebymail?.enabled === true\n && this.isPublicShareAllowed === true;\n }\n /**\n * Get the default days to link shares expiration\n */\n get defaultExpireDate() {\n return window.OC.appConfig.core.defaultExpireDate;\n }\n /**\n * Get the default days to internal shares expiration\n */\n get defaultInternalExpireDate() {\n return window.OC.appConfig.core.defaultInternalExpireDate;\n }\n /**\n * Get the default days to remote shares expiration\n */\n get defaultRemoteExpireDate() {\n return window.OC.appConfig.core.defaultRemoteExpireDate;\n }\n /**\n * Is resharing allowed ?\n */\n get isResharingAllowed() {\n return window.OC.appConfig.core.resharingAllowed === true;\n }\n /**\n * Is password enforced for mail shares ?\n */\n get isPasswordForMailSharesRequired() {\n return this._capabilities.files_sharing?.sharebymail?.password?.enforced === true;\n }\n /**\n * Always show the email or userid unique sharee label if enabled by the admin\n */\n get shouldAlwaysShowUnique() {\n return this._capabilities.files_sharing?.sharee?.always_show_unique === true;\n }\n /**\n * Is sharing with groups allowed ?\n */\n get allowGroupSharing() {\n return window.OC.appConfig.core.allowGroupSharing === true;\n }\n /**\n * Get the maximum results of a share search\n */\n get maxAutocompleteResults() {\n return parseInt(window.OC.config['sharing.maxAutocompleteResults'], 10) || 25;\n }\n /**\n * Get the minimal string length\n * to initiate a share search\n */\n get minSearchStringLength() {\n return parseInt(window.OC.config['sharing.minSearchStringLength'], 10) || 0;\n }\n /**\n * Get the password policy configuration\n */\n get passwordPolicy() {\n return this._capabilities?.password_policy || {};\n }\n /**\n * Returns true if custom tokens are allowed\n */\n get allowCustomTokens() {\n return this._capabilities?.files_sharing?.public?.custom_tokens;\n }\n /**\n * Show federated shares as internal shares\n *\n * @return\n */\n get showFederatedSharesAsInternal() {\n return loadState('files_sharing', 'showFederatedSharesAsInternal', false);\n }\n /**\n * Show federated shares to trusted servers as internal shares\n *\n * @return\n */\n get showFederatedSharesToTrustedServersAsInternal() {\n return loadState('files_sharing', 'showFederatedSharesToTrustedServersAsInternal', false);\n }\n /**\n * Show the external share ui\n */\n get showExternalSharing() {\n return loadState('files_sharing', 'showExternalSharing', true);\n }\n}\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n// TODO: Fix this instead of disabling ESLint!!!\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getCurrentUser } from '@nextcloud/auth';\nimport axios from '@nextcloud/axios';\nimport { File, Folder, Permission } from '@nextcloud/files';\nimport { getRemoteURL, getRootPath } from '@nextcloud/files/dav';\nimport { generateOcsUrl } from '@nextcloud/router';\nimport logger from './logger.ts';\nconst headers = {\n 'Content-Type': 'application/json',\n};\n/**\n *\n * @param ocsEntry\n * @param unmounted whether the share is not mounted into the filesystem (pending or deleted)\n */\nasync function ocsEntryToNode(ocsEntry, unmounted = false) {\n try {\n // Federated share handling\n if (ocsEntry?.remote_id !== undefined) {\n if (!ocsEntry.mimetype) {\n const mime = (await import('mime')).default;\n // This won't catch files without an extension, but this is the best we can do\n ocsEntry.mimetype = mime.getType(ocsEntry.name);\n }\n const type = ocsEntry.type === 'dir' ? 'folder' : ocsEntry.type;\n ocsEntry.item_type = type || (ocsEntry.mimetype ? 'file' : 'folder');\n // different naming for remote shares\n ocsEntry.item_mtime = ocsEntry.mtime;\n ocsEntry.file_target = ocsEntry.file_target || ocsEntry.mountpoint;\n if (ocsEntry.file_target.includes('TemporaryMountPointName')) {\n ocsEntry.file_target = ocsEntry.name;\n }\n // If the share is not accepted yet we don't know which permissions it will have\n if (!ocsEntry.accepted) {\n // Need to set permissions to NONE for federated shares\n ocsEntry.item_permissions = Permission.NONE;\n ocsEntry.permissions = Permission.NONE;\n }\n ocsEntry.uid_owner = ocsEntry.owner;\n // TODO: have the real display name stored somewhere\n ocsEntry.displayname_owner = ocsEntry.owner;\n }\n // Pending and deleted shares are not mounted into the user's filesystem,\n // so no file operation can act on them until they are accepted or restored.\n if (unmounted) {\n ocsEntry.item_permissions = Permission.NONE;\n ocsEntry.permissions = Permission.NONE;\n }\n const isFolder = ocsEntry?.item_type === 'folder';\n const hasPreview = ocsEntry?.has_preview === true;\n const Node = isFolder ? Folder : File;\n // If this is an external share that is not yet accepted,\n // we don't have an id. We can fallback to the row id temporarily\n // local shares (this server) use `file_source`, but remote shares (federated) use `file_id`\n const fileid = ocsEntry.file_source || ocsEntry.file_id || ocsEntry.id;\n // Generate path and strip double slashes\n const path = ocsEntry.path || ocsEntry.file_target || ocsEntry.name;\n const source = `${getRemoteURL()}${getRootPath()}/${path.replace(/^\\/+/, '')}`;\n let mtime = ocsEntry.item_mtime ? new Date((ocsEntry.item_mtime) * 1000) : undefined;\n // Prefer share time if more recent than item mtime\n if (ocsEntry?.stime > (ocsEntry?.item_mtime || 0)) {\n mtime = new Date((ocsEntry.stime) * 1000);\n }\n let sharees;\n if ('share_with' in ocsEntry) {\n sharees = {\n sharee: {\n id: ocsEntry.share_with,\n 'display-name': ocsEntry.share_with_displayname || ocsEntry.share_with,\n type: ocsEntry.share_type,\n },\n };\n }\n return new Node({\n id: fileid,\n source,\n owner: ocsEntry?.uid_owner,\n mime: ocsEntry?.mimetype || 'application/octet-stream',\n mtime,\n size: ocsEntry?.item_size ?? undefined,\n permissions: ocsEntry?.item_permissions || ocsEntry?.permissions,\n root: getRootPath(),\n attributes: {\n ...ocsEntry,\n // 'id' is a forbidden property name\n 'share-id': ocsEntry.id,\n 'has-preview': hasPreview,\n 'hide-download': ocsEntry?.hide_download === 1,\n // Also check the sharingStatusAction.ts code\n 'owner-id': ocsEntry?.uid_owner,\n 'owner-display-name': ocsEntry?.displayname_owner,\n 'share-types': ocsEntry?.share_type,\n 'share-attributes': ocsEntry?.attributes || '[]',\n sharees,\n favorite: ocsEntry?.tags?.includes(window.OC.TAG_FAVORITE) ? 1 : 0,\n },\n });\n }\n catch (error) {\n logger.error('Error while parsing OCS entry', { error });\n return null;\n }\n}\n/**\n *\n * @param shareWithMe\n */\nfunction getShares(shareWithMe = false) {\n const url = generateOcsUrl('apps/files_sharing/api/v1/shares');\n return axios.get(url, {\n headers,\n params: {\n shared_with_me: shareWithMe,\n include_tags: true,\n },\n });\n}\n/**\n *\n */\nfunction getSharedWithYou() {\n return getShares(true);\n}\n/**\n *\n */\nfunction getSharedWithOthers() {\n return getShares();\n}\n/**\n *\n */\nfunction getRemoteShares() {\n const url = generateOcsUrl('apps/files_sharing/api/v1/remote_shares');\n return axios.get(url, {\n headers,\n params: {\n include_tags: true,\n },\n });\n}\n/**\n *\n */\nfunction getPendingShares() {\n const url = generateOcsUrl('apps/files_sharing/api/v1/shares/pending');\n return axios.get(url, {\n headers,\n params: {\n include_tags: true,\n },\n });\n}\n/**\n *\n */\nfunction getRemotePendingShares() {\n const url = generateOcsUrl('apps/files_sharing/api/v1/remote_shares/pending');\n return axios.get(url, {\n headers,\n params: {\n include_tags: true,\n },\n });\n}\n/**\n *\n */\nfunction getDeletedShares() {\n const url = generateOcsUrl('apps/files_sharing/api/v1/deletedshares');\n return axios.get(url, {\n headers,\n params: {\n include_tags: true,\n },\n });\n}\n/**\n * Check if a file request is enabled\n *\n * @param attributes the share attributes json-encoded array\n */\nexport function isFileRequest(attributes = '[]') {\n const isFileRequest = (attribute) => {\n return attribute.scope === 'fileRequest' && attribute.key === 'enabled' && attribute.value === true;\n };\n try {\n const attributesArray = JSON.parse(attributes);\n return attributesArray.some(isFileRequest);\n }\n catch (error) {\n logger.error('Error while parsing share attributes', { error });\n return false;\n }\n}\n/**\n * Group an array of objects (here Nodes) by a key\n * and return an array of arrays of them.\n *\n * @param nodes Nodes to group\n * @param key The attribute to group by\n */\nfunction groupBy(nodes, key) {\n return Object.values(nodes.reduce(function (acc, curr) {\n (acc[curr[key]] = acc[curr[key]] || []).push(curr);\n return acc;\n }, {}));\n}\n/**\n *\n * @param sharedWithYou\n * @param sharedWithOthers\n * @param pendingShares\n * @param deletedshares\n * @param filterTypes\n */\nexport async function getContents(sharedWithYou = true, sharedWithOthers = true, pendingShares = false, deletedshares = false, filterTypes = []) {\n const requests = [];\n if (sharedWithYou) {\n requests.push({ promise: getSharedWithYou(), unmounted: false }, { promise: getRemoteShares(), unmounted: false });\n }\n if (sharedWithOthers) {\n requests.push({ promise: getSharedWithOthers(), unmounted: false });\n }\n if (pendingShares) {\n requests.push({ promise: getPendingShares(), unmounted: true }, { promise: getRemotePendingShares(), unmounted: true });\n }\n if (deletedshares) {\n requests.push({ promise: getDeletedShares(), unmounted: true });\n }\n const responses = await Promise.all(requests.map(({ promise }) => promise));\n const data = responses.flatMap((response, index) => response.data.ocs.data\n .map((entry) => ({ entry, unmounted: requests[index].unmounted })));\n let contents = (await Promise.all(data.map(({ entry, unmounted }) => ocsEntryToNode(entry, unmounted))))\n .filter((node) => node !== null);\n if (filterTypes.length > 0) {\n contents = contents.filter((node) => filterTypes.includes(node.attributes?.share_type));\n }\n // Merge duplicate shares and group their attributes\n // Also check the sharingStatusAction.ts code\n contents = groupBy(contents, 'source').map((nodes) => {\n const node = nodes[0];\n node.attributes['share-types'] = nodes.map((node) => node.attributes['share-types']);\n return node;\n });\n return {\n folder: new Folder({\n id: 0,\n source: `${getRemoteURL()}${getRootPath()}`,\n owner: getCurrentUser()?.uid || null,\n root: getRootPath(),\n }),\n contents,\n };\n}\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { getLoggerBuilder } from '@nextcloud/logger';\nexport default getLoggerBuilder()\n .setApp('files_sharing')\n .detectUser()\n .build();\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.action-items>.files-list__row-action-sharing-status{padding-inline:0 !important}.action-items>.files-list__row-action-sharing-status .button-vue__wrapper{flex-direction:row-reverse;gap:var(--default-grid-baseline)}svg.sharing-status__avatar{height:var(--button-inner-size, 32px) !important;width:var(--button-inner-size, 32px) !important;max-height:var(--button-inner-size, 32px) !important;max-width:var(--button-inner-size, 32px) !important;border-radius:var(--button-inner-size, 32px);overflow:hidden}.files-list__row-action-sharing-status .button-vue__text{color:var(--color-primary-element)}.files-list__row-action-sharing-status .button-vue__icon{color:var(--color-primary-element)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/files_actions/sharingStatusAction.scss\"],\"names\":[],\"mappings\":\"AAMA,qDAEC,2BAAA,CAEA,0EAEC,0BAAA,CACA,gCAAA,CAIF,2BACC,gDAAA,CACA,+CAAA,CACA,oDAAA,CACA,mDAAA,CACA,4CAAA,CACA,eAAA,CAIA,yDACC,kCAAA,CAED,yDACC,kCAAA\",\"sourcesContent\":[\"/*\\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\\n * SPDX-License-Identifier: AGPL-3.0-or-later\\n */\\n\\n // Only when rendered inline, when not enough space, this is put in the menu\\n.action-items > .files-list__row-action-sharing-status {\\n\\t// align icons with text-less inline actions\\n\\tpadding-inline: 0 !important;\\n\\n\\t.button-vue__wrapper {\\n\\t\\t// put icon at the end of the button\\n\\t\\tflex-direction: row-reverse;\\n\\t\\tgap: var(--default-grid-baseline);\\n\\t}\\n}\\n\\nsvg.sharing-status__avatar {\\n\\theight: var(--button-inner-size, 32px) !important;\\n\\twidth: var(--button-inner-size, 32px) !important;\\n\\tmax-height: var(--button-inner-size, 32px) !important;\\n\\tmax-width: var(--button-inner-size, 32px) !important;\\n\\tborder-radius: var(--button-inner-size, 32px);\\n\\toverflow: hidden;\\n}\\n\\n.files-list__row-action-sharing-status {\\n\\t.button-vue__text {\\n\\t\\tcolor: var(--color-primary-element);\\n\\t}\\n\\t.button-vue__icon {\\n\\t\\tcolor: var(--color-primary-element);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n._fileListFilterAccount_ZW91g {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-grid-baseline);\n}\n._fileListFilterAccount__avatar_V0YuN {\n\t/* 24px is the avatar size */\n\tmargin: calc((var(--default-clickable-area) - 24px) / 2);\n}\n._fileListFilterAccount__currentUser_PqQfx {\n\tfont-weight: normal !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/FileListFilterAccount.vue\"],\"names\":[],\"mappings\":\";AA4JA;CACA,aAAA;CACA,sBAAA;CACA,iCAAA;AACA;AAEA;CACA,4BAAA;CACA,wDAAA;AACA;AAEA;CACA,8BAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"fileListFilterAccount\": `_fileListFilterAccount_ZW91g`,\n\t\"fileListFilterAccount__avatar\": `_fileListFilterAccount__avatar_V0YuN`,\n\t\"fileListFilterAccount__currentUser\": `_fileListFilterAccount__currentUser_PqQfx`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { getCurrentUser, onRequestTokenUpdate, getRequestToken } from \"@nextcloud/auth\";\nimport { generateRemoteUrl } from \"@nextcloud/router\";\nimport { isPublicShare, getSharingToken } from \"@nextcloud/sharing/public\";\nimport { createClient, getPatcher } from \"webdav\";\nimport { P as Permission, s as scopedGlobals, l as logger, c as NodeStatus, a as File, b as Folder } from \"./chunks/folder-29HuacU_.mjs\";\nimport \"@nextcloud/paths\";\n/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction parsePermissions(permString = \"\") {\n let permissions = Permission.NONE;\n if (!permString) {\n return permissions;\n }\n if (permString.includes(\"G\")) {\n permissions |= Permission.READ;\n }\n if (permString.includes(\"W\")) {\n permissions |= Permission.WRITE;\n }\n if (permString.includes(\"CK\")) {\n permissions |= Permission.CREATE;\n }\n if (permString.includes(\"NV\")) {\n permissions |= Permission.UPDATE;\n }\n if (permString.includes(\"D\")) {\n permissions |= Permission.DELETE;\n }\n if (permString.includes(\"R\")) {\n permissions |= Permission.SHARE;\n }\n return permissions;\n}\nconst defaultDavProperties = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:creationdate\",\n \"d:displayname\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:size\"\n];\nconst defaultDavNamespaces = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n};\nfunction registerDavProperty(prop, namespace = { nc: \"http://nextcloud.org/ns\" }) {\n scopedGlobals.davNamespaces ??= { ...defaultDavNamespaces };\n scopedGlobals.davProperties ??= [...defaultDavProperties];\n const namespaces = { ...scopedGlobals.davNamespaces, ...namespace };\n if (scopedGlobals.davProperties.find((search) => search === prop)) {\n logger.warn(`${prop} already registered`, { prop });\n return false;\n }\n if (prop.startsWith(\"<\") || prop.split(\":\").length !== 2) {\n logger.error(`${prop} is not valid. See example: 'oc:fileid'`, { prop });\n return false;\n }\n const ns = prop.split(\":\")[0];\n if (!namespaces[ns]) {\n logger.error(`${prop} namespace unknown`, { prop, namespaces });\n return false;\n }\n scopedGlobals.davProperties.push(prop);\n scopedGlobals.davNamespaces = namespaces;\n return true;\n}\nfunction getDavProperties() {\n scopedGlobals.davProperties ??= [...defaultDavProperties];\n return scopedGlobals.davProperties.map((prop) => `<${prop} />`).join(\" \");\n}\nfunction getDavNameSpaces() {\n scopedGlobals.davNamespaces ??= { ...defaultDavNamespaces };\n return Object.keys(scopedGlobals.davNamespaces).map((ns) => `xmlns:${ns}=\"${scopedGlobals.davNamespaces?.[ns]}\"`).join(\" \");\n}\nfunction getDefaultPropfind() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t`;\n}\nfunction getFavoritesReport() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\t\n\t\t\t\t1\n\t\t\t\n\t\t`;\n}\nfunction getRecentSearch(lastModified) {\n return `\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t/files/${getCurrentUser()?.uid}/\n\t\t\t\tinfinity\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\thttpd/unix-directory\n\t\t\t\t\t\t\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\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t0\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${lastModified}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t100\n\t\t\t0\n\t\t\n\t\n`;\n}\nfunction getRootPath() {\n if (isPublicShare()) {\n return `/files/${getSharingToken()}`;\n }\n return `/files/${getCurrentUser()?.uid}`;\n}\nconst defaultRootPath = getRootPath();\nfunction getRemoteURL() {\n const url = generateRemoteUrl(\"dav\");\n if (isPublicShare()) {\n return url.replace(\"remote.php\", \"public.php\");\n }\n return url;\n}\nconst defaultRemoteURL = getRemoteURL();\nfunction getClient(remoteURL = defaultRemoteURL, headers = {}) {\n const client = createClient(remoteURL, { headers });\n function setHeaders(token) {\n client.setHeaders({\n ...headers,\n // Add this so the server knows it is an request from the browser\n \"X-Requested-With\": \"XMLHttpRequest\",\n // Inject user auth\n requesttoken: token ?? \"\"\n });\n }\n onRequestTokenUpdate(setHeaders);\n setHeaders(getRequestToken());\n const patcher = getPatcher();\n patcher.patch(\"fetch\", (url, options) => {\n const headers2 = options.headers;\n if (headers2?.method) {\n options.method = headers2.method;\n delete headers2.method;\n }\n return fetch(url, options);\n });\n return client;\n}\nasync function getFavoriteNodes(options = {}) {\n const client = options.client ?? getClient();\n const path = options.path ?? \"/\";\n const davRoot = options.davRoot ?? defaultRootPath;\n const contentsResponse = await client.getDirectoryContents(`${davRoot}${path}`, {\n signal: options.signal,\n details: true,\n data: getFavoritesReport(),\n headers: {\n // see getClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: true\n });\n return contentsResponse.data.filter((node) => node.filename !== path).map((result) => resultToNode(result, davRoot));\n}\nfunction resultToNode(node, filesRoot = defaultRootPath, remoteURL = defaultRemoteURL) {\n let userId = getCurrentUser()?.uid;\n if (isPublicShare()) {\n userId = userId ?? \"anonymous\";\n } else if (!userId) {\n throw new Error(\"No user id found\");\n }\n const props = node.props;\n const permissions = parsePermissions(props?.permissions);\n const owner = String(props?.[\"owner-id\"] || userId);\n const id = props.fileid || 0;\n const mtime = new Date(Date.parse(node.lastmod));\n const crtime = new Date(Date.parse(props.creationdate));\n const nodeData = {\n id,\n source: `${remoteURL}${node.filename}`,\n mtime: !isNaN(mtime.getTime()) && mtime.getTime() !== 0 ? mtime : void 0,\n crtime: !isNaN(crtime.getTime()) && crtime.getTime() !== 0 ? crtime : void 0,\n mime: node.mime || \"application/octet-stream\",\n // Manually cast to work around for https://github.com/perry-mitchell/webdav-client/pull/380\n displayname: props.displayname !== void 0 ? String(props.displayname) : void 0,\n size: props?.size || Number.parseInt(props.getcontentlength || \"0\"),\n // The fileid is set to -1 for failed requests\n status: id < 0 ? NodeStatus.FAILED : void 0,\n permissions,\n owner,\n root: filesRoot,\n attributes: {\n ...node,\n ...props,\n hasPreview: props?.[\"has-preview\"]\n }\n };\n delete nodeData.attributes?.props;\n return node.type === \"file\" ? new File(nodeData) : new Folder(nodeData);\n}\nexport {\n defaultDavNamespaces,\n defaultDavProperties,\n defaultRemoteURL,\n defaultRootPath,\n getClient,\n getDavNameSpaces,\n getDavProperties,\n getDefaultPropfind,\n getFavoriteNodes,\n getFavoritesReport,\n getRecentSearch,\n getRemoteURL,\n getRootPath,\n parsePermissions,\n registerDavProperty,\n resultToNode\n};\n//# sourceMappingURL=dav.mjs.map\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-\" + chunkId + \".js?v=\" + {\"853\":\"6833bedf1e8274b7e505\",\"857\":\"3d28157955f39376ab2c\",\"1598\":\"e7058ecea90cb8de7dab\",\"1604\":\"a9b2c11c7ea153e582fe\",\"1930\":\"bc33d78185f305a51840\",\"6505\":\"d9fda59cc4f5faf614df\",\"6597\":\"ed51e93335fe8b279e03\",\"7859\":\"40215e5f906f720b3174\",\"8582\":\"5436a03717a70af24780\",\"9150\":\"6df0bf97719b9e8b8cd0\"}[chunkId] + \"\";\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 5928;","var scriptUrl;\nif (globalThis.importScripts) scriptUrl = globalThis.location + \"\";\nvar document = globalThis.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = (typeof document !== 'undefined' && document.baseURI) || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t5928: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\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__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunknextcloud_ui_legacy\"] = globalThis[\"webpackChunknextcloud_ui_legacy\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(99770)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","sharesViewId","sharedWithYouViewId","sharedWithOthersViewId","sharingByLinksViewId","deletedSharesViewId","pendingSharesViewId","shares","Navigation","getNavigation","register","View","id","name","t","caption","emptyTitle","emptyCaption","icon","AccountPlusSvg","order","columns","getContents","parent","loadState","quota","AccountGroupSvg","LinkSvg","ShareType","Link","FileUploadSvg","Email","then","_ref","folder","contents","filter","node","isFileRequest","attributes","Object","getOwnPropertyDescriptor","writable","defineProperty","value","configurable","action","displayName","nodes","n","length","iconSvgInline","enabled","_ref2","view","exec","_ref3","isRemote","remote","url","generateOcsUrl","shareBase","axios","post","emit","execBatch","_ref4","Promise","all","map","this","inline","includes","isFolder","type","FileType","Folder","window","OCP","Files","Router","goToRoute","fileid","String","dir","path","dirname","openfile","undefined","default","DefaultType","HIDDEN","some","remote_id","share_type","RemoteGroup","accepted","delete","options","isExternal","styleTagTransform","styleTagTransform_default","setAttributes","setAttributesWithoutAttributes_default","insert","insertBySelector_default","bind","domAPI","styleDomAPI_default","insertStyleElement","insertStyleElement_default","injectStylesIntoStyleTag_default","sharingStatusAction","A","locals","values","flat","owner","getCurrentUser","uid","title","ownerDisplayName","sharees","sharee","User","user","Group","group","shareTypes","Array","isArray","Team","userId","isGuest","arguments","matchMedia","matches","document","querySelector","generateUrl","generateAvatarSvg","isPublicShare","permissions","Permission","SHARE","READ","_ref5","getSidebar","open","showError","rawUid","getElementsByTagName","getAttribute","currentUser","components_FileListFilterAccountvue_type_script_setup_true_lang_ts","_defineComponent","__name","props","setup","__props","currentUserId","accountFilter","ref","availableAccounts","selectedAccounts","watch","accounts","setAccounts","onMounted","setAvailableAccounts","filterAccounts","addEventListener","resetFilter","deselect","onUnmounted","removeEventListener","shownAccounts","computed","sort","sortAccounts","queryParts","toLocaleLowerCase","trim","split","account","every","part","a","b","localeCompare","event","accountId","detail","_ref6","CustomEvent","_ref7","__sfc","toggleAccount","selected","find","l10n_dist","NcAvatar","NcButton","NcTextField","FileListFilterAccountvue_type_style_index_0_id_ec2dd1f8_prod_module_true_lang_css_options","FileListFilterAccountvue_type_style_index_0_id_ec2dd1f8_prod_module_true_lang_css","components_FileListFilterAccountvue_type_style_index_0_id_ec2dd1f8_prod_module_true_lang_css","FileListFilterAccount","_vm","_c","_self","_setup","_setupProxy","class","$style","fileListFilterAccount","attrs","label","model","callback","$$v","expression","_e","_v","_l","key","alignment","pressed","variant","wide","on","$event","scopedSlots","_u","fn","_b","fileListFilterAccount__avatar","size","proxy","_s","fileListFilterAccount__currentUser","context","tagName","_availableAccounts","WeakMap","_filterAccounts","AccountFilter","FileListFilter","constructor","super","_classPrivateFieldInitSpec","_defineProperty","_classPrivateFieldSet","subscribe","updateAvailableAccounts","_classPrivateFieldGet","userIds","params","deletedBy","reset","dispatchEvent","chips","text","onclick","updateChips","filterUpdated","available","Map","has","set","Boolean","Remote","sharingConfig","Config","NewFileRequestDialogVue","defineAsyncComponent","__webpack_require__","e","entry","isPublicUploadEnabled","isPublicShareAllowed","handler","content","spawnDialog","registerSharingViews","addNewFileMenuEntry","newFileRequest","registerDavProperty","nc","oc","ocs","registerFileAction","acceptShareAction","openInFilesAction","rejectShareAction","restoreShareAction","WrappedComponent","wrap","Vue","prototype","get","customElements","define","registerFileListFilter","registerAccountFilter","FilesHeaderNoteToRecipient","instance","registerFileListHeader","note","updated","updateFolder","render","async","el","component","extend","$mount","registerNoteToRecipient","_capabilities","getCapabilities","defaultPermissions","files_sharing","default_permissions","excludeReshareFromEdit","exclude_reshare_from_edit","public","upload","federatedShareDocLink","OC","appConfig","core","federatedCloudShareDoc","defaultExpirationDate","isDefaultExpireDateEnabled","defaultExpireDate","Date","setDate","getDate","defaultInternalExpirationDate","isDefaultInternalExpireDateEnabled","defaultInternalExpireDate","defaultRemoteExpirationDateString","isDefaultRemoteExpireDateEnabled","defaultRemoteExpireDate","enforcePasswordForPublicLink","enableLinkPasswordByDefault","isDefaultExpireDateEnforced","defaultExpireDateEnforced","defaultExpireDateEnabled","isDefaultInternalExpireDateEnforced","defaultInternalExpireDateEnforced","defaultInternalExpireDateEnabled","isDefaultRemoteExpireDateEnforced","defaultRemoteExpireDateEnforced","defaultRemoteExpireDateEnabled","isRemoteShareAllowed","remoteShareAllowed","isFederationEnabled","federation","outgoing","isMailShareAllowed","sharebymail","isResharingAllowed","resharingAllowed","isPasswordForMailSharesRequired","password","enforced","shouldAlwaysShowUnique","always_show_unique","allowGroupSharing","maxAutocompleteResults","parseInt","config","minSearchStringLength","passwordPolicy","password_policy","allowCustomTokens","custom_tokens","showFederatedSharesAsInternal","showFederatedSharesToTrustedServersAsInternal","showExternalSharing","headers","getShares","shareWithMe","shared_with_me","include_tags","getRemoteShares","getPendingShares","getRemotePendingShares","getDeletedShares","attribute","scope","JSON","parse","error","logger","sharedWithOthers","pendingShares","deletedshares","filterTypes","requests","push","promise","unmounted","data","flatMap","response","index","ocsEntry","mimetype","mime","getType","item_type","item_mtime","mtime","file_target","mountpoint","item_permissions","NONE","uid_owner","displayname_owner","hasPreview","has_preview","Node","File","file_source","file_id","source","getRemoteURL","getRootPath","replace","stime","share_with","share_with_displayname","item_size","root","hide_download","favorite","tags","TAG_FAVORITE","ocsEntryToNode","reduce","acc","curr","__WEBPACK_DEFAULT_EXPORT__","getLoggerBuilder","setApp","detectUser","build","___CSS_LOADER_EXPORT___","_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default","_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default","module","version","sources","names","mappings","sourcesContent","sourceRoot","defaultDavProperties","defaultDavNamespaces","d","prop","namespace","_chunks_folder_29HuacU_mjs__WEBPACK_IMPORTED_MODULE_4__","s","davNamespaces","davProperties","namespaces","search","l","warn","startsWith","getDavProperties","join","getDavNameSpaces","keys","ns","getDefaultPropfind","getRecentSearch","lastModified","_nextcloud_auth__WEBPACK_IMPORTED_MODULE_0__","HW","_nextcloud_sharing_public__WEBPACK_IMPORTED_MODULE_2__","f","G","defaultRootPath","_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__","dC","defaultRemoteURL","getClient","remoteURL","client","webdav__WEBPACK_IMPORTED_MODULE_3__","UU","setHeaders","token","requesttoken","zo","Gu","patch","headers2","method","fetch","getFavoriteNodes","davRoot","getDirectoryContents","signal","details","includeSelf","filename","result","resultToNode","filesRoot","Error","permString","P","WRITE","CREATE","UPDATE","DELETE","parsePermissions","lastmod","crtime","creationdate","nodeData","isNaN","getTime","displayname","Number","getcontentlength","status","c","FAILED","__webpack_module_cache__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","splice","r","getter","__esModule","definition","o","enumerable","chunkId","promises","u","obj","hasOwnProperty","done","script","needAttach","scripts","createElement","charset","setAttribute","src","onScriptComplete","prev","onerror","onload","clearTimeout","timeout","doneFns","parentNode","removeChild","forEach","setTimeout","target","head","appendChild","Symbol","toStringTag","nmd","paths","children","scriptUrl","globalThis","importScripts","location","currentScript","toUpperCase","test","p","baseURI","self","href","installedChunks","installedChunkData","resolve","reject","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file